From 7f5bd919dbd2a36e74c0bc6aea836b16f884beab Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Thu, 21 Sep 2023 11:01:55 +0530 Subject: [PATCH 01/17] Notification , API : ps --- app/Config/Constants.php | 20 +- app/Config/Email.php | 12 +- app/Config/Routes.php | 18 +- app/Controllers/ApiIntegration.php | 510 ++++++++++++-------------- app/Controllers/Authentication.php | 50 ++- app/Controllers/Notifications.php | 21 ++ app/Helpers/apiIntegration_helper.php | 2 +- app/Models/NotificationModel.php | 22 ++ app/Views/auth_confirm_mail.php | 6 +- 9 files changed, 346 insertions(+), 315 deletions(-) create mode 100755 app/Controllers/Notifications.php create mode 100644 app/Models/NotificationModel.php diff --git a/app/Config/Constants.php b/app/Config/Constants.php index d3df0db2..deb54d6a 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -97,7 +97,23 @@ define('EVENT_PRIORITY_HIGH', 10); * Constants For Api Integration. */ // define('VB_APIURL', 'https://vbp.venbait.in/wp-json/wc/v3/'); -// define('VB_BOOKS', VB_APIURL.'products'); -// define('VB_CUSTOMERS', VB_APIURL.'customers'); +define('product','books'); +define('product_column', ["book_id","wp_api_product_id"]); + +define('product_child','book_images'); +define('product_child_column', ["book_id","wp_api_img_id","book_img_id"]); + +define('customer','customers'); +define('customer_column', ["customer_id","wp_api_customer_id"]); + +define('customer_child','customer_addresses'); +define('customer_child_column', ["customer_id","","customer_address_id"]); + +define('order','invoice'); +define('order_column', ["invoice_id","wp_api_order_id","invoice_child_id"]); + +define('order_child','invoiceitems'); +define('order_child_column', ["invoice_id","wp_api_line_items_id","customer_id"]); + diff --git a/app/Config/Email.php b/app/Config/Email.php index 3875d5f1..5cb4e15a 100644 --- a/app/Config/Email.php +++ b/app/Config/Email.php @@ -28,24 +28,22 @@ class Email extends BaseConfig /** * SMTP Server Address */ - public string $SMTPHost = 'bh-in-11.webhostbox.net'; + public string $SMTPHost = 'smtp.sendgrid.net'; /** * SMTP Username */ - public string $SMTPUser = 'devbook@mprkv.co.in'; - //public string $SMTPUser = 'venbalap08@gmail.com'; + public string $SMTPUser = 'apikey'; /** * SMTP Password */ - public string $SMTPPass = 'DevBook@2023'; - //public string $SMTPPass = 'sganobynfyouaxgs'; + public string $SMTPPass = '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'; /** * SMTP Port */ - public int $SMTPPort = 465; + public int $SMTPPort = 587; /** * SMTP Timeout (in seconds) @@ -60,7 +58,7 @@ class Email extends BaseConfig /** * SMTP Encryption. Either tls or ssl */ - public string $SMTPCrypto = 'ssl'; + public string $SMTPCrypto = 'tls'; /** * Enable word-wrap diff --git a/app/Config/Routes.php b/app/Config/Routes.php index c959a477..3ea0d7eb 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -101,17 +101,17 @@ $routes->post("load_details2/", "Invoice::load_details2/"); $routes->post("save_invoice/", "Invoice::save_invoice/"); $routes->get("delete_invoice/(:any)", "Invoice::delete_invoice/$1"); - - - +$routes->get('whatsapp/send/(:any)/(:any)', 'Notifications::index/$1/$2'); # Api integration Routes -$routes->group("api", function ($routes) { - // $routes->post("create_products/", "ApiIntegration::save_book_details"); - $routes->match(['put', 'post', 'get', 'delete'], 'products', 'ApiIntegration::book_api_integration'); - $routes->match(['put', 'post', 'get', 'delete'], 'customers', 'ApiIntegration::customer_api_integration'); - $routes->match(['put', 'post', 'get', 'delete'], 'orders', 'ApiIntegration::sales_api_integration'); -}); +$routes->post('api/(:any)', 'ApiIntegration::api_integration/$1'); + +// $routes->group("api", function ($routes) { +// // $routes->post("create_products/", "ApiIntegration::save_book_details"); +// // $routes->match(['put', 'post', 'get', 'delete'], 'products', 'ApiIntegration::book_api_integration'); +// // $routes->match(['put', 'post', 'get', 'delete'], 'customers', 'ApiIntegration::customer_api_integration'); +// // $routes->match(['put', 'post', 'get', 'delete'], 'orders', 'ApiIntegration::sales_api_integration'); +// }); /* * -------------------------------------------------------------------- diff --git a/app/Controllers/ApiIntegration.php b/app/Controllers/ApiIntegration.php index 15df8767..15e9fd8e 100644 --- a/app/Controllers/ApiIntegration.php +++ b/app/Controllers/ApiIntegration.php @@ -11,94 +11,155 @@ class ApiIntegration extends ResourceController { use ResponseTrait; - public function book_api_integration() - { - $request = \Config\Services::request(); - $message = ""; + public function api_integration($api_request_text) { + $this->logger->info("Api Integration : Request Text = ".$api_request_text); try { - switch ($this->request) { - case $this->request->is('put'): + $request_data = $this->request->getVar(); + $this->logger->info("Api Integration : Request data type = ".gettype($request_data)); + if(isset($request_data) && gettype($request_data) === 'object') {$request_data = [$request_data]; $this->logger->info("Api Integration : Request data type = ".gettype($request_data));} + + if(count($request_data)>0){ + $this->logger->info("Api Integration : Request data count = ".count($request_data)); + $i = 0; + $final_response = []; + foreach($request_data as $row_data) + { + $get_response[$i] = $this->call_methods((array)$row_data, $api_request_text); + $final_response[$i] = $get_response[$i]['message']; + $i++; + } + // return $this->respond(['status' => 200, 'message' => $final_response,'references'=>$get_response]); + return $this->respond(['status' => 200, 'message' => $final_response]); + }else{ + $this->logger->error('Api Integration : Err = Request data Not Found.'); + throw new \Exception('Api Request data Not Found.'); + } + + } catch (\Exception $e) { + $this->logger->error("Api Integration : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('request failed, An error occurred on line ' . $e->getline() . ' : ' . $e->getMessage()); + } + + } + + public function call_methods($row_data, $api_request_text) + { + + $parts = explode('_', $api_request_text); + $method = $parts[0]; + $table = constant($parts[1]); + $table_column = constant($parts[1].'_column'); + $table_child = constant($parts[1].'_child'); + // $table_child_column = constant($table.'_child_column'); + $this->logger->info("Api CallMethods : method name = ".$method.", table = ".$table.", table child = ".$table_child); + $this->logger->info("Api CallMethods : table = ".$table ." and its column => " .implode(",",$table_column)); + + try { + switch ($method) { + case "create": + case "update": try { - // $url = http://localhost/vb_book/api/products?id=795; - $records = (array)$this->request->getVar(); - $id = $this->request->getVar('id'); - if ($records['id'] == $id) { - $response = $this->save_book_details($records, $id); - } else { - $response = ['status' => 404, 'message' => "ID Mismatched"]; + switch ($table) { + case "books": + try { + $records = (array)$row_data; + $wordpress_book_id = $records['id']; + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Product Ref ID = ".$wordpress_book_id); + $response = $this->save_book_details($records, $wordpress_book_id); + $this->logger->info("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." response = ".$response['status']); + } catch (\Exception $e) { + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); + } + break; + case "customers": + try { + $records = (array)$row_data; + $wordpress_customer_id = $records['id']; + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Customer Ref ID = ".$wordpress_customer_id); + $response = $this->save_customer_details($records, $wordpress_customer_id); + $this->logger->info("Api CallMethods : response = ".$response['status']); + } catch (\Exception $e) { + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); + } + break; + case "invoice": + try { + $records = (array)$row_data; + $wordpress_order_id = $records['id']; + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Order Ref ID = ".$wordpress_order_id); + $response = $this->save_sales_details($records, $wordpress_order_id); + $this->logger->info("Api CallMethods : response = ".$response['status']); + } catch (\Exception $e) { + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); + } + break; + default: + $this->logger->error('Api CallMethods : Err = Invaild Api Route.'); + throw new \Exception('Api Route Not Available'); } } catch (\Exception $e) { - return $this->fail('PUT request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); + $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); + return $this->fail(ucwords($method).' request failed, An error occurred ' .$exception_ends_with); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); } break; - case $this->request->is('post'): + case 'delete': try { - // $url = http://localhost/vb_book/api/products; - $records = (array)$this->request->getVar(); - $wordpress_book_id = $records['id']; - $response = $this->save_book_details($records, $wordpress_book_id); - } catch (\Exception $e) { - return $this->fail('POST request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('get'): - try { - // $url = http://localhost/vb_book/api/products?id=795; - // $url = http://localhost/vb_book/api/products; - $id = $this->request->getVar('id'); - if ($id) { - $where = ['wp_api_product_id' => (int)$id, 'isactive' => 1]; - } else { - $where = ['isactive' => 1]; - } + $basic_message = ""; + $records = (array)$row_data; + $wordpress_refer_id = $records['id']; $api_model = new ApiIntegrationModel(); - $book_details = $api_model->setTable('books')->where($where); - $response = ['status' => 200, 'message' => "Book Details", "data" => $book_details]; - } catch (\Exception $e) { - return $this->fail('GET request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('delete'): - try { - // $url = http://localhost/vb_book/api/products?id=795; - $id = $this->request->getVar('id'); - $api_model = new ApiIntegrationModel(); - $where = ['isactive' => 1, 'wp_api_product_id' => (int)$id]; - $existing_book_data = $api_model->getData('books', $where); - if ((int)count($existing_book_data) > 0) { - $book_id = (int)$existing_book_data[0]->book_id; + $where = ['isactive' => 1, $table_column[1] => (int)$wordpress_refer_id]; + $existing_data = $api_model->getData($table, $where); + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", ".$table_column[1]." Ref ID = ".$wordpress_refer_id); + if ((int)count($existing_data) > 0) { + if(isset($existing_data[0]) && gettype($existing_data[0]) === 'object') {$existing_data[0] = (array)$existing_data[0]; $this->logger->info("Api Integration : delete ".$table." array data type = ".gettype($existing_data[0]));} + $primary_key_id = (int)$existing_data[0][$table_column[0]]; + $this->logger->info("Api CallMethods : ".$table." its PrimaryKey ID = ".$primary_key_id); $inactive_data['isactive'] = 0; - $update_where = ['isactive' => 1, 'book_id' => $book_id]; - $api_model->updateData('books', $inactive_data, $update_where); - $getExistingBookImageDetails = $api_model->getData('book_images', $update_where); - if ($getExistingBookImageDetails) { - // $update_where = ['book_id' => $book_id]; - $api_model->updateData('book_images', $inactive_data, $update_where); + $update_where = ['isactive' => 1, $table_column[0] => $primary_key_id]; + $api_model->updateData($table, $inactive_data, $update_where); + $get_existing_child_details = $api_model->getData($table_child, $update_where); + $this->logger->info("Api CallMethods : ".$table." Child Details Count = ".count($get_existing_child_details)); + if ($get_existing_child_details) { + $api_model->updateData($table_child, $inactive_data, $update_where); } + $basic_message = ucwords($table)." Details (ID = ".$primary_key_id.") and ".ucwords($table)." Child Details Are Deleted"; + }else{ + $basic_message = ucwords($table)." has No Details"; } - $response = ['status' => 200, 'message' => "Book Details and Book Images Details Are Inactived"]; + $this->logger->info("Api CallMethods : ".$basic_message); + $response = ['status' => 200, 'message' => $basic_message]; } catch (\Exception $e) { - // Handle DELETE-specific exception - return $this->fail('DELETE request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); + $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('DELETE request failed, An error occurred' . $exception_ends_with); } break; + default: throw new \Exception('Unsupported HTTP method'); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Unsupported HTTP method"); // return $this->fail('Unsupported HTTP method'); } - return $this->respond($response); + return $response; } catch (\Exception $e) { // Handle the exception, you can log it or return an error response - return $this->fail('An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - // return $this->fail($e->getMessage()); + $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + return $this->fail('An error occurred ' . $exception_ends_with); } } public function save_book_details($records, $wordpress_book_id) { - + $this->logger->info("Api SaveBookDetails : records count = ".count($records).", wordpress Product Ref ID = ".$wordpress_book_id); $api_model = new ApiIntegrationModel(); - $message = ""; + $extensive_correspondence = ""; + $basic_message = ""; $book_id = ""; if (count($records) > 0 && !empty($wordpress_book_id)) { $where = ['wp_api_product_id' => $wordpress_book_id, 'isactive' => 1]; @@ -108,11 +169,12 @@ class ApiIntegration extends ResourceController $where['book_id'] = $book_details['book_id']; } // update means bookid where condition added : else no where condition added. - $countAll = $api_model->countAll('books', $where); + $this->logger->info(($countAll) ? "Api SaveBookDetails : in wordpress product ref ID = ".$wordpress_book_id." is available on Book table and its PrimaryKey = ".$book_id : "Api SaveBookDetails : in wordpress product ref ID = ".$wordpress_book_id." Not available on Book table"); $publisher = ''; $language = ''; $attributes = $records['attributes']; + if (count($attributes) > 0) { foreach ($attributes as $att) { if (isset($att->name) && $att->name == "Publisher") { @@ -139,24 +201,31 @@ class ApiIntegration extends ResourceController $book_data['business_id'] = 1; $images = $records['images']; - $i = 0; + if ((int)$countAll == 0) { $insert_result = $api_model->insertData('books', $book_data); $last_insert_book_id = $insert_result['info']; - $message .= $insert_result['info'] ? "Book id : " . $insert_result['info'] + $extensive_correspondence .= $insert_result['info'] ? "Book id : " . $insert_result['info'] : "Err :" . $insert_result['err']; + $basic_message .= $insert_result['info'] ? " Book id : " . $insert_result['info'] : "Book details Not Inserted"; + $insert_result['info'] ? $this->logger->info("Api SaveBookDetails : Book id = ".$insert_result['info']):""; + $insert_result['err'] ? $this->logger->error("Api SaveBookDetails : Err = ".$insert_result['err']):""; } else { $last_insert_book_id = $book_id; $book_where = ['book_id' => $book_id, 'isactive' => 1, 'wp_api_product_id' => $wordpress_book_id]; $update_result = $api_model->updateData('books', $book_data, $book_where); - $message .= $update_result['info'] ? "Book id : " . $last_insert_book_id . " ( " . $update_result['info'] . ")" + $extensive_correspondence .= $update_result['info'] ? "Book id : " . $last_insert_book_id . " ( " . $update_result['info'] . ")" : " ( Err :" . $update_result['err'] . ")"; + $basic_message .= "Book id : " . $last_insert_book_id; + $update_result['info'] ? $this->logger->info("Api SaveBookDetails : Book id : " . $last_insert_book_id . " ( " . $update_result['info'] . ")"):""; + $update_result['err'] ? $this->logger->error("Api SaveBookDetails : Err = ".$update_result['err']):""; } - $book_image_data = []; - + $this->logger->info("Api SaveBookDetails : Book images count : " .count($images)); if (count($images) > 0 && $last_insert_book_id != "") { - $message .= " Its have " . count($images) . " Images ,"; + $extensive_correspondence .= " Its have " . count($images) . " Images ,"; + $basic_message .= " Its have " . count($images) . " Images"; + $this->logger->info("Api SaveBookDetails : ".$extensive_correspondence); $where = ['book_id' => (int)$last_insert_book_id, 'isactive' => 1]; $existing_images = $api_model->getData('book_images', $where); $request_images = (array)$images; @@ -174,11 +243,14 @@ class ApiIntegration extends ResourceController } if (!empty($filteringExistingImagesWpApiId)) { + $this->logger->info("Api SaveBookDetails : Incoming Images Wp Id " .implode(",",$filteringRequestedImagesWpApiId)); + $this->logger->info("Api SaveBookDetails : Existing Images Wp Id " .implode(",",$filteringExistingImagesWpApiId)); $A = $filteringExistingImagesWpApiId; $B = $filteringRequestedImagesWpApiId; $missingValues = array_diff($A, $B); //Find difference element in Existing Images only $commonElements = array_intersect($A, $B); if (!empty($missingValues)) { + $this->logger->info("Api SaveBookDetails : Missing Images Wp Id " .implode(",",$missingValues)." Are inactived"); $inactive_where = ['isactive' => 1, 'book_id' => (int)$last_insert_book_id]; $inactive_whereIn[0] = 'wp_api_img_id'; $inactive_whereIn[1] = $missingValues; @@ -195,7 +267,9 @@ class ApiIntegration extends ResourceController $whereIn = null; } $lastestActiveBookImageData = $api_model->getData('book_images', $where, $whereIn); - + $this->logger->info("Api SaveBookDetails : lastest Active Book Image Data Count " .count($lastestActiveBookImageData)); + $book_image_data = []; + $i = 0; foreach ($images as $img) { $bookImgId = null; // Iterate through the array and find the 'book_img_id' based on 'wp_api_img_id' @@ -214,106 +288,30 @@ class ApiIntegration extends ResourceController $book_image_data[$i]['isactive'] = 1; $book_image_data[$i]['wp_api_img_id'] = $img->id; $book_image_data[$i]['book_img_id'] = $bookImgId; + $this->logger->info("Api SaveBookDetails : Image Data = $i "); $i++; } // image loop closed - $message .= (!empty($book_image_data) ? $api_model->insertAndUpdateChildDetails($book_image_data, 'book_images', 'book_img_id') : []); + $extensive_correspondence .= (!empty($book_image_data) ? $api_model->insertAndUpdateChildDetails($book_image_data, 'book_images', 'book_img_id') : []); + $this->logger->info("Api SaveBookDetails : ".$extensive_correspondence); } //image count closed - $response = ['status' => 200, 'message' => $message]; + else{ + $this->logger->error("Api SaveBookDetails : Err = Image Data Not Found"); + } + $response = ['status' => 200, 'message' => $basic_message ,'indetails' => $extensive_correspondence]; } //if cond. closed else { - $response = ['status' => 204, 'message' => 'Data No Found']; + $this->logger->error("Api SaveBookDetails : Err = Data Not Found"); + $response = ['status' => 204, 'message' => 'Data Not Found']; } return $response; } - public function customer_api_integration() - { - $request = \Config\Services::request(); - $message = ""; - try { - switch ($this->request) { - case $this->request->is('put'): - try { - // $url = http://localhost/vb_book/api/customers?id=795; - $records = (array)$this->request->getVar(); - $id = $this->request->getVar('id'); - if ($records['id'] == $id) { - $response = $this->save_customer_details($records, $id); - } else { - $response = ['status' => 404, 'message' => "ID Mismatched"]; - } - } catch (\Exception $e) { - return $this->fail('PUT request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $this->request->is('post'): - try { - // $url = http://localhost/vb_book/api/customers; - $records = (array)$this->request->getVar(); - $wordpress_customer_id = $records['id']; - $response = $this->save_customer_details($records, $wordpress_customer_id); - } catch (\Exception $e) { - return $this->fail('POST request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('get'): - try { - // $url = http://localhost/vb_book/api/customers?id=795; - // $url = http://localhost/vb_book/api/customers; - $id = $this->request->getVar('id'); - if ($id) { - $where = ['wp_api_customer_id' => (int)$id, 'isactive' => 1]; - } else { - $where = ['isactive' => 1]; - } - $api_model = new ApiIntegrationModel(); - $customer_details = $api_model->setTable('customers')->where($where); - $response = ['status' => 200, 'message' => "Customer Details", "data" => $customer_details]; - } catch (\Exception $e) { - return $this->fail('GET request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('delete'): - try { - // $url = http://localhost/vb_book/api/customers?id=795; - $id = $this->request->getVar('id'); - $api_model = new ApiIntegrationModel(); - $where = ['isactive' => 1, 'wp_api_customer_id' => (int)$id]; - $existing_customer_data = $api_model->getData('customers', $where); - if ((int)count($existing_customer_data) > 0) { - $customer_id = (int)$existing_customer_data[0]->customer_id; - $inactive_data['isactive'] = 0; - $update_where = ['isactive' => 1, 'customer_id' => $customer_id]; - $api_model->updateData('customers', $inactive_data, $update_where); - $getExistingCustomerImageDetails = $api_model->getData('customer_addresses', $update_where); - if ($getExistingCustomerImageDetails) { - - $api_model->updateData('customer_addresses', $inactive_data, $update_where); - } - } - $response = ['status' => 200, 'message' => "customer Details and Customer Addresses Details Are Inactived"]; - } catch (\Exception $e) { - // Handle DELETE-specific exception - return $this->fail('DELETE request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - default: - throw new \Exception('Unsupported HTTP method'); - // return $this->fail('Unsupported HTTP method'); - } - return $this->respond($response); - } catch (\Exception $e) { - // Handle the exception, you can log it or return an error response - return $this->fail('An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - // return $this->fail($e->getMessage()); - } - } - public function save_customer_details($records, $wordpress_customer_id) { - + $this->logger->info("Api SaveCustomerDetails : records count = ".count($records).", wordpress Customer Ref ID = ".$wordpress_customer_id); $api_model = new ApiIntegrationModel(); - $message = ""; + $extensive_correspondence = ""; + $basic_message = ""; $customer_id = ""; if (count($records) > 0 && !empty($wordpress_customer_id)) { $where = ['wp_api_customer_id' => $wordpress_customer_id, 'isactive' => 1]; @@ -322,7 +320,9 @@ class ApiIntegration extends ResourceController $customer_id = $customer_details['customer_id']; $where['customer_id'] = $customer_details['customer_id']; } + $countAll = $api_model->countAll('customers', $where); + $this->logger->info(($countAll) ? "Api SaveCustomerDetails : in wordpress customer ref ID = ".$wordpress_customer_id." is available on customer table and its PrimaryKey = ".$customer_id : "Api SaveBookDetails : in wordpress Customer ref ID = ".$wordpress_customer_id." Not available on Customer table"); $customer_data['first_name'] = $records['first_name']; $customer_data['last_name'] = $records['last_name']; @@ -339,27 +339,36 @@ class ApiIntegration extends ResourceController if ((int)$countAll == 0) { $insert_result = $api_model->insertData('customers', $customer_data); $last_insert_customer_id = $insert_result['info']; - $message .= $insert_result['info'] ? "Customer id : " . $insert_result['info'] + $extensive_correspondence .= $insert_result['info'] ? "Customer id : " . $insert_result['info'] : "Err :" . $insert_result['err']; + $basic_message .= $insert_result['info'] ? " Customer id : " . $insert_result['info'] : "Customer details Not Inserted"; + $insert_result['info'] ? $this->logger->info("Api SaveCustomerDetails : Customer id = ".$insert_result['info']):""; + $insert_result['err'] ? $this->logger->error("Api SaveCustomerDetails : Err = ".$insert_result['err']):""; } else { $last_insert_customer_id = $customer_id; $customer_where = ['customer_id' => $customer_id, 'isactive' => 1, 'wp_api_customer_id' => $wordpress_customer_id]; $update_result = $api_model->updateData('customers', $customer_data, $customer_where); - $message .= $update_result['info'] ? "Customer id : " . $last_insert_customer_id . " ( " . $update_result['info'] . ")" + $extensive_correspondence .= $update_result['info'] ? "Customer id : " . $last_insert_customer_id . " ( " . $update_result['info'] . ")" : " ( Err :" . $update_result['err'] . ")"; + $basic_message .= "Customer id : " . $last_insert_customer_id; + $update_result['info'] ? $this->logger->info("Api SaveCustomerDetails : Customer id : " . $last_insert_customer_id . " ( " . $update_result['info'] . ")"):""; + $update_result['err'] ? $this->logger->error("Api SaveCustomerDetails : Err = ".$update_result['err']):""; } - + $i = 0; $customer_billing_address_data = []; $j = 0; $customer_shipping_address_data = []; if(isset($billing) && gettype($billing) === 'object') {$billing = [$billing];} if(isset($shipping) && gettype($shipping) === 'object') {$shipping = [$shipping];} + $this->logger->info("Api SaveCustomerDetails : billing count : " .count($billing)); + $this->logger->info("Api SaveCustomerDetails : shipping count : " .count($shipping)); // echo "Customer ID : ".$last_insert_customer_id." have Billing address = ".count($billing)." and Shipping address = ".count($shipping)."
"; if (count($billing) > 0 && $last_insert_customer_id != "") { - $message .= " Its have " . count($billing) . " Billing address ,"; - + $extensive_correspondence .= " Its have " . count($billing) . " Billing address ,"; + $basic_message .= " Its have " . count($billing) . " Billing address ,"; + $this->logger->info("Api SaveCustomerDetails : ".$extensive_correspondence); $where = ['customer_id' => (int)$last_insert_customer_id, 'isactive' => 1, 'address_type'=>1]; $existing_billing = $api_model->getData('customer_addresses', $where); $request_billing = (array)$billing; @@ -377,11 +386,14 @@ class ApiIntegration extends ResourceController } if (!empty($filteringExistingBillingAddress)) { + $this->logger->info("Api SaveCustomerDetails : Incoming billing " .implode(",",$filteringExistingBillingAddress)); + $this->logger->info("Api SaveCustomerDetails : Existing billing " .implode(",",$filteringRequestedBillingAddress)); $A = $filteringExistingBillingAddress; $B = $filteringRequestedBillingAddress; $missingBillingValues = array_diff($A, $B); //Find difference element in Existing Images only $commonBillingElements = array_intersect($A, $B); if (!empty($missingBillingValues)) { + $this->logger->info("Api SaveCustomerDetails : Missing billing " .implode(",",$missingBillingValues)." Are inactived"); $inactive_where = ['isactive' => 1, 'customer_id' => (int)$last_insert_customer_id,'address_type'=>1]; $inactive_whereIn[0] = 'address_1'; $inactive_whereIn[1] = $missingBillingValues; @@ -398,7 +410,7 @@ class ApiIntegration extends ResourceController $whereIn = null; } $lastestActiveBillingAdressData = $api_model->getData('customer_addresses', $where, $whereIn); - + $this->logger->info("Api SaveCustomerDetails : lastest Active billing Data Count " .count($lastestActiveBillingAdressData)); foreach ($billing as $bill) { $billingAddressId = null; if ($bill->first_name != '') { @@ -424,17 +436,21 @@ class ApiIntegration extends ResourceController $customer_billing_address_data[$i]['email'] = isset($bill->email) ? $bill->email : ''; $customer_billing_address_data[$i]['mobile_no'] = isset($bill->phone) ? $bill->phone : ''; $customer_billing_address_data[$i]['customer_address_id'] = $billingAddressId; + $this->logger->info("Api SaveCustomerDetails : Billing address has a value and Inserted "); $i++; // echo "       Billing address has a value and Inserted ".$i."
"; }else{ + $this->logger->info("Api SaveCustomerDetails : Billing address has no value "); // echo "       Keys are available but Billing address has no value;
"; } } - $message .= (!empty($customer_billing_address_data) ? $api_model->insertAndUpdateChildDetails($customer_billing_address_data, 'customer_addresses', 'customer_address_id') : []); + $extensive_correspondence .= (!empty($customer_billing_address_data) ? $api_model->insertAndUpdateChildDetails($customer_billing_address_data, 'customer_addresses', 'customer_address_id') : []); + $this->logger->info("Api SaveCustomerDetails : ".$extensive_correspondence); } if (count($shipping) > 0 && $last_insert_customer_id != "") { - $message .= " Its have " . count($shipping) . " Shipping address ,"; + $extensive_correspondence .= " Its have " . count($shipping) . " Shipping address ,"; + $basic_message .= " Its have " . count($shipping) . " Shipping address ."; $where = ['customer_id' => (int)$last_insert_customer_id, 'isactive' => 1, 'address_type'=>2]; $existing_shipping = $api_model->getData('customer_addresses', $where); $request_shipping = (array)$shipping; @@ -452,6 +468,8 @@ class ApiIntegration extends ResourceController } if (!empty($filteringExistingShippingAddress)) { + $this->logger->info("Api SaveCustomerDetails : Incoming shipping " .implode(",",$filteringExistingShippingAddress)); + $this->logger->info("Api SaveCustomerDetails : Existing shipping " .implode(",",$filteringExistingShippingAddress)); $A = $filteringExistingShippingAddress; $B = $filteringRequestedShippingAddress; $missingShippingValues = array_diff($A, $B); //Find difference element in Existing Images only @@ -461,6 +479,7 @@ class ApiIntegration extends ResourceController $inactive_whereIn[0] = 'address_1'; $inactive_whereIn[1] = $missingShippingValues; $api_model->inactiveMissingDetails('customer_addresses', $inactive_where, $inactive_whereIn); + $this->logger->info("Api SaveCustomerDetails : Missing Shipping " .implode(",",$missingShippingValues)." Are inactived"); } } } @@ -473,6 +492,7 @@ class ApiIntegration extends ResourceController $whereIn = null; } $lastestActiveShippingAdressData = $api_model->getData('customer_addresses', $where, $whereIn); + $this->logger->info("Api SaveCustomerDetails : lastest Active Shipping Data Count " .count($lastestActiveShippingAdressData)); foreach ($shipping as $ship) { $shippingAddressId = null; @@ -499,108 +519,34 @@ class ApiIntegration extends ResourceController $customer_shipping_address_data[$j]['customer_id'] = $last_insert_customer_id; $customer_shipping_address_data[$j]['address_type'] = 2; $customer_shipping_address_data[$j]['customer_address_id'] = $shippingAddressId; + $this->logger->info("Api SaveCustomerDetails : Shipping address has a value and Inserted "); $j++; // echo "        Shipping address has a value and Inserted ".$j."
"; } else{ + $this->logger->info("Api SaveCustomerDetails : Shipping address has no value "); // echo "        Keys are available but Shipping address has no value
"; } } - $message .= (!empty($customer_shipping_address_data) ? $api_model->insertAndUpdateChildDetails($customer_shipping_address_data, 'customer_addresses', 'customer_address_id') : []); + $extensive_correspondence .= (!empty($customer_shipping_address_data) ? $api_model->insertAndUpdateChildDetails($customer_shipping_address_data, 'customer_addresses', 'customer_address_id') : []); + $this->logger->info("Api SaveCustomerDetails : ".$extensive_correspondence); + }else{ + $this->logger->error("Api SaveCustomerDetails : Err = Address Data Not Found"); } - $response = ['status' => 200, 'message' => $message]; + $response = ['status' => 200, 'message' => $basic_message ,'indetails' => $extensive_correspondence]; } //if cond. closed else { + $this->logger->error("Api SaveCustomerDetails : Err = Data Not Found"); $response = ['status' => 204, 'message' => 'Data No Found']; } return $response; } - public function sales_api_integration() - { - $request = \Config\Services::request(); - $message = ""; - try { - switch ($this->request) { - case $this->request->is('put'): - try { - // $url = http://localhost/vb_book/api/orders?id=795; - $records = (array)$this->request->getVar(); - $id = $this->request->getVar('id'); - if ($records['id'] == $id) { - $response = $this->save_sales_details($records, $id); - } else { - $response = ['status' => 404, 'message' => "ID Mismatched"]; - } - } catch (\Exception $e) { - return $this->fail('PUT request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $this->request->is('post'): - try { - // $url = http://localhost/vb_book/api/orders; - $records = (array)$this->request->getVar(); - $wordpress_order_id = $records['id']; - $response = $this->save_sales_details($records, $wordpress_order_id); - } catch (\Exception $e) { - return $this->fail('POST request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('get'): - try { - // $url = http://localhost/vb_book/api/orders?id=795; - // $url = http://localhost/vb_book/api/orders; - $id = $this->request->getVar('id'); - if ($id) { - $where = ['wp_api_order_id' => (int)$id, 'isactive' => 1]; - } else { - $where = ['isactive' => 1]; - } - $api_model = new ApiIntegrationModel(); - $invoice_details = $api_model->setTable('invoice')->where($where); - $response = ['status' => 200, 'message' => "Invoice Details", "data" => $invoice_details]; - } catch (\Exception $e) { - return $this->fail('GET request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - case $request->is('delete'): - try { - // $url = http://localhost/vb_book/api/orders?id=795; - $id = $this->request->getVar('id'); - $api_model = new ApiIntegrationModel(); - $where = ['isactive' => 1, 'wp_api_order_id' => (int)$id]; - $existing_invoice_data = $api_model->getData('invoice', $where); - if ((int)count($existing_invoice_data) > 0) { - $invoice_id = (int)$existing_invoice_data[0]->invoice_id; - $inactive_data['isactive'] = 0; - $update_where = ['isactive' => 1, 'invoice_id' => $invoice_id]; - $api_model->updateData('invoice', $inactive_data, $update_where); - $getExistingInvoiceItemsDetails = $api_model->getData('invoiceitems', $update_where); - if ($getExistingInvoiceItemsDetails) { - $api_model->updateData('invoiceitems', $inactive_data, $update_where); - } - } - $response = ['status' => 200, 'message' => "Invoice Details and Invoice Items Details Are Inactived"]; - } catch (\Exception $e) { - // Handle DELETE-specific exception - return $this->fail('DELETE request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - } - break; - default: - throw new \Exception('Unsupported HTTP method'); - // return $this->fail('Unsupported HTTP method'); - } - return $this->respond($response); - } catch (\Exception $e) { - // Handle the exception, you can log it or return an error response - return $this->fail('An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); - // return $this->fail($e->getMessage()); - } - } - public function save_sales_details($records, $wordpress_order_id){ + $this->logger->info("Api SaveSalesDetails : records count = ".count($records).", wordpress Order Ref ID = ".$wordpress_order_id); + $basic_message=""; $api_model = new ApiIntegrationModel(); - $message = ""; + $extensive_correspondence = ""; $invoice_id = ""; if (count($records) > 0 && !empty($wordpress_order_id)) { $where = ['wp_api_order_id' => $wordpress_order_id, 'isactive' => 1]; @@ -610,6 +556,7 @@ class ApiIntegration extends ResourceController $where['invoice_id'] = (int)$invoice_id; } $countAll = $api_model->countAll('invoice', $where); + $this->logger->info(($countAll) ? "Api SaveSalesDetails : in wordpress product ref ID = ".$wordpress_order_id." is available on Invoice table and its PrimaryKey = ".$invoice_id : "Api SaveSalesDetails : in wordpress order ref ID = ".$wordpress_order_id." Not available on Invoice table"); $billing_addr = "";$shipping_addr = ""; $lineitems_array = []; $billing_array = []; $shipping_array = []; @@ -669,22 +616,31 @@ class ApiIntegration extends ResourceController if ((int)$countAll == 0) { $insert_result = $api_model->insertData('invoice', $invoice_data); $last_insert_invoice_id = $insert_result['info']; - $message .= $insert_result['info'] ? "Invoice id : " . $insert_result['info'] + $extensive_correspondence .= $insert_result['info'] ? "Invoice id : " . $insert_result['info'] : "Err :" . $insert_result['err']; + $basic_message .= $insert_result['info'] ? " Invoice id : " . $insert_result['info'] : "Invoice details Not Inserted"; + $insert_result['info'] ? $this->logger->info("Api SaveSalesDetails : Invoice id = ".$insert_result['info']):""; + $insert_result['err'] ? $this->logger->error("Api SaveSalesDetails : Err = ".$insert_result['err']):""; } else { $last_insert_invoice_id = $invoice_id; $customer_where = ['invoice_id' => $invoice_id, 'isactive' => 1, 'wp_api_order_id' => $wordpress_order_id]; $update_result = $api_model->updateData('invoice', $invoice_data, $customer_where); - $message .= $update_result['info'] ? "Invoice id : " . $last_insert_invoice_id . " ( " . $update_result['info'] . ")" + $extensive_correspondence .= $update_result['info'] ? "Invoice id : " . $last_insert_invoice_id . " ( " . $update_result['info'] . ")" : " ( Err :" . $update_result['err'] . ")"; + $basic_message .= "Invoice id : " . $last_insert_invoice_id; + $update_result['info'] ? $this->logger->info("Api SaveSalesDetails : Invoice id : " . $last_insert_invoice_id . " ( " . $update_result['info'] . ")"):""; + $update_result['err'] ? $this->logger->error("Api SaveSalesDetails : Err = ".$update_result['err']):""; } $line_item_data = []; $shipping_line_item_data = []; $i = 0;$j=0; + $this->logger->info("Api SaveSalesDetails : Invoice items count : " .count($lineitems_array)); if (count($lineitems_array) > 0 && $last_insert_invoice_id != "") { - $message .= " Its have " . count($lineitems_array) . " LineItems ,"; - $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1]; + $extensive_correspondence .= " Its have " . count($lineitems_array) . " LineItems ,"; + $basic_message .= " Its have " . count($lineitems_array) . " LineItems"; + $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); + $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1, 'quantity != '=>0]; $existing_invoiceitem = $api_model->getData('invoiceitems', $where); $request_invoiceitem = (array)$lineitems_array; @@ -701,11 +657,14 @@ class ApiIntegration extends ResourceController } if (!empty($filteringExistingInvoiceItemWpApiId)) { + $this->logger->info("Api SaveSalesDetails : Incoming InvoiceItem Wp Id " .implode(",",$filteringRequestedInvoiceItemWpApiId)); + $this->logger->info("Api SaveSalesDetails : Existing InvoiceItem Wp Id " .implode(",",$filteringExistingInvoiceItemWpApiId)); $A = $filteringExistingInvoiceItemWpApiId; $B = $filteringRequestedInvoiceItemWpApiId; $missingValues = array_diff($A, $B); //Find difference element in Existing Images only $commonElements = array_intersect($A, $B); if (!empty($missingValues)) { + $this->logger->info("Api SaveSalesDetails : Missing InvoiceItem Wp Id " .implode(",",$missingValues)." Are inactived"); $inactive_where = ['isactive' => 1, 'invoice_id' => (int)$last_insert_invoice_id]; $inactive_whereIn[0] = 'wp_api_line_items_id'; $inactive_whereIn[1] = $missingValues; @@ -714,7 +673,7 @@ class ApiIntegration extends ResourceController } } - $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1]; + $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1, 'quantity != '=>0]; if (!empty($commonElements)) { $whereIn[0] = 'wp_api_line_items_id'; $whereIn[1] = $commonElements; @@ -722,6 +681,7 @@ class ApiIntegration extends ResourceController $whereIn = null; } $lastestActiveInvoiceitemsData = $api_model->getData('invoiceitems', $where, $whereIn); + $this->logger->info("Api SaveSalesDetails : lastest Active Invoice Items Data Count " .count($lastestActiveInvoiceitemsData)); foreach ($lineitems_array as $ii) { $invoiceItemsId = null; @@ -747,17 +707,24 @@ class ApiIntegration extends ResourceController $line_item_data[$i]['invoice_child_id'] = $invoiceItemsId; $line_item_data[$i]['wp_api_line_items_id'] = $ii->id; $line_item_data[$i]['invoice_id'] = $last_insert_invoice_id; + $this->logger->info("Api SaveSalesDetails : Invoiceitem Data inx = $i "); $i++; } // line item loop closed - $message .= (!empty($line_item_data) ? $api_model->insertAndUpdateChildDetails($line_item_data, 'invoiceitems', 'invoice_child_id') : []); - + $extensive_correspondence .= (!empty($line_item_data) ? $api_model->insertAndUpdateChildDetails($line_item_data, 'invoiceitems', 'invoice_child_id') : []); + $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); } + else{ + $this->logger->error("Api SaveSalesDetails : Err = Invoice items Data Not Found"); + } $shipping_lineitems_array = $records['shipping_lines']; + $this->logger->info("Api SaveSalesDetails : Shipping Invoice items count : " .count($shipping_lineitems_array)); if (count($shipping_lineitems_array) > 0 && $last_insert_invoice_id != "") { - $message .= " Its have " . count($shipping_lineitems_array) . " shipping details ,"; - $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1]; - $existing_shipping_invoiceitem = $api_model->getData('invoiceitems', $where); + $extensive_correspondence .= " Its have " . count($shipping_lineitems_array) . " shipping details ,"; + $basic_message .= " and Its have " . count($shipping_lineitems_array) . " shipping details"; + $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); + $shipping_where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1,'quantity'=>0]; + $existing_shipping_invoiceitem = $api_model->getData('invoiceitems', $shipping_where); $request_shipping_invoiceitem = (array)$shipping_lineitems_array; $filteringExistingShippingInvoiceItemWpApiId = []; @@ -773,11 +740,15 @@ class ApiIntegration extends ResourceController } if (!empty($filteringExistingShippingInvoiceItemWpApiId)) { + $this->logger->info("Api SaveSalesDetails : Incoming InvoiceItem (Shipping) Wp Id " .implode(",",$filteringRequestedShippingInvoiceItemWpApiId)); + $this->logger->info("Api SaveSalesDetails : Existing InvoiceItem (Shipping) Wp Id " .implode(",",$filteringExistingShippingInvoiceItemWpApiId)); $A = $filteringExistingShippingInvoiceItemWpApiId; $B = $filteringRequestedShippingInvoiceItemWpApiId; + $missingShippingValues = array_diff($A, $B); //Find difference element in Existing Images only $commonShippingElements = array_intersect($A, $B); if (!empty($missingShippingValues)) { + $this->logger->info("Api SaveSalesDetails : Missing InvoiceItem (shipping) Wp Id " .implode(",",$missingShippingValues)." Are inactived"); $inactive_where = ['isactive' => 1, 'invoice_id' => (int)$last_insert_invoice_id]; $inactive_whereIn[0] = 'wp_api_line_items_id'; $inactive_whereIn[1] = $missingShippingValues; @@ -786,7 +757,7 @@ class ApiIntegration extends ResourceController } } - $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1]; + $where = ['invoice_id' => (int)$last_insert_invoice_id, 'isactive' => 1,'quantity'=>0]; if (!empty($commonShippingElements)) { $whereIn[0] = 'wp_api_line_items_id'; $whereIn[1] = $commonShippingElements; @@ -794,6 +765,7 @@ class ApiIntegration extends ResourceController $whereIn = null; } $lastestActiveShippingInvoiceitemsData = $api_model->getData('invoiceitems', $where, $whereIn); + $this->logger->info("Api SaveSalesDetails : lastest Active Invoice Item (shipping) Data Count " .count($lastestActiveShippingInvoiceitemsData)); foreach ($shipping_lineitems_array as $sii) { $shippingInvoiceItemsId = null; @@ -819,17 +791,23 @@ class ApiIntegration extends ResourceController $shipping_line_item_data[$j]['invoice_child_id'] = $shippingInvoiceItemsId; $shipping_line_item_data[$j]['wp_api_line_items_id'] = $sii->id; $shipping_line_item_data[$j]['invoice_id'] = $last_insert_invoice_id; + $this->logger->info("Api SaveSalesDetails : Invoiceitem Data For Shipping inx = $j "); $j++; } // line item loop closed - $message .= (!empty($shipping_line_item_data) ? $api_model->insertAndUpdateChildDetails($shipping_line_item_data, 'invoiceitems', 'invoice_child_id') : []); + $extensive_correspondence .= (!empty($shipping_line_item_data) ? $api_model->insertAndUpdateChildDetails($shipping_line_item_data, 'invoiceitems', 'invoice_child_id') : []); + $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); } - $response = ['status' => 200, 'message' => $message]; + else{ + $this->logger->error("Api SaveSalesDetails : Err = Invoice items (Shipping) Data Not Found"); + } + $response = ['status' => 200, 'message' => $basic_message ,'indetails' => $extensive_correspondence]; } else { + $this->logger->error("Api SaveSalesDetails : Err = Data Not Found"); $response = ['status' => 204, 'message' => 'Data No Found']; } return $response; } - -} + +} \ No newline at end of file diff --git a/app/Controllers/Authentication.php b/app/Controllers/Authentication.php index 8085d39a..699f3af7 100755 --- a/app/Controllers/Authentication.php +++ b/app/Controllers/Authentication.php @@ -84,7 +84,7 @@ class Authentication extends BaseController public function auth_confirm_mail() { // Get the email address from the request - $email = $this->request->getGet('email'); + $mail_id = $this->request->getGet('email'); $url_domain = base_url(); // Validate the email address @@ -99,43 +99,32 @@ class Authentication extends BaseController // Check if the email exists in the database $auth_model = new AuthenticationModel(); - // $user = $auth_model->where('email', $email)->first(); - $where = ['email' => $email, 'isactive' => 1]; + // $user = $auth_model->where('email', $mail_id)->first(); + $where = ['email' => $mail_id, 'isactive' => 1]; $user = $auth_model->where($where)->first(); if (!$user) { $this->logger->error('There is no user enteries against given mail'); return redirect()->back()->withInput()->with('error', 'There is no user enteries against given mail'); } else { - $data['email'] = $email; + $data['mail_id'] = $mail_id; // Generate a unique token for password reset $token = bin2hex(random_bytes(32)); - $content = "Click the link below to reset your password : " . $url_domain . "reset_password?email=" . $email . "&token=" . $token; - // $email = \Config\Services::email(); - // $email->setTo('sanjeev.p@venbainfotech.com'); - // $email->setFrom('venbalap08@gmail.com', 'BB-VBP'); - // $email->setSubject('BB-VBP Password Reset'); - // $email->setMessage($content); + $content = "Click the link below to reset your password : " . $url_domain . "auth_reset_password?email=" . $mail_id . "&token=" . $token; + $email = \Config\Services::email(); + // $recipient = 'venbalap08@gmail.com'; + $recipient = $mail_id; - - - // $email->setTo('venbalap08@gmail.com'); - // $email->setFrom('venbalap08@gmail.com'); - // $email->setSubject('Password Reset Testing'); - // $email->setMessage('ZXER'); - - - // if ($email->send()) { - // // Email sent successfully - // return view('auth_confirm_mail', $data); - // } else { - // $this->logger->error('Email Not Sended,Try Again'); - // return redirect()->back()->withInput()->with('error', 'Email Not Sended,Try Again'); - // } + // Compose the email + $email->setTo($recipient); + $email->setFrom('no-reply@tripapprovaltool.com', 'BB-VBP'); + $email->setSubject('Email Notification'); + // $email->setMessage('This is a notification email from CodeIgniter.'); + $email->setMessage($content); $update_token['reset_link'] = $token; $auth_model->update($user['user_id'], $update_token); - $data['link'] = $url_domain . "auth_reset_password?email=" . $email . "&token=" . $token; + $data['link'] = $url_domain . "auth_reset_password?email=" . $mail_id . "&token=" . $token; // Retrieve flashed session data $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); @@ -144,7 +133,14 @@ class Authentication extends BaseController // Here, we'll use the default View class for demonstration purposes $data['successMessage'] = $successMessage; $data['validationErrors'] = $validationErrors; - return view('auth_confirm_mail', $data); + // return view('auth_confirm_mail', $data); + if ($email->send()) { + // Email sent successfully + return view('auth_confirm_mail', $data); + } else { + $this->logger->error('Email Not Sended,Try Again'); + return redirect()->back()->withInput()->with('error', 'Email Not Sended,Try Again'); + } } } diff --git a/app/Controllers/Notifications.php b/app/Controllers/Notifications.php new file mode 100755 index 00000000..00497dc9 --- /dev/null +++ b/app/Controllers/Notifications.php @@ -0,0 +1,21 @@ +to($whatsappLink); + + } + +} diff --git a/app/Helpers/apiIntegration_helper.php b/app/Helpers/apiIntegration_helper.php index c6bf5112..88096f2d 100644 --- a/app/Helpers/apiIntegration_helper.php +++ b/app/Helpers/apiIntegration_helper.php @@ -1,5 +1,5 @@ insert($data); + } else { + // Update existing record + return $this->update($id, $data); + } + } + +} + diff --git a/app/Views/auth_confirm_mail.php b/app/Views/auth_confirm_mail.php index 7af74836..af6a618c 100644 --- a/app/Views/auth_confirm_mail.php +++ b/app/Views/auth_confirm_mail.php @@ -103,12 +103,12 @@

Success !

- - Alternative So Click here + Back to Home + From b84644a86c749a6c5aaf1d44b70bd8d06849c798 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Thu, 21 Sep 2023 11:02:53 +0530 Subject: [PATCH 02/17] Resolved : ps --- vendor/bin/phpunit | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 vendor/bin/phpunit diff --git a/vendor/bin/phpunit b/vendor/bin/phpunit old mode 100644 new mode 100755 From a7656dd7a18935b43779b073c2c4b41e124df521 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Thu, 21 Sep 2023 11:03:28 +0530 Subject: [PATCH 03/17] Env file : ps --- .env | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 4b786128..cbdbd257 100644 --- a/.env +++ b/.env @@ -30,10 +30,14 @@ CI_ENVIRONMENT = development # DATABASE #-------------------------------------------------------------------- - database.default.hostname = 127.0.0.1 - database.default.database = bbbp_uat - database.default.username = root - database.default.password = '' +# database.default.hostname = 127.0.0.1 +# database.default.database = bbbp_uat +# database.default.username = root +# database.default.password = '' + database.default.hostname = 119.18.54.85 + database.default.database = venbaehn_bbbooks + database.default.username = venbaehn_bbooks + database.default.password = '(B$j&KrV@F9f' database.default.DBDriver = MySQLi database.default.DBPrefix = database.default.port = 3306 From be14f376f64052138522a4ff783656691045075f Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Thu, 21 Sep 2023 11:09:32 +0530 Subject: [PATCH 04/17] Merge fixes : ps --- app/Controllers/Customer.php | 100 ----------------------------------- 1 file changed, 100 deletions(-) diff --git a/app/Controllers/Customer.php b/app/Controllers/Customer.php index fd494bd5..a2931183 100644 --- a/app/Controllers/Customer.php +++ b/app/Controllers/Customer.php @@ -191,104 +191,4 @@ class Customer extends BaseController $address_details = $model->where($where)->findAll(); return $address_details; } - ## ApiIntegration For Customer. - public function apiintegration() - { - helper('apiIntegration'); - helper('session'); - $session_bid = get_business_id(); - $session_uid = get_logged_user_id(); - $response = perform_http_request('GET', VB_CUSTOMERS); - $message = ""; - if (count($response['response']) > 0) { - //$message = "Reponse Count : ".count($response['response'])."
"; - echo "Note : This For CrossCheck Purpose 1ly
"; - echo "Total Customer API Reponse Count : " . count($response['response']) . "
"; - $CustomerModel = new CustomerModel(); - $x=0; - foreach ($response['response'] as $row) { - $insertion_data['first_name'] = $row->first_name; - $insertion_data['last_name'] = $row->last_name; - $insertion_data['type'] = $row->role; - $insertion_data['email'] = $row->email; - // $insertion_data['profile_picture'] = $row->avatar_url; - $insertion_data['mode'] = 'online'; - $insertion_data['created_by'] = $session_uid; - $insertion_data['business_id'] = $session_bid; - $billing = $row->billing; - $shipping = $row->shipping; - $CustomerModel->insert($insertion_data); - $lastInsertId = $CustomerModel->insertID(); - $insertion_baddress_data = [];$insertion_saddress_data = []; - $i = 0; $j = 0; - - if(isset($billing) && gettype($billing) === 'object') {$billing = [$billing];} - if(isset($shipping) && gettype($shipping) === 'object') {$shipping = [$shipping];} - echo "Customer ID : ".$lastInsertId." have Billing address = ".count($billing)." and Shipping address = ".count($shipping)."
"; - if (count($billing) > 0) { - foreach ($billing as $bill) { - if ($bill->first_name !== '') { - $insertion_baddress_data[$i]['first_name'] = $bill->first_name; - $insertion_baddress_data[$i]['last_name'] = $bill->last_name; - $insertion_baddress_data[$i]['company'] = $bill->company; - $insertion_baddress_data[$i]['address_1'] = $bill->address_1; - $insertion_baddress_data[$i]['address_2'] = $bill->address_2; - $insertion_baddress_data[$i]['city'] = $bill->city; - $insertion_baddress_data[$i]['state'] = $bill->state; - $insertion_baddress_data[$i]['country'] = $bill->country; - $insertion_baddress_data[$i]['postal_code'] = $bill->postcode; - $insertion_baddress_data[$i]['customer_id'] = $lastInsertId; - $insertion_baddress_data[$i]['address_type'] = 1; - $insertion_baddress_data[$i]['created_by'] = $session_uid; - $insertion_baddress_data[$i]['email'] = isset($bill->email) ? $bill->email : ''; - $insertion_baddress_data[$i]['mobile_no'] = isset($bill->phone) ? $bill->phone : ''; - $i++; - echo "       Billing address has a value and Inserted ".$i."
"; - }else{ - echo "       Keys are available but Billing address has no value;
"; - } - } - (!empty($insertion_baddress_data) ? $CustomerModel->insertAddressBatch($insertion_baddress_data) : ""); - } - if (count($shipping) > 0) { - foreach ($shipping as $ship) { - if ($ship->first_name !== '') { - $insertion_saddress_data[$j]['first_name'] = $ship->first_name; - $insertion_saddress_data[$j]['last_name'] = $ship->last_name; - $insertion_saddress_data[$j]['company'] = $ship->company; - $insertion_saddress_data[$j]['address_1'] = $ship->address_1; - $insertion_saddress_data[$j]['address_2'] = $ship->address_2; - $insertion_saddress_data[$j]['city'] = $ship->city; - $insertion_saddress_data[$j]['state'] = $ship->state; - $insertion_saddress_data[$j]['country'] = $ship->country; - $insertion_saddress_data[$j]['postal_code'] = $ship->postcode; - $insertion_saddress_data[$j]['email'] = isset($ship->email)?$ship->email:""; - $insertion_saddress_data[$j]['mobile_no'] = isset($ship->phone)?$ship->phone:""; - $insertion_saddress_data[$j]['customer_id'] = $lastInsertId; - $insertion_saddress_data[$j]['address_type'] = 2; - $insertion_saddress_data[$j]['created_by'] = $session_uid; - $j++; - echo "        Shipping address has a value and Inserted ".$j."
"; - } - else{ - echo "        Keys are available but Shipping address has no value
"; - } - } - (!empty($insertion_saddress_data) ? $CustomerModel->insertAddressBatch($insertion_saddress_data) : ""); - } - } //reponse foreach closed - } //reponse count if closed - if (!empty($response['error'])) { - echo $response['error']; - echo $response['error_msg']; - $message .= $response['error'] . $response['error_msg']; - echo "Error :".$response['error'] . $response['error_msg']; - }else{ - echo "Done"; - } - $go_to_list_page = base_url()."customer_list"; - echo "
go to list page
"; - // return $message; - } - } From aace769f292ec9657d46b6f0bf2e5e0bd5bc2050 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Thu, 21 Sep 2023 12:19:59 +0530 Subject: [PATCH 05/17] duplicated vendor and composer lock deleted : ps --- Untitled-1.json | 1 - composer.lock | 293 +- old_composer.lock | 4184 --- old_vendor/autoload.php | 7 - old_vendor/bin/php-cs-fixer | 117 - old_vendor/bin/php-parse | 117 - .../codeigniter/coding-standard/CHANGELOG.md | 88 - .../coding-standard/CONTRIBUTING.md | 10 - .../codeigniter/coding-standard/LICENSE | 21 - .../codeigniter/coding-standard/README.md | 115 - .../codeigniter/coding-standard/composer.json | 49 - .../coding-standard/src/CodeIgniter4.php | 616 - old_vendor/composer/ClassLoader.php | 572 - old_vendor/composer/InstalledVersions.php | 350 - old_vendor/composer/LICENSE | 21 - old_vendor/composer/autoload_classmap.php | 3228 -- old_vendor/composer/autoload_files.php | 20 - old_vendor/composer/autoload_namespaces.php | 10 - old_vendor/composer/autoload_psr4.php | 46 - old_vendor/composer/autoload_real.php | 80 - old_vendor/composer/autoload_static.php | 3480 --- old_vendor/composer/installed.json | 4416 --- old_vendor/composer/installed.php | 608 - old_vendor/composer/pcre/LICENSE | 19 - old_vendor/composer/pcre/README.md | 181 - old_vendor/composer/pcre/composer.json | 46 - .../composer/pcre/src/MatchAllResult.php | 46 - .../pcre/src/MatchAllStrictGroupsResult.php | 46 - .../pcre/src/MatchAllWithOffsetsResult.php | 48 - old_vendor/composer/pcre/src/MatchResult.php | 39 - .../pcre/src/MatchStrictGroupsResult.php | 39 - .../pcre/src/MatchWithOffsetsResult.php | 41 - .../composer/pcre/src/PcreException.php | 60 - old_vendor/composer/pcre/src/Preg.php | 428 - old_vendor/composer/pcre/src/Regex.php | 174 - .../composer/pcre/src/ReplaceResult.php | 43 - .../pcre/src/UnexpectedNullMatchException.php | 20 - old_vendor/composer/platform_check.php | 26 - old_vendor/composer/semver/CHANGELOG.md | 209 - old_vendor/composer/semver/LICENSE | 19 - old_vendor/composer/semver/README.md | 98 - old_vendor/composer/semver/composer.json | 59 - old_vendor/composer/semver/src/Comparator.php | 113 - .../composer/semver/src/CompilingMatcher.php | 94 - .../composer/semver/src/Constraint/Bound.php | 122 - .../semver/src/Constraint/Constraint.php | 435 - .../src/Constraint/ConstraintInterface.php | 75 - .../src/Constraint/MatchAllConstraint.php | 85 - .../src/Constraint/MatchNoneConstraint.php | 83 - .../semver/src/Constraint/MultiConstraint.php | 325 - old_vendor/composer/semver/src/Interval.php | 98 - old_vendor/composer/semver/src/Intervals.php | 478 - old_vendor/composer/semver/src/Semver.php | 129 - .../composer/semver/src/VersionParser.php | 586 - .../composer/xdebug-handler/CHANGELOG.md | 134 - old_vendor/composer/xdebug-handler/LICENSE | 21 - old_vendor/composer/xdebug-handler/README.md | 298 - .../composer/xdebug-handler/composer.json | 44 - .../composer/xdebug-handler/src/PhpConfig.php | 91 - .../composer/xdebug-handler/src/Process.php | 118 - .../composer/xdebug-handler/src/Status.php | 203 - .../xdebug-handler/src/XdebugHandler.php | 668 - old_vendor/doctrine/annotations/LICENSE | 19 - old_vendor/doctrine/annotations/README.md | 24 - old_vendor/doctrine/annotations/composer.json | 72 - .../annotations/docs/en/annotations.rst | 252 - .../doctrine/annotations/docs/en/custom.rst | 443 - .../doctrine/annotations/docs/en/index.rst | 110 - .../doctrine/annotations/docs/en/sidebar.rst | 6 - .../Common/Annotations/Annotation.php | 57 - .../Annotations/Annotation/Attribute.php | 21 - .../Annotations/Annotation/Attributes.php | 15 - .../Common/Annotations/Annotation/Enum.php | 69 - .../Annotation/IgnoreAnnotation.php | 43 - .../Annotation/NamedArgumentConstructor.php | 13 - .../Annotations/Annotation/Required.php | 13 - .../Common/Annotations/Annotation/Target.php | 101 - .../Annotations/AnnotationException.php | 167 - .../Common/Annotations/AnnotationReader.php | 389 - .../Common/Annotations/AnnotationRegistry.php | 190 - .../Common/Annotations/CachedReader.php | 266 - .../Doctrine/Common/Annotations/DocLexer.php | 143 - .../Doctrine/Common/Annotations/DocParser.php | 1506 - .../Common/Annotations/FileCacheReader.php | 315 - .../ImplicitlyIgnoredAnnotationNames.php | 178 - .../Common/Annotations/IndexedReader.php | 100 - .../NamedArgumentConstructorAnnotation.php | 14 - .../Doctrine/Common/Annotations/PhpParser.php | 92 - .../Common/Annotations/PsrCachedReader.php | 232 - .../Doctrine/Common/Annotations/Reader.php | 80 - .../Annotations/SimpleAnnotationReader.php | 114 - .../Common/Annotations/TokenParser.php | 206 - old_vendor/doctrine/annotations/psalm.xml | 15 - old_vendor/doctrine/deprecations/LICENSE | 19 - old_vendor/doctrine/deprecations/README.md | 157 - .../doctrine/deprecations/composer.json | 38 - .../lib/Doctrine/Deprecations/Deprecation.php | 312 - old_vendor/doctrine/deprecations/phpcs.xml | 22 - old_vendor/doctrine/deprecations/phpstan.neon | 9 - old_vendor/doctrine/deprecations/psalm.xml | 30 - .../instantiator/.doctrine-project.json | 47 - .../doctrine/instantiator/CONTRIBUTING.md | 35 - old_vendor/doctrine/instantiator/LICENSE | 19 - old_vendor/doctrine/instantiator/README.md | 38 - .../doctrine/instantiator/composer.json | 48 - .../doctrine/instantiator/docs/en/index.rst | 68 - .../doctrine/instantiator/docs/en/sidebar.rst | 4 - old_vendor/doctrine/instantiator/psalm.xml | 16 - .../Exception/ExceptionInterface.php | 14 - .../Exception/InvalidArgumentException.php | 52 - .../Exception/UnexpectedValueException.php | 61 - .../Doctrine/Instantiator/Instantiator.php | 255 - .../Instantiator/InstantiatorInterface.php | 24 - old_vendor/doctrine/lexer/LICENSE | 19 - old_vendor/doctrine/lexer/README.md | 9 - old_vendor/doctrine/lexer/UPGRADE.md | 14 - old_vendor/doctrine/lexer/composer.json | 56 - .../doctrine/lexer/src/AbstractLexer.php | 346 - old_vendor/doctrine/lexer/src/Token.php | 145 - old_vendor/fakerphp/faker/CHANGELOG.md | 191 - old_vendor/fakerphp/faker/LICENSE | 22 - old_vendor/fakerphp/faker/README.md | 114 - old_vendor/fakerphp/faker/composer.json | 61 - old_vendor/fakerphp/faker/psalm.baseline.xml | 227 - old_vendor/fakerphp/faker/rector-migrate.php | 161 - .../faker/src/Faker/Calculator/Ean.php | 52 - .../faker/src/Faker/Calculator/Iban.php | 75 - .../faker/src/Faker/Calculator/Inn.php | 42 - .../faker/src/Faker/Calculator/Isbn.php | 60 - .../faker/src/Faker/Calculator/Luhn.php | 80 - .../faker/src/Faker/Calculator/TCNo.php | 43 - .../faker/src/Faker/ChanceGenerator.php | 60 - .../faker/src/Faker/Container/Container.php | 145 - .../src/Faker/Container/ContainerBuilder.php | 92 - .../Faker/Container/ContainerException.php | 14 - .../Faker/Container/ContainerInterface.php | 13 - .../Container/NotInContainerException.php | 14 - .../fakerphp/faker/src/Faker/Core/Barcode.php | 45 - .../fakerphp/faker/src/Faker/Core/Blood.php | 42 - .../fakerphp/faker/src/Faker/Core/Color.php | 180 - .../faker/src/Faker/Core/Coordinates.php | 68 - .../faker/src/Faker/Core/DateTime.php | 230 - .../fakerphp/faker/src/Faker/Core/File.php | 564 - .../fakerphp/faker/src/Faker/Core/Number.php | 83 - .../fakerphp/faker/src/Faker/Core/Uuid.php | 56 - .../fakerphp/faker/src/Faker/Core/Version.php | 60 - .../faker/src/Faker/DefaultGenerator.php | 49 - .../fakerphp/faker/src/Faker/Documentor.php | 70 - .../src/Faker/Extension/AddressExtension.php | 39 - .../src/Faker/Extension/BarcodeExtension.php | 41 - .../src/Faker/Extension/BloodExtension.php | 30 - .../src/Faker/Extension/ColorExtension.php | 63 - .../src/Faker/Extension/CompanyExtension.php | 21 - .../src/Faker/Extension/CountryExtension.php | 14 - .../src/Faker/Extension/DateTimeExtension.php | 242 - .../faker/src/Faker/Extension/Extension.php | 14 - .../src/Faker/Extension/ExtensionNotFound.php | 12 - .../src/Faker/Extension/FileExtension.php | 28 - .../Extension/GeneratorAwareExtension.php | 20 - .../GeneratorAwareExtensionTrait.php | 30 - .../faker/src/Faker/Extension/Helper.php | 106 - .../src/Faker/Extension/NumberExtension.php | 53 - .../src/Faker/Extension/PersonExtension.php | 52 - .../Faker/Extension/PhoneNumberExtension.php | 19 - .../src/Faker/Extension/UuidExtension.php | 16 - .../src/Faker/Extension/VersionExtension.php | 21 - .../fakerphp/faker/src/Faker/Factory.php | 69 - .../fakerphp/faker/src/Faker/Generator.php | 973 - .../fakerphp/faker/src/Faker/Guesser/Name.php | 180 - .../Faker/ORM/CakePHP/ColumnTypeGuesser.php | 79 - .../src/Faker/ORM/CakePHP/EntityPopulator.php | 173 - .../faker/src/Faker/ORM/CakePHP/Populator.php | 113 - .../Faker/ORM/Doctrine/ColumnTypeGuesser.php | 91 - .../Faker/ORM/Doctrine/EntityPopulator.php | 248 - .../src/Faker/ORM/Doctrine/Populator.php | 126 - .../ORM/Doctrine/backward-compatibility.php | 11 - .../Faker/ORM/Mandango/ColumnTypeGuesser.php | 57 - .../Faker/ORM/Mandango/EntityPopulator.php | 123 - .../src/Faker/ORM/Mandango/Populator.php | 63 - .../Faker/ORM/Propel/ColumnTypeGuesser.php | 109 - .../src/Faker/ORM/Propel/EntityPopulator.php | 204 - .../faker/src/Faker/ORM/Propel/Populator.php | 90 - .../Faker/ORM/Propel2/ColumnTypeGuesser.php | 112 - .../src/Faker/ORM/Propel2/EntityPopulator.php | 207 - .../faker/src/Faker/ORM/Propel2/Populator.php | 93 - .../src/Faker/ORM/Spot/ColumnTypeGuesser.php | 84 - .../src/Faker/ORM/Spot/EntityPopulator.php | 199 - .../faker/src/Faker/ORM/Spot/Populator.php | 89 - .../faker/src/Faker/Provider/Address.php | 166 - .../faker/src/Faker/Provider/Barcode.php | 107 - .../faker/src/Faker/Provider/Base.php | 709 - .../faker/src/Faker/Provider/Biased.php | 65 - .../faker/src/Faker/Provider/Color.php | 158 - .../faker/src/Faker/Provider/Company.php | 50 - .../faker/src/Faker/Provider/DateTime.php | 389 - .../faker/src/Faker/Provider/File.php | 610 - .../faker/src/Faker/Provider/HtmlLorem.php | 307 - .../faker/src/Faker/Provider/Image.php | 195 - .../faker/src/Faker/Provider/Internet.php | 407 - .../faker/src/Faker/Provider/Lorem.php | 228 - .../faker/src/Faker/Provider/Medical.php | 34 - .../src/Faker/Provider/Miscellaneous.php | 342 - .../faker/src/Faker/Provider/Payment.php | 312 - .../faker/src/Faker/Provider/Person.php | 147 - .../faker/src/Faker/Provider/PhoneNumber.php | 270 - .../faker/src/Faker/Provider/Text.php | 202 - .../faker/src/Faker/Provider/UserAgent.php | 219 - .../faker/src/Faker/Provider/Uuid.php | 59 - .../src/Faker/Provider/ar_EG/Address.php | 217 - .../faker/src/Faker/Provider/ar_EG/Color.php | 65 - .../src/Faker/Provider/ar_EG/Company.php | 85 - .../src/Faker/Provider/ar_EG/Internet.php | 93 - .../src/Faker/Provider/ar_EG/Payment.php | 16 - .../faker/src/Faker/Provider/ar_EG/Person.php | 107 - .../faker/src/Faker/Provider/ar_EG/Text.php | 31 - .../src/Faker/Provider/ar_JO/Address.php | 152 - .../src/Faker/Provider/ar_JO/Company.php | 66 - .../src/Faker/Provider/ar_JO/Internet.php | 55 - .../faker/src/Faker/Provider/ar_JO/Person.php | 108 - .../faker/src/Faker/Provider/ar_JO/Text.php | 272 - .../src/Faker/Provider/ar_SA/Address.php | 146 - .../faker/src/Faker/Provider/ar_SA/Color.php | 81 - .../src/Faker/Provider/ar_SA/Company.php | 78 - .../src/Faker/Provider/ar_SA/Internet.php | 55 - .../src/Faker/Provider/ar_SA/Payment.php | 22 - .../faker/src/Faker/Provider/ar_SA/Person.php | 121 - .../faker/src/Faker/Provider/ar_SA/Text.php | 272 - .../src/Faker/Provider/at_AT/Payment.php | 11 - .../src/Faker/Provider/bg_BG/Internet.php | 9 - .../src/Faker/Provider/bg_BG/Payment.php | 46 - .../faker/src/Faker/Provider/bg_BG/Person.php | 117 - .../src/Faker/Provider/bg_BG/PhoneNumber.php | 20 - .../src/Faker/Provider/bn_BD/Address.php | 310 - .../src/Faker/Provider/bn_BD/Company.php | 28 - .../faker/src/Faker/Provider/bn_BD/Person.php | 36 - .../src/Faker/Provider/bn_BD/PhoneNumber.php | 14 - .../faker/src/Faker/Provider/bn_BD/Utils.php | 14 - .../src/Faker/Provider/cs_CZ/Address.php | 149 - .../src/Faker/Provider/cs_CZ/Company.php | 125 - .../src/Faker/Provider/cs_CZ/DateTime.php | 65 - .../src/Faker/Provider/cs_CZ/Internet.php | 9 - .../src/Faker/Provider/cs_CZ/Payment.php | 22 - .../faker/src/Faker/Provider/cs_CZ/Person.php | 537 - .../src/Faker/Provider/cs_CZ/PhoneNumber.php | 14 - .../faker/src/Faker/Provider/cs_CZ/Text.php | 7186 ----- .../src/Faker/Provider/da_DK/Address.php | 284 - .../src/Faker/Provider/da_DK/Company.php | 67 - .../src/Faker/Provider/da_DK/Internet.php | 27 - .../src/Faker/Provider/da_DK/Payment.php | 22 - .../faker/src/Faker/Provider/da_DK/Person.php | 195 - .../src/Faker/Provider/da_DK/PhoneNumber.php | 18 - .../src/Faker/Provider/de_AT/Address.php | 143 - .../src/Faker/Provider/de_AT/Company.php | 13 - .../src/Faker/Provider/de_AT/Internet.php | 9 - .../src/Faker/Provider/de_AT/Payment.php | 42 - .../faker/src/Faker/Provider/de_AT/Person.php | 154 - .../src/Faker/Provider/de_AT/PhoneNumber.php | 23 - .../faker/src/Faker/Provider/de_AT/Text.php | 7 - .../src/Faker/Provider/de_CH/Address.php | 197 - .../src/Faker/Provider/de_CH/Company.php | 15 - .../src/Faker/Provider/de_CH/Internet.php | 17 - .../src/Faker/Provider/de_CH/Payment.php | 22 - .../faker/src/Faker/Provider/de_CH/Person.php | 119 - .../src/Faker/Provider/de_CH/PhoneNumber.php | 47 - .../faker/src/Faker/Provider/de_CH/Text.php | 2038 -- .../src/Faker/Provider/de_DE/Address.php | 126 - .../src/Faker/Provider/de_DE/Company.php | 24 - .../src/Faker/Provider/de_DE/Internet.php | 26 - .../src/Faker/Provider/de_DE/Payment.php | 60 - .../faker/src/Faker/Provider/de_DE/Person.php | 132 - .../src/Faker/Provider/de_DE/PhoneNumber.php | 127 - .../faker/src/Faker/Provider/de_DE/Text.php | 2038 -- .../src/Faker/Provider/el_CY/Address.php | 55 - .../src/Faker/Provider/el_CY/Company.php | 18 - .../src/Faker/Provider/el_CY/Internet.php | 9 - .../src/Faker/Provider/el_CY/Payment.php | 50 - .../faker/src/Faker/Provider/el_CY/Person.php | 100 - .../src/Faker/Provider/el_CY/PhoneNumber.php | 32 - .../src/Faker/Provider/el_GR/Address.php | 61 - .../src/Faker/Provider/el_GR/Company.php | 84 - .../src/Faker/Provider/el_GR/Payment.php | 22 - .../faker/src/Faker/Provider/el_GR/Person.php | 181 - .../src/Faker/Provider/el_GR/PhoneNumber.php | 324 - .../faker/src/Faker/Provider/el_GR/Text.php | 2582 -- .../src/Faker/Provider/en_AU/Address.php | 112 - .../src/Faker/Provider/en_AU/Internet.php | 9 - .../src/Faker/Provider/en_AU/PhoneNumber.php | 56 - .../src/Faker/Provider/en_CA/Address.php | 72 - .../src/Faker/Provider/en_CA/PhoneNumber.php | 18 - .../src/Faker/Provider/en_GB/Address.php | 174 - .../src/Faker/Provider/en_GB/Company.php | 130 - .../src/Faker/Provider/en_GB/Internet.php | 9 - .../src/Faker/Provider/en_GB/Payment.php | 22 - .../faker/src/Faker/Provider/en_GB/Person.php | 113 - .../src/Faker/Provider/en_GB/PhoneNumber.php | 49 - .../src/Faker/Provider/en_HK/Address.php | 239 - .../src/Faker/Provider/en_HK/Internet.php | 14 - .../src/Faker/Provider/en_HK/PhoneNumber.php | 41 - .../src/Faker/Provider/en_IN/Address.php | 188 - .../src/Faker/Provider/en_IN/Internet.php | 9 - .../faker/src/Faker/Provider/en_IN/Person.php | 125 - .../src/Faker/Provider/en_IN/PhoneNumber.php | 37 - .../src/Faker/Provider/en_NG/Address.php | 98 - .../src/Faker/Provider/en_NG/Internet.php | 8 - .../faker/src/Faker/Provider/en_NG/Person.php | 90 - .../src/Faker/Provider/en_NG/PhoneNumber.php | 133 - .../src/Faker/Provider/en_NZ/Address.php | 88 - .../src/Faker/Provider/en_NZ/Internet.php | 17 - .../src/Faker/Provider/en_NZ/PhoneNumber.php | 102 - .../src/Faker/Provider/en_PH/Address.php | 417 - .../src/Faker/Provider/en_PH/PhoneNumber.php | 59 - .../src/Faker/Provider/en_SG/Address.php | 125 - .../faker/src/Faker/Provider/en_SG/Person.php | 74 - .../src/Faker/Provider/en_SG/PhoneNumber.php | 105 - .../src/Faker/Provider/en_UG/Address.php | 101 - .../src/Faker/Provider/en_UG/Internet.php | 9 - .../faker/src/Faker/Provider/en_UG/Person.php | 133 - .../src/Faker/Provider/en_UG/PhoneNumber.php | 17 - .../src/Faker/Provider/en_US/Address.php | 97 - .../src/Faker/Provider/en_US/Company.php | 119 - .../src/Faker/Provider/en_US/Payment.php | 36 - .../faker/src/Faker/Provider/en_US/Person.php | 133 - .../src/Faker/Provider/en_US/PhoneNumber.php | 135 - .../faker/src/Faker/Provider/en_US/Text.php | 3721 --- .../src/Faker/Provider/en_ZA/Address.php | 70 - .../src/Faker/Provider/en_ZA/Company.php | 26 - .../src/Faker/Provider/en_ZA/Internet.php | 23 - .../faker/src/Faker/Provider/en_ZA/Person.php | 183 - .../src/Faker/Provider/en_ZA/PhoneNumber.php | 116 - .../src/Faker/Provider/es_AR/Address.php | 68 - .../src/Faker/Provider/es_AR/Company.php | 68 - .../faker/src/Faker/Provider/es_AR/Person.php | 90 - .../src/Faker/Provider/es_AR/PhoneNumber.php | 42 - .../src/Faker/Provider/es_ES/Address.php | 101 - .../faker/src/Faker/Provider/es_ES/Color.php | 24 - .../src/Faker/Provider/es_ES/Company.php | 82 - .../src/Faker/Provider/es_ES/Internet.php | 9 - .../src/Faker/Provider/es_ES/Payment.php | 42 - .../faker/src/Faker/Provider/es_ES/Person.php | 149 - .../src/Faker/Provider/es_ES/PhoneNumber.php | 47 - .../faker/src/Faker/Provider/es_ES/Text.php | 688 - .../src/Faker/Provider/es_PE/Address.php | 65 - .../src/Faker/Provider/es_PE/Company.php | 88 - .../faker/src/Faker/Provider/es_PE/Person.php | 105 - .../src/Faker/Provider/es_PE/PhoneNumber.php | 17 - .../src/Faker/Provider/es_VE/Address.php | 72 - .../src/Faker/Provider/es_VE/Company.php | 42 - .../src/Faker/Provider/es_VE/Internet.php | 9 - .../faker/src/Faker/Provider/es_VE/Person.php | 176 - .../src/Faker/Provider/es_VE/PhoneNumber.php | 29 - .../faker/src/Faker/Provider/et_EE/Person.php | 84 - .../src/Faker/Provider/fa_IR/Address.php | 100 - .../src/Faker/Provider/fa_IR/Company.php | 60 - .../src/Faker/Provider/fa_IR/Internet.php | 102 - .../faker/src/Faker/Provider/fa_IR/Person.php | 210 - .../src/Faker/Provider/fa_IR/PhoneNumber.php | 76 - .../faker/src/Faker/Provider/fa_IR/Text.php | 551 - .../src/Faker/Provider/fi_FI/Address.php | 85 - .../src/Faker/Provider/fi_FI/Company.php | 66 - .../src/Faker/Provider/fi_FI/Internet.php | 9 - .../src/Faker/Provider/fi_FI/Payment.php | 22 - .../faker/src/Faker/Provider/fi_FI/Person.php | 155 - .../src/Faker/Provider/fi_FI/PhoneNumber.php | 101 - .../src/Faker/Provider/fr_BE/Address.php | 72 - .../faker/src/Faker/Provider/fr_BE/Color.php | 7 - .../src/Faker/Provider/fr_BE/Company.php | 13 - .../src/Faker/Provider/fr_BE/Internet.php | 9 - .../src/Faker/Provider/fr_BE/Payment.php | 42 - .../faker/src/Faker/Provider/fr_BE/Person.php | 49 - .../src/Faker/Provider/fr_BE/PhoneNumber.php | 20 - .../src/Faker/Provider/fr_CA/Address.php | 125 - .../faker/src/Faker/Provider/fr_CA/Color.php | 7 - .../src/Faker/Provider/fr_CA/Company.php | 7 - .../faker/src/Faker/Provider/fr_CA/Person.php | 82 - .../faker/src/Faker/Provider/fr_CA/Text.php | 2446 -- .../src/Faker/Provider/fr_CH/Address.php | 150 - .../faker/src/Faker/Provider/fr_CH/Color.php | 7 - .../src/Faker/Provider/fr_CH/Company.php | 15 - .../src/Faker/Provider/fr_CH/Internet.php | 9 - .../src/Faker/Provider/fr_CH/Payment.php | 22 - .../faker/src/Faker/Provider/fr_CH/Person.php | 114 - .../src/Faker/Provider/fr_CH/PhoneNumber.php | 43 - .../faker/src/Faker/Provider/fr_CH/Text.php | 7 - .../src/Faker/Provider/fr_FR/Address.php | 147 - .../faker/src/Faker/Provider/fr_FR/Color.php | 40 - .../src/Faker/Provider/fr_FR/Company.php | 481 - .../src/Faker/Provider/fr_FR/Internet.php | 9 - .../src/Faker/Provider/fr_FR/Payment.php | 49 - .../faker/src/Faker/Provider/fr_FR/Person.php | 130 - .../src/Faker/Provider/fr_FR/PhoneNumber.php | 148 - .../faker/src/Faker/Provider/fr_FR/Text.php | 15532 ---------- .../src/Faker/Provider/he_IL/Address.php | 122 - .../src/Faker/Provider/he_IL/Company.php | 14 - .../src/Faker/Provider/he_IL/Payment.php | 22 - .../faker/src/Faker/Provider/he_IL/Person.php | 132 - .../src/Faker/Provider/he_IL/PhoneNumber.php | 14 - .../src/Faker/Provider/hr_HR/Address.php | 68 - .../src/Faker/Provider/hr_HR/Company.php | 25 - .../src/Faker/Provider/hr_HR/Payment.php | 22 - .../faker/src/Faker/Provider/hr_HR/Person.php | 27 - .../src/Faker/Provider/hr_HR/PhoneNumber.php | 14 - .../src/Faker/Provider/hu_HU/Address.php | 148 - .../src/Faker/Provider/hu_HU/Company.php | 13 - .../src/Faker/Provider/hu_HU/Payment.php | 22 - .../faker/src/Faker/Provider/hu_HU/Person.php | 101 - .../src/Faker/Provider/hu_HU/PhoneNumber.php | 14 - .../faker/src/Faker/Provider/hu_HU/Text.php | 3407 --- .../src/Faker/Provider/hy_AM/Address.php | 132 - .../faker/src/Faker/Provider/hy_AM/Color.php | 12 - .../src/Faker/Provider/hy_AM/Company.php | 56 - .../src/Faker/Provider/hy_AM/Internet.php | 9 - .../faker/src/Faker/Provider/hy_AM/Person.php | 110 - .../src/Faker/Provider/hy_AM/PhoneNumber.php | 36 - .../src/Faker/Provider/id_ID/Address.php | 319 - .../faker/src/Faker/Provider/id_ID/Color.php | 40 - .../src/Faker/Provider/id_ID/Company.php | 64 - .../src/Faker/Provider/id_ID/Internet.php | 25 - .../faker/src/Faker/Provider/id_ID/Person.php | 343 - .../src/Faker/Provider/id_ID/PhoneNumber.php | 55 - .../src/Faker/Provider/is_IS/Address.php | 175 - .../src/Faker/Provider/is_IS/Company.php | 50 - .../src/Faker/Provider/is_IS/Internet.php | 20 - .../src/Faker/Provider/is_IS/Payment.php | 22 - .../faker/src/Faker/Provider/is_IS/Person.php | 142 - .../src/Faker/Provider/is_IS/PhoneNumber.php | 17 - .../src/Faker/Provider/it_CH/Address.php | 149 - .../src/Faker/Provider/it_CH/Company.php | 15 - .../src/Faker/Provider/it_CH/Internet.php | 9 - .../src/Faker/Provider/it_CH/Payment.php | 22 - .../faker/src/Faker/Provider/it_CH/Person.php | 102 - .../src/Faker/Provider/it_CH/PhoneNumber.php | 43 - .../faker/src/Faker/Provider/it_CH/Text.php | 7 - .../src/Faker/Provider/it_IT/Address.php | 97 - .../src/Faker/Provider/it_IT/Company.php | 95 - .../src/Faker/Provider/it_IT/Internet.php | 9 - .../src/Faker/Provider/it_IT/Payment.php | 22 - .../faker/src/Faker/Provider/it_IT/Person.php | 100 - .../src/Faker/Provider/it_IT/PhoneNumber.php | 21 - .../faker/src/Faker/Provider/it_IT/Text.php | 2079 -- .../src/Faker/Provider/ja_JP/Address.php | 137 - .../src/Faker/Provider/ja_JP/Company.php | 17 - .../src/Faker/Provider/ja_JP/Internet.php | 93 - .../faker/src/Faker/Provider/ja_JP/Person.php | 147 - .../src/Faker/Provider/ja_JP/PhoneNumber.php | 19 - .../faker/src/Faker/Provider/ja_JP/Text.php | 638 - .../src/Faker/Provider/ka_GE/Address.php | 139 - .../faker/src/Faker/Provider/ka_GE/Color.php | 16 - .../src/Faker/Provider/ka_GE/Company.php | 53 - .../src/Faker/Provider/ka_GE/DateTime.php | 43 - .../src/Faker/Provider/ka_GE/Internet.php | 15 - .../src/Faker/Provider/ka_GE/Payment.php | 55 - .../faker/src/Faker/Provider/ka_GE/Person.php | 63 - .../src/Faker/Provider/ka_GE/PhoneNumber.php | 14 - .../faker/src/Faker/Provider/ka_GE/Text.php | 1000 - .../src/Faker/Provider/kk_KZ/Address.php | 105 - .../faker/src/Faker/Provider/kk_KZ/Color.php | 12 - .../src/Faker/Provider/kk_KZ/Company.php | 74 - .../src/Faker/Provider/kk_KZ/Internet.php | 9 - .../src/Faker/Provider/kk_KZ/Payment.php | 35 - .../faker/src/Faker/Provider/kk_KZ/Person.php | 266 - .../src/Faker/Provider/kk_KZ/PhoneNumber.php | 16 - .../faker/src/Faker/Provider/kk_KZ/Text.php | 492 - .../src/Faker/Provider/ko_KR/Address.php | 96 - .../src/Faker/Provider/ko_KR/Company.php | 31 - .../src/Faker/Provider/ko_KR/Internet.php | 86 - .../faker/src/Faker/Provider/ko_KR/Person.php | 54 - .../src/Faker/Provider/ko_KR/PhoneNumber.php | 40 - .../faker/src/Faker/Provider/ko_KR/Text.php | 1725 -- .../src/Faker/Provider/lt_LT/Address.php | 209 - .../src/Faker/Provider/lt_LT/Company.php | 15 - .../src/Faker/Provider/lt_LT/Internet.php | 18 - .../src/Faker/Provider/lt_LT/Payment.php | 22 - .../faker/src/Faker/Provider/lt_LT/Person.php | 391 - .../src/Faker/Provider/lt_LT/PhoneNumber.php | 17 - .../src/Faker/Provider/lv_LV/Address.php | 117 - .../faker/src/Faker/Provider/lv_LV/Color.php | 19 - .../src/Faker/Provider/lv_LV/Internet.php | 9 - .../src/Faker/Provider/lv_LV/Payment.php | 22 - .../faker/src/Faker/Provider/lv_LV/Person.php | 155 - .../src/Faker/Provider/lv_LV/PhoneNumber.php | 15 - .../src/Faker/Provider/me_ME/Address.php | 119 - .../src/Faker/Provider/me_ME/Company.php | 49 - .../src/Faker/Provider/me_ME/Payment.php | 22 - .../faker/src/Faker/Provider/me_ME/Person.php | 102 - .../src/Faker/Provider/me_ME/PhoneNumber.php | 15 - .../faker/src/Faker/Provider/mn_MN/Person.php | 102 - .../src/Faker/Provider/mn_MN/PhoneNumber.php | 13 - .../src/Faker/Provider/ms_MY/Address.php | 710 - .../src/Faker/Provider/ms_MY/Company.php | 105 - .../Faker/Provider/ms_MY/Miscellaneous.php | 169 - .../src/Faker/Provider/ms_MY/Payment.php | 244 - .../faker/src/Faker/Provider/ms_MY/Person.php | 811 - .../src/Faker/Provider/ms_MY/PhoneNumber.php | 217 - .../src/Faker/Provider/nb_NO/Address.php | 197 - .../src/Faker/Provider/nb_NO/Company.php | 57 - .../src/Faker/Provider/nb_NO/Payment.php | 22 - .../faker/src/Faker/Provider/nb_NO/Person.php | 336 - .../src/Faker/Provider/nb_NO/PhoneNumber.php | 41 - .../src/Faker/Provider/ne_NP/Address.php | 131 - .../src/Faker/Provider/ne_NP/Internet.php | 32 - .../src/Faker/Provider/ne_NP/Payment.php | 316 - .../faker/src/Faker/Provider/ne_NP/Person.php | 121 - .../src/Faker/Provider/ne_NP/PhoneNumber.php | 19 - .../src/Faker/Provider/nl_BE/Address.php | 124 - .../src/Faker/Provider/nl_BE/Company.php | 13 - .../src/Faker/Provider/nl_BE/Internet.php | 9 - .../src/Faker/Provider/nl_BE/Payment.php | 49 - .../faker/src/Faker/Provider/nl_BE/Person.php | 108 - .../src/Faker/Provider/nl_BE/PhoneNumber.php | 20 - .../faker/src/Faker/Provider/nl_BE/Text.php | 25348 ---------------- .../src/Faker/Provider/nl_NL/Address.php | 153 - .../faker/src/Faker/Provider/nl_NL/Color.php | 36 - .../src/Faker/Provider/nl_NL/Company.php | 122 - .../src/Faker/Provider/nl_NL/Internet.php | 9 - .../src/Faker/Provider/nl_NL/Payment.php | 22 - .../faker/src/Faker/Provider/nl_NL/Person.php | 353 - .../src/Faker/Provider/nl_NL/PhoneNumber.php | 39 - .../faker/src/Faker/Provider/nl_NL/Text.php | 3933 --- .../src/Faker/Provider/pl_PL/Address.php | 213 - .../faker/src/Faker/Provider/pl_PL/Color.php | 40 - .../src/Faker/Provider/pl_PL/Company.php | 90 - .../src/Faker/Provider/pl_PL/Internet.php | 9 - .../src/Faker/Provider/pl_PL/LicensePlate.php | 542 - .../src/Faker/Provider/pl_PL/Payment.php | 120 - .../faker/src/Faker/Provider/pl_PL/Person.php | 243 - .../src/Faker/Provider/pl_PL/PhoneNumber.php | 18 - .../faker/src/Faker/Provider/pl_PL/Text.php | 2867 -- .../src/Faker/Provider/pt_BR/Address.php | 154 - .../src/Faker/Provider/pt_BR/Company.php | 36 - .../src/Faker/Provider/pt_BR/Internet.php | 9 - .../src/Faker/Provider/pt_BR/Payment.php | 148 - .../faker/src/Faker/Provider/pt_BR/Person.php | 159 - .../src/Faker/Provider/pt_BR/PhoneNumber.php | 150 - .../faker/src/Faker/Provider/pt_BR/Text.php | 3427 --- .../src/Faker/Provider/pt_BR/check_digit.php | 39 - .../src/Faker/Provider/pt_PT/Address.php | 130 - .../src/Faker/Provider/pt_PT/Company.php | 16 - .../src/Faker/Provider/pt_PT/Internet.php | 9 - .../src/Faker/Provider/pt_PT/Payment.php | 22 - .../faker/src/Faker/Provider/pt_PT/Person.php | 147 - .../src/Faker/Provider/pt_PT/PhoneNumber.php | 50 - .../src/Faker/Provider/ro_MD/Address.php | 125 - .../src/Faker/Provider/ro_MD/Payment.php | 22 - .../faker/src/Faker/Provider/ro_MD/Person.php | 91 - .../src/Faker/Provider/ro_MD/PhoneNumber.php | 33 - .../faker/src/Faker/Provider/ro_MD/Text.php | 2465 -- .../src/Faker/Provider/ro_RO/Address.php | 153 - .../src/Faker/Provider/ro_RO/Payment.php | 22 - .../faker/src/Faker/Provider/ro_RO/Person.php | 250 - .../src/Faker/Provider/ro_RO/PhoneNumber.php | 62 - .../faker/src/Faker/Provider/ro_RO/Text.php | 155 - .../src/Faker/Provider/ru_RU/Address.php | 139 - .../faker/src/Faker/Provider/ru_RU/Color.php | 23 - .../src/Faker/Provider/ru_RU/Company.php | 178 - .../src/Faker/Provider/ru_RU/Internet.php | 9 - .../src/Faker/Provider/ru_RU/Payment.php | 812 - .../faker/src/Faker/Provider/ru_RU/Person.php | 180 - .../src/Faker/Provider/ru_RU/PhoneNumber.php | 14 - .../faker/src/Faker/Provider/ru_RU/Text.php | 4551 --- .../src/Faker/Provider/sk_SK/Address.php | 343 - .../src/Faker/Provider/sk_SK/Company.php | 66 - .../src/Faker/Provider/sk_SK/Internet.php | 9 - .../src/Faker/Provider/sk_SK/Payment.php | 22 - .../faker/src/Faker/Provider/sk_SK/Person.php | 171 - .../src/Faker/Provider/sk_SK/PhoneNumber.php | 15 - .../src/Faker/Provider/sl_SI/Address.php | 106 - .../src/Faker/Provider/sl_SI/Company.php | 14 - .../src/Faker/Provider/sl_SI/Internet.php | 10 - .../src/Faker/Provider/sl_SI/Payment.php | 22 - .../faker/src/Faker/Provider/sl_SI/Person.php | 149 - .../src/Faker/Provider/sl_SI/PhoneNumber.php | 18 - .../src/Faker/Provider/sr_Cyrl_RS/Address.php | 58 - .../src/Faker/Provider/sr_Cyrl_RS/Payment.php | 22 - .../src/Faker/Provider/sr_Cyrl_RS/Person.php | 242 - .../src/Faker/Provider/sr_Latn_RS/Address.php | 58 - .../src/Faker/Provider/sr_Latn_RS/Payment.php | 22 - .../src/Faker/Provider/sr_Latn_RS/Person.php | 213 - .../src/Faker/Provider/sr_RS/Address.php | 58 - .../src/Faker/Provider/sr_RS/Payment.php | 22 - .../faker/src/Faker/Provider/sr_RS/Person.php | 143 - .../src/Faker/Provider/sv_SE/Address.php | 151 - .../src/Faker/Provider/sv_SE/Company.php | 26 - .../src/Faker/Provider/sv_SE/Municipality.php | 27 - .../src/Faker/Provider/sv_SE/Payment.php | 22 - .../faker/src/Faker/Provider/sv_SE/Person.php | 171 - .../src/Faker/Provider/sv_SE/PhoneNumber.php | 64 - .../src/Faker/Provider/th_TH/Address.php | 141 - .../faker/src/Faker/Provider/th_TH/Color.php | 16 - .../src/Faker/Provider/th_TH/Company.php | 32 - .../src/Faker/Provider/th_TH/Internet.php | 8 - .../src/Faker/Provider/th_TH/Payment.php | 44 - .../faker/src/Faker/Provider/th_TH/Person.php | 87 - .../src/Faker/Provider/th_TH/PhoneNumber.php | 39 - .../src/Faker/Provider/tr_TR/Address.php | 94 - .../faker/src/Faker/Provider/tr_TR/Color.php | 58 - .../src/Faker/Provider/tr_TR/Company.php | 100 - .../src/Faker/Provider/tr_TR/DateTime.php | 48 - .../src/Faker/Provider/tr_TR/Internet.php | 9 - .../src/Faker/Provider/tr_TR/Payment.php | 22 - .../faker/src/Faker/Provider/tr_TR/Person.php | 159 - .../src/Faker/Provider/tr_TR/PhoneNumber.php | 186 - .../src/Faker/Provider/uk_UA/Address.php | 364 - .../faker/src/Faker/Provider/uk_UA/Color.php | 23 - .../src/Faker/Provider/uk_UA/Company.php | 74 - .../src/Faker/Provider/uk_UA/Internet.php | 9 - .../src/Faker/Provider/uk_UA/Payment.php | 41 - .../faker/src/Faker/Provider/uk_UA/Person.php | 101 - .../src/Faker/Provider/uk_UA/PhoneNumber.php | 72 - .../faker/src/Faker/Provider/uk_UA/Text.php | 4512 --- .../src/Faker/Provider/vi_VN/Address.php | 170 - .../faker/src/Faker/Provider/vi_VN/Color.php | 36 - .../src/Faker/Provider/vi_VN/Internet.php | 8 - .../faker/src/Faker/Provider/vi_VN/Person.php | 186 - .../src/Faker/Provider/vi_VN/PhoneNumber.php | 61 - .../src/Faker/Provider/zh_CN/Address.php | 148 - .../faker/src/Faker/Provider/zh_CN/Color.php | 66 - .../src/Faker/Provider/zh_CN/Company.php | 235 - .../src/Faker/Provider/zh_CN/DateTime.php | 48 - .../src/Faker/Provider/zh_CN/Internet.php | 24 - .../src/Faker/Provider/zh_CN/Payment.php | 43 - .../faker/src/Faker/Provider/zh_CN/Person.php | 83 - .../src/Faker/Provider/zh_CN/PhoneNumber.php | 23 - .../src/Faker/Provider/zh_TW/Address.php | 421 - .../faker/src/Faker/Provider/zh_TW/Color.php | 66 - .../src/Faker/Provider/zh_TW/Company.php | 268 - .../src/Faker/Provider/zh_TW/DateTime.php | 48 - .../src/Faker/Provider/zh_TW/Internet.php | 28 - .../src/Faker/Provider/zh_TW/Payment.php | 21 - .../faker/src/Faker/Provider/zh_TW/Person.php | 201 - .../src/Faker/Provider/zh_TW/PhoneNumber.php | 19 - .../faker/src/Faker/Provider/zh_TW/Text.php | 900 - .../faker/src/Faker/UniqueGenerator.php | 87 - .../faker/src/Faker/ValidGenerator.php | 78 - old_vendor/fakerphp/faker/src/autoload.php | 29 - .../friendsofphp/php-cs-fixer/CHANGELOG.md | 4466 --- .../friendsofphp/php-cs-fixer/CONTRIBUTING.md | 104 - old_vendor/friendsofphp/php-cs-fixer/LICENSE | 19 - .../friendsofphp/php-cs-fixer/README.md | 75 - .../friendsofphp/php-cs-fixer/UPGRADE-v3.md | 167 - .../php-cs-fixer/ci-integration.sh | 8 - .../friendsofphp/php-cs-fixer/composer.json | 74 - .../php-cs-fixer/feature-or-bug.rst | 24 - old_vendor/friendsofphp/php-cs-fixer/logo.md | 3 - old_vendor/friendsofphp/php-cs-fixer/logo.png | Bin 18627 -> 0 bytes .../friendsofphp/php-cs-fixer/php-cs-fixer | 104 - .../src/AbstractDoctrineAnnotationFixer.php | 238 - .../php-cs-fixer/src/AbstractFixer.php | 206 - .../src/AbstractFopenFlagFixer.php | 122 - .../src/AbstractFunctionReferenceFixer.php | 80 - .../src/AbstractLinesBeforeNamespaceFixer.php | 120 - .../src/AbstractNoUselessElseFixer.php | 207 - .../AbstractPhpdocToTypeDeclarationFixer.php | 225 - .../src/AbstractPhpdocTypesFixer.php | 128 - .../php-cs-fixer/src/AbstractProxyFixer.php | 124 - .../php-cs-fixer/src/Cache/Cache.php | 137 - .../php-cs-fixer/src/Cache/CacheInterface.php | 35 - .../src/Cache/CacheManagerInterface.php | 27 - .../php-cs-fixer/src/Cache/Directory.php | 52 - .../src/Cache/DirectoryInterface.php | 23 - .../src/Cache/FileCacheManager.php | 129 - .../php-cs-fixer/src/Cache/FileHandler.php | 106 - .../src/Cache/FileHandlerInterface.php | 29 - .../src/Cache/NullCacheManager.php | 32 - .../php-cs-fixer/src/Cache/Signature.php | 98 - .../src/Cache/SignatureInterface.php | 38 - .../friendsofphp/php-cs-fixer/src/Config.php | 285 - .../php-cs-fixer/src/ConfigInterface.php | 140 - .../InvalidConfigurationException.php | 36 - .../InvalidFixerConfigurationException.php | 45 - ...validForEnvFixerConfigurationException.php | 24 - .../RequiredFixerConfigurationException.php | 24 - .../php-cs-fixer/src/Console/Application.php | 142 - .../src/Console/Command/DescribeCommand.php | 428 - .../Command/DescribeNameNotFoundException.php | 46 - .../Console/Command/DocumentationCommand.php | 128 - .../src/Console/Command/FixCommand.php | 360 - .../FixCommandExitStatusCalculator.php | 51 - .../src/Console/Command/HelpCommand.php | 131 - .../src/Console/Command/ListFilesCommand.php | 96 - .../src/Console/Command/ListSetsCommand.php | 93 - .../src/Console/Command/SelfUpdateCommand.php | 180 - .../src/Console/ConfigurationResolver.php | 961 - .../src/Console/Output/ErrorOutput.php | 156 - .../src/Console/Output/NullOutput.php | 25 - .../src/Console/Output/ProcessOutput.php | 133 - .../Console/Output/ProcessOutputInterface.php | 23 - .../Report/FixReport/CheckstyleReporter.php | 71 - .../Report/FixReport/GitlabReporter.php | 61 - .../Console/Report/FixReport/JsonReporter.php | 67 - .../Report/FixReport/JunitReporter.php | 141 - .../Report/FixReport/ReportSummary.php | 92 - .../Report/FixReport/ReporterFactory.php | 92 - .../Report/FixReport/ReporterInterface.php | 30 - .../Console/Report/FixReport/TextReporter.php | 99 - .../Console/Report/FixReport/XmlReporter.php | 129 - .../Report/ListSetsReport/JsonReporter.php | 58 - .../Report/ListSetsReport/ReportSummary.php | 46 - .../Report/ListSetsReport/ReporterFactory.php | 89 - .../ListSetsReport/ReporterInterface.php | 30 - .../Report/ListSetsReport/TextReporter.php | 57 - .../src/Console/SelfUpdate/GithubClient.php | 54 - .../SelfUpdate/GithubClientInterface.php | 31 - .../Console/SelfUpdate/NewVersionChecker.php | 110 - .../SelfUpdate/NewVersionCheckerInterface.php | 37 - .../src/Console/WarningsDetector.php | 76 - .../src/Differ/DiffConsoleFormatter.php | 84 - .../src/Differ/DifferInterface.php | 26 - .../php-cs-fixer/src/Differ/FullDiffer.php | 47 - .../php-cs-fixer/src/Differ/NullDiffer.php | 29 - .../php-cs-fixer/src/Differ/UnifiedDiffer.php | 50 - .../php-cs-fixer/src/DocBlock/Annotation.php | 306 - .../php-cs-fixer/src/DocBlock/DocBlock.php | 252 - .../php-cs-fixer/src/DocBlock/Line.php | 128 - .../src/DocBlock/ShortDescription.php | 63 - .../php-cs-fixer/src/DocBlock/Tag.php | 102 - .../src/DocBlock/TagComparator.php | 60 - .../src/DocBlock/TypeExpression.php | 465 - .../src/Doctrine/Annotation/Token.php | 81 - .../src/Doctrine/Annotation/Tokens.php | 302 - .../Documentation/DocumentationLocator.php | 82 - .../Documentation/FixerDocumentGenerator.php | 368 - .../Documentation/ListDocumentGenerator.php | 174 - .../src/Documentation/RstUtils.php | 40 - .../RuleSetDocumentationGenerator.php | 104 - .../php-cs-fixer/src/Error/Error.php | 93 - .../php-cs-fixer/src/Error/ErrorsManager.php | 79 - .../php-cs-fixer/src/FileReader.php | 73 - .../php-cs-fixer/src/FileRemoval.php | 100 - .../friendsofphp/php-cs-fixer/src/Finder.php | 35 - .../Fixer/AbstractIncrementOperatorFixer.php | 58 - .../src/Fixer/AbstractPhpUnitFixer.php | 58 - .../src/Fixer/Alias/ArrayPushFixer.php | 216 - .../Fixer/Alias/BacktickToShellExecFixer.php | 159 - .../src/Fixer/Alias/EregToPregFixer.php | 205 - .../src/Fixer/Alias/MbStrFunctionsFixer.php | 139 - .../src/Fixer/Alias/ModernizeStrposFixer.php | 233 - .../src/Fixer/Alias/NoAliasFunctionsFixer.php | 335 - .../NoAliasLanguageConstructCallFixer.php | 68 - .../src/Fixer/Alias/NoMixedEchoPrintFixer.php | 154 - .../Fixer/Alias/PowToExponentiationFixer.php | 230 - .../Fixer/Alias/RandomApiMigrationFixer.php | 170 - .../src/Fixer/Alias/SetTypeToCastFixer.php | 249 - .../Fixer/ArrayNotation/ArraySyntaxFixer.php | 151 - ...tilineWhitespaceAroundDoubleArrowFixer.php | 89 - .../NoTrailingCommaInSinglelineArrayFixer.php | 61 - .../NoWhitespaceBeforeCommaInArrayFixer.php | 155 - .../NormalizeIndexBraceFixer.php | 62 - .../ArrayNotation/TrimArraySpacesFixer.php | 104 - .../WhitespaceAfterCommaInArrayFixer.php | 149 - .../src/Fixer/Basic/BracesFixer.php | 267 - .../Fixer/Basic/CurlyBracesPositionFixer.php | 429 - .../src/Fixer/Basic/EncodingFixer.php | 92 - .../NoMultipleStatementsPerLineFixer.php | 109 - .../NoTrailingCommaInSinglelineFixer.php | 163 - .../Basic/NonPrintableCharacterFixer.php | 193 - .../src/Fixer/Basic/OctalNotationFixer.php | 74 - .../src/Fixer/Basic/PsrAutoloadingFixer.php | 298 - .../Casing/ClassReferenceNameCasingFixer.php | 175 - .../src/Fixer/Casing/ConstantCaseFixer.php | 176 - .../Fixer/Casing/IntegerLiteralCaseFixer.php | 69 - .../Fixer/Casing/LowercaseKeywordsFixer.php | 81 - .../Casing/LowercaseStaticReferenceFixer.php | 106 - .../Fixer/Casing/MagicConstantCasingFixer.php | 101 - .../Fixer/Casing/MagicMethodCasingFixer.php | 206 - .../Casing/NativeFunctionCasingFixer.php | 98 - ...tiveFunctionTypeDeclarationCasingFixer.php | 169 - .../Fixer/CastNotation/CastSpacesFixer.php | 130 - .../Fixer/CastNotation/LowercaseCastFixer.php | 95 - .../ModernizeTypesCastingFixer.php | 160 - .../CastNotation/NoShortBoolCastFixer.php | 97 - .../Fixer/CastNotation/NoUnsetCastFixer.php | 97 - .../CastNotation/ShortScalarCastFixer.php | 86 - .../ClassAttributesSeparationFixer.php | 578 - .../ClassNotation/ClassDefinitionFixer.php | 460 - .../Fixer/ClassNotation/FinalClassFixer.php | 63 - .../ClassNotation/FinalInternalClassFixer.php | 223 - ...FinalPublicMethodForAbstractClassFixer.php | 172 - .../NoBlankLinesAfterClassOpeningFixer.php | 102 - .../NoNullPropertyInitializationFixer.php | 150 - .../ClassNotation/NoPhp4ConstructorFixer.php | 419 - .../NoUnneededFinalMethodFixer.php | 210 - .../OrderedClassElementsFixer.php | 589 - .../ClassNotation/OrderedInterfacesFixer.php | 246 - .../ClassNotation/OrderedTraitsFixer.php | 195 - .../ClassNotation/ProtectedToPrivateFixer.php | 164 - .../Fixer/ClassNotation/SelfAccessorFixer.php | 189 - .../ClassNotation/SelfStaticAccessorFixer.php | 201 - .../SingleClassElementPerStatementFixer.php | 240 - .../SingleTraitInsertPerStatementFixer.php | 116 - .../ClassNotation/VisibilityRequiredFixer.php | 212 - .../ClassUsage/DateTimeImmutableFixer.php | 158 - .../Fixer/Comment/CommentToPhpdocFixer.php | 239 - .../src/Fixer/Comment/HeaderCommentFixer.php | 454 - .../MultilineCommentOpeningClosingFixer.php | 98 - .../src/Fixer/Comment/NoEmptyCommentFixer.php | 157 - .../NoTrailingWhitespaceInCommentFixer.php | 84 - .../Comment/SingleLineCommentSpacingFixer.php | 119 - .../Comment/SingleLineCommentStyleFixer.php | 186 - .../src/Fixer/ConfigurableFixerInterface.php | 47 - .../NativeConstantInvocationFixer.php | 305 - .../ControlStructureBracesFixer.php | 266 - ...trolStructureContinuationPositionFixer.php | 146 - .../Fixer/ControlStructure/ElseifFixer.php | 104 - .../ControlStructure/EmptyLoopBodyFixer.php | 137 - .../EmptyLoopConditionFixer.php | 200 - .../Fixer/ControlStructure/IncludeFixer.php | 162 - .../NoAlternativeSyntaxFixer.php | 244 - .../ControlStructure/NoBreakCommentFixer.php | 350 - .../NoSuperfluousElseifFixer.php | 110 - .../NoTrailingCommaInListCallFixer.php | 60 - .../NoUnneededControlParenthesesFixer.php | 754 - .../NoUnneededCurlyBracesFixer.php | 172 - .../ControlStructure/NoUselessElseFixer.php | 129 - .../SimplifiedIfReturnFixer.php | 147 - .../SwitchCaseSemicolonToColonFixer.php | 96 - .../ControlStructure/SwitchCaseSpaceFixer.php | 94 - .../SwitchContinueToBreakFixer.php | 249 - .../TrailingCommaInMultilineFixer.php | 250 - .../Fixer/ControlStructure/YodaStyleFixer.php | 748 - .../src/Fixer/DeprecatedFixerInterface.php | 28 - ...DoctrineAnnotationArrayAssignmentFixer.php | 108 - .../DoctrineAnnotationBracesFixer.php | 127 - .../DoctrineAnnotationIndentationFixer.php | 193 - .../DoctrineAnnotationSpacesFixer.php | 301 - .../php-cs-fixer/src/Fixer/FixerInterface.php | 79 - .../CombineNestedDirnameFixer.php | 236 - .../DateTimeCreateFromFormatCallFixer.php | 165 - .../FunctionNotation/FopenFlagOrderFixer.php | 126 - .../FunctionNotation/FopenFlagsFixer.php | 112 - .../FunctionDeclarationFixer.php | 261 - .../FunctionTypehintSpaceFixer.php | 79 - .../FunctionNotation/ImplodeCallFixer.php | 151 - .../LambdaNotUsedImportFixer.php | 352 - .../MethodArgumentSpaceFixer.php | 468 - .../NativeFunctionInvocationFixer.php | 424 - .../NoSpacesAfterFunctionNameFixer.php | 187 - ...lingCommaInSinglelineFunctionCallFixer.php | 68 - ...NoUnreachableDefaultArgumentValueFixer.php | 203 - .../NoUselessSprintfFixer.php | 121 - ...ypeDeclarationForDefaultNullValueFixer.php | 157 - .../PhpdocToParamTypeFixer.php | 196 - .../PhpdocToPropertyTypeFixer.php | 244 - .../PhpdocToReturnTypeFixer.php | 207 - .../RegularCallableCallFixer.php | 265 - .../ReturnTypeDeclarationFixer.php | 131 - .../FunctionNotation/SingleLineThrowFixer.php | 168 - .../FunctionNotation/StaticLambdaFixer.php | 167 - .../UseArrowFunctionsFixer.php | 207 - .../FunctionNotation/VoidReturnFixer.php | 258 - .../Import/FullyQualifiedStrictTypesFixer.php | 232 - .../Import/GlobalNamespaceImportFixer.php | 752 - .../src/Fixer/Import/GroupImportFixer.php | 280 - .../Import/NoLeadingImportSlashFixer.php | 99 - .../Import/NoUnneededImportAliasFixer.php | 97 - .../src/Fixer/Import/NoUnusedImportsFixer.php | 300 - .../src/Fixer/Import/OrderedImportsFixer.php | 552 - .../Import/SingleImportPerStatementFixer.php | 275 - .../Import/SingleLineAfterImportsFixer.php | 161 - .../php-cs-fixer/src/Fixer/Indentation.php | 92 - .../ClassKeywordRemoveFixer.php | 253 - .../CombineConsecutiveIssetsFixer.php | 172 - .../CombineConsecutiveUnsetsFixer.php | 188 - .../DeclareEqualNormalizeFixer.php | 148 - .../DeclareParenthesesFixer.php | 56 - .../LanguageConstruct/DirConstantFixer.php | 138 - .../ErrorSuppressionFixer.php | 186 - .../ExplicitIndirectVariableFixer.php | 91 - .../FunctionToConstantFixer.php | 301 - .../GetClassToClassKeywordFixer.php | 170 - .../Fixer/LanguageConstruct/IsNullFixer.php | 181 - .../NoUnsetOnPropertyFixer.php | 229 - .../SingleSpaceAfterConstructFixer.php | 358 - .../Fixer/ListNotation/ListSyntaxFixer.php | 144 - .../BlankLineAfterNamespaceFixer.php | 136 - .../NamespaceNotation/CleanNamespaceFixer.php | 107 - .../NoBlankLinesBeforeNamespaceFixer.php | 76 - .../NoLeadingNamespaceWhitespaceFixer.php | 104 - .../SingleBlankLineBeforeNamespaceFixer.php | 71 - .../Fixer/Naming/NoHomoglyphNamesFixer.php | 244 - ...signNullCoalescingToCoalesceEqualFixer.php | 191 - .../Operator/BinaryOperatorSpacesFixer.php | 859 - .../src/Fixer/Operator/ConcatSpaceFixer.php | 168 - .../Fixer/Operator/IncrementStyleFixer.php | 178 - .../Fixer/Operator/LogicalOperatorsFixer.php | 79 - .../src/Fixer/Operator/NewWithBracesFixer.php | 212 - .../NoSpaceAroundDoubleColonFixer.php | 72 - .../Operator/NoUselessConcatOperatorFixer.php | 351 - .../NoUselessNullsafeOperatorFixer.php | 82 - .../Operator/NotOperatorWithSpaceFixer.php | 84 - .../NotOperatorWithSuccessorSpaceFixer.php | 77 - .../ObjectOperatorWithoutWhitespaceFixer.php | 71 - .../Fixer/Operator/OperatorLinebreakFixer.php | 319 - .../Operator/StandardizeIncrementFixer.php | 130 - .../Operator/StandardizeNotEqualsFixer.php | 69 - .../Operator/TernaryOperatorSpacesFixer.php | 165 - .../Operator/TernaryToElvisOperatorFixer.php | 229 - .../Operator/TernaryToNullCoalescingFixer.php | 227 - .../Operator/UnaryOperatorSpacesFixer.php | 81 - .../PhpTag/BlankLineAfterOpeningTagFixer.php | 102 - .../src/Fixer/PhpTag/EchoTagSyntaxFixer.php | 269 - .../src/Fixer/PhpTag/FullOpeningTagFixer.php | 135 - .../PhpTag/LinebreakAfterOpeningTagFixer.php | 80 - .../src/Fixer/PhpTag/NoClosingTagFixer.php | 72 - .../Phpdoc/AlignMultilineCommentFixer.php | 182 - .../GeneralPhpdocAnnotationRemoveFixer.php | 176 - .../Phpdoc/GeneralPhpdocTagRenameFixer.php | 213 - .../Phpdoc/NoBlankLinesAfterPhpdocFixer.php | 115 - .../src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php | 71 - .../Phpdoc/NoSuperfluousPhpdocTagsFixer.php | 667 - .../PhpdocAddMissingParamAnnotationFixer.php | 279 - .../src/Fixer/Phpdoc/PhpdocAlignFixer.php | 458 - .../PhpdocAnnotationWithoutDotFixer.php | 134 - .../src/Fixer/Phpdoc/PhpdocIndentFixer.php | 144 - .../Phpdoc/PhpdocInlineTagNormalizerFixer.php | 121 - .../src/Fixer/Phpdoc/PhpdocLineSpanFixer.php | 165 - .../src/Fixer/Phpdoc/PhpdocNoAccessFixer.php | 73 - .../Fixer/Phpdoc/PhpdocNoAliasTagFixer.php | 135 - .../Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php | 126 - .../src/Fixer/Phpdoc/PhpdocNoPackageFixer.php | 73 - .../Phpdoc/PhpdocNoUselessInheritdocFixer.php | 162 - .../Fixer/Phpdoc/PhpdocOrderByValueFixer.php | 223 - .../src/Fixer/Phpdoc/PhpdocOrderFixer.php | 220 - .../Phpdoc/PhpdocReturnSelfReferenceFixer.php | 231 - .../src/Fixer/Phpdoc/PhpdocScalarFixer.php | 131 - .../Fixer/Phpdoc/PhpdocSeparationFixer.php | 234 - .../PhpdocSingleLineVarSpacingFixer.php | 98 - .../src/Fixer/Phpdoc/PhpdocSummaryFixer.php | 103 - .../src/Fixer/Phpdoc/PhpdocTagCasingFixer.php | 106 - .../src/Fixer/Phpdoc/PhpdocTagTypeFixer.php | 215 - .../src/Fixer/Phpdoc/PhpdocToCommentFixer.php | 162 - ...rimConsecutiveBlankLineSeparationFixer.php | 197 - .../src/Fixer/Phpdoc/PhpdocTrimFixer.php | 124 - .../src/Fixer/Phpdoc/PhpdocTypesFixer.php | 178 - .../Fixer/Phpdoc/PhpdocTypesOrderFixer.php | 206 - .../PhpdocVarAnnotationCorrectOrderFixer.php | 81 - .../Phpdoc/PhpdocVarWithoutNameFixer.php | 160 - .../ReturnNotation/NoUselessReturnFixer.php | 112 - .../ReturnNotation/ReturnAssignmentFixer.php | 482 - .../SimplifiedNullReturnFixer.php | 157 - ...ltilineWhitespaceBeforeSemicolonsFixer.php | 295 - .../Fixer/Semicolon/NoEmptyStatementFixer.php | 195 - ...glelineWhitespaceBeforeSemicolonsFixer.php | 75 - .../SemicolonAfterInstructionFixer.php | 73 - .../Semicolon/SpaceAfterSemicolonFixer.php | 146 - .../Fixer/Strict/DeclareStrictTypesFixer.php | 152 - .../Fixer/Strict/StrictComparisonFixer.php | 89 - .../src/Fixer/Strict/StrictParamFixer.php | 177 - .../EscapeImplicitBackslashesFixer.php | 171 - .../ExplicitStringVariableFixer.php | 175 - .../StringNotation/HeredocToNowdocFixer.php | 116 - .../StringNotation/NoBinaryStringFixer.php | 84 - .../NoTrailingWhitespaceInStringFixer.php | 112 - .../SimpleToComplexStringVariableFixer.php | 116 - .../Fixer/StringNotation/SingleQuoteFixer.php | 121 - .../StringLengthToEmptyFixer.php | 329 - .../StringNotation/StringLineEndingFixer.php | 88 - .../Whitespace/ArrayIndentationFixer.php | 203 - .../BlankLineBeforeStatementFixer.php | 350 - .../BlankLineBetweenImportGroupsFixer.php | 192 - .../CompactNullableTypehintFixer.php | 80 - .../Whitespace/HeredocIndentationFixer.php | 185 - .../Fixer/Whitespace/IndentationTypeFixer.php | 153 - .../src/Fixer/Whitespace/LineEndingFixer.php | 94 - .../MethodChainingIndentationFixer.php | 222 - .../Whitespace/NoExtraBlankLinesFixer.php | 460 - .../Whitespace/NoSpacesAroundOffsetFixer.php | 111 - .../NoSpacesInsideParenthesisFixer.php | 111 - .../Whitespace/NoTrailingWhitespaceFixer.php | 113 - .../NoWhitespaceInBlankLineFixer.php | 98 - .../Whitespace/SingleBlankLineAtEofFixer.php | 76 - .../Whitespace/StatementIndentationFixer.php | 615 - .../src/Fixer/Whitespace/TypesSpacesFixer.php | 155 - .../Fixer/WhitespacesAwareFixerInterface.php | 25 - .../FixerConfiguration/AliasedFixerOption.php | 94 - .../AliasedFixerOptionBuilder.php | 78 - .../FixerConfiguration/AllowedValueSubset.php | 63 - .../DeprecatedFixerOption.php | 89 - .../DeprecatedFixerOptionInterface.php | 20 - .../FixerConfigurationResolver.php | 131 - .../FixerConfigurationResolverInterface.php | 30 - .../src/FixerConfiguration/FixerOption.php | 162 - .../FixerConfiguration/FixerOptionBuilder.php | 131 - .../FixerOptionInterface.php | 43 - .../InvalidOptionsForEnvException.php | 26 - .../src/FixerDefinition/CodeSample.php | 47 - .../FixerDefinition/CodeSampleInterface.php | 28 - .../FileSpecificCodeSample.php | 63 - .../FileSpecificCodeSampleInterface.php | 25 - .../src/FixerDefinition/FixerDefinition.php | 68 - .../FixerDefinitionInterface.php | 37 - .../VersionSpecificCodeSample.php | 61 - .../VersionSpecificCodeSampleInterface.php | 23 - .../FixerDefinition/VersionSpecification.php | 79 - .../VersionSpecificationInterface.php | 23 - .../php-cs-fixer/src/FixerFactory.php | 236 - .../src/FixerFileProcessedEvent.php | 51 - .../php-cs-fixer/src/FixerNameValidator.php | 32 - .../Indicator/PhpUnitTestCaseIndicator.php | 85 - .../php-cs-fixer/src/Linter/CachingLinter.php | 71 - .../php-cs-fixer/src/Linter/Linter.php | 56 - .../src/Linter/LinterInterface.php | 35 - .../src/Linter/LintingException.php | 26 - .../src/Linter/LintingResultInterface.php | 26 - .../php-cs-fixer/src/Linter/ProcessLinter.php | 160 - .../Linter/ProcessLinterProcessBuilder.php | 44 - .../src/Linter/ProcessLintingResult.php | 88 - .../src/Linter/TokenizerLinter.php | 65 - .../src/Linter/TokenizerLintingResult.php | 49 - .../src/Linter/UnavailableLinterException.php | 28 - .../php-cs-fixer/src/PharChecker.php | 41 - .../php-cs-fixer/src/PharCheckerInterface.php | 26 - .../friendsofphp/php-cs-fixer/src/Preg.php | 200 - .../php-cs-fixer/src/PregException.php | 26 - .../AbstractMigrationSetDescription.php | 38 - .../RuleSet/AbstractRuleSetDescription.php | 37 - .../php-cs-fixer/src/RuleSet/RuleSet.php | 152 - .../RuleSet/RuleSetDescriptionInterface.php | 34 - .../src/RuleSet/RuleSetInterface.php | 49 - .../php-cs-fixer/src/RuleSet/RuleSets.php | 70 - .../RuleSet/Sets/DoctrineAnnotationSet.php | 42 - .../src/RuleSet/Sets/PERRiskySet.php | 37 - .../php-cs-fixer/src/RuleSet/Sets/PERSet.php | 37 - .../src/RuleSet/Sets/PHP54MigrationSet.php | 30 - .../RuleSet/Sets/PHP56MigrationRiskySet.php | 30 - .../RuleSet/Sets/PHP70MigrationRiskySet.php | 39 - .../src/RuleSet/Sets/PHP70MigrationSet.php | 31 - .../RuleSet/Sets/PHP71MigrationRiskySet.php | 31 - .../src/RuleSet/Sets/PHP71MigrationSet.php | 32 - .../src/RuleSet/Sets/PHP73MigrationSet.php | 34 - .../RuleSet/Sets/PHP74MigrationRiskySet.php | 33 - .../src/RuleSet/Sets/PHP74MigrationSet.php | 33 - .../RuleSet/Sets/PHP80MigrationRiskySet.php | 40 - .../src/RuleSet/Sets/PHP80MigrationSet.php | 32 - .../src/RuleSet/Sets/PHP81MigrationSet.php | 31 - .../src/RuleSet/Sets/PHP82MigrationSet.php | 31 - .../Sets/PHPUnit30MigrationRiskySet.php | 33 - .../Sets/PHPUnit32MigrationRiskySet.php | 34 - .../Sets/PHPUnit35MigrationRiskySet.php | 34 - .../Sets/PHPUnit43MigrationRiskySet.php | 34 - .../Sets/PHPUnit48MigrationRiskySet.php | 34 - .../Sets/PHPUnit50MigrationRiskySet.php | 34 - .../Sets/PHPUnit52MigrationRiskySet.php | 34 - .../Sets/PHPUnit54MigrationRiskySet.php | 34 - .../Sets/PHPUnit55MigrationRiskySet.php | 34 - .../Sets/PHPUnit56MigrationRiskySet.php | 37 - .../Sets/PHPUnit57MigrationRiskySet.php | 34 - .../Sets/PHPUnit60MigrationRiskySet.php | 34 - .../Sets/PHPUnit75MigrationRiskySet.php | 34 - .../Sets/PHPUnit84MigrationRiskySet.php | 35 - .../src/RuleSet/Sets/PSR12RiskySet.php | 36 - .../src/RuleSet/Sets/PSR12Set.php | 72 - .../php-cs-fixer/src/RuleSet/Sets/PSR1Set.php | 36 - .../php-cs-fixer/src/RuleSet/Sets/PSR2Set.php | 65 - .../src/RuleSet/Sets/PhpCsFixerRiskySet.php | 61 - .../src/RuleSet/Sets/PhpCsFixerSet.php | 125 - .../src/RuleSet/Sets/SymfonyRiskySet.php | 76 - .../src/RuleSet/Sets/SymfonySet.php | 270 - .../src/Runner/FileCachingLintingIterator.php | 84 - .../src/Runner/FileFilterIterator.php | 111 - .../src/Runner/FileLintingIterator.php | 69 - .../php-cs-fixer/src/Runner/Runner.php | 300 - .../php-cs-fixer/src/StdinFileInfo.php | 174 - .../src/Tokenizer/AbstractTransformer.php | 49 - .../src/Tokenizer/AbstractTypeTransformer.php | 96 - .../Analyzer/AlternativeSyntaxAnalyzer.php | 116 - .../AbstractControlCaseStructuresAnalysis.php | 49 - .../Analyzer/Analysis/ArgumentAnalysis.php | 79 - .../Analyzer/Analysis/CaseAnalysis.php | 43 - .../Analyzer/Analysis/DefaultAnalysis.php | 41 - .../Analyzer/Analysis/EnumAnalysis.php | 44 - .../Analyzer/Analysis/MatchAnalysis.php | 35 - .../Analyzer/Analysis/NamespaceAnalysis.php | 96 - .../Analysis/NamespaceUseAnalysis.php | 110 - .../Analysis/StartEndTokenAwareAnalysis.php | 28 - .../Analyzer/Analysis/SwitchAnalysis.php | 52 - .../Analyzer/Analysis/TypeAnalysis.php | 96 - .../Tokenizer/Analyzer/ArgumentsAnalyzer.php | 157 - .../Tokenizer/Analyzer/AttributeAnalyzer.php | 70 - .../src/Tokenizer/Analyzer/BlocksAnalyzer.php | 63 - .../src/Tokenizer/Analyzer/ClassyAnalyzer.php | 83 - .../Tokenizer/Analyzer/CommentsAnalyzer.php | 317 - .../ControlCaseStructuresAnalyzer.php | 310 - .../Tokenizer/Analyzer/FunctionsAnalyzer.php | 269 - .../Tokenizer/Analyzer/GotoLabelAnalyzer.php | 40 - .../Analyzer/NamespaceUsesAnalyzer.php | 121 - .../Tokenizer/Analyzer/NamespacesAnalyzer.php | 88 - .../src/Tokenizer/Analyzer/RangeAnalyzer.php | 90 - .../Tokenizer/Analyzer/ReferenceAnalyzer.php | 49 - .../Analyzer/WhitespacesAnalyzer.php | 52 - .../php-cs-fixer/src/Tokenizer/CT.php | 104 - .../php-cs-fixer/src/Tokenizer/CodeHasher.php | 36 - .../php-cs-fixer/src/Tokenizer/Token.php | 513 - .../php-cs-fixer/src/Tokenizer/Tokens.php | 1402 - .../src/Tokenizer/TokensAnalyzer.php | 766 - .../Transformer/ArrayTypehintTransformer.php | 63 - .../Transformer/AttributeTransformer.php | 79 - .../BraceClassInstantiationTransformer.php | 90 - .../Transformer/ClassConstantTransformer.php | 66 - .../ConstructorPromotionTransformer.php | 80 - .../Transformer/CurlyBraceTransformer.php | 253 - .../FirstClassCallableTransformer.php | 58 - .../Transformer/ImportTransformer.php | 84 - .../Transformer/NameQualifiedTransformer.php | 101 - .../Transformer/NamedArgumentTransformer.php | 85 - .../NamespaceOperatorTransformer.php | 62 - .../Transformer/NullableTypeTransformer.php | 94 - .../Transformer/ReturnRefTransformer.php | 56 - .../Transformer/SquareBraceTransformer.php | 199 - .../TypeAlternationTransformer.php | 69 - .../Transformer/TypeColonTransformer.php | 95 - .../TypeIntersectionTransformer.php | 67 - .../Tokenizer/Transformer/UseTransformer.php | 114 - .../WhitespacyCommentTransformer.php | 73 - .../src/Tokenizer/TransformerInterface.php | 68 - .../src/Tokenizer/Transformers.php | 111 - .../php-cs-fixer/src/ToolInfo.php | 113 - .../php-cs-fixer/src/ToolInfoInterface.php | 36 - .../friendsofphp/php-cs-fixer/src/Utils.php | 176 - .../src/WhitespacesFixerConfig.php | 49 - .../php-cs-fixer/src/WordMatcher.php | 53 - old_vendor/kint-php/kint/LICENSE | 20 - old_vendor/kint-php/kint/README.md | 80 - old_vendor/kint-php/kint/composer.json | 74 - old_vendor/kint-php/kint/init.php | 72 - old_vendor/kint-php/kint/init_helpers.php | 88 - .../kint/resources/compiled/aante-light.css | 1 - .../kint/resources/compiled/microtime.js | 1 - .../kint/resources/compiled/original.css | 1 - .../kint/resources/compiled/plain.css | 1 - .../kint-php/kint/resources/compiled/plain.js | 1 - .../kint-php/kint/resources/compiled/rich.js | 1 - .../kint/resources/compiled/shared.js | 1 - .../resources/compiled/solarized-dark.css | 1 - .../kint/resources/compiled/solarized.css | 1 - old_vendor/kint-php/kint/src/CallFinder.php | 569 - .../kint-php/kint/src/FacadeInterface.php | 49 - old_vendor/kint-php/kint/src/Kint.php | 728 - .../kint/src/Parser/AbstractPlugin.php | 45 - .../kint/src/Parser/ArrayLimitPlugin.php | 144 - .../kint/src/Parser/ArrayObjectPlugin.php | 65 - .../kint-php/kint/src/Parser/Base64Plugin.php | 96 - .../kint-php/kint/src/Parser/BinaryPlugin.php | 51 - .../kint/src/Parser/BlacklistPlugin.php | 100 - .../kint/src/Parser/ClassMethodsPlugin.php | 115 - .../kint/src/Parser/ClassStaticsPlugin.php | 154 - .../kint/src/Parser/ClosurePlugin.php | 96 - .../kint-php/kint/src/Parser/ColorPlugin.php | 65 - .../Parser/ConstructablePluginInterface.php | 33 - .../kint/src/Parser/DOMDocumentPlugin.php | 356 - .../kint/src/Parser/DateTimePlugin.php | 57 - .../kint-php/kint/src/Parser/EnumPlugin.php | 88 - .../kint-php/kint/src/Parser/FsPathPlugin.php | 74 - .../kint/src/Parser/IteratorPlugin.php | 107 - .../kint-php/kint/src/Parser/JsonPlugin.php | 75 - .../kint/src/Parser/MicrotimePlugin.php | 107 - .../kint-php/kint/src/Parser/MysqliPlugin.php | 193 - .../kint-php/kint/src/Parser/Parser.php | 655 - .../kint/src/Parser/PluginInterface.php | 44 - .../kint-php/kint/src/Parser/ProxyPlugin.php | 73 - .../kint/src/Parser/SerializePlugin.php | 109 - .../src/Parser/SimpleXMLElementPlugin.php | 221 - .../kint/src/Parser/SplFileInfoPlugin.php | 57 - .../src/Parser/SplObjectStoragePlugin.php | 56 - .../kint-php/kint/src/Parser/StreamPlugin.php | 83 - .../kint-php/kint/src/Parser/TablePlugin.php | 89 - .../kint/src/Parser/ThrowablePlugin.php | 61 - .../kint/src/Parser/TimestampPlugin.php | 77 - .../kint/src/Parser/ToStringPlugin.php | 69 - .../kint-php/kint/src/Parser/TracePlugin.php | 120 - .../kint-php/kint/src/Parser/XmlPlugin.php | 152 - .../kint/src/Renderer/AbstractRenderer.php | 175 - .../kint/src/Renderer/CliRenderer.php | 182 - .../kint/src/Renderer/PlainRenderer.php | 237 - .../kint/src/Renderer/RendererInterface.php | 57 - .../kint/src/Renderer/Rich/AbstractPlugin.php | 104 - .../src/Renderer/Rich/ArrayLimitPlugin.php | 38 - .../kint/src/Renderer/Rich/BinaryPlugin.php | 62 - .../src/Renderer/Rich/BlacklistPlugin.php | 38 - .../kint/src/Renderer/Rich/CallablePlugin.php | 130 - .../kint/src/Renderer/Rich/ClosurePlugin.php | 64 - .../kint/src/Renderer/Rich/ColorPlugin.php | 102 - .../src/Renderer/Rich/DepthLimitPlugin.php | 38 - .../Renderer/Rich/MethodDefinitionPlugin.php | 76 - .../src/Renderer/Rich/MicrotimePlugin.php | 74 - .../src/Renderer/Rich/PluginInterface.php | 35 - .../src/Renderer/Rich/RecursionPlugin.php | 38 - .../Renderer/Rich/SimpleXMLElementPlugin.php | 56 - .../kint/src/Renderer/Rich/SourcePlugin.php | 83 - .../src/Renderer/Rich/TabPluginInterface.php | 35 - .../kint/src/Renderer/Rich/TablePlugin.php | 141 - .../src/Renderer/Rich/TimestampPlugin.php | 44 - .../src/Renderer/Rich/TraceFramePlugin.php | 70 - .../Renderer/Rich/ValuePluginInterface.php | 35 - .../kint/src/Renderer/RichRenderer.php | 655 - .../kint/src/Renderer/Text/AbstractPlugin.php | 63 - .../src/Renderer/Text/ArrayLimitPlugin.php | 38 - .../src/Renderer/Text/BlacklistPlugin.php | 38 - .../src/Renderer/Text/DepthLimitPlugin.php | 38 - .../kint/src/Renderer/Text/EnumPlugin.php | 38 - .../src/Renderer/Text/MicrotimePlugin.php | 130 - .../src/Renderer/Text/PluginInterface.php | 38 - .../src/Renderer/Text/RecursionPlugin.php | 38 - .../kint/src/Renderer/Text/TracePlugin.php | 115 - .../kint/src/Renderer/TextRenderer.php | 379 - old_vendor/kint-php/kint/src/Utils.php | 298 - .../kint-php/kint/src/Zval/BlobValue.php | 203 - .../kint-php/kint/src/Zval/ClosureValue.php | 58 - .../kint-php/kint/src/Zval/DateTimeValue.php | 55 - .../kint-php/kint/src/Zval/EnumValue.php | 74 - .../kint-php/kint/src/Zval/InstanceValue.php | 74 - .../kint-php/kint/src/Zval/MethodValue.php | 228 - .../kint/src/Zval/ParameterHoldingTrait.php | 63 - .../kint-php/kint/src/Zval/ParameterValue.php | 85 - .../Representation/ColorRepresentation.php | 571 - .../MethodDefinitionRepresentation.php | 76 - .../MicrotimeRepresentation.php | 73 - .../Zval/Representation/Representation.php | 73 - .../Representation/SourceRepresentation.php | 72 - .../SplFileInfoRepresentation.php | 196 - .../kint-php/kint/src/Zval/ResourceValue.php | 51 - .../kint/src/Zval/SimpleXMLElementValue.php | 54 - .../kint-php/kint/src/Zval/StreamValue.php | 56 - .../kint-php/kint/src/Zval/ThrowableValue.php | 52 - .../kint/src/Zval/TraceFrameValue.php | 107 - .../kint-php/kint/src/Zval/TraceValue.php | 47 - old_vendor/kint-php/kint/src/Zval/Value.php | 266 - .../laminas/laminas-escaper/COPYRIGHT.md | 1 - old_vendor/laminas/laminas-escaper/LICENSE.md | 26 - old_vendor/laminas/laminas-escaper/README.md | 43 - .../laminas/laminas-escaper/composer.json | 68 - .../laminas/laminas-escaper/src/Escaper.php | 412 - .../src/Exception/ExceptionInterface.php | 11 - .../Exception/InvalidArgumentException.php | 13 - .../src/Exception/RuntimeException.php | 13 - .../vfsstream/.github/workflows/runTests.yml | 75 - old_vendor/mikey179/vfsstream/CHANGELOG.md | 270 - old_vendor/mikey179/vfsstream/LICENSE | 27 - old_vendor/mikey179/vfsstream/README.md | 8 - old_vendor/mikey179/vfsstream/composer.json | 36 - .../mikey179/vfsstream/phpunit.xml.dist | 44 - .../main/php/org/bovigo/vfs/DotDirectory.php | 36 - .../src/main/php/org/bovigo/vfs/Quota.php | 86 - .../org/bovigo/vfs/content/FileContent.php | 71 - .../bovigo/vfs/content/LargeFileContent.php | 167 - .../vfs/content/SeekableFileContent.php | 134 - .../vfs/content/StringBasedFileContent.php | 97 - .../src/main/php/org/bovigo/vfs/vfsStream.php | 479 - .../bovigo/vfs/vfsStreamAbstractContent.php | 418 - .../php/org/bovigo/vfs/vfsStreamBlock.php | 34 - .../php/org/bovigo/vfs/vfsStreamContainer.php | 61 - .../bovigo/vfs/vfsStreamContainerIterator.php | 98 - .../php/org/bovigo/vfs/vfsStreamContent.php | 213 - .../php/org/bovigo/vfs/vfsStreamDirectory.php | 267 - .../php/org/bovigo/vfs/vfsStreamException.php | 19 - .../main/php/org/bovigo/vfs/vfsStreamFile.php | 394 - .../php/org/bovigo/vfs/vfsStreamWrapper.php | 1018 - .../vfs/visitor/vfsStreamAbstractVisitor.php | 64 - .../vfs/visitor/vfsStreamPrintVisitor.php | 108 - .../vfs/visitor/vfsStreamStructureVisitor.php | 111 - .../bovigo/vfs/visitor/vfsStreamVisitor.php | 55 - .../mikey179/vfsstream/src/test/bootstrap.php | 84 - .../src/test/patches/php8-return-types.diff | 21 - .../bovigo/vfs/DirectoryIterationTestCase.php | 318 - .../php/org/bovigo/vfs/FilenameTestCase.php | 88 - .../php/org/bovigo/vfs/Issue104TestCase.php | 52 - .../org/bovigo/vfs/PermissionsTestCase.php | 118 - .../test/php/org/bovigo/vfs/QuotaTestCase.php | 80 - .../php/org/bovigo/vfs/UnlinkTestCase.php | 58 - .../vfs/content/LargeFileContentTestCase.php | 225 - .../StringBasedFileContentTestCase.php | 232 - .../proxy/vfsStreamWrapperRecordingProxy.php | 325 - .../vfs/vfsStreamAbstractContentTestCase.php | 1053 - .../org/bovigo/vfs/vfsStreamBlockTestCase.php | 89 - .../vfsStreamContainerIteratorTestCase.php | 111 - .../vfsStreamDirectoryIssue134TestCase.php | 64 - .../vfs/vfsStreamDirectoryIssue18TestCase.php | 80 - .../bovigo/vfs/vfsStreamDirectoryTestCase.php | 334 - .../bovigo/vfs/vfsStreamExLockTestCase.php | 55 - .../org/bovigo/vfs/vfsStreamFileTestCase.php | 337 - .../org/bovigo/vfs/vfsStreamGlobTestCase.php | 28 - .../vfsStreamResolveIncludePathTestCase.php | 61 - .../php/org/bovigo/vfs/vfsStreamTestCase.php | 780 - .../org/bovigo/vfs/vfsStreamUmaskTestCase.php | 194 - ...StreamWrapperAlreadyRegisteredTestCase.php | 62 - .../vfs/vfsStreamWrapperBaseTestCase.php | 98 - .../vfsStreamWrapperDirSeparatorTestCase.php | 72 - .../vfs/vfsStreamWrapperDirTestCase.php | 500 - .../vfs/vfsStreamWrapperFileTestCase.php | 457 - .../vfs/vfsStreamWrapperFileTimesTestCase.php | 314 - .../vfs/vfsStreamWrapperFlockTestCase.php | 439 - .../vfs/vfsStreamWrapperLargeFileTestCase.php | 81 - .../vfs/vfsStreamWrapperQuotaTestCase.php | 223 - .../vfs/vfsStreamWrapperSetOptionTestCase.php | 75 - .../vfsStreamWrapperStreamSelectTestCase.php | 42 - .../bovigo/vfs/vfsStreamWrapperTestCase.php | 789 - .../vfsStreamWrapperUnregisterTestCase.php | 75 - .../vfsStreamWrapperWithoutRootTestCase.php | 63 - .../org/bovigo/vfs/vfsStreamZipTestCase.php | 52 - .../vfsStreamAbstractVisitorTestCase.php | 98 - .../visitor/vfsStreamPrintVisitorTestCase.php | 102 - .../vfsStreamStructureVisitorTestCase.php | 85 - .../vfsstream/src/test/phpt/bug71287.phpt | 29 - .../filesystemcopy/emptyFolder/.gitignore | 0 .../filesystemcopy/withSubfolders/aFile.txt | 1 - .../withSubfolders/subfolder1/file1.txt | 1 - .../withSubfolders/subfolder2/.gitignore | 0 .../myclabs/deep-copy/.github/FUNDING.yml | 12 - .../deep-copy/.github/workflows/ci.yaml | 101 - old_vendor/myclabs/deep-copy/LICENSE | 20 - old_vendor/myclabs/deep-copy/README.md | 406 - old_vendor/myclabs/deep-copy/composer.json | 42 - .../deep-copy/src/DeepCopy/DeepCopy.php | 308 - .../src/DeepCopy/Exception/CloneException.php | 9 - .../DeepCopy/Exception/PropertyException.php | 9 - .../src/DeepCopy/Filter/ChainableFilter.php | 24 - .../Doctrine/DoctrineCollectionFilter.php | 33 - .../DoctrineEmptyCollectionFilter.php | 28 - .../Filter/Doctrine/DoctrineProxyFilter.php | 22 - .../deep-copy/src/DeepCopy/Filter/Filter.php | 18 - .../src/DeepCopy/Filter/KeepFilter.php | 16 - .../src/DeepCopy/Filter/ReplaceFilter.php | 39 - .../src/DeepCopy/Filter/SetNullFilter.php | 24 - .../Matcher/Doctrine/DoctrineProxyMatcher.php | 22 - .../src/DeepCopy/Matcher/Matcher.php | 14 - .../src/DeepCopy/Matcher/PropertyMatcher.php | 39 - .../DeepCopy/Matcher/PropertyNameMatcher.php | 32 - .../DeepCopy/Matcher/PropertyTypeMatcher.php | 52 - .../DeepCopy/Reflection/ReflectionHelper.php | 78 - .../TypeFilter/Date/DateIntervalFilter.php | 33 - .../src/DeepCopy/TypeFilter/ReplaceFilter.php | 30 - .../DeepCopy/TypeFilter/ShallowCopyFilter.php | 17 - .../TypeFilter/Spl/ArrayObjectFilter.php | 36 - .../TypeFilter/Spl/SplDoublyLinkedList.php | 10 - .../Spl/SplDoublyLinkedListFilter.php | 51 - .../src/DeepCopy/TypeFilter/TypeFilter.php | 13 - .../src/DeepCopy/TypeMatcher/TypeMatcher.php | 29 - .../deep-copy/src/DeepCopy/deep_copy.php | 20 - old_vendor/nexusphp/cs-config/.editorconfig | 11 - old_vendor/nexusphp/cs-config/.gitignore | 8 - .../nexusphp/cs-config/.php-cs-fixer.dist.php | 37 - old_vendor/nexusphp/cs-config/CHANGELOG.md | 232 - old_vendor/nexusphp/cs-config/LICENSE | 21 - old_vendor/nexusphp/cs-config/README.md | 222 - old_vendor/nexusphp/cs-config/composer.json | 52 - .../cs-config/phpstan-baseline.neon.dist | 6 - .../nexusphp/cs-config/phpstan.neon.dist | 28 - .../nexusphp/cs-config/phpunit.xml.dist | 39 - old_vendor/nexusphp/cs-config/src/Factory.php | 203 - .../src/Fixer/AbstractCustomFixer.php | 45 - .../Comment/NoCodeSeparatorCommentFixer.php | 130 - .../Comment/SpaceAfterCommentStartFixer.php | 108 - .../nexusphp/cs-config/src/FixerGenerator.php | 91 - .../cs-config/src/Ruleset/AbstractRuleset.php | 69 - .../cs-config/src/Ruleset/Nexus74.php | 637 - .../cs-config/src/Ruleset/Nexus80.php | 637 - .../cs-config/src/Ruleset/Nexus81.php | 637 - .../src/Ruleset/RulesetInterface.php | 44 - .../src/Test/AbstractCustomFixerTestCase.php | 373 - .../src/Test/AbstractRulesetTestCase.php | 224 - .../cs-config/src/Test/FixerProvider.php | 114 - old_vendor/nikic/php-parser/LICENSE | 29 - old_vendor/nikic/php-parser/README.md | 225 - old_vendor/nikic/php-parser/bin/php-parse | 205 - old_vendor/nikic/php-parser/composer.json | 41 - old_vendor/nikic/php-parser/grammar/README.md | 30 - .../nikic/php-parser/grammar/parser.template | 106 - old_vendor/nikic/php-parser/grammar/php5.y | 1046 - old_vendor/nikic/php-parser/grammar/php7.y | 1245 - .../nikic/php-parser/grammar/phpyLang.php | 184 - .../php-parser/grammar/rebuildParsers.php | 81 - .../nikic/php-parser/grammar/tokens.template | 17 - old_vendor/nikic/php-parser/grammar/tokens.y | 115 - .../php-parser/lib/PhpParser/Builder.php | 13 - .../lib/PhpParser/Builder/ClassConst.php | 148 - .../lib/PhpParser/Builder/Class_.php | 146 - .../lib/PhpParser/Builder/Declaration.php | 43 - .../lib/PhpParser/Builder/EnumCase.php | 85 - .../lib/PhpParser/Builder/Enum_.php | 117 - .../lib/PhpParser/Builder/FunctionLike.php | 73 - .../lib/PhpParser/Builder/Function_.php | 67 - .../lib/PhpParser/Builder/Interface_.php | 93 - .../lib/PhpParser/Builder/Method.php | 146 - .../lib/PhpParser/Builder/Namespace_.php | 45 - .../lib/PhpParser/Builder/Param.php | 168 - .../lib/PhpParser/Builder/Property.php | 161 - .../lib/PhpParser/Builder/TraitUse.php | 64 - .../PhpParser/Builder/TraitUseAdaptation.php | 148 - .../lib/PhpParser/Builder/Trait_.php | 78 - .../php-parser/lib/PhpParser/Builder/Use_.php | 49 - .../lib/PhpParser/BuilderFactory.php | 399 - .../lib/PhpParser/BuilderHelpers.php | 335 - .../php-parser/lib/PhpParser/Comment.php | 239 - .../php-parser/lib/PhpParser/Comment/Doc.php | 7 - .../ConstExprEvaluationException.php | 6 - .../lib/PhpParser/ConstExprEvaluator.php | 229 - .../nikic/php-parser/lib/PhpParser/Error.php | 180 - .../php-parser/lib/PhpParser/ErrorHandler.php | 13 - .../lib/PhpParser/ErrorHandler/Collecting.php | 46 - .../lib/PhpParser/ErrorHandler/Throwing.php | 18 - .../lib/PhpParser/Internal/DiffElem.php | 27 - .../lib/PhpParser/Internal/Differ.php | 164 - .../Internal/PrintableNewAnonClassNode.php | 64 - .../lib/PhpParser/Internal/TokenStream.php | 286 - .../php-parser/lib/PhpParser/JsonDecoder.php | 103 - .../nikic/php-parser/lib/PhpParser/Lexer.php | 560 - .../lib/PhpParser/Lexer/Emulative.php | 251 - .../Lexer/TokenEmulator/AttributeEmulator.php | 56 - .../CoaleseEqualTokenEmulator.php | 47 - .../Lexer/TokenEmulator/EnumTokenEmulator.php | 31 - .../TokenEmulator/ExplicitOctalEmulator.php | 44 - .../FlexibleDocStringEmulator.php | 76 - .../Lexer/TokenEmulator/FnTokenEmulator.php | 23 - .../Lexer/TokenEmulator/KeywordEmulator.php | 62 - .../TokenEmulator/MatchTokenEmulator.php | 23 - .../TokenEmulator/NullsafeTokenEmulator.php | 67 - .../NumericLiteralSeparatorEmulator.php | 105 - .../ReadonlyFunctionTokenEmulator.php | 31 - .../TokenEmulator/ReadonlyTokenEmulator.php | 36 - .../Lexer/TokenEmulator/ReverseEmulator.php | 36 - .../Lexer/TokenEmulator/TokenEmulator.php | 25 - .../php-parser/lib/PhpParser/NameContext.php | 285 - .../nikic/php-parser/lib/PhpParser/Node.php | 151 - .../php-parser/lib/PhpParser/Node/Arg.php | 46 - .../lib/PhpParser/Node/Attribute.php | 34 - .../lib/PhpParser/Node/AttributeGroup.php | 29 - .../lib/PhpParser/Node/ComplexType.php | 14 - .../php-parser/lib/PhpParser/Node/Const_.php | 37 - .../php-parser/lib/PhpParser/Node/Expr.php | 9 - .../lib/PhpParser/Node/Expr/ArrayDimFetch.php | 34 - .../lib/PhpParser/Node/Expr/ArrayItem.php | 41 - .../lib/PhpParser/Node/Expr/Array_.php | 34 - .../lib/PhpParser/Node/Expr/ArrowFunction.php | 79 - .../lib/PhpParser/Node/Expr/Assign.php | 34 - .../lib/PhpParser/Node/Expr/AssignOp.php | 30 - .../Node/Expr/AssignOp/BitwiseAnd.php | 12 - .../Node/Expr/AssignOp/BitwiseOr.php | 12 - .../Node/Expr/AssignOp/BitwiseXor.php | 12 - .../PhpParser/Node/Expr/AssignOp/Coalesce.php | 12 - .../PhpParser/Node/Expr/AssignOp/Concat.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Div.php | 12 - .../PhpParser/Node/Expr/AssignOp/Minus.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Mod.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Mul.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Plus.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Pow.php | 12 - .../Node/Expr/AssignOp/ShiftLeft.php | 12 - .../Node/Expr/AssignOp/ShiftRight.php | 12 - .../lib/PhpParser/Node/Expr/AssignRef.php | 34 - .../lib/PhpParser/Node/Expr/BinaryOp.php | 40 - .../Node/Expr/BinaryOp/BitwiseAnd.php | 16 - .../Node/Expr/BinaryOp/BitwiseOr.php | 16 - .../Node/Expr/BinaryOp/BitwiseXor.php | 16 - .../Node/Expr/BinaryOp/BooleanAnd.php | 16 - .../Node/Expr/BinaryOp/BooleanOr.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Coalesce.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Concat.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Div.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Equal.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Greater.php | 16 - .../Node/Expr/BinaryOp/GreaterOrEqual.php | 16 - .../Node/Expr/BinaryOp/Identical.php | 16 - .../Node/Expr/BinaryOp/LogicalAnd.php | 16 - .../Node/Expr/BinaryOp/LogicalOr.php | 16 - .../Node/Expr/BinaryOp/LogicalXor.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Minus.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Mod.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Mul.php | 16 - .../PhpParser/Node/Expr/BinaryOp/NotEqual.php | 16 - .../Node/Expr/BinaryOp/NotIdentical.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Plus.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Pow.php | 16 - .../Node/Expr/BinaryOp/ShiftLeft.php | 16 - .../Node/Expr/BinaryOp/ShiftRight.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Smaller.php | 16 - .../Node/Expr/BinaryOp/SmallerOrEqual.php | 16 - .../Node/Expr/BinaryOp/Spaceship.php | 16 - .../lib/PhpParser/Node/Expr/BitwiseNot.php | 30 - .../lib/PhpParser/Node/Expr/BooleanNot.php | 30 - .../lib/PhpParser/Node/Expr/CallLike.php | 39 - .../lib/PhpParser/Node/Expr/Cast.php | 26 - .../lib/PhpParser/Node/Expr/Cast/Array_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Bool_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Double.php | 17 - .../lib/PhpParser/Node/Expr/Cast/Int_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Object_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/String_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Unset_.php | 12 - .../PhpParser/Node/Expr/ClassConstFetch.php | 36 - .../lib/PhpParser/Node/Expr/Clone_.php | 30 - .../lib/PhpParser/Node/Expr/Closure.php | 79 - .../lib/PhpParser/Node/Expr/ClosureUse.php | 34 - .../lib/PhpParser/Node/Expr/ConstFetch.php | 31 - .../lib/PhpParser/Node/Expr/Empty_.php | 30 - .../lib/PhpParser/Node/Expr/Error.php | 31 - .../lib/PhpParser/Node/Expr/ErrorSuppress.php | 30 - .../lib/PhpParser/Node/Expr/Eval_.php | 30 - .../lib/PhpParser/Node/Expr/Exit_.php | 34 - .../lib/PhpParser/Node/Expr/FuncCall.php | 39 - .../lib/PhpParser/Node/Expr/Include_.php | 39 - .../lib/PhpParser/Node/Expr/Instanceof_.php | 35 - .../lib/PhpParser/Node/Expr/Isset_.php | 30 - .../lib/PhpParser/Node/Expr/List_.php | 30 - .../lib/PhpParser/Node/Expr/Match_.php | 31 - .../lib/PhpParser/Node/Expr/MethodCall.php | 45 - .../lib/PhpParser/Node/Expr/New_.php | 41 - .../Node/Expr/NullsafeMethodCall.php | 45 - .../Node/Expr/NullsafePropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/PostDec.php | 30 - .../lib/PhpParser/Node/Expr/PostInc.php | 30 - .../lib/PhpParser/Node/Expr/PreDec.php | 30 - .../lib/PhpParser/Node/Expr/PreInc.php | 30 - .../lib/PhpParser/Node/Expr/Print_.php | 30 - .../lib/PhpParser/Node/Expr/PropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/ShellExec.php | 30 - .../lib/PhpParser/Node/Expr/StaticCall.php | 46 - .../Node/Expr/StaticPropertyFetch.php | 36 - .../lib/PhpParser/Node/Expr/Ternary.php | 38 - .../lib/PhpParser/Node/Expr/Throw_.php | 30 - .../lib/PhpParser/Node/Expr/UnaryMinus.php | 30 - .../lib/PhpParser/Node/Expr/UnaryPlus.php | 30 - .../lib/PhpParser/Node/Expr/Variable.php | 30 - .../lib/PhpParser/Node/Expr/YieldFrom.php | 30 - .../lib/PhpParser/Node/Expr/Yield_.php | 34 - .../lib/PhpParser/Node/FunctionLike.php | 43 - .../lib/PhpParser/Node/Identifier.php | 75 - .../lib/PhpParser/Node/IntersectionType.php | 30 - .../lib/PhpParser/Node/MatchArm.php | 31 - .../php-parser/lib/PhpParser/Node/Name.php | 254 - .../PhpParser/Node/Name/FullyQualified.php | 50 - .../lib/PhpParser/Node/Name/Relative.php | 50 - .../lib/PhpParser/Node/NullableType.php | 28 - .../php-parser/lib/PhpParser/Node/Param.php | 60 - .../php-parser/lib/PhpParser/Node/Scalar.php | 7 - .../lib/PhpParser/Node/Scalar/DNumber.php | 77 - .../lib/PhpParser/Node/Scalar/Encapsed.php | 31 - .../Node/Scalar/EncapsedStringPart.php | 30 - .../lib/PhpParser/Node/Scalar/LNumber.php | 80 - .../lib/PhpParser/Node/Scalar/MagicConst.php | 28 - .../Node/Scalar/MagicConst/Class_.php | 16 - .../PhpParser/Node/Scalar/MagicConst/Dir.php | 16 - .../PhpParser/Node/Scalar/MagicConst/File.php | 16 - .../Node/Scalar/MagicConst/Function_.php | 16 - .../PhpParser/Node/Scalar/MagicConst/Line.php | 16 - .../Node/Scalar/MagicConst/Method.php | 16 - .../Node/Scalar/MagicConst/Namespace_.php | 16 - .../Node/Scalar/MagicConst/Trait_.php | 16 - .../lib/PhpParser/Node/Scalar/String_.php | 157 - .../php-parser/lib/PhpParser/Node/Stmt.php | 9 - .../lib/PhpParser/Node/Stmt/Break_.php | 30 - .../lib/PhpParser/Node/Stmt/Case_.php | 34 - .../lib/PhpParser/Node/Stmt/Catch_.php | 41 - .../lib/PhpParser/Node/Stmt/ClassConst.php | 85 - .../lib/PhpParser/Node/Stmt/ClassLike.php | 109 - .../lib/PhpParser/Node/Stmt/ClassMethod.php | 161 - .../lib/PhpParser/Node/Stmt/Class_.php | 137 - .../lib/PhpParser/Node/Stmt/Const_.php | 30 - .../lib/PhpParser/Node/Stmt/Continue_.php | 30 - .../PhpParser/Node/Stmt/DeclareDeclare.php | 34 - .../lib/PhpParser/Node/Stmt/Declare_.php | 34 - .../lib/PhpParser/Node/Stmt/Do_.php | 34 - .../lib/PhpParser/Node/Stmt/Echo_.php | 30 - .../lib/PhpParser/Node/Stmt/ElseIf_.php | 34 - .../lib/PhpParser/Node/Stmt/Else_.php | 30 - .../lib/PhpParser/Node/Stmt/EnumCase.php | 37 - .../lib/PhpParser/Node/Stmt/Enum_.php | 40 - .../lib/PhpParser/Node/Stmt/Expression.php | 33 - .../lib/PhpParser/Node/Stmt/Finally_.php | 30 - .../lib/PhpParser/Node/Stmt/For_.php | 43 - .../lib/PhpParser/Node/Stmt/Foreach_.php | 47 - .../lib/PhpParser/Node/Stmt/Function_.php | 77 - .../lib/PhpParser/Node/Stmt/Global_.php | 30 - .../lib/PhpParser/Node/Stmt/Goto_.php | 31 - .../lib/PhpParser/Node/Stmt/GroupUse.php | 39 - .../lib/PhpParser/Node/Stmt/HaltCompiler.php | 30 - .../lib/PhpParser/Node/Stmt/If_.php | 43 - .../lib/PhpParser/Node/Stmt/InlineHTML.php | 30 - .../lib/PhpParser/Node/Stmt/Interface_.php | 37 - .../lib/PhpParser/Node/Stmt/Label.php | 31 - .../lib/PhpParser/Node/Stmt/Namespace_.php | 38 - .../lib/PhpParser/Node/Stmt/Nop.php | 17 - .../lib/PhpParser/Node/Stmt/Property.php | 91 - .../PhpParser/Node/Stmt/PropertyProperty.php | 34 - .../lib/PhpParser/Node/Stmt/Return_.php | 30 - .../lib/PhpParser/Node/Stmt/StaticVar.php | 37 - .../lib/PhpParser/Node/Stmt/Static_.php | 30 - .../lib/PhpParser/Node/Stmt/Switch_.php | 34 - .../lib/PhpParser/Node/Stmt/Throw_.php | 30 - .../lib/PhpParser/Node/Stmt/TraitUse.php | 34 - .../Node/Stmt/TraitUseAdaptation.php | 13 - .../Node/Stmt/TraitUseAdaptation/Alias.php | 38 - .../Stmt/TraitUseAdaptation/Precedence.php | 34 - .../lib/PhpParser/Node/Stmt/Trait_.php | 32 - .../lib/PhpParser/Node/Stmt/TryCatch.php | 38 - .../lib/PhpParser/Node/Stmt/Unset_.php | 30 - .../lib/PhpParser/Node/Stmt/UseUse.php | 52 - .../lib/PhpParser/Node/Stmt/Use_.php | 47 - .../lib/PhpParser/Node/Stmt/While_.php | 34 - .../lib/PhpParser/Node/UnionType.php | 28 - .../lib/PhpParser/Node/VarLikeIdentifier.php | 17 - .../PhpParser/Node/VariadicPlaceholder.php | 27 - .../php-parser/lib/PhpParser/NodeAbstract.php | 178 - .../php-parser/lib/PhpParser/NodeDumper.php | 206 - .../php-parser/lib/PhpParser/NodeFinder.php | 81 - .../lib/PhpParser/NodeTraverser.php | 291 - .../lib/PhpParser/NodeTraverserInterface.php | 29 - .../php-parser/lib/PhpParser/NodeVisitor.php | 72 - .../PhpParser/NodeVisitor/CloningVisitor.php | 20 - .../PhpParser/NodeVisitor/FindingVisitor.php | 48 - .../NodeVisitor/FirstFindingVisitor.php | 50 - .../PhpParser/NodeVisitor/NameResolver.php | 257 - .../NodeVisitor/NodeConnectingVisitor.php | 52 - .../NodeVisitor/ParentConnectingVisitor.php | 41 - .../lib/PhpParser/NodeVisitorAbstract.php | 25 - .../nikic/php-parser/lib/PhpParser/Parser.php | 18 - .../lib/PhpParser/Parser/Multiple.php | 55 - .../php-parser/lib/PhpParser/Parser/Php5.php | 2682 -- .../php-parser/lib/PhpParser/Parser/Php7.php | 2898 -- .../lib/PhpParser/Parser/Tokens.php | 148 - .../lib/PhpParser/ParserAbstract.php | 1060 - .../lib/PhpParser/ParserFactory.php | 44 - .../lib/PhpParser/PrettyPrinter/Standard.php | 1126 - .../lib/PhpParser/PrettyPrinterAbstract.php | 1576 - old_vendor/phar-io/manifest/CHANGELOG.md | 36 - old_vendor/phar-io/manifest/LICENSE | 31 - old_vendor/phar-io/manifest/README.md | 30 - old_vendor/phar-io/manifest/composer.json | 42 - .../manifest/src/ManifestDocumentMapper.php | 150 - .../phar-io/manifest/src/ManifestLoader.php | 44 - .../manifest/src/ManifestSerializer.php | 168 - .../exceptions/ElementCollectionException.php | 13 - .../manifest/src/exceptions/Exception.php | 13 - .../InvalidApplicationNameException.php | 14 - .../src/exceptions/InvalidEmailException.php | 13 - .../src/exceptions/InvalidUrlException.php | 13 - .../exceptions/ManifestDocumentException.php | 5 - .../ManifestDocumentLoadingException.php | 45 - .../ManifestDocumentMapperException.php | 5 - .../exceptions/ManifestElementException.php | 5 - .../exceptions/ManifestLoaderException.php | 5 - .../manifest/src/values/Application.php | 16 - .../manifest/src/values/ApplicationName.php | 37 - .../phar-io/manifest/src/values/Author.php | 39 - .../manifest/src/values/AuthorCollection.php | 34 - .../src/values/AuthorCollectionIterator.php | 42 - .../manifest/src/values/BundledComponent.php | 33 - .../src/values/BundledComponentCollection.php | 34 - .../BundledComponentCollectionIterator.php | 42 - .../src/values/CopyrightInformation.php | 31 - .../phar-io/manifest/src/values/Email.php | 31 - .../phar-io/manifest/src/values/Extension.php | 46 - .../phar-io/manifest/src/values/Library.php | 16 - .../phar-io/manifest/src/values/License.php | 31 - .../phar-io/manifest/src/values/Manifest.php | 92 - .../src/values/PhpExtensionRequirement.php | 23 - .../src/values/PhpVersionRequirement.php | 25 - .../manifest/src/values/Requirement.php | 13 - .../src/values/RequirementCollection.php | 34 - .../values/RequirementCollectionIterator.php | 42 - .../phar-io/manifest/src/values/Type.php | 41 - .../phar-io/manifest/src/values/Url.php | 36 - .../manifest/src/xml/AuthorElement.php | 20 - .../src/xml/AuthorElementCollection.php | 18 - .../manifest/src/xml/BundlesElement.php | 18 - .../manifest/src/xml/ComponentElement.php | 20 - .../src/xml/ComponentElementCollection.php | 18 - .../manifest/src/xml/ContainsElement.php | 30 - .../manifest/src/xml/CopyrightElement.php | 24 - .../manifest/src/xml/ElementCollection.php | 61 - .../phar-io/manifest/src/xml/ExtElement.php | 16 - .../manifest/src/xml/ExtElementCollection.php | 18 - .../manifest/src/xml/ExtensionElement.php | 20 - .../manifest/src/xml/LicenseElement.php | 20 - .../manifest/src/xml/ManifestDocument.php | 103 - .../manifest/src/xml/ManifestElement.php | 66 - .../phar-io/manifest/src/xml/PhpElement.php | 26 - .../manifest/src/xml/RequiresElement.php | 18 - old_vendor/phar-io/version/CHANGELOG.md | 142 - old_vendor/phar-io/version/LICENSE | 29 - old_vendor/phar-io/version/README.md | 61 - old_vendor/phar-io/version/composer.json | 34 - .../phar-io/version/src/BuildMetaData.php | 28 - .../phar-io/version/src/PreReleaseSuffix.php | 82 - old_vendor/phar-io/version/src/Version.php | 208 - .../version/src/VersionConstraintParser.php | 115 - .../version/src/VersionConstraintValue.php | 88 - .../phar-io/version/src/VersionNumber.php | 28 - .../constraints/AbstractVersionConstraint.php | 23 - .../constraints/AndVersionConstraintGroup.php | 34 - .../src/constraints/AnyVersionConstraint.php | 20 - .../constraints/ExactVersionConstraint.php | 22 - .../GreaterThanOrEqualToVersionConstraint.php | 26 - .../constraints/OrVersionConstraintGroup.php | 35 - ...SpecificMajorAndMinorVersionConstraint.php | 33 - .../SpecificMajorVersionConstraint.php | 25 - .../src/constraints/VersionConstraint.php | 16 - .../version/src/exceptions/Exception.php | 15 - .../InvalidPreReleaseSuffixException.php | 5 - .../exceptions/InvalidVersionException.php | 5 - .../exceptions/NoBuildMetaDataException.php | 5 - .../NoPreReleaseSuffixException.php | 5 - .../UnsupportedVersionConstraintException.php | 13 - old_vendor/predis/predis/LICENSE | 22 - old_vendor/predis/predis/README.md | 466 - old_vendor/predis/predis/autoload.php | 12 - old_vendor/predis/predis/composer.json | 51 - .../predis/docker/unstable_cluster/Dockerfile | 7 - .../docker/unstable_cluster/create_cluster.sh | 47 - .../unstable_cluster/docker-compose.yml | 17 - .../predis/docker/unstable_cluster/redis.conf | 9 - old_vendor/predis/predis/src/Autoloader.php | 64 - old_vendor/predis/predis/src/Client.php | 612 - .../predis/predis/src/ClientConfiguration.php | 42 - .../predis/src/ClientContextInterface.php | 378 - .../predis/predis/src/ClientException.php | 20 - .../predis/predis/src/ClientInterface.php | 429 - .../predis/src/Cluster/ClusterStrategy.php | 490 - .../Distributor/DistributorInterface.php | 81 - .../Distributor/EmptyRingException.php | 22 - .../src/Cluster/Distributor/HashRing.php | 268 - .../src/Cluster/Distributor/KetamaRing.php | 70 - .../predis/predis/src/Cluster/Hash/CRC16.php | 73 - .../Cluster/Hash/HashGeneratorInterface.php | 29 - .../src/Cluster/Hash/PhpiredisCRC16.php | 42 - .../predis/src/Cluster/PredisStrategy.php | 77 - .../predis/src/Cluster/RedisStrategy.php | 55 - .../predis/predis/src/Cluster/SlotMap.php | 209 - .../predis/src/Cluster/StrategyInterface.php | 52 - .../Iterator/CursorBasedIterator.php | 196 - .../src/Collection/Iterator/HashKey.php | 57 - .../src/Collection/Iterator/Keyspace.php | 42 - .../src/Collection/Iterator/ListKey.php | 183 - .../predis/src/Collection/Iterator/SetKey.php | 46 - .../src/Collection/Iterator/SortedSetKey.php | 57 - .../Command/Argument/ArrayableArgument.php | 26 - .../Argument/Geospatial/AbstractBy.php | 46 - .../src/Command/Argument/Geospatial/ByBox.php | 43 - .../Argument/Geospatial/ByInterface.php | 19 - .../Command/Argument/Geospatial/ByRadius.php | 37 - .../Argument/Geospatial/FromInterface.php | 19 - .../Argument/Geospatial/FromLonLat.php | 42 - .../Argument/Geospatial/FromMember.php | 36 - .../Argument/Search/AggregateArguments.php | 161 - .../Argument/Search/AlterArguments.php | 17 - .../Argument/Search/CommonArguments.php | 182 - .../Argument/Search/CreateArguments.php | 191 - .../Argument/Search/CursorArguments.php | 44 - .../Command/Argument/Search/DropArguments.php | 43 - .../Argument/Search/ExplainArguments.php | 17 - .../Argument/Search/ProfileArguments.php | 81 - .../Search/SchemaFields/AbstractField.php | 69 - .../Search/SchemaFields/FieldInterface.php | 22 - .../Argument/Search/SchemaFields/GeoField.php | 31 - .../Search/SchemaFields/NumericField.php | 31 - .../Argument/Search/SchemaFields/TagField.php | 44 - .../Search/SchemaFields/TextField.php | 57 - .../Search/SchemaFields/VectorField.php | 47 - .../Argument/Search/SearchArguments.php | 306 - .../Argument/Search/SpellcheckArguments.php | 59 - .../Argument/Search/SugAddArguments.php | 28 - .../Argument/Search/SugGetArguments.php | 41 - .../Argument/Search/SynUpdateArguments.php | 17 - .../Argument/Server/LimitInterface.php | 19 - .../Argument/Server/LimitOffsetCount.php | 42 - .../predis/src/Command/Argument/Server/To.php | 57 - .../Argument/TimeSeries/AddArguments.php | 30 - .../Argument/TimeSeries/AlterArguments.php | 17 - .../Argument/TimeSeries/CommonArguments.php | 143 - .../Argument/TimeSeries/CreateArguments.php | 17 - .../Argument/TimeSeries/DecrByArguments.php | 17 - .../Argument/TimeSeries/GetArguments.php | 17 - .../Argument/TimeSeries/IncrByArguments.php | 41 - .../Argument/TimeSeries/InfoArguments.php | 43 - .../Argument/TimeSeries/MGetArguments.php | 17 - .../Argument/TimeSeries/MRangeArguments.php | 44 - .../Argument/TimeSeries/RangeArguments.php | 85 - .../predis/predis/src/Command/Command.php | 126 - .../predis/src/Command/CommandInterface.php | 80 - .../predis/predis/src/Command/Factory.php | 143 - .../predis/src/Command/FactoryInterface.php | 42 - .../Command/PrefixableCommandInterface.php | 26 - .../Command/Processor/KeyPrefixProcessor.php | 574 - .../src/Command/Processor/ProcessorChain.php | 142 - .../Command/Processor/ProcessorInterface.php | 28 - .../predis/predis/src/Command/RawCommand.php | 123 - .../predis/predis/src/Command/RawFactory.php | 43 - .../predis/predis/src/Command/Redis/ACL.php | 53 - .../predis/src/Command/Redis/APPEND.php | 29 - .../predis/predis/src/Command/Redis/AUTH.php | 29 - .../Redis/AbstractCommand/BZPOPBase.php | 43 - .../predis/src/Command/Redis/BGREWRITEAOF.php | 37 - .../predis/src/Command/Redis/BGSAVE.php | 37 - .../predis/src/Command/Redis/BITCOUNT.php | 34 - .../predis/src/Command/Redis/BITFIELD.php | 29 - .../predis/predis/src/Command/Redis/BITOP.php | 43 - .../predis/src/Command/Redis/BITPOS.php | 34 - .../predis/src/Command/Redis/BLMOVE.php | 21 - .../predis/src/Command/Redis/BLMPOP.php | 25 - .../predis/predis/src/Command/Redis/BLPOP.php | 42 - .../predis/predis/src/Command/Redis/BRPOP.php | 42 - .../predis/src/Command/Redis/BRPOPLPUSH.php | 29 - .../predis/src/Command/Redis/BZMPOP.php | 30 - .../predis/src/Command/Redis/BZPOPMAX.php | 33 - .../predis/src/Command/Redis/BZPOPMIN.php | 33 - .../src/Command/Redis/BloomFilter/BFADD.php | 29 - .../Command/Redis/BloomFilter/BFEXISTS.php | 28 - .../src/Command/Redis/BloomFilter/BFINFO.php | 79 - .../Command/Redis/BloomFilter/BFINSERT.php | 72 - .../Command/Redis/BloomFilter/BFLOADCHUNK.php | 28 - .../src/Command/Redis/BloomFilter/BFMADD.php | 29 - .../Command/Redis/BloomFilter/BFMEXISTS.php | 28 - .../Command/Redis/BloomFilter/BFRESERVE.php | 49 - .../Command/Redis/BloomFilter/BFSCANDUMP.php | 29 - .../predis/src/Command/Redis/CLIENT.php | 75 - .../predis/src/Command/Redis/COMMAND.php | 40 - .../predis/src/Command/Redis/CONFIG.php | 54 - .../predis/predis/src/Command/Redis/COPY.php | 47 - .../src/Command/Redis/Container/ACL.php | 28 - .../Redis/Container/AbstractContainer.php | 42 - .../Redis/Container/ContainerFactory.php | 81 - .../Redis/Container/ContainerInterface.php | 33 - .../Redis/Container/FunctionContainer.php | 33 - .../Redis/Container/Json/JSONDEBUG.php | 27 - .../Redis/Container/Search/FTCONFIG.php | 29 - .../Redis/Container/Search/FTCURSOR.php | 29 - .../Redis/CountMinSketch/CMSINCRBY.php | 29 - .../Command/Redis/CountMinSketch/CMSINFO.php | 45 - .../Redis/CountMinSketch/CMSINITBYDIM.php | 28 - .../Redis/CountMinSketch/CMSINITBYPROB.php | 28 - .../Command/Redis/CountMinSketch/CMSMERGE.php | 42 - .../Command/Redis/CountMinSketch/CMSQUERY.php | 28 - .../src/Command/Redis/CuckooFilter/CFADD.php | 28 - .../Command/Redis/CuckooFilter/CFADDNX.php | 28 - .../Command/Redis/CuckooFilter/CFCOUNT.php | 29 - .../src/Command/Redis/CuckooFilter/CFDEL.php | 30 - .../Command/Redis/CuckooFilter/CFEXISTS.php | 28 - .../src/Command/Redis/CuckooFilter/CFINFO.php | 45 - .../Command/Redis/CuckooFilter/CFINSERT.php | 52 - .../Command/Redis/CuckooFilter/CFINSERTNX.php | 27 - .../Redis/CuckooFilter/CFLOADCHUNK.php | 29 - .../Command/Redis/CuckooFilter/CFMEXISTS.php | 28 - .../Command/Redis/CuckooFilter/CFRESERVE.php | 52 - .../Command/Redis/CuckooFilter/CFSCANDUMP.php | 29 - .../predis/src/Command/Redis/DBSIZE.php | 29 - .../predis/predis/src/Command/Redis/DECR.php | 29 - .../predis/src/Command/Redis/DECRBY.php | 29 - .../predis/predis/src/Command/Redis/DEL.php | 39 - .../predis/src/Command/Redis/DISCARD.php | 29 - .../predis/predis/src/Command/Redis/DUMP.php | 29 - .../predis/predis/src/Command/Redis/ECHO_.php | 29 - .../predis/src/Command/Redis/EVALSHA.php | 37 - .../predis/src/Command/Redis/EVALSHA_RO.php | 27 - .../predis/predis/src/Command/Redis/EVAL_.php | 39 - .../predis/src/Command/Redis/EVAL_RO.php | 34 - .../predis/predis/src/Command/Redis/EXEC.php | 29 - .../predis/src/Command/Redis/EXISTS.php | 29 - .../predis/src/Command/Redis/EXPIRE.php | 36 - .../predis/src/Command/Redis/EXPIREAT.php | 35 - .../predis/src/Command/Redis/EXPIRETIME.php | 29 - .../predis/src/Command/Redis/FAILOVER.php | 48 - .../predis/predis/src/Command/Redis/FCALL.php | 33 - .../predis/src/Command/Redis/FCALL_RO.php | 41 - .../predis/src/Command/Redis/FLUSHALL.php | 29 - .../predis/src/Command/Redis/FLUSHDB.php | 29 - .../predis/src/Command/Redis/FUNCTIONS.php | 50 - .../predis/src/Command/Redis/GEOADD.php | 43 - .../predis/src/Command/Redis/GEODIST.php | 29 - .../predis/src/Command/Redis/GEOHASH.php | 42 - .../predis/src/Command/Redis/GEOPOS.php | 42 - .../predis/src/Command/Redis/GEORADIUS.php | 77 - .../src/Command/Redis/GEORADIUSBYMEMBER.php | 32 - .../predis/src/Command/Redis/GEOSEARCH.php | 122 - .../src/Command/Redis/GEOSEARCHSTORE.php | 71 - .../predis/predis/src/Command/Redis/GET.php | 29 - .../predis/src/Command/Redis/GETBIT.php | 29 - .../predis/src/Command/Redis/GETDEL.php | 23 - .../predis/predis/src/Command/Redis/GETEX.php | 63 - .../predis/src/Command/Redis/GETRANGE.php | 29 - .../predis/src/Command/Redis/GETSET.php | 29 - .../predis/predis/src/Command/Redis/HDEL.php | 39 - .../predis/src/Command/Redis/HEXISTS.php | 29 - .../predis/predis/src/Command/Redis/HGET.php | 29 - .../predis/src/Command/Redis/HGETALL.php | 47 - .../predis/src/Command/Redis/HINCRBY.php | 29 - .../predis/src/Command/Redis/HINCRBYFLOAT.php | 29 - .../predis/predis/src/Command/Redis/HKEYS.php | 29 - .../predis/predis/src/Command/Redis/HLEN.php | 29 - .../predis/predis/src/Command/Redis/HMGET.php | 39 - .../predis/predis/src/Command/Redis/HMSET.php | 49 - .../predis/src/Command/Redis/HRANDFIELD.php | 53 - .../predis/predis/src/Command/Redis/HSCAN.php | 86 - .../predis/predis/src/Command/Redis/HSET.php | 29 - .../predis/src/Command/Redis/HSETNX.php | 29 - .../predis/src/Command/Redis/HSTRLEN.php | 29 - .../predis/predis/src/Command/Redis/HVALS.php | 29 - .../predis/predis/src/Command/Redis/INCR.php | 29 - .../predis/src/Command/Redis/INCRBY.php | 29 - .../predis/src/Command/Redis/INCRBYFLOAT.php | 29 - .../predis/predis/src/Command/Redis/INFO.php | 157 - .../src/Command/Redis/Json/JSONARRAPPEND.php | 28 - .../src/Command/Redis/Json/JSONARRINDEX.php | 28 - .../src/Command/Redis/Json/JSONARRINSERT.php | 28 - .../src/Command/Redis/Json/JSONARRLEN.php | 28 - .../src/Command/Redis/Json/JSONARRPOP.php | 28 - .../src/Command/Redis/Json/JSONARRTRIM.php | 28 - .../src/Command/Redis/Json/JSONCLEAR.php | 28 - .../src/Command/Redis/Json/JSONDEBUG.php | 28 - .../predis/src/Command/Redis/Json/JSONDEL.php | 28 - .../src/Command/Redis/Json/JSONFORGET.php | 28 - .../predis/src/Command/Redis/Json/JSONGET.php | 57 - .../src/Command/Redis/Json/JSONMERGE.php | 29 - .../src/Command/Redis/Json/JSONMGET.php | 36 - .../src/Command/Redis/Json/JSONMSET.php | 28 - .../src/Command/Redis/Json/JSONNUMINCRBY.php | 28 - .../src/Command/Redis/Json/JSONOBJKEYS.php | 28 - .../src/Command/Redis/Json/JSONOBJLEN.php | 28 - .../src/Command/Redis/Json/JSONRESP.php | 28 - .../predis/src/Command/Redis/Json/JSONSET.php | 41 - .../src/Command/Redis/Json/JSONSTRAPPEND.php | 28 - .../src/Command/Redis/Json/JSONSTRLEN.php | 28 - .../src/Command/Redis/Json/JSONTOGGLE.php | 28 - .../src/Command/Redis/Json/JSONTYPE.php | 28 - .../predis/predis/src/Command/Redis/KEYS.php | 29 - .../predis/src/Command/Redis/LASTSAVE.php | 29 - .../predis/predis/src/Command/Redis/LCS.php | 69 - .../predis/src/Command/Redis/LINDEX.php | 29 - .../predis/src/Command/Redis/LINSERT.php | 29 - .../predis/predis/src/Command/Redis/LLEN.php | 29 - .../predis/predis/src/Command/Redis/LMOVE.php | 23 - .../predis/predis/src/Command/Redis/LMPOP.php | 61 - .../predis/predis/src/Command/Redis/LPOP.php | 29 - .../predis/predis/src/Command/Redis/LPUSH.php | 39 - .../predis/src/Command/Redis/LPUSHX.php | 29 - .../predis/src/Command/Redis/LRANGE.php | 29 - .../predis/predis/src/Command/Redis/LREM.php | 29 - .../predis/predis/src/Command/Redis/LSET.php | 29 - .../predis/predis/src/Command/Redis/LTRIM.php | 29 - .../predis/predis/src/Command/Redis/MGET.php | 39 - .../predis/src/Command/Redis/MIGRATE.php | 51 - .../predis/src/Command/Redis/MONITOR.php | 29 - .../predis/predis/src/Command/Redis/MOVE.php | 29 - .../predis/predis/src/Command/Redis/MSET.php | 49 - .../predis/src/Command/Redis/MSETNX.php | 27 - .../predis/predis/src/Command/Redis/MULTI.php | 29 - .../predis/src/Command/Redis/OBJECT_.php | 29 - .../predis/src/Command/Redis/PERSIST.php | 29 - .../predis/src/Command/Redis/PEXPIRE.php | 29 - .../predis/src/Command/Redis/PEXPIREAT.php | 29 - .../predis/src/Command/Redis/PEXPIRETIME.php | 29 - .../predis/predis/src/Command/Redis/PFADD.php | 39 - .../predis/src/Command/Redis/PFCOUNT.php | 39 - .../predis/src/Command/Redis/PFMERGE.php | 39 - .../predis/predis/src/Command/Redis/PING.php | 29 - .../predis/src/Command/Redis/PSETEX.php | 29 - .../predis/src/Command/Redis/PSUBSCRIBE.php | 39 - .../predis/predis/src/Command/Redis/PTTL.php | 29 - .../predis/src/Command/Redis/PUBLISH.php | 29 - .../predis/src/Command/Redis/PUBSUB.php | 62 - .../predis/src/Command/Redis/PUNSUBSCRIBE.php | 39 - .../predis/predis/src/Command/Redis/QUIT.php | 29 - .../predis/src/Command/Redis/RANDOMKEY.php | 37 - .../predis/src/Command/Redis/RENAME.php | 29 - .../predis/src/Command/Redis/RENAMENX.php | 29 - .../predis/src/Command/Redis/RESTORE.php | 29 - .../predis/predis/src/Command/Redis/RPOP.php | 29 - .../predis/src/Command/Redis/RPOPLPUSH.php | 29 - .../predis/predis/src/Command/Redis/RPUSH.php | 39 - .../predis/src/Command/Redis/RPUSHX.php | 29 - .../predis/predis/src/Command/Redis/SADD.php | 39 - .../predis/predis/src/Command/Redis/SAVE.php | 29 - .../predis/predis/src/Command/Redis/SCAN.php | 67 - .../predis/predis/src/Command/Redis/SCARD.php | 29 - .../predis/src/Command/Redis/SCRIPT.php | 29 - .../predis/predis/src/Command/Redis/SDIFF.php | 39 - .../predis/src/Command/Redis/SDIFFSTORE.php | 41 - .../predis/src/Command/Redis/SELECT.php | 29 - .../predis/src/Command/Redis/SENTINEL.php | 70 - .../predis/predis/src/Command/Redis/SET.php | 29 - .../predis/src/Command/Redis/SETBIT.php | 29 - .../predis/predis/src/Command/Redis/SETEX.php | 29 - .../predis/predis/src/Command/Redis/SETNX.php | 29 - .../predis/src/Command/Redis/SETRANGE.php | 29 - .../predis/src/Command/Redis/SHUTDOWN.php | 61 - .../predis/src/Command/Redis/SINTER.php | 39 - .../predis/src/Command/Redis/SINTERCARD.php | 43 - .../predis/src/Command/Redis/SINTERSTORE.php | 41 - .../predis/src/Command/Redis/SISMEMBER.php | 29 - .../predis/src/Command/Redis/SLAVEOF.php | 41 - .../predis/src/Command/Redis/SLOWLOG.php | 52 - .../predis/src/Command/Redis/SMEMBERS.php | 29 - .../predis/src/Command/Redis/SMISMEMBER.php | 28 - .../predis/predis/src/Command/Redis/SMOVE.php | 29 - .../predis/predis/src/Command/Redis/SORT.php | 86 - .../predis/src/Command/Redis/SORT_RO.php | 74 - .../predis/predis/src/Command/Redis/SPOP.php | 29 - .../predis/src/Command/Redis/SRANDMEMBER.php | 29 - .../predis/predis/src/Command/Redis/SREM.php | 39 - .../predis/predis/src/Command/Redis/SSCAN.php | 67 - .../predis/src/Command/Redis/STRLEN.php | 29 - .../predis/src/Command/Redis/SUBSCRIBE.php | 39 - .../predis/src/Command/Redis/SUBSTR.php | 29 - .../predis/src/Command/Redis/SUNION.php | 39 - .../predis/src/Command/Redis/SUNIONSTORE.php | 41 - .../src/Command/Redis/Search/FTAGGREGATE.php | 40 - .../src/Command/Redis/Search/FTALIASADD.php | 28 - .../src/Command/Redis/Search/FTALIASDEL.php | 28 - .../Command/Redis/Search/FTALIASUPDATE.php | 29 - .../src/Command/Redis/Search/FTALTER.php | 42 - .../src/Command/Redis/Search/FTCONFIG.php | 30 - .../src/Command/Redis/Search/FTCREATE.php | 47 - .../src/Command/Redis/Search/FTCURSOR.php | 34 - .../src/Command/Redis/Search/FTDICTADD.php | 28 - .../src/Command/Redis/Search/FTDICTDEL.php | 28 - .../src/Command/Redis/Search/FTDICTDUMP.php | 28 - .../src/Command/Redis/Search/FTDROPINDEX.php | 38 - .../src/Command/Redis/Search/FTEXPLAIN.php | 43 - .../src/Command/Redis/Search/FTINFO.php | 28 - .../src/Command/Redis/Search/FTPROFILE.php | 38 - .../src/Command/Redis/Search/FTSEARCH.php | 39 - .../src/Command/Redis/Search/FTSPELLCHECK.php | 38 - .../src/Command/Redis/Search/FTSUGADD.php | 39 - .../src/Command/Redis/Search/FTSUGDEL.php | 28 - .../src/Command/Redis/Search/FTSUGGET.php | 39 - .../src/Command/Redis/Search/FTSUGLEN.php | 28 - .../src/Command/Redis/Search/FTSYNDUMP.php | 28 - .../src/Command/Redis/Search/FTSYNUPDATE.php | 46 - .../src/Command/Redis/Search/FTTAGVALS.php | 28 - .../src/Command/Redis/TDigest/TDIGESTADD.php | 28 - .../Command/Redis/TDigest/TDIGESTBYRANK.php | 55 - .../Redis/TDigest/TDIGESTBYREVRANK.php | 55 - .../src/Command/Redis/TDigest/TDIGESTCDF.php | 57 - .../Command/Redis/TDigest/TDIGESTCREATE.php | 40 - .../src/Command/Redis/TDigest/TDIGESTINFO.php | 41 - .../src/Command/Redis/TDigest/TDIGESTMAX.php | 49 - .../Command/Redis/TDigest/TDIGESTMERGE.php | 43 - .../src/Command/Redis/TDigest/TDIGESTMIN.php | 49 - .../Command/Redis/TDigest/TDIGESTQUANTILE.php | 55 - .../src/Command/Redis/TDigest/TDIGESTRANK.php | 30 - .../Command/Redis/TDigest/TDIGESTRESET.php | 28 - .../Command/Redis/TDigest/TDIGESTREVRANK.php | 30 - .../Redis/TDigest/TDIGESTTRIMMED_MEAN.php | 50 - .../predis/predis/src/Command/Redis/TIME.php | 29 - .../predis/predis/src/Command/Redis/TOUCH.php | 39 - .../predis/predis/src/Command/Redis/TTL.php | 29 - .../predis/predis/src/Command/Redis/TYPE.php | 51 - .../src/Command/Redis/TimeSeries/TSADD.php | 39 - .../src/Command/Redis/TimeSeries/TSALTER.php | 39 - .../src/Command/Redis/TimeSeries/TSCREATE.php | 39 - .../Command/Redis/TimeSeries/TSCREATERULE.php | 40 - .../src/Command/Redis/TimeSeries/TSDECRBY.php | 41 - .../src/Command/Redis/TimeSeries/TSDEL.php | 28 - .../Command/Redis/TimeSeries/TSDELETERULE.php | 28 - .../src/Command/Redis/TimeSeries/TSGET.php | 39 - .../src/Command/Redis/TimeSeries/TSINCRBY.php | 41 - .../src/Command/Redis/TimeSeries/TSINFO.php | 39 - .../src/Command/Redis/TimeSeries/TSMADD.php | 28 - .../src/Command/Redis/TimeSeries/TSMGET.php | 37 - .../src/Command/Redis/TimeSeries/TSMRANGE.php | 39 - .../Command/Redis/TimeSeries/TSMREVRANGE.php | 26 - .../Command/Redis/TimeSeries/TSQUERYINDEX.php | 28 - .../src/Command/Redis/TimeSeries/TSRANGE.php | 39 - .../Command/Redis/TimeSeries/TSREVRANGE.php | 26 - .../predis/src/Command/Redis/TopK/TOPKADD.php | 31 - .../src/Command/Redis/TopK/TOPKINCRBY.php | 30 - .../src/Command/Redis/TopK/TOPKINFO.php | 41 - .../src/Command/Redis/TopK/TOPKLIST.php | 68 - .../src/Command/Redis/TopK/TOPKQUERY.php | 29 - .../src/Command/Redis/TopK/TOPKRESERVE.php | 47 - .../predis/src/Command/Redis/UNSUBSCRIBE.php | 39 - .../predis/src/Command/Redis/UNWATCH.php | 29 - .../predis/src/Command/Redis/WAITAOF.php | 29 - .../predis/predis/src/Command/Redis/WATCH.php | 41 - .../predis/predis/src/Command/Redis/XADD.php | 64 - .../predis/predis/src/Command/Redis/XDEL.php | 39 - .../predis/predis/src/Command/Redis/XLEN.php | 29 - .../predis/src/Command/Redis/XRANGE.php | 62 - .../predis/src/Command/Redis/XREVRANGE.php | 27 - .../predis/predis/src/Command/Redis/XTRIM.php | 54 - .../predis/predis/src/Command/Redis/ZADD.php | 44 - .../predis/predis/src/Command/Redis/ZCARD.php | 29 - .../predis/src/Command/Redis/ZCOUNT.php | 29 - .../predis/predis/src/Command/Redis/ZDIFF.php | 48 - .../predis/src/Command/Redis/ZDIFFSTORE.php | 40 - .../predis/src/Command/Redis/ZINCRBY.php | 29 - .../predis/src/Command/Redis/ZINTER.php | 35 - .../predis/src/Command/Redis/ZINTERCARD.php | 49 - .../predis/src/Command/Redis/ZINTERSTORE.php | 27 - .../predis/src/Command/Redis/ZLEXCOUNT.php | 29 - .../predis/predis/src/Command/Redis/ZMPOP.php | 79 - .../predis/src/Command/Redis/ZMSCORE.php | 34 - .../predis/src/Command/Redis/ZPOPMAX.php | 47 - .../predis/src/Command/Redis/ZPOPMIN.php | 47 - .../predis/src/Command/Redis/ZRANDMEMBER.php | 36 - .../predis/src/Command/Redis/ZRANGE.php | 109 - .../predis/src/Command/Redis/ZRANGEBYLEX.php | 54 - .../src/Command/Redis/ZRANGEBYSCORE.php | 67 - .../predis/src/Command/Redis/ZRANGESTORE.php | 57 - .../predis/predis/src/Command/Redis/ZRANK.php | 29 - .../predis/predis/src/Command/Redis/ZREM.php | 39 - .../src/Command/Redis/ZREMRANGEBYLEX.php | 29 - .../src/Command/Redis/ZREMRANGEBYRANK.php | 29 - .../src/Command/Redis/ZREMRANGEBYSCORE.php | 29 - .../predis/src/Command/Redis/ZREVRANGE.php | 27 - .../src/Command/Redis/ZREVRANGEBYLEX.php | 27 - .../src/Command/Redis/ZREVRANGEBYSCORE.php | 27 - .../predis/src/Command/Redis/ZREVRANK.php | 29 - .../predis/predis/src/Command/Redis/ZSCAN.php | 86 - .../predis/src/Command/Redis/ZSCORE.php | 29 - .../predis/src/Command/Redis/ZUNION.php | 35 - .../predis/src/Command/Redis/ZUNIONSTORE.php | 67 - .../predis/src/Command/RedisFactory.php | 112 - .../predis/src/Command/ScriptCommand.php | 108 - .../Functions/DeleteStrategy.php | 26 - .../Functions/DumpStrategy.php | 26 - .../Functions/FlushStrategy.php | 32 - .../Functions/KillStrategy.php | 26 - .../Functions/ListStrategy.php | 36 - .../Functions/LoadStrategy.php | 41 - .../Functions/RestoreStrategy.php | 32 - .../Functions/StatsStrategy.php | 26 - .../Strategy/StrategyResolverInterface.php | 25 - .../Strategy/SubcommandStrategyInterface.php | 24 - .../Strategy/SubcommandStrategyResolver.php | 52 - .../predis/src/Command/Traits/Aggregate.php | 66 - .../predis/src/Command/Traits/BitByte.php | 40 - .../Traits/BloomFilters/BucketSize.php | 57 - .../Command/Traits/BloomFilters/Capacity.php | 57 - .../src/Command/Traits/BloomFilters/Error.php | 57 - .../Command/Traits/BloomFilters/Expansion.php | 53 - .../src/Command/Traits/BloomFilters/Items.php | 45 - .../Traits/BloomFilters/MaxIterations.php | 57 - .../Command/Traits/BloomFilters/NoCreate.php | 49 - .../src/Command/Traits/By/ByArgument.php | 40 - .../src/Command/Traits/By/ByLexByScore.php | 49 - .../predis/src/Command/Traits/By/GeoBy.php | 49 - .../predis/src/Command/Traits/Count.php | 71 - .../predis/predis/src/Command/Traits/DB.php | 53 - .../Command/Traits/Expire/ExpireOptions.php | 42 - .../src/Command/Traits/From/GeoFrom.php | 49 - .../predis/src/Command/Traits/Get/Get.php | 47 - .../predis/src/Command/Traits/Json/Indent.php | 54 - .../src/Command/Traits/Json/Newline.php | 54 - .../src/Command/Traits/Json/NxXxArgument.php | 64 - .../predis/src/Command/Traits/Json/Space.php | 54 - .../predis/predis/src/Command/Traits/Keys.php | 47 - .../predis/src/Command/Traits/LeftRight.php | 60 - .../predis/src/Command/Traits/Limit/Limit.php | 54 - .../src/Command/Traits/Limit/LimitObject.php | 50 - .../src/Command/Traits/MinMaxModifier.php | 45 - .../predis/src/Command/Traits/Replace.php | 34 - .../predis/predis/src/Command/Traits/Rev.php | 44 - .../predis/src/Command/Traits/Sorting.php | 57 - .../predis/src/Command/Traits/Storedist.php | 49 - .../predis/src/Command/Traits/Timeout.php | 53 - .../predis/src/Command/Traits/To/ServerTo.php | 48 - .../predis/src/Command/Traits/Weights.php | 61 - .../src/Command/Traits/With/WithCoord.php | 49 - .../src/Command/Traits/With/WithDist.php | 45 - .../src/Command/Traits/With/WithHash.php | 45 - .../src/Command/Traits/With/WithScores.php | 68 - .../src/Command/Traits/With/WithValues.php | 34 - .../predis/src/CommunicationException.php | 85 - .../src/Configuration/Option/Aggregate.php | 114 - .../predis/src/Configuration/Option/CRC16.php | 74 - .../src/Configuration/Option/Cluster.php | 99 - .../src/Configuration/Option/Commands.php | 146 - .../src/Configuration/Option/Connections.php | 152 - .../src/Configuration/Option/Exceptions.php | 39 - .../src/Configuration/Option/Prefix.php | 49 - .../src/Configuration/Option/Replication.php | 126 - .../src/Configuration/OptionInterface.php | 39 - .../predis/src/Configuration/Options.php | 116 - .../src/Configuration/OptionsInterface.php | 63 - .../src/Connection/AbstractConnection.php | 215 - .../AggregateConnectionInterface.php | 56 - .../Connection/Cluster/ClusterInterface.php | 23 - .../src/Connection/Cluster/PredisCluster.php | 244 - .../src/Connection/Cluster/RedisCluster.php | 673 - .../CompositeConnectionInterface.php | 48 - .../Connection/CompositeStreamConnection.php | 125 - .../src/Connection/ConnectionException.php | 22 - .../src/Connection/ConnectionInterface.php | 65 - .../predis/predis/src/Connection/Factory.php | 194 - .../src/Connection/FactoryInterface.php | 43 - .../Connection/NodeConnectionInterface.php | 57 - .../predis/src/Connection/Parameters.php | 199 - .../src/Connection/ParametersInterface.php | 71 - .../Connection/PhpiredisSocketConnection.php | 420 - .../Connection/PhpiredisStreamConnection.php | 262 - .../predis/src/Connection/RelayConnection.php | 337 - .../predis/src/Connection/RelayMethods.php | 136 - .../Replication/MasterSlaveReplication.php | 553 - .../Replication/ReplicationInterface.php | 53 - .../Replication/SentinelReplication.php | 775 - .../src/Connection/StreamConnection.php | 374 - .../src/Connection/WebdisConnection.php | 366 - .../predis/predis/src/Monitor/Consumer.php | 179 - .../predis/src/NotSupportedException.php | 21 - .../predis/predis/src/Pipeline/Atomic.php | 118 - .../src/Pipeline/ConnectionErrorProof.php | 128 - .../predis/src/Pipeline/FireAndForget.php | 36 - .../predis/predis/src/Pipeline/Pipeline.php | 248 - .../predis/src/Pipeline/RelayAtomic.php | 69 - .../predis/src/Pipeline/RelayPipeline.php | 75 - .../predis/predis/src/PredisException.php | 22 - .../predis/src/Protocol/ProtocolException.php | 23 - .../Protocol/ProtocolProcessorInterface.php | 40 - .../Protocol/RequestSerializerInterface.php | 30 - .../src/Protocol/ResponseReaderInterface.php | 31 - .../Text/CompositeProtocolProcessor.php | 106 - .../Protocol/Text/Handler/BulkResponse.php | 54 - .../Protocol/Text/Handler/ErrorResponse.php | 33 - .../Protocol/Text/Handler/IntegerResponse.php | 46 - .../Text/Handler/MultiBulkResponse.php | 67 - .../Text/Handler/ResponseHandlerInterface.php | 32 - .../Protocol/Text/Handler/StatusResponse.php | 34 - .../Handler/StreamableMultiBulkResponse.php | 46 - .../src/Protocol/Text/ProtocolProcessor.php | 120 - .../src/Protocol/Text/RequestSerializer.php | 45 - .../src/Protocol/Text/ResponseReader.php | 110 - .../predis/src/PubSub/AbstractConsumer.php | 226 - .../predis/predis/src/PubSub/Consumer.php | 157 - .../predis/src/PubSub/DispatcherLoop.php | 171 - .../predis/src/PubSub/RelayConsumer.php | 114 - .../Replication/MissingMasterException.php | 22 - .../src/Replication/ReplicationStrategy.php | 292 - .../predis/src/Replication/RoleException.php | 23 - .../predis/predis/src/Response/Error.php | 58 - .../predis/src/Response/ErrorInterface.php | 34 - .../src/Response/Iterator/MultiBulk.php | 76 - .../Response/Iterator/MultiBulkIterator.php | 112 - .../src/Response/Iterator/MultiBulkTuple.php | 95 - .../predis/src/Response/ResponseInterface.php | 20 - .../predis/src/Response/ServerException.php | 43 - .../predis/predis/src/Response/Status.php | 78 - .../predis/predis/src/Session/Handler.php | 146 - .../Transaction/AbortedMultiExecException.php | 45 - .../predis/src/Transaction/MultiExec.php | 492 - .../predis/src/Transaction/MultiExecState.php | 162 - old_vendor/psr/cache/CHANGELOG.md | 16 - old_vendor/psr/cache/LICENSE.txt | 19 - old_vendor/psr/cache/README.md | 12 - old_vendor/psr/cache/composer.json | 25 - old_vendor/psr/cache/src/CacheException.php | 10 - .../psr/cache/src/CacheItemInterface.php | 105 - .../psr/cache/src/CacheItemPoolInterface.php | 138 - .../cache/src/InvalidArgumentException.php | 13 - old_vendor/psr/container/.gitignore | 3 - old_vendor/psr/container/LICENSE | 21 - old_vendor/psr/container/README.md | 13 - old_vendor/psr/container/composer.json | 27 - .../src/ContainerExceptionInterface.php | 12 - .../psr/container/src/ContainerInterface.php | 36 - .../src/NotFoundExceptionInterface.php | 10 - old_vendor/psr/event-dispatcher/.editorconfig | 15 - old_vendor/psr/event-dispatcher/.gitignore | 2 - old_vendor/psr/event-dispatcher/LICENSE | 21 - old_vendor/psr/event-dispatcher/README.md | 6 - old_vendor/psr/event-dispatcher/composer.json | 26 - .../src/EventDispatcherInterface.php | 21 - .../src/ListenerProviderInterface.php | 19 - .../src/StoppableEventInterface.php | 26 - old_vendor/psr/log/LICENSE | 19 - old_vendor/psr/log/Psr/Log/AbstractLogger.php | 128 - .../log/Psr/Log/InvalidArgumentException.php | 7 - old_vendor/psr/log/Psr/Log/LogLevel.php | 18 - .../psr/log/Psr/Log/LoggerAwareInterface.php | 18 - .../psr/log/Psr/Log/LoggerAwareTrait.php | 26 - .../psr/log/Psr/Log/LoggerInterface.php | 125 - old_vendor/psr/log/Psr/Log/LoggerTrait.php | 142 - old_vendor/psr/log/Psr/Log/NullLogger.php | 30 - old_vendor/psr/log/Psr/Log/Test/DummyTest.php | 18 - .../log/Psr/Log/Test/LoggerInterfaceTest.php | 138 - .../psr/log/Psr/Log/Test/TestLogger.php | 147 - old_vendor/psr/log/README.md | 58 - old_vendor/psr/log/composer.json | 26 - old_vendor/sebastian/cli-parser/ChangeLog.md | 15 - old_vendor/sebastian/cli-parser/LICENSE | 33 - old_vendor/sebastian/cli-parser/README.md | 17 - old_vendor/sebastian/cli-parser/composer.json | 41 - .../sebastian/cli-parser/infection.json | 12 - .../sebastian/cli-parser/src/Parser.php | 204 - .../exceptions/AmbiguousOptionException.php | 26 - .../cli-parser/src/exceptions/Exception.php | 16 - .../OptionDoesNotAllowArgumentException.php | 26 - ...RequiredOptionArgumentMissingException.php | 26 - .../src/exceptions/UnknownOptionException.php | 26 - .../code-unit-reverse-lookup/ChangeLog.md | 38 - .../code-unit-reverse-lookup/LICENSE | 33 - .../code-unit-reverse-lookup/README.md | 20 - .../code-unit-reverse-lookup/composer.json | 36 - .../code-unit-reverse-lookup/src/Wizard.php | 125 - .../sebastian/code-unit/.psalm/baseline.xml | 23 - .../sebastian/code-unit/.psalm/config.xml | 16 - old_vendor/sebastian/code-unit/ChangeLog.md | 65 - old_vendor/sebastian/code-unit/LICENSE | 33 - old_vendor/sebastian/code-unit/README.md | 17 - old_vendor/sebastian/code-unit/composer.json | 50 - .../code-unit/src/ClassMethodUnit.php | 24 - .../sebastian/code-unit/src/ClassUnit.php | 24 - .../sebastian/code-unit/src/CodeUnit.php | 445 - .../code-unit/src/CodeUnitCollection.php | 84 - .../src/CodeUnitCollectionIterator.php | 55 - .../sebastian/code-unit/src/FunctionUnit.php | 24 - .../code-unit/src/InterfaceMethodUnit.php | 24 - .../sebastian/code-unit/src/InterfaceUnit.php | 24 - old_vendor/sebastian/code-unit/src/Mapper.php | 414 - .../code-unit/src/TraitMethodUnit.php | 24 - .../sebastian/code-unit/src/TraitUnit.php | 24 - .../code-unit/src/exceptions/Exception.php | 16 - .../exceptions/InvalidCodeUnitException.php | 16 - .../src/exceptions/NoTraitException.php | 16 - .../src/exceptions/ReflectionException.php | 16 - old_vendor/sebastian/comparator/ChangeLog.md | 143 - old_vendor/sebastian/comparator/LICENSE | 33 - old_vendor/sebastian/comparator/README.md | 41 - old_vendor/sebastian/comparator/composer.json | 57 - .../comparator/src/ArrayComparator.php | 141 - .../sebastian/comparator/src/Comparator.php | 61 - .../comparator/src/ComparisonFailure.php | 129 - .../comparator/src/DOMNodeComparator.php | 93 - .../comparator/src/DateTimeComparator.php | 95 - .../comparator/src/DoubleComparator.php | 61 - .../comparator/src/ExceptionComparator.php | 54 - .../sebastian/comparator/src/Factory.php | 141 - .../comparator/src/MockObjectComparator.php | 48 - .../comparator/src/NumericComparator.php | 84 - .../comparator/src/ObjectComparator.php | 112 - .../comparator/src/ResourceComparator.php | 54 - .../comparator/src/ScalarComparator.php | 99 - .../src/SplObjectStorageComparator.php | 71 - .../comparator/src/TypeComparator.php | 62 - .../comparator/src/exceptions/Exception.php | 16 - .../src/exceptions/RuntimeException.php | 14 - .../sebastian/complexity/.psalm/baseline.xml | 2 - .../sebastian/complexity/.psalm/config.xml | 16 - old_vendor/sebastian/complexity/ChangeLog.md | 30 - old_vendor/sebastian/complexity/LICENSE | 33 - old_vendor/sebastian/complexity/README.md | 22 - old_vendor/sebastian/complexity/composer.json | 41 - .../sebastian/complexity/src/Calculator.php | 88 - .../complexity/src/Complexity/Complexity.php | 42 - .../src/Complexity/ComplexityCollection.php | 72 - .../ComplexityCollectionIterator.php | 55 - .../complexity/src/Exception/Exception.php | 16 - .../src/Exception/RuntimeException.php | 14 - .../Visitor/ComplexityCalculatingVisitor.php | 109 - ...CyclomaticComplexityCalculatingVisitor.php | 59 - old_vendor/sebastian/diff/ChangeLog.md | 96 - old_vendor/sebastian/diff/LICENSE | 33 - old_vendor/sebastian/diff/README.md | 202 - old_vendor/sebastian/diff/composer.json | 47 - old_vendor/sebastian/diff/src/Chunk.php | 89 - old_vendor/sebastian/diff/src/Diff.php | 64 - old_vendor/sebastian/diff/src/Differ.php | 327 - .../src/Exception/ConfigurationException.php | 38 - .../diff/src/Exception/Exception.php | 16 - .../Exception/InvalidArgumentException.php | 14 - old_vendor/sebastian/diff/src/Line.php | 45 - .../LongestCommonSubsequenceCalculator.php | 18 - ...ientLongestCommonSubsequenceCalculator.php | 93 - .../src/Output/AbstractChunkOutputBuilder.php | 52 - .../diff/src/Output/DiffOnlyOutputBuilder.php | 72 - .../src/Output/DiffOutputBuilderInterface.php | 19 - .../Output/StrictUnifiedDiffOutputBuilder.php | 338 - .../src/Output/UnifiedDiffOutputBuilder.php | 272 - old_vendor/sebastian/diff/src/Parser.php | 110 - ...ientLongestCommonSubsequenceCalculator.php | 82 - old_vendor/sebastian/environment/ChangeLog.md | 183 - old_vendor/sebastian/environment/LICENSE | 33 - old_vendor/sebastian/environment/README.md | 21 - .../sebastian/environment/composer.json | 40 - .../sebastian/environment/src/Console.php | 187 - .../environment/src/OperatingSystem.php | 53 - .../sebastian/environment/src/Runtime.php | 321 - old_vendor/sebastian/exporter/ChangeLog.md | 78 - old_vendor/sebastian/exporter/LICENSE | 33 - old_vendor/sebastian/exporter/README.md | 174 - old_vendor/sebastian/exporter/composer.json | 56 - .../sebastian/exporter/src/Exporter.php | 346 - .../sebastian/global-state/ChangeLog.md | 86 - old_vendor/sebastian/global-state/LICENSE | 33 - old_vendor/sebastian/global-state/README.md | 20 - .../sebastian/global-state/composer.json | 51 - .../global-state/src/CodeExporter.php | 109 - .../global-state/src/ExcludeList.php | 119 - .../sebastian/global-state/src/Restorer.php | 143 - .../sebastian/global-state/src/Snapshot.php | 443 - .../global-state/src/exceptions/Exception.php | 16 - .../src/exceptions/RuntimeException.php | 14 - .../lines-of-code/.psalm/baseline.xml | 2 - .../sebastian/lines-of-code/.psalm/config.xml | 16 - .../sebastian/lines-of-code/ChangeLog.md | 34 - old_vendor/sebastian/lines-of-code/LICENSE | 33 - old_vendor/sebastian/lines-of-code/README.md | 22 - .../sebastian/lines-of-code/composer.json | 42 - .../sebastian/lines-of-code/src/Counter.php | 91 - .../lines-of-code/src/Exception/Exception.php | 16 - .../Exception/IllogicalValuesException.php | 16 - .../src/Exception/NegativeValueException.php | 16 - .../src/Exception/RuntimeException.php | 14 - .../lines-of-code/src/LineCountingVisitor.php | 82 - .../lines-of-code/src/LinesOfCode.php | 98 - .../object-enumerator/.psalm/baseline.xml | 9 - .../object-enumerator/.psalm/config.xml | 16 - .../sebastian/object-enumerator/ChangeLog.md | 88 - .../sebastian/object-enumerator/LICENSE | 33 - .../sebastian/object-enumerator/README.md | 20 - .../sebastian/object-enumerator/composer.json | 43 - .../object-enumerator/src/Enumerator.php | 88 - .../object-enumerator/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../object-reflector/.psalm/baseline.xml | 8 - .../object-reflector/.psalm/config.xml | 16 - .../sebastian/object-reflector/ChangeLog.md | 55 - old_vendor/sebastian/object-reflector/LICENSE | 33 - .../sebastian/object-reflector/README.md | 20 - .../sebastian/object-reflector/composer.json | 41 - .../object-reflector/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../object-reflector/src/ObjectReflector.php | 51 - .../sebastian/recursion-context/ChangeLog.md | 40 - .../sebastian/recursion-context/LICENSE | 33 - .../sebastian/recursion-context/README.md | 18 - .../sebastian/recursion-context/composer.json | 44 - .../recursion-context/src/Context.php | 191 - .../recursion-context/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../resource-operations/.gitattributes | 7 - .../sebastian/resource-operations/.gitignore | 6 - .../resource-operations/ChangeLog.md | 54 - .../sebastian/resource-operations/LICENSE | 33 - .../sebastian/resource-operations/README.md | 14 - .../resource-operations/build/generate.php | 65 - .../resource-operations/composer.json | 37 - .../src/ResourceOperations.php | 2232 -- old_vendor/sebastian/type/ChangeLog.md | 169 - old_vendor/sebastian/type/LICENSE | 33 - old_vendor/sebastian/type/README.md | 20 - old_vendor/sebastian/type/composer.json | 50 - old_vendor/sebastian/type/src/Parameter.php | 42 - .../sebastian/type/src/ReflectionMapper.php | 184 - old_vendor/sebastian/type/src/TypeName.php | 83 - .../type/src/exception/Exception.php | 16 - .../type/src/exception/RuntimeException.php | 14 - .../sebastian/type/src/type/CallableType.php | 212 - .../sebastian/type/src/type/FalseType.php | 42 - .../type/src/type/GenericObjectType.php | 54 - .../type/src/type/IntersectionType.php | 126 - .../sebastian/type/src/type/IterableType.php | 84 - .../sebastian/type/src/type/MixedType.php | 41 - .../sebastian/type/src/type/NeverType.php | 36 - .../sebastian/type/src/type/NullType.php | 41 - .../sebastian/type/src/type/ObjectType.php | 74 - .../sebastian/type/src/type/SimpleType.php | 104 - .../sebastian/type/src/type/StaticType.php | 68 - .../sebastian/type/src/type/TrueType.php | 42 - old_vendor/sebastian/type/src/type/Type.php | 226 - .../sebastian/type/src/type/UnionType.php | 138 - .../sebastian/type/src/type/UnknownType.php | 41 - .../sebastian/type/src/type/VoidType.php | 36 - old_vendor/sebastian/version/.gitattributes | 4 - old_vendor/sebastian/version/.gitignore | 2 - old_vendor/sebastian/version/ChangeLog.md | 25 - old_vendor/sebastian/version/LICENSE | 33 - old_vendor/sebastian/version/README.md | 43 - old_vendor/sebastian/version/composer.json | 37 - old_vendor/sebastian/version/src/Version.php | 97 - old_vendor/symfony/console/Application.php | 1316 - .../symfony/console/Attribute/AsCommand.php | 39 - old_vendor/symfony/console/CHANGELOG.md | 252 - .../console/CI/GithubActionReporter.php | 99 - old_vendor/symfony/console/Color.php | 133 - .../symfony/console/Command/Command.php | 725 - .../console/Command/CompleteCommand.php | 223 - .../console/Command/DumpCompletionCommand.php | 161 - .../symfony/console/Command/HelpCommand.php | 82 - .../symfony/console/Command/LazyCommand.php | 207 - .../symfony/console/Command/ListCommand.php | 75 - .../symfony/console/Command/LockableTrait.php | 68 - .../Command/SignalableCommandInterface.php | 34 - .../CommandLoader/CommandLoaderInterface.php | 38 - .../CommandLoader/ContainerCommandLoader.php | 55 - .../CommandLoader/FactoryCommandLoader.php | 54 - .../console/Completion/CompletionInput.php | 246 - .../Completion/CompletionSuggestions.php | 97 - .../Output/BashCompletionOutput.php | 33 - .../Output/CompletionOutputInterface.php | 25 - .../Output/FishCompletionOutput.php | 33 - .../Completion/Output/ZshCompletionOutput.php | 36 - .../symfony/console/Completion/Suggestion.php | 41 - old_vendor/symfony/console/ConsoleEvents.php | 72 - old_vendor/symfony/console/Cursor.php | 203 - .../AddConsoleCommandPass.php | 134 - .../Descriptor/ApplicationDescription.php | 139 - .../symfony/console/Descriptor/Descriptor.php | 74 - .../Descriptor/DescriptorInterface.php | 27 - .../console/Descriptor/JsonDescriptor.php | 166 - .../console/Descriptor/MarkdownDescriptor.php | 173 - .../Descriptor/ReStructuredTextDescriptor.php | 272 - .../console/Descriptor/TextDescriptor.php | 317 - .../console/Descriptor/XmlDescriptor.php | 232 - .../console/Event/ConsoleCommandEvent.php | 51 - .../console/Event/ConsoleErrorEvent.php | 57 - .../symfony/console/Event/ConsoleEvent.php | 61 - .../console/Event/ConsoleSignalEvent.php | 56 - .../console/Event/ConsoleTerminateEvent.php | 43 - .../console/EventListener/ErrorListener.php | 101 - .../Exception/CommandNotFoundException.php | 43 - .../console/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 19 - .../Exception/InvalidOptionException.php | 21 - .../console/Exception/LogicException.php | 19 - .../Exception/MissingInputException.php | 21 - .../Exception/NamespaceNotFoundException.php | 21 - .../console/Exception/RuntimeException.php | 19 - .../console/Formatter/NullOutputFormatter.php | 51 - .../Formatter/NullOutputFormatterStyle.php | 54 - .../console/Formatter/OutputFormatter.php | 268 - .../Formatter/OutputFormatterInterface.php | 56 - .../Formatter/OutputFormatterStyle.php | 110 - .../OutputFormatterStyleInterface.php | 60 - .../Formatter/OutputFormatterStyleStack.php | 107 - .../WrappableOutputFormatterInterface.php | 27 - .../console/Helper/DebugFormatterHelper.php | 98 - .../console/Helper/DescriptorHelper.php | 93 - old_vendor/symfony/console/Helper/Dumper.php | 57 - .../console/Helper/FormatterHelper.php | 81 - old_vendor/symfony/console/Helper/Helper.php | 163 - .../console/Helper/HelperInterface.php | 39 - .../symfony/console/Helper/HelperSet.php | 77 - .../console/Helper/InputAwareHelper.php | 33 - .../symfony/console/Helper/OutputWrapper.php | 76 - .../symfony/console/Helper/ProcessHelper.php | 137 - .../symfony/console/Helper/ProgressBar.php | 612 - .../console/Helper/ProgressIndicator.php | 235 - .../symfony/console/Helper/QuestionHelper.php | 612 - .../console/Helper/SymfonyQuestionHelper.php | 109 - old_vendor/symfony/console/Helper/Table.php | 914 - .../symfony/console/Helper/TableCell.php | 72 - .../symfony/console/Helper/TableCellStyle.php | 84 - .../symfony/console/Helper/TableRows.php | 30 - .../symfony/console/Helper/TableSeparator.php | 25 - .../symfony/console/Helper/TableStyle.php | 362 - .../symfony/console/Input/ArgvInput.php | 370 - .../symfony/console/Input/ArrayInput.php | 196 - old_vendor/symfony/console/Input/Input.php | 192 - .../symfony/console/Input/InputArgument.php | 154 - .../console/Input/InputAwareInterface.php | 28 - .../symfony/console/Input/InputDefinition.php | 416 - .../symfony/console/Input/InputInterface.php | 150 - .../symfony/console/Input/InputOption.php | 255 - .../Input/StreamableInputInterface.php | 39 - .../symfony/console/Input/StringInput.php | 87 - old_vendor/symfony/console/LICENSE | 19 - .../symfony/console/Logger/ConsoleLogger.php | 119 - .../symfony/console/Output/AnsiColorMode.php | 106 - .../symfony/console/Output/BufferedOutput.php | 43 - .../symfony/console/Output/ConsoleOutput.php | 165 - .../console/Output/ConsoleOutputInterface.php | 33 - .../console/Output/ConsoleSectionOutput.php | 239 - .../symfony/console/Output/NullOutput.php | 104 - old_vendor/symfony/console/Output/Output.php | 155 - .../console/Output/OutputInterface.php | 107 - .../symfony/console/Output/StreamOutput.php | 113 - .../console/Output/TrimmedBufferOutput.php | 61 - .../console/Question/ChoiceQuestion.php | 177 - .../console/Question/ConfirmationQuestion.php | 57 - .../symfony/console/Question/Question.php | 291 - old_vendor/symfony/console/README.md | 36 - .../symfony/console/Resources/completion.bash | 94 - .../symfony/console/Resources/completion.fish | 29 - .../symfony/console/Resources/completion.zsh | 82 - .../console/SignalRegistry/SignalRegistry.php | 57 - .../console/SingleCommandApplication.php | 72 - .../symfony/console/Style/OutputStyle.php | 132 - .../symfony/console/Style/StyleInterface.php | 138 - .../symfony/console/Style/SymfonyStyle.php | 506 - old_vendor/symfony/console/Terminal.php | 236 - .../console/Tester/ApplicationTester.php | 85 - .../Tester/CommandCompletionTester.php | 56 - .../symfony/console/Tester/CommandTester.php | 76 - .../Tester/Constraint/CommandIsSuccessful.php | 43 - .../symfony/console/Tester/TesterTrait.php | 178 - old_vendor/symfony/console/composer.json | 51 - .../deprecation-contracts/CHANGELOG.md | 5 - .../symfony/deprecation-contracts/LICENSE | 19 - .../symfony/deprecation-contracts/README.md | 26 - .../deprecation-contracts/composer.json | 35 - .../deprecation-contracts/function.php | 27 - .../event-dispatcher-contracts/CHANGELOG.md | 5 - .../event-dispatcher-contracts/Event.php | 51 - .../EventDispatcherInterface.php | 33 - .../event-dispatcher-contracts/LICENSE | 19 - .../event-dispatcher-contracts/README.md | 9 - .../event-dispatcher-contracts/composer.json | 35 - .../Attribute/AsEventListener.php | 29 - .../symfony/event-dispatcher/CHANGELOG.md | 96 - .../Debug/TraceableEventDispatcher.php | 376 - .../Debug/WrappedListener.php | 144 - .../AddEventAliasesPass.php | 40 - .../RegisterListenersPass.php | 216 - .../event-dispatcher/EventDispatcher.php | 270 - .../EventDispatcherInterface.php | 75 - .../EventSubscriberInterface.php | 49 - .../symfony/event-dispatcher/GenericEvent.php | 158 - .../ImmutableEventDispatcher.php | 79 - old_vendor/symfony/event-dispatcher/LICENSE | 19 - old_vendor/symfony/event-dispatcher/README.md | 15 - .../symfony/event-dispatcher/composer.json | 47 - old_vendor/symfony/filesystem/CHANGELOG.md | 82 - .../Exception/ExceptionInterface.php | 21 - .../Exception/FileNotFoundException.php | 34 - .../filesystem/Exception/IOException.php | 36 - .../Exception/IOExceptionInterface.php | 25 - .../Exception/InvalidArgumentException.php | 19 - .../filesystem/Exception/RuntimeException.php | 19 - old_vendor/symfony/filesystem/Filesystem.php | 767 - old_vendor/symfony/filesystem/LICENSE | 19 - old_vendor/symfony/filesystem/Path.php | 819 - old_vendor/symfony/filesystem/README.md | 13 - old_vendor/symfony/filesystem/composer.json | 30 - old_vendor/symfony/finder/CHANGELOG.md | 98 - .../symfony/finder/Comparator/Comparator.php | 62 - .../finder/Comparator/DateComparator.php | 50 - .../finder/Comparator/NumberComparator.php | 78 - .../Exception/AccessDeniedException.php | 19 - .../Exception/DirectoryNotFoundException.php | 19 - old_vendor/symfony/finder/Finder.php | 846 - old_vendor/symfony/finder/Gitignore.php | 91 - old_vendor/symfony/finder/Glob.php | 109 - .../finder/Iterator/CustomFilterIterator.php | 61 - .../Iterator/DateRangeFilterIterator.php | 58 - .../Iterator/DepthRangeFilterIterator.php | 48 - .../ExcludeDirectoryFilterIterator.php | 89 - .../Iterator/FileTypeFilterIterator.php | 53 - .../Iterator/FilecontentFilterIterator.php | 58 - .../Iterator/FilenameFilterIterator.php | 45 - .../symfony/finder/Iterator/LazyIterator.php | 32 - .../Iterator/MultiplePcreFilterIterator.php | 111 - .../finder/Iterator/PathFilterIterator.php | 56 - .../Iterator/RecursiveDirectoryIterator.php | 133 - .../Iterator/SizeRangeFilterIterator.php | 57 - .../finder/Iterator/SortableIterator.php | 103 - .../Iterator/VcsIgnoredFilterIterator.php | 176 - old_vendor/symfony/finder/LICENSE | 19 - old_vendor/symfony/finder/README.md | 14 - old_vendor/symfony/finder/SplFileInfo.php | 82 - old_vendor/symfony/finder/composer.json | 31 - .../symfony/options-resolver/CHANGELOG.md | 91 - .../Debug/OptionsResolverIntrospector.php | 104 - .../Exception/AccessException.php | 22 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidOptionsException.php | 23 - .../Exception/MissingOptionsException.php | 23 - .../Exception/NoConfigurationException.php | 26 - .../Exception/NoSuchOptionException.php | 26 - .../Exception/OptionDefinitionException.php | 21 - .../Exception/UndefinedOptionsException.php | 24 - old_vendor/symfony/options-resolver/LICENSE | 19 - .../options-resolver/OptionConfigurator.php | 149 - .../symfony/options-resolver/Options.php | 22 - .../options-resolver/OptionsResolver.php | 1317 - old_vendor/symfony/options-resolver/README.md | 15 - .../symfony/options-resolver/composer.json | 29 - old_vendor/symfony/polyfill-ctype/Ctype.php | 232 - old_vendor/symfony/polyfill-ctype/LICENSE | 19 - old_vendor/symfony/polyfill-ctype/README.md | 12 - .../symfony/polyfill-ctype/bootstrap.php | 50 - .../symfony/polyfill-ctype/bootstrap80.php | 46 - .../symfony/polyfill-ctype/composer.json | 41 - .../polyfill-intl-grapheme/Grapheme.php | 247 - .../symfony/polyfill-intl-grapheme/LICENSE | 19 - .../symfony/polyfill-intl-grapheme/README.md | 31 - .../polyfill-intl-grapheme/bootstrap.php | 58 - .../polyfill-intl-grapheme/bootstrap80.php | 50 - .../polyfill-intl-grapheme/composer.json | 38 - .../symfony/polyfill-intl-normalizer/LICENSE | 19 - .../polyfill-intl-normalizer/Normalizer.php | 310 - .../polyfill-intl-normalizer/README.md | 14 - .../Resources/stubs/Normalizer.php | 17 - .../unidata/canonicalComposition.php | 945 - .../unidata/canonicalDecomposition.php | 2065 -- .../Resources/unidata/combiningClass.php | 876 - .../unidata/compatibilityDecomposition.php | 3695 --- .../polyfill-intl-normalizer/bootstrap.php | 23 - .../polyfill-intl-normalizer/bootstrap80.php | 19 - .../polyfill-intl-normalizer/composer.json | 39 - old_vendor/symfony/polyfill-mbstring/LICENSE | 19 - .../symfony/polyfill-mbstring/Mbstring.php | 874 - .../symfony/polyfill-mbstring/README.md | 13 - .../Resources/unidata/lowerCase.php | 1397 - .../Resources/unidata/titleCaseRegexp.php | 5 - .../Resources/unidata/upperCase.php | 1489 - .../symfony/polyfill-mbstring/bootstrap.php | 147 - .../symfony/polyfill-mbstring/bootstrap80.php | 143 - .../symfony/polyfill-mbstring/composer.json | 41 - old_vendor/symfony/polyfill-php80/LICENSE | 19 - old_vendor/symfony/polyfill-php80/Php80.php | 115 - .../symfony/polyfill-php80/PhpToken.php | 103 - old_vendor/symfony/polyfill-php80/README.md | 25 - .../Resources/stubs/Attribute.php | 31 - .../Resources/stubs/PhpToken.php | 16 - .../Resources/stubs/Stringable.php | 20 - .../Resources/stubs/UnhandledMatchError.php | 16 - .../Resources/stubs/ValueError.php | 16 - .../symfony/polyfill-php80/bootstrap.php | 42 - .../symfony/polyfill-php80/composer.json | 40 - old_vendor/symfony/polyfill-php81/LICENSE | 19 - old_vendor/symfony/polyfill-php81/Php81.php | 37 - old_vendor/symfony/polyfill-php81/README.md | 17 - .../Resources/stubs/ReturnTypeWillChange.php | 20 - .../symfony/polyfill-php81/bootstrap.php | 28 - .../symfony/polyfill-php81/composer.json | 36 - old_vendor/symfony/process/CHANGELOG.md | 116 - .../process/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../process/Exception/LogicException.php | 21 - .../Exception/ProcessFailedException.php | 57 - .../Exception/ProcessSignaledException.php | 41 - .../Exception/ProcessTimedOutException.php | 73 - .../process/Exception/RuntimeException.php | 21 - .../symfony/process/ExecutableFinder.php | 88 - old_vendor/symfony/process/InputStream.php | 100 - old_vendor/symfony/process/LICENSE | 19 - .../symfony/process/PhpExecutableFinder.php | 99 - old_vendor/symfony/process/PhpProcess.php | 69 - .../symfony/process/Pipes/AbstractPipes.php | 177 - .../symfony/process/Pipes/PipesInterface.php | 61 - .../symfony/process/Pipes/UnixPipes.php | 148 - .../symfony/process/Pipes/WindowsPipes.php | 186 - old_vendor/symfony/process/Process.php | 1598 - old_vendor/symfony/process/ProcessUtils.php | 67 - old_vendor/symfony/process/README.md | 13 - old_vendor/symfony/process/composer.json | 28 - .../service-contracts/Attribute/Required.php | 25 - .../Attribute/SubscribedService.php | 47 - .../symfony/service-contracts/CHANGELOG.md | 5 - old_vendor/symfony/service-contracts/LICENSE | 19 - .../symfony/service-contracts/README.md | 9 - .../service-contracts/ResetInterface.php | 33 - .../service-contracts/ServiceLocatorTrait.php | 115 - .../ServiceProviderInterface.php | 45 - .../ServiceSubscriberInterface.php | 62 - .../ServiceSubscriberTrait.php | 78 - .../Test/ServiceLocatorTest.php | 23 - .../Test/ServiceLocatorTestCase.php | 92 - .../symfony/service-contracts/composer.json | 41 - old_vendor/symfony/stopwatch/CHANGELOG.md | 24 - old_vendor/symfony/stopwatch/LICENSE | 19 - old_vendor/symfony/stopwatch/README.md | 42 - old_vendor/symfony/stopwatch/Section.php | 157 - old_vendor/symfony/stopwatch/Stopwatch.php | 159 - .../symfony/stopwatch/StopwatchEvent.php | 230 - .../symfony/stopwatch/StopwatchPeriod.php | 73 - old_vendor/symfony/stopwatch/composer.json | 29 - old_vendor/symfony/string/AbstractString.php | 708 - .../symfony/string/AbstractUnicodeString.php | 590 - old_vendor/symfony/string/ByteString.php | 485 - old_vendor/symfony/string/CHANGELOG.md | 40 - old_vendor/symfony/string/CodePointString.php | 260 - .../string/Exception/ExceptionInterface.php | 16 - .../Exception/InvalidArgumentException.php | 16 - .../string/Exception/RuntimeException.php | 16 - .../string/Inflector/EnglishInflector.php | 520 - .../string/Inflector/FrenchInflector.php | 151 - .../string/Inflector/InflectorInterface.php | 33 - old_vendor/symfony/string/LICENSE | 19 - old_vendor/symfony/string/LazyString.php | 145 - old_vendor/symfony/string/README.md | 14 - .../Resources/data/wcswidth_table_wide.php | 1143 - .../Resources/data/wcswidth_table_zero.php | 1415 - .../symfony/string/Resources/functions.php | 38 - .../symfony/string/Slugger/AsciiSlugger.php | 210 - .../string/Slugger/SluggerInterface.php | 27 - old_vendor/symfony/string/UnicodeString.php | 358 - old_vendor/symfony/string/composer.json | 43 - old_vendor/theseer/tokenizer/.php_cs.dist | 213 - old_vendor/theseer/tokenizer/CHANGELOG.md | 71 - old_vendor/theseer/tokenizer/LICENSE | 30 - old_vendor/theseer/tokenizer/README.md | 50 - old_vendor/theseer/tokenizer/composer.json | 27 - .../theseer/tokenizer/src/Exception.php | 5 - .../theseer/tokenizer/src/NamespaceUri.php | 25 - .../tokenizer/src/NamespaceUriException.php | 5 - old_vendor/theseer/tokenizer/src/Token.php | 35 - .../theseer/tokenizer/src/TokenCollection.php | 93 - .../src/TokenCollectionException.php | 5 - .../theseer/tokenizer/src/Tokenizer.php | 142 - .../theseer/tokenizer/src/XMLSerializer.php | 79 - vb_book.code-workspace | 8 - vendor/autoload.php | 20 +- vendor/bin/php-cs-fixer | 10 +- vendor/bin/php-parse | 10 +- vendor/bin/phpunit | 10 +- .../codeigniter/coding-standard/CHANGELOG.md | 6 + .../codeigniter/coding-standard/composer.json | 2 +- .../coding-standard/src/CodeIgniter4.php | 1 + vendor/composer/ClassLoader.php | 139 +- vendor/composer/InstalledVersions.php | 33 +- vendor/composer/autoload_classmap.php | 12 +- vendor/composer/autoload_files.php | 4 +- vendor/composer/autoload_namespaces.php | 2 +- vendor/composer/autoload_psr4.php | 2 +- vendor/composer/autoload_real.php | 62 +- vendor/composer/autoload_static.php | 22 +- vendor/composer/installed.json | 325 +- vendor/composer/installed.php | 204 +- vendor/doctrine/instantiator/composer.json | 14 +- .../Exception/ExceptionInterface.php | 2 + .../Exception/InvalidArgumentException.php | 6 +- .../Exception/UnexpectedValueException.php | 14 +- .../Doctrine/Instantiator/Instantiator.php | 31 +- .../Instantiator/InstantiatorInterface.php | 6 +- vendor/friendsofphp/php-cs-fixer/CHANGELOG.md | 12 + .../friendsofphp/php-cs-fixer/composer.json | 2 + vendor/friendsofphp/php-cs-fixer/php-cs-fixer | 0 .../php-cs-fixer/src/Console/Application.php | 4 +- .../ClassNotation/OrderedTraitsFixer.php | 6 + .../ControlStructure/NoUselessElseFixer.php | 2 +- ...signNullCoalescingToCoalesceEqualFixer.php | 135 +- .../Operator/BinaryOperatorSpacesFixer.php | 2 +- .../Operator/StandardizeIncrementFixer.php | 1 + .../Fixer/Phpdoc/PhpdocSeparationFixer.php | 4 +- ...glelineWhitespaceBeforeSemicolonsFixer.php | 2 +- .../BlankLineBeforeStatementFixer.php | 2 +- .../Whitespace/NoExtraBlankLinesFixer.php | 2 +- .../NoWhitespaceInBlankLineFixer.php | 2 +- .../Whitespace/SingleBlankLineAtEofFixer.php | 2 +- .../Whitespace/StatementIndentationFixer.php | 2 +- .../src/RuleSet/Sets/PERRiskySet.php | 8 +- .../php-cs-fixer/src/RuleSet/Sets/PERSet.php | 8 +- .../src/RuleSet/Sets/PhpCsFixerRiskySet.php | 2 +- .../src/RuleSet/Sets/PhpCsFixerSet.php | 3 +- .../src/RuleSet/Sets/SymfonySet.php | 1 + vendor/nexusphp/cs-config/CHANGELOG.md | 5 + vendor/nexusphp/cs-config/composer.json | 2 +- .../cs-config/src/Ruleset/Nexus74.php | 1 + .../cs-config/src/Ruleset/Nexus80.php | 1 + .../cs-config/src/Ruleset/Nexus81.php | 1 + vendor/nikic/php-parser/bin/php-parse | 0 .../php-code-coverage/ChangeLog-9.2.md | 7 + .../src/Report/Cobertura.php | 4 +- .../phpunit/php-code-coverage/src/Version.php | 2 +- vendor/phpunit/phpunit/ChangeLog-9.6.md | 7 + vendor/phpunit/phpunit/phpunit | 0 .../phpunit/src/Framework/TestCase.php | 6 +- vendor/phpunit/phpunit/src/Runner/Version.php | 2 +- .../src/Util/PHP/AbstractPhpProcess.php | 16 +- .../src/Util/PHP/Template/TestCaseClass.tpl | 20 +- .../src/Util/PHP/Template/TestCaseMethod.tpl | 18 +- .../resource-operations/build/generate.php | 0 vendor/symfony/console/Application.php | 193 +- vendor/symfony/console/CHANGELOG.md | 26 + .../console/CI/GithubActionReporter.php | 2 +- vendor/symfony/console/Color.php | 49 +- vendor/symfony/console/Command/Command.php | 97 +- .../console/Command/CompleteCommand.php | 56 +- .../console/Command/DumpCompletionCommand.php | 68 +- .../symfony/console/Command/HelpCommand.php | 31 +- .../symfony/console/Command/LazyCommand.php | 25 +- .../symfony/console/Command/ListCommand.php | 26 +- .../symfony/console/Command/LockableTrait.php | 7 +- .../Command/SignalableCommandInterface.php | 6 +- .../CommandLoader/ContainerCommandLoader.php | 11 +- .../CommandLoader/FactoryCommandLoader.php | 9 - .../console/Completion/CompletionInput.php | 11 +- .../symfony/console/Completion/Suggestion.php | 16 +- vendor/symfony/console/Cursor.php | 8 +- .../AddConsoleCommandPass.php | 5 +- .../Descriptor/ApplicationDescription.php | 4 +- .../symfony/console/Descriptor/Descriptor.php | 52 +- .../Descriptor/DescriptorInterface.php | 3 + .../console/Descriptor/JsonDescriptor.php | 27 +- .../console/Descriptor/MarkdownDescriptor.php | 59 +- .../console/Descriptor/TextDescriptor.php | 38 +- .../console/Descriptor/XmlDescriptor.php | 29 +- .../console/Event/ConsoleErrorEvent.php | 1 - vendor/symfony/console/Event/ConsoleEvent.php | 4 +- .../console/Event/ConsoleSignalEvent.php | 23 +- .../console/EventListener/ErrorListener.php | 10 +- .../console/Formatter/NullOutputFormatter.php | 22 +- .../Formatter/NullOutputFormatterStyle.php | 24 +- .../console/Formatter/OutputFormatter.php | 35 +- .../Formatter/OutputFormatterInterface.php | 4 + .../Formatter/OutputFormatterStyle.php | 24 +- .../OutputFormatterStyleInterface.php | 14 +- .../Formatter/OutputFormatterStyleStack.php | 10 +- .../WrappableOutputFormatterInterface.php | 2 + .../console/Helper/DebugFormatterHelper.php | 3 - .../console/Helper/DescriptorHelper.php | 7 +- vendor/symfony/console/Helper/Dumper.php | 29 +- .../console/Helper/FormatterHelper.php | 3 - vendor/symfony/console/Helper/Helper.php | 25 +- .../console/Helper/HelperInterface.php | 4 +- vendor/symfony/console/Helper/HelperSet.php | 9 +- .../console/Helper/InputAwareHelper.php | 2 +- .../symfony/console/Helper/ProcessHelper.php | 3 - vendor/symfony/console/Helper/ProgressBar.php | 119 +- .../console/Helper/ProgressIndicator.php | 57 +- .../symfony/console/Helper/QuestionHelper.php | 44 +- .../console/Helper/SymfonyQuestionHelper.php | 4 +- vendor/symfony/console/Helper/Table.php | 115 +- .../symfony/console/Helper/TableCellStyle.php | 4 +- vendor/symfony/console/Input/ArgvInput.php | 28 +- vendor/symfony/console/Input/ArrayInput.php | 19 +- vendor/symfony/console/Input/Input.php | 43 +- .../symfony/console/Input/InputArgument.php | 43 +- .../console/Input/InputAwareInterface.php | 2 + .../symfony/console/Input/InputDefinition.php | 18 +- .../symfony/console/Input/InputInterface.php | 13 + vendor/symfony/console/Input/InputOption.php | 45 +- .../Input/StreamableInputInterface.php | 2 + vendor/symfony/console/Input/StringInput.php | 3 + vendor/symfony/console/LICENSE | 2 +- .../symfony/console/Logger/ConsoleLogger.php | 9 +- .../symfony/console/Output/BufferedOutput.php | 2 +- .../symfony/console/Output/ConsoleOutput.php | 13 +- .../console/Output/ConsoleOutputInterface.php | 3 + .../console/Output/ConsoleSectionOutput.php | 137 +- vendor/symfony/console/Output/NullOutput.php | 33 +- vendor/symfony/console/Output/Output.php | 35 +- .../console/Output/OutputInterface.php | 19 +- .../symfony/console/Output/StreamOutput.php | 6 +- .../console/Output/TrimmedBufferOutput.php | 2 +- vendor/symfony/console/Question/Question.php | 26 +- vendor/symfony/console/README.md | 10 +- .../symfony/console/Resources/completion.bash | 12 +- .../console/SignalRegistry/SignalRegistry.php | 12 +- vendor/symfony/console/Style/OutputStyle.php | 38 +- .../symfony/console/Style/StyleInterface.php | 28 + vendor/symfony/console/Style/SymfonyStyle.php | 104 +- vendor/symfony/console/Terminal.php | 92 +- .../console/Tester/ApplicationTester.php | 2 +- .../symfony/console/Tester/CommandTester.php | 2 +- .../Tester/Constraint/CommandIsSuccessful.php | 12 - vendor/symfony/console/Tester/TesterTrait.php | 8 +- vendor/symfony/console/composer.json | 13 +- vendor/symfony/deprecation-contracts/LICENSE | 2 +- .../symfony/deprecation-contracts/README.md | 2 +- .../deprecation-contracts/composer.json | 4 +- .../event-dispatcher-contracts/Event.php | 3 - .../EventDispatcherInterface.php | 6 +- .../event-dispatcher-contracts/LICENSE | 2 +- .../event-dispatcher-contracts/README.md | 2 +- .../event-dispatcher-contracts/composer.json | 7 +- .../Debug/TraceableEventDispatcher.php | 96 +- .../Debug/WrappedListener.php | 49 +- .../RegisterListenersPass.php | 19 +- .../event-dispatcher/EventDispatcher.php | 44 +- .../EventDispatcherInterface.php | 9 + .../ImmutableEventDispatcher.php | 22 +- vendor/symfony/event-dispatcher/LICENSE | 2 +- vendor/symfony/event-dispatcher/composer.json | 13 +- .../filesystem/Exception/IOException.php | 3 - vendor/symfony/filesystem/Filesystem.php | 54 +- vendor/symfony/filesystem/LICENSE | 2 +- vendor/symfony/filesystem/Path.php | 10 +- vendor/symfony/filesystem/composer.json | 2 +- vendor/symfony/finder/CHANGELOG.md | 6 + .../symfony/finder/Comparator/Comparator.php | 22 +- .../finder/Comparator/DateComparator.php | 4 +- .../finder/Comparator/NumberComparator.php | 2 +- vendor/symfony/finder/Finder.php | 60 +- vendor/symfony/finder/Gitignore.php | 6 +- .../ExcludeDirectoryFilterIterator.php | 12 +- .../Iterator/FileTypeFilterIterator.php | 4 +- .../Iterator/FilecontentFilterIterator.php | 4 +- .../symfony/finder/Iterator/LazyIterator.php | 2 +- .../Iterator/MultiplePcreFilterIterator.php | 6 +- .../finder/Iterator/PathFilterIterator.php | 4 +- .../Iterator/RecursiveDirectoryIterator.php | 44 +- .../finder/Iterator/SortableIterator.php | 35 +- .../Iterator/VcsIgnoredFilterIterator.php | 47 +- vendor/symfony/finder/LICENSE | 2 +- vendor/symfony/finder/composer.json | 5 +- vendor/symfony/options-resolver/CHANGELOG.md | 5 + vendor/symfony/options-resolver/LICENSE | 2 +- .../options-resolver/OptionConfigurator.php | 12 + .../options-resolver/OptionsResolver.php | 37 +- vendor/symfony/options-resolver/composer.json | 4 +- .../Exception/ProcessFailedException.php | 3 + .../Exception/ProcessTimedOutException.php | 26 +- vendor/symfony/process/ExecutableFinder.php | 4 + vendor/symfony/process/InputStream.php | 10 +- vendor/symfony/process/LICENSE | 2 +- .../symfony/process/PhpExecutableFinder.php | 2 +- vendor/symfony/process/PhpProcess.php | 5 +- .../symfony/process/Pipes/AbstractPipes.php | 9 +- .../symfony/process/Pipes/PipesInterface.php | 2 +- vendor/symfony/process/Pipes/UnixPipes.php | 17 +- vendor/symfony/process/Pipes/WindowsPipes.php | 20 +- vendor/symfony/process/Process.php | 52 +- vendor/symfony/process/README.md | 15 - vendor/symfony/process/composer.json | 2 +- .../Attribute/SubscribedService.php | 20 +- vendor/symfony/service-contracts/LICENSE | 2 +- vendor/symfony/service-contracts/README.md | 2 +- .../service-contracts/ResetInterface.php | 3 + .../service-contracts/ServiceLocatorTrait.php | 9 - .../ServiceProviderInterface.php | 9 + .../ServiceSubscriberInterface.php | 13 +- .../ServiceSubscriberTrait.php | 31 +- .../Test/ServiceLocatorTest.php | 81 +- .../symfony/service-contracts/composer.json | 12 +- vendor/symfony/stopwatch/LICENSE | 2 +- vendor/symfony/stopwatch/Stopwatch.php | 6 + vendor/symfony/stopwatch/StopwatchEvent.php | 2 + vendor/symfony/stopwatch/composer.json | 4 +- vendor/symfony/string/AbstractString.php | 16 +- .../symfony/string/AbstractUnicodeString.php | 42 +- vendor/symfony/string/ByteString.php | 16 +- vendor/symfony/string/CHANGELOG.md | 5 + vendor/symfony/string/CodePointString.php | 2 +- .../string/Inflector/EnglishInflector.php | 25 +- .../string/Inflector/FrenchInflector.php | 6 - vendor/symfony/string/LICENSE | 2 +- vendor/symfony/string/LazyString.php | 12 +- vendor/symfony/string/Resources/functions.php | 2 +- .../symfony/string/Slugger/AsciiSlugger.php | 54 +- vendor/symfony/string/UnicodeString.php | 4 +- vendor/symfony/string/composer.json | 7 +- 3022 files changed, 2704 insertions(+), 409998 deletions(-) delete mode 100644 Untitled-1.json delete mode 100644 old_composer.lock delete mode 100644 old_vendor/autoload.php delete mode 100644 old_vendor/bin/php-cs-fixer delete mode 100644 old_vendor/bin/php-parse delete mode 100644 old_vendor/codeigniter/coding-standard/CHANGELOG.md delete mode 100644 old_vendor/codeigniter/coding-standard/CONTRIBUTING.md delete mode 100644 old_vendor/codeigniter/coding-standard/LICENSE delete mode 100644 old_vendor/codeigniter/coding-standard/README.md delete mode 100644 old_vendor/codeigniter/coding-standard/composer.json delete mode 100644 old_vendor/codeigniter/coding-standard/src/CodeIgniter4.php delete mode 100644 old_vendor/composer/ClassLoader.php delete mode 100644 old_vendor/composer/InstalledVersions.php delete mode 100644 old_vendor/composer/LICENSE delete mode 100644 old_vendor/composer/autoload_classmap.php delete mode 100644 old_vendor/composer/autoload_files.php delete mode 100644 old_vendor/composer/autoload_namespaces.php delete mode 100644 old_vendor/composer/autoload_psr4.php delete mode 100644 old_vendor/composer/autoload_real.php delete mode 100644 old_vendor/composer/autoload_static.php delete mode 100644 old_vendor/composer/installed.json delete mode 100644 old_vendor/composer/installed.php delete mode 100644 old_vendor/composer/pcre/LICENSE delete mode 100644 old_vendor/composer/pcre/README.md delete mode 100644 old_vendor/composer/pcre/composer.json delete mode 100644 old_vendor/composer/pcre/src/MatchAllResult.php delete mode 100644 old_vendor/composer/pcre/src/MatchAllStrictGroupsResult.php delete mode 100644 old_vendor/composer/pcre/src/MatchAllWithOffsetsResult.php delete mode 100644 old_vendor/composer/pcre/src/MatchResult.php delete mode 100644 old_vendor/composer/pcre/src/MatchStrictGroupsResult.php delete mode 100644 old_vendor/composer/pcre/src/MatchWithOffsetsResult.php delete mode 100644 old_vendor/composer/pcre/src/PcreException.php delete mode 100644 old_vendor/composer/pcre/src/Preg.php delete mode 100644 old_vendor/composer/pcre/src/Regex.php delete mode 100644 old_vendor/composer/pcre/src/ReplaceResult.php delete mode 100644 old_vendor/composer/pcre/src/UnexpectedNullMatchException.php delete mode 100644 old_vendor/composer/platform_check.php delete mode 100644 old_vendor/composer/semver/CHANGELOG.md delete mode 100644 old_vendor/composer/semver/LICENSE delete mode 100644 old_vendor/composer/semver/README.md delete mode 100644 old_vendor/composer/semver/composer.json delete mode 100644 old_vendor/composer/semver/src/Comparator.php delete mode 100644 old_vendor/composer/semver/src/CompilingMatcher.php delete mode 100644 old_vendor/composer/semver/src/Constraint/Bound.php delete mode 100644 old_vendor/composer/semver/src/Constraint/Constraint.php delete mode 100644 old_vendor/composer/semver/src/Constraint/ConstraintInterface.php delete mode 100644 old_vendor/composer/semver/src/Constraint/MatchAllConstraint.php delete mode 100644 old_vendor/composer/semver/src/Constraint/MatchNoneConstraint.php delete mode 100644 old_vendor/composer/semver/src/Constraint/MultiConstraint.php delete mode 100644 old_vendor/composer/semver/src/Interval.php delete mode 100644 old_vendor/composer/semver/src/Intervals.php delete mode 100644 old_vendor/composer/semver/src/Semver.php delete mode 100644 old_vendor/composer/semver/src/VersionParser.php delete mode 100644 old_vendor/composer/xdebug-handler/CHANGELOG.md delete mode 100644 old_vendor/composer/xdebug-handler/LICENSE delete mode 100644 old_vendor/composer/xdebug-handler/README.md delete mode 100644 old_vendor/composer/xdebug-handler/composer.json delete mode 100644 old_vendor/composer/xdebug-handler/src/PhpConfig.php delete mode 100644 old_vendor/composer/xdebug-handler/src/Process.php delete mode 100644 old_vendor/composer/xdebug-handler/src/Status.php delete mode 100644 old_vendor/composer/xdebug-handler/src/XdebugHandler.php delete mode 100644 old_vendor/doctrine/annotations/LICENSE delete mode 100644 old_vendor/doctrine/annotations/README.md delete mode 100644 old_vendor/doctrine/annotations/composer.json delete mode 100644 old_vendor/doctrine/annotations/docs/en/annotations.rst delete mode 100644 old_vendor/doctrine/annotations/docs/en/custom.rst delete mode 100644 old_vendor/doctrine/annotations/docs/en/index.rst delete mode 100644 old_vendor/doctrine/annotations/docs/en/sidebar.rst delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php delete mode 100644 old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php delete mode 100644 old_vendor/doctrine/annotations/psalm.xml delete mode 100644 old_vendor/doctrine/deprecations/LICENSE delete mode 100644 old_vendor/doctrine/deprecations/README.md delete mode 100644 old_vendor/doctrine/deprecations/composer.json delete mode 100644 old_vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php delete mode 100644 old_vendor/doctrine/deprecations/phpcs.xml delete mode 100644 old_vendor/doctrine/deprecations/phpstan.neon delete mode 100644 old_vendor/doctrine/deprecations/psalm.xml delete mode 100644 old_vendor/doctrine/instantiator/.doctrine-project.json delete mode 100644 old_vendor/doctrine/instantiator/CONTRIBUTING.md delete mode 100644 old_vendor/doctrine/instantiator/LICENSE delete mode 100644 old_vendor/doctrine/instantiator/README.md delete mode 100644 old_vendor/doctrine/instantiator/composer.json delete mode 100644 old_vendor/doctrine/instantiator/docs/en/index.rst delete mode 100644 old_vendor/doctrine/instantiator/docs/en/sidebar.rst delete mode 100644 old_vendor/doctrine/instantiator/psalm.xml delete mode 100644 old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php delete mode 100644 old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php delete mode 100644 old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php delete mode 100644 old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php delete mode 100644 old_vendor/doctrine/lexer/LICENSE delete mode 100644 old_vendor/doctrine/lexer/README.md delete mode 100644 old_vendor/doctrine/lexer/UPGRADE.md delete mode 100644 old_vendor/doctrine/lexer/composer.json delete mode 100644 old_vendor/doctrine/lexer/src/AbstractLexer.php delete mode 100644 old_vendor/doctrine/lexer/src/Token.php delete mode 100644 old_vendor/fakerphp/faker/CHANGELOG.md delete mode 100644 old_vendor/fakerphp/faker/LICENSE delete mode 100644 old_vendor/fakerphp/faker/README.md delete mode 100644 old_vendor/fakerphp/faker/composer.json delete mode 100644 old_vendor/fakerphp/faker/psalm.baseline.xml delete mode 100644 old_vendor/fakerphp/faker/rector-migrate.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/Ean.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/Iban.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/Inn.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/Isbn.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/Luhn.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Calculator/TCNo.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ChanceGenerator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Container/Container.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Container/ContainerBuilder.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Container/ContainerException.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Container/ContainerInterface.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Container/NotInContainerException.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Barcode.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Blood.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Coordinates.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/File.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Number.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Uuid.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Core/Version.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/DefaultGenerator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Documentor.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/AddressExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/BarcodeExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/BloodExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/ColorExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/CompanyExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/CountryExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/DateTimeExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/Extension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/ExtensionNotFound.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/FileExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtensionTrait.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/Helper.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/NumberExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/PersonExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/PhoneNumberExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/UuidExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Extension/VersionExtension.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Factory.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Generator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Guesser/Name.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/backward-compatibility.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ORM/Spot/Populator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Barcode.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Base.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Biased.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/File.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Image.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Lorem.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Medical.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Miscellaneous.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/UserAgent.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/Uuid.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/at_AT/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bn_BD/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Utils.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_CY/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_AU/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_AU/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_AU/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_CA/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_CA/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NG/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NG/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NG/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NG/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NZ/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NZ/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_NZ/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_PH/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_PH/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_ES/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_PE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_PE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_PE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_PE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/et_EE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_BE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/he_IL/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/he_IL/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/he_IL/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/he_IL/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/he_IL/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hr_HR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/it_IT/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/mn_MN/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Miscellaneous.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/LicensePlate.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/check_digit.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_MD/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sl_SI/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Municipality.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Address.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Company.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Payment.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Person.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Text.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/UniqueGenerator.php delete mode 100644 old_vendor/fakerphp/faker/src/Faker/ValidGenerator.php delete mode 100644 old_vendor/fakerphp/faker/src/autoload.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/CHANGELOG.md delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/CONTRIBUTING.md delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/LICENSE delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/README.md delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/UPGRADE-v3.md delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/ci-integration.sh delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/composer.json delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/feature-or-bug.rst delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/logo.md delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/logo.png delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/php-cs-fixer delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Config.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Application.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Line.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Documentation/ListDocumentGenerator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Error/Error.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FileReader.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FileRemoval.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Finder.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerFactory.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/FixerNameValidator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/Linter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/PharChecker.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Preg.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/PregException.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Runner/Runner.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/StdinFileInfo.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformers.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ToolInfo.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/Utils.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php delete mode 100644 old_vendor/friendsofphp/php-cs-fixer/src/WordMatcher.php delete mode 100644 old_vendor/kint-php/kint/LICENSE delete mode 100644 old_vendor/kint-php/kint/README.md delete mode 100644 old_vendor/kint-php/kint/composer.json delete mode 100644 old_vendor/kint-php/kint/init.php delete mode 100644 old_vendor/kint-php/kint/init_helpers.php delete mode 100644 old_vendor/kint-php/kint/resources/compiled/aante-light.css delete mode 100644 old_vendor/kint-php/kint/resources/compiled/microtime.js delete mode 100644 old_vendor/kint-php/kint/resources/compiled/original.css delete mode 100644 old_vendor/kint-php/kint/resources/compiled/plain.css delete mode 100644 old_vendor/kint-php/kint/resources/compiled/plain.js delete mode 100644 old_vendor/kint-php/kint/resources/compiled/rich.js delete mode 100644 old_vendor/kint-php/kint/resources/compiled/shared.js delete mode 100644 old_vendor/kint-php/kint/resources/compiled/solarized-dark.css delete mode 100644 old_vendor/kint-php/kint/resources/compiled/solarized.css delete mode 100644 old_vendor/kint-php/kint/src/CallFinder.php delete mode 100644 old_vendor/kint-php/kint/src/FacadeInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Kint.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/AbstractPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ArrayLimitPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ArrayObjectPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/Base64Plugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/BinaryPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/BlacklistPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ClassMethodsPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ClassStaticsPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ClosurePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ColorPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ConstructablePluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/DOMDocumentPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/DateTimePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/EnumPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/FsPathPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/IteratorPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/JsonPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/MicrotimePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/MysqliPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/Parser.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/PluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ProxyPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/SerializePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/SplFileInfoPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/SplObjectStoragePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/StreamPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/TablePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ThrowablePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/TimestampPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/ToStringPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/TracePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Parser/XmlPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/AbstractRenderer.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/CliRenderer.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/PlainRenderer.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/RendererInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/AbstractPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/CallablePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/ColorPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/PluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/RecursionPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/SourcePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/TablePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/RichRenderer.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/AbstractPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/ArrayLimitPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/BlacklistPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/DepthLimitPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/EnumPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/MicrotimePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/PluginInterface.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/RecursionPlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/Text/TracePlugin.php delete mode 100644 old_vendor/kint-php/kint/src/Renderer/TextRenderer.php delete mode 100644 old_vendor/kint-php/kint/src/Utils.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/BlobValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/ClosureValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/DateTimeValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/EnumValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/InstanceValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/MethodValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/ParameterHoldingTrait.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/ParameterValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/ColorRepresentation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/MethodDefinitionRepresentation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/MicrotimeRepresentation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/Representation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/SourceRepresentation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Representation/SplFileInfoRepresentation.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/ResourceValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/SimpleXMLElementValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/StreamValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/ThrowableValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/TraceFrameValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/TraceValue.php delete mode 100644 old_vendor/kint-php/kint/src/Zval/Value.php delete mode 100644 old_vendor/laminas/laminas-escaper/COPYRIGHT.md delete mode 100644 old_vendor/laminas/laminas-escaper/LICENSE.md delete mode 100644 old_vendor/laminas/laminas-escaper/README.md delete mode 100644 old_vendor/laminas/laminas-escaper/composer.json delete mode 100644 old_vendor/laminas/laminas-escaper/src/Escaper.php delete mode 100644 old_vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php delete mode 100644 old_vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php delete mode 100644 old_vendor/mikey179/vfsstream/.github/workflows/runTests.yml delete mode 100644 old_vendor/mikey179/vfsstream/CHANGELOG.md delete mode 100644 old_vendor/mikey179/vfsstream/LICENSE delete mode 100644 old_vendor/mikey179/vfsstream/README.md delete mode 100644 old_vendor/mikey179/vfsstream/composer.json delete mode 100644 old_vendor/mikey179/vfsstream/phpunit.xml.dist delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/DotDirectory.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/Quota.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/FileContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamAbstractContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainer.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContent.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamException.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamFile.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php delete mode 100644 old_vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/bootstrap.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/patches/php8-return-types.diff delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/DirectoryIterationTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/FilenameTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/Issue104TestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/PermissionsTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/QuotaTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/UnlinkTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/content/LargeFileContentTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/content/StringBasedFileContentTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/proxy/vfsStreamWrapperRecordingProxy.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamAbstractContentTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamBlockTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamContainerIteratorTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryIssue134TestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryIssue18TestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamDirectoryTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamExLockTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamFileTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamGlobTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamResolveIncludePathTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamUmaskTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperAlreadyRegisteredTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperBaseTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirSeparatorTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperDirTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTimesTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFlockTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperLargeFileTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperSetOptionTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperStreamSelectTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperUnregisterTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamWrapperWithoutRootTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/vfsStreamZipTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitorTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitorTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitorTestCase.php delete mode 100644 old_vendor/mikey179/vfsstream/src/test/phpt/bug71287.phpt delete mode 100644 old_vendor/mikey179/vfsstream/src/test/resources/filesystemcopy/emptyFolder/.gitignore delete mode 100644 old_vendor/mikey179/vfsstream/src/test/resources/filesystemcopy/withSubfolders/aFile.txt delete mode 100644 old_vendor/mikey179/vfsstream/src/test/resources/filesystemcopy/withSubfolders/subfolder1/file1.txt delete mode 100644 old_vendor/mikey179/vfsstream/src/test/resources/filesystemcopy/withSubfolders/subfolder2/.gitignore delete mode 100644 old_vendor/myclabs/deep-copy/.github/FUNDING.yml delete mode 100644 old_vendor/myclabs/deep-copy/.github/workflows/ci.yaml delete mode 100644 old_vendor/myclabs/deep-copy/LICENSE delete mode 100644 old_vendor/myclabs/deep-copy/README.md delete mode 100644 old_vendor/myclabs/deep-copy/composer.json delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php delete mode 100644 old_vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php delete mode 100644 old_vendor/nexusphp/cs-config/.editorconfig delete mode 100644 old_vendor/nexusphp/cs-config/.gitignore delete mode 100644 old_vendor/nexusphp/cs-config/.php-cs-fixer.dist.php delete mode 100644 old_vendor/nexusphp/cs-config/CHANGELOG.md delete mode 100644 old_vendor/nexusphp/cs-config/LICENSE delete mode 100644 old_vendor/nexusphp/cs-config/README.md delete mode 100644 old_vendor/nexusphp/cs-config/composer.json delete mode 100644 old_vendor/nexusphp/cs-config/phpstan-baseline.neon.dist delete mode 100644 old_vendor/nexusphp/cs-config/phpstan.neon.dist delete mode 100644 old_vendor/nexusphp/cs-config/phpunit.xml.dist delete mode 100644 old_vendor/nexusphp/cs-config/src/Factory.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Fixer/AbstractCustomFixer.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Fixer/Comment/NoCodeSeparatorCommentFixer.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Fixer/Comment/SpaceAfterCommentStartFixer.php delete mode 100644 old_vendor/nexusphp/cs-config/src/FixerGenerator.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Ruleset/Nexus74.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Ruleset/Nexus80.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Ruleset/Nexus81.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Ruleset/RulesetInterface.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Test/AbstractCustomFixerTestCase.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php delete mode 100644 old_vendor/nexusphp/cs-config/src/Test/FixerProvider.php delete mode 100644 old_vendor/nikic/php-parser/LICENSE delete mode 100644 old_vendor/nikic/php-parser/README.md delete mode 100644 old_vendor/nikic/php-parser/bin/php-parse delete mode 100644 old_vendor/nikic/php-parser/composer.json delete mode 100644 old_vendor/nikic/php-parser/grammar/README.md delete mode 100644 old_vendor/nikic/php-parser/grammar/parser.template delete mode 100644 old_vendor/nikic/php-parser/grammar/php5.y delete mode 100644 old_vendor/nikic/php-parser/grammar/php7.y delete mode 100644 old_vendor/nikic/php-parser/grammar/phpyLang.php delete mode 100644 old_vendor/nikic/php-parser/grammar/rebuildParsers.php delete mode 100644 old_vendor/nikic/php-parser/grammar/tokens.template delete mode 100644 old_vendor/nikic/php-parser/grammar/tokens.y delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Comment.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Error.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NameContext.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Name.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Param.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Parser.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php delete mode 100644 old_vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php delete mode 100644 old_vendor/phar-io/manifest/CHANGELOG.md delete mode 100644 old_vendor/phar-io/manifest/LICENSE delete mode 100644 old_vendor/phar-io/manifest/README.md delete mode 100644 old_vendor/phar-io/manifest/composer.json delete mode 100644 old_vendor/phar-io/manifest/src/ManifestDocumentMapper.php delete mode 100644 old_vendor/phar-io/manifest/src/ManifestLoader.php delete mode 100644 old_vendor/phar-io/manifest/src/ManifestSerializer.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/Exception.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ManifestElementException.php delete mode 100644 old_vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Application.php delete mode 100644 old_vendor/phar-io/manifest/src/values/ApplicationName.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Author.php delete mode 100644 old_vendor/phar-io/manifest/src/values/AuthorCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php delete mode 100644 old_vendor/phar-io/manifest/src/values/BundledComponent.php delete mode 100644 old_vendor/phar-io/manifest/src/values/BundledComponentCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php delete mode 100644 old_vendor/phar-io/manifest/src/values/CopyrightInformation.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Email.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Extension.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Library.php delete mode 100644 old_vendor/phar-io/manifest/src/values/License.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Manifest.php delete mode 100644 old_vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php delete mode 100644 old_vendor/phar-io/manifest/src/values/PhpVersionRequirement.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Requirement.php delete mode 100644 old_vendor/phar-io/manifest/src/values/RequirementCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Type.php delete mode 100644 old_vendor/phar-io/manifest/src/values/Url.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/AuthorElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/AuthorElementCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/BundlesElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ComponentElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ComponentElementCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ContainsElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/CopyrightElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ElementCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ExtElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ExtElementCollection.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ExtensionElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/LicenseElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ManifestDocument.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/ManifestElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/PhpElement.php delete mode 100644 old_vendor/phar-io/manifest/src/xml/RequiresElement.php delete mode 100644 old_vendor/phar-io/version/CHANGELOG.md delete mode 100644 old_vendor/phar-io/version/LICENSE delete mode 100644 old_vendor/phar-io/version/README.md delete mode 100644 old_vendor/phar-io/version/composer.json delete mode 100644 old_vendor/phar-io/version/src/BuildMetaData.php delete mode 100644 old_vendor/phar-io/version/src/PreReleaseSuffix.php delete mode 100644 old_vendor/phar-io/version/src/Version.php delete mode 100644 old_vendor/phar-io/version/src/VersionConstraintParser.php delete mode 100644 old_vendor/phar-io/version/src/VersionConstraintValue.php delete mode 100644 old_vendor/phar-io/version/src/VersionNumber.php delete mode 100644 old_vendor/phar-io/version/src/constraints/AbstractVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/AndVersionConstraintGroup.php delete mode 100644 old_vendor/phar-io/version/src/constraints/AnyVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/ExactVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/OrVersionConstraintGroup.php delete mode 100644 old_vendor/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/constraints/VersionConstraint.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/Exception.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/InvalidVersionException.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/NoBuildMetaDataException.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php delete mode 100644 old_vendor/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php delete mode 100644 old_vendor/predis/predis/LICENSE delete mode 100644 old_vendor/predis/predis/README.md delete mode 100644 old_vendor/predis/predis/autoload.php delete mode 100644 old_vendor/predis/predis/composer.json delete mode 100644 old_vendor/predis/predis/docker/unstable_cluster/Dockerfile delete mode 100644 old_vendor/predis/predis/docker/unstable_cluster/create_cluster.sh delete mode 100644 old_vendor/predis/predis/docker/unstable_cluster/docker-compose.yml delete mode 100644 old_vendor/predis/predis/docker/unstable_cluster/redis.conf delete mode 100644 old_vendor/predis/predis/src/Autoloader.php delete mode 100644 old_vendor/predis/predis/src/Client.php delete mode 100644 old_vendor/predis/predis/src/ClientConfiguration.php delete mode 100644 old_vendor/predis/predis/src/ClientContextInterface.php delete mode 100644 old_vendor/predis/predis/src/ClientException.php delete mode 100644 old_vendor/predis/predis/src/ClientInterface.php delete mode 100644 old_vendor/predis/predis/src/Cluster/ClusterStrategy.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Distributor/HashRing.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Hash/CRC16.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php delete mode 100644 old_vendor/predis/predis/src/Cluster/Hash/PhpiredisCRC16.php delete mode 100644 old_vendor/predis/predis/src/Cluster/PredisStrategy.php delete mode 100644 old_vendor/predis/predis/src/Cluster/RedisStrategy.php delete mode 100644 old_vendor/predis/predis/src/Cluster/SlotMap.php delete mode 100644 old_vendor/predis/predis/src/Cluster/StrategyInterface.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/HashKey.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/Keyspace.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/ListKey.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/SetKey.php delete mode 100644 old_vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/ArrayableArgument.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/AbstractBy.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/ByBox.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/ByInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/ByRadius.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/FromInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/FromLonLat.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Geospatial/FromMember.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/AggregateArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/AlterArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/CommonArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/CreateArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/CursorArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/DropArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/ExplainArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/ProfileArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SearchArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SugAddArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SugGetArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Server/LimitInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Server/LimitOffsetCount.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/Server/To.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php delete mode 100644 old_vendor/predis/predis/src/Command/Command.php delete mode 100644 old_vendor/predis/predis/src/Command/CommandInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Factory.php delete mode 100644 old_vendor/predis/predis/src/Command/FactoryInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/PrefixableCommandInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php delete mode 100644 old_vendor/predis/predis/src/Command/Processor/ProcessorChain.php delete mode 100644 old_vendor/predis/predis/src/Command/Processor/ProcessorInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/RawCommand.php delete mode 100644 old_vendor/predis/predis/src/Command/RawFactory.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ACL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/APPEND.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/AUTH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BGREWRITEAOF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BGSAVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BITCOUNT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BITFIELD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BITOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BITPOS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BLMOVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BLMPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BLPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BRPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BRPOPLPUSH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BZMPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BZPOPMAX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BZPOPMIN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CLIENT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/COMMAND.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CONFIG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/COPY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/ACL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/AbstractContainer.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/ContainerFactory.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/ContainerInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/FunctionContainer.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DBSIZE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DECR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DECRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DISCARD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/DUMP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ECHO_.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EVALSHA.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EVALSHA_RO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EVAL_.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EVAL_RO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EXEC.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EXPIRE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EXPIREAT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/EXPIRETIME.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FAILOVER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FCALL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FCALL_RO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FLUSHALL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FLUSHDB.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/FUNCTIONS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEOADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEODIST.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEOHASH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEOPOS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEORADIUS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEOSEARCH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GEOSEARCHSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GETBIT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GETDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GETEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GETRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/GETSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HEXISTS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HGETALL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HINCRBYFLOAT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HKEYS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HMGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HMSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HRANDFIELD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HSCAN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HSETNX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HSTRLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/HVALS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/INCR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/INCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/INCRBYFLOAT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/INFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONCLEAR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONDEBUG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONFORGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONMERGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONMGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONMSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONRESP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Json/JSONTYPE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/KEYS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LASTSAVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LCS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LINDEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LINSERT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LMOVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LMPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LPUSH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LPUSHX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LREM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/LTRIM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MIGRATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MONITOR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MOVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MSET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MSETNX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/MULTI.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/OBJECT_.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PERSIST.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PEXPIRE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PEXPIREAT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PEXPIRETIME.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PFADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PFCOUNT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PFMERGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PING.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PSETEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PSUBSCRIBE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PTTL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PUBLISH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PUBSUB.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/QUIT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RANDOMKEY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RENAME.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RENAMENX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RESTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RPOPLPUSH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RPUSH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/RPUSHX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SAVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SCAN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SCARD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SCRIPT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SDIFF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SDIFFSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SELECT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SENTINEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SETBIT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SETEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SETNX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SETRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SHUTDOWN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SINTER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SINTERCARD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SINTERSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SISMEMBER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SLAVEOF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SLOWLOG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SMEMBERS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SMISMEMBER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SMOVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SORT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SORT_RO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SRANDMEMBER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SREM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SSCAN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/STRLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SUBSCRIBE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SUBSTR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SUNION.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/SUNIONSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTALIASADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTALIASDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTALTER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTCONFIG.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTCREATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTCURSOR.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTDICTADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTDICTDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTPROFILE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSEARCH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSUGADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSUGDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSUGGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSUGLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/Search/FTTAGVALS.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TIME.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TOUCH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TTL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TYPE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKINFO.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKLIST.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/UNSUBSCRIBE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/UNWATCH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/WAITAOF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/WATCH.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XDEL.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XLEN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XREVRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/XTRIM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZADD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZCARD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZCOUNT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZDIFF.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZDIFFSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZINCRBY.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZINTER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZINTERCARD.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZINTERSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZLEXCOUNT.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZMPOP.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZMSCORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZPOPMAX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZPOPMIN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANDMEMBER.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANGEBYLEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANGEBYSCORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANGESTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREM.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREMRANGEBYLEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREMRANGEBYRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREMRANGEBYSCORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREVRANGE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREVRANGEBYLEX.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREVRANGEBYSCORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZREVRANK.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZSCAN.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZSCORE.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZUNION.php delete mode 100644 old_vendor/predis/predis/src/Command/Redis/ZUNIONSTORE.php delete mode 100644 old_vendor/predis/predis/src/Command/RedisFactory.php delete mode 100644 old_vendor/predis/predis/src/Command/ScriptCommand.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DeleteStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/StrategyResolverInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/SubcommandStrategyInterface.php delete mode 100644 old_vendor/predis/predis/src/Command/Strategy/SubcommandStrategyResolver.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Aggregate.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BitByte.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/Capacity.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/Error.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/Expansion.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/Items.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/By/ByArgument.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/By/ByLexByScore.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/By/GeoBy.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Count.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/DB.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Expire/ExpireOptions.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/From/GeoFrom.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Get/Get.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Json/Indent.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Json/Newline.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Json/NxXxArgument.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Json/Space.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Keys.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/LeftRight.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Limit/Limit.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Limit/LimitObject.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/MinMaxModifier.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Replace.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Rev.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Sorting.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Storedist.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Timeout.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/To/ServerTo.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/Weights.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/With/WithCoord.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/With/WithDist.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/With/WithHash.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/With/WithScores.php delete mode 100644 old_vendor/predis/predis/src/Command/Traits/With/WithValues.php delete mode 100644 old_vendor/predis/predis/src/CommunicationException.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Aggregate.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/CRC16.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Cluster.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Commands.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Connections.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Exceptions.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Prefix.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Option/Replication.php delete mode 100644 old_vendor/predis/predis/src/Configuration/OptionInterface.php delete mode 100644 old_vendor/predis/predis/src/Configuration/Options.php delete mode 100644 old_vendor/predis/predis/src/Configuration/OptionsInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/AbstractConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/AggregateConnectionInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/Cluster/ClusterInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/Cluster/PredisCluster.php delete mode 100644 old_vendor/predis/predis/src/Connection/Cluster/RedisCluster.php delete mode 100644 old_vendor/predis/predis/src/Connection/CompositeConnectionInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/CompositeStreamConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/ConnectionException.php delete mode 100644 old_vendor/predis/predis/src/Connection/ConnectionInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/Factory.php delete mode 100644 old_vendor/predis/predis/src/Connection/FactoryInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/NodeConnectionInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/Parameters.php delete mode 100644 old_vendor/predis/predis/src/Connection/ParametersInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/RelayConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/RelayMethods.php delete mode 100644 old_vendor/predis/predis/src/Connection/Replication/MasterSlaveReplication.php delete mode 100644 old_vendor/predis/predis/src/Connection/Replication/ReplicationInterface.php delete mode 100644 old_vendor/predis/predis/src/Connection/Replication/SentinelReplication.php delete mode 100644 old_vendor/predis/predis/src/Connection/StreamConnection.php delete mode 100644 old_vendor/predis/predis/src/Connection/WebdisConnection.php delete mode 100644 old_vendor/predis/predis/src/Monitor/Consumer.php delete mode 100644 old_vendor/predis/predis/src/NotSupportedException.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/Atomic.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/FireAndForget.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/Pipeline.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/RelayAtomic.php delete mode 100644 old_vendor/predis/predis/src/Pipeline/RelayPipeline.php delete mode 100644 old_vendor/predis/predis/src/PredisException.php delete mode 100644 old_vendor/predis/predis/src/Protocol/ProtocolException.php delete mode 100644 old_vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php delete mode 100644 old_vendor/predis/predis/src/Protocol/RequestSerializerInterface.php delete mode 100644 old_vendor/predis/predis/src/Protocol/ResponseReaderInterface.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/RequestSerializer.php delete mode 100644 old_vendor/predis/predis/src/Protocol/Text/ResponseReader.php delete mode 100644 old_vendor/predis/predis/src/PubSub/AbstractConsumer.php delete mode 100644 old_vendor/predis/predis/src/PubSub/Consumer.php delete mode 100644 old_vendor/predis/predis/src/PubSub/DispatcherLoop.php delete mode 100644 old_vendor/predis/predis/src/PubSub/RelayConsumer.php delete mode 100644 old_vendor/predis/predis/src/Replication/MissingMasterException.php delete mode 100644 old_vendor/predis/predis/src/Replication/ReplicationStrategy.php delete mode 100644 old_vendor/predis/predis/src/Replication/RoleException.php delete mode 100644 old_vendor/predis/predis/src/Response/Error.php delete mode 100644 old_vendor/predis/predis/src/Response/ErrorInterface.php delete mode 100644 old_vendor/predis/predis/src/Response/Iterator/MultiBulk.php delete mode 100644 old_vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php delete mode 100644 old_vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php delete mode 100644 old_vendor/predis/predis/src/Response/ResponseInterface.php delete mode 100644 old_vendor/predis/predis/src/Response/ServerException.php delete mode 100644 old_vendor/predis/predis/src/Response/Status.php delete mode 100644 old_vendor/predis/predis/src/Session/Handler.php delete mode 100644 old_vendor/predis/predis/src/Transaction/AbortedMultiExecException.php delete mode 100644 old_vendor/predis/predis/src/Transaction/MultiExec.php delete mode 100644 old_vendor/predis/predis/src/Transaction/MultiExecState.php delete mode 100644 old_vendor/psr/cache/CHANGELOG.md delete mode 100644 old_vendor/psr/cache/LICENSE.txt delete mode 100644 old_vendor/psr/cache/README.md delete mode 100644 old_vendor/psr/cache/composer.json delete mode 100644 old_vendor/psr/cache/src/CacheException.php delete mode 100644 old_vendor/psr/cache/src/CacheItemInterface.php delete mode 100644 old_vendor/psr/cache/src/CacheItemPoolInterface.php delete mode 100644 old_vendor/psr/cache/src/InvalidArgumentException.php delete mode 100644 old_vendor/psr/container/.gitignore delete mode 100644 old_vendor/psr/container/LICENSE delete mode 100644 old_vendor/psr/container/README.md delete mode 100644 old_vendor/psr/container/composer.json delete mode 100644 old_vendor/psr/container/src/ContainerExceptionInterface.php delete mode 100644 old_vendor/psr/container/src/ContainerInterface.php delete mode 100644 old_vendor/psr/container/src/NotFoundExceptionInterface.php delete mode 100644 old_vendor/psr/event-dispatcher/.editorconfig delete mode 100644 old_vendor/psr/event-dispatcher/.gitignore delete mode 100644 old_vendor/psr/event-dispatcher/LICENSE delete mode 100644 old_vendor/psr/event-dispatcher/README.md delete mode 100644 old_vendor/psr/event-dispatcher/composer.json delete mode 100644 old_vendor/psr/event-dispatcher/src/EventDispatcherInterface.php delete mode 100644 old_vendor/psr/event-dispatcher/src/ListenerProviderInterface.php delete mode 100644 old_vendor/psr/event-dispatcher/src/StoppableEventInterface.php delete mode 100644 old_vendor/psr/log/LICENSE delete mode 100644 old_vendor/psr/log/Psr/Log/AbstractLogger.php delete mode 100644 old_vendor/psr/log/Psr/Log/InvalidArgumentException.php delete mode 100644 old_vendor/psr/log/Psr/Log/LogLevel.php delete mode 100644 old_vendor/psr/log/Psr/Log/LoggerAwareInterface.php delete mode 100644 old_vendor/psr/log/Psr/Log/LoggerAwareTrait.php delete mode 100644 old_vendor/psr/log/Psr/Log/LoggerInterface.php delete mode 100644 old_vendor/psr/log/Psr/Log/LoggerTrait.php delete mode 100644 old_vendor/psr/log/Psr/Log/NullLogger.php delete mode 100644 old_vendor/psr/log/Psr/Log/Test/DummyTest.php delete mode 100644 old_vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php delete mode 100644 old_vendor/psr/log/Psr/Log/Test/TestLogger.php delete mode 100644 old_vendor/psr/log/README.md delete mode 100644 old_vendor/psr/log/composer.json delete mode 100644 old_vendor/sebastian/cli-parser/ChangeLog.md delete mode 100644 old_vendor/sebastian/cli-parser/LICENSE delete mode 100644 old_vendor/sebastian/cli-parser/README.md delete mode 100644 old_vendor/sebastian/cli-parser/composer.json delete mode 100644 old_vendor/sebastian/cli-parser/infection.json delete mode 100644 old_vendor/sebastian/cli-parser/src/Parser.php delete mode 100644 old_vendor/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php delete mode 100644 old_vendor/sebastian/cli-parser/src/exceptions/Exception.php delete mode 100644 old_vendor/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php delete mode 100644 old_vendor/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php delete mode 100644 old_vendor/sebastian/cli-parser/src/exceptions/UnknownOptionException.php delete mode 100644 old_vendor/sebastian/code-unit-reverse-lookup/ChangeLog.md delete mode 100644 old_vendor/sebastian/code-unit-reverse-lookup/LICENSE delete mode 100644 old_vendor/sebastian/code-unit-reverse-lookup/README.md delete mode 100644 old_vendor/sebastian/code-unit-reverse-lookup/composer.json delete mode 100644 old_vendor/sebastian/code-unit-reverse-lookup/src/Wizard.php delete mode 100644 old_vendor/sebastian/code-unit/.psalm/baseline.xml delete mode 100644 old_vendor/sebastian/code-unit/.psalm/config.xml delete mode 100644 old_vendor/sebastian/code-unit/ChangeLog.md delete mode 100644 old_vendor/sebastian/code-unit/LICENSE delete mode 100644 old_vendor/sebastian/code-unit/README.md delete mode 100644 old_vendor/sebastian/code-unit/composer.json delete mode 100644 old_vendor/sebastian/code-unit/src/ClassMethodUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/ClassUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/CodeUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/CodeUnitCollection.php delete mode 100644 old_vendor/sebastian/code-unit/src/CodeUnitCollectionIterator.php delete mode 100644 old_vendor/sebastian/code-unit/src/FunctionUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/InterfaceMethodUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/InterfaceUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/Mapper.php delete mode 100644 old_vendor/sebastian/code-unit/src/TraitMethodUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/TraitUnit.php delete mode 100644 old_vendor/sebastian/code-unit/src/exceptions/Exception.php delete mode 100644 old_vendor/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php delete mode 100644 old_vendor/sebastian/code-unit/src/exceptions/NoTraitException.php delete mode 100644 old_vendor/sebastian/code-unit/src/exceptions/ReflectionException.php delete mode 100644 old_vendor/sebastian/comparator/ChangeLog.md delete mode 100644 old_vendor/sebastian/comparator/LICENSE delete mode 100644 old_vendor/sebastian/comparator/README.md delete mode 100644 old_vendor/sebastian/comparator/composer.json delete mode 100644 old_vendor/sebastian/comparator/src/ArrayComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/Comparator.php delete mode 100644 old_vendor/sebastian/comparator/src/ComparisonFailure.php delete mode 100644 old_vendor/sebastian/comparator/src/DOMNodeComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/DateTimeComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/DoubleComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/ExceptionComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/Factory.php delete mode 100644 old_vendor/sebastian/comparator/src/MockObjectComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/NumericComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/ObjectComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/ResourceComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/ScalarComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/SplObjectStorageComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/TypeComparator.php delete mode 100644 old_vendor/sebastian/comparator/src/exceptions/Exception.php delete mode 100644 old_vendor/sebastian/comparator/src/exceptions/RuntimeException.php delete mode 100644 old_vendor/sebastian/complexity/.psalm/baseline.xml delete mode 100644 old_vendor/sebastian/complexity/.psalm/config.xml delete mode 100644 old_vendor/sebastian/complexity/ChangeLog.md delete mode 100644 old_vendor/sebastian/complexity/LICENSE delete mode 100644 old_vendor/sebastian/complexity/README.md delete mode 100644 old_vendor/sebastian/complexity/composer.json delete mode 100644 old_vendor/sebastian/complexity/src/Calculator.php delete mode 100644 old_vendor/sebastian/complexity/src/Complexity/Complexity.php delete mode 100644 old_vendor/sebastian/complexity/src/Complexity/ComplexityCollection.php delete mode 100644 old_vendor/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php delete mode 100644 old_vendor/sebastian/complexity/src/Exception/Exception.php delete mode 100644 old_vendor/sebastian/complexity/src/Exception/RuntimeException.php delete mode 100644 old_vendor/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php delete mode 100644 old_vendor/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php delete mode 100644 old_vendor/sebastian/diff/ChangeLog.md delete mode 100644 old_vendor/sebastian/diff/LICENSE delete mode 100644 old_vendor/sebastian/diff/README.md delete mode 100644 old_vendor/sebastian/diff/composer.json delete mode 100644 old_vendor/sebastian/diff/src/Chunk.php delete mode 100644 old_vendor/sebastian/diff/src/Diff.php delete mode 100644 old_vendor/sebastian/diff/src/Differ.php delete mode 100644 old_vendor/sebastian/diff/src/Exception/ConfigurationException.php delete mode 100644 old_vendor/sebastian/diff/src/Exception/Exception.php delete mode 100644 old_vendor/sebastian/diff/src/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/sebastian/diff/src/Line.php delete mode 100644 old_vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php delete mode 100644 old_vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php delete mode 100644 old_vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php delete mode 100644 old_vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php delete mode 100644 old_vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php delete mode 100644 old_vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php delete mode 100644 old_vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php delete mode 100644 old_vendor/sebastian/diff/src/Parser.php delete mode 100644 old_vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php delete mode 100644 old_vendor/sebastian/environment/ChangeLog.md delete mode 100644 old_vendor/sebastian/environment/LICENSE delete mode 100644 old_vendor/sebastian/environment/README.md delete mode 100644 old_vendor/sebastian/environment/composer.json delete mode 100644 old_vendor/sebastian/environment/src/Console.php delete mode 100644 old_vendor/sebastian/environment/src/OperatingSystem.php delete mode 100644 old_vendor/sebastian/environment/src/Runtime.php delete mode 100644 old_vendor/sebastian/exporter/ChangeLog.md delete mode 100644 old_vendor/sebastian/exporter/LICENSE delete mode 100644 old_vendor/sebastian/exporter/README.md delete mode 100644 old_vendor/sebastian/exporter/composer.json delete mode 100644 old_vendor/sebastian/exporter/src/Exporter.php delete mode 100644 old_vendor/sebastian/global-state/ChangeLog.md delete mode 100644 old_vendor/sebastian/global-state/LICENSE delete mode 100644 old_vendor/sebastian/global-state/README.md delete mode 100644 old_vendor/sebastian/global-state/composer.json delete mode 100644 old_vendor/sebastian/global-state/src/CodeExporter.php delete mode 100644 old_vendor/sebastian/global-state/src/ExcludeList.php delete mode 100644 old_vendor/sebastian/global-state/src/Restorer.php delete mode 100644 old_vendor/sebastian/global-state/src/Snapshot.php delete mode 100644 old_vendor/sebastian/global-state/src/exceptions/Exception.php delete mode 100644 old_vendor/sebastian/global-state/src/exceptions/RuntimeException.php delete mode 100644 old_vendor/sebastian/lines-of-code/.psalm/baseline.xml delete mode 100644 old_vendor/sebastian/lines-of-code/.psalm/config.xml delete mode 100644 old_vendor/sebastian/lines-of-code/ChangeLog.md delete mode 100644 old_vendor/sebastian/lines-of-code/LICENSE delete mode 100644 old_vendor/sebastian/lines-of-code/README.md delete mode 100644 old_vendor/sebastian/lines-of-code/composer.json delete mode 100644 old_vendor/sebastian/lines-of-code/src/Counter.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/Exception/Exception.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/Exception/NegativeValueException.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/Exception/RuntimeException.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/LineCountingVisitor.php delete mode 100644 old_vendor/sebastian/lines-of-code/src/LinesOfCode.php delete mode 100644 old_vendor/sebastian/object-enumerator/.psalm/baseline.xml delete mode 100644 old_vendor/sebastian/object-enumerator/.psalm/config.xml delete mode 100644 old_vendor/sebastian/object-enumerator/ChangeLog.md delete mode 100644 old_vendor/sebastian/object-enumerator/LICENSE delete mode 100644 old_vendor/sebastian/object-enumerator/README.md delete mode 100644 old_vendor/sebastian/object-enumerator/composer.json delete mode 100644 old_vendor/sebastian/object-enumerator/src/Enumerator.php delete mode 100644 old_vendor/sebastian/object-enumerator/src/Exception.php delete mode 100644 old_vendor/sebastian/object-enumerator/src/InvalidArgumentException.php delete mode 100644 old_vendor/sebastian/object-reflector/.psalm/baseline.xml delete mode 100644 old_vendor/sebastian/object-reflector/.psalm/config.xml delete mode 100644 old_vendor/sebastian/object-reflector/ChangeLog.md delete mode 100644 old_vendor/sebastian/object-reflector/LICENSE delete mode 100644 old_vendor/sebastian/object-reflector/README.md delete mode 100644 old_vendor/sebastian/object-reflector/composer.json delete mode 100644 old_vendor/sebastian/object-reflector/src/Exception.php delete mode 100644 old_vendor/sebastian/object-reflector/src/InvalidArgumentException.php delete mode 100644 old_vendor/sebastian/object-reflector/src/ObjectReflector.php delete mode 100644 old_vendor/sebastian/recursion-context/ChangeLog.md delete mode 100644 old_vendor/sebastian/recursion-context/LICENSE delete mode 100644 old_vendor/sebastian/recursion-context/README.md delete mode 100644 old_vendor/sebastian/recursion-context/composer.json delete mode 100644 old_vendor/sebastian/recursion-context/src/Context.php delete mode 100644 old_vendor/sebastian/recursion-context/src/Exception.php delete mode 100644 old_vendor/sebastian/recursion-context/src/InvalidArgumentException.php delete mode 100644 old_vendor/sebastian/resource-operations/.gitattributes delete mode 100644 old_vendor/sebastian/resource-operations/.gitignore delete mode 100644 old_vendor/sebastian/resource-operations/ChangeLog.md delete mode 100644 old_vendor/sebastian/resource-operations/LICENSE delete mode 100644 old_vendor/sebastian/resource-operations/README.md delete mode 100644 old_vendor/sebastian/resource-operations/build/generate.php delete mode 100644 old_vendor/sebastian/resource-operations/composer.json delete mode 100644 old_vendor/sebastian/resource-operations/src/ResourceOperations.php delete mode 100644 old_vendor/sebastian/type/ChangeLog.md delete mode 100644 old_vendor/sebastian/type/LICENSE delete mode 100644 old_vendor/sebastian/type/README.md delete mode 100644 old_vendor/sebastian/type/composer.json delete mode 100644 old_vendor/sebastian/type/src/Parameter.php delete mode 100644 old_vendor/sebastian/type/src/ReflectionMapper.php delete mode 100644 old_vendor/sebastian/type/src/TypeName.php delete mode 100644 old_vendor/sebastian/type/src/exception/Exception.php delete mode 100644 old_vendor/sebastian/type/src/exception/RuntimeException.php delete mode 100644 old_vendor/sebastian/type/src/type/CallableType.php delete mode 100644 old_vendor/sebastian/type/src/type/FalseType.php delete mode 100644 old_vendor/sebastian/type/src/type/GenericObjectType.php delete mode 100644 old_vendor/sebastian/type/src/type/IntersectionType.php delete mode 100644 old_vendor/sebastian/type/src/type/IterableType.php delete mode 100644 old_vendor/sebastian/type/src/type/MixedType.php delete mode 100644 old_vendor/sebastian/type/src/type/NeverType.php delete mode 100644 old_vendor/sebastian/type/src/type/NullType.php delete mode 100644 old_vendor/sebastian/type/src/type/ObjectType.php delete mode 100644 old_vendor/sebastian/type/src/type/SimpleType.php delete mode 100644 old_vendor/sebastian/type/src/type/StaticType.php delete mode 100644 old_vendor/sebastian/type/src/type/TrueType.php delete mode 100644 old_vendor/sebastian/type/src/type/Type.php delete mode 100644 old_vendor/sebastian/type/src/type/UnionType.php delete mode 100644 old_vendor/sebastian/type/src/type/UnknownType.php delete mode 100644 old_vendor/sebastian/type/src/type/VoidType.php delete mode 100644 old_vendor/sebastian/version/.gitattributes delete mode 100644 old_vendor/sebastian/version/.gitignore delete mode 100644 old_vendor/sebastian/version/ChangeLog.md delete mode 100644 old_vendor/sebastian/version/LICENSE delete mode 100644 old_vendor/sebastian/version/README.md delete mode 100644 old_vendor/sebastian/version/composer.json delete mode 100644 old_vendor/sebastian/version/src/Version.php delete mode 100644 old_vendor/symfony/console/Application.php delete mode 100644 old_vendor/symfony/console/Attribute/AsCommand.php delete mode 100644 old_vendor/symfony/console/CHANGELOG.md delete mode 100644 old_vendor/symfony/console/CI/GithubActionReporter.php delete mode 100644 old_vendor/symfony/console/Color.php delete mode 100644 old_vendor/symfony/console/Command/Command.php delete mode 100644 old_vendor/symfony/console/Command/CompleteCommand.php delete mode 100644 old_vendor/symfony/console/Command/DumpCompletionCommand.php delete mode 100644 old_vendor/symfony/console/Command/HelpCommand.php delete mode 100644 old_vendor/symfony/console/Command/LazyCommand.php delete mode 100644 old_vendor/symfony/console/Command/ListCommand.php delete mode 100644 old_vendor/symfony/console/Command/LockableTrait.php delete mode 100644 old_vendor/symfony/console/Command/SignalableCommandInterface.php delete mode 100644 old_vendor/symfony/console/CommandLoader/CommandLoaderInterface.php delete mode 100644 old_vendor/symfony/console/CommandLoader/ContainerCommandLoader.php delete mode 100644 old_vendor/symfony/console/CommandLoader/FactoryCommandLoader.php delete mode 100644 old_vendor/symfony/console/Completion/CompletionInput.php delete mode 100644 old_vendor/symfony/console/Completion/CompletionSuggestions.php delete mode 100644 old_vendor/symfony/console/Completion/Output/BashCompletionOutput.php delete mode 100644 old_vendor/symfony/console/Completion/Output/CompletionOutputInterface.php delete mode 100644 old_vendor/symfony/console/Completion/Output/FishCompletionOutput.php delete mode 100644 old_vendor/symfony/console/Completion/Output/ZshCompletionOutput.php delete mode 100644 old_vendor/symfony/console/Completion/Suggestion.php delete mode 100644 old_vendor/symfony/console/ConsoleEvents.php delete mode 100644 old_vendor/symfony/console/Cursor.php delete mode 100644 old_vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php delete mode 100644 old_vendor/symfony/console/Descriptor/ApplicationDescription.php delete mode 100644 old_vendor/symfony/console/Descriptor/Descriptor.php delete mode 100644 old_vendor/symfony/console/Descriptor/DescriptorInterface.php delete mode 100644 old_vendor/symfony/console/Descriptor/JsonDescriptor.php delete mode 100644 old_vendor/symfony/console/Descriptor/MarkdownDescriptor.php delete mode 100644 old_vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php delete mode 100644 old_vendor/symfony/console/Descriptor/TextDescriptor.php delete mode 100644 old_vendor/symfony/console/Descriptor/XmlDescriptor.php delete mode 100644 old_vendor/symfony/console/Event/ConsoleCommandEvent.php delete mode 100644 old_vendor/symfony/console/Event/ConsoleErrorEvent.php delete mode 100644 old_vendor/symfony/console/Event/ConsoleEvent.php delete mode 100644 old_vendor/symfony/console/Event/ConsoleSignalEvent.php delete mode 100644 old_vendor/symfony/console/Event/ConsoleTerminateEvent.php delete mode 100644 old_vendor/symfony/console/EventListener/ErrorListener.php delete mode 100644 old_vendor/symfony/console/Exception/CommandNotFoundException.php delete mode 100644 old_vendor/symfony/console/Exception/ExceptionInterface.php delete mode 100644 old_vendor/symfony/console/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/symfony/console/Exception/InvalidOptionException.php delete mode 100644 old_vendor/symfony/console/Exception/LogicException.php delete mode 100644 old_vendor/symfony/console/Exception/MissingInputException.php delete mode 100644 old_vendor/symfony/console/Exception/NamespaceNotFoundException.php delete mode 100644 old_vendor/symfony/console/Exception/RuntimeException.php delete mode 100644 old_vendor/symfony/console/Formatter/NullOutputFormatter.php delete mode 100644 old_vendor/symfony/console/Formatter/NullOutputFormatterStyle.php delete mode 100644 old_vendor/symfony/console/Formatter/OutputFormatter.php delete mode 100644 old_vendor/symfony/console/Formatter/OutputFormatterInterface.php delete mode 100644 old_vendor/symfony/console/Formatter/OutputFormatterStyle.php delete mode 100644 old_vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php delete mode 100644 old_vendor/symfony/console/Formatter/OutputFormatterStyleStack.php delete mode 100644 old_vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php delete mode 100644 old_vendor/symfony/console/Helper/DebugFormatterHelper.php delete mode 100644 old_vendor/symfony/console/Helper/DescriptorHelper.php delete mode 100644 old_vendor/symfony/console/Helper/Dumper.php delete mode 100644 old_vendor/symfony/console/Helper/FormatterHelper.php delete mode 100644 old_vendor/symfony/console/Helper/Helper.php delete mode 100644 old_vendor/symfony/console/Helper/HelperInterface.php delete mode 100644 old_vendor/symfony/console/Helper/HelperSet.php delete mode 100644 old_vendor/symfony/console/Helper/InputAwareHelper.php delete mode 100644 old_vendor/symfony/console/Helper/OutputWrapper.php delete mode 100644 old_vendor/symfony/console/Helper/ProcessHelper.php delete mode 100644 old_vendor/symfony/console/Helper/ProgressBar.php delete mode 100644 old_vendor/symfony/console/Helper/ProgressIndicator.php delete mode 100644 old_vendor/symfony/console/Helper/QuestionHelper.php delete mode 100644 old_vendor/symfony/console/Helper/SymfonyQuestionHelper.php delete mode 100644 old_vendor/symfony/console/Helper/Table.php delete mode 100644 old_vendor/symfony/console/Helper/TableCell.php delete mode 100644 old_vendor/symfony/console/Helper/TableCellStyle.php delete mode 100644 old_vendor/symfony/console/Helper/TableRows.php delete mode 100644 old_vendor/symfony/console/Helper/TableSeparator.php delete mode 100644 old_vendor/symfony/console/Helper/TableStyle.php delete mode 100644 old_vendor/symfony/console/Input/ArgvInput.php delete mode 100644 old_vendor/symfony/console/Input/ArrayInput.php delete mode 100644 old_vendor/symfony/console/Input/Input.php delete mode 100644 old_vendor/symfony/console/Input/InputArgument.php delete mode 100644 old_vendor/symfony/console/Input/InputAwareInterface.php delete mode 100644 old_vendor/symfony/console/Input/InputDefinition.php delete mode 100644 old_vendor/symfony/console/Input/InputInterface.php delete mode 100644 old_vendor/symfony/console/Input/InputOption.php delete mode 100644 old_vendor/symfony/console/Input/StreamableInputInterface.php delete mode 100644 old_vendor/symfony/console/Input/StringInput.php delete mode 100644 old_vendor/symfony/console/LICENSE delete mode 100644 old_vendor/symfony/console/Logger/ConsoleLogger.php delete mode 100644 old_vendor/symfony/console/Output/AnsiColorMode.php delete mode 100644 old_vendor/symfony/console/Output/BufferedOutput.php delete mode 100644 old_vendor/symfony/console/Output/ConsoleOutput.php delete mode 100644 old_vendor/symfony/console/Output/ConsoleOutputInterface.php delete mode 100644 old_vendor/symfony/console/Output/ConsoleSectionOutput.php delete mode 100644 old_vendor/symfony/console/Output/NullOutput.php delete mode 100644 old_vendor/symfony/console/Output/Output.php delete mode 100644 old_vendor/symfony/console/Output/OutputInterface.php delete mode 100644 old_vendor/symfony/console/Output/StreamOutput.php delete mode 100644 old_vendor/symfony/console/Output/TrimmedBufferOutput.php delete mode 100644 old_vendor/symfony/console/Question/ChoiceQuestion.php delete mode 100644 old_vendor/symfony/console/Question/ConfirmationQuestion.php delete mode 100644 old_vendor/symfony/console/Question/Question.php delete mode 100644 old_vendor/symfony/console/README.md delete mode 100644 old_vendor/symfony/console/Resources/completion.bash delete mode 100644 old_vendor/symfony/console/Resources/completion.fish delete mode 100644 old_vendor/symfony/console/Resources/completion.zsh delete mode 100644 old_vendor/symfony/console/SignalRegistry/SignalRegistry.php delete mode 100644 old_vendor/symfony/console/SingleCommandApplication.php delete mode 100644 old_vendor/symfony/console/Style/OutputStyle.php delete mode 100644 old_vendor/symfony/console/Style/StyleInterface.php delete mode 100644 old_vendor/symfony/console/Style/SymfonyStyle.php delete mode 100644 old_vendor/symfony/console/Terminal.php delete mode 100644 old_vendor/symfony/console/Tester/ApplicationTester.php delete mode 100644 old_vendor/symfony/console/Tester/CommandCompletionTester.php delete mode 100644 old_vendor/symfony/console/Tester/CommandTester.php delete mode 100644 old_vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php delete mode 100644 old_vendor/symfony/console/Tester/TesterTrait.php delete mode 100644 old_vendor/symfony/console/composer.json delete mode 100644 old_vendor/symfony/deprecation-contracts/CHANGELOG.md delete mode 100644 old_vendor/symfony/deprecation-contracts/LICENSE delete mode 100644 old_vendor/symfony/deprecation-contracts/README.md delete mode 100644 old_vendor/symfony/deprecation-contracts/composer.json delete mode 100644 old_vendor/symfony/deprecation-contracts/function.php delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/CHANGELOG.md delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/Event.php delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/LICENSE delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/README.md delete mode 100644 old_vendor/symfony/event-dispatcher-contracts/composer.json delete mode 100644 old_vendor/symfony/event-dispatcher/Attribute/AsEventListener.php delete mode 100644 old_vendor/symfony/event-dispatcher/CHANGELOG.md delete mode 100644 old_vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php delete mode 100644 old_vendor/symfony/event-dispatcher/Debug/WrappedListener.php delete mode 100644 old_vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php delete mode 100644 old_vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php delete mode 100644 old_vendor/symfony/event-dispatcher/EventDispatcher.php delete mode 100644 old_vendor/symfony/event-dispatcher/EventDispatcherInterface.php delete mode 100644 old_vendor/symfony/event-dispatcher/EventSubscriberInterface.php delete mode 100644 old_vendor/symfony/event-dispatcher/GenericEvent.php delete mode 100644 old_vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php delete mode 100644 old_vendor/symfony/event-dispatcher/LICENSE delete mode 100644 old_vendor/symfony/event-dispatcher/README.md delete mode 100644 old_vendor/symfony/event-dispatcher/composer.json delete mode 100644 old_vendor/symfony/filesystem/CHANGELOG.md delete mode 100644 old_vendor/symfony/filesystem/Exception/ExceptionInterface.php delete mode 100644 old_vendor/symfony/filesystem/Exception/FileNotFoundException.php delete mode 100644 old_vendor/symfony/filesystem/Exception/IOException.php delete mode 100644 old_vendor/symfony/filesystem/Exception/IOExceptionInterface.php delete mode 100644 old_vendor/symfony/filesystem/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/symfony/filesystem/Exception/RuntimeException.php delete mode 100644 old_vendor/symfony/filesystem/Filesystem.php delete mode 100644 old_vendor/symfony/filesystem/LICENSE delete mode 100644 old_vendor/symfony/filesystem/Path.php delete mode 100644 old_vendor/symfony/filesystem/README.md delete mode 100644 old_vendor/symfony/filesystem/composer.json delete mode 100644 old_vendor/symfony/finder/CHANGELOG.md delete mode 100644 old_vendor/symfony/finder/Comparator/Comparator.php delete mode 100644 old_vendor/symfony/finder/Comparator/DateComparator.php delete mode 100644 old_vendor/symfony/finder/Comparator/NumberComparator.php delete mode 100644 old_vendor/symfony/finder/Exception/AccessDeniedException.php delete mode 100644 old_vendor/symfony/finder/Exception/DirectoryNotFoundException.php delete mode 100644 old_vendor/symfony/finder/Finder.php delete mode 100644 old_vendor/symfony/finder/Gitignore.php delete mode 100644 old_vendor/symfony/finder/Glob.php delete mode 100644 old_vendor/symfony/finder/Iterator/CustomFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/DateRangeFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/FileTypeFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/FilecontentFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/FilenameFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/LazyIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/PathFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/SortableIterator.php delete mode 100644 old_vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php delete mode 100644 old_vendor/symfony/finder/LICENSE delete mode 100644 old_vendor/symfony/finder/README.md delete mode 100644 old_vendor/symfony/finder/SplFileInfo.php delete mode 100644 old_vendor/symfony/finder/composer.json delete mode 100644 old_vendor/symfony/options-resolver/CHANGELOG.md delete mode 100644 old_vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/AccessException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/ExceptionInterface.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/InvalidOptionsException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/MissingOptionsException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/NoConfigurationException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/NoSuchOptionException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/OptionDefinitionException.php delete mode 100644 old_vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php delete mode 100644 old_vendor/symfony/options-resolver/LICENSE delete mode 100644 old_vendor/symfony/options-resolver/OptionConfigurator.php delete mode 100644 old_vendor/symfony/options-resolver/Options.php delete mode 100644 old_vendor/symfony/options-resolver/OptionsResolver.php delete mode 100644 old_vendor/symfony/options-resolver/README.md delete mode 100644 old_vendor/symfony/options-resolver/composer.json delete mode 100644 old_vendor/symfony/polyfill-ctype/Ctype.php delete mode 100644 old_vendor/symfony/polyfill-ctype/LICENSE delete mode 100644 old_vendor/symfony/polyfill-ctype/README.md delete mode 100644 old_vendor/symfony/polyfill-ctype/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-ctype/bootstrap80.php delete mode 100644 old_vendor/symfony/polyfill-ctype/composer.json delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/Grapheme.php delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/LICENSE delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/README.md delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/bootstrap80.php delete mode 100644 old_vendor/symfony/polyfill-intl-grapheme/composer.json delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/LICENSE delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Normalizer.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/README.md delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/bootstrap80.php delete mode 100644 old_vendor/symfony/polyfill-intl-normalizer/composer.json delete mode 100644 old_vendor/symfony/polyfill-mbstring/LICENSE delete mode 100644 old_vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/README.md delete mode 100644 old_vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/bootstrap80.php delete mode 100644 old_vendor/symfony/polyfill-mbstring/composer.json delete mode 100644 old_vendor/symfony/polyfill-php80/LICENSE delete mode 100644 old_vendor/symfony/polyfill-php80/Php80.php delete mode 100644 old_vendor/symfony/polyfill-php80/PhpToken.php delete mode 100644 old_vendor/symfony/polyfill-php80/README.md delete mode 100644 old_vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php delete mode 100644 old_vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php delete mode 100644 old_vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php delete mode 100644 old_vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php delete mode 100644 old_vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php delete mode 100644 old_vendor/symfony/polyfill-php80/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-php80/composer.json delete mode 100644 old_vendor/symfony/polyfill-php81/LICENSE delete mode 100644 old_vendor/symfony/polyfill-php81/Php81.php delete mode 100644 old_vendor/symfony/polyfill-php81/README.md delete mode 100644 old_vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php delete mode 100644 old_vendor/symfony/polyfill-php81/bootstrap.php delete mode 100644 old_vendor/symfony/polyfill-php81/composer.json delete mode 100644 old_vendor/symfony/process/CHANGELOG.md delete mode 100644 old_vendor/symfony/process/Exception/ExceptionInterface.php delete mode 100644 old_vendor/symfony/process/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/symfony/process/Exception/LogicException.php delete mode 100644 old_vendor/symfony/process/Exception/ProcessFailedException.php delete mode 100644 old_vendor/symfony/process/Exception/ProcessSignaledException.php delete mode 100644 old_vendor/symfony/process/Exception/ProcessTimedOutException.php delete mode 100644 old_vendor/symfony/process/Exception/RuntimeException.php delete mode 100644 old_vendor/symfony/process/ExecutableFinder.php delete mode 100644 old_vendor/symfony/process/InputStream.php delete mode 100644 old_vendor/symfony/process/LICENSE delete mode 100644 old_vendor/symfony/process/PhpExecutableFinder.php delete mode 100644 old_vendor/symfony/process/PhpProcess.php delete mode 100644 old_vendor/symfony/process/Pipes/AbstractPipes.php delete mode 100644 old_vendor/symfony/process/Pipes/PipesInterface.php delete mode 100644 old_vendor/symfony/process/Pipes/UnixPipes.php delete mode 100644 old_vendor/symfony/process/Pipes/WindowsPipes.php delete mode 100644 old_vendor/symfony/process/Process.php delete mode 100644 old_vendor/symfony/process/ProcessUtils.php delete mode 100644 old_vendor/symfony/process/README.md delete mode 100644 old_vendor/symfony/process/composer.json delete mode 100644 old_vendor/symfony/service-contracts/Attribute/Required.php delete mode 100644 old_vendor/symfony/service-contracts/Attribute/SubscribedService.php delete mode 100644 old_vendor/symfony/service-contracts/CHANGELOG.md delete mode 100644 old_vendor/symfony/service-contracts/LICENSE delete mode 100644 old_vendor/symfony/service-contracts/README.md delete mode 100644 old_vendor/symfony/service-contracts/ResetInterface.php delete mode 100644 old_vendor/symfony/service-contracts/ServiceLocatorTrait.php delete mode 100644 old_vendor/symfony/service-contracts/ServiceProviderInterface.php delete mode 100644 old_vendor/symfony/service-contracts/ServiceSubscriberInterface.php delete mode 100644 old_vendor/symfony/service-contracts/ServiceSubscriberTrait.php delete mode 100644 old_vendor/symfony/service-contracts/Test/ServiceLocatorTest.php delete mode 100644 old_vendor/symfony/service-contracts/Test/ServiceLocatorTestCase.php delete mode 100644 old_vendor/symfony/service-contracts/composer.json delete mode 100644 old_vendor/symfony/stopwatch/CHANGELOG.md delete mode 100644 old_vendor/symfony/stopwatch/LICENSE delete mode 100644 old_vendor/symfony/stopwatch/README.md delete mode 100644 old_vendor/symfony/stopwatch/Section.php delete mode 100644 old_vendor/symfony/stopwatch/Stopwatch.php delete mode 100644 old_vendor/symfony/stopwatch/StopwatchEvent.php delete mode 100644 old_vendor/symfony/stopwatch/StopwatchPeriod.php delete mode 100644 old_vendor/symfony/stopwatch/composer.json delete mode 100644 old_vendor/symfony/string/AbstractString.php delete mode 100644 old_vendor/symfony/string/AbstractUnicodeString.php delete mode 100644 old_vendor/symfony/string/ByteString.php delete mode 100644 old_vendor/symfony/string/CHANGELOG.md delete mode 100644 old_vendor/symfony/string/CodePointString.php delete mode 100644 old_vendor/symfony/string/Exception/ExceptionInterface.php delete mode 100644 old_vendor/symfony/string/Exception/InvalidArgumentException.php delete mode 100644 old_vendor/symfony/string/Exception/RuntimeException.php delete mode 100644 old_vendor/symfony/string/Inflector/EnglishInflector.php delete mode 100644 old_vendor/symfony/string/Inflector/FrenchInflector.php delete mode 100644 old_vendor/symfony/string/Inflector/InflectorInterface.php delete mode 100644 old_vendor/symfony/string/LICENSE delete mode 100644 old_vendor/symfony/string/LazyString.php delete mode 100644 old_vendor/symfony/string/README.md delete mode 100644 old_vendor/symfony/string/Resources/data/wcswidth_table_wide.php delete mode 100644 old_vendor/symfony/string/Resources/data/wcswidth_table_zero.php delete mode 100644 old_vendor/symfony/string/Resources/functions.php delete mode 100644 old_vendor/symfony/string/Slugger/AsciiSlugger.php delete mode 100644 old_vendor/symfony/string/Slugger/SluggerInterface.php delete mode 100644 old_vendor/symfony/string/UnicodeString.php delete mode 100644 old_vendor/symfony/string/composer.json delete mode 100644 old_vendor/theseer/tokenizer/.php_cs.dist delete mode 100644 old_vendor/theseer/tokenizer/CHANGELOG.md delete mode 100644 old_vendor/theseer/tokenizer/LICENSE delete mode 100644 old_vendor/theseer/tokenizer/README.md delete mode 100644 old_vendor/theseer/tokenizer/composer.json delete mode 100644 old_vendor/theseer/tokenizer/src/Exception.php delete mode 100644 old_vendor/theseer/tokenizer/src/NamespaceUri.php delete mode 100644 old_vendor/theseer/tokenizer/src/NamespaceUriException.php delete mode 100644 old_vendor/theseer/tokenizer/src/Token.php delete mode 100644 old_vendor/theseer/tokenizer/src/TokenCollection.php delete mode 100644 old_vendor/theseer/tokenizer/src/TokenCollectionException.php delete mode 100644 old_vendor/theseer/tokenizer/src/Tokenizer.php delete mode 100644 old_vendor/theseer/tokenizer/src/XMLSerializer.php delete mode 100644 vb_book.code-workspace mode change 100644 => 100755 vendor/bin/php-cs-fixer mode change 100644 => 100755 vendor/bin/php-parse mode change 100644 => 100755 vendor/friendsofphp/php-cs-fixer/php-cs-fixer mode change 100644 => 100755 vendor/nikic/php-parser/bin/php-parse mode change 100644 => 100755 vendor/phpunit/phpunit/phpunit mode change 100644 => 100755 vendor/sebastian/resource-operations/build/generate.php diff --git a/Untitled-1.json b/Untitled-1.json deleted file mode 100644 index 65229e19..00000000 --- a/Untitled-1.json +++ /dev/null @@ -1 +0,0 @@ - "friendsofphp/php-cs-fixer": "3.13.0", \ No newline at end of file diff --git a/composer.lock b/composer.lock index 1a311dd8..5296b9cf 100644 --- a/composer.lock +++ b/composer.lock @@ -529,21 +529,21 @@ "packages-dev": [ { "name": "codeigniter/coding-standard", - "version": "v1.7.8", + "version": "v1.7.9", "source": { "type": "git", "url": "https://github.com/CodeIgniter/coding-standard.git", - "reference": "3f7e8447652ff1a0c794b8abffc0af0e8453d536" + "reference": "841ef22bac4ea9261c47efa035d300dece0e365d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodeIgniter/coding-standard/zipball/3f7e8447652ff1a0c794b8abffc0af0e8453d536", - "reference": "3f7e8447652ff1a0c794b8abffc0af0e8453d536", + "url": "https://api.github.com/repos/CodeIgniter/coding-standard/zipball/841ef22bac4ea9261c47efa035d300dece0e365d", + "reference": "841ef22bac4ea9261c47efa035d300dece0e365d", "shasum": "" }, "require": { "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "^3.24", + "friendsofphp/php-cs-fixer": "^3.27", "nexusphp/cs-config": "^3.6", "php": "^7.4 || ^8.0" }, @@ -579,7 +579,7 @@ "slack": "https://codeigniterchat.slack.com", "source": "https://github.com/CodeIgniter/coding-standard" }, - "time": "2023-08-30T03:39:39+00:00" + "time": "2023-09-18T10:13:29+00:00" }, { "name": "composer/pcre", @@ -801,30 +801,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -851,7 +851,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -867,7 +867,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "fakerphp/faker", @@ -939,16 +939,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.26.1", + "version": "v3.27.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d023ba6684055f6ea1da1352d8a02baca0426983" + "reference": "e73ccaae1208f017bb7860986eebb3da48bd25d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d023ba6684055f6ea1da1352d8a02baca0426983", - "reference": "d023ba6684055f6ea1da1352d8a02baca0426983", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e73ccaae1208f017bb7860986eebb3da48bd25d6", + "reference": "e73ccaae1208f017bb7860986eebb3da48bd25d6", "shasum": "" }, "require": { @@ -1022,7 +1022,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.26.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.27.0" }, "funding": [ { @@ -1030,7 +1030,7 @@ "type": "github" } ], - "time": "2023-09-08T19:09:07+00:00" + "time": "2023-09-17T14:37:54+00:00" }, { "name": "kint-php/kint", @@ -1150,21 +1150,21 @@ }, { "name": "nexusphp/cs-config", - "version": "v3.15.0", + "version": "v3.16.0", "source": { "type": "git", "url": "https://github.com/NexusPHP/cs-config.git", - "reference": "b76198c0b0d563e6a917509348a9145df3de43dc" + "reference": "0d02bf2a9aca5e9af344e7000b973e815190b2fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/NexusPHP/cs-config/zipball/b76198c0b0d563e6a917509348a9145df3de43dc", - "reference": "b76198c0b0d563e6a917509348a9145df3de43dc", + "url": "https://api.github.com/repos/NexusPHP/cs-config/zipball/0d02bf2a9aca5e9af344e7000b973e815190b2fb", + "reference": "0d02bf2a9aca5e9af344e7000b973e815190b2fb", "shasum": "" }, "require": { "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "^3.24", + "friendsofphp/php-cs-fixer": "^3.27", "php": "^8.0.1" }, "conflict": { @@ -1215,7 +1215,7 @@ "type": "github" } ], - "time": "2023-08-30T03:31:34+00:00" + "time": "2023-09-18T10:02:35+00:00" }, { "name": "nikic/php-parser", @@ -1386,16 +1386,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.28", + "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef" + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { @@ -1452,7 +1452,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.28" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { @@ -1460,7 +1460,7 @@ "type": "github" } ], - "time": "2023-09-12T14:36:20+00:00" + "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1705,16 +1705,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.12", + "version": "9.6.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f" + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a122c2ebd469b751d774aa0f613dc0d67697653f", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", "shasum": "" }, "require": { @@ -1788,7 +1788,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.12" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" }, "funding": [ { @@ -1804,7 +1804,7 @@ "type": "tidelift" } ], - "time": "2023-09-12T14:39:31+00:00" + "time": "2023-09-19T05:39:22+00:00" }, { "name": "predis/predis", @@ -2936,22 +2936,23 @@ }, { "name": "symfony/console", - "version": "v6.0.19", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { @@ -2973,12 +2974,6 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, "type": "library", "autoload": { "psr-4": { @@ -3006,12 +3001,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -3027,29 +3022,29 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3078,7 +3073,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -3094,28 +3089,29 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.19", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -3128,13 +3124,9 @@ "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, "type": "library", "autoload": { "psr-4": { @@ -3161,7 +3153,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -3177,33 +3169,30 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3240,7 +3229,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -3256,24 +3245,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/filesystem", - "version": "v6.0.19", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -3303,7 +3292,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.19" + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { @@ -3319,24 +3308,27 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2023-06-01T08:30:39+00:00" }, { "name": "symfony/finder", - "version": "v6.0.19", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", - "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -3364,7 +3356,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.19" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -3380,25 +3372,25 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:44:14+00:00" + "time": "2023-07-31T08:31:44+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.0.19", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -3431,7 +3423,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" }, "funding": [ { @@ -3447,7 +3439,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-05-12T14:21:09+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3943,20 +3935,20 @@ }, { "name": "symfony/process", - "version": "v6.0.19", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -3984,7 +3976,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -4000,36 +3992,33 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-08-07T10:39:22+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.0.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4039,7 +4028,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4066,7 +4058,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -4082,25 +4074,25 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:58+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.0.19", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -4128,7 +4120,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" + "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" }, "funding": [ { @@ -4144,36 +4136,37 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-02-16T10:14:28+00:00" }, { "name": "symfony/string", - "version": "v6.0.19", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" + "reference": "53d1a83225002635bca3482fcbf963001313fb68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", @@ -4213,7 +4206,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" + "source": "https://github.com/symfony/string/tree/v6.3.2" }, "funding": [ { @@ -4229,7 +4222,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:10+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "theseer/tokenizer", @@ -4294,5 +4287,5 @@ "ext-mbstring": "*" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.2.0" } diff --git a/old_composer.lock b/old_composer.lock deleted file mode 100644 index 9646b57d..00000000 --- a/old_composer.lock +++ /dev/null @@ -1,4184 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "f1b8d79ec86f51da981ca5868a4c07d1", - "packages": [ - { - "name": "laminas/laminas-escaper", - "version": "2.12.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.4.0", - "maglnet/composer-require-checker": "^3.8.0", - "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.22.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2022-10-10T10:11:09+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - } - ], - "packages-dev": [ - { - "name": "codeigniter/coding-standard", - "version": "v1.7.1", - "source": { - "type": "git", - "url": "https://github.com/CodeIgniter/coding-standard.git", - "reference": "9b3a18ebd635e05717e984d40cc2f888afa52683" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CodeIgniter/coding-standard/zipball/9b3a18ebd635e05717e984d40cc2f888afa52683", - "reference": "9b3a18ebd635e05717e984d40cc2f888afa52683", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "3.13.0", - "nexusphp/cs-config": "^3.6", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "nexusphp/tachycardia": "^1.3", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "CodeIgniter\\CodingStandard\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Paul E. Balandan, CPA", - "email": "paulbalandan@gmail.com" - } - ], - "description": "Official Coding Standards for CodeIgniter based on PHP CS Fixer", - "keywords": [ - "phpcs", - "static analysis" - ], - "support": { - "forum": "http://forum.codeigniter.com/", - "issues": "https://github.com/CodeIgniter/coding-standard/issues", - "slack": "https://codeigniterchat.slack.com", - "source": "https://github.com/CodeIgniter/coding-standard" - }, - "time": "2022-12-22T02:29:54+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.14.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" - }, - "time": "2023-02-01T09:20:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" - }, - "time": "2023-06-03T09:27:29+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, - { - "name": "doctrine/lexer", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-14T08:49:07+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" - }, - "time": "2023-06-12T08:44:38+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.13.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a6232229a8309e8811dc751c28b91cb34b2943e1", - "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1", - "shasum": "" - }, - "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.0" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2022-10-31T19:28:50+00:00" - }, - { - "name": "kint-php/kint", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/kint-php/kint.git", - "reference": "a700653a77250b122920799b10c94e904c9b78c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kint-php/kint/zipball/a700653a77250b122920799b10c94e904c9b78c7", - "reference": "a700653a77250b122920799b10c94e904c9b78c7", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3", - "phpspec/prophecy-phpunit": "^2", - "phpunit/phpunit": "^9", - "seld/phar-utils": "^1", - "symfony/finder": "^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "^5@dev" - }, - "suggest": { - "kint-php/kint-helpers": "Provides extra helper functions", - "kint-php/kint-twig": "Provides d() and s() functions in twig templates" - }, - "type": "library", - "autoload": { - "files": [ - "init.php" - ], - "psr-4": { - "Kint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Vollebregt", - "homepage": "https://github.com/jnvsor" - }, - { - "name": "Contributors", - "homepage": "https://github.com/kint-php/kint/graphs/contributors" - } - ], - "description": "Kint - debugging tool for PHP developers", - "homepage": "https://kint-php.github.io/kint/", - "keywords": [ - "debug", - "kint", - "php" - ], - "support": { - "issues": "https://github.com/kint-php/kint/issues", - "source": "https://github.com/kint-php/kint/tree/5.0.7" - }, - "time": "2023-06-26T19:25:00+00:00" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.11", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2022-02-23T02:02:42+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nexusphp/cs-config", - "version": "v3.8.0", - "source": { - "type": "git", - "url": "https://github.com/NexusPHP/cs-config.git", - "reference": "8ef2d10694d0dfadb1fc028c9b5de07c8e852092" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/NexusPHP/cs-config/zipball/8ef2d10694d0dfadb1fc028c9b5de07c8e852092", - "reference": "8ef2d10694d0dfadb1fc028c9b5de07c8e852092", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "^3.13", - "php": "^7.4 || ^8.0" - }, - "conflict": { - "liaison/cs-config": "*" - }, - "require-dev": { - "nexusphp/tachycardia": "^1.3", - "phpstan/phpstan": "^1.8", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Nexus\\CsConfig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Paul E. Balandan, CPA", - "email": "paulbalandan@gmail.com" - } - ], - "description": "A factory for custom rulesets for PHP CS Fixer.", - "support": { - "issues": "https://github.com/NexusPHP/cs-config/issues", - "slack": "https://nexusphp.slack.com", - "source": "https://github.com/NexusPHP/cs-config.git" - }, - "funding": [ - { - "url": "https://www.paypal.me/paulbalandan", - "type": "custom" - }, - { - "url": "https://github.com/paulbalandan", - "type": "github" - } - ], - "time": "2022-11-01T15:20:57+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.17.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" - }, - "time": "2023-08-13T19:53:39+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.27", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1", - "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-07-26T13:44:30+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", - "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2023-07-10T04:04:23+00:00" - }, - { - "name": "predis/predis", - "version": "v2.2.1", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/5f2b410a74afaff296a87a494e4c5488cf9fab57", - "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" - }, - "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "support": { - "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "time": "2023-08-15T23:01:46+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-05-07T05:35:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:03:37+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-02T09:26:13+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/console", - "version": "v6.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/aa5d64ad3f63f2e48964fc81ee45cb318a723898", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-19T20:17:28+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-06T06:56:43+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.3.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-06-01T08:30:39+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.3.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-31T08:31:44+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-12T14:21:09+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v6.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-12T16:00:22+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/service-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-16T10:14:28+00:00" - }, - { - "name": "symfony/string", - "version": "v6.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "53d1a83225002635bca3482fcbf963001313fb68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", - "reference": "53d1a83225002635bca3482fcbf963001313fb68", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-05T08:41:27+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^7.4 || ^8.0", - "ext-intl": "*", - "ext-json": "*", - "ext-mbstring": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.2.0" -} diff --git a/old_vendor/autoload.php b/old_vendor/autoload.php deleted file mode 100644 index ce9cb1b6..00000000 --- a/old_vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/friendsofphp/php-cs-fixer/php-cs-fixer'); - exit(0); - } -} - -include __DIR__ . '/..'.'/friendsofphp/php-cs-fixer/php-cs-fixer'; diff --git a/old_vendor/bin/php-parse b/old_vendor/bin/php-parse deleted file mode 100644 index 80f0e486..00000000 --- a/old_vendor/bin/php-parse +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env php -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse'); - exit(0); - } -} - -include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse'; diff --git a/old_vendor/codeigniter/coding-standard/CHANGELOG.md b/old_vendor/codeigniter/coding-standard/CHANGELOG.md deleted file mode 100644 index fd8488e6..00000000 --- a/old_vendor/codeigniter/coding-standard/CHANGELOG.md +++ /dev/null @@ -1,88 +0,0 @@ -# Changelog - -All notable changes to this library will be documented in this file. - -This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.7.1](https://github.com/CodeIgniter/coding-standard/compare/v1.7.0...v1.7.1) - 2022-12-22 - -- Fix php-cs-fixer version to 3.13.0 - -## [v1.7.0](https://github.com/CodeIgniter/coding-standard/compare/v1.6.2...v1.7.0) - 2022-11-01 - -- Bump php-cs-fixer to v3.13 -- Add 'case_sensitive' option to 'general_phpdoc_annotation_remove' -- Add 'closure_fn_spacing' option to 'function_declaration' - -## [v1.6.2](https://github.com/CodeIgniter/coding-standard/compare/v1.6.1...v1.6.2) - 2022-10-30 - -- Grouped `runTestsInSeparateProcess`, `runInSeparateProcess`, `preserveGlobalState` together - -## [v1.6.1](https://github.com/CodeIgniter/coding-standard/compare/v1.6.0...v1.6.1) - 2022-10-20 - -- Changed `@internal` description of class CodeIgniter4 to avoid warnings in phpstorm - -## [v1.6.0](https://github.com/CodeIgniter/coding-standard/compare/v1.5.0...v1.6.0) - 2022-10-15 - -- Bump php-cs-fixer version to v3.12 minimum -- Enable `no_useless_concat_operator` -- Update action workflows - -## [v1.5.0](https://github.com/CodeIgniter/coding-standard/compare/v1.4.0...v1.5.0) - 2022-09-13 - -- Enable `ensure_single_space` option of `whitespace_after_comma_in_array` -- Use the `space_multiple_catch` option of `types_spaces` -- Fix multi-lines -- Add `group_to_single_imports` option to `single_import_per_statement` -- chore: fix editorconfig (#4) -- docs: add CONTRIBUTING.md (#3) -- Enable `date_time_create_from_format_call` -- Add options to `new_with_braces` -- Add `order` option to `phpdoc_order` -- Add the `trailing_comma_single_line` option to `function_declaration` -- Enable `curly_braces_position` -- Enable `single_line_comment_spacing` -- Enable `no_trailing_comma_in_singleline` -- Normalize composer.json -- Add "static analysis" Composer keyword (#2) -- Add `inline_constructor_arguments` option to `class_definition` -- Enable `statement_indentation` -- Enable `no_useless_nullsafe_operator` -- Enable `no_multiple_statements_per_line` -- Enable `control_structure_braces` -- Enable `blank_line_between_import_groups` -- Remove deprecated fixers -- Configure `groups` option in `phpdoc_separation` rule -- Bump php-cs-fixer version - -## [v1.4.0](https://github.com/CodeIgniter/coding-standard/compare/v1.3.0...v1.4.0) - 2022-02-09 - -- Permit use of latest php-cs-fixer v3.6.0 - -## [v1.3.0](https://github.com/CodeIgniter/coding-standard/compare/v1.2.0...v1.3.0) - 2022-01-15 - -- Fix GHA workflows -- Bump versions - - PHP 7.4 minimum - - friendsofphp/php-cs-fixer v3.4.0 - - phpstan/phpstan v1.0 minimum -- Enable `ordered_class_elements` rule -- Enable `global_namespace_import` rule (#1) -- Use `GITHUB_TOKEN` so that secrets can be passed to PRs - -## [v1.2.0](https://github.com/CodeIgniter/coding-standard/compare/v1.1.0...v1.2.0) - 2021-10-18 - -- Bump `friendsofphp/php-cs-fixer` to v3.2 minimum -- Change behavior of `class_attributes_separation` rule -- Add support for new fixers added in php-cs-fixer v3.2.0 -- Enable `no_alternative_syntax` rule - -## [v1.1.0](https://github.com/CodeIgniter/coding-standard/compare/v1.0.0...v1.1.0) - 2021-08-31 - -- Bump to `friendsofphp/php-cs-fixer` v3.1.0 -- Fix release script -- Bump to `nexusphp/cs-config` v3.3.0 - -## [v1.0.0](https://github.com/CodeIgniter/coding-standard/releases/tag/v1.0.0) - 2021-08-29 - -Initial release. diff --git a/old_vendor/codeigniter/coding-standard/CONTRIBUTING.md b/old_vendor/codeigniter/coding-standard/CONTRIBUTING.md deleted file mode 100644 index 36bbe533..00000000 --- a/old_vendor/codeigniter/coding-standard/CONTRIBUTING.md +++ /dev/null @@ -1,10 +0,0 @@ -# Contributing to CodeIgniter Coding Standard - -CodeIgniter Coding Standard is a community driven project and accepts contributions of -code and documentation from the community. - -If you'd like to contribute, please read the [Contributing to CodeIgniter](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/README.md) -guide in the [main repository](https://github.com/codeigniter4/CodeIgniter4). - -If you are going to contribute to this repository, please report bugs or send PRs -to this repository instead of the main repository. diff --git a/old_vendor/codeigniter/coding-standard/LICENSE b/old_vendor/codeigniter/coding-standard/LICENSE deleted file mode 100644 index b19eae29..00000000 --- a/old_vendor/codeigniter/coding-standard/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 CodeIgniter Foundation and John Paul E. Balandan, CPA - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/codeigniter/coding-standard/README.md b/old_vendor/codeigniter/coding-standard/README.md deleted file mode 100644 index 32f28151..00000000 --- a/old_vendor/codeigniter/coding-standard/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# CodeIgniter Coding Standard - -[![Unit Tests](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-phpunit.yml/badge.svg)](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-phpunit.yml) -[![Coding Standards](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-coding-standards.yml/badge.svg)](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-coding-standards.yml) -[![PHPStan Static Analysis](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-phpstan.yml/badge.svg)](https://github.com/CodeIgniter/coding-standard/actions/workflows/test-phpstan.yml) -[![PHPStan level](https://img.shields.io/badge/PHPStan-max%20level-brightgreen)](phpstan.neon.dist) -[![Coverage Status](https://coveralls.io/repos/github/CodeIgniter/coding-standard/badge.svg?branch=develop)](https://coveralls.io/github/CodeIgniter/coding-standard?branch=develop) -[![Latest Stable Version](http://poser.pugx.org/codeigniter/coding-standard/v)](https://packagist.org/packages/codeigniter/coding-standard) -[![License](https://img.shields.io/github/license/codeigniter/coding-standard)](LICENSE) -[![Total Downloads](http://poser.pugx.org/codeigniter/coding-standard/downloads)](https://packagist.org/packages/codeigniter/coding-standard) - -This library holds the official coding standards of CodeIgniter based -on [PHP CS Fixer][1] and powered by [Nexus CS Config][2]. - -## Installation - -You can add this library as a local, per-project dependency to your project -using [Composer](https://getcomposer.org/): - - composer require codeigniter/coding-standard - -If you only need this library during development, for instance to run your project's test suite, -then you should add it as a development-time dependency: - - composer require --dev codeigniter/coding-standard - -## Setup - -To start, let us create a `.php-cs-fixer.dist.php` file at the root of your project. - -```php -forProjects(); - -``` - -This minimal setup will return a default instance of `PhpCsFixer\Config` containing all rules applicable -for the CodeIgniter organization. - -Then, in your terminal, run the following command: - -```console -$ vendor/bin/php-cs-fixer fix --verbose -``` - -## Adding License Headers - -The default setup will not configure a license header in files. License headers can be especially useful -for library authors to assert copyright. To add license headers in your PHP files, you can simply provide -your name and name of library. Optionally, you can also provide your email and starting license year. - -```diff - forProjects(); -+return Factory::create(new CodeIgniter4())->forLibrary( -+ 'CodeIgniter 4 framework', -+ 'CodeIgniter Foundation', -+ 'admin@codeigniter.com', -+ 2021, -+); - -``` - -## Providing Overriding Rules and Options - -The list of enabled rules can be found in the [`CodeIgniter\CodingStandard\CodeIgniter4`][3] class. If you -feel the rule is not applicable to you or you want to modify it, you can do so by providing an array of -overriding rules to the second parameter of `Factory::create()`. - -Similarly, you can further modify the `PhpCsFixer\Config` instance returned by using the available options. -All available options are fully supported by [Nexus CS Config][2] and abstracted by simply providing an -array of key-value pairs in the third parameter of `Factory::create()`. - -```diff - forProjects(); -+return Factory::create(new CodeIgniter4(), [], [ -+ 'usingCache' => false, -+])->forProjects(); - -``` - -You can check out this library's own [`.php-cs-fixer.dist.php`][4] for inspiration on how it is done. -For more detailed documentation on all available options, you can check [here][2]. - -## Contributing - -All forms of contributions are welcome! - -Since the rules here will be propagated and used within the CodeIgniter organization, all proposed rules -and modifications to existing rules should have a proof-of-concept (POC) PR sent first to -the [CodeIgniter4][5] repository with possible changes to the code styles applied there. Once accepted -there, you can send in a PR here to apply those rules. - -## License - -This work is open-sourced under the MIT license. - -[1]: https://github.com/FriendsOfPHP/PHP-CS-Fixer -[2]: https://github.com/NexusPHP/cs-config -[3]: src/CodeIgniter4.php -[4]: .php-cs-fixer.dist.php -[5]: https://github.com/codeigniter4/CodeIgniter4 diff --git a/old_vendor/codeigniter/coding-standard/composer.json b/old_vendor/codeigniter/coding-standard/composer.json deleted file mode 100644 index 3fada5ce..00000000 --- a/old_vendor/codeigniter/coding-standard/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "codeigniter/coding-standard", - "description": "Official Coding Standards for CodeIgniter based on PHP CS Fixer", - "license": "MIT", - "type": "library", - "keywords": [ - "phpcs", - "static analysis" - ], - "authors": [ - { - "name": "John Paul E. Balandan, CPA", - "email": "paulbalandan@gmail.com" - } - ], - "support": { - "forum": "http://forum.codeigniter.com/", - "source": "https://github.com/CodeIgniter/coding-standard", - "slack": "https://codeigniterchat.slack.com" - }, - "require": { - "php": "^7.4 || ^8.0", - "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "3.13.0", - "nexusphp/cs-config": "^3.6" - }, - "require-dev": { - "nexusphp/tachycardia": "^1.3", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "autoload": { - "psr-4": { - "CodeIgniter\\CodingStandard\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "CodeIgniter\\CodingStandard\\Tests\\": "tests/" - } - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true - } -} diff --git a/old_vendor/codeigniter/coding-standard/src/CodeIgniter4.php b/old_vendor/codeigniter/coding-standard/src/CodeIgniter4.php deleted file mode 100644 index 340fac63..00000000 --- a/old_vendor/codeigniter/coding-standard/src/CodeIgniter4.php +++ /dev/null @@ -1,616 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace CodeIgniter\CodingStandard; - -use Nexus\CsConfig\Ruleset\AbstractRuleset; - -/** - * Defines the ruleset used for the CodeIgniter4 organization. - * - * {@internal Use of this class is not covered by the backward compatibility promise for CodeIgniter4.} - */ -final class CodeIgniter4 extends AbstractRuleset -{ - public function __construct() - { - $this->name = 'CodeIgniter4 Coding Standards'; - - $this->rules = [ - 'align_multiline_comment' => ['comment_type' => 'phpdocs_only'], - 'array_indentation' => true, - 'array_push' => true, - 'array_syntax' => ['syntax' => 'short'], - 'assign_null_coalescing_to_coalesce_equal' => true, - 'backtick_to_shell_exec' => true, - 'binary_operator_spaces' => [ - 'default' => 'single_space', - 'operators' => [ - '=' => 'align_single_space_minimal', - '=>' => 'align_single_space_minimal', - '||' => 'align_single_space_minimal', - '.=' => 'align_single_space_minimal', - ], - ], - 'blank_line_after_namespace' => true, - 'blank_line_after_opening_tag' => true, - 'blank_line_before_statement' => [ - 'statements' => [ - 'case', - 'continue', - 'declare', - 'default', - 'do', - 'exit', - 'for', - 'foreach', - 'goto', - 'return', - 'switch', - 'throw', - 'try', - 'while', - 'yield', - 'yield_from', - ], - ], - 'blank_line_between_import_groups' => true, - 'braces' => [ - 'allow_single_line_anonymous_class_with_empty_body' => true, - 'allow_single_line_closure' => true, - 'position_after_anonymous_constructs' => 'same', - 'position_after_control_structures' => 'same', - 'position_after_functions_and_oop_constructs' => 'next', - ], - 'cast_spaces' => ['space' => 'single'], - 'class_attributes_separation' => [ - 'elements' => [ - 'const' => 'none', - 'property' => 'none', - 'method' => 'one', - 'trait_import' => 'none', - ], - ], - 'class_definition' => [ - 'multi_line_extends_each_single_line' => true, - 'single_item_single_line' => true, - 'single_line' => true, - 'space_before_parenthesis' => true, - 'inline_constructor_arguments' => true, - ], - 'class_reference_name_casing' => true, - 'clean_namespace' => true, - 'combine_consecutive_issets' => true, - 'combine_consecutive_unsets' => true, - 'combine_nested_dirname' => true, - 'comment_to_phpdoc' => [ - 'ignored_tags' => [ - 'todo', - 'codeCoverageIgnore', - 'codeCoverageIgnoreStart', - 'codeCoverageIgnoreEnd', - 'phpstan-ignore-line', - 'phpstan-ignore-next-line', - ], - ], - 'compact_nullable_typehint' => true, - 'concat_space' => ['spacing' => 'one'], - 'constant_case' => ['case' => 'lower'], - 'control_structure_braces' => true, - 'control_structure_continuation_position' => ['position' => 'same_line'], - 'curly_braces_position' => [ - 'control_structures_opening_brace' => 'same_line', - 'functions_opening_brace' => 'next_line_unless_newline_at_signature_end', - 'anonymous_functions_opening_brace' => 'same_line', - 'classes_opening_brace' => 'next_line_unless_newline_at_signature_end', - 'anonymous_classes_opening_brace' => 'same_line', - 'allow_single_line_empty_anonymous_classes' => true, - 'allow_single_line_anonymous_functions' => true, - ], - 'date_time_create_from_format_call' => true, - 'date_time_immutable' => false, - 'declare_equal_normalize' => ['space' => 'none'], - 'declare_parentheses' => true, - 'declare_strict_types' => false, - 'dir_constant' => true, - 'doctrine_annotation_array_assignment' => false, - 'doctrine_annotation_braces' => false, - 'doctrine_annotation_indentation' => false, - 'doctrine_annotation_spaces' => false, - 'echo_tag_syntax' => [ - 'format' => 'short', - 'long_function' => 'echo', - 'shorten_simple_statements_only' => false, - ], - 'elseif' => true, - 'empty_loop_body' => ['style' => 'braces'], - 'empty_loop_condition' => ['style' => 'while'], - 'encoding' => true, - 'ereg_to_preg' => true, - 'error_suppression' => [ - 'mute_deprecation_error' => true, - 'noise_remaining_usages' => false, - 'noise_remaining_usages_exclude' => [], - ], - 'escape_implicit_backslashes' => [ - 'double_quoted' => true, - 'heredoc_syntax' => true, - 'single_quoted' => false, - ], - 'explicit_indirect_variable' => true, - 'explicit_string_variable' => true, - 'final_class' => false, - 'final_internal_class' => [ - 'annotation_exclude' => ['@no-final'], - 'annotation_include' => ['@internal'], - 'consider_absent_docblock_as_internal_class' => false, - ], - 'final_public_method_for_abstract_class' => false, - 'fopen_flag_order' => true, - 'fopen_flags' => ['b_mode' => true], - 'full_opening_tag' => true, - 'fully_qualified_strict_types' => true, - 'function_declaration' => [ - 'closure_function_spacing' => 'one', - 'closure_fn_spacing' => 'one', - 'trailing_comma_single_line' => false, - ], - 'function_to_constant' => [ - 'functions' => [ - 'get_called_class', - 'get_class', - 'get_class_this', - 'php_sapi_name', - 'phpversion', - 'pi', - ], - ], - 'function_typehint_space' => true, - 'general_phpdoc_annotation_remove' => [ - 'annotations' => [ - 'author', - 'package', - 'subpackage', - ], - 'case_sensitive' => false, - ], - 'general_phpdoc_tag_rename' => [ - 'case_sensitive' => false, - 'fix_annotation' => true, - 'fix_inline' => true, - 'replacements' => ['inheritDocs' => 'inheritDoc'], - ], - 'get_class_to_class_keyword' => false, - 'global_namespace_import' => [ - 'import_constants' => false, - 'import_functions' => false, - 'import_classes' => true, - ], - 'group_import' => false, - 'header_comment' => false, // false by default - 'heredoc_indentation' => ['indentation' => 'start_plus_one'], - 'heredoc_to_nowdoc' => true, - 'implode_call' => true, - 'include' => true, - 'increment_style' => ['style' => 'post'], - 'indentation_type' => true, - 'integer_literal_case' => true, - 'is_null' => true, - 'lambda_not_used_import' => true, - 'line_ending' => true, - 'linebreak_after_opening_tag' => true, - 'list_syntax' => ['syntax' => 'short'], - 'logical_operators' => true, - 'lowercase_cast' => true, - 'lowercase_keywords' => true, - 'lowercase_static_reference' => true, - 'magic_constant_casing' => true, - 'magic_method_casing' => true, - 'mb_str_functions' => false, - 'method_argument_space' => [ - 'after_heredoc' => false, - 'keep_multiple_spaces_after_comma' => false, - 'on_multiline' => 'ensure_fully_multiline', - ], - 'method_chaining_indentation' => true, - 'modernize_strpos' => false, // requires 8.0+ - 'modernize_types_casting' => true, - 'multiline_comment_opening_closing' => true, - 'multiline_whitespace_before_semicolons' => ['strategy' => 'no_multi_line'], - 'native_constant_invocation' => false, - 'native_function_casing' => true, - 'native_function_invocation' => false, - 'native_function_type_declaration_casing' => true, - 'new_with_braces' => [ - 'named_class' => true, - 'anonymous_class' => true, - ], - 'no_alias_functions' => ['sets' => ['@all']], - 'no_alias_language_construct_call' => true, - 'no_alternative_syntax' => ['fix_non_monolithic_code' => false], - 'no_binary_string' => true, - 'no_blank_lines_after_class_opening' => true, - 'no_blank_lines_after_phpdoc' => true, - 'no_blank_lines_before_namespace' => false, // conflicts with `single_blank_line_before_namespace` - 'no_break_comment' => ['comment_text' => 'no break'], - 'no_closing_tag' => true, - 'no_empty_comment' => true, - 'no_empty_phpdoc' => true, - 'no_empty_statement' => true, - 'no_extra_blank_lines' => ['tokens' => ['extra']], - 'no_homoglyph_names' => true, - 'no_leading_import_slash' => true, - 'no_leading_namespace_whitespace' => true, - 'no_mixed_echo_print' => ['use' => 'echo'], - 'no_multiline_whitespace_around_double_arrow' => true, - 'no_multiple_statements_per_line' => true, - 'no_null_property_initialization' => true, - 'no_php4_constructor' => true, - 'no_short_bool_cast' => true, - 'no_singleline_whitespace_before_semicolons' => true, - 'no_space_around_double_colon' => true, - 'no_spaces_after_function_name' => true, - 'no_spaces_around_offset' => ['positions' => ['inside', 'outside']], - 'no_spaces_inside_parenthesis' => true, - 'no_superfluous_elseif' => true, - 'no_superfluous_phpdoc_tags' => [ - 'allow_mixed' => true, - 'allow_unused_params' => true, - 'remove_inheritdoc' => false, - ], - 'no_trailing_comma_in_singleline' => [ - 'elements' => [ - 'arguments', - 'array_destructuring', - 'array', - 'group_import', - ], - ], - 'no_trailing_whitespace' => true, - 'no_trailing_whitespace_in_comment' => true, - 'no_trailing_whitespace_in_string' => true, - 'no_unneeded_control_parentheses' => [ - 'statements' => [ - 'break', - 'clone', - 'continue', - 'echo_print', - 'return', - 'switch_case', - 'yield', - ], - ], - 'no_unneeded_curly_braces' => ['namespaces' => true], - 'no_unneeded_final_method' => ['private_methods' => true], - 'no_unneeded_import_alias' => true, - 'no_unreachable_default_argument_value' => true, - 'no_unset_cast' => true, - 'no_unset_on_property' => false, - 'no_unused_imports' => true, - 'no_useless_concat_operator' => ['juggle_simple_strings' => true], - 'no_useless_else' => true, - 'no_useless_nullsafe_operator' => true, - 'no_useless_return' => true, - 'no_useless_sprintf' => true, - 'no_whitespace_before_comma_in_array' => ['after_heredoc' => true], - 'no_whitespace_in_blank_line' => true, - 'non_printable_character' => ['use_escape_sequences_in_strings' => true], - 'normalize_index_brace' => true, - 'not_operator_with_space' => false, - 'not_operator_with_successor_space' => true, - 'nullable_type_declaration_for_default_null_value' => ['use_nullable_type_declaration' => true], - 'object_operator_without_whitespace' => true, - 'octal_notation' => false, // requires 8.1+ - 'operator_linebreak' => ['only_booleans' => true, 'position' => 'beginning'], - 'ordered_class_elements' => [ - 'order' => [ - 'use_trait', - 'constant', - 'property', - 'method', - ], - 'sort_algorithm' => 'none', - ], - 'ordered_imports' => [ - 'sort_algorithm' => 'alpha', - 'imports_order' => ['class', 'function', 'const'], - ], - 'ordered_interfaces' => false, - 'ordered_traits' => false, - 'php_unit_construct' => [ - 'assertions' => [ - 'assertSame', - 'assertEquals', - 'assertNotEquals', - 'assertNotSame', - ], - ], - 'php_unit_dedicate_assert' => ['target' => 'newest'], - 'php_unit_dedicate_assert_internal_type' => ['target' => 'newest'], - 'php_unit_expectation' => ['target' => 'newest'], - 'php_unit_fqcn_annotation' => true, - 'php_unit_internal_class' => ['types' => ['normal', 'final']], - 'php_unit_method_casing' => ['case' => 'camel_case'], - 'php_unit_mock' => ['target' => 'newest'], - 'php_unit_mock_short_will_return' => true, - 'php_unit_namespaced' => ['target' => 'newest'], - 'php_unit_no_expectation_annotation' => [ - 'target' => 'newest', - 'use_class_const' => true, - ], - 'php_unit_set_up_tear_down_visibility' => true, - 'php_unit_size_class' => false, - 'php_unit_strict' => [ - 'assertions' => [ - 'assertAttributeEquals', - 'assertAttributeNotEquals', - 'assertEquals', - 'assertNotEquals', - ], - ], - 'php_unit_test_annotation' => ['style' => 'prefix'], - 'php_unit_test_case_static_method_calls' => [ - 'call_type' => 'this', - 'methods' => [], - ], - 'php_unit_test_class_requires_covers' => false, - 'phpdoc_add_missing_param_annotation' => ['only_untyped' => true], - 'phpdoc_align' => [ - 'align' => 'vertical', - 'tags' => [ - 'method', - 'param', - 'property', - 'return', - 'throws', - 'type', - 'var', - ], - ], - 'phpdoc_annotation_without_dot' => false, - 'phpdoc_indent' => true, - 'phpdoc_inline_tag_normalizer' => [ - 'tags' => [ - 'example', - 'id', - 'internal', - 'inheritdoc', - 'inheritdocs', - 'link', - 'source', - 'toc', - 'tutorial', - ], - ], - 'phpdoc_line_span' => [ - 'const' => 'multi', - 'method' => 'multi', - 'property' => 'multi', - ], - 'phpdoc_no_access' => true, - 'phpdoc_no_alias_tag' => [ - 'replacements' => [ - 'property-read' => 'property', - 'property-write' => 'property', - 'type' => 'var', - 'link' => 'see', - ], - ], - 'phpdoc_no_empty_return' => false, - 'phpdoc_no_package' => true, - 'phpdoc_no_useless_inheritdoc' => true, - 'phpdoc_order' => [ - 'order' => ['param', 'return', 'throws'], - ], - 'phpdoc_order_by_value' => [ - 'annotations' => [ - 'author', - 'covers', - 'coversNothing', - 'dataProvider', - 'depends', - 'group', - 'internal', - 'method', - 'property', - 'property-read', - 'property-write', - 'requires', - 'throws', - 'uses', - ], - ], - 'phpdoc_return_self_reference' => [ - 'replacements' => [ - 'this' => '$this', - '@this' => '$this', - '$self' => 'self', - '@self' => 'self', - '$static' => 'static', - '@static' => 'static', - ], - ], - 'phpdoc_scalar' => [ - 'types' => [ - 'boolean', - 'callback', - 'double', - 'integer', - 'real', - 'str', - ], - ], - 'phpdoc_separation' => [ - 'groups' => [ - ['immutable', 'psalm-immutable'], - ['param', 'phpstan-param', 'psalm-param'], - ['phpstan-pure', 'psalm-pure'], - ['readonly', 'psalm-readonly'], - ['return', 'phpstan-return', 'psalm-return'], - ['runTestsInSeparateProcess', 'runInSeparateProcess', 'preserveGlobalState'], - ['template', 'phpstan-template', 'psalm-template'], - ['template-covariant', 'phpstan-template-covariant', 'psalm-template-covariant'], - ['phpstan-type', 'psalm-type'], - ['var', 'phpstan-var', 'psalm-var'], - ], - ], - 'phpdoc_single_line_var_spacing' => true, - 'phpdoc_summary' => false, - 'phpdoc_tag_casing' => ['tags' => ['inheritDoc']], - 'phpdoc_tag_type' => ['tags' => ['inheritDoc' => 'inline']], - 'phpdoc_to_comment' => false, - 'phpdoc_to_param_type' => false, - 'phpdoc_to_property_type' => false, - 'phpdoc_to_return_type' => false, - 'phpdoc_trim' => true, - 'phpdoc_trim_consecutive_blank_line_separation' => true, - 'phpdoc_types' => ['groups' => ['simple', 'alias', 'meta']], - 'phpdoc_types_order' => [ - 'null_adjustment' => 'always_last', - 'sort_algorithm' => 'alpha', - ], - 'phpdoc_var_annotation_correct_order' => true, - 'phpdoc_var_without_name' => true, - 'pow_to_exponentiation' => true, - 'protected_to_private' => true, - 'psr_autoloading' => ['dir' => null], - 'random_api_migration' => [ - 'replacements' => [ - 'getrandmax' => 'mt_getrandmax', - 'rand' => 'mt_rand', - 'srand' => 'mt_srand', - ], - ], - 'regular_callable_call' => true, - 'return_assignment' => true, - 'return_type_declaration' => ['space_before' => 'none'], - 'self_accessor' => false, - 'self_static_accessor' => true, - 'semicolon_after_instruction' => false, - 'set_type_to_cast' => true, - 'short_scalar_cast' => true, - 'simple_to_complex_string_variable' => true, - 'simplified_if_return' => true, - 'simplified_null_return' => false, - 'single_blank_line_at_eof' => true, - 'single_blank_line_before_namespace' => true, - 'single_class_element_per_statement' => ['elements' => ['const', 'property']], - 'single_import_per_statement' => ['group_to_single_imports' => true], - 'single_line_after_imports' => true, - 'single_line_comment_spacing' => true, - 'single_line_comment_style' => ['comment_types' => ['asterisk', 'hash']], - 'single_line_throw' => false, - 'single_quote' => ['strings_containing_single_quote_chars' => false], - 'single_space_after_construct' => [ - 'constructs' => [ - 'abstract', - 'as', - 'attribute', - 'break', - 'case', - 'catch', - 'class', - 'clone', - 'comment', - 'const', - 'const_import', - 'continue', - 'do', - 'echo', - 'else', - 'elseif', - 'extends', - 'final', - 'finally', - 'for', - 'foreach', - 'function', - 'function_import', - 'global', - 'goto', - 'if', - 'implements', - 'include', - 'include_once', - 'instanceof', - 'insteadof', - 'interface', - 'match', - 'named_argument', - 'new', - 'open_tag_with_echo', - 'php_doc', - 'php_open', - 'print', - 'private', - 'protected', - 'public', - 'require', - 'require_once', - 'return', - 'static', - 'throw', - 'trait', - 'try', - 'use', - 'use_lambda', - 'use_trait', - 'var', - 'while', - 'yield', - 'yield_from', - ], - ], - 'single_trait_insert_per_statement' => true, - 'space_after_semicolon' => ['remove_in_empty_for_expressions' => true], - 'standardize_increment' => true, - 'standardize_not_equals' => true, - 'statement_indentation' => true, - 'static_lambda' => true, - 'strict_comparison' => true, - 'strict_param' => true, - 'string_length_to_empty' => true, - 'string_line_ending' => true, - 'switch_case_semicolon_to_colon' => true, - 'switch_case_space' => true, - 'switch_continue_to_break' => true, - 'ternary_operator_spaces' => true, - 'ternary_to_elvis_operator' => true, - 'ternary_to_null_coalescing' => true, - 'trailing_comma_in_multiline' => [ - 'after_heredoc' => true, - 'elements' => ['arrays'], - ], - 'trim_array_spaces' => true, - 'types_spaces' => [ - 'space' => 'none', - 'space_multiple_catch' => 'none', - ], - 'unary_operator_spaces' => true, - 'use_arrow_functions' => true, - 'visibility_required' => ['elements' => ['const', 'method', 'property']], - 'void_return' => false, // changes method signature - 'whitespace_after_comma_in_array' => ['ensure_single_space' => true], - 'yoda_style' => [ - 'equal' => false, - 'identical' => null, - 'less_and_greater' => false, - 'always_move_variable' => false, - ], - ]; - - $this->requiredPHPVersion = 70400; - - $this->autoActivateIsRiskyAllowed = true; - } -} diff --git a/old_vendor/composer/ClassLoader.php b/old_vendor/composer/ClassLoader.php deleted file mode 100644 index afef3fa2..00000000 --- a/old_vendor/composer/ClassLoader.php +++ /dev/null @@ -1,572 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var ?string */ - private $vendorDir; - - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ - private $missingClasses = array(); - - /** @var ?string */ - private $apcuPrefix; - - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - } - - /** - * @return string[] - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array[] - * @psalm-return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return string[] Array of classname => path - * @psalm-return array - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private - */ -function includeFile($file) -{ - include $file; -} diff --git a/old_vendor/composer/InstalledVersions.php b/old_vendor/composer/InstalledVersions.php deleted file mode 100644 index d50e0c9f..00000000 --- a/old_vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,350 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints($constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - $installed[] = self::$installed; - - return $installed; - } -} diff --git a/old_vendor/composer/LICENSE b/old_vendor/composer/LICENSE deleted file mode 100644 index f27399a0..00000000 --- a/old_vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/old_vendor/composer/autoload_classmap.php b/old_vendor/composer/autoload_classmap.php deleted file mode 100644 index f4334e0d..00000000 --- a/old_vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,3228 +0,0 @@ - $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'CodeIgniter\\API\\ResponseTrait' => $baseDir . '/system/API/ResponseTrait.php', - 'CodeIgniter\\Autoloader\\Autoloader' => $baseDir . '/system/Autoloader/Autoloader.php', - 'CodeIgniter\\Autoloader\\FileLocator' => $baseDir . '/system/Autoloader/FileLocator.php', - 'CodeIgniter\\BaseModel' => $baseDir . '/system/BaseModel.php', - 'CodeIgniter\\CLI\\BaseCommand' => $baseDir . '/system/CLI/BaseCommand.php', - 'CodeIgniter\\CLI\\CLI' => $baseDir . '/system/CLI/CLI.php', - 'CodeIgniter\\CLI\\Commands' => $baseDir . '/system/CLI/Commands.php', - 'CodeIgniter\\CLI\\Console' => $baseDir . '/system/CLI/Console.php', - 'CodeIgniter\\CLI\\Exceptions\\CLIException' => $baseDir . '/system/CLI/Exceptions/CLIException.php', - 'CodeIgniter\\CLI\\GeneratorTrait' => $baseDir . '/system/CLI/GeneratorTrait.php', - 'CodeIgniter\\Cache\\CacheFactory' => $baseDir . '/system/Cache/CacheFactory.php', - 'CodeIgniter\\Cache\\CacheInterface' => $baseDir . '/system/Cache/CacheInterface.php', - 'CodeIgniter\\Cache\\Exceptions\\CacheException' => $baseDir . '/system/Cache/Exceptions/CacheException.php', - 'CodeIgniter\\Cache\\Exceptions\\ExceptionInterface' => $baseDir . '/system/Cache/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Cache\\Handlers\\BaseHandler' => $baseDir . '/system/Cache/Handlers/BaseHandler.php', - 'CodeIgniter\\Cache\\Handlers\\DummyHandler' => $baseDir . '/system/Cache/Handlers/DummyHandler.php', - 'CodeIgniter\\Cache\\Handlers\\FileHandler' => $baseDir . '/system/Cache/Handlers/FileHandler.php', - 'CodeIgniter\\Cache\\Handlers\\MemcachedHandler' => $baseDir . '/system/Cache/Handlers/MemcachedHandler.php', - 'CodeIgniter\\Cache\\Handlers\\PredisHandler' => $baseDir . '/system/Cache/Handlers/PredisHandler.php', - 'CodeIgniter\\Cache\\Handlers\\RedisHandler' => $baseDir . '/system/Cache/Handlers/RedisHandler.php', - 'CodeIgniter\\Cache\\Handlers\\WincacheHandler' => $baseDir . '/system/Cache/Handlers/WincacheHandler.php', - 'CodeIgniter\\CodeIgniter' => $baseDir . '/system/CodeIgniter.php', - 'CodeIgniter\\CodingStandard\\CodeIgniter4' => $vendorDir . '/codeigniter/coding-standard/src/CodeIgniter4.php', - 'CodeIgniter\\Commands\\Cache\\ClearCache' => $baseDir . '/system/Commands/Cache/ClearCache.php', - 'CodeIgniter\\Commands\\Cache\\InfoCache' => $baseDir . '/system/Commands/Cache/InfoCache.php', - 'CodeIgniter\\Commands\\Database\\CreateDatabase' => $baseDir . '/system/Commands/Database/CreateDatabase.php', - 'CodeIgniter\\Commands\\Database\\Migrate' => $baseDir . '/system/Commands/Database/Migrate.php', - 'CodeIgniter\\Commands\\Database\\MigrateRefresh' => $baseDir . '/system/Commands/Database/MigrateRefresh.php', - 'CodeIgniter\\Commands\\Database\\MigrateRollback' => $baseDir . '/system/Commands/Database/MigrateRollback.php', - 'CodeIgniter\\Commands\\Database\\MigrateStatus' => $baseDir . '/system/Commands/Database/MigrateStatus.php', - 'CodeIgniter\\Commands\\Database\\Seed' => $baseDir . '/system/Commands/Database/Seed.php', - 'CodeIgniter\\Commands\\Database\\ShowTableInfo' => $baseDir . '/system/Commands/Database/ShowTableInfo.php', - 'CodeIgniter\\Commands\\Encryption\\GenerateKey' => $baseDir . '/system/Commands/Encryption/GenerateKey.php', - 'CodeIgniter\\Commands\\Generators\\CellGenerator' => $baseDir . '/system/Commands/Generators/CellGenerator.php', - 'CodeIgniter\\Commands\\Generators\\CommandGenerator' => $baseDir . '/system/Commands/Generators/CommandGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ConfigGenerator' => $baseDir . '/system/Commands/Generators/ConfigGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ControllerGenerator' => $baseDir . '/system/Commands/Generators/ControllerGenerator.php', - 'CodeIgniter\\Commands\\Generators\\EntityGenerator' => $baseDir . '/system/Commands/Generators/EntityGenerator.php', - 'CodeIgniter\\Commands\\Generators\\FilterGenerator' => $baseDir . '/system/Commands/Generators/FilterGenerator.php', - 'CodeIgniter\\Commands\\Generators\\MigrateCreate' => $baseDir . '/system/Commands/Generators/MigrateCreate.php', - 'CodeIgniter\\Commands\\Generators\\MigrationGenerator' => $baseDir . '/system/Commands/Generators/MigrationGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ModelGenerator' => $baseDir . '/system/Commands/Generators/ModelGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ScaffoldGenerator' => $baseDir . '/system/Commands/Generators/ScaffoldGenerator.php', - 'CodeIgniter\\Commands\\Generators\\SeederGenerator' => $baseDir . '/system/Commands/Generators/SeederGenerator.php', - 'CodeIgniter\\Commands\\Generators\\SessionMigrationGenerator' => $baseDir . '/system/Commands/Generators/SessionMigrationGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ValidationGenerator' => $baseDir . '/system/Commands/Generators/ValidationGenerator.php', - 'CodeIgniter\\Commands\\Help' => $baseDir . '/system/Commands/Help.php', - 'CodeIgniter\\Commands\\Housekeeping\\ClearDebugbar' => $baseDir . '/system/Commands/Housekeeping/ClearDebugbar.php', - 'CodeIgniter\\Commands\\Housekeeping\\ClearLogs' => $baseDir . '/system/Commands/Housekeeping/ClearLogs.php', - 'CodeIgniter\\Commands\\ListCommands' => $baseDir . '/system/Commands/ListCommands.php', - 'CodeIgniter\\Commands\\Server\\Serve' => $baseDir . '/system/Commands/Server/Serve.php', - 'CodeIgniter\\Commands\\Utilities\\Environment' => $baseDir . '/system/Commands/Utilities/Environment.php', - 'CodeIgniter\\Commands\\Utilities\\FilterCheck' => $baseDir . '/system/Commands/Utilities/FilterCheck.php', - 'CodeIgniter\\Commands\\Utilities\\Namespaces' => $baseDir . '/system/Commands/Utilities/Namespaces.php', - 'CodeIgniter\\Commands\\Utilities\\Publish' => $baseDir . '/system/Commands/Utilities/Publish.php', - 'CodeIgniter\\Commands\\Utilities\\Routes' => $baseDir . '/system/Commands/Utilities/Routes.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouteCollector' => $baseDir . '/system/Commands/Utilities/Routes/AutoRouteCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouterImproved\\AutoRouteCollector' => $baseDir . '/system/Commands/Utilities/Routes/AutoRouterImproved/AutoRouteCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouterImproved\\ControllerMethodReader' => $baseDir . '/system/Commands/Utilities/Routes/AutoRouterImproved/ControllerMethodReader.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\ControllerFinder' => $baseDir . '/system/Commands/Utilities/Routes/ControllerFinder.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\ControllerMethodReader' => $baseDir . '/system/Commands/Utilities/Routes/ControllerMethodReader.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\FilterCollector' => $baseDir . '/system/Commands/Utilities/Routes/FilterCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\FilterFinder' => $baseDir . '/system/Commands/Utilities/Routes/FilterFinder.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\SampleURIGenerator' => $baseDir . '/system/Commands/Utilities/Routes/SampleURIGenerator.php', - 'CodeIgniter\\ComposerScripts' => $baseDir . '/system/ComposerScripts.php', - 'CodeIgniter\\Config\\AutoloadConfig' => $baseDir . '/system/Config/AutoloadConfig.php', - 'CodeIgniter\\Config\\BaseConfig' => $baseDir . '/system/Config/BaseConfig.php', - 'CodeIgniter\\Config\\BaseService' => $baseDir . '/system/Config/BaseService.php', - 'CodeIgniter\\Config\\Config' => $baseDir . '/system/Config/Config.php', - 'CodeIgniter\\Config\\DotEnv' => $baseDir . '/system/Config/DotEnv.php', - 'CodeIgniter\\Config\\Factories' => $baseDir . '/system/Config/Factories.php', - 'CodeIgniter\\Config\\Factory' => $baseDir . '/system/Config/Factory.php', - 'CodeIgniter\\Config\\ForeignCharacters' => $baseDir . '/system/Config/ForeignCharacters.php', - 'CodeIgniter\\Config\\Publisher' => $baseDir . '/system/Config/Publisher.php', - 'CodeIgniter\\Config\\Services' => $baseDir . '/system/Config/Services.php', - 'CodeIgniter\\Config\\View' => $baseDir . '/system/Config/View.php', - 'CodeIgniter\\Controller' => $baseDir . '/system/Controller.php', - 'CodeIgniter\\Cookie\\CloneableCookieInterface' => $baseDir . '/system/Cookie/CloneableCookieInterface.php', - 'CodeIgniter\\Cookie\\Cookie' => $baseDir . '/system/Cookie/Cookie.php', - 'CodeIgniter\\Cookie\\CookieInterface' => $baseDir . '/system/Cookie/CookieInterface.php', - 'CodeIgniter\\Cookie\\CookieStore' => $baseDir . '/system/Cookie/CookieStore.php', - 'CodeIgniter\\Cookie\\Exceptions\\CookieException' => $baseDir . '/system/Cookie/Exceptions/CookieException.php', - 'CodeIgniter\\Database\\BaseBuilder' => $baseDir . '/system/Database/BaseBuilder.php', - 'CodeIgniter\\Database\\BaseConnection' => $baseDir . '/system/Database/BaseConnection.php', - 'CodeIgniter\\Database\\BasePreparedQuery' => $baseDir . '/system/Database/BasePreparedQuery.php', - 'CodeIgniter\\Database\\BaseResult' => $baseDir . '/system/Database/BaseResult.php', - 'CodeIgniter\\Database\\BaseUtils' => $baseDir . '/system/Database/BaseUtils.php', - 'CodeIgniter\\Database\\Config' => $baseDir . '/system/Database/Config.php', - 'CodeIgniter\\Database\\ConnectionInterface' => $baseDir . '/system/Database/ConnectionInterface.php', - 'CodeIgniter\\Database\\Database' => $baseDir . '/system/Database/Database.php', - 'CodeIgniter\\Database\\Exceptions\\DataException' => $baseDir . '/system/Database/Exceptions/DataException.php', - 'CodeIgniter\\Database\\Exceptions\\DatabaseException' => $baseDir . '/system/Database/Exceptions/DatabaseException.php', - 'CodeIgniter\\Database\\Exceptions\\ExceptionInterface' => $baseDir . '/system/Database/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Database\\Forge' => $baseDir . '/system/Database/Forge.php', - 'CodeIgniter\\Database\\Migration' => $baseDir . '/system/Database/Migration.php', - 'CodeIgniter\\Database\\MigrationRunner' => $baseDir . '/system/Database/MigrationRunner.php', - 'CodeIgniter\\Database\\ModelFactory' => $baseDir . '/system/Database/ModelFactory.php', - 'CodeIgniter\\Database\\MySQLi\\Builder' => $baseDir . '/system/Database/MySQLi/Builder.php', - 'CodeIgniter\\Database\\MySQLi\\Connection' => $baseDir . '/system/Database/MySQLi/Connection.php', - 'CodeIgniter\\Database\\MySQLi\\Forge' => $baseDir . '/system/Database/MySQLi/Forge.php', - 'CodeIgniter\\Database\\MySQLi\\PreparedQuery' => $baseDir . '/system/Database/MySQLi/PreparedQuery.php', - 'CodeIgniter\\Database\\MySQLi\\Result' => $baseDir . '/system/Database/MySQLi/Result.php', - 'CodeIgniter\\Database\\MySQLi\\Utils' => $baseDir . '/system/Database/MySQLi/Utils.php', - 'CodeIgniter\\Database\\OCI8\\Builder' => $baseDir . '/system/Database/OCI8/Builder.php', - 'CodeIgniter\\Database\\OCI8\\Connection' => $baseDir . '/system/Database/OCI8/Connection.php', - 'CodeIgniter\\Database\\OCI8\\Forge' => $baseDir . '/system/Database/OCI8/Forge.php', - 'CodeIgniter\\Database\\OCI8\\PreparedQuery' => $baseDir . '/system/Database/OCI8/PreparedQuery.php', - 'CodeIgniter\\Database\\OCI8\\Result' => $baseDir . '/system/Database/OCI8/Result.php', - 'CodeIgniter\\Database\\OCI8\\Utils' => $baseDir . '/system/Database/OCI8/Utils.php', - 'CodeIgniter\\Database\\Postgre\\Builder' => $baseDir . '/system/Database/Postgre/Builder.php', - 'CodeIgniter\\Database\\Postgre\\Connection' => $baseDir . '/system/Database/Postgre/Connection.php', - 'CodeIgniter\\Database\\Postgre\\Forge' => $baseDir . '/system/Database/Postgre/Forge.php', - 'CodeIgniter\\Database\\Postgre\\PreparedQuery' => $baseDir . '/system/Database/Postgre/PreparedQuery.php', - 'CodeIgniter\\Database\\Postgre\\Result' => $baseDir . '/system/Database/Postgre/Result.php', - 'CodeIgniter\\Database\\Postgre\\Utils' => $baseDir . '/system/Database/Postgre/Utils.php', - 'CodeIgniter\\Database\\PreparedQueryInterface' => $baseDir . '/system/Database/PreparedQueryInterface.php', - 'CodeIgniter\\Database\\Query' => $baseDir . '/system/Database/Query.php', - 'CodeIgniter\\Database\\QueryInterface' => $baseDir . '/system/Database/QueryInterface.php', - 'CodeIgniter\\Database\\RawSql' => $baseDir . '/system/Database/RawSql.php', - 'CodeIgniter\\Database\\ResultInterface' => $baseDir . '/system/Database/ResultInterface.php', - 'CodeIgniter\\Database\\SQLSRV\\Builder' => $baseDir . '/system/Database/SQLSRV/Builder.php', - 'CodeIgniter\\Database\\SQLSRV\\Connection' => $baseDir . '/system/Database/SQLSRV/Connection.php', - 'CodeIgniter\\Database\\SQLSRV\\Forge' => $baseDir . '/system/Database/SQLSRV/Forge.php', - 'CodeIgniter\\Database\\SQLSRV\\PreparedQuery' => $baseDir . '/system/Database/SQLSRV/PreparedQuery.php', - 'CodeIgniter\\Database\\SQLSRV\\Result' => $baseDir . '/system/Database/SQLSRV/Result.php', - 'CodeIgniter\\Database\\SQLSRV\\Utils' => $baseDir . '/system/Database/SQLSRV/Utils.php', - 'CodeIgniter\\Database\\SQLite3\\Builder' => $baseDir . '/system/Database/SQLite3/Builder.php', - 'CodeIgniter\\Database\\SQLite3\\Connection' => $baseDir . '/system/Database/SQLite3/Connection.php', - 'CodeIgniter\\Database\\SQLite3\\Forge' => $baseDir . '/system/Database/SQLite3/Forge.php', - 'CodeIgniter\\Database\\SQLite3\\PreparedQuery' => $baseDir . '/system/Database/SQLite3/PreparedQuery.php', - 'CodeIgniter\\Database\\SQLite3\\Result' => $baseDir . '/system/Database/SQLite3/Result.php', - 'CodeIgniter\\Database\\SQLite3\\Table' => $baseDir . '/system/Database/SQLite3/Table.php', - 'CodeIgniter\\Database\\SQLite3\\Utils' => $baseDir . '/system/Database/SQLite3/Utils.php', - 'CodeIgniter\\Database\\Seeder' => $baseDir . '/system/Database/Seeder.php', - 'CodeIgniter\\Debug\\Exceptions' => $baseDir . '/system/Debug/Exceptions.php', - 'CodeIgniter\\Debug\\Iterator' => $baseDir . '/system/Debug/Iterator.php', - 'CodeIgniter\\Debug\\Timer' => $baseDir . '/system/Debug/Timer.php', - 'CodeIgniter\\Debug\\Toolbar' => $baseDir . '/system/Debug/Toolbar.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\BaseCollector' => $baseDir . '/system/Debug/Toolbar/Collectors/BaseCollector.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Config' => $baseDir . '/system/Debug/Toolbar/Collectors/Config.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Database' => $baseDir . '/system/Debug/Toolbar/Collectors/Database.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Events' => $baseDir . '/system/Debug/Toolbar/Collectors/Events.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Files' => $baseDir . '/system/Debug/Toolbar/Collectors/Files.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\History' => $baseDir . '/system/Debug/Toolbar/Collectors/History.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Logs' => $baseDir . '/system/Debug/Toolbar/Collectors/Logs.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Routes' => $baseDir . '/system/Debug/Toolbar/Collectors/Routes.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Timers' => $baseDir . '/system/Debug/Toolbar/Collectors/Timers.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Views' => $baseDir . '/system/Debug/Toolbar/Collectors/Views.php', - 'CodeIgniter\\Email\\Email' => $baseDir . '/system/Email/Email.php', - 'CodeIgniter\\Encryption\\EncrypterInterface' => $baseDir . '/system/Encryption/EncrypterInterface.php', - 'CodeIgniter\\Encryption\\Encryption' => $baseDir . '/system/Encryption/Encryption.php', - 'CodeIgniter\\Encryption\\Exceptions\\EncryptionException' => $baseDir . '/system/Encryption/Exceptions/EncryptionException.php', - 'CodeIgniter\\Encryption\\Handlers\\BaseHandler' => $baseDir . '/system/Encryption/Handlers/BaseHandler.php', - 'CodeIgniter\\Encryption\\Handlers\\OpenSSLHandler' => $baseDir . '/system/Encryption/Handlers/OpenSSLHandler.php', - 'CodeIgniter\\Encryption\\Handlers\\SodiumHandler' => $baseDir . '/system/Encryption/Handlers/SodiumHandler.php', - 'CodeIgniter\\Entity' => $baseDir . '/system/Entity.php', - 'CodeIgniter\\Entity\\Cast\\ArrayCast' => $baseDir . '/system/Entity/Cast/ArrayCast.php', - 'CodeIgniter\\Entity\\Cast\\BaseCast' => $baseDir . '/system/Entity/Cast/BaseCast.php', - 'CodeIgniter\\Entity\\Cast\\BooleanCast' => $baseDir . '/system/Entity/Cast/BooleanCast.php', - 'CodeIgniter\\Entity\\Cast\\CSVCast' => $baseDir . '/system/Entity/Cast/CSVCast.php', - 'CodeIgniter\\Entity\\Cast\\CastInterface' => $baseDir . '/system/Entity/Cast/CastInterface.php', - 'CodeIgniter\\Entity\\Cast\\DatetimeCast' => $baseDir . '/system/Entity/Cast/DatetimeCast.php', - 'CodeIgniter\\Entity\\Cast\\FloatCast' => $baseDir . '/system/Entity/Cast/FloatCast.php', - 'CodeIgniter\\Entity\\Cast\\IntBoolCast' => $baseDir . '/system/Entity/Cast/IntBoolCast.php', - 'CodeIgniter\\Entity\\Cast\\IntegerCast' => $baseDir . '/system/Entity/Cast/IntegerCast.php', - 'CodeIgniter\\Entity\\Cast\\JsonCast' => $baseDir . '/system/Entity/Cast/JsonCast.php', - 'CodeIgniter\\Entity\\Cast\\ObjectCast' => $baseDir . '/system/Entity/Cast/ObjectCast.php', - 'CodeIgniter\\Entity\\Cast\\StringCast' => $baseDir . '/system/Entity/Cast/StringCast.php', - 'CodeIgniter\\Entity\\Cast\\TimestampCast' => $baseDir . '/system/Entity/Cast/TimestampCast.php', - 'CodeIgniter\\Entity\\Cast\\URICast' => $baseDir . '/system/Entity/Cast/URICast.php', - 'CodeIgniter\\Entity\\Entity' => $baseDir . '/system/Entity/Entity.php', - 'CodeIgniter\\Entity\\Exceptions\\CastException' => $baseDir . '/system/Entity/Exceptions/CastException.php', - 'CodeIgniter\\Events\\Events' => $baseDir . '/system/Events/Events.php', - 'CodeIgniter\\Exceptions\\AlertError' => $baseDir . '/system/Exceptions/AlertError.php', - 'CodeIgniter\\Exceptions\\CastException' => $baseDir . '/system/Exceptions/CastException.php', - 'CodeIgniter\\Exceptions\\ConfigException' => $baseDir . '/system/Exceptions/ConfigException.php', - 'CodeIgniter\\Exceptions\\CriticalError' => $baseDir . '/system/Exceptions/CriticalError.php', - 'CodeIgniter\\Exceptions\\DebugTraceableTrait' => $baseDir . '/system/Exceptions/DebugTraceableTrait.php', - 'CodeIgniter\\Exceptions\\DownloadException' => $baseDir . '/system/Exceptions/DownloadException.php', - 'CodeIgniter\\Exceptions\\EmergencyError' => $baseDir . '/system/Exceptions/EmergencyError.php', - 'CodeIgniter\\Exceptions\\ExceptionInterface' => $baseDir . '/system/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Exceptions\\FrameworkException' => $baseDir . '/system/Exceptions/FrameworkException.php', - 'CodeIgniter\\Exceptions\\HTTPExceptionInterface' => $baseDir . '/system/Exceptions/HTTPExceptionInterface.php', - 'CodeIgniter\\Exceptions\\HasExitCodeInterface' => $baseDir . '/system/Exceptions/HasExitCodeInterface.php', - 'CodeIgniter\\Exceptions\\ModelException' => $baseDir . '/system/Exceptions/ModelException.php', - 'CodeIgniter\\Exceptions\\PageNotFoundException' => $baseDir . '/system/Exceptions/PageNotFoundException.php', - 'CodeIgniter\\Exceptions\\TestException' => $baseDir . '/system/Exceptions/TestException.php', - 'CodeIgniter\\Files\\Exceptions\\FileException' => $baseDir . '/system/Files/Exceptions/FileException.php', - 'CodeIgniter\\Files\\Exceptions\\FileNotFoundException' => $baseDir . '/system/Files/Exceptions/FileNotFoundException.php', - 'CodeIgniter\\Files\\File' => $baseDir . '/system/Files/File.php', - 'CodeIgniter\\Files\\FileCollection' => $baseDir . '/system/Files/FileCollection.php', - 'CodeIgniter\\Filters\\CSRF' => $baseDir . '/system/Filters/CSRF.php', - 'CodeIgniter\\Filters\\DebugToolbar' => $baseDir . '/system/Filters/DebugToolbar.php', - 'CodeIgniter\\Filters\\Exceptions\\FilterException' => $baseDir . '/system/Filters/Exceptions/FilterException.php', - 'CodeIgniter\\Filters\\FilterInterface' => $baseDir . '/system/Filters/FilterInterface.php', - 'CodeIgniter\\Filters\\Filters' => $baseDir . '/system/Filters/Filters.php', - 'CodeIgniter\\Filters\\Honeypot' => $baseDir . '/system/Filters/Honeypot.php', - 'CodeIgniter\\Filters\\InvalidChars' => $baseDir . '/system/Filters/InvalidChars.php', - 'CodeIgniter\\Filters\\SecureHeaders' => $baseDir . '/system/Filters/SecureHeaders.php', - 'CodeIgniter\\Format\\Exceptions\\FormatException' => $baseDir . '/system/Format/Exceptions/FormatException.php', - 'CodeIgniter\\Format\\Format' => $baseDir . '/system/Format/Format.php', - 'CodeIgniter\\Format\\FormatterInterface' => $baseDir . '/system/Format/FormatterInterface.php', - 'CodeIgniter\\Format\\JSONFormatter' => $baseDir . '/system/Format/JSONFormatter.php', - 'CodeIgniter\\Format\\XMLFormatter' => $baseDir . '/system/Format/XMLFormatter.php', - 'CodeIgniter\\HTTP\\CLIRequest' => $baseDir . '/system/HTTP/CLIRequest.php', - 'CodeIgniter\\HTTP\\CURLRequest' => $baseDir . '/system/HTTP/CURLRequest.php', - 'CodeIgniter\\HTTP\\ContentSecurityPolicy' => $baseDir . '/system/HTTP/ContentSecurityPolicy.php', - 'CodeIgniter\\HTTP\\DownloadResponse' => $baseDir . '/system/HTTP/DownloadResponse.php', - 'CodeIgniter\\HTTP\\Exceptions\\HTTPException' => $baseDir . '/system/HTTP/Exceptions/HTTPException.php', - 'CodeIgniter\\HTTP\\Files\\FileCollection' => $baseDir . '/system/HTTP/Files/FileCollection.php', - 'CodeIgniter\\HTTP\\Files\\UploadedFile' => $baseDir . '/system/HTTP/Files/UploadedFile.php', - 'CodeIgniter\\HTTP\\Files\\UploadedFileInterface' => $baseDir . '/system/HTTP/Files/UploadedFileInterface.php', - 'CodeIgniter\\HTTP\\Header' => $baseDir . '/system/HTTP/Header.php', - 'CodeIgniter\\HTTP\\IncomingRequest' => $baseDir . '/system/HTTP/IncomingRequest.php', - 'CodeIgniter\\HTTP\\Message' => $baseDir . '/system/HTTP/Message.php', - 'CodeIgniter\\HTTP\\MessageInterface' => $baseDir . '/system/HTTP/MessageInterface.php', - 'CodeIgniter\\HTTP\\MessageTrait' => $baseDir . '/system/HTTP/MessageTrait.php', - 'CodeIgniter\\HTTP\\Negotiate' => $baseDir . '/system/HTTP/Negotiate.php', - 'CodeIgniter\\HTTP\\OutgoingRequest' => $baseDir . '/system/HTTP/OutgoingRequest.php', - 'CodeIgniter\\HTTP\\OutgoingRequestInterface' => $baseDir . '/system/HTTP/OutgoingRequestInterface.php', - 'CodeIgniter\\HTTP\\RedirectResponse' => $baseDir . '/system/HTTP/RedirectResponse.php', - 'CodeIgniter\\HTTP\\Request' => $baseDir . '/system/HTTP/Request.php', - 'CodeIgniter\\HTTP\\RequestInterface' => $baseDir . '/system/HTTP/RequestInterface.php', - 'CodeIgniter\\HTTP\\RequestTrait' => $baseDir . '/system/HTTP/RequestTrait.php', - 'CodeIgniter\\HTTP\\Response' => $baseDir . '/system/HTTP/Response.php', - 'CodeIgniter\\HTTP\\ResponseInterface' => $baseDir . '/system/HTTP/ResponseInterface.php', - 'CodeIgniter\\HTTP\\ResponseTrait' => $baseDir . '/system/HTTP/ResponseTrait.php', - 'CodeIgniter\\HTTP\\URI' => $baseDir . '/system/HTTP/URI.php', - 'CodeIgniter\\HTTP\\UserAgent' => $baseDir . '/system/HTTP/UserAgent.php', - 'CodeIgniter\\Honeypot\\Exceptions\\HoneypotException' => $baseDir . '/system/Honeypot/Exceptions/HoneypotException.php', - 'CodeIgniter\\Honeypot\\Honeypot' => $baseDir . '/system/Honeypot/Honeypot.php', - 'CodeIgniter\\I18n\\Exceptions\\I18nException' => $baseDir . '/system/I18n/Exceptions/I18nException.php', - 'CodeIgniter\\I18n\\Time' => $baseDir . '/system/I18n/Time.php', - 'CodeIgniter\\I18n\\TimeDifference' => $baseDir . '/system/I18n/TimeDifference.php', - 'CodeIgniter\\I18n\\TimeLegacy' => $baseDir . '/system/I18n/TimeLegacy.php', - 'CodeIgniter\\I18n\\TimeTrait' => $baseDir . '/system/I18n/TimeTrait.php', - 'CodeIgniter\\Images\\Exceptions\\ImageException' => $baseDir . '/system/Images/Exceptions/ImageException.php', - 'CodeIgniter\\Images\\Handlers\\BaseHandler' => $baseDir . '/system/Images/Handlers/BaseHandler.php', - 'CodeIgniter\\Images\\Handlers\\GDHandler' => $baseDir . '/system/Images/Handlers/GDHandler.php', - 'CodeIgniter\\Images\\Handlers\\ImageMagickHandler' => $baseDir . '/system/Images/Handlers/ImageMagickHandler.php', - 'CodeIgniter\\Images\\Image' => $baseDir . '/system/Images/Image.php', - 'CodeIgniter\\Images\\ImageHandlerInterface' => $baseDir . '/system/Images/ImageHandlerInterface.php', - 'CodeIgniter\\Language\\Language' => $baseDir . '/system/Language/Language.php', - 'CodeIgniter\\Log\\Exceptions\\LogException' => $baseDir . '/system/Log/Exceptions/LogException.php', - 'CodeIgniter\\Log\\Handlers\\BaseHandler' => $baseDir . '/system/Log/Handlers/BaseHandler.php', - 'CodeIgniter\\Log\\Handlers\\ChromeLoggerHandler' => $baseDir . '/system/Log/Handlers/ChromeLoggerHandler.php', - 'CodeIgniter\\Log\\Handlers\\ErrorlogHandler' => $baseDir . '/system/Log/Handlers/ErrorlogHandler.php', - 'CodeIgniter\\Log\\Handlers\\FileHandler' => $baseDir . '/system/Log/Handlers/FileHandler.php', - 'CodeIgniter\\Log\\Handlers\\HandlerInterface' => $baseDir . '/system/Log/Handlers/HandlerInterface.php', - 'CodeIgniter\\Log\\Logger' => $baseDir . '/system/Log/Logger.php', - 'CodeIgniter\\Model' => $baseDir . '/system/Model.php', - 'CodeIgniter\\Modules\\Modules' => $baseDir . '/system/Modules/Modules.php', - 'CodeIgniter\\Pager\\Exceptions\\PagerException' => $baseDir . '/system/Pager/Exceptions/PagerException.php', - 'CodeIgniter\\Pager\\Pager' => $baseDir . '/system/Pager/Pager.php', - 'CodeIgniter\\Pager\\PagerInterface' => $baseDir . '/system/Pager/PagerInterface.php', - 'CodeIgniter\\Pager\\PagerRenderer' => $baseDir . '/system/Pager/PagerRenderer.php', - 'CodeIgniter\\Publisher\\ContentReplacer' => $baseDir . '/system/Publisher/ContentReplacer.php', - 'CodeIgniter\\Publisher\\Exceptions\\PublisherException' => $baseDir . '/system/Publisher/Exceptions/PublisherException.php', - 'CodeIgniter\\Publisher\\Publisher' => $baseDir . '/system/Publisher/Publisher.php', - 'CodeIgniter\\RESTful\\BaseResource' => $baseDir . '/system/RESTful/BaseResource.php', - 'CodeIgniter\\RESTful\\ResourceController' => $baseDir . '/system/RESTful/ResourceController.php', - 'CodeIgniter\\RESTful\\ResourcePresenter' => $baseDir . '/system/RESTful/ResourcePresenter.php', - 'CodeIgniter\\Router\\AutoRouter' => $baseDir . '/system/Router/AutoRouter.php', - 'CodeIgniter\\Router\\AutoRouterImproved' => $baseDir . '/system/Router/AutoRouterImproved.php', - 'CodeIgniter\\Router\\AutoRouterInterface' => $baseDir . '/system/Router/AutoRouterInterface.php', - 'CodeIgniter\\Router\\Exceptions\\RedirectException' => $baseDir . '/system/Router/Exceptions/RedirectException.php', - 'CodeIgniter\\Router\\Exceptions\\RouterException' => $baseDir . '/system/Router/Exceptions/RouterException.php', - 'CodeIgniter\\Router\\RouteCollection' => $baseDir . '/system/Router/RouteCollection.php', - 'CodeIgniter\\Router\\RouteCollectionInterface' => $baseDir . '/system/Router/RouteCollectionInterface.php', - 'CodeIgniter\\Router\\Router' => $baseDir . '/system/Router/Router.php', - 'CodeIgniter\\Router\\RouterInterface' => $baseDir . '/system/Router/RouterInterface.php', - 'CodeIgniter\\Security\\Exceptions\\SecurityException' => $baseDir . '/system/Security/Exceptions/SecurityException.php', - 'CodeIgniter\\Security\\Security' => $baseDir . '/system/Security/Security.php', - 'CodeIgniter\\Security\\SecurityInterface' => $baseDir . '/system/Security/SecurityInterface.php', - 'CodeIgniter\\Session\\Exceptions\\SessionException' => $baseDir . '/system/Session/Exceptions/SessionException.php', - 'CodeIgniter\\Session\\Handlers\\ArrayHandler' => $baseDir . '/system/Session/Handlers/ArrayHandler.php', - 'CodeIgniter\\Session\\Handlers\\BaseHandler' => $baseDir . '/system/Session/Handlers/BaseHandler.php', - 'CodeIgniter\\Session\\Handlers\\DatabaseHandler' => $baseDir . '/system/Session/Handlers/DatabaseHandler.php', - 'CodeIgniter\\Session\\Handlers\\Database\\MySQLiHandler' => $baseDir . '/system/Session/Handlers/Database/MySQLiHandler.php', - 'CodeIgniter\\Session\\Handlers\\Database\\PostgreHandler' => $baseDir . '/system/Session/Handlers/Database/PostgreHandler.php', - 'CodeIgniter\\Session\\Handlers\\FileHandler' => $baseDir . '/system/Session/Handlers/FileHandler.php', - 'CodeIgniter\\Session\\Handlers\\MemcachedHandler' => $baseDir . '/system/Session/Handlers/MemcachedHandler.php', - 'CodeIgniter\\Session\\Handlers\\RedisHandler' => $baseDir . '/system/Session/Handlers/RedisHandler.php', - 'CodeIgniter\\Session\\Session' => $baseDir . '/system/Session/Session.php', - 'CodeIgniter\\Session\\SessionInterface' => $baseDir . '/system/Session/SessionInterface.php', - 'CodeIgniter\\Test\\CIDatabaseTestCase' => $baseDir . '/system/Test/CIDatabaseTestCase.php', - 'CodeIgniter\\Test\\CIUnitTestCase' => $baseDir . '/system/Test/CIUnitTestCase.php', - 'CodeIgniter\\Test\\ConfigFromArrayTrait' => $baseDir . '/system/Test/ConfigFromArrayTrait.php', - 'CodeIgniter\\Test\\Constraints\\SeeInDatabase' => $baseDir . '/system/Test/Constraints/SeeInDatabase.php', - 'CodeIgniter\\Test\\ControllerResponse' => $baseDir . '/system/Test/ControllerResponse.php', - 'CodeIgniter\\Test\\ControllerTestTrait' => $baseDir . '/system/Test/ControllerTestTrait.php', - 'CodeIgniter\\Test\\ControllerTester' => $baseDir . '/system/Test/ControllerTester.php', - 'CodeIgniter\\Test\\DOMParser' => $baseDir . '/system/Test/DOMParser.php', - 'CodeIgniter\\Test\\DatabaseTestTrait' => $baseDir . '/system/Test/DatabaseTestTrait.php', - 'CodeIgniter\\Test\\Fabricator' => $baseDir . '/system/Test/Fabricator.php', - 'CodeIgniter\\Test\\FeatureResponse' => $baseDir . '/system/Test/FeatureResponse.php', - 'CodeIgniter\\Test\\FeatureTestCase' => $baseDir . '/system/Test/FeatureTestCase.php', - 'CodeIgniter\\Test\\FeatureTestTrait' => $baseDir . '/system/Test/FeatureTestTrait.php', - 'CodeIgniter\\Test\\FilterTestTrait' => $baseDir . '/system/Test/FilterTestTrait.php', - 'CodeIgniter\\Test\\Filters\\CITestStreamFilter' => $baseDir . '/system/Test/Filters/CITestStreamFilter.php', - 'CodeIgniter\\Test\\Interfaces\\FabricatorModel' => $baseDir . '/system/Test/Interfaces/FabricatorModel.php', - 'CodeIgniter\\Test\\Mock\\MockAppConfig' => $baseDir . '/system/Test/Mock/MockAppConfig.php', - 'CodeIgniter\\Test\\Mock\\MockAutoload' => $baseDir . '/system/Test/Mock/MockAutoload.php', - 'CodeIgniter\\Test\\Mock\\MockBuilder' => $baseDir . '/system/Test/Mock/MockBuilder.php', - 'CodeIgniter\\Test\\Mock\\MockCLIConfig' => $baseDir . '/system/Test/Mock/MockCLIConfig.php', - 'CodeIgniter\\Test\\Mock\\MockCURLRequest' => $baseDir . '/system/Test/Mock/MockCURLRequest.php', - 'CodeIgniter\\Test\\Mock\\MockCache' => $baseDir . '/system/Test/Mock/MockCache.php', - 'CodeIgniter\\Test\\Mock\\MockCodeIgniter' => $baseDir . '/system/Test/Mock/MockCodeIgniter.php', - 'CodeIgniter\\Test\\Mock\\MockConnection' => $baseDir . '/system/Test/Mock/MockConnection.php', - 'CodeIgniter\\Test\\Mock\\MockEmail' => $baseDir . '/system/Test/Mock/MockEmail.php', - 'CodeIgniter\\Test\\Mock\\MockEvents' => $baseDir . '/system/Test/Mock/MockEvents.php', - 'CodeIgniter\\Test\\Mock\\MockFileLogger' => $baseDir . '/system/Test/Mock/MockFileLogger.php', - 'CodeIgniter\\Test\\Mock\\MockIncomingRequest' => $baseDir . '/system/Test/Mock/MockIncomingRequest.php', - 'CodeIgniter\\Test\\Mock\\MockLanguage' => $baseDir . '/system/Test/Mock/MockLanguage.php', - 'CodeIgniter\\Test\\Mock\\MockLogger' => $baseDir . '/system/Test/Mock/MockLogger.php', - 'CodeIgniter\\Test\\Mock\\MockQuery' => $baseDir . '/system/Test/Mock/MockQuery.php', - 'CodeIgniter\\Test\\Mock\\MockResourceController' => $baseDir . '/system/Test/Mock/MockResourceController.php', - 'CodeIgniter\\Test\\Mock\\MockResourcePresenter' => $baseDir . '/system/Test/Mock/MockResourcePresenter.php', - 'CodeIgniter\\Test\\Mock\\MockResponse' => $baseDir . '/system/Test/Mock/MockResponse.php', - 'CodeIgniter\\Test\\Mock\\MockResult' => $baseDir . '/system/Test/Mock/MockResult.php', - 'CodeIgniter\\Test\\Mock\\MockSecurity' => $baseDir . '/system/Test/Mock/MockSecurity.php', - 'CodeIgniter\\Test\\Mock\\MockSecurityConfig' => $baseDir . '/system/Test/Mock/MockSecurityConfig.php', - 'CodeIgniter\\Test\\Mock\\MockServices' => $baseDir . '/system/Test/Mock/MockServices.php', - 'CodeIgniter\\Test\\Mock\\MockSession' => $baseDir . '/system/Test/Mock/MockSession.php', - 'CodeIgniter\\Test\\Mock\\MockTable' => $baseDir . '/system/Test/Mock/MockTable.php', - 'CodeIgniter\\Test\\PhpStreamWrapper' => $baseDir . '/system/Test/PhpStreamWrapper.php', - 'CodeIgniter\\Test\\ReflectionHelper' => $baseDir . '/system/Test/ReflectionHelper.php', - 'CodeIgniter\\Test\\StreamFilterTrait' => $baseDir . '/system/Test/StreamFilterTrait.php', - 'CodeIgniter\\Test\\TestLogger' => $baseDir . '/system/Test/TestLogger.php', - 'CodeIgniter\\Test\\TestResponse' => $baseDir . '/system/Test/TestResponse.php', - 'CodeIgniter\\Throttle\\Throttler' => $baseDir . '/system/Throttle/Throttler.php', - 'CodeIgniter\\Throttle\\ThrottlerInterface' => $baseDir . '/system/Throttle/ThrottlerInterface.php', - 'CodeIgniter\\Traits\\ConditionalTrait' => $baseDir . '/system/Traits/ConditionalTrait.php', - 'CodeIgniter\\Traits\\PropertiesTrait' => $baseDir . '/system/Traits/PropertiesTrait.php', - 'CodeIgniter\\Typography\\Typography' => $baseDir . '/system/Typography/Typography.php', - 'CodeIgniter\\Validation\\CreditCardRules' => $baseDir . '/system/Validation/CreditCardRules.php', - 'CodeIgniter\\Validation\\Exceptions\\ValidationException' => $baseDir . '/system/Validation/Exceptions/ValidationException.php', - 'CodeIgniter\\Validation\\FileRules' => $baseDir . '/system/Validation/FileRules.php', - 'CodeIgniter\\Validation\\FormatRules' => $baseDir . '/system/Validation/FormatRules.php', - 'CodeIgniter\\Validation\\Rules' => $baseDir . '/system/Validation/Rules.php', - 'CodeIgniter\\Validation\\StrictRules\\CreditCardRules' => $baseDir . '/system/Validation/StrictRules/CreditCardRules.php', - 'CodeIgniter\\Validation\\StrictRules\\FileRules' => $baseDir . '/system/Validation/StrictRules/FileRules.php', - 'CodeIgniter\\Validation\\StrictRules\\FormatRules' => $baseDir . '/system/Validation/StrictRules/FormatRules.php', - 'CodeIgniter\\Validation\\StrictRules\\Rules' => $baseDir . '/system/Validation/StrictRules/Rules.php', - 'CodeIgniter\\Validation\\Validation' => $baseDir . '/system/Validation/Validation.php', - 'CodeIgniter\\Validation\\ValidationInterface' => $baseDir . '/system/Validation/ValidationInterface.php', - 'CodeIgniter\\View\\Cell' => $baseDir . '/system/View/Cell.php', - 'CodeIgniter\\View\\Cells\\Cell' => $baseDir . '/system/View/Cells/Cell.php', - 'CodeIgniter\\View\\Exceptions\\ViewException' => $baseDir . '/system/View/Exceptions/ViewException.php', - 'CodeIgniter\\View\\Filters' => $baseDir . '/system/View/Filters.php', - 'CodeIgniter\\View\\Parser' => $baseDir . '/system/View/Parser.php', - 'CodeIgniter\\View\\Plugins' => $baseDir . '/system/View/Plugins.php', - 'CodeIgniter\\View\\RendererInterface' => $baseDir . '/system/View/RendererInterface.php', - 'CodeIgniter\\View\\Table' => $baseDir . '/system/View/Table.php', - 'CodeIgniter\\View\\View' => $baseDir . '/system/View/View.php', - 'CodeIgniter\\View\\ViewDecoratorInterface' => $baseDir . '/system/View/ViewDecoratorInterface.php', - 'CodeIgniter\\View\\ViewDecoratorTrait' => $baseDir . '/system/View/ViewDecoratorTrait.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'Composer\\Pcre\\MatchAllResult' => $vendorDir . '/composer/pcre/src/MatchAllResult.php', - 'Composer\\Pcre\\MatchAllStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchAllStrictGroupsResult.php', - 'Composer\\Pcre\\MatchAllWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchAllWithOffsetsResult.php', - 'Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php', - 'Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php', - 'Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php', - 'Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php', - 'Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php', - 'Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php', - 'Composer\\Pcre\\ReplaceResult' => $vendorDir . '/composer/pcre/src/ReplaceResult.php', - 'Composer\\Pcre\\UnexpectedNullMatchException' => $vendorDir . '/composer/pcre/src/UnexpectedNullMatchException.php', - 'Composer\\Semver\\Comparator' => $vendorDir . '/composer/semver/src/Comparator.php', - 'Composer\\Semver\\CompilingMatcher' => $vendorDir . '/composer/semver/src/CompilingMatcher.php', - 'Composer\\Semver\\Constraint\\Bound' => $vendorDir . '/composer/semver/src/Constraint/Bound.php', - 'Composer\\Semver\\Constraint\\Constraint' => $vendorDir . '/composer/semver/src/Constraint/Constraint.php', - 'Composer\\Semver\\Constraint\\ConstraintInterface' => $vendorDir . '/composer/semver/src/Constraint/ConstraintInterface.php', - 'Composer\\Semver\\Constraint\\MatchAllConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchAllConstraint.php', - 'Composer\\Semver\\Constraint\\MatchNoneConstraint' => $vendorDir . '/composer/semver/src/Constraint/MatchNoneConstraint.php', - 'Composer\\Semver\\Constraint\\MultiConstraint' => $vendorDir . '/composer/semver/src/Constraint/MultiConstraint.php', - 'Composer\\Semver\\Interval' => $vendorDir . '/composer/semver/src/Interval.php', - 'Composer\\Semver\\Intervals' => $vendorDir . '/composer/semver/src/Intervals.php', - 'Composer\\Semver\\Semver' => $vendorDir . '/composer/semver/src/Semver.php', - 'Composer\\Semver\\VersionParser' => $vendorDir . '/composer/semver/src/VersionParser.php', - 'Composer\\XdebugHandler\\PhpConfig' => $vendorDir . '/composer/xdebug-handler/src/PhpConfig.php', - 'Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php', - 'Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php', - 'Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php', - 'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', - 'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', - 'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', - 'DeepCopy\\Filter\\ChainableFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', - 'DeepCopy\\Filter\\Filter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php', - 'DeepCopy\\Filter\\KeepFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php', - 'DeepCopy\\Filter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php', - 'DeepCopy\\Filter\\SetNullFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php', - 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', - 'DeepCopy\\Matcher\\Matcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php', - 'DeepCopy\\Matcher\\PropertyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php', - 'DeepCopy\\Matcher\\PropertyNameMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php', - 'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php', - 'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php', - 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', - 'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', - 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', - 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', - 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', - 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', - 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', - 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Annotations\\Annotation' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php', - 'Doctrine\\Common\\Annotations\\AnnotationException' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php', - 'Doctrine\\Common\\Annotations\\AnnotationReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php', - 'Doctrine\\Common\\Annotations\\AnnotationRegistry' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Attribute' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Attributes' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Enum' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php', - 'Doctrine\\Common\\Annotations\\Annotation\\IgnoreAnnotation' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php', - 'Doctrine\\Common\\Annotations\\Annotation\\NamedArgumentConstructor' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Required' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Target' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php', - 'Doctrine\\Common\\Annotations\\CachedReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php', - 'Doctrine\\Common\\Annotations\\DocLexer' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php', - 'Doctrine\\Common\\Annotations\\DocParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php', - 'Doctrine\\Common\\Annotations\\FileCacheReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php', - 'Doctrine\\Common\\Annotations\\ImplicitlyIgnoredAnnotationNames' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php', - 'Doctrine\\Common\\Annotations\\IndexedReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php', - 'Doctrine\\Common\\Annotations\\NamedArgumentConstructorAnnotation' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php', - 'Doctrine\\Common\\Annotations\\PhpParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php', - 'Doctrine\\Common\\Annotations\\PsrCachedReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php', - 'Doctrine\\Common\\Annotations\\Reader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php', - 'Doctrine\\Common\\Annotations\\SimpleAnnotationReader' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php', - 'Doctrine\\Common\\Annotations\\TokenParser' => $vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php', - 'Doctrine\\Common\\Lexer\\AbstractLexer' => $vendorDir . '/doctrine/lexer/src/AbstractLexer.php', - 'Doctrine\\Common\\Lexer\\Token' => $vendorDir . '/doctrine/lexer/src/Token.php', - 'Doctrine\\Deprecations\\Deprecation' => $vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php', - 'Doctrine\\Deprecations\\PHPUnit\\VerifyDeprecations' => $vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php', - 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', - 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', - 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', - 'Doctrine\\Instantiator\\Instantiator' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', - 'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', - 'Faker\\Calculator\\Ean' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/Ean.php', - 'Faker\\Calculator\\Iban' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/Iban.php', - 'Faker\\Calculator\\Inn' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/Inn.php', - 'Faker\\Calculator\\Isbn' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/Isbn.php', - 'Faker\\Calculator\\Luhn' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/Luhn.php', - 'Faker\\Calculator\\TCNo' => $vendorDir . '/fakerphp/faker/src/Faker/Calculator/TCNo.php', - 'Faker\\ChanceGenerator' => $vendorDir . '/fakerphp/faker/src/Faker/ChanceGenerator.php', - 'Faker\\Container\\Container' => $vendorDir . '/fakerphp/faker/src/Faker/Container/Container.php', - 'Faker\\Container\\ContainerBuilder' => $vendorDir . '/fakerphp/faker/src/Faker/Container/ContainerBuilder.php', - 'Faker\\Container\\ContainerException' => $vendorDir . '/fakerphp/faker/src/Faker/Container/ContainerException.php', - 'Faker\\Container\\ContainerInterface' => $vendorDir . '/fakerphp/faker/src/Faker/Container/ContainerInterface.php', - 'Faker\\Container\\NotInContainerException' => $vendorDir . '/fakerphp/faker/src/Faker/Container/NotInContainerException.php', - 'Faker\\Core\\Barcode' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Barcode.php', - 'Faker\\Core\\Blood' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Blood.php', - 'Faker\\Core\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Color.php', - 'Faker\\Core\\Coordinates' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Coordinates.php', - 'Faker\\Core\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Core/DateTime.php', - 'Faker\\Core\\File' => $vendorDir . '/fakerphp/faker/src/Faker/Core/File.php', - 'Faker\\Core\\Number' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Number.php', - 'Faker\\Core\\Uuid' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Uuid.php', - 'Faker\\Core\\Version' => $vendorDir . '/fakerphp/faker/src/Faker/Core/Version.php', - 'Faker\\DefaultGenerator' => $vendorDir . '/fakerphp/faker/src/Faker/DefaultGenerator.php', - 'Faker\\Documentor' => $vendorDir . '/fakerphp/faker/src/Faker/Documentor.php', - 'Faker\\Extension\\AddressExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/AddressExtension.php', - 'Faker\\Extension\\BarcodeExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/BarcodeExtension.php', - 'Faker\\Extension\\BloodExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/BloodExtension.php', - 'Faker\\Extension\\ColorExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/ColorExtension.php', - 'Faker\\Extension\\CompanyExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/CompanyExtension.php', - 'Faker\\Extension\\CountryExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/CountryExtension.php', - 'Faker\\Extension\\DateTimeExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/DateTimeExtension.php', - 'Faker\\Extension\\Extension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/Extension.php', - 'Faker\\Extension\\ExtensionNotFound' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/ExtensionNotFound.php', - 'Faker\\Extension\\FileExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/FileExtension.php', - 'Faker\\Extension\\GeneratorAwareExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtension.php', - 'Faker\\Extension\\GeneratorAwareExtensionTrait' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtensionTrait.php', - 'Faker\\Extension\\Helper' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/Helper.php', - 'Faker\\Extension\\NumberExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/NumberExtension.php', - 'Faker\\Extension\\PersonExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/PersonExtension.php', - 'Faker\\Extension\\PhoneNumberExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/PhoneNumberExtension.php', - 'Faker\\Extension\\UuidExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/UuidExtension.php', - 'Faker\\Extension\\VersionExtension' => $vendorDir . '/fakerphp/faker/src/Faker/Extension/VersionExtension.php', - 'Faker\\Factory' => $vendorDir . '/fakerphp/faker/src/Faker/Factory.php', - 'Faker\\Generator' => $vendorDir . '/fakerphp/faker/src/Faker/Generator.php', - 'Faker\\Guesser\\Name' => $vendorDir . '/fakerphp/faker/src/Faker/Guesser/Name.php', - 'Faker\\ORM\\CakePHP\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php', - 'Faker\\ORM\\CakePHP\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php', - 'Faker\\ORM\\CakePHP\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php', - 'Faker\\ORM\\Doctrine\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php', - 'Faker\\ORM\\Doctrine\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php', - 'Faker\\ORM\\Doctrine\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php', - 'Faker\\ORM\\Mandango\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Mandango/ColumnTypeGuesser.php', - 'Faker\\ORM\\Mandango\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php', - 'Faker\\ORM\\Mandango\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php', - 'Faker\\ORM\\Propel2\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php', - 'Faker\\ORM\\Propel2\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php', - 'Faker\\ORM\\Propel2\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php', - 'Faker\\ORM\\Propel\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php', - 'Faker\\ORM\\Propel\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php', - 'Faker\\ORM\\Propel\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Propel/Populator.php', - 'Faker\\ORM\\Spot\\ColumnTypeGuesser' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php', - 'Faker\\ORM\\Spot\\EntityPopulator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php', - 'Faker\\ORM\\Spot\\Populator' => $vendorDir . '/fakerphp/faker/src/Faker/ORM/Spot/Populator.php', - 'Faker\\Provider\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Address.php', - 'Faker\\Provider\\Barcode' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Barcode.php', - 'Faker\\Provider\\Base' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Base.php', - 'Faker\\Provider\\Biased' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Biased.php', - 'Faker\\Provider\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Color.php', - 'Faker\\Provider\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Company.php', - 'Faker\\Provider\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/DateTime.php', - 'Faker\\Provider\\File' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/File.php', - 'Faker\\Provider\\HtmlLorem' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/HtmlLorem.php', - 'Faker\\Provider\\Image' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Image.php', - 'Faker\\Provider\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Internet.php', - 'Faker\\Provider\\Lorem' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Lorem.php', - 'Faker\\Provider\\Medical' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Medical.php', - 'Faker\\Provider\\Miscellaneous' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Miscellaneous.php', - 'Faker\\Provider\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Payment.php', - 'Faker\\Provider\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Person.php', - 'Faker\\Provider\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/PhoneNumber.php', - 'Faker\\Provider\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Text.php', - 'Faker\\Provider\\UserAgent' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/UserAgent.php', - 'Faker\\Provider\\Uuid' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/Uuid.php', - 'Faker\\Provider\\ar_EG\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php', - 'Faker\\Provider\\ar_EG\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php', - 'Faker\\Provider\\ar_EG\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Company.php', - 'Faker\\Provider\\ar_EG\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Internet.php', - 'Faker\\Provider\\ar_EG\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php', - 'Faker\\Provider\\ar_EG\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Person.php', - 'Faker\\Provider\\ar_EG\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php', - 'Faker\\Provider\\ar_JO\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_JO/Address.php', - 'Faker\\Provider\\ar_JO\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_JO/Company.php', - 'Faker\\Provider\\ar_JO\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_JO/Internet.php', - 'Faker\\Provider\\ar_JO\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php', - 'Faker\\Provider\\ar_JO\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_JO/Text.php', - 'Faker\\Provider\\ar_SA\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Address.php', - 'Faker\\Provider\\ar_SA\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Color.php', - 'Faker\\Provider\\ar_SA\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Company.php', - 'Faker\\Provider\\ar_SA\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Internet.php', - 'Faker\\Provider\\ar_SA\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php', - 'Faker\\Provider\\ar_SA\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Person.php', - 'Faker\\Provider\\ar_SA\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ar_SA/Text.php', - 'Faker\\Provider\\at_AT\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/at_AT/Payment.php', - 'Faker\\Provider\\bg_BG\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bg_BG/Internet.php', - 'Faker\\Provider\\bg_BG\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bg_BG/Payment.php', - 'Faker\\Provider\\bg_BG\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bg_BG/Person.php', - 'Faker\\Provider\\bg_BG\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php', - 'Faker\\Provider\\bn_BD\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bn_BD/Address.php', - 'Faker\\Provider\\bn_BD\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bn_BD/Company.php', - 'Faker\\Provider\\bn_BD\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bn_BD/Person.php', - 'Faker\\Provider\\bn_BD\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bn_BD/PhoneNumber.php', - 'Faker\\Provider\\bn_BD\\Utils' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/bn_BD/Utils.php', - 'Faker\\Provider\\cs_CZ\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Address.php', - 'Faker\\Provider\\cs_CZ\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Company.php', - 'Faker\\Provider\\cs_CZ\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php', - 'Faker\\Provider\\cs_CZ\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php', - 'Faker\\Provider\\cs_CZ\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Payment.php', - 'Faker\\Provider\\cs_CZ\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Person.php', - 'Faker\\Provider\\cs_CZ\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php', - 'Faker\\Provider\\cs_CZ\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Text.php', - 'Faker\\Provider\\da_DK\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/Address.php', - 'Faker\\Provider\\da_DK\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/Company.php', - 'Faker\\Provider\\da_DK\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/Internet.php', - 'Faker\\Provider\\da_DK\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/Payment.php', - 'Faker\\Provider\\da_DK\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/Person.php', - 'Faker\\Provider\\da_DK\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php', - 'Faker\\Provider\\de_AT\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Address.php', - 'Faker\\Provider\\de_AT\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Company.php', - 'Faker\\Provider\\de_AT\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Internet.php', - 'Faker\\Provider\\de_AT\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Payment.php', - 'Faker\\Provider\\de_AT\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Person.php', - 'Faker\\Provider\\de_AT\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php', - 'Faker\\Provider\\de_AT\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_AT/Text.php', - 'Faker\\Provider\\de_CH\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Address.php', - 'Faker\\Provider\\de_CH\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Company.php', - 'Faker\\Provider\\de_CH\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Internet.php', - 'Faker\\Provider\\de_CH\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Payment.php', - 'Faker\\Provider\\de_CH\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Person.php', - 'Faker\\Provider\\de_CH\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/PhoneNumber.php', - 'Faker\\Provider\\de_CH\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_CH/Text.php', - 'Faker\\Provider\\de_DE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Address.php', - 'Faker\\Provider\\de_DE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Company.php', - 'Faker\\Provider\\de_DE\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Internet.php', - 'Faker\\Provider\\de_DE\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Payment.php', - 'Faker\\Provider\\de_DE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Person.php', - 'Faker\\Provider\\de_DE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/PhoneNumber.php', - 'Faker\\Provider\\de_DE\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/de_DE/Text.php', - 'Faker\\Provider\\el_CY\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/Address.php', - 'Faker\\Provider\\el_CY\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/Company.php', - 'Faker\\Provider\\el_CY\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/Internet.php', - 'Faker\\Provider\\el_CY\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/Payment.php', - 'Faker\\Provider\\el_CY\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/Person.php', - 'Faker\\Provider\\el_CY\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_CY/PhoneNumber.php', - 'Faker\\Provider\\el_GR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/Address.php', - 'Faker\\Provider\\el_GR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/Company.php', - 'Faker\\Provider\\el_GR\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/Payment.php', - 'Faker\\Provider\\el_GR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/Person.php', - 'Faker\\Provider\\el_GR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php', - 'Faker\\Provider\\el_GR\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/el_GR/Text.php', - 'Faker\\Provider\\en_AU\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_AU/Address.php', - 'Faker\\Provider\\en_AU\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_AU/Internet.php', - 'Faker\\Provider\\en_AU\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_AU/PhoneNumber.php', - 'Faker\\Provider\\en_CA\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_CA/Address.php', - 'Faker\\Provider\\en_CA\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_CA/PhoneNumber.php', - 'Faker\\Provider\\en_GB\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/Address.php', - 'Faker\\Provider\\en_GB\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/Company.php', - 'Faker\\Provider\\en_GB\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php', - 'Faker\\Provider\\en_GB\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/Payment.php', - 'Faker\\Provider\\en_GB\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/Person.php', - 'Faker\\Provider\\en_GB\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_GB/PhoneNumber.php', - 'Faker\\Provider\\en_HK\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_HK/Address.php', - 'Faker\\Provider\\en_HK\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php', - 'Faker\\Provider\\en_HK\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_HK/PhoneNumber.php', - 'Faker\\Provider\\en_IN\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_IN/Address.php', - 'Faker\\Provider\\en_IN\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php', - 'Faker\\Provider\\en_IN\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_IN/Person.php', - 'Faker\\Provider\\en_IN\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_IN/PhoneNumber.php', - 'Faker\\Provider\\en_NG\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NG/Address.php', - 'Faker\\Provider\\en_NG\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NG/Internet.php', - 'Faker\\Provider\\en_NG\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NG/Person.php', - 'Faker\\Provider\\en_NG\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NG/PhoneNumber.php', - 'Faker\\Provider\\en_NZ\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NZ/Address.php', - 'Faker\\Provider\\en_NZ\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NZ/Internet.php', - 'Faker\\Provider\\en_NZ\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_NZ/PhoneNumber.php', - 'Faker\\Provider\\en_PH\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_PH/Address.php', - 'Faker\\Provider\\en_PH\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_PH/PhoneNumber.php', - 'Faker\\Provider\\en_SG\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_SG/Address.php', - 'Faker\\Provider\\en_SG\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_SG/Person.php', - 'Faker\\Provider\\en_SG\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php', - 'Faker\\Provider\\en_UG\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_UG/Address.php', - 'Faker\\Provider\\en_UG\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_UG/Internet.php', - 'Faker\\Provider\\en_UG\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_UG/Person.php', - 'Faker\\Provider\\en_UG\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_UG/PhoneNumber.php', - 'Faker\\Provider\\en_US\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/Address.php', - 'Faker\\Provider\\en_US\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/Company.php', - 'Faker\\Provider\\en_US\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/Payment.php', - 'Faker\\Provider\\en_US\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/Person.php', - 'Faker\\Provider\\en_US\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/PhoneNumber.php', - 'Faker\\Provider\\en_US\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_US/Text.php', - 'Faker\\Provider\\en_ZA\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_ZA/Address.php', - 'Faker\\Provider\\en_ZA\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_ZA/Company.php', - 'Faker\\Provider\\en_ZA\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php', - 'Faker\\Provider\\en_ZA\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_ZA/Person.php', - 'Faker\\Provider\\en_ZA\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php', - 'Faker\\Provider\\es_AR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_AR/Address.php', - 'Faker\\Provider\\es_AR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_AR/Company.php', - 'Faker\\Provider\\es_AR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_AR/Person.php', - 'Faker\\Provider\\es_AR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_AR/PhoneNumber.php', - 'Faker\\Provider\\es_ES\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Address.php', - 'Faker\\Provider\\es_ES\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Color.php', - 'Faker\\Provider\\es_ES\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Company.php', - 'Faker\\Provider\\es_ES\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Internet.php', - 'Faker\\Provider\\es_ES\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Payment.php', - 'Faker\\Provider\\es_ES\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Person.php', - 'Faker\\Provider\\es_ES\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/PhoneNumber.php', - 'Faker\\Provider\\es_ES\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_ES/Text.php', - 'Faker\\Provider\\es_PE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_PE/Address.php', - 'Faker\\Provider\\es_PE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_PE/Company.php', - 'Faker\\Provider\\es_PE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_PE/Person.php', - 'Faker\\Provider\\es_PE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_PE/PhoneNumber.php', - 'Faker\\Provider\\es_VE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_VE/Address.php', - 'Faker\\Provider\\es_VE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_VE/Company.php', - 'Faker\\Provider\\es_VE\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_VE/Internet.php', - 'Faker\\Provider\\es_VE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_VE/Person.php', - 'Faker\\Provider\\es_VE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php', - 'Faker\\Provider\\et_EE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/et_EE/Person.php', - 'Faker\\Provider\\fa_IR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/Address.php', - 'Faker\\Provider\\fa_IR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php', - 'Faker\\Provider\\fa_IR\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/Internet.php', - 'Faker\\Provider\\fa_IR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php', - 'Faker\\Provider\\fa_IR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php', - 'Faker\\Provider\\fa_IR\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fa_IR/Text.php', - 'Faker\\Provider\\fi_FI\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php', - 'Faker\\Provider\\fi_FI\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/Company.php', - 'Faker\\Provider\\fi_FI\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/Internet.php', - 'Faker\\Provider\\fi_FI\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/Payment.php', - 'Faker\\Provider\\fi_FI\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/Person.php', - 'Faker\\Provider\\fi_FI\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php', - 'Faker\\Provider\\fr_BE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Address.php', - 'Faker\\Provider\\fr_BE\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Color.php', - 'Faker\\Provider\\fr_BE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Company.php', - 'Faker\\Provider\\fr_BE\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Internet.php', - 'Faker\\Provider\\fr_BE\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Payment.php', - 'Faker\\Provider\\fr_BE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/Person.php', - 'Faker\\Provider\\fr_BE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_BE/PhoneNumber.php', - 'Faker\\Provider\\fr_CA\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CA/Address.php', - 'Faker\\Provider\\fr_CA\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CA/Color.php', - 'Faker\\Provider\\fr_CA\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CA/Company.php', - 'Faker\\Provider\\fr_CA\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CA/Person.php', - 'Faker\\Provider\\fr_CA\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CA/Text.php', - 'Faker\\Provider\\fr_CH\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Address.php', - 'Faker\\Provider\\fr_CH\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php', - 'Faker\\Provider\\fr_CH\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Company.php', - 'Faker\\Provider\\fr_CH\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Internet.php', - 'Faker\\Provider\\fr_CH\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Payment.php', - 'Faker\\Provider\\fr_CH\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Person.php', - 'Faker\\Provider\\fr_CH\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/PhoneNumber.php', - 'Faker\\Provider\\fr_CH\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_CH/Text.php', - 'Faker\\Provider\\fr_FR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Address.php', - 'Faker\\Provider\\fr_FR\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php', - 'Faker\\Provider\\fr_FR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Company.php', - 'Faker\\Provider\\fr_FR\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php', - 'Faker\\Provider\\fr_FR\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Payment.php', - 'Faker\\Provider\\fr_FR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Person.php', - 'Faker\\Provider\\fr_FR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php', - 'Faker\\Provider\\fr_FR\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php', - 'Faker\\Provider\\he_IL\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/he_IL/Address.php', - 'Faker\\Provider\\he_IL\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/he_IL/Company.php', - 'Faker\\Provider\\he_IL\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/he_IL/Payment.php', - 'Faker\\Provider\\he_IL\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/he_IL/Person.php', - 'Faker\\Provider\\he_IL\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/he_IL/PhoneNumber.php', - 'Faker\\Provider\\hr_HR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hr_HR/Address.php', - 'Faker\\Provider\\hr_HR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hr_HR/Company.php', - 'Faker\\Provider\\hr_HR\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hr_HR/Payment.php', - 'Faker\\Provider\\hr_HR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hr_HR/Person.php', - 'Faker\\Provider\\hr_HR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hr_HR/PhoneNumber.php', - 'Faker\\Provider\\hu_HU\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/Address.php', - 'Faker\\Provider\\hu_HU\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php', - 'Faker\\Provider\\hu_HU\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/Payment.php', - 'Faker\\Provider\\hu_HU\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/Person.php', - 'Faker\\Provider\\hu_HU\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/PhoneNumber.php', - 'Faker\\Provider\\hu_HU\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hu_HU/Text.php', - 'Faker\\Provider\\hy_AM\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/Address.php', - 'Faker\\Provider\\hy_AM\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php', - 'Faker\\Provider\\hy_AM\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/Company.php', - 'Faker\\Provider\\hy_AM\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/Internet.php', - 'Faker\\Provider\\hy_AM\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/Person.php', - 'Faker\\Provider\\hy_AM\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/hy_AM/PhoneNumber.php', - 'Faker\\Provider\\id_ID\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/Address.php', - 'Faker\\Provider\\id_ID\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/Color.php', - 'Faker\\Provider\\id_ID\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/Company.php', - 'Faker\\Provider\\id_ID\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/Internet.php', - 'Faker\\Provider\\id_ID\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/Person.php', - 'Faker\\Provider\\id_ID\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php', - 'Faker\\Provider\\is_IS\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/Address.php', - 'Faker\\Provider\\is_IS\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/Company.php', - 'Faker\\Provider\\is_IS\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/Internet.php', - 'Faker\\Provider\\is_IS\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/Payment.php', - 'Faker\\Provider\\is_IS\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/Person.php', - 'Faker\\Provider\\is_IS\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php', - 'Faker\\Provider\\it_CH\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Address.php', - 'Faker\\Provider\\it_CH\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Company.php', - 'Faker\\Provider\\it_CH\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Internet.php', - 'Faker\\Provider\\it_CH\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Payment.php', - 'Faker\\Provider\\it_CH\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Person.php', - 'Faker\\Provider\\it_CH\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/PhoneNumber.php', - 'Faker\\Provider\\it_CH\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_CH/Text.php', - 'Faker\\Provider\\it_IT\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Address.php', - 'Faker\\Provider\\it_IT\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Company.php', - 'Faker\\Provider\\it_IT\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Internet.php', - 'Faker\\Provider\\it_IT\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Payment.php', - 'Faker\\Provider\\it_IT\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Person.php', - 'Faker\\Provider\\it_IT\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/PhoneNumber.php', - 'Faker\\Provider\\it_IT\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/it_IT/Text.php', - 'Faker\\Provider\\ja_JP\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/Address.php', - 'Faker\\Provider\\ja_JP\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php', - 'Faker\\Provider\\ja_JP\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/Internet.php', - 'Faker\\Provider\\ja_JP\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php', - 'Faker\\Provider\\ja_JP\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php', - 'Faker\\Provider\\ja_JP\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ja_JP/Text.php', - 'Faker\\Provider\\ka_GE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Address.php', - 'Faker\\Provider\\ka_GE\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Color.php', - 'Faker\\Provider\\ka_GE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Company.php', - 'Faker\\Provider\\ka_GE\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php', - 'Faker\\Provider\\ka_GE\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php', - 'Faker\\Provider\\ka_GE\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Payment.php', - 'Faker\\Provider\\ka_GE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Person.php', - 'Faker\\Provider\\ka_GE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/PhoneNumber.php', - 'Faker\\Provider\\ka_GE\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ka_GE/Text.php', - 'Faker\\Provider\\kk_KZ\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Address.php', - 'Faker\\Provider\\kk_KZ\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Color.php', - 'Faker\\Provider\\kk_KZ\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Company.php', - 'Faker\\Provider\\kk_KZ\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php', - 'Faker\\Provider\\kk_KZ\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Payment.php', - 'Faker\\Provider\\kk_KZ\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Person.php', - 'Faker\\Provider\\kk_KZ\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php', - 'Faker\\Provider\\kk_KZ\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Text.php', - 'Faker\\Provider\\ko_KR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/Address.php', - 'Faker\\Provider\\ko_KR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/Company.php', - 'Faker\\Provider\\ko_KR\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/Internet.php', - 'Faker\\Provider\\ko_KR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php', - 'Faker\\Provider\\ko_KR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/PhoneNumber.php', - 'Faker\\Provider\\ko_KR\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php', - 'Faker\\Provider\\lt_LT\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php', - 'Faker\\Provider\\lt_LT\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php', - 'Faker\\Provider\\lt_LT\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/Internet.php', - 'Faker\\Provider\\lt_LT\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/Payment.php', - 'Faker\\Provider\\lt_LT\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/Person.php', - 'Faker\\Provider\\lt_LT\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php', - 'Faker\\Provider\\lv_LV\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/Address.php', - 'Faker\\Provider\\lv_LV\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php', - 'Faker\\Provider\\lv_LV\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/Internet.php', - 'Faker\\Provider\\lv_LV\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/Payment.php', - 'Faker\\Provider\\lv_LV\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/Person.php', - 'Faker\\Provider\\lv_LV\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php', - 'Faker\\Provider\\me_ME\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/me_ME/Address.php', - 'Faker\\Provider\\me_ME\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/me_ME/Company.php', - 'Faker\\Provider\\me_ME\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/me_ME/Payment.php', - 'Faker\\Provider\\me_ME\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/me_ME/Person.php', - 'Faker\\Provider\\me_ME\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/me_ME/PhoneNumber.php', - 'Faker\\Provider\\mn_MN\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/mn_MN/Person.php', - 'Faker\\Provider\\mn_MN\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php', - 'Faker\\Provider\\ms_MY\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/Address.php', - 'Faker\\Provider\\ms_MY\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php', - 'Faker\\Provider\\ms_MY\\Miscellaneous' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/Miscellaneous.php', - 'Faker\\Provider\\ms_MY\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php', - 'Faker\\Provider\\ms_MY\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php', - 'Faker\\Provider\\ms_MY\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php', - 'Faker\\Provider\\nb_NO\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php', - 'Faker\\Provider\\nb_NO\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nb_NO/Company.php', - 'Faker\\Provider\\nb_NO\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nb_NO/Payment.php', - 'Faker\\Provider\\nb_NO\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nb_NO/Person.php', - 'Faker\\Provider\\nb_NO\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php', - 'Faker\\Provider\\ne_NP\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php', - 'Faker\\Provider\\ne_NP\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ne_NP/Internet.php', - 'Faker\\Provider\\ne_NP\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ne_NP/Payment.php', - 'Faker\\Provider\\ne_NP\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ne_NP/Person.php', - 'Faker\\Provider\\ne_NP\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ne_NP/PhoneNumber.php', - 'Faker\\Provider\\nl_BE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Address.php', - 'Faker\\Provider\\nl_BE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Company.php', - 'Faker\\Provider\\nl_BE\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Internet.php', - 'Faker\\Provider\\nl_BE\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Payment.php', - 'Faker\\Provider\\nl_BE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Person.php', - 'Faker\\Provider\\nl_BE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php', - 'Faker\\Provider\\nl_BE\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_BE/Text.php', - 'Faker\\Provider\\nl_NL\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Address.php', - 'Faker\\Provider\\nl_NL\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Color.php', - 'Faker\\Provider\\nl_NL\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Company.php', - 'Faker\\Provider\\nl_NL\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php', - 'Faker\\Provider\\nl_NL\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Payment.php', - 'Faker\\Provider\\nl_NL\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Person.php', - 'Faker\\Provider\\nl_NL\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php', - 'Faker\\Provider\\nl_NL\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/nl_NL/Text.php', - 'Faker\\Provider\\pl_PL\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Address.php', - 'Faker\\Provider\\pl_PL\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Color.php', - 'Faker\\Provider\\pl_PL\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Company.php', - 'Faker\\Provider\\pl_PL\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Internet.php', - 'Faker\\Provider\\pl_PL\\LicensePlate' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/LicensePlate.php', - 'Faker\\Provider\\pl_PL\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php', - 'Faker\\Provider\\pl_PL\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php', - 'Faker\\Provider\\pl_PL\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php', - 'Faker\\Provider\\pl_PL\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pl_PL/Text.php', - 'Faker\\Provider\\pt_BR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php', - 'Faker\\Provider\\pt_BR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Company.php', - 'Faker\\Provider\\pt_BR\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php', - 'Faker\\Provider\\pt_BR\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Payment.php', - 'Faker\\Provider\\pt_BR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php', - 'Faker\\Provider\\pt_BR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php', - 'Faker\\Provider\\pt_BR\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php', - 'Faker\\Provider\\pt_PT\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php', - 'Faker\\Provider\\pt_PT\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/Company.php', - 'Faker\\Provider\\pt_PT\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/Internet.php', - 'Faker\\Provider\\pt_PT\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/Payment.php', - 'Faker\\Provider\\pt_PT\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/Person.php', - 'Faker\\Provider\\pt_PT\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php', - 'Faker\\Provider\\ro_MD\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_MD/Address.php', - 'Faker\\Provider\\ro_MD\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_MD/Payment.php', - 'Faker\\Provider\\ro_MD\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_MD/Person.php', - 'Faker\\Provider\\ro_MD\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_MD/PhoneNumber.php', - 'Faker\\Provider\\ro_MD\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_MD/Text.php', - 'Faker\\Provider\\ro_RO\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_RO/Address.php', - 'Faker\\Provider\\ro_RO\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_RO/Payment.php', - 'Faker\\Provider\\ro_RO\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_RO/Person.php', - 'Faker\\Provider\\ro_RO\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php', - 'Faker\\Provider\\ro_RO\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php', - 'Faker\\Provider\\ru_RU\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Address.php', - 'Faker\\Provider\\ru_RU\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php', - 'Faker\\Provider\\ru_RU\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Company.php', - 'Faker\\Provider\\ru_RU\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php', - 'Faker\\Provider\\ru_RU\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Payment.php', - 'Faker\\Provider\\ru_RU\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php', - 'Faker\\Provider\\ru_RU\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php', - 'Faker\\Provider\\ru_RU\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/ru_RU/Text.php', - 'Faker\\Provider\\sk_SK\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/Address.php', - 'Faker\\Provider\\sk_SK\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/Company.php', - 'Faker\\Provider\\sk_SK\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/Internet.php', - 'Faker\\Provider\\sk_SK\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/Payment.php', - 'Faker\\Provider\\sk_SK\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/Person.php', - 'Faker\\Provider\\sk_SK\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php', - 'Faker\\Provider\\sl_SI\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/Address.php', - 'Faker\\Provider\\sl_SI\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/Company.php', - 'Faker\\Provider\\sl_SI\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/Internet.php', - 'Faker\\Provider\\sl_SI\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/Payment.php', - 'Faker\\Provider\\sl_SI\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/Person.php', - 'Faker\\Provider\\sl_SI\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sl_SI/PhoneNumber.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Address.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Payment.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Person.php', - 'Faker\\Provider\\sr_Latn_RS\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Address.php', - 'Faker\\Provider\\sr_Latn_RS\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Payment.php', - 'Faker\\Provider\\sr_Latn_RS\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Person.php', - 'Faker\\Provider\\sr_RS\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_RS/Address.php', - 'Faker\\Provider\\sr_RS\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_RS/Payment.php', - 'Faker\\Provider\\sr_RS\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sr_RS/Person.php', - 'Faker\\Provider\\sv_SE\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/Address.php', - 'Faker\\Provider\\sv_SE\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/Company.php', - 'Faker\\Provider\\sv_SE\\Municipality' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/Municipality.php', - 'Faker\\Provider\\sv_SE\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/Payment.php', - 'Faker\\Provider\\sv_SE\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/Person.php', - 'Faker\\Provider\\sv_SE\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php', - 'Faker\\Provider\\th_TH\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Address.php', - 'Faker\\Provider\\th_TH\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Color.php', - 'Faker\\Provider\\th_TH\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Company.php', - 'Faker\\Provider\\th_TH\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Internet.php', - 'Faker\\Provider\\th_TH\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Payment.php', - 'Faker\\Provider\\th_TH\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/Person.php', - 'Faker\\Provider\\th_TH\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/th_TH/PhoneNumber.php', - 'Faker\\Provider\\tr_TR\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Address.php', - 'Faker\\Provider\\tr_TR\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Color.php', - 'Faker\\Provider\\tr_TR\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Company.php', - 'Faker\\Provider\\tr_TR\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/DateTime.php', - 'Faker\\Provider\\tr_TR\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php', - 'Faker\\Provider\\tr_TR\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Payment.php', - 'Faker\\Provider\\tr_TR\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/Person.php', - 'Faker\\Provider\\tr_TR\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php', - 'Faker\\Provider\\uk_UA\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Address.php', - 'Faker\\Provider\\uk_UA\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php', - 'Faker\\Provider\\uk_UA\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Company.php', - 'Faker\\Provider\\uk_UA\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php', - 'Faker\\Provider\\uk_UA\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Payment.php', - 'Faker\\Provider\\uk_UA\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Person.php', - 'Faker\\Provider\\uk_UA\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php', - 'Faker\\Provider\\uk_UA\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/uk_UA/Text.php', - 'Faker\\Provider\\vi_VN\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/vi_VN/Address.php', - 'Faker\\Provider\\vi_VN\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php', - 'Faker\\Provider\\vi_VN\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/vi_VN/Internet.php', - 'Faker\\Provider\\vi_VN\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/vi_VN/Person.php', - 'Faker\\Provider\\vi_VN\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php', - 'Faker\\Provider\\zh_CN\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php', - 'Faker\\Provider\\zh_CN\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php', - 'Faker\\Provider\\zh_CN\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Company.php', - 'Faker\\Provider\\zh_CN\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/DateTime.php', - 'Faker\\Provider\\zh_CN\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php', - 'Faker\\Provider\\zh_CN\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Payment.php', - 'Faker\\Provider\\zh_CN\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/Person.php', - 'Faker\\Provider\\zh_CN\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_CN/PhoneNumber.php', - 'Faker\\Provider\\zh_TW\\Address' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Address.php', - 'Faker\\Provider\\zh_TW\\Color' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php', - 'Faker\\Provider\\zh_TW\\Company' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Company.php', - 'Faker\\Provider\\zh_TW\\DateTime' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php', - 'Faker\\Provider\\zh_TW\\Internet' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php', - 'Faker\\Provider\\zh_TW\\Payment' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Payment.php', - 'Faker\\Provider\\zh_TW\\Person' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Person.php', - 'Faker\\Provider\\zh_TW\\PhoneNumber' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php', - 'Faker\\Provider\\zh_TW\\Text' => $vendorDir . '/fakerphp/faker/src/Faker/Provider/zh_TW/Text.php', - 'Faker\\UniqueGenerator' => $vendorDir . '/fakerphp/faker/src/Faker/UniqueGenerator.php', - 'Faker\\ValidGenerator' => $vendorDir . '/fakerphp/faker/src/Faker/ValidGenerator.php', - 'Kint\\CallFinder' => $vendorDir . '/kint-php/kint/src/CallFinder.php', - 'Kint\\FacadeInterface' => $vendorDir . '/kint-php/kint/src/FacadeInterface.php', - 'Kint\\Kint' => $vendorDir . '/kint-php/kint/src/Kint.php', - 'Kint\\Parser\\AbstractPlugin' => $vendorDir . '/kint-php/kint/src/Parser/AbstractPlugin.php', - 'Kint\\Parser\\ArrayLimitPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ArrayLimitPlugin.php', - 'Kint\\Parser\\ArrayObjectPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ArrayObjectPlugin.php', - 'Kint\\Parser\\Base64Plugin' => $vendorDir . '/kint-php/kint/src/Parser/Base64Plugin.php', - 'Kint\\Parser\\BinaryPlugin' => $vendorDir . '/kint-php/kint/src/Parser/BinaryPlugin.php', - 'Kint\\Parser\\BlacklistPlugin' => $vendorDir . '/kint-php/kint/src/Parser/BlacklistPlugin.php', - 'Kint\\Parser\\ClassMethodsPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ClassMethodsPlugin.php', - 'Kint\\Parser\\ClassStaticsPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ClassStaticsPlugin.php', - 'Kint\\Parser\\ClosurePlugin' => $vendorDir . '/kint-php/kint/src/Parser/ClosurePlugin.php', - 'Kint\\Parser\\ColorPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ColorPlugin.php', - 'Kint\\Parser\\ConstructablePluginInterface' => $vendorDir . '/kint-php/kint/src/Parser/ConstructablePluginInterface.php', - 'Kint\\Parser\\DOMDocumentPlugin' => $vendorDir . '/kint-php/kint/src/Parser/DOMDocumentPlugin.php', - 'Kint\\Parser\\DateTimePlugin' => $vendorDir . '/kint-php/kint/src/Parser/DateTimePlugin.php', - 'Kint\\Parser\\EnumPlugin' => $vendorDir . '/kint-php/kint/src/Parser/EnumPlugin.php', - 'Kint\\Parser\\FsPathPlugin' => $vendorDir . '/kint-php/kint/src/Parser/FsPathPlugin.php', - 'Kint\\Parser\\IteratorPlugin' => $vendorDir . '/kint-php/kint/src/Parser/IteratorPlugin.php', - 'Kint\\Parser\\JsonPlugin' => $vendorDir . '/kint-php/kint/src/Parser/JsonPlugin.php', - 'Kint\\Parser\\MicrotimePlugin' => $vendorDir . '/kint-php/kint/src/Parser/MicrotimePlugin.php', - 'Kint\\Parser\\MysqliPlugin' => $vendorDir . '/kint-php/kint/src/Parser/MysqliPlugin.php', - 'Kint\\Parser\\Parser' => $vendorDir . '/kint-php/kint/src/Parser/Parser.php', - 'Kint\\Parser\\PluginInterface' => $vendorDir . '/kint-php/kint/src/Parser/PluginInterface.php', - 'Kint\\Parser\\ProxyPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ProxyPlugin.php', - 'Kint\\Parser\\SerializePlugin' => $vendorDir . '/kint-php/kint/src/Parser/SerializePlugin.php', - 'Kint\\Parser\\SimpleXMLElementPlugin' => $vendorDir . '/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php', - 'Kint\\Parser\\SplFileInfoPlugin' => $vendorDir . '/kint-php/kint/src/Parser/SplFileInfoPlugin.php', - 'Kint\\Parser\\SplObjectStoragePlugin' => $vendorDir . '/kint-php/kint/src/Parser/SplObjectStoragePlugin.php', - 'Kint\\Parser\\StreamPlugin' => $vendorDir . '/kint-php/kint/src/Parser/StreamPlugin.php', - 'Kint\\Parser\\TablePlugin' => $vendorDir . '/kint-php/kint/src/Parser/TablePlugin.php', - 'Kint\\Parser\\ThrowablePlugin' => $vendorDir . '/kint-php/kint/src/Parser/ThrowablePlugin.php', - 'Kint\\Parser\\TimestampPlugin' => $vendorDir . '/kint-php/kint/src/Parser/TimestampPlugin.php', - 'Kint\\Parser\\ToStringPlugin' => $vendorDir . '/kint-php/kint/src/Parser/ToStringPlugin.php', - 'Kint\\Parser\\TracePlugin' => $vendorDir . '/kint-php/kint/src/Parser/TracePlugin.php', - 'Kint\\Parser\\XmlPlugin' => $vendorDir . '/kint-php/kint/src/Parser/XmlPlugin.php', - 'Kint\\Renderer\\AbstractRenderer' => $vendorDir . '/kint-php/kint/src/Renderer/AbstractRenderer.php', - 'Kint\\Renderer\\CliRenderer' => $vendorDir . '/kint-php/kint/src/Renderer/CliRenderer.php', - 'Kint\\Renderer\\PlainRenderer' => $vendorDir . '/kint-php/kint/src/Renderer/PlainRenderer.php', - 'Kint\\Renderer\\RendererInterface' => $vendorDir . '/kint-php/kint/src/Renderer/RendererInterface.php', - 'Kint\\Renderer\\RichRenderer' => $vendorDir . '/kint-php/kint/src/Renderer/RichRenderer.php', - 'Kint\\Renderer\\Rich\\AbstractPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/AbstractPlugin.php', - 'Kint\\Renderer\\Rich\\ArrayLimitPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php', - 'Kint\\Renderer\\Rich\\BinaryPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php', - 'Kint\\Renderer\\Rich\\BlacklistPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php', - 'Kint\\Renderer\\Rich\\CallablePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/CallablePlugin.php', - 'Kint\\Renderer\\Rich\\ClosurePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php', - 'Kint\\Renderer\\Rich\\ColorPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/ColorPlugin.php', - 'Kint\\Renderer\\Rich\\DepthLimitPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php', - 'Kint\\Renderer\\Rich\\MethodDefinitionPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php', - 'Kint\\Renderer\\Rich\\MicrotimePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php', - 'Kint\\Renderer\\Rich\\PluginInterface' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/PluginInterface.php', - 'Kint\\Renderer\\Rich\\RecursionPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/RecursionPlugin.php', - 'Kint\\Renderer\\Rich\\SimpleXMLElementPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php', - 'Kint\\Renderer\\Rich\\SourcePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/SourcePlugin.php', - 'Kint\\Renderer\\Rich\\TabPluginInterface' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php', - 'Kint\\Renderer\\Rich\\TablePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/TablePlugin.php', - 'Kint\\Renderer\\Rich\\TimestampPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php', - 'Kint\\Renderer\\Rich\\TraceFramePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php', - 'Kint\\Renderer\\Rich\\ValuePluginInterface' => $vendorDir . '/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php', - 'Kint\\Renderer\\TextRenderer' => $vendorDir . '/kint-php/kint/src/Renderer/TextRenderer.php', - 'Kint\\Renderer\\Text\\AbstractPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/AbstractPlugin.php', - 'Kint\\Renderer\\Text\\ArrayLimitPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/ArrayLimitPlugin.php', - 'Kint\\Renderer\\Text\\BlacklistPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/BlacklistPlugin.php', - 'Kint\\Renderer\\Text\\DepthLimitPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/DepthLimitPlugin.php', - 'Kint\\Renderer\\Text\\EnumPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/EnumPlugin.php', - 'Kint\\Renderer\\Text\\MicrotimePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/MicrotimePlugin.php', - 'Kint\\Renderer\\Text\\PluginInterface' => $vendorDir . '/kint-php/kint/src/Renderer/Text/PluginInterface.php', - 'Kint\\Renderer\\Text\\RecursionPlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/RecursionPlugin.php', - 'Kint\\Renderer\\Text\\TracePlugin' => $vendorDir . '/kint-php/kint/src/Renderer/Text/TracePlugin.php', - 'Kint\\Utils' => $vendorDir . '/kint-php/kint/src/Utils.php', - 'Kint\\Zval\\BlobValue' => $vendorDir . '/kint-php/kint/src/Zval/BlobValue.php', - 'Kint\\Zval\\ClosureValue' => $vendorDir . '/kint-php/kint/src/Zval/ClosureValue.php', - 'Kint\\Zval\\DateTimeValue' => $vendorDir . '/kint-php/kint/src/Zval/DateTimeValue.php', - 'Kint\\Zval\\EnumValue' => $vendorDir . '/kint-php/kint/src/Zval/EnumValue.php', - 'Kint\\Zval\\InstanceValue' => $vendorDir . '/kint-php/kint/src/Zval/InstanceValue.php', - 'Kint\\Zval\\MethodValue' => $vendorDir . '/kint-php/kint/src/Zval/MethodValue.php', - 'Kint\\Zval\\ParameterHoldingTrait' => $vendorDir . '/kint-php/kint/src/Zval/ParameterHoldingTrait.php', - 'Kint\\Zval\\ParameterValue' => $vendorDir . '/kint-php/kint/src/Zval/ParameterValue.php', - 'Kint\\Zval\\Representation\\ColorRepresentation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/ColorRepresentation.php', - 'Kint\\Zval\\Representation\\MethodDefinitionRepresentation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/MethodDefinitionRepresentation.php', - 'Kint\\Zval\\Representation\\MicrotimeRepresentation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/MicrotimeRepresentation.php', - 'Kint\\Zval\\Representation\\Representation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/Representation.php', - 'Kint\\Zval\\Representation\\SourceRepresentation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/SourceRepresentation.php', - 'Kint\\Zval\\Representation\\SplFileInfoRepresentation' => $vendorDir . '/kint-php/kint/src/Zval/Representation/SplFileInfoRepresentation.php', - 'Kint\\Zval\\ResourceValue' => $vendorDir . '/kint-php/kint/src/Zval/ResourceValue.php', - 'Kint\\Zval\\SimpleXMLElementValue' => $vendorDir . '/kint-php/kint/src/Zval/SimpleXMLElementValue.php', - 'Kint\\Zval\\StreamValue' => $vendorDir . '/kint-php/kint/src/Zval/StreamValue.php', - 'Kint\\Zval\\ThrowableValue' => $vendorDir . '/kint-php/kint/src/Zval/ThrowableValue.php', - 'Kint\\Zval\\TraceFrameValue' => $vendorDir . '/kint-php/kint/src/Zval/TraceFrameValue.php', - 'Kint\\Zval\\TraceValue' => $vendorDir . '/kint-php/kint/src/Zval/TraceValue.php', - 'Kint\\Zval\\Value' => $vendorDir . '/kint-php/kint/src/Zval/Value.php', - 'Laminas\\Escaper\\Escaper' => $vendorDir . '/laminas/laminas-escaper/src/Escaper.php', - 'Laminas\\Escaper\\Exception\\ExceptionInterface' => $vendorDir . '/laminas/laminas-escaper/src/Exception/ExceptionInterface.php', - 'Laminas\\Escaper\\Exception\\InvalidArgumentException' => $vendorDir . '/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php', - 'Laminas\\Escaper\\Exception\\RuntimeException' => $vendorDir . '/laminas/laminas-escaper/src/Exception/RuntimeException.php', - 'Nexus\\CsConfig\\Factory' => $vendorDir . '/nexusphp/cs-config/src/Factory.php', - 'Nexus\\CsConfig\\FixerGenerator' => $vendorDir . '/nexusphp/cs-config/src/FixerGenerator.php', - 'Nexus\\CsConfig\\Fixer\\AbstractCustomFixer' => $vendorDir . '/nexusphp/cs-config/src/Fixer/AbstractCustomFixer.php', - 'Nexus\\CsConfig\\Fixer\\Comment\\NoCodeSeparatorCommentFixer' => $vendorDir . '/nexusphp/cs-config/src/Fixer/Comment/NoCodeSeparatorCommentFixer.php', - 'Nexus\\CsConfig\\Fixer\\Comment\\SpaceAfterCommentStartFixer' => $vendorDir . '/nexusphp/cs-config/src/Fixer/Comment/SpaceAfterCommentStartFixer.php', - 'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus74' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus74.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus80' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus80.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus81' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus81.php', - 'Nexus\\CsConfig\\Ruleset\\RulesetInterface' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/RulesetInterface.php', - 'Nexus\\CsConfig\\Test\\AbstractCustomFixerTestCase' => $vendorDir . '/nexusphp/cs-config/src/Test/AbstractCustomFixerTestCase.php', - 'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => $vendorDir . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php', - 'Nexus\\CsConfig\\Test\\FixerProvider' => $vendorDir . '/nexusphp/cs-config/src/Test/FixerProvider.php', - 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasStaticAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessage.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Error.php', - 'PHPUnit\\Framework\\ErrorTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/ErrorTestCase.php', - 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', - 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => $vendorDir . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidParameterGroupException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsReadonlyException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', - 'PHPUnit\\Framework\\PHPTAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', - 'PHPUnit\\Framework\\Reorderable' => $vendorDir . '/phpunit/phpunit/src/Framework/Reorderable.php', - 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', - 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', - 'PHPUnit\\Framework\\SyntheticSkippedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', - 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', - 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Warning.php', - 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit\\Runner\\AfterIncompleteTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', - 'PHPUnit\\Runner\\AfterLastTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', - 'PHPUnit\\Runner\\AfterRiskyTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', - 'PHPUnit\\Runner\\AfterSkippedTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', - 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', - 'PHPUnit\\Runner\\AfterTestErrorHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', - 'PHPUnit\\Runner\\AfterTestFailureHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', - 'PHPUnit\\Runner\\AfterTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', - 'PHPUnit\\Runner\\AfterTestWarningHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', - 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit\\Runner\\BeforeFirstTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', - 'PHPUnit\\Runner\\BeforeTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', - 'PHPUnit\\Runner\\DefaultTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', - 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit\\Runner\\Extension\\ExtensionHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/ExtensionHandler.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Hook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', - 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCacheExtension' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', - 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit\\Runner\\TestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', - 'PHPUnit\\Runner\\TestListenerAdapter' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResultCache.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\Mapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Mapper.php', - 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit\\TextUI\\DefaultResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/DefaultResultPrinter.php', - 'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php', - 'PHPUnit\\TextUI\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php', - 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\FilterMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/FilterMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\Directory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Constant' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Constant.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Directory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Extension' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/Extension.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\File' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/File.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Group' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Group.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSetting' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSetting.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Xml' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilderException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PhpHandler' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFile' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFile.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuite.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocationTo93' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/UpdateSchemaLocationTo93.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Variable' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Variable.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollectionIterator.php', - 'PHPUnit\\Util\\Annotation\\DocBlock' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', - 'PHPUnit\\Util\\Annotation\\Registry' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/Registry.php', - 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit\\Util\\Cloner' => $vendorDir . '/phpunit/phpunit/src/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php', - 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => $vendorDir . '/phpunit/phpunit/src/Util/ExcludeList.php', - 'PHPUnit\\Util\\FileLoader' => $vendorDir . '/phpunit/phpunit/src/Util/FileLoader.php', - 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidDataSetException' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', - 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', - 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', - 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', - 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', - 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit\\Util\\Reflection' => $vendorDir . '/phpunit/phpunit/src/Util/Reflection.php', - 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php', - 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', - 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', - 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', - 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php', - 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit\\Util\\Xml\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/FailedSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\Loader' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Validator.php', - 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', - 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', - 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', - 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php', - 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', - 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php', - 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php', - 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php', - 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php', - 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', - 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php', - 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php', - 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php', - 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php', - 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', - 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', - 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', - 'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', - 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', - 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', - 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', - 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php', - 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php', - 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php', - 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', - 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', - 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', - 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php', - 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php', - 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php', - 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', - 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', - 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', - 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', - 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', - 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', - 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php', - 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php', - 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', - 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php', - 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php', - 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', - 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php', - 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php', - 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php', - 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', - 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php', - 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php', - 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php', - 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', - 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', - 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php', - 'PharIo\\Version\\BuildMetaData' => $vendorDir . '/phar-io/version/src/BuildMetaData.php', - 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php', - 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php', - 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', - 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php', - 'PharIo\\Version\\NoBuildMetaDataException' => $vendorDir . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', - 'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', - 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', - 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php', - 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', - 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', - 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php', - 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/VersionConstraint.php', - 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', - 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', - 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', - 'PhpCsFixer\\AbstractDoctrineAnnotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php', - 'PhpCsFixer\\AbstractFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractFixer.php', - 'PhpCsFixer\\AbstractFopenFlagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php', - 'PhpCsFixer\\AbstractFunctionReferenceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php', - 'PhpCsFixer\\AbstractLinesBeforeNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php', - 'PhpCsFixer\\AbstractNoUselessElseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php', - 'PhpCsFixer\\AbstractPhpdocToTypeDeclarationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php', - 'PhpCsFixer\\AbstractPhpdocTypesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php', - 'PhpCsFixer\\AbstractProxyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php', - 'PhpCsFixer\\Cache\\Cache' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/Cache.php', - 'PhpCsFixer\\Cache\\CacheInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php', - 'PhpCsFixer\\Cache\\CacheManagerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php', - 'PhpCsFixer\\Cache\\Directory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/Directory.php', - 'PhpCsFixer\\Cache\\DirectoryInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php', - 'PhpCsFixer\\Cache\\FileCacheManager' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php', - 'PhpCsFixer\\Cache\\FileHandler' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php', - 'PhpCsFixer\\Cache\\FileHandlerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php', - 'PhpCsFixer\\Cache\\NullCacheManager' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php', - 'PhpCsFixer\\Cache\\Signature' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/Signature.php', - 'PhpCsFixer\\Cache\\SignatureInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php', - 'PhpCsFixer\\Config' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Config.php', - 'PhpCsFixer\\ConfigInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigInterface.php', - 'PhpCsFixer\\ConfigurationException\\InvalidConfigurationException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\InvalidFixerConfigurationException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\InvalidForEnvFixerConfigurationException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\RequiredFixerConfigurationException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php', - 'PhpCsFixer\\Console\\Application' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Application.php', - 'PhpCsFixer\\Console\\Command\\DescribeCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php', - 'PhpCsFixer\\Console\\Command\\DescribeNameNotFoundException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php', - 'PhpCsFixer\\Console\\Command\\DocumentationCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php', - 'PhpCsFixer\\Console\\Command\\FixCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php', - 'PhpCsFixer\\Console\\Command\\FixCommandExitStatusCalculator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php', - 'PhpCsFixer\\Console\\Command\\HelpCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php', - 'PhpCsFixer\\Console\\Command\\ListFilesCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php', - 'PhpCsFixer\\Console\\Command\\ListSetsCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php', - 'PhpCsFixer\\Console\\Command\\SelfUpdateCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php', - 'PhpCsFixer\\Console\\ConfigurationResolver' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php', - 'PhpCsFixer\\Console\\Output\\ErrorOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php', - 'PhpCsFixer\\Console\\Output\\NullOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php', - 'PhpCsFixer\\Console\\Output\\ProcessOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php', - 'PhpCsFixer\\Console\\Output\\ProcessOutputInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\CheckstyleReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\GitlabReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\JsonReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\JunitReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReportSummary' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReporterFactory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReporterInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\TextReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\XmlReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\JsonReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReportSummary' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReporterFactory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReporterInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\TextReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php', - 'PhpCsFixer\\Console\\SelfUpdate\\GithubClient' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php', - 'PhpCsFixer\\Console\\SelfUpdate\\GithubClientInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php', - 'PhpCsFixer\\Console\\SelfUpdate\\NewVersionChecker' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php', - 'PhpCsFixer\\Console\\SelfUpdate\\NewVersionCheckerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php', - 'PhpCsFixer\\Console\\WarningsDetector' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php', - 'PhpCsFixer\\Differ\\DiffConsoleFormatter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php', - 'PhpCsFixer\\Differ\\DifferInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php', - 'PhpCsFixer\\Differ\\FullDiffer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php', - 'PhpCsFixer\\Differ\\NullDiffer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php', - 'PhpCsFixer\\Differ\\UnifiedDiffer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php', - 'PhpCsFixer\\DocBlock\\Annotation' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php', - 'PhpCsFixer\\DocBlock\\DocBlock' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php', - 'PhpCsFixer\\DocBlock\\Line' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/Line.php', - 'PhpCsFixer\\DocBlock\\ShortDescription' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php', - 'PhpCsFixer\\DocBlock\\Tag' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php', - 'PhpCsFixer\\DocBlock\\TagComparator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php', - 'PhpCsFixer\\DocBlock\\TypeExpression' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php', - 'PhpCsFixer\\Doctrine\\Annotation\\Token' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php', - 'PhpCsFixer\\Doctrine\\Annotation\\Tokens' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php', - 'PhpCsFixer\\Documentation\\DocumentationLocator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php', - 'PhpCsFixer\\Documentation\\FixerDocumentGenerator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php', - 'PhpCsFixer\\Documentation\\ListDocumentGenerator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/ListDocumentGenerator.php', - 'PhpCsFixer\\Documentation\\RstUtils' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php', - 'PhpCsFixer\\Documentation\\RuleSetDocumentationGenerator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php', - 'PhpCsFixer\\Error\\Error' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Error/Error.php', - 'PhpCsFixer\\Error\\ErrorsManager' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php', - 'PhpCsFixer\\FileReader' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FileReader.php', - 'PhpCsFixer\\FileRemoval' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FileRemoval.php', - 'PhpCsFixer\\Finder' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Finder.php', - 'PhpCsFixer\\FixerConfiguration\\AliasedFixerOption' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\AliasedFixerOptionBuilder' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php', - 'PhpCsFixer\\FixerConfiguration\\AllowedValueSubset' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php', - 'PhpCsFixer\\FixerConfiguration\\DeprecatedFixerOption' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\DeprecatedFixerOptionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php', - 'PhpCsFixer\\FixerConfiguration\\FixerConfigurationResolver' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php', - 'PhpCsFixer\\FixerConfiguration\\FixerConfigurationResolverInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOption' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOptionBuilder' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php', - 'PhpCsFixer\\FixerConfiguration\\InvalidOptionsForEnvException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php', - 'PhpCsFixer\\FixerDefinition\\CodeSample' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php', - 'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\FileSpecificCodeSample' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php', - 'PhpCsFixer\\FixerDefinition\\FileSpecificCodeSampleInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\FixerDefinition' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php', - 'PhpCsFixer\\FixerDefinition\\FixerDefinitionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificCodeSample' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificCodeSampleInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecification' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificationInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php', - 'PhpCsFixer\\FixerFactory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerFactory.php', - 'PhpCsFixer\\FixerFileProcessedEvent' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php', - 'PhpCsFixer\\FixerNameValidator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.php', - 'PhpCsFixer\\Fixer\\AbstractIncrementOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php', - 'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\ArrayPushFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\BacktickToShellExecFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\EregToPregFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\MbStrFunctionsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\ModernizeStrposFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoAliasFunctionsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoAliasLanguageConstructCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoMixedEchoPrintFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\PowToExponentiationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\RandomApiMigrationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\SetTypeToCastFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\ArraySyntaxFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoMultilineWhitespaceAroundDoubleArrowFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoTrailingCommaInSinglelineArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoWhitespaceBeforeCommaInArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NormalizeIndexBraceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\TrimArraySpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\CurlyBracesPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\EncodingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NoMultipleStatementsPerLineFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NoTrailingCommaInSinglelineFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NonPrintableCharacterFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\OctalNotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\PsrAutoloadingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\ClassReferenceNameCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\ConstantCaseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\IntegerLiteralCaseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\LowercaseKeywordsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\LowercaseStaticReferenceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\MagicConstantCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\MagicMethodCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\NativeFunctionCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\NativeFunctionTypeDeclarationCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\CastSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\LowercaseCastFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\ModernizeTypesCastingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\NoShortBoolCastFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\NoUnsetCastFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\ShortScalarCastFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ClassAttributesSeparationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ClassDefinitionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalClassFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalInternalClassFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalPublicMethodForAbstractClassFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoBlankLinesAfterClassOpeningFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoNullPropertyInitializationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoPhp4ConstructorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoUnneededFinalMethodFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedClassElementsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedInterfacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedTraitsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ProtectedToPrivateFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SelfAccessorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SelfStaticAccessorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SingleClassElementPerStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SingleTraitInsertPerStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\VisibilityRequiredFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php', - 'PhpCsFixer\\Fixer\\ClassUsage\\DateTimeImmutableFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\CommentToPhpdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\HeaderCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\MultilineCommentOpeningClosingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\NoEmptyCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\NoTrailingWhitespaceInCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentSpacingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentStyleFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php', - 'PhpCsFixer\\Fixer\\ConfigurableFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php', - 'PhpCsFixer\\Fixer\\ConstantNotation\\NativeConstantInvocationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureContinuationPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ElseifFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\EmptyLoopBodyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\EmptyLoopConditionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\IncludeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoAlternativeSyntaxFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoBreakCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoSuperfluousElseifFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoTrailingCommaInListCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededControlParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededCurlyBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUselessElseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SimplifiedIfReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchCaseSemicolonToColonFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchCaseSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchContinueToBreakFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\TrailingCommaInMultilineFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\YodaStyleFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php', - 'PhpCsFixer\\Fixer\\DeprecatedFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationArrayAssignmentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php', - 'PhpCsFixer\\Fixer\\FixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\CombineNestedDirnameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\DateTimeCreateFromFormatCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FopenFlagOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FopenFlagsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FunctionDeclarationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FunctionTypehintSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\ImplodeCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\LambdaNotUsedImportFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\MethodArgumentSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NativeFunctionInvocationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoSpacesAfterFunctionNameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoTrailingCommaInSinglelineFunctionCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoUnreachableDefaultArgumentValueFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoUselessSprintfFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NullableTypeDeclarationForDefaultNullValueFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToParamTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToPropertyTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToReturnTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\RegularCallableCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\ReturnTypeDeclarationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\SingleLineThrowFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\StaticLambdaFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\UseArrowFunctionsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\VoidReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php', - 'PhpCsFixer\\Fixer\\Import\\FullyQualifiedStrictTypesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php', - 'PhpCsFixer\\Fixer\\Import\\GlobalNamespaceImportFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php', - 'PhpCsFixer\\Fixer\\Import\\GroupImportFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoLeadingImportSlashFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoUnneededImportAliasFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoUnusedImportsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php', - 'PhpCsFixer\\Fixer\\Import\\OrderedImportsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php', - 'PhpCsFixer\\Fixer\\Import\\SingleImportPerStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\Import\\SingleLineAfterImportsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php', - 'PhpCsFixer\\Fixer\\Indentation' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordRemoveFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveIssetsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveUnsetsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DeclareEqualNormalizeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DeclareParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DirConstantFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ErrorSuppressionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ExplicitIndirectVariableFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\FunctionToConstantFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\GetClassToClassKeywordFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\IsNullFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\NoUnsetOnPropertyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php', - 'PhpCsFixer\\Fixer\\ListNotation\\ListSyntaxFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\BlankLineAfterNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\CleanNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\NoBlankLinesBeforeNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\NoLeadingNamespaceWhitespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\SingleBlankLineBeforeNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\Naming\\NoHomoglyphNamesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\AssignNullCoalescingToCoalesceEqualFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\BinaryOperatorSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\ConcatSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\IncrementStyleFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\LogicalOperatorsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoSpaceAroundDoubleColonFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoUselessConcatOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoUselessNullsafeOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NotOperatorWithSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NotOperatorWithSuccessorSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\ObjectOperatorWithoutWhitespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\OperatorLinebreakFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\StandardizeIncrementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\StandardizeNotEqualsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryOperatorSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryToElvisOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryToNullCoalescingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\UnaryOperatorSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\BlankLineAfterOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\EchoTagSyntaxFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\FullOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\NoClosingTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertInternalTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertInternalTypeFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitExpectationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitExpectationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitFqcnAnnotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitFqcnAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitInternalClassFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitInternalClassFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMethodCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMethodCasingFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMockFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMockFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMockShortWillReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMockShortWillReturnFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitNamespacedFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitNamespacedFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitNoExpectationAnnotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitNoExpectationAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitSetUpTearDownVisibilityFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitSetUpTearDownVisibilityFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitSizeClassFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitSizeClassFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitStrictFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitStrictFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTargetVersion' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTargetVersion.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestAnnotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestCaseStaticMethodCallsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestCaseStaticMethodCallsFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestClassRequiresCoversFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestClassRequiresCoversFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\AlignMultilineCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\GeneralPhpdocAnnotationRemoveFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\GeneralPhpdocTagRenameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoBlankLinesAfterPhpdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoEmptyPhpdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoSuperfluousPhpdocTagsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAddMissingParamAnnotationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAlignFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAnnotationWithoutDotFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocIndentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocInlineTagNormalizerFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocLineSpanFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoAccessFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoAliasTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoEmptyReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoPackageFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoUselessInheritdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocOrderByValueFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocReturnSelfReferenceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocScalarFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSeparationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSingleLineVarSpacingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSummaryFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTagCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTagTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocToCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTrimConsecutiveBlankLineSeparationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTrimFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTypesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTypesOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocVarAnnotationCorrectOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocVarWithoutNameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\NoUselessReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\ReturnAssignmentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\SimplifiedNullReturnFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\MultilineWhitespaceBeforeSemicolonsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\NoEmptyStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\NoSinglelineWhitespaceBeforeSemicolonsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\SemicolonAfterInstructionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\SpaceAfterSemicolonFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\DeclareStrictTypesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\StrictComparisonFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\StrictParamFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\EscapeImplicitBackslashesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\ExplicitStringVariableFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\HeredocToNowdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\NoBinaryStringFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\NoTrailingWhitespaceInStringFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\SimpleToComplexStringVariableFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\SingleQuoteFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\StringLengthToEmptyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\StringLineEndingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\ArrayIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\BlankLineBeforeStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\BlankLineBetweenImportGroupsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypehintFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\HeredocIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\IndentationTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\LineEndingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\MethodChainingIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoExtraBlankLinesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoSpacesAroundOffsetFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoSpacesInsideParenthesisFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoTrailingWhitespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoWhitespaceInBlankLineFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\SingleBlankLineAtEofFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php', - 'PhpCsFixer\\Fixer\\WhitespacesAwareFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php', - 'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php', - 'PhpCsFixer\\Linter\\CachingLinter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php', - 'PhpCsFixer\\Linter\\Linter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/Linter.php', - 'PhpCsFixer\\Linter\\LinterInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php', - 'PhpCsFixer\\Linter\\LintingException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/LintingException.php', - 'PhpCsFixer\\Linter\\LintingResultInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php', - 'PhpCsFixer\\Linter\\ProcessLinter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php', - 'PhpCsFixer\\Linter\\ProcessLinterProcessBuilder' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php', - 'PhpCsFixer\\Linter\\ProcessLintingResult' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php', - 'PhpCsFixer\\Linter\\TokenizerLinter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php', - 'PhpCsFixer\\Linter\\TokenizerLintingResult' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php', - 'PhpCsFixer\\Linter\\UnavailableLinterException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php', - 'PhpCsFixer\\PharChecker' => $vendorDir . '/friendsofphp/php-cs-fixer/src/PharChecker.php', - 'PhpCsFixer\\PharCheckerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php', - 'PhpCsFixer\\Preg' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Preg.php', - 'PhpCsFixer\\PregException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/PregException.php', - 'PhpCsFixer\\RuleSet\\AbstractMigrationSetDescription' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php', - 'PhpCsFixer\\RuleSet\\AbstractRuleSetDescription' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php', - 'PhpCsFixer\\RuleSet\\RuleSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php', - 'PhpCsFixer\\RuleSet\\RuleSetDescriptionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php', - 'PhpCsFixer\\RuleSet\\RuleSetInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php', - 'PhpCsFixer\\RuleSet\\RuleSets' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php', - 'PhpCsFixer\\RuleSet\\Sets\\DoctrineAnnotationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PERRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PERSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP54MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP56MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP70MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP70MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP71MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP71MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP73MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP74MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP74MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP81MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit30MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit32MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit35MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit43MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit48MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit50MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit52MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit54MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit55MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit56MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit57MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit60MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit75MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit84MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR12RiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR12Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR1Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR2Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\SymfonyRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\SymfonySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php', - 'PhpCsFixer\\Runner\\FileCachingLintingIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php', - 'PhpCsFixer\\Runner\\FileFilterIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php', - 'PhpCsFixer\\Runner\\FileLintingIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php', - 'PhpCsFixer\\Runner\\Runner' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/Runner.php', - 'PhpCsFixer\\StdinFileInfo' => $vendorDir . '/friendsofphp/php-cs-fixer/src/StdinFileInfo.php', - 'PhpCsFixer\\Tokenizer\\AbstractTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php', - 'PhpCsFixer\\Tokenizer\\AbstractTypeTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\AlternativeSyntaxAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\AbstractControlCaseStructuresAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\ArgumentAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\CaseAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DefaultAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\EnumAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\MatchAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\NamespaceAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\NamespaceUseAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\StartEndTokenAwareAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\SwitchAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\TypeAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ArgumentsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\AttributeAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\BlocksAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ClassyAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\CommentsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ControlCaseStructuresAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\GotoLabelAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\NamespaceUsesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\NamespacesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\RangeAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ReferenceAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\WhitespacesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\CT' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php', - 'PhpCsFixer\\Tokenizer\\CodeHasher' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php', - 'PhpCsFixer\\Tokenizer\\Token' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php', - 'PhpCsFixer\\Tokenizer\\Tokens' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php', - 'PhpCsFixer\\Tokenizer\\TokensAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\TransformerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ArrayTypehintTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\AttributeTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\BraceClassInstantiationTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ClassConstantTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ConstructorPromotionTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\CurlyBraceTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\FirstClassCallableTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ImportTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NameQualifiedTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NamedArgumentTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NamespaceOperatorTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NullableTypeTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ReturnRefTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\SquareBraceTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeAlternationTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeColonTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeIntersectionTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\UseTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\WhitespacyCommentTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformers' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformers.php', - 'PhpCsFixer\\ToolInfo' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ToolInfo.php', - 'PhpCsFixer\\ToolInfoInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php', - 'PhpCsFixer\\Utils' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Utils.php', - 'PhpCsFixer\\WhitespacesFixerConfig' => $vendorDir . '/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php', - 'PhpCsFixer\\WordMatcher' => $vendorDir . '/friendsofphp/php-cs-fixer/src/WordMatcher.php', - 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php', - 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', - 'PhpParser\\BuilderHelpers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', - 'PhpParser\\Builder\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php', - 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', - 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', - 'PhpParser\\Builder\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php', - 'PhpParser\\Builder\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php', - 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', - 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', - 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', - 'PhpParser\\Builder\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', - 'PhpParser\\Builder\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', - 'PhpParser\\Builder\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', - 'PhpParser\\Builder\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', - 'PhpParser\\Builder\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', - 'PhpParser\\Builder\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', - 'PhpParser\\Builder\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', - 'PhpParser\\Builder\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', - 'PhpParser\\Comment' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment.php', - 'PhpParser\\Comment\\Doc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', - 'PhpParser\\ConstExprEvaluationException' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', - 'PhpParser\\ConstExprEvaluator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', - 'PhpParser\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Error.php', - 'PhpParser\\ErrorHandler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', - 'PhpParser\\ErrorHandler\\Collecting' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', - 'PhpParser\\ErrorHandler\\Throwing' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', - 'PhpParser\\Internal\\DiffElem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', - 'PhpParser\\Internal\\Differ' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', - 'PhpParser\\Internal\\PrintableNewAnonClassNode' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PhpParser\\Internal\\TokenStream' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', - 'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', - 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php', - 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', - 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php', - 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php', - 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', - 'PhpParser\\NodeDumper' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', - 'PhpParser\\NodeFinder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', - 'PhpParser\\NodeTraverser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', - 'PhpParser\\NodeTraverserInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', - 'PhpParser\\NodeVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', - 'PhpParser\\NodeVisitorAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', - 'PhpParser\\NodeVisitor\\CloningVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', - 'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', - 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', - 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', - 'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', - 'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', - 'PhpParser\\Node\\ComplexType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php', - 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', - 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', - 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PhpParser\\Node\\Expr\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', - 'PhpParser\\Node\\Expr\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', - 'PhpParser\\Node\\Expr\\ArrowFunction' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', - 'PhpParser\\Node\\Expr\\Assign' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', - 'PhpParser\\Node\\Expr\\AssignOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\AssignRef' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', - 'PhpParser\\Node\\Expr\\BinaryOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', - 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', - 'PhpParser\\Node\\Expr\\CallLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php', - 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', - 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', - 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', - 'PhpParser\\Node\\Expr\\Cast\\Double' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', - 'PhpParser\\Node\\Expr\\Cast\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', - 'PhpParser\\Node\\Expr\\Cast\\Object_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', - 'PhpParser\\Node\\Expr\\Cast\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', - 'PhpParser\\Node\\Expr\\Cast\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', - 'PhpParser\\Node\\Expr\\ClassConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', - 'PhpParser\\Node\\Expr\\Clone_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', - 'PhpParser\\Node\\Expr\\Closure' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', - 'PhpParser\\Node\\Expr\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', - 'PhpParser\\Node\\Expr\\ConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', - 'PhpParser\\Node\\Expr\\Empty_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', - 'PhpParser\\Node\\Expr\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', - 'PhpParser\\Node\\Expr\\ErrorSuppress' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', - 'PhpParser\\Node\\Expr\\Eval_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', - 'PhpParser\\Node\\Expr\\Exit_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', - 'PhpParser\\Node\\Expr\\FuncCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', - 'PhpParser\\Node\\Expr\\Include_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', - 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', - 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', - 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', - 'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', - 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', - 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', - 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', - 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', - 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', - 'PhpParser\\Node\\Expr\\PreInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', - 'PhpParser\\Node\\Expr\\Print_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', - 'PhpParser\\Node\\Expr\\PropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', - 'PhpParser\\Node\\Expr\\ShellExec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', - 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', - 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', - 'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', - 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', - 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', - 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', - 'PhpParser\\Node\\Expr\\YieldFrom' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', - 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', - 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', - 'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', - 'PhpParser\\Node\\IntersectionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php', - 'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', - 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php', - 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', - 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', - 'PhpParser\\Node\\NullableType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', - 'PhpParser\\Node\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Param.php', - 'PhpParser\\Node\\Scalar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', - 'PhpParser\\Node\\Scalar\\DNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', - 'PhpParser\\Node\\Scalar\\Encapsed' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', - 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PhpParser\\Node\\Scalar\\LNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', - 'PhpParser\\Node\\Scalar\\MagicConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\File' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PhpParser\\Node\\Scalar\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', - 'PhpParser\\Node\\Stmt' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', - 'PhpParser\\Node\\Stmt\\Break_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', - 'PhpParser\\Node\\Stmt\\Case_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', - 'PhpParser\\Node\\Stmt\\Catch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', - 'PhpParser\\Node\\Stmt\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', - 'PhpParser\\Node\\Stmt\\ClassLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', - 'PhpParser\\Node\\Stmt\\ClassMethod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', - 'PhpParser\\Node\\Stmt\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', - 'PhpParser\\Node\\Stmt\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', - 'PhpParser\\Node\\Stmt\\Continue_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', - 'PhpParser\\Node\\Stmt\\DeclareDeclare' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', - 'PhpParser\\Node\\Stmt\\Declare_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', - 'PhpParser\\Node\\Stmt\\Do_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', - 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', - 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', - 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', - 'PhpParser\\Node\\Stmt\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php', - 'PhpParser\\Node\\Stmt\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php', - 'PhpParser\\Node\\Stmt\\Expression' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', - 'PhpParser\\Node\\Stmt\\Finally_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', - 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', - 'PhpParser\\Node\\Stmt\\Foreach_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', - 'PhpParser\\Node\\Stmt\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', - 'PhpParser\\Node\\Stmt\\Global_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', - 'PhpParser\\Node\\Stmt\\Goto_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', - 'PhpParser\\Node\\Stmt\\GroupUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', - 'PhpParser\\Node\\Stmt\\HaltCompiler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', - 'PhpParser\\Node\\Stmt\\If_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', - 'PhpParser\\Node\\Stmt\\InlineHTML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', - 'PhpParser\\Node\\Stmt\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', - 'PhpParser\\Node\\Stmt\\Label' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', - 'PhpParser\\Node\\Stmt\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', - 'PhpParser\\Node\\Stmt\\Nop' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', - 'PhpParser\\Node\\Stmt\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', - 'PhpParser\\Node\\Stmt\\PropertyProperty' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', - 'PhpParser\\Node\\Stmt\\Return_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', - 'PhpParser\\Node\\Stmt\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', - 'PhpParser\\Node\\Stmt\\Static_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', - 'PhpParser\\Node\\Stmt\\Switch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', - 'PhpParser\\Node\\Stmt\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', - 'PhpParser\\Node\\Stmt\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PhpParser\\Node\\Stmt\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', - 'PhpParser\\Node\\Stmt\\TryCatch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', - 'PhpParser\\Node\\Stmt\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', - 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', - 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', - 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', - 'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', - 'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', - 'PhpParser\\Node\\VariadicPlaceholder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php', - 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php', - 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', - 'PhpParser\\ParserFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', - 'PhpParser\\Parser\\Multiple' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', - 'PhpParser\\Parser\\Php5' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', - 'PhpParser\\Parser\\Php7' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', - 'PhpParser\\Parser\\Tokens' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', - 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', - 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Predis\\Autoloader' => $vendorDir . '/predis/predis/src/Autoloader.php', - 'Predis\\Client' => $vendorDir . '/predis/predis/src/Client.php', - 'Predis\\ClientConfiguration' => $vendorDir . '/predis/predis/src/ClientConfiguration.php', - 'Predis\\ClientContextInterface' => $vendorDir . '/predis/predis/src/ClientContextInterface.php', - 'Predis\\ClientException' => $vendorDir . '/predis/predis/src/ClientException.php', - 'Predis\\ClientInterface' => $vendorDir . '/predis/predis/src/ClientInterface.php', - 'Predis\\Cluster\\ClusterStrategy' => $vendorDir . '/predis/predis/src/Cluster/ClusterStrategy.php', - 'Predis\\Cluster\\Distributor\\DistributorInterface' => $vendorDir . '/predis/predis/src/Cluster/Distributor/DistributorInterface.php', - 'Predis\\Cluster\\Distributor\\EmptyRingException' => $vendorDir . '/predis/predis/src/Cluster/Distributor/EmptyRingException.php', - 'Predis\\Cluster\\Distributor\\HashRing' => $vendorDir . '/predis/predis/src/Cluster/Distributor/HashRing.php', - 'Predis\\Cluster\\Distributor\\KetamaRing' => $vendorDir . '/predis/predis/src/Cluster/Distributor/KetamaRing.php', - 'Predis\\Cluster\\Hash\\CRC16' => $vendorDir . '/predis/predis/src/Cluster/Hash/CRC16.php', - 'Predis\\Cluster\\Hash\\HashGeneratorInterface' => $vendorDir . '/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php', - 'Predis\\Cluster\\Hash\\PhpiredisCRC16' => $vendorDir . '/predis/predis/src/Cluster/Hash/PhpiredisCRC16.php', - 'Predis\\Cluster\\PredisStrategy' => $vendorDir . '/predis/predis/src/Cluster/PredisStrategy.php', - 'Predis\\Cluster\\RedisStrategy' => $vendorDir . '/predis/predis/src/Cluster/RedisStrategy.php', - 'Predis\\Cluster\\SlotMap' => $vendorDir . '/predis/predis/src/Cluster/SlotMap.php', - 'Predis\\Cluster\\StrategyInterface' => $vendorDir . '/predis/predis/src/Cluster/StrategyInterface.php', - 'Predis\\Collection\\Iterator\\CursorBasedIterator' => $vendorDir . '/predis/predis/src/Collection/Iterator/CursorBasedIterator.php', - 'Predis\\Collection\\Iterator\\HashKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/HashKey.php', - 'Predis\\Collection\\Iterator\\Keyspace' => $vendorDir . '/predis/predis/src/Collection/Iterator/Keyspace.php', - 'Predis\\Collection\\Iterator\\ListKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/ListKey.php', - 'Predis\\Collection\\Iterator\\SetKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/SetKey.php', - 'Predis\\Collection\\Iterator\\SortedSetKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/SortedSetKey.php', - 'Predis\\Command\\Argument\\ArrayableArgument' => $vendorDir . '/predis/predis/src/Command/Argument/ArrayableArgument.php', - 'Predis\\Command\\Argument\\Geospatial\\AbstractBy' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/AbstractBy.php', - 'Predis\\Command\\Argument\\Geospatial\\ByBox' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/ByBox.php', - 'Predis\\Command\\Argument\\Geospatial\\ByInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/ByInterface.php', - 'Predis\\Command\\Argument\\Geospatial\\ByRadius' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/ByRadius.php', - 'Predis\\Command\\Argument\\Geospatial\\FromInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromInterface.php', - 'Predis\\Command\\Argument\\Geospatial\\FromLonLat' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromLonLat.php', - 'Predis\\Command\\Argument\\Geospatial\\FromMember' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromMember.php', - 'Predis\\Command\\Argument\\Search\\AggregateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/AggregateArguments.php', - 'Predis\\Command\\Argument\\Search\\AlterArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/AlterArguments.php', - 'Predis\\Command\\Argument\\Search\\CommonArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CommonArguments.php', - 'Predis\\Command\\Argument\\Search\\CreateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CreateArguments.php', - 'Predis\\Command\\Argument\\Search\\CursorArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CursorArguments.php', - 'Predis\\Command\\Argument\\Search\\DropArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/DropArguments.php', - 'Predis\\Command\\Argument\\Search\\ExplainArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/ExplainArguments.php', - 'Predis\\Command\\Argument\\Search\\ProfileArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/ProfileArguments.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\AbstractField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\FieldInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\GeoField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\NumericField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\TagField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\TextField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\VectorField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php', - 'Predis\\Command\\Argument\\Search\\SearchArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SearchArguments.php', - 'Predis\\Command\\Argument\\Search\\SpellcheckArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php', - 'Predis\\Command\\Argument\\Search\\SugAddArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SugAddArguments.php', - 'Predis\\Command\\Argument\\Search\\SugGetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SugGetArguments.php', - 'Predis\\Command\\Argument\\Search\\SynUpdateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php', - 'Predis\\Command\\Argument\\Server\\LimitInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Server/LimitInterface.php', - 'Predis\\Command\\Argument\\Server\\LimitOffsetCount' => $vendorDir . '/predis/predis/src/Command/Argument/Server/LimitOffsetCount.php', - 'Predis\\Command\\Argument\\Server\\To' => $vendorDir . '/predis/predis/src/Command/Argument/Server/To.php', - 'Predis\\Command\\Argument\\TimeSeries\\AddArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\AlterArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\CommonArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\CreateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\DecrByArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\GetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\IncrByArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\InfoArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\MGetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\MRangeArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\RangeArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php', - 'Predis\\Command\\Command' => $vendorDir . '/predis/predis/src/Command/Command.php', - 'Predis\\Command\\CommandInterface' => $vendorDir . '/predis/predis/src/Command/CommandInterface.php', - 'Predis\\Command\\Factory' => $vendorDir . '/predis/predis/src/Command/Factory.php', - 'Predis\\Command\\FactoryInterface' => $vendorDir . '/predis/predis/src/Command/FactoryInterface.php', - 'Predis\\Command\\PrefixableCommandInterface' => $vendorDir . '/predis/predis/src/Command/PrefixableCommandInterface.php', - 'Predis\\Command\\Processor\\KeyPrefixProcessor' => $vendorDir . '/predis/predis/src/Command/Processor/KeyPrefixProcessor.php', - 'Predis\\Command\\Processor\\ProcessorChain' => $vendorDir . '/predis/predis/src/Command/Processor/ProcessorChain.php', - 'Predis\\Command\\Processor\\ProcessorInterface' => $vendorDir . '/predis/predis/src/Command/Processor/ProcessorInterface.php', - 'Predis\\Command\\RawCommand' => $vendorDir . '/predis/predis/src/Command/RawCommand.php', - 'Predis\\Command\\RawFactory' => $vendorDir . '/predis/predis/src/Command/RawFactory.php', - 'Predis\\Command\\RedisFactory' => $vendorDir . '/predis/predis/src/Command/RedisFactory.php', - 'Predis\\Command\\Redis\\ACL' => $vendorDir . '/predis/predis/src/Command/Redis/ACL.php', - 'Predis\\Command\\Redis\\APPEND' => $vendorDir . '/predis/predis/src/Command/Redis/APPEND.php', - 'Predis\\Command\\Redis\\AUTH' => $vendorDir . '/predis/predis/src/Command/Redis/AUTH.php', - 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => $vendorDir . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', - 'Predis\\Command\\Redis\\BGREWRITEAOF' => $vendorDir . '/predis/predis/src/Command/Redis/BGREWRITEAOF.php', - 'Predis\\Command\\Redis\\BGSAVE' => $vendorDir . '/predis/predis/src/Command/Redis/BGSAVE.php', - 'Predis\\Command\\Redis\\BITCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/BITCOUNT.php', - 'Predis\\Command\\Redis\\BITFIELD' => $vendorDir . '/predis/predis/src/Command/Redis/BITFIELD.php', - 'Predis\\Command\\Redis\\BITOP' => $vendorDir . '/predis/predis/src/Command/Redis/BITOP.php', - 'Predis\\Command\\Redis\\BITPOS' => $vendorDir . '/predis/predis/src/Command/Redis/BITPOS.php', - 'Predis\\Command\\Redis\\BLMOVE' => $vendorDir . '/predis/predis/src/Command/Redis/BLMOVE.php', - 'Predis\\Command\\Redis\\BLMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BLMPOP.php', - 'Predis\\Command\\Redis\\BLPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BLPOP.php', - 'Predis\\Command\\Redis\\BRPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BRPOP.php', - 'Predis\\Command\\Redis\\BRPOPLPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/BRPOPLPUSH.php', - 'Predis\\Command\\Redis\\BZMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BZMPOP.php', - 'Predis\\Command\\Redis\\BZPOPMAX' => $vendorDir . '/predis/predis/src/Command/Redis/BZPOPMAX.php', - 'Predis\\Command\\Redis\\BZPOPMIN' => $vendorDir . '/predis/predis/src/Command/Redis/BZPOPMIN.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFADD' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFADD.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFINFO' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFLOADCHUNK' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFMADD' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFMEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFSCANDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php', - 'Predis\\Command\\Redis\\CLIENT' => $vendorDir . '/predis/predis/src/Command/Redis/CLIENT.php', - 'Predis\\Command\\Redis\\COMMAND' => $vendorDir . '/predis/predis/src/Command/Redis/COMMAND.php', - 'Predis\\Command\\Redis\\CONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/CONFIG.php', - 'Predis\\Command\\Redis\\COPY' => $vendorDir . '/predis/predis/src/Command/Redis/COPY.php', - 'Predis\\Command\\Redis\\Container\\ACL' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ACL.php', - 'Predis\\Command\\Redis\\Container\\AbstractContainer' => $vendorDir . '/predis/predis/src/Command/Redis/Container/AbstractContainer.php', - 'Predis\\Command\\Redis\\Container\\ContainerFactory' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ContainerFactory.php', - 'Predis\\Command\\Redis\\Container\\ContainerInterface' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ContainerInterface.php', - 'Predis\\Command\\Redis\\Container\\FunctionContainer' => $vendorDir . '/predis/predis/src/Command/Redis/Container/FunctionContainer.php', - 'Predis\\Command\\Redis\\Container\\Json\\JSONDEBUG' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php', - 'Predis\\Command\\Redis\\Container\\Search\\FTCONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php', - 'Predis\\Command\\Redis\\Container\\Search\\FTCURSOR' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINFO' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYDIM' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYPROB' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSQUERY' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFADD' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFADDNX' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFDEL' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINFO' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERTNX' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFLOADCHUNK' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFMEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFSCANDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php', - 'Predis\\Command\\Redis\\DBSIZE' => $vendorDir . '/predis/predis/src/Command/Redis/DBSIZE.php', - 'Predis\\Command\\Redis\\DECR' => $vendorDir . '/predis/predis/src/Command/Redis/DECR.php', - 'Predis\\Command\\Redis\\DECRBY' => $vendorDir . '/predis/predis/src/Command/Redis/DECRBY.php', - 'Predis\\Command\\Redis\\DEL' => $vendorDir . '/predis/predis/src/Command/Redis/DEL.php', - 'Predis\\Command\\Redis\\DISCARD' => $vendorDir . '/predis/predis/src/Command/Redis/DISCARD.php', - 'Predis\\Command\\Redis\\DUMP' => $vendorDir . '/predis/predis/src/Command/Redis/DUMP.php', - 'Predis\\Command\\Redis\\ECHO_' => $vendorDir . '/predis/predis/src/Command/Redis/ECHO_.php', - 'Predis\\Command\\Redis\\EVALSHA' => $vendorDir . '/predis/predis/src/Command/Redis/EVALSHA.php', - 'Predis\\Command\\Redis\\EVALSHA_RO' => $vendorDir . '/predis/predis/src/Command/Redis/EVALSHA_RO.php', - 'Predis\\Command\\Redis\\EVAL_' => $vendorDir . '/predis/predis/src/Command/Redis/EVAL_.php', - 'Predis\\Command\\Redis\\EVAL_RO' => $vendorDir . '/predis/predis/src/Command/Redis/EVAL_RO.php', - 'Predis\\Command\\Redis\\EXEC' => $vendorDir . '/predis/predis/src/Command/Redis/EXEC.php', - 'Predis\\Command\\Redis\\EXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/EXISTS.php', - 'Predis\\Command\\Redis\\EXPIRE' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIRE.php', - 'Predis\\Command\\Redis\\EXPIREAT' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIREAT.php', - 'Predis\\Command\\Redis\\EXPIRETIME' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIRETIME.php', - 'Predis\\Command\\Redis\\FAILOVER' => $vendorDir . '/predis/predis/src/Command/Redis/FAILOVER.php', - 'Predis\\Command\\Redis\\FCALL' => $vendorDir . '/predis/predis/src/Command/Redis/FCALL.php', - 'Predis\\Command\\Redis\\FCALL_RO' => $vendorDir . '/predis/predis/src/Command/Redis/FCALL_RO.php', - 'Predis\\Command\\Redis\\FLUSHALL' => $vendorDir . '/predis/predis/src/Command/Redis/FLUSHALL.php', - 'Predis\\Command\\Redis\\FLUSHDB' => $vendorDir . '/predis/predis/src/Command/Redis/FLUSHDB.php', - 'Predis\\Command\\Redis\\FUNCTIONS' => $vendorDir . '/predis/predis/src/Command/Redis/FUNCTIONS.php', - 'Predis\\Command\\Redis\\GEOADD' => $vendorDir . '/predis/predis/src/Command/Redis/GEOADD.php', - 'Predis\\Command\\Redis\\GEODIST' => $vendorDir . '/predis/predis/src/Command/Redis/GEODIST.php', - 'Predis\\Command\\Redis\\GEOHASH' => $vendorDir . '/predis/predis/src/Command/Redis/GEOHASH.php', - 'Predis\\Command\\Redis\\GEOPOS' => $vendorDir . '/predis/predis/src/Command/Redis/GEOPOS.php', - 'Predis\\Command\\Redis\\GEORADIUS' => $vendorDir . '/predis/predis/src/Command/Redis/GEORADIUS.php', - 'Predis\\Command\\Redis\\GEORADIUSBYMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php', - 'Predis\\Command\\Redis\\GEOSEARCH' => $vendorDir . '/predis/predis/src/Command/Redis/GEOSEARCH.php', - 'Predis\\Command\\Redis\\GEOSEARCHSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/GEOSEARCHSTORE.php', - 'Predis\\Command\\Redis\\GET' => $vendorDir . '/predis/predis/src/Command/Redis/GET.php', - 'Predis\\Command\\Redis\\GETBIT' => $vendorDir . '/predis/predis/src/Command/Redis/GETBIT.php', - 'Predis\\Command\\Redis\\GETDEL' => $vendorDir . '/predis/predis/src/Command/Redis/GETDEL.php', - 'Predis\\Command\\Redis\\GETEX' => $vendorDir . '/predis/predis/src/Command/Redis/GETEX.php', - 'Predis\\Command\\Redis\\GETRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/GETRANGE.php', - 'Predis\\Command\\Redis\\GETSET' => $vendorDir . '/predis/predis/src/Command/Redis/GETSET.php', - 'Predis\\Command\\Redis\\HDEL' => $vendorDir . '/predis/predis/src/Command/Redis/HDEL.php', - 'Predis\\Command\\Redis\\HEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/HEXISTS.php', - 'Predis\\Command\\Redis\\HGET' => $vendorDir . '/predis/predis/src/Command/Redis/HGET.php', - 'Predis\\Command\\Redis\\HGETALL' => $vendorDir . '/predis/predis/src/Command/Redis/HGETALL.php', - 'Predis\\Command\\Redis\\HINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/HINCRBY.php', - 'Predis\\Command\\Redis\\HINCRBYFLOAT' => $vendorDir . '/predis/predis/src/Command/Redis/HINCRBYFLOAT.php', - 'Predis\\Command\\Redis\\HKEYS' => $vendorDir . '/predis/predis/src/Command/Redis/HKEYS.php', - 'Predis\\Command\\Redis\\HLEN' => $vendorDir . '/predis/predis/src/Command/Redis/HLEN.php', - 'Predis\\Command\\Redis\\HMGET' => $vendorDir . '/predis/predis/src/Command/Redis/HMGET.php', - 'Predis\\Command\\Redis\\HMSET' => $vendorDir . '/predis/predis/src/Command/Redis/HMSET.php', - 'Predis\\Command\\Redis\\HRANDFIELD' => $vendorDir . '/predis/predis/src/Command/Redis/HRANDFIELD.php', - 'Predis\\Command\\Redis\\HSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/HSCAN.php', - 'Predis\\Command\\Redis\\HSET' => $vendorDir . '/predis/predis/src/Command/Redis/HSET.php', - 'Predis\\Command\\Redis\\HSETNX' => $vendorDir . '/predis/predis/src/Command/Redis/HSETNX.php', - 'Predis\\Command\\Redis\\HSTRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/HSTRLEN.php', - 'Predis\\Command\\Redis\\HVALS' => $vendorDir . '/predis/predis/src/Command/Redis/HVALS.php', - 'Predis\\Command\\Redis\\INCR' => $vendorDir . '/predis/predis/src/Command/Redis/INCR.php', - 'Predis\\Command\\Redis\\INCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/INCRBY.php', - 'Predis\\Command\\Redis\\INCRBYFLOAT' => $vendorDir . '/predis/predis/src/Command/Redis/INCRBYFLOAT.php', - 'Predis\\Command\\Redis\\INFO' => $vendorDir . '/predis/predis/src/Command/Redis/INFO.php', - 'Predis\\Command\\Redis\\Json\\JSONARRAPPEND' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php', - 'Predis\\Command\\Redis\\Json\\JSONARRINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php', - 'Predis\\Command\\Redis\\Json\\JSONARRINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php', - 'Predis\\Command\\Redis\\Json\\JSONARRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONARRPOP' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRPOP.php', - 'Predis\\Command\\Redis\\Json\\JSONARRTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php', - 'Predis\\Command\\Redis\\Json\\JSONCLEAR' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONCLEAR.php', - 'Predis\\Command\\Redis\\Json\\JSONDEBUG' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONDEBUG.php', - 'Predis\\Command\\Redis\\Json\\JSONDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONDEL.php', - 'Predis\\Command\\Redis\\Json\\JSONFORGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONFORGET.php', - 'Predis\\Command\\Redis\\Json\\JSONGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONGET.php', - 'Predis\\Command\\Redis\\Json\\JSONMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMERGE.php', - 'Predis\\Command\\Redis\\Json\\JSONMGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMGET.php', - 'Predis\\Command\\Redis\\Json\\JSONMSET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMSET.php', - 'Predis\\Command\\Redis\\Json\\JSONNUMINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php', - 'Predis\\Command\\Redis\\Json\\JSONOBJKEYS' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php', - 'Predis\\Command\\Redis\\Json\\JSONOBJLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONRESP' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONRESP.php', - 'Predis\\Command\\Redis\\Json\\JSONSET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSET.php', - 'Predis\\Command\\Redis\\Json\\JSONSTRAPPEND' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php', - 'Predis\\Command\\Redis\\Json\\JSONSTRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONTOGGLE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php', - 'Predis\\Command\\Redis\\Json\\JSONTYPE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONTYPE.php', - 'Predis\\Command\\Redis\\KEYS' => $vendorDir . '/predis/predis/src/Command/Redis/KEYS.php', - 'Predis\\Command\\Redis\\LASTSAVE' => $vendorDir . '/predis/predis/src/Command/Redis/LASTSAVE.php', - 'Predis\\Command\\Redis\\LCS' => $vendorDir . '/predis/predis/src/Command/Redis/LCS.php', - 'Predis\\Command\\Redis\\LINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/LINDEX.php', - 'Predis\\Command\\Redis\\LINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/LINSERT.php', - 'Predis\\Command\\Redis\\LLEN' => $vendorDir . '/predis/predis/src/Command/Redis/LLEN.php', - 'Predis\\Command\\Redis\\LMOVE' => $vendorDir . '/predis/predis/src/Command/Redis/LMOVE.php', - 'Predis\\Command\\Redis\\LMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/LMPOP.php', - 'Predis\\Command\\Redis\\LPOP' => $vendorDir . '/predis/predis/src/Command/Redis/LPOP.php', - 'Predis\\Command\\Redis\\LPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/LPUSH.php', - 'Predis\\Command\\Redis\\LPUSHX' => $vendorDir . '/predis/predis/src/Command/Redis/LPUSHX.php', - 'Predis\\Command\\Redis\\LRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/LRANGE.php', - 'Predis\\Command\\Redis\\LREM' => $vendorDir . '/predis/predis/src/Command/Redis/LREM.php', - 'Predis\\Command\\Redis\\LSET' => $vendorDir . '/predis/predis/src/Command/Redis/LSET.php', - 'Predis\\Command\\Redis\\LTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/LTRIM.php', - 'Predis\\Command\\Redis\\MGET' => $vendorDir . '/predis/predis/src/Command/Redis/MGET.php', - 'Predis\\Command\\Redis\\MIGRATE' => $vendorDir . '/predis/predis/src/Command/Redis/MIGRATE.php', - 'Predis\\Command\\Redis\\MONITOR' => $vendorDir . '/predis/predis/src/Command/Redis/MONITOR.php', - 'Predis\\Command\\Redis\\MOVE' => $vendorDir . '/predis/predis/src/Command/Redis/MOVE.php', - 'Predis\\Command\\Redis\\MSET' => $vendorDir . '/predis/predis/src/Command/Redis/MSET.php', - 'Predis\\Command\\Redis\\MSETNX' => $vendorDir . '/predis/predis/src/Command/Redis/MSETNX.php', - 'Predis\\Command\\Redis\\MULTI' => $vendorDir . '/predis/predis/src/Command/Redis/MULTI.php', - 'Predis\\Command\\Redis\\OBJECT_' => $vendorDir . '/predis/predis/src/Command/Redis/OBJECT_.php', - 'Predis\\Command\\Redis\\PERSIST' => $vendorDir . '/predis/predis/src/Command/Redis/PERSIST.php', - 'Predis\\Command\\Redis\\PEXPIRE' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIRE.php', - 'Predis\\Command\\Redis\\PEXPIREAT' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIREAT.php', - 'Predis\\Command\\Redis\\PEXPIRETIME' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIRETIME.php', - 'Predis\\Command\\Redis\\PFADD' => $vendorDir . '/predis/predis/src/Command/Redis/PFADD.php', - 'Predis\\Command\\Redis\\PFCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/PFCOUNT.php', - 'Predis\\Command\\Redis\\PFMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/PFMERGE.php', - 'Predis\\Command\\Redis\\PING' => $vendorDir . '/predis/predis/src/Command/Redis/PING.php', - 'Predis\\Command\\Redis\\PSETEX' => $vendorDir . '/predis/predis/src/Command/Redis/PSETEX.php', - 'Predis\\Command\\Redis\\PSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/PSUBSCRIBE.php', - 'Predis\\Command\\Redis\\PTTL' => $vendorDir . '/predis/predis/src/Command/Redis/PTTL.php', - 'Predis\\Command\\Redis\\PUBLISH' => $vendorDir . '/predis/predis/src/Command/Redis/PUBLISH.php', - 'Predis\\Command\\Redis\\PUBSUB' => $vendorDir . '/predis/predis/src/Command/Redis/PUBSUB.php', - 'Predis\\Command\\Redis\\PUNSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php', - 'Predis\\Command\\Redis\\QUIT' => $vendorDir . '/predis/predis/src/Command/Redis/QUIT.php', - 'Predis\\Command\\Redis\\RANDOMKEY' => $vendorDir . '/predis/predis/src/Command/Redis/RANDOMKEY.php', - 'Predis\\Command\\Redis\\RENAME' => $vendorDir . '/predis/predis/src/Command/Redis/RENAME.php', - 'Predis\\Command\\Redis\\RENAMENX' => $vendorDir . '/predis/predis/src/Command/Redis/RENAMENX.php', - 'Predis\\Command\\Redis\\RESTORE' => $vendorDir . '/predis/predis/src/Command/Redis/RESTORE.php', - 'Predis\\Command\\Redis\\RPOP' => $vendorDir . '/predis/predis/src/Command/Redis/RPOP.php', - 'Predis\\Command\\Redis\\RPOPLPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/RPOPLPUSH.php', - 'Predis\\Command\\Redis\\RPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/RPUSH.php', - 'Predis\\Command\\Redis\\RPUSHX' => $vendorDir . '/predis/predis/src/Command/Redis/RPUSHX.php', - 'Predis\\Command\\Redis\\SADD' => $vendorDir . '/predis/predis/src/Command/Redis/SADD.php', - 'Predis\\Command\\Redis\\SAVE' => $vendorDir . '/predis/predis/src/Command/Redis/SAVE.php', - 'Predis\\Command\\Redis\\SCAN' => $vendorDir . '/predis/predis/src/Command/Redis/SCAN.php', - 'Predis\\Command\\Redis\\SCARD' => $vendorDir . '/predis/predis/src/Command/Redis/SCARD.php', - 'Predis\\Command\\Redis\\SCRIPT' => $vendorDir . '/predis/predis/src/Command/Redis/SCRIPT.php', - 'Predis\\Command\\Redis\\SDIFF' => $vendorDir . '/predis/predis/src/Command/Redis/SDIFF.php', - 'Predis\\Command\\Redis\\SDIFFSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/SDIFFSTORE.php', - 'Predis\\Command\\Redis\\SELECT' => $vendorDir . '/predis/predis/src/Command/Redis/SELECT.php', - 'Predis\\Command\\Redis\\SENTINEL' => $vendorDir . '/predis/predis/src/Command/Redis/SENTINEL.php', - 'Predis\\Command\\Redis\\SET' => $vendorDir . '/predis/predis/src/Command/Redis/SET.php', - 'Predis\\Command\\Redis\\SETBIT' => $vendorDir . '/predis/predis/src/Command/Redis/SETBIT.php', - 'Predis\\Command\\Redis\\SETEX' => $vendorDir . '/predis/predis/src/Command/Redis/SETEX.php', - 'Predis\\Command\\Redis\\SETNX' => $vendorDir . '/predis/predis/src/Command/Redis/SETNX.php', - 'Predis\\Command\\Redis\\SETRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/SETRANGE.php', - 'Predis\\Command\\Redis\\SHUTDOWN' => $vendorDir . '/predis/predis/src/Command/Redis/SHUTDOWN.php', - 'Predis\\Command\\Redis\\SINTER' => $vendorDir . '/predis/predis/src/Command/Redis/SINTER.php', - 'Predis\\Command\\Redis\\SINTERCARD' => $vendorDir . '/predis/predis/src/Command/Redis/SINTERCARD.php', - 'Predis\\Command\\Redis\\SINTERSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/SINTERSTORE.php', - 'Predis\\Command\\Redis\\SISMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/SISMEMBER.php', - 'Predis\\Command\\Redis\\SLAVEOF' => $vendorDir . '/predis/predis/src/Command/Redis/SLAVEOF.php', - 'Predis\\Command\\Redis\\SLOWLOG' => $vendorDir . '/predis/predis/src/Command/Redis/SLOWLOG.php', - 'Predis\\Command\\Redis\\SMEMBERS' => $vendorDir . '/predis/predis/src/Command/Redis/SMEMBERS.php', - 'Predis\\Command\\Redis\\SMISMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/SMISMEMBER.php', - 'Predis\\Command\\Redis\\SMOVE' => $vendorDir . '/predis/predis/src/Command/Redis/SMOVE.php', - 'Predis\\Command\\Redis\\SORT' => $vendorDir . '/predis/predis/src/Command/Redis/SORT.php', - 'Predis\\Command\\Redis\\SORT_RO' => $vendorDir . '/predis/predis/src/Command/Redis/SORT_RO.php', - 'Predis\\Command\\Redis\\SPOP' => $vendorDir . '/predis/predis/src/Command/Redis/SPOP.php', - 'Predis\\Command\\Redis\\SRANDMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/SRANDMEMBER.php', - 'Predis\\Command\\Redis\\SREM' => $vendorDir . '/predis/predis/src/Command/Redis/SREM.php', - 'Predis\\Command\\Redis\\SSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/SSCAN.php', - 'Predis\\Command\\Redis\\STRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/STRLEN.php', - 'Predis\\Command\\Redis\\SUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/SUBSCRIBE.php', - 'Predis\\Command\\Redis\\SUBSTR' => $vendorDir . '/predis/predis/src/Command/Redis/SUBSTR.php', - 'Predis\\Command\\Redis\\SUNION' => $vendorDir . '/predis/predis/src/Command/Redis/SUNION.php', - 'Predis\\Command\\Redis\\SUNIONSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/SUNIONSTORE.php', - 'Predis\\Command\\Redis\\Search\\FTAGGREGATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php', - 'Predis\\Command\\Redis\\Search\\FTALIASADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASADD.php', - 'Predis\\Command\\Redis\\Search\\FTALIASDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASDEL.php', - 'Predis\\Command\\Redis\\Search\\FTALIASUPDATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php', - 'Predis\\Command\\Redis\\Search\\FTALTER' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALTER.php', - 'Predis\\Command\\Redis\\Search\\FTCONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCONFIG.php', - 'Predis\\Command\\Redis\\Search\\FTCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCREATE.php', - 'Predis\\Command\\Redis\\Search\\FTCURSOR' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCURSOR.php', - 'Predis\\Command\\Redis\\Search\\FTDICTADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTADD.php', - 'Predis\\Command\\Redis\\Search\\FTDICTDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTDEL.php', - 'Predis\\Command\\Redis\\Search\\FTDICTDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php', - 'Predis\\Command\\Redis\\Search\\FTDROPINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php', - 'Predis\\Command\\Redis\\Search\\FTEXPLAIN' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php', - 'Predis\\Command\\Redis\\Search\\FTINFO' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTINFO.php', - 'Predis\\Command\\Redis\\Search\\FTPROFILE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTPROFILE.php', - 'Predis\\Command\\Redis\\Search\\FTSEARCH' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSEARCH.php', - 'Predis\\Command\\Redis\\Search\\FTSPELLCHECK' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php', - 'Predis\\Command\\Redis\\Search\\FTSUGADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGADD.php', - 'Predis\\Command\\Redis\\Search\\FTSUGDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGDEL.php', - 'Predis\\Command\\Redis\\Search\\FTSUGGET' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGGET.php', - 'Predis\\Command\\Redis\\Search\\FTSUGLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGLEN.php', - 'Predis\\Command\\Redis\\Search\\FTSYNDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php', - 'Predis\\Command\\Redis\\Search\\FTSYNUPDATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php', - 'Predis\\Command\\Redis\\Search\\FTTAGVALS' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTTAGVALS.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTADD' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYREVRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTCDF' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMAX' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMIN' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTQUANTILE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTRESET' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTREVRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTTRIMMED_MEAN' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.php', - 'Predis\\Command\\Redis\\TIME' => $vendorDir . '/predis/predis/src/Command/Redis/TIME.php', - 'Predis\\Command\\Redis\\TOUCH' => $vendorDir . '/predis/predis/src/Command/Redis/TOUCH.php', - 'Predis\\Command\\Redis\\TTL' => $vendorDir . '/predis/predis/src/Command/Redis/TTL.php', - 'Predis\\Command\\Redis\\TYPE' => $vendorDir . '/predis/predis/src/Command/Redis/TYPE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSADD' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSADD.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSALTER' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSCREATERULE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDECRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDEL' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDELETERULE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSGET' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSGET.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMADD' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMGET' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSQUERYINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php', - 'Predis\\Command\\Redis\\TopK\\TOPKADD' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKADD.php', - 'Predis\\Command\\Redis\\TopK\\TOPKINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php', - 'Predis\\Command\\Redis\\TopK\\TOPKINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKINFO.php', - 'Predis\\Command\\Redis\\TopK\\TOPKLIST' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKLIST.php', - 'Predis\\Command\\Redis\\TopK\\TOPKQUERY' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php', - 'Predis\\Command\\Redis\\TopK\\TOPKRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.php', - 'Predis\\Command\\Redis\\UNSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', - 'Predis\\Command\\Redis\\UNWATCH' => $vendorDir . '/predis/predis/src/Command/Redis/UNWATCH.php', - 'Predis\\Command\\Redis\\WAITAOF' => $vendorDir . '/predis/predis/src/Command/Redis/WAITAOF.php', - 'Predis\\Command\\Redis\\WATCH' => $vendorDir . '/predis/predis/src/Command/Redis/WATCH.php', - 'Predis\\Command\\Redis\\XADD' => $vendorDir . '/predis/predis/src/Command/Redis/XADD.php', - 'Predis\\Command\\Redis\\XDEL' => $vendorDir . '/predis/predis/src/Command/Redis/XDEL.php', - 'Predis\\Command\\Redis\\XLEN' => $vendorDir . '/predis/predis/src/Command/Redis/XLEN.php', - 'Predis\\Command\\Redis\\XRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/XRANGE.php', - 'Predis\\Command\\Redis\\XREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/XREVRANGE.php', - 'Predis\\Command\\Redis\\XTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/XTRIM.php', - 'Predis\\Command\\Redis\\ZADD' => $vendorDir . '/predis/predis/src/Command/Redis/ZADD.php', - 'Predis\\Command\\Redis\\ZCARD' => $vendorDir . '/predis/predis/src/Command/Redis/ZCARD.php', - 'Predis\\Command\\Redis\\ZCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/ZCOUNT.php', - 'Predis\\Command\\Redis\\ZDIFF' => $vendorDir . '/predis/predis/src/Command/Redis/ZDIFF.php', - 'Predis\\Command\\Redis\\ZDIFFSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZDIFFSTORE.php', - 'Predis\\Command\\Redis\\ZINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/ZINCRBY.php', - 'Predis\\Command\\Redis\\ZINTER' => $vendorDir . '/predis/predis/src/Command/Redis/ZINTER.php', - 'Predis\\Command\\Redis\\ZINTERCARD' => $vendorDir . '/predis/predis/src/Command/Redis/ZINTERCARD.php', - 'Predis\\Command\\Redis\\ZINTERSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZINTERSTORE.php', - 'Predis\\Command\\Redis\\ZLEXCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/ZLEXCOUNT.php', - 'Predis\\Command\\Redis\\ZMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/ZMPOP.php', - 'Predis\\Command\\Redis\\ZMSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZMSCORE.php', - 'Predis\\Command\\Redis\\ZPOPMAX' => $vendorDir . '/predis/predis/src/Command/Redis/ZPOPMAX.php', - 'Predis\\Command\\Redis\\ZPOPMIN' => $vendorDir . '/predis/predis/src/Command/Redis/ZPOPMIN.php', - 'Predis\\Command\\Redis\\ZRANDMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANDMEMBER.php', - 'Predis\\Command\\Redis\\ZRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGE.php', - 'Predis\\Command\\Redis\\ZRANGEBYLEX' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZRANGEBYSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZRANGESTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGESTORE.php', - 'Predis\\Command\\Redis\\ZRANK' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANK.php', - 'Predis\\Command\\Redis\\ZREM' => $vendorDir . '/predis/predis/src/Command/Redis/ZREM.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYLEX' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYRANK' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYRANK.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/ZREVRANGE.php', - 'Predis\\Command\\Redis\\ZREVRANGEBYLEX' => $vendorDir . '/predis/predis/src/Command/Redis/ZREVRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZREVRANGEBYSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZREVRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZREVRANK' => $vendorDir . '/predis/predis/src/Command/Redis/ZREVRANK.php', - 'Predis\\Command\\Redis\\ZSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/ZSCAN.php', - 'Predis\\Command\\Redis\\ZSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZSCORE.php', - 'Predis\\Command\\Redis\\ZUNION' => $vendorDir . '/predis/predis/src/Command/Redis/ZUNION.php', - 'Predis\\Command\\Redis\\ZUNIONSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZUNIONSTORE.php', - 'Predis\\Command\\ScriptCommand' => $vendorDir . '/predis/predis/src/Command/ScriptCommand.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DeleteStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DeleteStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DumpStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\FlushStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\KillStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\ListStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\RestoreStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\StatsStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php', - 'Predis\\Command\\Strategy\\StrategyResolverInterface' => $vendorDir . '/predis/predis/src/Command/Strategy/StrategyResolverInterface.php', - 'Predis\\Command\\Strategy\\SubcommandStrategyInterface' => $vendorDir . '/predis/predis/src/Command/Strategy/SubcommandStrategyInterface.php', - 'Predis\\Command\\Strategy\\SubcommandStrategyResolver' => $vendorDir . '/predis/predis/src/Command/Strategy/SubcommandStrategyResolver.php', - 'Predis\\Command\\Traits\\Aggregate' => $vendorDir . '/predis/predis/src/Command/Traits/Aggregate.php', - 'Predis\\Command\\Traits\\BitByte' => $vendorDir . '/predis/predis/src/Command/Traits/BitByte.php', - 'Predis\\Command\\Traits\\BloomFilters\\BucketSize' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php', - 'Predis\\Command\\Traits\\BloomFilters\\Capacity' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Capacity.php', - 'Predis\\Command\\Traits\\BloomFilters\\Error' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Error.php', - 'Predis\\Command\\Traits\\BloomFilters\\Expansion' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Expansion.php', - 'Predis\\Command\\Traits\\BloomFilters\\Items' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Items.php', - 'Predis\\Command\\Traits\\BloomFilters\\MaxIterations' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php', - 'Predis\\Command\\Traits\\BloomFilters\\NoCreate' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php', - 'Predis\\Command\\Traits\\By\\ByArgument' => $vendorDir . '/predis/predis/src/Command/Traits/By/ByArgument.php', - 'Predis\\Command\\Traits\\By\\ByLexByScore' => $vendorDir . '/predis/predis/src/Command/Traits/By/ByLexByScore.php', - 'Predis\\Command\\Traits\\By\\GeoBy' => $vendorDir . '/predis/predis/src/Command/Traits/By/GeoBy.php', - 'Predis\\Command\\Traits\\Count' => $vendorDir . '/predis/predis/src/Command/Traits/Count.php', - 'Predis\\Command\\Traits\\DB' => $vendorDir . '/predis/predis/src/Command/Traits/DB.php', - 'Predis\\Command\\Traits\\Expire\\ExpireOptions' => $vendorDir . '/predis/predis/src/Command/Traits/Expire/ExpireOptions.php', - 'Predis\\Command\\Traits\\From\\GeoFrom' => $vendorDir . '/predis/predis/src/Command/Traits/From/GeoFrom.php', - 'Predis\\Command\\Traits\\Get\\Get' => $vendorDir . '/predis/predis/src/Command/Traits/Get/Get.php', - 'Predis\\Command\\Traits\\Json\\Indent' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Indent.php', - 'Predis\\Command\\Traits\\Json\\Newline' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Newline.php', - 'Predis\\Command\\Traits\\Json\\NxXxArgument' => $vendorDir . '/predis/predis/src/Command/Traits/Json/NxXxArgument.php', - 'Predis\\Command\\Traits\\Json\\Space' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Space.php', - 'Predis\\Command\\Traits\\Keys' => $vendorDir . '/predis/predis/src/Command/Traits/Keys.php', - 'Predis\\Command\\Traits\\LeftRight' => $vendorDir . '/predis/predis/src/Command/Traits/LeftRight.php', - 'Predis\\Command\\Traits\\Limit\\Limit' => $vendorDir . '/predis/predis/src/Command/Traits/Limit/Limit.php', - 'Predis\\Command\\Traits\\Limit\\LimitObject' => $vendorDir . '/predis/predis/src/Command/Traits/Limit/LimitObject.php', - 'Predis\\Command\\Traits\\MinMaxModifier' => $vendorDir . '/predis/predis/src/Command/Traits/MinMaxModifier.php', - 'Predis\\Command\\Traits\\Replace' => $vendorDir . '/predis/predis/src/Command/Traits/Replace.php', - 'Predis\\Command\\Traits\\Rev' => $vendorDir . '/predis/predis/src/Command/Traits/Rev.php', - 'Predis\\Command\\Traits\\Sorting' => $vendorDir . '/predis/predis/src/Command/Traits/Sorting.php', - 'Predis\\Command\\Traits\\Storedist' => $vendorDir . '/predis/predis/src/Command/Traits/Storedist.php', - 'Predis\\Command\\Traits\\Timeout' => $vendorDir . '/predis/predis/src/Command/Traits/Timeout.php', - 'Predis\\Command\\Traits\\To\\ServerTo' => $vendorDir . '/predis/predis/src/Command/Traits/To/ServerTo.php', - 'Predis\\Command\\Traits\\Weights' => $vendorDir . '/predis/predis/src/Command/Traits/Weights.php', - 'Predis\\Command\\Traits\\With\\WithCoord' => $vendorDir . '/predis/predis/src/Command/Traits/With/WithCoord.php', - 'Predis\\Command\\Traits\\With\\WithDist' => $vendorDir . '/predis/predis/src/Command/Traits/With/WithDist.php', - 'Predis\\Command\\Traits\\With\\WithHash' => $vendorDir . '/predis/predis/src/Command/Traits/With/WithHash.php', - 'Predis\\Command\\Traits\\With\\WithScores' => $vendorDir . '/predis/predis/src/Command/Traits/With/WithScores.php', - 'Predis\\Command\\Traits\\With\\WithValues' => $vendorDir . '/predis/predis/src/Command/Traits/With/WithValues.php', - 'Predis\\CommunicationException' => $vendorDir . '/predis/predis/src/CommunicationException.php', - 'Predis\\Configuration\\OptionInterface' => $vendorDir . '/predis/predis/src/Configuration/OptionInterface.php', - 'Predis\\Configuration\\Option\\Aggregate' => $vendorDir . '/predis/predis/src/Configuration/Option/Aggregate.php', - 'Predis\\Configuration\\Option\\CRC16' => $vendorDir . '/predis/predis/src/Configuration/Option/CRC16.php', - 'Predis\\Configuration\\Option\\Cluster' => $vendorDir . '/predis/predis/src/Configuration/Option/Cluster.php', - 'Predis\\Configuration\\Option\\Commands' => $vendorDir . '/predis/predis/src/Configuration/Option/Commands.php', - 'Predis\\Configuration\\Option\\Connections' => $vendorDir . '/predis/predis/src/Configuration/Option/Connections.php', - 'Predis\\Configuration\\Option\\Exceptions' => $vendorDir . '/predis/predis/src/Configuration/Option/Exceptions.php', - 'Predis\\Configuration\\Option\\Prefix' => $vendorDir . '/predis/predis/src/Configuration/Option/Prefix.php', - 'Predis\\Configuration\\Option\\Replication' => $vendorDir . '/predis/predis/src/Configuration/Option/Replication.php', - 'Predis\\Configuration\\Options' => $vendorDir . '/predis/predis/src/Configuration/Options.php', - 'Predis\\Configuration\\OptionsInterface' => $vendorDir . '/predis/predis/src/Configuration/OptionsInterface.php', - 'Predis\\Connection\\AbstractConnection' => $vendorDir . '/predis/predis/src/Connection/AbstractConnection.php', - 'Predis\\Connection\\AggregateConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/AggregateConnectionInterface.php', - 'Predis\\Connection\\Cluster\\ClusterInterface' => $vendorDir . '/predis/predis/src/Connection/Cluster/ClusterInterface.php', - 'Predis\\Connection\\Cluster\\PredisCluster' => $vendorDir . '/predis/predis/src/Connection/Cluster/PredisCluster.php', - 'Predis\\Connection\\Cluster\\RedisCluster' => $vendorDir . '/predis/predis/src/Connection/Cluster/RedisCluster.php', - 'Predis\\Connection\\CompositeConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/CompositeConnectionInterface.php', - 'Predis\\Connection\\CompositeStreamConnection' => $vendorDir . '/predis/predis/src/Connection/CompositeStreamConnection.php', - 'Predis\\Connection\\ConnectionException' => $vendorDir . '/predis/predis/src/Connection/ConnectionException.php', - 'Predis\\Connection\\ConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/ConnectionInterface.php', - 'Predis\\Connection\\Factory' => $vendorDir . '/predis/predis/src/Connection/Factory.php', - 'Predis\\Connection\\FactoryInterface' => $vendorDir . '/predis/predis/src/Connection/FactoryInterface.php', - 'Predis\\Connection\\NodeConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/NodeConnectionInterface.php', - 'Predis\\Connection\\Parameters' => $vendorDir . '/predis/predis/src/Connection/Parameters.php', - 'Predis\\Connection\\ParametersInterface' => $vendorDir . '/predis/predis/src/Connection/ParametersInterface.php', - 'Predis\\Connection\\PhpiredisSocketConnection' => $vendorDir . '/predis/predis/src/Connection/PhpiredisSocketConnection.php', - 'Predis\\Connection\\PhpiredisStreamConnection' => $vendorDir . '/predis/predis/src/Connection/PhpiredisStreamConnection.php', - 'Predis\\Connection\\RelayConnection' => $vendorDir . '/predis/predis/src/Connection/RelayConnection.php', - 'Predis\\Connection\\RelayMethods' => $vendorDir . '/predis/predis/src/Connection/RelayMethods.php', - 'Predis\\Connection\\Replication\\MasterSlaveReplication' => $vendorDir . '/predis/predis/src/Connection/Replication/MasterSlaveReplication.php', - 'Predis\\Connection\\Replication\\ReplicationInterface' => $vendorDir . '/predis/predis/src/Connection/Replication/ReplicationInterface.php', - 'Predis\\Connection\\Replication\\SentinelReplication' => $vendorDir . '/predis/predis/src/Connection/Replication/SentinelReplication.php', - 'Predis\\Connection\\StreamConnection' => $vendorDir . '/predis/predis/src/Connection/StreamConnection.php', - 'Predis\\Connection\\WebdisConnection' => $vendorDir . '/predis/predis/src/Connection/WebdisConnection.php', - 'Predis\\Monitor\\Consumer' => $vendorDir . '/predis/predis/src/Monitor/Consumer.php', - 'Predis\\NotSupportedException' => $vendorDir . '/predis/predis/src/NotSupportedException.php', - 'Predis\\Pipeline\\Atomic' => $vendorDir . '/predis/predis/src/Pipeline/Atomic.php', - 'Predis\\Pipeline\\ConnectionErrorProof' => $vendorDir . '/predis/predis/src/Pipeline/ConnectionErrorProof.php', - 'Predis\\Pipeline\\FireAndForget' => $vendorDir . '/predis/predis/src/Pipeline/FireAndForget.php', - 'Predis\\Pipeline\\Pipeline' => $vendorDir . '/predis/predis/src/Pipeline/Pipeline.php', - 'Predis\\Pipeline\\RelayAtomic' => $vendorDir . '/predis/predis/src/Pipeline/RelayAtomic.php', - 'Predis\\Pipeline\\RelayPipeline' => $vendorDir . '/predis/predis/src/Pipeline/RelayPipeline.php', - 'Predis\\PredisException' => $vendorDir . '/predis/predis/src/PredisException.php', - 'Predis\\Protocol\\ProtocolException' => $vendorDir . '/predis/predis/src/Protocol/ProtocolException.php', - 'Predis\\Protocol\\ProtocolProcessorInterface' => $vendorDir . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', - 'Predis\\Protocol\\RequestSerializerInterface' => $vendorDir . '/predis/predis/src/Protocol/RequestSerializerInterface.php', - 'Predis\\Protocol\\ResponseReaderInterface' => $vendorDir . '/predis/predis/src/Protocol/ResponseReaderInterface.php', - 'Predis\\Protocol\\Text\\CompositeProtocolProcessor' => $vendorDir . '/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php', - 'Predis\\Protocol\\Text\\Handler\\BulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/BulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ErrorResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php', - 'Predis\\Protocol\\Text\\Handler\\IntegerResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php', - 'Predis\\Protocol\\Text\\Handler\\MultiBulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ResponseHandlerInterface' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php', - 'Predis\\Protocol\\Text\\Handler\\StatusResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/StatusResponse.php', - 'Predis\\Protocol\\Text\\Handler\\StreamableMultiBulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php', - 'Predis\\Protocol\\Text\\ProtocolProcessor' => $vendorDir . '/predis/predis/src/Protocol/Text/ProtocolProcessor.php', - 'Predis\\Protocol\\Text\\RequestSerializer' => $vendorDir . '/predis/predis/src/Protocol/Text/RequestSerializer.php', - 'Predis\\Protocol\\Text\\ResponseReader' => $vendorDir . '/predis/predis/src/Protocol/Text/ResponseReader.php', - 'Predis\\PubSub\\AbstractConsumer' => $vendorDir . '/predis/predis/src/PubSub/AbstractConsumer.php', - 'Predis\\PubSub\\Consumer' => $vendorDir . '/predis/predis/src/PubSub/Consumer.php', - 'Predis\\PubSub\\DispatcherLoop' => $vendorDir . '/predis/predis/src/PubSub/DispatcherLoop.php', - 'Predis\\PubSub\\RelayConsumer' => $vendorDir . '/predis/predis/src/PubSub/RelayConsumer.php', - 'Predis\\Replication\\MissingMasterException' => $vendorDir . '/predis/predis/src/Replication/MissingMasterException.php', - 'Predis\\Replication\\ReplicationStrategy' => $vendorDir . '/predis/predis/src/Replication/ReplicationStrategy.php', - 'Predis\\Replication\\RoleException' => $vendorDir . '/predis/predis/src/Replication/RoleException.php', - 'Predis\\Response\\Error' => $vendorDir . '/predis/predis/src/Response/Error.php', - 'Predis\\Response\\ErrorInterface' => $vendorDir . '/predis/predis/src/Response/ErrorInterface.php', - 'Predis\\Response\\Iterator\\MultiBulk' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulk.php', - 'Predis\\Response\\Iterator\\MultiBulkIterator' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulkIterator.php', - 'Predis\\Response\\Iterator\\MultiBulkTuple' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulkTuple.php', - 'Predis\\Response\\ResponseInterface' => $vendorDir . '/predis/predis/src/Response/ResponseInterface.php', - 'Predis\\Response\\ServerException' => $vendorDir . '/predis/predis/src/Response/ServerException.php', - 'Predis\\Response\\Status' => $vendorDir . '/predis/predis/src/Response/Status.php', - 'Predis\\Session\\Handler' => $vendorDir . '/predis/predis/src/Session/Handler.php', - 'Predis\\Transaction\\AbortedMultiExecException' => $vendorDir . '/predis/predis/src/Transaction/AbortedMultiExecException.php', - 'Predis\\Transaction\\MultiExec' => $vendorDir . '/predis/predis/src/Transaction/MultiExec.php', - 'Predis\\Transaction\\MultiExecState' => $vendorDir . '/predis/predis/src/Transaction/MultiExecState.php', - 'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php', - 'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php', - 'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php', - 'Psr\\Cache\\InvalidArgumentException' => $vendorDir . '/psr/cache/src/InvalidArgumentException.php', - 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/psr/event-dispatcher/src/EventDispatcherInterface.php', - 'Psr\\EventDispatcher\\ListenerProviderInterface' => $vendorDir . '/psr/event-dispatcher/src/ListenerProviderInterface.php', - 'Psr\\EventDispatcher\\StoppableEventInterface' => $vendorDir . '/psr/event-dispatcher/src/StoppableEventInterface.php', - 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', - 'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', - 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php', - 'SebastianBergmann\\CliParser\\Exception' => $vendorDir . '/sebastian/cli-parser/src/exceptions/Exception.php', - 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php', - 'SebastianBergmann\\CliParser\\Parser' => $vendorDir . '/sebastian/cli-parser/src/Parser.php', - 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php', - 'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php', - 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', - 'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Selector.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WrongXdebugVersionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2NotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3NotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php', - 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php', - 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php', - 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/Node/CrapIndex.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php', - 'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php', - 'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php', - 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Cobertura.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', - 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php', - 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Filesystem.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Percentage.php', - 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php', - 'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php', - 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', - 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => $vendorDir . '/sebastian/code-unit/src/ClassMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\ClassUnit' => $vendorDir . '/sebastian/code-unit/src/ClassUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnit' => $vendorDir . '/sebastian/code-unit/src/CodeUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollection' => $vendorDir . '/sebastian/code-unit/src/CodeUnitCollection.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => $vendorDir . '/sebastian/code-unit/src/CodeUnitCollectionIterator.php', - 'SebastianBergmann\\CodeUnit\\Exception' => $vendorDir . '/sebastian/code-unit/src/exceptions/Exception.php', - 'SebastianBergmann\\CodeUnit\\FunctionUnit' => $vendorDir . '/sebastian/code-unit/src/FunctionUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => $vendorDir . '/sebastian/code-unit/src/InterfaceMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceUnit' => $vendorDir . '/sebastian/code-unit/src/InterfaceUnit.php', - 'SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => $vendorDir . '/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php', - 'SebastianBergmann\\CodeUnit\\Mapper' => $vendorDir . '/sebastian/code-unit/src/Mapper.php', - 'SebastianBergmann\\CodeUnit\\NoTraitException' => $vendorDir . '/sebastian/code-unit/src/exceptions/NoTraitException.php', - 'SebastianBergmann\\CodeUnit\\ReflectionException' => $vendorDir . '/sebastian/code-unit/src/exceptions/ReflectionException.php', - 'SebastianBergmann\\CodeUnit\\TraitMethodUnit' => $vendorDir . '/sebastian/code-unit/src/TraitMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\TraitUnit' => $vendorDir . '/sebastian/code-unit/src/TraitUnit.php', - 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', - 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', - 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php', - 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php', - 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php', - 'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php', - 'SebastianBergmann\\Comparator\\Exception' => $vendorDir . '/sebastian/comparator/src/exceptions/Exception.php', - 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php', - 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php', - 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php', - 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php', - 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php', - 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php', - 'SebastianBergmann\\Comparator\\RuntimeException' => $vendorDir . '/sebastian/comparator/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php', - 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php', - 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php', - 'SebastianBergmann\\Complexity\\Calculator' => $vendorDir . '/sebastian/complexity/src/Calculator.php', - 'SebastianBergmann\\Complexity\\Complexity' => $vendorDir . '/sebastian/complexity/src/Complexity/Complexity.php', - 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\ComplexityCollection' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollection.php', - 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php', - 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\Exception' => $vendorDir . '/sebastian/complexity/src/Exception/Exception.php', - 'SebastianBergmann\\Complexity\\RuntimeException' => $vendorDir . '/sebastian/complexity/src/Exception/RuntimeException.php', - 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', - 'SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', - 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', - 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', - 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', - 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', - 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php', - 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', - 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', - 'SebastianBergmann\\FileIterator\\Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', - 'SebastianBergmann\\FileIterator\\Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', - 'SebastianBergmann\\FileIterator\\Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', - 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php', - 'SebastianBergmann\\GlobalState\\ExcludeList' => $vendorDir . '/sebastian/global-state/src/ExcludeList.php', - 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', - 'SebastianBergmann\\Invoker\\Exception' => $vendorDir . '/phpunit/php-invoker/src/exceptions/Exception.php', - 'SebastianBergmann\\Invoker\\Invoker' => $vendorDir . '/phpunit/php-invoker/src/Invoker.php', - 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php', - 'SebastianBergmann\\Invoker\\TimeoutException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/TimeoutException.php', - 'SebastianBergmann\\LinesOfCode\\Counter' => $vendorDir . '/sebastian/lines-of-code/src/Counter.php', - 'SebastianBergmann\\LinesOfCode\\Exception' => $vendorDir . '/sebastian/lines-of-code/src/Exception/Exception.php', - 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php', - 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => $vendorDir . '/sebastian/lines-of-code/src/LineCountingVisitor.php', - 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => $vendorDir . '/sebastian/lines-of-code/src/LinesOfCode.php', - 'SebastianBergmann\\LinesOfCode\\NegativeValueException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/NegativeValueException.php', - 'SebastianBergmann\\LinesOfCode\\RuntimeException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/RuntimeException.php', - 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', - 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', - 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php', - 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php', - 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', - 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', - 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', - 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', - 'SebastianBergmann\\Template\\Exception' => $vendorDir . '/phpunit/php-text-template/src/exceptions/Exception.php', - 'SebastianBergmann\\Template\\InvalidArgumentException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php', - 'SebastianBergmann\\Template\\RuntimeException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Template\\Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', - 'SebastianBergmann\\Timer\\Duration' => $vendorDir . '/phpunit/php-timer/src/Duration.php', - 'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/exceptions/Exception.php', - 'SebastianBergmann\\Timer\\NoActiveTimerException' => $vendorDir . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php', - 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => $vendorDir . '/phpunit/php-timer/src/ResourceUsageFormatter.php', - 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => $vendorDir . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', - 'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/type/CallableType.php', - 'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php', - 'SebastianBergmann\\Type\\FalseType' => $vendorDir . '/sebastian/type/src/type/FalseType.php', - 'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/type/GenericObjectType.php', - 'SebastianBergmann\\Type\\IntersectionType' => $vendorDir . '/sebastian/type/src/type/IntersectionType.php', - 'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/type/IterableType.php', - 'SebastianBergmann\\Type\\MixedType' => $vendorDir . '/sebastian/type/src/type/MixedType.php', - 'SebastianBergmann\\Type\\NeverType' => $vendorDir . '/sebastian/type/src/type/NeverType.php', - 'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/type/NullType.php', - 'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/type/ObjectType.php', - 'SebastianBergmann\\Type\\Parameter' => $vendorDir . '/sebastian/type/src/Parameter.php', - 'SebastianBergmann\\Type\\ReflectionMapper' => $vendorDir . '/sebastian/type/src/ReflectionMapper.php', - 'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php', - 'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/type/SimpleType.php', - 'SebastianBergmann\\Type\\StaticType' => $vendorDir . '/sebastian/type/src/type/StaticType.php', - 'SebastianBergmann\\Type\\TrueType' => $vendorDir . '/sebastian/type/src/type/TrueType.php', - 'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/type/Type.php', - 'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php', - 'SebastianBergmann\\Type\\UnionType' => $vendorDir . '/sebastian/type/src/type/UnionType.php', - 'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/type/UnknownType.php', - 'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/type/VoidType.php', - 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', - 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', - 'Symfony\\Component\\Console\\Attribute\\AsCommand' => $vendorDir . '/symfony/console/Attribute/AsCommand.php', - 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => $vendorDir . '/symfony/console/CI/GithubActionReporter.php', - 'Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', - 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', - 'Symfony\\Component\\Console\\Command\\CompleteCommand' => $vendorDir . '/symfony/console/Command/CompleteCommand.php', - 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => $vendorDir . '/symfony/console/Command/DumpCompletionCommand.php', - 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', - 'Symfony\\Component\\Console\\Command\\LazyCommand' => $vendorDir . '/symfony/console/Command/LazyCommand.php', - 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', - 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', - 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', - 'Symfony\\Component\\Console\\Completion\\CompletionInput' => $vendorDir . '/symfony/console/Completion/CompletionInput.php', - 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => $vendorDir . '/symfony/console/Completion/CompletionSuggestions.php', - 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/BashCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => $vendorDir . '/symfony/console/Completion/Output/CompletionOutputInterface.php', - 'Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/FishCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/ZshCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Suggestion' => $vendorDir . '/symfony/console/Completion/Suggestion.php', - 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', - 'Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', - 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', - 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', - 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => $vendorDir . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', - 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php', - 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => $vendorDir . '/symfony/console/Event/ConsoleSignalEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', - 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', - 'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', - 'Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', - 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', - 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', - 'Symfony\\Component\\Console\\Helper\\Dumper' => $vendorDir . '/symfony/console/Helper/Dumper.php', - 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', - 'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', - 'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', - 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', - 'Symfony\\Component\\Console\\Helper\\OutputWrapper' => $vendorDir . '/symfony/console/Helper/OutputWrapper.php', - 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', - 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', - 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', - 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', - 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', - 'Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', - 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', - 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', - 'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', - 'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', - 'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', - 'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', - 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', - 'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', - 'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', - 'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', - 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php', - 'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', - 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', - 'Symfony\\Component\\Console\\Output\\AnsiColorMode' => $vendorDir . '/symfony/console/Output/AnsiColorMode.php', - 'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', - 'Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => $vendorDir . '/symfony/console/Output/ConsoleSectionOutput.php', - 'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', - 'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', - 'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', - 'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', - 'Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => $vendorDir . '/symfony/console/Output/TrimmedBufferOutput.php', - 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', - 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', - 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', - 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', - 'Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', - 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', - 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', - 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', - 'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', - 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => $vendorDir . '/symfony/console/Tester/CommandCompletionTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php', - 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => $vendorDir . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', - 'Symfony\\Component\\Console\\Tester\\TesterTrait' => $vendorDir . '/symfony/console/Tester/TesterTrait.php', - 'Symfony\\Component\\EventDispatcher\\Attribute\\AsEventListener' => $vendorDir . '/symfony/event-dispatcher/Attribute/AsEventListener.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php', - 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php', - 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php', - 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', - 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => $vendorDir . '/symfony/filesystem/Exception/RuntimeException.php', - 'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php', - 'Symfony\\Component\\Filesystem\\Path' => $vendorDir . '/symfony/filesystem/Path.php', - 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', - 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', - 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', - 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', - 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php', - 'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', - 'Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php', - 'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', - 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $vendorDir . '/symfony/finder/Iterator/LazyIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => $vendorDir . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', - 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', - 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/options-resolver/Exception/NoConfigurationException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => $vendorDir . '/symfony/options-resolver/OptionConfigurator.php', - 'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php', - 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php', - 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => $vendorDir . '/symfony/process/Exception/ProcessSignaledException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php', - 'Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php', - 'Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php', - 'Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php', - 'Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php', - 'Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php', - 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php', - 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php', - 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php', - 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php', - 'Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php', - 'Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php', - 'Symfony\\Component\\Stopwatch\\Section' => $vendorDir . '/symfony/stopwatch/Section.php', - 'Symfony\\Component\\Stopwatch\\Stopwatch' => $vendorDir . '/symfony/stopwatch/Stopwatch.php', - 'Symfony\\Component\\Stopwatch\\StopwatchEvent' => $vendorDir . '/symfony/stopwatch/StopwatchEvent.php', - 'Symfony\\Component\\Stopwatch\\StopwatchPeriod' => $vendorDir . '/symfony/stopwatch/StopwatchPeriod.php', - 'Symfony\\Component\\String\\AbstractString' => $vendorDir . '/symfony/string/AbstractString.php', - 'Symfony\\Component\\String\\AbstractUnicodeString' => $vendorDir . '/symfony/string/AbstractUnicodeString.php', - 'Symfony\\Component\\String\\ByteString' => $vendorDir . '/symfony/string/ByteString.php', - 'Symfony\\Component\\String\\CodePointString' => $vendorDir . '/symfony/string/CodePointString.php', - 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/string/Exception/ExceptionInterface.php', - 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/string/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\String\\Exception\\RuntimeException' => $vendorDir . '/symfony/string/Exception/RuntimeException.php', - 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => $vendorDir . '/symfony/string/Inflector/EnglishInflector.php', - 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => $vendorDir . '/symfony/string/Inflector/FrenchInflector.php', - 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => $vendorDir . '/symfony/string/Inflector/InflectorInterface.php', - 'Symfony\\Component\\String\\LazyString' => $vendorDir . '/symfony/string/LazyString.php', - 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => $vendorDir . '/symfony/string/Slugger/AsciiSlugger.php', - 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => $vendorDir . '/symfony/string/Slugger/SluggerInterface.php', - 'Symfony\\Component\\String\\UnicodeString' => $vendorDir . '/symfony/string/UnicodeString.php', - 'Symfony\\Contracts\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher-contracts/Event.php', - 'Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher-contracts/EventDispatcherInterface.php', - 'Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', - 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', - 'Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', - 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php', - 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', - 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', - 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.php', - 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', - 'Symfony\\Polyfill\\Php81\\Php81' => $vendorDir . '/symfony/polyfill-php81/Php81.php', - 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', - 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', - 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php', - 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php', - 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php', - 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php', - 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php', - 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php', - 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', - 'org\\bovigo\\vfs\\DotDirectory' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/DotDirectory.php', - 'org\\bovigo\\vfs\\Quota' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/Quota.php', - 'org\\bovigo\\vfs\\content\\FileContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/FileContent.php', - 'org\\bovigo\\vfs\\content\\LargeFileContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php', - 'org\\bovigo\\vfs\\content\\SeekableFileContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php', - 'org\\bovigo\\vfs\\content\\StringBasedFileContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php', - 'org\\bovigo\\vfs\\vfsStream' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php', - 'org\\bovigo\\vfs\\vfsStreamAbstractContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamAbstractContent.php', - 'org\\bovigo\\vfs\\vfsStreamBlock' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php', - 'org\\bovigo\\vfs\\vfsStreamContainer' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainer.php', - 'org\\bovigo\\vfs\\vfsStreamContainerIterator' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php', - 'org\\bovigo\\vfs\\vfsStreamContent' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContent.php', - 'org\\bovigo\\vfs\\vfsStreamDirectory' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php', - 'org\\bovigo\\vfs\\vfsStreamException' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamException.php', - 'org\\bovigo\\vfs\\vfsStreamFile' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamFile.php', - 'org\\bovigo\\vfs\\vfsStreamWrapper' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamAbstractVisitor' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamPrintVisitor' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamStructureVisitor' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamVisitor' => $vendorDir . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php', -); diff --git a/old_vendor/composer/autoload_files.php b/old_vendor/composer/autoload_files.php deleted file mode 100644 index 74569d66..00000000 --- a/old_vendor/composer/autoload_files.php +++ /dev/null @@ -1,20 +0,0 @@ - $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', - '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', - 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', - 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', - 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', - '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', - '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '3917c79c5052b270641b5a200963dbc2' => $vendorDir . '/kint-php/kint/init.php', - 'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php', -); diff --git a/old_vendor/composer/autoload_namespaces.php b/old_vendor/composer/autoload_namespaces.php deleted file mode 100644 index 4ecbfd0c..00000000 --- a/old_vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,10 +0,0 @@ - array($vendorDir . '/mikey179/vfsstream/src/main/php'), -); diff --git a/old_vendor/composer/autoload_psr4.php b/old_vendor/composer/autoload_psr4.php deleted file mode 100644 index 413a5f89..00000000 --- a/old_vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,46 +0,0 @@ - array($vendorDir . '/symfony/polyfill-php81'), - 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), - 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), - 'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'), - 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), - 'Symfony\\Component\\Stopwatch\\' => array($vendorDir . '/symfony/stopwatch'), - 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), - 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), - 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), - 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), - 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), - 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), - 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), - 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), - 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), - 'Predis\\' => array($vendorDir . '/predis/predis/src'), - 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), - 'PhpCsFixer\\' => array($vendorDir . '/friendsofphp/php-cs-fixer/src'), - 'Nexus\\CsConfig\\' => array($vendorDir . '/nexusphp/cs-config/src'), - 'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'), - 'Kint\\' => array($vendorDir . '/kint-php/kint/src'), - 'Faker\\' => array($vendorDir . '/fakerphp/faker/src/Faker'), - 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), - 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations'), - 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'), - 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), - 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), - 'Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), - 'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), - 'Composer\\Pcre\\' => array($vendorDir . '/composer/pcre/src'), - 'CodeIgniter\\CodingStandard\\' => array($vendorDir . '/codeigniter/coding-standard/src'), - 'CodeIgniter\\' => array($baseDir . '/system'), -); diff --git a/old_vendor/composer/autoload_real.php b/old_vendor/composer/autoload_real.php deleted file mode 100644 index ebf6c09b..00000000 --- a/old_vendor/composer/autoload_real.php +++ /dev/null @@ -1,80 +0,0 @@ -= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } - - $loader->register(true); - - if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::$files; - } else { - $includeFiles = require __DIR__ . '/autoload_files.php'; - } - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire01bb8cdaddb35dba667c1b3b51c53f89($fileIdentifier, $file); - } - - return $loader; - } -} - -/** - * @param string $fileIdentifier - * @param string $file - * @return void - */ -function composerRequire01bb8cdaddb35dba667c1b3b51c53f89($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } -} diff --git a/old_vendor/composer/autoload_static.php b/old_vendor/composer/autoload_static.php deleted file mode 100644 index 2345637a..00000000 --- a/old_vendor/composer/autoload_static.php +++ /dev/null @@ -1,3480 +0,0 @@ - __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', - 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', - 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', - 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', - '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', - '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '3917c79c5052b270641b5a200963dbc2' => __DIR__ . '/..' . '/kint-php/kint/init.php', - 'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'S' => - array ( - 'Symfony\\Polyfill\\Php81\\' => 23, - 'Symfony\\Polyfill\\Php80\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Contracts\\Service\\' => 26, - 'Symfony\\Contracts\\EventDispatcher\\' => 34, - 'Symfony\\Component\\String\\' => 25, - 'Symfony\\Component\\Stopwatch\\' => 28, - 'Symfony\\Component\\Process\\' => 26, - 'Symfony\\Component\\OptionsResolver\\' => 34, - 'Symfony\\Component\\Finder\\' => 25, - 'Symfony\\Component\\Filesystem\\' => 29, - 'Symfony\\Component\\EventDispatcher\\' => 34, - 'Symfony\\Component\\Console\\' => 26, - ), - 'P' => - array ( - 'Psr\\Log\\' => 8, - 'Psr\\EventDispatcher\\' => 20, - 'Psr\\Container\\' => 14, - 'Psr\\Cache\\' => 10, - 'Predis\\' => 7, - 'PhpParser\\' => 10, - 'PhpCsFixer\\' => 11, - ), - 'N' => - array ( - 'Nexus\\CsConfig\\' => 15, - ), - 'L' => - array ( - 'Laminas\\Escaper\\' => 16, - ), - 'K' => - array ( - 'Kint\\' => 5, - ), - 'F' => - array ( - 'Faker\\' => 6, - ), - 'D' => - array ( - 'Doctrine\\Instantiator\\' => 22, - 'Doctrine\\Deprecations\\' => 22, - 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Annotations\\' => 28, - 'DeepCopy\\' => 9, - ), - 'C' => - array ( - 'Composer\\XdebugHandler\\' => 23, - 'Composer\\Semver\\' => 16, - 'Composer\\Pcre\\' => 14, - 'CodeIgniter\\CodingStandard\\' => 27, - 'CodeIgniter\\' => 12, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Symfony\\Polyfill\\Php81\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php81', - ), - 'Symfony\\Polyfill\\Php80\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', - ), - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', - ), - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Contracts\\Service\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/service-contracts', - ), - 'Symfony\\Contracts\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts', - ), - 'Symfony\\Component\\String\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/string', - ), - 'Symfony\\Component\\Stopwatch\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/stopwatch', - ), - 'Symfony\\Component\\Process\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/process', - ), - 'Symfony\\Component\\OptionsResolver\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/options-resolver', - ), - 'Symfony\\Component\\Finder\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/finder', - ), - 'Symfony\\Component\\Filesystem\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/filesystem', - ), - 'Symfony\\Component\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/event-dispatcher', - ), - 'Symfony\\Component\\Console\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/console', - ), - 'Psr\\Log\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', - ), - 'Psr\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/event-dispatcher/src', - ), - 'Psr\\Container\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/container/src', - ), - 'Psr\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/cache/src', - ), - 'Predis\\' => - array ( - 0 => __DIR__ . '/..' . '/predis/predis/src', - ), - 'PhpParser\\' => - array ( - 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser', - ), - 'PhpCsFixer\\' => - array ( - 0 => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src', - ), - 'Nexus\\CsConfig\\' => - array ( - 0 => __DIR__ . '/..' . '/nexusphp/cs-config/src', - ), - 'Laminas\\Escaper\\' => - array ( - 0 => __DIR__ . '/..' . '/laminas/laminas-escaper/src', - ), - 'Kint\\' => - array ( - 0 => __DIR__ . '/..' . '/kint-php/kint/src', - ), - 'Faker\\' => - array ( - 0 => __DIR__ . '/..' . '/fakerphp/faker/src/Faker', - ), - 'Doctrine\\Instantiator\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', - ), - 'Doctrine\\Deprecations\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations', - ), - 'Doctrine\\Common\\Lexer\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/lexer/src', - ), - 'Doctrine\\Common\\Annotations\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', - ), - 'DeepCopy\\' => - array ( - 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', - ), - 'Composer\\XdebugHandler\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/xdebug-handler/src', - ), - 'Composer\\Semver\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/semver/src', - ), - 'Composer\\Pcre\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/pcre/src', - ), - 'CodeIgniter\\CodingStandard\\' => - array ( - 0 => __DIR__ . '/..' . '/codeigniter/coding-standard/src', - ), - 'CodeIgniter\\' => - array ( - 0 => __DIR__ . '/../..' . '/system', - ), - ); - - public static $prefixesPsr0 = array ( - 'o' => - array ( - 'org\\bovigo\\vfs\\' => - array ( - 0 => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php', - ), - ), - ); - - public static $classMap = array ( - 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', - 'CodeIgniter\\API\\ResponseTrait' => __DIR__ . '/../..' . '/system/API/ResponseTrait.php', - 'CodeIgniter\\Autoloader\\Autoloader' => __DIR__ . '/../..' . '/system/Autoloader/Autoloader.php', - 'CodeIgniter\\Autoloader\\FileLocator' => __DIR__ . '/../..' . '/system/Autoloader/FileLocator.php', - 'CodeIgniter\\BaseModel' => __DIR__ . '/../..' . '/system/BaseModel.php', - 'CodeIgniter\\CLI\\BaseCommand' => __DIR__ . '/../..' . '/system/CLI/BaseCommand.php', - 'CodeIgniter\\CLI\\CLI' => __DIR__ . '/../..' . '/system/CLI/CLI.php', - 'CodeIgniter\\CLI\\Commands' => __DIR__ . '/../..' . '/system/CLI/Commands.php', - 'CodeIgniter\\CLI\\Console' => __DIR__ . '/../..' . '/system/CLI/Console.php', - 'CodeIgniter\\CLI\\Exceptions\\CLIException' => __DIR__ . '/../..' . '/system/CLI/Exceptions/CLIException.php', - 'CodeIgniter\\CLI\\GeneratorTrait' => __DIR__ . '/../..' . '/system/CLI/GeneratorTrait.php', - 'CodeIgniter\\Cache\\CacheFactory' => __DIR__ . '/../..' . '/system/Cache/CacheFactory.php', - 'CodeIgniter\\Cache\\CacheInterface' => __DIR__ . '/../..' . '/system/Cache/CacheInterface.php', - 'CodeIgniter\\Cache\\Exceptions\\CacheException' => __DIR__ . '/../..' . '/system/Cache/Exceptions/CacheException.php', - 'CodeIgniter\\Cache\\Exceptions\\ExceptionInterface' => __DIR__ . '/../..' . '/system/Cache/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Cache\\Handlers\\BaseHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/BaseHandler.php', - 'CodeIgniter\\Cache\\Handlers\\DummyHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/DummyHandler.php', - 'CodeIgniter\\Cache\\Handlers\\FileHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/FileHandler.php', - 'CodeIgniter\\Cache\\Handlers\\MemcachedHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/MemcachedHandler.php', - 'CodeIgniter\\Cache\\Handlers\\PredisHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/PredisHandler.php', - 'CodeIgniter\\Cache\\Handlers\\RedisHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/RedisHandler.php', - 'CodeIgniter\\Cache\\Handlers\\WincacheHandler' => __DIR__ . '/../..' . '/system/Cache/Handlers/WincacheHandler.php', - 'CodeIgniter\\CodeIgniter' => __DIR__ . '/../..' . '/system/CodeIgniter.php', - 'CodeIgniter\\CodingStandard\\CodeIgniter4' => __DIR__ . '/..' . '/codeigniter/coding-standard/src/CodeIgniter4.php', - 'CodeIgniter\\Commands\\Cache\\ClearCache' => __DIR__ . '/../..' . '/system/Commands/Cache/ClearCache.php', - 'CodeIgniter\\Commands\\Cache\\InfoCache' => __DIR__ . '/../..' . '/system/Commands/Cache/InfoCache.php', - 'CodeIgniter\\Commands\\Database\\CreateDatabase' => __DIR__ . '/../..' . '/system/Commands/Database/CreateDatabase.php', - 'CodeIgniter\\Commands\\Database\\Migrate' => __DIR__ . '/../..' . '/system/Commands/Database/Migrate.php', - 'CodeIgniter\\Commands\\Database\\MigrateRefresh' => __DIR__ . '/../..' . '/system/Commands/Database/MigrateRefresh.php', - 'CodeIgniter\\Commands\\Database\\MigrateRollback' => __DIR__ . '/../..' . '/system/Commands/Database/MigrateRollback.php', - 'CodeIgniter\\Commands\\Database\\MigrateStatus' => __DIR__ . '/../..' . '/system/Commands/Database/MigrateStatus.php', - 'CodeIgniter\\Commands\\Database\\Seed' => __DIR__ . '/../..' . '/system/Commands/Database/Seed.php', - 'CodeIgniter\\Commands\\Database\\ShowTableInfo' => __DIR__ . '/../..' . '/system/Commands/Database/ShowTableInfo.php', - 'CodeIgniter\\Commands\\Encryption\\GenerateKey' => __DIR__ . '/../..' . '/system/Commands/Encryption/GenerateKey.php', - 'CodeIgniter\\Commands\\Generators\\CellGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/CellGenerator.php', - 'CodeIgniter\\Commands\\Generators\\CommandGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/CommandGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ConfigGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/ConfigGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ControllerGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/ControllerGenerator.php', - 'CodeIgniter\\Commands\\Generators\\EntityGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/EntityGenerator.php', - 'CodeIgniter\\Commands\\Generators\\FilterGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/FilterGenerator.php', - 'CodeIgniter\\Commands\\Generators\\MigrateCreate' => __DIR__ . '/../..' . '/system/Commands/Generators/MigrateCreate.php', - 'CodeIgniter\\Commands\\Generators\\MigrationGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/MigrationGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ModelGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/ModelGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ScaffoldGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/ScaffoldGenerator.php', - 'CodeIgniter\\Commands\\Generators\\SeederGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/SeederGenerator.php', - 'CodeIgniter\\Commands\\Generators\\SessionMigrationGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/SessionMigrationGenerator.php', - 'CodeIgniter\\Commands\\Generators\\ValidationGenerator' => __DIR__ . '/../..' . '/system/Commands/Generators/ValidationGenerator.php', - 'CodeIgniter\\Commands\\Help' => __DIR__ . '/../..' . '/system/Commands/Help.php', - 'CodeIgniter\\Commands\\Housekeeping\\ClearDebugbar' => __DIR__ . '/../..' . '/system/Commands/Housekeeping/ClearDebugbar.php', - 'CodeIgniter\\Commands\\Housekeeping\\ClearLogs' => __DIR__ . '/../..' . '/system/Commands/Housekeeping/ClearLogs.php', - 'CodeIgniter\\Commands\\ListCommands' => __DIR__ . '/../..' . '/system/Commands/ListCommands.php', - 'CodeIgniter\\Commands\\Server\\Serve' => __DIR__ . '/../..' . '/system/Commands/Server/Serve.php', - 'CodeIgniter\\Commands\\Utilities\\Environment' => __DIR__ . '/../..' . '/system/Commands/Utilities/Environment.php', - 'CodeIgniter\\Commands\\Utilities\\FilterCheck' => __DIR__ . '/../..' . '/system/Commands/Utilities/FilterCheck.php', - 'CodeIgniter\\Commands\\Utilities\\Namespaces' => __DIR__ . '/../..' . '/system/Commands/Utilities/Namespaces.php', - 'CodeIgniter\\Commands\\Utilities\\Publish' => __DIR__ . '/../..' . '/system/Commands/Utilities/Publish.php', - 'CodeIgniter\\Commands\\Utilities\\Routes' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouteCollector' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/AutoRouteCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouterImproved\\AutoRouteCollector' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/AutoRouterImproved/AutoRouteCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\AutoRouterImproved\\ControllerMethodReader' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/AutoRouterImproved/ControllerMethodReader.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\ControllerFinder' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/ControllerFinder.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\ControllerMethodReader' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/ControllerMethodReader.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\FilterCollector' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/FilterCollector.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\FilterFinder' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/FilterFinder.php', - 'CodeIgniter\\Commands\\Utilities\\Routes\\SampleURIGenerator' => __DIR__ . '/../..' . '/system/Commands/Utilities/Routes/SampleURIGenerator.php', - 'CodeIgniter\\ComposerScripts' => __DIR__ . '/../..' . '/system/ComposerScripts.php', - 'CodeIgniter\\Config\\AutoloadConfig' => __DIR__ . '/../..' . '/system/Config/AutoloadConfig.php', - 'CodeIgniter\\Config\\BaseConfig' => __DIR__ . '/../..' . '/system/Config/BaseConfig.php', - 'CodeIgniter\\Config\\BaseService' => __DIR__ . '/../..' . '/system/Config/BaseService.php', - 'CodeIgniter\\Config\\Config' => __DIR__ . '/../..' . '/system/Config/Config.php', - 'CodeIgniter\\Config\\DotEnv' => __DIR__ . '/../..' . '/system/Config/DotEnv.php', - 'CodeIgniter\\Config\\Factories' => __DIR__ . '/../..' . '/system/Config/Factories.php', - 'CodeIgniter\\Config\\Factory' => __DIR__ . '/../..' . '/system/Config/Factory.php', - 'CodeIgniter\\Config\\ForeignCharacters' => __DIR__ . '/../..' . '/system/Config/ForeignCharacters.php', - 'CodeIgniter\\Config\\Publisher' => __DIR__ . '/../..' . '/system/Config/Publisher.php', - 'CodeIgniter\\Config\\Services' => __DIR__ . '/../..' . '/system/Config/Services.php', - 'CodeIgniter\\Config\\View' => __DIR__ . '/../..' . '/system/Config/View.php', - 'CodeIgniter\\Controller' => __DIR__ . '/../..' . '/system/Controller.php', - 'CodeIgniter\\Cookie\\CloneableCookieInterface' => __DIR__ . '/../..' . '/system/Cookie/CloneableCookieInterface.php', - 'CodeIgniter\\Cookie\\Cookie' => __DIR__ . '/../..' . '/system/Cookie/Cookie.php', - 'CodeIgniter\\Cookie\\CookieInterface' => __DIR__ . '/../..' . '/system/Cookie/CookieInterface.php', - 'CodeIgniter\\Cookie\\CookieStore' => __DIR__ . '/../..' . '/system/Cookie/CookieStore.php', - 'CodeIgniter\\Cookie\\Exceptions\\CookieException' => __DIR__ . '/../..' . '/system/Cookie/Exceptions/CookieException.php', - 'CodeIgniter\\Database\\BaseBuilder' => __DIR__ . '/../..' . '/system/Database/BaseBuilder.php', - 'CodeIgniter\\Database\\BaseConnection' => __DIR__ . '/../..' . '/system/Database/BaseConnection.php', - 'CodeIgniter\\Database\\BasePreparedQuery' => __DIR__ . '/../..' . '/system/Database/BasePreparedQuery.php', - 'CodeIgniter\\Database\\BaseResult' => __DIR__ . '/../..' . '/system/Database/BaseResult.php', - 'CodeIgniter\\Database\\BaseUtils' => __DIR__ . '/../..' . '/system/Database/BaseUtils.php', - 'CodeIgniter\\Database\\Config' => __DIR__ . '/../..' . '/system/Database/Config.php', - 'CodeIgniter\\Database\\ConnectionInterface' => __DIR__ . '/../..' . '/system/Database/ConnectionInterface.php', - 'CodeIgniter\\Database\\Database' => __DIR__ . '/../..' . '/system/Database/Database.php', - 'CodeIgniter\\Database\\Exceptions\\DataException' => __DIR__ . '/../..' . '/system/Database/Exceptions/DataException.php', - 'CodeIgniter\\Database\\Exceptions\\DatabaseException' => __DIR__ . '/../..' . '/system/Database/Exceptions/DatabaseException.php', - 'CodeIgniter\\Database\\Exceptions\\ExceptionInterface' => __DIR__ . '/../..' . '/system/Database/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Database\\Forge' => __DIR__ . '/../..' . '/system/Database/Forge.php', - 'CodeIgniter\\Database\\Migration' => __DIR__ . '/../..' . '/system/Database/Migration.php', - 'CodeIgniter\\Database\\MigrationRunner' => __DIR__ . '/../..' . '/system/Database/MigrationRunner.php', - 'CodeIgniter\\Database\\ModelFactory' => __DIR__ . '/../..' . '/system/Database/ModelFactory.php', - 'CodeIgniter\\Database\\MySQLi\\Builder' => __DIR__ . '/../..' . '/system/Database/MySQLi/Builder.php', - 'CodeIgniter\\Database\\MySQLi\\Connection' => __DIR__ . '/../..' . '/system/Database/MySQLi/Connection.php', - 'CodeIgniter\\Database\\MySQLi\\Forge' => __DIR__ . '/../..' . '/system/Database/MySQLi/Forge.php', - 'CodeIgniter\\Database\\MySQLi\\PreparedQuery' => __DIR__ . '/../..' . '/system/Database/MySQLi/PreparedQuery.php', - 'CodeIgniter\\Database\\MySQLi\\Result' => __DIR__ . '/../..' . '/system/Database/MySQLi/Result.php', - 'CodeIgniter\\Database\\MySQLi\\Utils' => __DIR__ . '/../..' . '/system/Database/MySQLi/Utils.php', - 'CodeIgniter\\Database\\OCI8\\Builder' => __DIR__ . '/../..' . '/system/Database/OCI8/Builder.php', - 'CodeIgniter\\Database\\OCI8\\Connection' => __DIR__ . '/../..' . '/system/Database/OCI8/Connection.php', - 'CodeIgniter\\Database\\OCI8\\Forge' => __DIR__ . '/../..' . '/system/Database/OCI8/Forge.php', - 'CodeIgniter\\Database\\OCI8\\PreparedQuery' => __DIR__ . '/../..' . '/system/Database/OCI8/PreparedQuery.php', - 'CodeIgniter\\Database\\OCI8\\Result' => __DIR__ . '/../..' . '/system/Database/OCI8/Result.php', - 'CodeIgniter\\Database\\OCI8\\Utils' => __DIR__ . '/../..' . '/system/Database/OCI8/Utils.php', - 'CodeIgniter\\Database\\Postgre\\Builder' => __DIR__ . '/../..' . '/system/Database/Postgre/Builder.php', - 'CodeIgniter\\Database\\Postgre\\Connection' => __DIR__ . '/../..' . '/system/Database/Postgre/Connection.php', - 'CodeIgniter\\Database\\Postgre\\Forge' => __DIR__ . '/../..' . '/system/Database/Postgre/Forge.php', - 'CodeIgniter\\Database\\Postgre\\PreparedQuery' => __DIR__ . '/../..' . '/system/Database/Postgre/PreparedQuery.php', - 'CodeIgniter\\Database\\Postgre\\Result' => __DIR__ . '/../..' . '/system/Database/Postgre/Result.php', - 'CodeIgniter\\Database\\Postgre\\Utils' => __DIR__ . '/../..' . '/system/Database/Postgre/Utils.php', - 'CodeIgniter\\Database\\PreparedQueryInterface' => __DIR__ . '/../..' . '/system/Database/PreparedQueryInterface.php', - 'CodeIgniter\\Database\\Query' => __DIR__ . '/../..' . '/system/Database/Query.php', - 'CodeIgniter\\Database\\QueryInterface' => __DIR__ . '/../..' . '/system/Database/QueryInterface.php', - 'CodeIgniter\\Database\\RawSql' => __DIR__ . '/../..' . '/system/Database/RawSql.php', - 'CodeIgniter\\Database\\ResultInterface' => __DIR__ . '/../..' . '/system/Database/ResultInterface.php', - 'CodeIgniter\\Database\\SQLSRV\\Builder' => __DIR__ . '/../..' . '/system/Database/SQLSRV/Builder.php', - 'CodeIgniter\\Database\\SQLSRV\\Connection' => __DIR__ . '/../..' . '/system/Database/SQLSRV/Connection.php', - 'CodeIgniter\\Database\\SQLSRV\\Forge' => __DIR__ . '/../..' . '/system/Database/SQLSRV/Forge.php', - 'CodeIgniter\\Database\\SQLSRV\\PreparedQuery' => __DIR__ . '/../..' . '/system/Database/SQLSRV/PreparedQuery.php', - 'CodeIgniter\\Database\\SQLSRV\\Result' => __DIR__ . '/../..' . '/system/Database/SQLSRV/Result.php', - 'CodeIgniter\\Database\\SQLSRV\\Utils' => __DIR__ . '/../..' . '/system/Database/SQLSRV/Utils.php', - 'CodeIgniter\\Database\\SQLite3\\Builder' => __DIR__ . '/../..' . '/system/Database/SQLite3/Builder.php', - 'CodeIgniter\\Database\\SQLite3\\Connection' => __DIR__ . '/../..' . '/system/Database/SQLite3/Connection.php', - 'CodeIgniter\\Database\\SQLite3\\Forge' => __DIR__ . '/../..' . '/system/Database/SQLite3/Forge.php', - 'CodeIgniter\\Database\\SQLite3\\PreparedQuery' => __DIR__ . '/../..' . '/system/Database/SQLite3/PreparedQuery.php', - 'CodeIgniter\\Database\\SQLite3\\Result' => __DIR__ . '/../..' . '/system/Database/SQLite3/Result.php', - 'CodeIgniter\\Database\\SQLite3\\Table' => __DIR__ . '/../..' . '/system/Database/SQLite3/Table.php', - 'CodeIgniter\\Database\\SQLite3\\Utils' => __DIR__ . '/../..' . '/system/Database/SQLite3/Utils.php', - 'CodeIgniter\\Database\\Seeder' => __DIR__ . '/../..' . '/system/Database/Seeder.php', - 'CodeIgniter\\Debug\\Exceptions' => __DIR__ . '/../..' . '/system/Debug/Exceptions.php', - 'CodeIgniter\\Debug\\Iterator' => __DIR__ . '/../..' . '/system/Debug/Iterator.php', - 'CodeIgniter\\Debug\\Timer' => __DIR__ . '/../..' . '/system/Debug/Timer.php', - 'CodeIgniter\\Debug\\Toolbar' => __DIR__ . '/../..' . '/system/Debug/Toolbar.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\BaseCollector' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/BaseCollector.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Config' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Config.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Database' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Database.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Events' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Events.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Files' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Files.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\History' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/History.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Logs' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Logs.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Routes' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Routes.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Timers' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Timers.php', - 'CodeIgniter\\Debug\\Toolbar\\Collectors\\Views' => __DIR__ . '/../..' . '/system/Debug/Toolbar/Collectors/Views.php', - 'CodeIgniter\\Email\\Email' => __DIR__ . '/../..' . '/system/Email/Email.php', - 'CodeIgniter\\Encryption\\EncrypterInterface' => __DIR__ . '/../..' . '/system/Encryption/EncrypterInterface.php', - 'CodeIgniter\\Encryption\\Encryption' => __DIR__ . '/../..' . '/system/Encryption/Encryption.php', - 'CodeIgniter\\Encryption\\Exceptions\\EncryptionException' => __DIR__ . '/../..' . '/system/Encryption/Exceptions/EncryptionException.php', - 'CodeIgniter\\Encryption\\Handlers\\BaseHandler' => __DIR__ . '/../..' . '/system/Encryption/Handlers/BaseHandler.php', - 'CodeIgniter\\Encryption\\Handlers\\OpenSSLHandler' => __DIR__ . '/../..' . '/system/Encryption/Handlers/OpenSSLHandler.php', - 'CodeIgniter\\Encryption\\Handlers\\SodiumHandler' => __DIR__ . '/../..' . '/system/Encryption/Handlers/SodiumHandler.php', - 'CodeIgniter\\Entity' => __DIR__ . '/../..' . '/system/Entity.php', - 'CodeIgniter\\Entity\\Cast\\ArrayCast' => __DIR__ . '/../..' . '/system/Entity/Cast/ArrayCast.php', - 'CodeIgniter\\Entity\\Cast\\BaseCast' => __DIR__ . '/../..' . '/system/Entity/Cast/BaseCast.php', - 'CodeIgniter\\Entity\\Cast\\BooleanCast' => __DIR__ . '/../..' . '/system/Entity/Cast/BooleanCast.php', - 'CodeIgniter\\Entity\\Cast\\CSVCast' => __DIR__ . '/../..' . '/system/Entity/Cast/CSVCast.php', - 'CodeIgniter\\Entity\\Cast\\CastInterface' => __DIR__ . '/../..' . '/system/Entity/Cast/CastInterface.php', - 'CodeIgniter\\Entity\\Cast\\DatetimeCast' => __DIR__ . '/../..' . '/system/Entity/Cast/DatetimeCast.php', - 'CodeIgniter\\Entity\\Cast\\FloatCast' => __DIR__ . '/../..' . '/system/Entity/Cast/FloatCast.php', - 'CodeIgniter\\Entity\\Cast\\IntBoolCast' => __DIR__ . '/../..' . '/system/Entity/Cast/IntBoolCast.php', - 'CodeIgniter\\Entity\\Cast\\IntegerCast' => __DIR__ . '/../..' . '/system/Entity/Cast/IntegerCast.php', - 'CodeIgniter\\Entity\\Cast\\JsonCast' => __DIR__ . '/../..' . '/system/Entity/Cast/JsonCast.php', - 'CodeIgniter\\Entity\\Cast\\ObjectCast' => __DIR__ . '/../..' . '/system/Entity/Cast/ObjectCast.php', - 'CodeIgniter\\Entity\\Cast\\StringCast' => __DIR__ . '/../..' . '/system/Entity/Cast/StringCast.php', - 'CodeIgniter\\Entity\\Cast\\TimestampCast' => __DIR__ . '/../..' . '/system/Entity/Cast/TimestampCast.php', - 'CodeIgniter\\Entity\\Cast\\URICast' => __DIR__ . '/../..' . '/system/Entity/Cast/URICast.php', - 'CodeIgniter\\Entity\\Entity' => __DIR__ . '/../..' . '/system/Entity/Entity.php', - 'CodeIgniter\\Entity\\Exceptions\\CastException' => __DIR__ . '/../..' . '/system/Entity/Exceptions/CastException.php', - 'CodeIgniter\\Events\\Events' => __DIR__ . '/../..' . '/system/Events/Events.php', - 'CodeIgniter\\Exceptions\\AlertError' => __DIR__ . '/../..' . '/system/Exceptions/AlertError.php', - 'CodeIgniter\\Exceptions\\CastException' => __DIR__ . '/../..' . '/system/Exceptions/CastException.php', - 'CodeIgniter\\Exceptions\\ConfigException' => __DIR__ . '/../..' . '/system/Exceptions/ConfigException.php', - 'CodeIgniter\\Exceptions\\CriticalError' => __DIR__ . '/../..' . '/system/Exceptions/CriticalError.php', - 'CodeIgniter\\Exceptions\\DebugTraceableTrait' => __DIR__ . '/../..' . '/system/Exceptions/DebugTraceableTrait.php', - 'CodeIgniter\\Exceptions\\DownloadException' => __DIR__ . '/../..' . '/system/Exceptions/DownloadException.php', - 'CodeIgniter\\Exceptions\\EmergencyError' => __DIR__ . '/../..' . '/system/Exceptions/EmergencyError.php', - 'CodeIgniter\\Exceptions\\ExceptionInterface' => __DIR__ . '/../..' . '/system/Exceptions/ExceptionInterface.php', - 'CodeIgniter\\Exceptions\\FrameworkException' => __DIR__ . '/../..' . '/system/Exceptions/FrameworkException.php', - 'CodeIgniter\\Exceptions\\HTTPExceptionInterface' => __DIR__ . '/../..' . '/system/Exceptions/HTTPExceptionInterface.php', - 'CodeIgniter\\Exceptions\\HasExitCodeInterface' => __DIR__ . '/../..' . '/system/Exceptions/HasExitCodeInterface.php', - 'CodeIgniter\\Exceptions\\ModelException' => __DIR__ . '/../..' . '/system/Exceptions/ModelException.php', - 'CodeIgniter\\Exceptions\\PageNotFoundException' => __DIR__ . '/../..' . '/system/Exceptions/PageNotFoundException.php', - 'CodeIgniter\\Exceptions\\TestException' => __DIR__ . '/../..' . '/system/Exceptions/TestException.php', - 'CodeIgniter\\Files\\Exceptions\\FileException' => __DIR__ . '/../..' . '/system/Files/Exceptions/FileException.php', - 'CodeIgniter\\Files\\Exceptions\\FileNotFoundException' => __DIR__ . '/../..' . '/system/Files/Exceptions/FileNotFoundException.php', - 'CodeIgniter\\Files\\File' => __DIR__ . '/../..' . '/system/Files/File.php', - 'CodeIgniter\\Files\\FileCollection' => __DIR__ . '/../..' . '/system/Files/FileCollection.php', - 'CodeIgniter\\Filters\\CSRF' => __DIR__ . '/../..' . '/system/Filters/CSRF.php', - 'CodeIgniter\\Filters\\DebugToolbar' => __DIR__ . '/../..' . '/system/Filters/DebugToolbar.php', - 'CodeIgniter\\Filters\\Exceptions\\FilterException' => __DIR__ . '/../..' . '/system/Filters/Exceptions/FilterException.php', - 'CodeIgniter\\Filters\\FilterInterface' => __DIR__ . '/../..' . '/system/Filters/FilterInterface.php', - 'CodeIgniter\\Filters\\Filters' => __DIR__ . '/../..' . '/system/Filters/Filters.php', - 'CodeIgniter\\Filters\\Honeypot' => __DIR__ . '/../..' . '/system/Filters/Honeypot.php', - 'CodeIgniter\\Filters\\InvalidChars' => __DIR__ . '/../..' . '/system/Filters/InvalidChars.php', - 'CodeIgniter\\Filters\\SecureHeaders' => __DIR__ . '/../..' . '/system/Filters/SecureHeaders.php', - 'CodeIgniter\\Format\\Exceptions\\FormatException' => __DIR__ . '/../..' . '/system/Format/Exceptions/FormatException.php', - 'CodeIgniter\\Format\\Format' => __DIR__ . '/../..' . '/system/Format/Format.php', - 'CodeIgniter\\Format\\FormatterInterface' => __DIR__ . '/../..' . '/system/Format/FormatterInterface.php', - 'CodeIgniter\\Format\\JSONFormatter' => __DIR__ . '/../..' . '/system/Format/JSONFormatter.php', - 'CodeIgniter\\Format\\XMLFormatter' => __DIR__ . '/../..' . '/system/Format/XMLFormatter.php', - 'CodeIgniter\\HTTP\\CLIRequest' => __DIR__ . '/../..' . '/system/HTTP/CLIRequest.php', - 'CodeIgniter\\HTTP\\CURLRequest' => __DIR__ . '/../..' . '/system/HTTP/CURLRequest.php', - 'CodeIgniter\\HTTP\\ContentSecurityPolicy' => __DIR__ . '/../..' . '/system/HTTP/ContentSecurityPolicy.php', - 'CodeIgniter\\HTTP\\DownloadResponse' => __DIR__ . '/../..' . '/system/HTTP/DownloadResponse.php', - 'CodeIgniter\\HTTP\\Exceptions\\HTTPException' => __DIR__ . '/../..' . '/system/HTTP/Exceptions/HTTPException.php', - 'CodeIgniter\\HTTP\\Files\\FileCollection' => __DIR__ . '/../..' . '/system/HTTP/Files/FileCollection.php', - 'CodeIgniter\\HTTP\\Files\\UploadedFile' => __DIR__ . '/../..' . '/system/HTTP/Files/UploadedFile.php', - 'CodeIgniter\\HTTP\\Files\\UploadedFileInterface' => __DIR__ . '/../..' . '/system/HTTP/Files/UploadedFileInterface.php', - 'CodeIgniter\\HTTP\\Header' => __DIR__ . '/../..' . '/system/HTTP/Header.php', - 'CodeIgniter\\HTTP\\IncomingRequest' => __DIR__ . '/../..' . '/system/HTTP/IncomingRequest.php', - 'CodeIgniter\\HTTP\\Message' => __DIR__ . '/../..' . '/system/HTTP/Message.php', - 'CodeIgniter\\HTTP\\MessageInterface' => __DIR__ . '/../..' . '/system/HTTP/MessageInterface.php', - 'CodeIgniter\\HTTP\\MessageTrait' => __DIR__ . '/../..' . '/system/HTTP/MessageTrait.php', - 'CodeIgniter\\HTTP\\Negotiate' => __DIR__ . '/../..' . '/system/HTTP/Negotiate.php', - 'CodeIgniter\\HTTP\\OutgoingRequest' => __DIR__ . '/../..' . '/system/HTTP/OutgoingRequest.php', - 'CodeIgniter\\HTTP\\OutgoingRequestInterface' => __DIR__ . '/../..' . '/system/HTTP/OutgoingRequestInterface.php', - 'CodeIgniter\\HTTP\\RedirectResponse' => __DIR__ . '/../..' . '/system/HTTP/RedirectResponse.php', - 'CodeIgniter\\HTTP\\Request' => __DIR__ . '/../..' . '/system/HTTP/Request.php', - 'CodeIgniter\\HTTP\\RequestInterface' => __DIR__ . '/../..' . '/system/HTTP/RequestInterface.php', - 'CodeIgniter\\HTTP\\RequestTrait' => __DIR__ . '/../..' . '/system/HTTP/RequestTrait.php', - 'CodeIgniter\\HTTP\\Response' => __DIR__ . '/../..' . '/system/HTTP/Response.php', - 'CodeIgniter\\HTTP\\ResponseInterface' => __DIR__ . '/../..' . '/system/HTTP/ResponseInterface.php', - 'CodeIgniter\\HTTP\\ResponseTrait' => __DIR__ . '/../..' . '/system/HTTP/ResponseTrait.php', - 'CodeIgniter\\HTTP\\URI' => __DIR__ . '/../..' . '/system/HTTP/URI.php', - 'CodeIgniter\\HTTP\\UserAgent' => __DIR__ . '/../..' . '/system/HTTP/UserAgent.php', - 'CodeIgniter\\Honeypot\\Exceptions\\HoneypotException' => __DIR__ . '/../..' . '/system/Honeypot/Exceptions/HoneypotException.php', - 'CodeIgniter\\Honeypot\\Honeypot' => __DIR__ . '/../..' . '/system/Honeypot/Honeypot.php', - 'CodeIgniter\\I18n\\Exceptions\\I18nException' => __DIR__ . '/../..' . '/system/I18n/Exceptions/I18nException.php', - 'CodeIgniter\\I18n\\Time' => __DIR__ . '/../..' . '/system/I18n/Time.php', - 'CodeIgniter\\I18n\\TimeDifference' => __DIR__ . '/../..' . '/system/I18n/TimeDifference.php', - 'CodeIgniter\\I18n\\TimeLegacy' => __DIR__ . '/../..' . '/system/I18n/TimeLegacy.php', - 'CodeIgniter\\I18n\\TimeTrait' => __DIR__ . '/../..' . '/system/I18n/TimeTrait.php', - 'CodeIgniter\\Images\\Exceptions\\ImageException' => __DIR__ . '/../..' . '/system/Images/Exceptions/ImageException.php', - 'CodeIgniter\\Images\\Handlers\\BaseHandler' => __DIR__ . '/../..' . '/system/Images/Handlers/BaseHandler.php', - 'CodeIgniter\\Images\\Handlers\\GDHandler' => __DIR__ . '/../..' . '/system/Images/Handlers/GDHandler.php', - 'CodeIgniter\\Images\\Handlers\\ImageMagickHandler' => __DIR__ . '/../..' . '/system/Images/Handlers/ImageMagickHandler.php', - 'CodeIgniter\\Images\\Image' => __DIR__ . '/../..' . '/system/Images/Image.php', - 'CodeIgniter\\Images\\ImageHandlerInterface' => __DIR__ . '/../..' . '/system/Images/ImageHandlerInterface.php', - 'CodeIgniter\\Language\\Language' => __DIR__ . '/../..' . '/system/Language/Language.php', - 'CodeIgniter\\Log\\Exceptions\\LogException' => __DIR__ . '/../..' . '/system/Log/Exceptions/LogException.php', - 'CodeIgniter\\Log\\Handlers\\BaseHandler' => __DIR__ . '/../..' . '/system/Log/Handlers/BaseHandler.php', - 'CodeIgniter\\Log\\Handlers\\ChromeLoggerHandler' => __DIR__ . '/../..' . '/system/Log/Handlers/ChromeLoggerHandler.php', - 'CodeIgniter\\Log\\Handlers\\ErrorlogHandler' => __DIR__ . '/../..' . '/system/Log/Handlers/ErrorlogHandler.php', - 'CodeIgniter\\Log\\Handlers\\FileHandler' => __DIR__ . '/../..' . '/system/Log/Handlers/FileHandler.php', - 'CodeIgniter\\Log\\Handlers\\HandlerInterface' => __DIR__ . '/../..' . '/system/Log/Handlers/HandlerInterface.php', - 'CodeIgniter\\Log\\Logger' => __DIR__ . '/../..' . '/system/Log/Logger.php', - 'CodeIgniter\\Model' => __DIR__ . '/../..' . '/system/Model.php', - 'CodeIgniter\\Modules\\Modules' => __DIR__ . '/../..' . '/system/Modules/Modules.php', - 'CodeIgniter\\Pager\\Exceptions\\PagerException' => __DIR__ . '/../..' . '/system/Pager/Exceptions/PagerException.php', - 'CodeIgniter\\Pager\\Pager' => __DIR__ . '/../..' . '/system/Pager/Pager.php', - 'CodeIgniter\\Pager\\PagerInterface' => __DIR__ . '/../..' . '/system/Pager/PagerInterface.php', - 'CodeIgniter\\Pager\\PagerRenderer' => __DIR__ . '/../..' . '/system/Pager/PagerRenderer.php', - 'CodeIgniter\\Publisher\\ContentReplacer' => __DIR__ . '/../..' . '/system/Publisher/ContentReplacer.php', - 'CodeIgniter\\Publisher\\Exceptions\\PublisherException' => __DIR__ . '/../..' . '/system/Publisher/Exceptions/PublisherException.php', - 'CodeIgniter\\Publisher\\Publisher' => __DIR__ . '/../..' . '/system/Publisher/Publisher.php', - 'CodeIgniter\\RESTful\\BaseResource' => __DIR__ . '/../..' . '/system/RESTful/BaseResource.php', - 'CodeIgniter\\RESTful\\ResourceController' => __DIR__ . '/../..' . '/system/RESTful/ResourceController.php', - 'CodeIgniter\\RESTful\\ResourcePresenter' => __DIR__ . '/../..' . '/system/RESTful/ResourcePresenter.php', - 'CodeIgniter\\Router\\AutoRouter' => __DIR__ . '/../..' . '/system/Router/AutoRouter.php', - 'CodeIgniter\\Router\\AutoRouterImproved' => __DIR__ . '/../..' . '/system/Router/AutoRouterImproved.php', - 'CodeIgniter\\Router\\AutoRouterInterface' => __DIR__ . '/../..' . '/system/Router/AutoRouterInterface.php', - 'CodeIgniter\\Router\\Exceptions\\RedirectException' => __DIR__ . '/../..' . '/system/Router/Exceptions/RedirectException.php', - 'CodeIgniter\\Router\\Exceptions\\RouterException' => __DIR__ . '/../..' . '/system/Router/Exceptions/RouterException.php', - 'CodeIgniter\\Router\\RouteCollection' => __DIR__ . '/../..' . '/system/Router/RouteCollection.php', - 'CodeIgniter\\Router\\RouteCollectionInterface' => __DIR__ . '/../..' . '/system/Router/RouteCollectionInterface.php', - 'CodeIgniter\\Router\\Router' => __DIR__ . '/../..' . '/system/Router/Router.php', - 'CodeIgniter\\Router\\RouterInterface' => __DIR__ . '/../..' . '/system/Router/RouterInterface.php', - 'CodeIgniter\\Security\\Exceptions\\SecurityException' => __DIR__ . '/../..' . '/system/Security/Exceptions/SecurityException.php', - 'CodeIgniter\\Security\\Security' => __DIR__ . '/../..' . '/system/Security/Security.php', - 'CodeIgniter\\Security\\SecurityInterface' => __DIR__ . '/../..' . '/system/Security/SecurityInterface.php', - 'CodeIgniter\\Session\\Exceptions\\SessionException' => __DIR__ . '/../..' . '/system/Session/Exceptions/SessionException.php', - 'CodeIgniter\\Session\\Handlers\\ArrayHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/ArrayHandler.php', - 'CodeIgniter\\Session\\Handlers\\BaseHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/BaseHandler.php', - 'CodeIgniter\\Session\\Handlers\\DatabaseHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/DatabaseHandler.php', - 'CodeIgniter\\Session\\Handlers\\Database\\MySQLiHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/Database/MySQLiHandler.php', - 'CodeIgniter\\Session\\Handlers\\Database\\PostgreHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/Database/PostgreHandler.php', - 'CodeIgniter\\Session\\Handlers\\FileHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/FileHandler.php', - 'CodeIgniter\\Session\\Handlers\\MemcachedHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/MemcachedHandler.php', - 'CodeIgniter\\Session\\Handlers\\RedisHandler' => __DIR__ . '/../..' . '/system/Session/Handlers/RedisHandler.php', - 'CodeIgniter\\Session\\Session' => __DIR__ . '/../..' . '/system/Session/Session.php', - 'CodeIgniter\\Session\\SessionInterface' => __DIR__ . '/../..' . '/system/Session/SessionInterface.php', - 'CodeIgniter\\Test\\CIDatabaseTestCase' => __DIR__ . '/../..' . '/system/Test/CIDatabaseTestCase.php', - 'CodeIgniter\\Test\\CIUnitTestCase' => __DIR__ . '/../..' . '/system/Test/CIUnitTestCase.php', - 'CodeIgniter\\Test\\ConfigFromArrayTrait' => __DIR__ . '/../..' . '/system/Test/ConfigFromArrayTrait.php', - 'CodeIgniter\\Test\\Constraints\\SeeInDatabase' => __DIR__ . '/../..' . '/system/Test/Constraints/SeeInDatabase.php', - 'CodeIgniter\\Test\\ControllerResponse' => __DIR__ . '/../..' . '/system/Test/ControllerResponse.php', - 'CodeIgniter\\Test\\ControllerTestTrait' => __DIR__ . '/../..' . '/system/Test/ControllerTestTrait.php', - 'CodeIgniter\\Test\\ControllerTester' => __DIR__ . '/../..' . '/system/Test/ControllerTester.php', - 'CodeIgniter\\Test\\DOMParser' => __DIR__ . '/../..' . '/system/Test/DOMParser.php', - 'CodeIgniter\\Test\\DatabaseTestTrait' => __DIR__ . '/../..' . '/system/Test/DatabaseTestTrait.php', - 'CodeIgniter\\Test\\Fabricator' => __DIR__ . '/../..' . '/system/Test/Fabricator.php', - 'CodeIgniter\\Test\\FeatureResponse' => __DIR__ . '/../..' . '/system/Test/FeatureResponse.php', - 'CodeIgniter\\Test\\FeatureTestCase' => __DIR__ . '/../..' . '/system/Test/FeatureTestCase.php', - 'CodeIgniter\\Test\\FeatureTestTrait' => __DIR__ . '/../..' . '/system/Test/FeatureTestTrait.php', - 'CodeIgniter\\Test\\FilterTestTrait' => __DIR__ . '/../..' . '/system/Test/FilterTestTrait.php', - 'CodeIgniter\\Test\\Filters\\CITestStreamFilter' => __DIR__ . '/../..' . '/system/Test/Filters/CITestStreamFilter.php', - 'CodeIgniter\\Test\\Interfaces\\FabricatorModel' => __DIR__ . '/../..' . '/system/Test/Interfaces/FabricatorModel.php', - 'CodeIgniter\\Test\\Mock\\MockAppConfig' => __DIR__ . '/../..' . '/system/Test/Mock/MockAppConfig.php', - 'CodeIgniter\\Test\\Mock\\MockAutoload' => __DIR__ . '/../..' . '/system/Test/Mock/MockAutoload.php', - 'CodeIgniter\\Test\\Mock\\MockBuilder' => __DIR__ . '/../..' . '/system/Test/Mock/MockBuilder.php', - 'CodeIgniter\\Test\\Mock\\MockCLIConfig' => __DIR__ . '/../..' . '/system/Test/Mock/MockCLIConfig.php', - 'CodeIgniter\\Test\\Mock\\MockCURLRequest' => __DIR__ . '/../..' . '/system/Test/Mock/MockCURLRequest.php', - 'CodeIgniter\\Test\\Mock\\MockCache' => __DIR__ . '/../..' . '/system/Test/Mock/MockCache.php', - 'CodeIgniter\\Test\\Mock\\MockCodeIgniter' => __DIR__ . '/../..' . '/system/Test/Mock/MockCodeIgniter.php', - 'CodeIgniter\\Test\\Mock\\MockConnection' => __DIR__ . '/../..' . '/system/Test/Mock/MockConnection.php', - 'CodeIgniter\\Test\\Mock\\MockEmail' => __DIR__ . '/../..' . '/system/Test/Mock/MockEmail.php', - 'CodeIgniter\\Test\\Mock\\MockEvents' => __DIR__ . '/../..' . '/system/Test/Mock/MockEvents.php', - 'CodeIgniter\\Test\\Mock\\MockFileLogger' => __DIR__ . '/../..' . '/system/Test/Mock/MockFileLogger.php', - 'CodeIgniter\\Test\\Mock\\MockIncomingRequest' => __DIR__ . '/../..' . '/system/Test/Mock/MockIncomingRequest.php', - 'CodeIgniter\\Test\\Mock\\MockLanguage' => __DIR__ . '/../..' . '/system/Test/Mock/MockLanguage.php', - 'CodeIgniter\\Test\\Mock\\MockLogger' => __DIR__ . '/../..' . '/system/Test/Mock/MockLogger.php', - 'CodeIgniter\\Test\\Mock\\MockQuery' => __DIR__ . '/../..' . '/system/Test/Mock/MockQuery.php', - 'CodeIgniter\\Test\\Mock\\MockResourceController' => __DIR__ . '/../..' . '/system/Test/Mock/MockResourceController.php', - 'CodeIgniter\\Test\\Mock\\MockResourcePresenter' => __DIR__ . '/../..' . '/system/Test/Mock/MockResourcePresenter.php', - 'CodeIgniter\\Test\\Mock\\MockResponse' => __DIR__ . '/../..' . '/system/Test/Mock/MockResponse.php', - 'CodeIgniter\\Test\\Mock\\MockResult' => __DIR__ . '/../..' . '/system/Test/Mock/MockResult.php', - 'CodeIgniter\\Test\\Mock\\MockSecurity' => __DIR__ . '/../..' . '/system/Test/Mock/MockSecurity.php', - 'CodeIgniter\\Test\\Mock\\MockSecurityConfig' => __DIR__ . '/../..' . '/system/Test/Mock/MockSecurityConfig.php', - 'CodeIgniter\\Test\\Mock\\MockServices' => __DIR__ . '/../..' . '/system/Test/Mock/MockServices.php', - 'CodeIgniter\\Test\\Mock\\MockSession' => __DIR__ . '/../..' . '/system/Test/Mock/MockSession.php', - 'CodeIgniter\\Test\\Mock\\MockTable' => __DIR__ . '/../..' . '/system/Test/Mock/MockTable.php', - 'CodeIgniter\\Test\\PhpStreamWrapper' => __DIR__ . '/../..' . '/system/Test/PhpStreamWrapper.php', - 'CodeIgniter\\Test\\ReflectionHelper' => __DIR__ . '/../..' . '/system/Test/ReflectionHelper.php', - 'CodeIgniter\\Test\\StreamFilterTrait' => __DIR__ . '/../..' . '/system/Test/StreamFilterTrait.php', - 'CodeIgniter\\Test\\TestLogger' => __DIR__ . '/../..' . '/system/Test/TestLogger.php', - 'CodeIgniter\\Test\\TestResponse' => __DIR__ . '/../..' . '/system/Test/TestResponse.php', - 'CodeIgniter\\Throttle\\Throttler' => __DIR__ . '/../..' . '/system/Throttle/Throttler.php', - 'CodeIgniter\\Throttle\\ThrottlerInterface' => __DIR__ . '/../..' . '/system/Throttle/ThrottlerInterface.php', - 'CodeIgniter\\Traits\\ConditionalTrait' => __DIR__ . '/../..' . '/system/Traits/ConditionalTrait.php', - 'CodeIgniter\\Traits\\PropertiesTrait' => __DIR__ . '/../..' . '/system/Traits/PropertiesTrait.php', - 'CodeIgniter\\Typography\\Typography' => __DIR__ . '/../..' . '/system/Typography/Typography.php', - 'CodeIgniter\\Validation\\CreditCardRules' => __DIR__ . '/../..' . '/system/Validation/CreditCardRules.php', - 'CodeIgniter\\Validation\\Exceptions\\ValidationException' => __DIR__ . '/../..' . '/system/Validation/Exceptions/ValidationException.php', - 'CodeIgniter\\Validation\\FileRules' => __DIR__ . '/../..' . '/system/Validation/FileRules.php', - 'CodeIgniter\\Validation\\FormatRules' => __DIR__ . '/../..' . '/system/Validation/FormatRules.php', - 'CodeIgniter\\Validation\\Rules' => __DIR__ . '/../..' . '/system/Validation/Rules.php', - 'CodeIgniter\\Validation\\StrictRules\\CreditCardRules' => __DIR__ . '/../..' . '/system/Validation/StrictRules/CreditCardRules.php', - 'CodeIgniter\\Validation\\StrictRules\\FileRules' => __DIR__ . '/../..' . '/system/Validation/StrictRules/FileRules.php', - 'CodeIgniter\\Validation\\StrictRules\\FormatRules' => __DIR__ . '/../..' . '/system/Validation/StrictRules/FormatRules.php', - 'CodeIgniter\\Validation\\StrictRules\\Rules' => __DIR__ . '/../..' . '/system/Validation/StrictRules/Rules.php', - 'CodeIgniter\\Validation\\Validation' => __DIR__ . '/../..' . '/system/Validation/Validation.php', - 'CodeIgniter\\Validation\\ValidationInterface' => __DIR__ . '/../..' . '/system/Validation/ValidationInterface.php', - 'CodeIgniter\\View\\Cell' => __DIR__ . '/../..' . '/system/View/Cell.php', - 'CodeIgniter\\View\\Cells\\Cell' => __DIR__ . '/../..' . '/system/View/Cells/Cell.php', - 'CodeIgniter\\View\\Exceptions\\ViewException' => __DIR__ . '/../..' . '/system/View/Exceptions/ViewException.php', - 'CodeIgniter\\View\\Filters' => __DIR__ . '/../..' . '/system/View/Filters.php', - 'CodeIgniter\\View\\Parser' => __DIR__ . '/../..' . '/system/View/Parser.php', - 'CodeIgniter\\View\\Plugins' => __DIR__ . '/../..' . '/system/View/Plugins.php', - 'CodeIgniter\\View\\RendererInterface' => __DIR__ . '/../..' . '/system/View/RendererInterface.php', - 'CodeIgniter\\View\\Table' => __DIR__ . '/../..' . '/system/View/Table.php', - 'CodeIgniter\\View\\View' => __DIR__ . '/../..' . '/system/View/View.php', - 'CodeIgniter\\View\\ViewDecoratorInterface' => __DIR__ . '/../..' . '/system/View/ViewDecoratorInterface.php', - 'CodeIgniter\\View\\ViewDecoratorTrait' => __DIR__ . '/../..' . '/system/View/ViewDecoratorTrait.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'Composer\\Pcre\\MatchAllResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllResult.php', - 'Composer\\Pcre\\MatchAllStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllStrictGroupsResult.php', - 'Composer\\Pcre\\MatchAllWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchAllWithOffsetsResult.php', - 'Composer\\Pcre\\MatchResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchResult.php', - 'Composer\\Pcre\\MatchStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchStrictGroupsResult.php', - 'Composer\\Pcre\\MatchWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchWithOffsetsResult.php', - 'Composer\\Pcre\\PcreException' => __DIR__ . '/..' . '/composer/pcre/src/PcreException.php', - 'Composer\\Pcre\\Preg' => __DIR__ . '/..' . '/composer/pcre/src/Preg.php', - 'Composer\\Pcre\\Regex' => __DIR__ . '/..' . '/composer/pcre/src/Regex.php', - 'Composer\\Pcre\\ReplaceResult' => __DIR__ . '/..' . '/composer/pcre/src/ReplaceResult.php', - 'Composer\\Pcre\\UnexpectedNullMatchException' => __DIR__ . '/..' . '/composer/pcre/src/UnexpectedNullMatchException.php', - 'Composer\\Semver\\Comparator' => __DIR__ . '/..' . '/composer/semver/src/Comparator.php', - 'Composer\\Semver\\CompilingMatcher' => __DIR__ . '/..' . '/composer/semver/src/CompilingMatcher.php', - 'Composer\\Semver\\Constraint\\Bound' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Bound.php', - 'Composer\\Semver\\Constraint\\Constraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/Constraint.php', - 'Composer\\Semver\\Constraint\\ConstraintInterface' => __DIR__ . '/..' . '/composer/semver/src/Constraint/ConstraintInterface.php', - 'Composer\\Semver\\Constraint\\MatchAllConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchAllConstraint.php', - 'Composer\\Semver\\Constraint\\MatchNoneConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MatchNoneConstraint.php', - 'Composer\\Semver\\Constraint\\MultiConstraint' => __DIR__ . '/..' . '/composer/semver/src/Constraint/MultiConstraint.php', - 'Composer\\Semver\\Interval' => __DIR__ . '/..' . '/composer/semver/src/Interval.php', - 'Composer\\Semver\\Intervals' => __DIR__ . '/..' . '/composer/semver/src/Intervals.php', - 'Composer\\Semver\\Semver' => __DIR__ . '/..' . '/composer/semver/src/Semver.php', - 'Composer\\Semver\\VersionParser' => __DIR__ . '/..' . '/composer/semver/src/VersionParser.php', - 'Composer\\XdebugHandler\\PhpConfig' => __DIR__ . '/..' . '/composer/xdebug-handler/src/PhpConfig.php', - 'Composer\\XdebugHandler\\Process' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Process.php', - 'Composer\\XdebugHandler\\Status' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Status.php', - 'Composer\\XdebugHandler\\XdebugHandler' => __DIR__ . '/..' . '/composer/xdebug-handler/src/XdebugHandler.php', - 'DeepCopy\\DeepCopy' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', - 'DeepCopy\\Exception\\CloneException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', - 'DeepCopy\\Exception\\PropertyException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', - 'DeepCopy\\Filter\\ChainableFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php', - 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php', - 'DeepCopy\\Filter\\Filter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php', - 'DeepCopy\\Filter\\KeepFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php', - 'DeepCopy\\Filter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php', - 'DeepCopy\\Filter\\SetNullFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php', - 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php', - 'DeepCopy\\Matcher\\Matcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php', - 'DeepCopy\\Matcher\\PropertyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php', - 'DeepCopy\\Matcher\\PropertyNameMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php', - 'DeepCopy\\Matcher\\PropertyTypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php', - 'DeepCopy\\Reflection\\ReflectionHelper' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php', - 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php', - 'DeepCopy\\TypeFilter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php', - 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php', - 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php', - 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php', - 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', - 'DeepCopy\\TypeFilter\\TypeFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', - 'DeepCopy\\TypeMatcher\\TypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Annotations\\Annotation' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php', - 'Doctrine\\Common\\Annotations\\AnnotationException' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php', - 'Doctrine\\Common\\Annotations\\AnnotationReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php', - 'Doctrine\\Common\\Annotations\\AnnotationRegistry' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Attribute' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Attributes' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Enum' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php', - 'Doctrine\\Common\\Annotations\\Annotation\\IgnoreAnnotation' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php', - 'Doctrine\\Common\\Annotations\\Annotation\\NamedArgumentConstructor' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Required' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php', - 'Doctrine\\Common\\Annotations\\Annotation\\Target' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php', - 'Doctrine\\Common\\Annotations\\CachedReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php', - 'Doctrine\\Common\\Annotations\\DocLexer' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php', - 'Doctrine\\Common\\Annotations\\DocParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php', - 'Doctrine\\Common\\Annotations\\FileCacheReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php', - 'Doctrine\\Common\\Annotations\\ImplicitlyIgnoredAnnotationNames' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php', - 'Doctrine\\Common\\Annotations\\IndexedReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php', - 'Doctrine\\Common\\Annotations\\NamedArgumentConstructorAnnotation' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php', - 'Doctrine\\Common\\Annotations\\PhpParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php', - 'Doctrine\\Common\\Annotations\\PsrCachedReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php', - 'Doctrine\\Common\\Annotations\\Reader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php', - 'Doctrine\\Common\\Annotations\\SimpleAnnotationReader' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php', - 'Doctrine\\Common\\Annotations\\TokenParser' => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php', - 'Doctrine\\Common\\Lexer\\AbstractLexer' => __DIR__ . '/..' . '/doctrine/lexer/src/AbstractLexer.php', - 'Doctrine\\Common\\Lexer\\Token' => __DIR__ . '/..' . '/doctrine/lexer/src/Token.php', - 'Doctrine\\Deprecations\\Deprecation' => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php', - 'Doctrine\\Deprecations\\PHPUnit\\VerifyDeprecations' => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php', - 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', - 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', - 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', - 'Doctrine\\Instantiator\\Instantiator' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', - 'Doctrine\\Instantiator\\InstantiatorInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', - 'Faker\\Calculator\\Ean' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/Ean.php', - 'Faker\\Calculator\\Iban' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/Iban.php', - 'Faker\\Calculator\\Inn' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/Inn.php', - 'Faker\\Calculator\\Isbn' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/Isbn.php', - 'Faker\\Calculator\\Luhn' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/Luhn.php', - 'Faker\\Calculator\\TCNo' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Calculator/TCNo.php', - 'Faker\\ChanceGenerator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ChanceGenerator.php', - 'Faker\\Container\\Container' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Container/Container.php', - 'Faker\\Container\\ContainerBuilder' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Container/ContainerBuilder.php', - 'Faker\\Container\\ContainerException' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Container/ContainerException.php', - 'Faker\\Container\\ContainerInterface' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Container/ContainerInterface.php', - 'Faker\\Container\\NotInContainerException' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Container/NotInContainerException.php', - 'Faker\\Core\\Barcode' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Barcode.php', - 'Faker\\Core\\Blood' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Blood.php', - 'Faker\\Core\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Color.php', - 'Faker\\Core\\Coordinates' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Coordinates.php', - 'Faker\\Core\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/DateTime.php', - 'Faker\\Core\\File' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/File.php', - 'Faker\\Core\\Number' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Number.php', - 'Faker\\Core\\Uuid' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Uuid.php', - 'Faker\\Core\\Version' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Core/Version.php', - 'Faker\\DefaultGenerator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/DefaultGenerator.php', - 'Faker\\Documentor' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Documentor.php', - 'Faker\\Extension\\AddressExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/AddressExtension.php', - 'Faker\\Extension\\BarcodeExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/BarcodeExtension.php', - 'Faker\\Extension\\BloodExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/BloodExtension.php', - 'Faker\\Extension\\ColorExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/ColorExtension.php', - 'Faker\\Extension\\CompanyExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/CompanyExtension.php', - 'Faker\\Extension\\CountryExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/CountryExtension.php', - 'Faker\\Extension\\DateTimeExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/DateTimeExtension.php', - 'Faker\\Extension\\Extension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/Extension.php', - 'Faker\\Extension\\ExtensionNotFound' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/ExtensionNotFound.php', - 'Faker\\Extension\\FileExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/FileExtension.php', - 'Faker\\Extension\\GeneratorAwareExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtension.php', - 'Faker\\Extension\\GeneratorAwareExtensionTrait' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtensionTrait.php', - 'Faker\\Extension\\Helper' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/Helper.php', - 'Faker\\Extension\\NumberExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/NumberExtension.php', - 'Faker\\Extension\\PersonExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/PersonExtension.php', - 'Faker\\Extension\\PhoneNumberExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/PhoneNumberExtension.php', - 'Faker\\Extension\\UuidExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/UuidExtension.php', - 'Faker\\Extension\\VersionExtension' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Extension/VersionExtension.php', - 'Faker\\Factory' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Factory.php', - 'Faker\\Generator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Generator.php', - 'Faker\\Guesser\\Name' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Guesser/Name.php', - 'Faker\\ORM\\CakePHP\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php', - 'Faker\\ORM\\CakePHP\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php', - 'Faker\\ORM\\CakePHP\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php', - 'Faker\\ORM\\Doctrine\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php', - 'Faker\\ORM\\Doctrine\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php', - 'Faker\\ORM\\Doctrine\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php', - 'Faker\\ORM\\Mandango\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Mandango/ColumnTypeGuesser.php', - 'Faker\\ORM\\Mandango\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php', - 'Faker\\ORM\\Mandango\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php', - 'Faker\\ORM\\Propel2\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php', - 'Faker\\ORM\\Propel2\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php', - 'Faker\\ORM\\Propel2\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php', - 'Faker\\ORM\\Propel\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php', - 'Faker\\ORM\\Propel\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php', - 'Faker\\ORM\\Propel\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Propel/Populator.php', - 'Faker\\ORM\\Spot\\ColumnTypeGuesser' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php', - 'Faker\\ORM\\Spot\\EntityPopulator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php', - 'Faker\\ORM\\Spot\\Populator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ORM/Spot/Populator.php', - 'Faker\\Provider\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Address.php', - 'Faker\\Provider\\Barcode' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Barcode.php', - 'Faker\\Provider\\Base' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Base.php', - 'Faker\\Provider\\Biased' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Biased.php', - 'Faker\\Provider\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Color.php', - 'Faker\\Provider\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Company.php', - 'Faker\\Provider\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/DateTime.php', - 'Faker\\Provider\\File' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/File.php', - 'Faker\\Provider\\HtmlLorem' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/HtmlLorem.php', - 'Faker\\Provider\\Image' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Image.php', - 'Faker\\Provider\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Internet.php', - 'Faker\\Provider\\Lorem' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Lorem.php', - 'Faker\\Provider\\Medical' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Medical.php', - 'Faker\\Provider\\Miscellaneous' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Miscellaneous.php', - 'Faker\\Provider\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Payment.php', - 'Faker\\Provider\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Person.php', - 'Faker\\Provider\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/PhoneNumber.php', - 'Faker\\Provider\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Text.php', - 'Faker\\Provider\\UserAgent' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/UserAgent.php', - 'Faker\\Provider\\Uuid' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/Uuid.php', - 'Faker\\Provider\\ar_EG\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php', - 'Faker\\Provider\\ar_EG\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php', - 'Faker\\Provider\\ar_EG\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Company.php', - 'Faker\\Provider\\ar_EG\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Internet.php', - 'Faker\\Provider\\ar_EG\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php', - 'Faker\\Provider\\ar_EG\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Person.php', - 'Faker\\Provider\\ar_EG\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php', - 'Faker\\Provider\\ar_JO\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_JO/Address.php', - 'Faker\\Provider\\ar_JO\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_JO/Company.php', - 'Faker\\Provider\\ar_JO\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_JO/Internet.php', - 'Faker\\Provider\\ar_JO\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php', - 'Faker\\Provider\\ar_JO\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_JO/Text.php', - 'Faker\\Provider\\ar_SA\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Address.php', - 'Faker\\Provider\\ar_SA\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Color.php', - 'Faker\\Provider\\ar_SA\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Company.php', - 'Faker\\Provider\\ar_SA\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Internet.php', - 'Faker\\Provider\\ar_SA\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php', - 'Faker\\Provider\\ar_SA\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Person.php', - 'Faker\\Provider\\ar_SA\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ar_SA/Text.php', - 'Faker\\Provider\\at_AT\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/at_AT/Payment.php', - 'Faker\\Provider\\bg_BG\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bg_BG/Internet.php', - 'Faker\\Provider\\bg_BG\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bg_BG/Payment.php', - 'Faker\\Provider\\bg_BG\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bg_BG/Person.php', - 'Faker\\Provider\\bg_BG\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php', - 'Faker\\Provider\\bn_BD\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bn_BD/Address.php', - 'Faker\\Provider\\bn_BD\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bn_BD/Company.php', - 'Faker\\Provider\\bn_BD\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bn_BD/Person.php', - 'Faker\\Provider\\bn_BD\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bn_BD/PhoneNumber.php', - 'Faker\\Provider\\bn_BD\\Utils' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/bn_BD/Utils.php', - 'Faker\\Provider\\cs_CZ\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Address.php', - 'Faker\\Provider\\cs_CZ\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Company.php', - 'Faker\\Provider\\cs_CZ\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php', - 'Faker\\Provider\\cs_CZ\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php', - 'Faker\\Provider\\cs_CZ\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Payment.php', - 'Faker\\Provider\\cs_CZ\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Person.php', - 'Faker\\Provider\\cs_CZ\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php', - 'Faker\\Provider\\cs_CZ\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/cs_CZ/Text.php', - 'Faker\\Provider\\da_DK\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/Address.php', - 'Faker\\Provider\\da_DK\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/Company.php', - 'Faker\\Provider\\da_DK\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/Internet.php', - 'Faker\\Provider\\da_DK\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/Payment.php', - 'Faker\\Provider\\da_DK\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/Person.php', - 'Faker\\Provider\\da_DK\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php', - 'Faker\\Provider\\de_AT\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Address.php', - 'Faker\\Provider\\de_AT\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Company.php', - 'Faker\\Provider\\de_AT\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Internet.php', - 'Faker\\Provider\\de_AT\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Payment.php', - 'Faker\\Provider\\de_AT\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Person.php', - 'Faker\\Provider\\de_AT\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php', - 'Faker\\Provider\\de_AT\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_AT/Text.php', - 'Faker\\Provider\\de_CH\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Address.php', - 'Faker\\Provider\\de_CH\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Company.php', - 'Faker\\Provider\\de_CH\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Internet.php', - 'Faker\\Provider\\de_CH\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Payment.php', - 'Faker\\Provider\\de_CH\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Person.php', - 'Faker\\Provider\\de_CH\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/PhoneNumber.php', - 'Faker\\Provider\\de_CH\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_CH/Text.php', - 'Faker\\Provider\\de_DE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Address.php', - 'Faker\\Provider\\de_DE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Company.php', - 'Faker\\Provider\\de_DE\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Internet.php', - 'Faker\\Provider\\de_DE\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Payment.php', - 'Faker\\Provider\\de_DE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Person.php', - 'Faker\\Provider\\de_DE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/PhoneNumber.php', - 'Faker\\Provider\\de_DE\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/de_DE/Text.php', - 'Faker\\Provider\\el_CY\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/Address.php', - 'Faker\\Provider\\el_CY\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/Company.php', - 'Faker\\Provider\\el_CY\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/Internet.php', - 'Faker\\Provider\\el_CY\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/Payment.php', - 'Faker\\Provider\\el_CY\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/Person.php', - 'Faker\\Provider\\el_CY\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_CY/PhoneNumber.php', - 'Faker\\Provider\\el_GR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/Address.php', - 'Faker\\Provider\\el_GR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/Company.php', - 'Faker\\Provider\\el_GR\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/Payment.php', - 'Faker\\Provider\\el_GR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/Person.php', - 'Faker\\Provider\\el_GR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php', - 'Faker\\Provider\\el_GR\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/el_GR/Text.php', - 'Faker\\Provider\\en_AU\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_AU/Address.php', - 'Faker\\Provider\\en_AU\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_AU/Internet.php', - 'Faker\\Provider\\en_AU\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_AU/PhoneNumber.php', - 'Faker\\Provider\\en_CA\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_CA/Address.php', - 'Faker\\Provider\\en_CA\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_CA/PhoneNumber.php', - 'Faker\\Provider\\en_GB\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/Address.php', - 'Faker\\Provider\\en_GB\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/Company.php', - 'Faker\\Provider\\en_GB\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php', - 'Faker\\Provider\\en_GB\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/Payment.php', - 'Faker\\Provider\\en_GB\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/Person.php', - 'Faker\\Provider\\en_GB\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_GB/PhoneNumber.php', - 'Faker\\Provider\\en_HK\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_HK/Address.php', - 'Faker\\Provider\\en_HK\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php', - 'Faker\\Provider\\en_HK\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_HK/PhoneNumber.php', - 'Faker\\Provider\\en_IN\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_IN/Address.php', - 'Faker\\Provider\\en_IN\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php', - 'Faker\\Provider\\en_IN\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_IN/Person.php', - 'Faker\\Provider\\en_IN\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_IN/PhoneNumber.php', - 'Faker\\Provider\\en_NG\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NG/Address.php', - 'Faker\\Provider\\en_NG\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NG/Internet.php', - 'Faker\\Provider\\en_NG\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NG/Person.php', - 'Faker\\Provider\\en_NG\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NG/PhoneNumber.php', - 'Faker\\Provider\\en_NZ\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NZ/Address.php', - 'Faker\\Provider\\en_NZ\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NZ/Internet.php', - 'Faker\\Provider\\en_NZ\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_NZ/PhoneNumber.php', - 'Faker\\Provider\\en_PH\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_PH/Address.php', - 'Faker\\Provider\\en_PH\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_PH/PhoneNumber.php', - 'Faker\\Provider\\en_SG\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_SG/Address.php', - 'Faker\\Provider\\en_SG\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_SG/Person.php', - 'Faker\\Provider\\en_SG\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php', - 'Faker\\Provider\\en_UG\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_UG/Address.php', - 'Faker\\Provider\\en_UG\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_UG/Internet.php', - 'Faker\\Provider\\en_UG\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_UG/Person.php', - 'Faker\\Provider\\en_UG\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_UG/PhoneNumber.php', - 'Faker\\Provider\\en_US\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/Address.php', - 'Faker\\Provider\\en_US\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/Company.php', - 'Faker\\Provider\\en_US\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/Payment.php', - 'Faker\\Provider\\en_US\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/Person.php', - 'Faker\\Provider\\en_US\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/PhoneNumber.php', - 'Faker\\Provider\\en_US\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_US/Text.php', - 'Faker\\Provider\\en_ZA\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_ZA/Address.php', - 'Faker\\Provider\\en_ZA\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_ZA/Company.php', - 'Faker\\Provider\\en_ZA\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php', - 'Faker\\Provider\\en_ZA\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_ZA/Person.php', - 'Faker\\Provider\\en_ZA\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php', - 'Faker\\Provider\\es_AR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_AR/Address.php', - 'Faker\\Provider\\es_AR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_AR/Company.php', - 'Faker\\Provider\\es_AR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_AR/Person.php', - 'Faker\\Provider\\es_AR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_AR/PhoneNumber.php', - 'Faker\\Provider\\es_ES\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Address.php', - 'Faker\\Provider\\es_ES\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Color.php', - 'Faker\\Provider\\es_ES\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Company.php', - 'Faker\\Provider\\es_ES\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Internet.php', - 'Faker\\Provider\\es_ES\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Payment.php', - 'Faker\\Provider\\es_ES\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Person.php', - 'Faker\\Provider\\es_ES\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/PhoneNumber.php', - 'Faker\\Provider\\es_ES\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_ES/Text.php', - 'Faker\\Provider\\es_PE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_PE/Address.php', - 'Faker\\Provider\\es_PE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_PE/Company.php', - 'Faker\\Provider\\es_PE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_PE/Person.php', - 'Faker\\Provider\\es_PE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_PE/PhoneNumber.php', - 'Faker\\Provider\\es_VE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_VE/Address.php', - 'Faker\\Provider\\es_VE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_VE/Company.php', - 'Faker\\Provider\\es_VE\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_VE/Internet.php', - 'Faker\\Provider\\es_VE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_VE/Person.php', - 'Faker\\Provider\\es_VE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php', - 'Faker\\Provider\\et_EE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/et_EE/Person.php', - 'Faker\\Provider\\fa_IR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/Address.php', - 'Faker\\Provider\\fa_IR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php', - 'Faker\\Provider\\fa_IR\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/Internet.php', - 'Faker\\Provider\\fa_IR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php', - 'Faker\\Provider\\fa_IR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php', - 'Faker\\Provider\\fa_IR\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fa_IR/Text.php', - 'Faker\\Provider\\fi_FI\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php', - 'Faker\\Provider\\fi_FI\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/Company.php', - 'Faker\\Provider\\fi_FI\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/Internet.php', - 'Faker\\Provider\\fi_FI\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/Payment.php', - 'Faker\\Provider\\fi_FI\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/Person.php', - 'Faker\\Provider\\fi_FI\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php', - 'Faker\\Provider\\fr_BE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Address.php', - 'Faker\\Provider\\fr_BE\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Color.php', - 'Faker\\Provider\\fr_BE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Company.php', - 'Faker\\Provider\\fr_BE\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Internet.php', - 'Faker\\Provider\\fr_BE\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Payment.php', - 'Faker\\Provider\\fr_BE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/Person.php', - 'Faker\\Provider\\fr_BE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_BE/PhoneNumber.php', - 'Faker\\Provider\\fr_CA\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CA/Address.php', - 'Faker\\Provider\\fr_CA\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CA/Color.php', - 'Faker\\Provider\\fr_CA\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CA/Company.php', - 'Faker\\Provider\\fr_CA\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CA/Person.php', - 'Faker\\Provider\\fr_CA\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CA/Text.php', - 'Faker\\Provider\\fr_CH\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Address.php', - 'Faker\\Provider\\fr_CH\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php', - 'Faker\\Provider\\fr_CH\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Company.php', - 'Faker\\Provider\\fr_CH\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Internet.php', - 'Faker\\Provider\\fr_CH\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Payment.php', - 'Faker\\Provider\\fr_CH\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Person.php', - 'Faker\\Provider\\fr_CH\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/PhoneNumber.php', - 'Faker\\Provider\\fr_CH\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_CH/Text.php', - 'Faker\\Provider\\fr_FR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Address.php', - 'Faker\\Provider\\fr_FR\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php', - 'Faker\\Provider\\fr_FR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Company.php', - 'Faker\\Provider\\fr_FR\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php', - 'Faker\\Provider\\fr_FR\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Payment.php', - 'Faker\\Provider\\fr_FR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Person.php', - 'Faker\\Provider\\fr_FR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php', - 'Faker\\Provider\\fr_FR\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php', - 'Faker\\Provider\\he_IL\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/he_IL/Address.php', - 'Faker\\Provider\\he_IL\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/he_IL/Company.php', - 'Faker\\Provider\\he_IL\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/he_IL/Payment.php', - 'Faker\\Provider\\he_IL\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/he_IL/Person.php', - 'Faker\\Provider\\he_IL\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/he_IL/PhoneNumber.php', - 'Faker\\Provider\\hr_HR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hr_HR/Address.php', - 'Faker\\Provider\\hr_HR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hr_HR/Company.php', - 'Faker\\Provider\\hr_HR\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hr_HR/Payment.php', - 'Faker\\Provider\\hr_HR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hr_HR/Person.php', - 'Faker\\Provider\\hr_HR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hr_HR/PhoneNumber.php', - 'Faker\\Provider\\hu_HU\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/Address.php', - 'Faker\\Provider\\hu_HU\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php', - 'Faker\\Provider\\hu_HU\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/Payment.php', - 'Faker\\Provider\\hu_HU\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/Person.php', - 'Faker\\Provider\\hu_HU\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/PhoneNumber.php', - 'Faker\\Provider\\hu_HU\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hu_HU/Text.php', - 'Faker\\Provider\\hy_AM\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/Address.php', - 'Faker\\Provider\\hy_AM\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php', - 'Faker\\Provider\\hy_AM\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/Company.php', - 'Faker\\Provider\\hy_AM\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/Internet.php', - 'Faker\\Provider\\hy_AM\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/Person.php', - 'Faker\\Provider\\hy_AM\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/hy_AM/PhoneNumber.php', - 'Faker\\Provider\\id_ID\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/Address.php', - 'Faker\\Provider\\id_ID\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/Color.php', - 'Faker\\Provider\\id_ID\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/Company.php', - 'Faker\\Provider\\id_ID\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/Internet.php', - 'Faker\\Provider\\id_ID\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/Person.php', - 'Faker\\Provider\\id_ID\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php', - 'Faker\\Provider\\is_IS\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/Address.php', - 'Faker\\Provider\\is_IS\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/Company.php', - 'Faker\\Provider\\is_IS\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/Internet.php', - 'Faker\\Provider\\is_IS\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/Payment.php', - 'Faker\\Provider\\is_IS\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/Person.php', - 'Faker\\Provider\\is_IS\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php', - 'Faker\\Provider\\it_CH\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Address.php', - 'Faker\\Provider\\it_CH\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Company.php', - 'Faker\\Provider\\it_CH\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Internet.php', - 'Faker\\Provider\\it_CH\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Payment.php', - 'Faker\\Provider\\it_CH\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Person.php', - 'Faker\\Provider\\it_CH\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/PhoneNumber.php', - 'Faker\\Provider\\it_CH\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_CH/Text.php', - 'Faker\\Provider\\it_IT\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Address.php', - 'Faker\\Provider\\it_IT\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Company.php', - 'Faker\\Provider\\it_IT\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Internet.php', - 'Faker\\Provider\\it_IT\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Payment.php', - 'Faker\\Provider\\it_IT\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Person.php', - 'Faker\\Provider\\it_IT\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/PhoneNumber.php', - 'Faker\\Provider\\it_IT\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/it_IT/Text.php', - 'Faker\\Provider\\ja_JP\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/Address.php', - 'Faker\\Provider\\ja_JP\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php', - 'Faker\\Provider\\ja_JP\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/Internet.php', - 'Faker\\Provider\\ja_JP\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php', - 'Faker\\Provider\\ja_JP\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php', - 'Faker\\Provider\\ja_JP\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ja_JP/Text.php', - 'Faker\\Provider\\ka_GE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Address.php', - 'Faker\\Provider\\ka_GE\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Color.php', - 'Faker\\Provider\\ka_GE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Company.php', - 'Faker\\Provider\\ka_GE\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php', - 'Faker\\Provider\\ka_GE\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php', - 'Faker\\Provider\\ka_GE\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Payment.php', - 'Faker\\Provider\\ka_GE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Person.php', - 'Faker\\Provider\\ka_GE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/PhoneNumber.php', - 'Faker\\Provider\\ka_GE\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ka_GE/Text.php', - 'Faker\\Provider\\kk_KZ\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Address.php', - 'Faker\\Provider\\kk_KZ\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Color.php', - 'Faker\\Provider\\kk_KZ\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Company.php', - 'Faker\\Provider\\kk_KZ\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php', - 'Faker\\Provider\\kk_KZ\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Payment.php', - 'Faker\\Provider\\kk_KZ\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Person.php', - 'Faker\\Provider\\kk_KZ\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php', - 'Faker\\Provider\\kk_KZ\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/kk_KZ/Text.php', - 'Faker\\Provider\\ko_KR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/Address.php', - 'Faker\\Provider\\ko_KR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/Company.php', - 'Faker\\Provider\\ko_KR\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/Internet.php', - 'Faker\\Provider\\ko_KR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php', - 'Faker\\Provider\\ko_KR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/PhoneNumber.php', - 'Faker\\Provider\\ko_KR\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php', - 'Faker\\Provider\\lt_LT\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php', - 'Faker\\Provider\\lt_LT\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php', - 'Faker\\Provider\\lt_LT\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/Internet.php', - 'Faker\\Provider\\lt_LT\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/Payment.php', - 'Faker\\Provider\\lt_LT\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/Person.php', - 'Faker\\Provider\\lt_LT\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php', - 'Faker\\Provider\\lv_LV\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/Address.php', - 'Faker\\Provider\\lv_LV\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php', - 'Faker\\Provider\\lv_LV\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/Internet.php', - 'Faker\\Provider\\lv_LV\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/Payment.php', - 'Faker\\Provider\\lv_LV\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/Person.php', - 'Faker\\Provider\\lv_LV\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php', - 'Faker\\Provider\\me_ME\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/me_ME/Address.php', - 'Faker\\Provider\\me_ME\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/me_ME/Company.php', - 'Faker\\Provider\\me_ME\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/me_ME/Payment.php', - 'Faker\\Provider\\me_ME\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/me_ME/Person.php', - 'Faker\\Provider\\me_ME\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/me_ME/PhoneNumber.php', - 'Faker\\Provider\\mn_MN\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/mn_MN/Person.php', - 'Faker\\Provider\\mn_MN\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php', - 'Faker\\Provider\\ms_MY\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/Address.php', - 'Faker\\Provider\\ms_MY\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php', - 'Faker\\Provider\\ms_MY\\Miscellaneous' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/Miscellaneous.php', - 'Faker\\Provider\\ms_MY\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php', - 'Faker\\Provider\\ms_MY\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php', - 'Faker\\Provider\\ms_MY\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php', - 'Faker\\Provider\\nb_NO\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php', - 'Faker\\Provider\\nb_NO\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nb_NO/Company.php', - 'Faker\\Provider\\nb_NO\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nb_NO/Payment.php', - 'Faker\\Provider\\nb_NO\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nb_NO/Person.php', - 'Faker\\Provider\\nb_NO\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php', - 'Faker\\Provider\\ne_NP\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php', - 'Faker\\Provider\\ne_NP\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ne_NP/Internet.php', - 'Faker\\Provider\\ne_NP\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ne_NP/Payment.php', - 'Faker\\Provider\\ne_NP\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ne_NP/Person.php', - 'Faker\\Provider\\ne_NP\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ne_NP/PhoneNumber.php', - 'Faker\\Provider\\nl_BE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Address.php', - 'Faker\\Provider\\nl_BE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Company.php', - 'Faker\\Provider\\nl_BE\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Internet.php', - 'Faker\\Provider\\nl_BE\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Payment.php', - 'Faker\\Provider\\nl_BE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Person.php', - 'Faker\\Provider\\nl_BE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php', - 'Faker\\Provider\\nl_BE\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_BE/Text.php', - 'Faker\\Provider\\nl_NL\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Address.php', - 'Faker\\Provider\\nl_NL\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Color.php', - 'Faker\\Provider\\nl_NL\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Company.php', - 'Faker\\Provider\\nl_NL\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php', - 'Faker\\Provider\\nl_NL\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Payment.php', - 'Faker\\Provider\\nl_NL\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Person.php', - 'Faker\\Provider\\nl_NL\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php', - 'Faker\\Provider\\nl_NL\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/nl_NL/Text.php', - 'Faker\\Provider\\pl_PL\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Address.php', - 'Faker\\Provider\\pl_PL\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Color.php', - 'Faker\\Provider\\pl_PL\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Company.php', - 'Faker\\Provider\\pl_PL\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Internet.php', - 'Faker\\Provider\\pl_PL\\LicensePlate' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/LicensePlate.php', - 'Faker\\Provider\\pl_PL\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php', - 'Faker\\Provider\\pl_PL\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php', - 'Faker\\Provider\\pl_PL\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php', - 'Faker\\Provider\\pl_PL\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pl_PL/Text.php', - 'Faker\\Provider\\pt_BR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php', - 'Faker\\Provider\\pt_BR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Company.php', - 'Faker\\Provider\\pt_BR\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php', - 'Faker\\Provider\\pt_BR\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Payment.php', - 'Faker\\Provider\\pt_BR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php', - 'Faker\\Provider\\pt_BR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php', - 'Faker\\Provider\\pt_BR\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php', - 'Faker\\Provider\\pt_PT\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php', - 'Faker\\Provider\\pt_PT\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/Company.php', - 'Faker\\Provider\\pt_PT\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/Internet.php', - 'Faker\\Provider\\pt_PT\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/Payment.php', - 'Faker\\Provider\\pt_PT\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/Person.php', - 'Faker\\Provider\\pt_PT\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php', - 'Faker\\Provider\\ro_MD\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_MD/Address.php', - 'Faker\\Provider\\ro_MD\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_MD/Payment.php', - 'Faker\\Provider\\ro_MD\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_MD/Person.php', - 'Faker\\Provider\\ro_MD\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_MD/PhoneNumber.php', - 'Faker\\Provider\\ro_MD\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_MD/Text.php', - 'Faker\\Provider\\ro_RO\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_RO/Address.php', - 'Faker\\Provider\\ro_RO\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_RO/Payment.php', - 'Faker\\Provider\\ro_RO\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_RO/Person.php', - 'Faker\\Provider\\ro_RO\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php', - 'Faker\\Provider\\ro_RO\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php', - 'Faker\\Provider\\ru_RU\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Address.php', - 'Faker\\Provider\\ru_RU\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php', - 'Faker\\Provider\\ru_RU\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Company.php', - 'Faker\\Provider\\ru_RU\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php', - 'Faker\\Provider\\ru_RU\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Payment.php', - 'Faker\\Provider\\ru_RU\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php', - 'Faker\\Provider\\ru_RU\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php', - 'Faker\\Provider\\ru_RU\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/ru_RU/Text.php', - 'Faker\\Provider\\sk_SK\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/Address.php', - 'Faker\\Provider\\sk_SK\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/Company.php', - 'Faker\\Provider\\sk_SK\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/Internet.php', - 'Faker\\Provider\\sk_SK\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/Payment.php', - 'Faker\\Provider\\sk_SK\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/Person.php', - 'Faker\\Provider\\sk_SK\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php', - 'Faker\\Provider\\sl_SI\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/Address.php', - 'Faker\\Provider\\sl_SI\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/Company.php', - 'Faker\\Provider\\sl_SI\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/Internet.php', - 'Faker\\Provider\\sl_SI\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/Payment.php', - 'Faker\\Provider\\sl_SI\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/Person.php', - 'Faker\\Provider\\sl_SI\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sl_SI/PhoneNumber.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Address.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Payment.php', - 'Faker\\Provider\\sr_Cyrl_RS\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Person.php', - 'Faker\\Provider\\sr_Latn_RS\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Address.php', - 'Faker\\Provider\\sr_Latn_RS\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Payment.php', - 'Faker\\Provider\\sr_Latn_RS\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Person.php', - 'Faker\\Provider\\sr_RS\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_RS/Address.php', - 'Faker\\Provider\\sr_RS\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_RS/Payment.php', - 'Faker\\Provider\\sr_RS\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sr_RS/Person.php', - 'Faker\\Provider\\sv_SE\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/Address.php', - 'Faker\\Provider\\sv_SE\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/Company.php', - 'Faker\\Provider\\sv_SE\\Municipality' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/Municipality.php', - 'Faker\\Provider\\sv_SE\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/Payment.php', - 'Faker\\Provider\\sv_SE\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/Person.php', - 'Faker\\Provider\\sv_SE\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php', - 'Faker\\Provider\\th_TH\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Address.php', - 'Faker\\Provider\\th_TH\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Color.php', - 'Faker\\Provider\\th_TH\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Company.php', - 'Faker\\Provider\\th_TH\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Internet.php', - 'Faker\\Provider\\th_TH\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Payment.php', - 'Faker\\Provider\\th_TH\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/Person.php', - 'Faker\\Provider\\th_TH\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/th_TH/PhoneNumber.php', - 'Faker\\Provider\\tr_TR\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Address.php', - 'Faker\\Provider\\tr_TR\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Color.php', - 'Faker\\Provider\\tr_TR\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Company.php', - 'Faker\\Provider\\tr_TR\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/DateTime.php', - 'Faker\\Provider\\tr_TR\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php', - 'Faker\\Provider\\tr_TR\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Payment.php', - 'Faker\\Provider\\tr_TR\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/Person.php', - 'Faker\\Provider\\tr_TR\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php', - 'Faker\\Provider\\uk_UA\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Address.php', - 'Faker\\Provider\\uk_UA\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php', - 'Faker\\Provider\\uk_UA\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Company.php', - 'Faker\\Provider\\uk_UA\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php', - 'Faker\\Provider\\uk_UA\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Payment.php', - 'Faker\\Provider\\uk_UA\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Person.php', - 'Faker\\Provider\\uk_UA\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php', - 'Faker\\Provider\\uk_UA\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/uk_UA/Text.php', - 'Faker\\Provider\\vi_VN\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/vi_VN/Address.php', - 'Faker\\Provider\\vi_VN\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php', - 'Faker\\Provider\\vi_VN\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/vi_VN/Internet.php', - 'Faker\\Provider\\vi_VN\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/vi_VN/Person.php', - 'Faker\\Provider\\vi_VN\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php', - 'Faker\\Provider\\zh_CN\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php', - 'Faker\\Provider\\zh_CN\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php', - 'Faker\\Provider\\zh_CN\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Company.php', - 'Faker\\Provider\\zh_CN\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/DateTime.php', - 'Faker\\Provider\\zh_CN\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php', - 'Faker\\Provider\\zh_CN\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Payment.php', - 'Faker\\Provider\\zh_CN\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/Person.php', - 'Faker\\Provider\\zh_CN\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_CN/PhoneNumber.php', - 'Faker\\Provider\\zh_TW\\Address' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Address.php', - 'Faker\\Provider\\zh_TW\\Color' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php', - 'Faker\\Provider\\zh_TW\\Company' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Company.php', - 'Faker\\Provider\\zh_TW\\DateTime' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php', - 'Faker\\Provider\\zh_TW\\Internet' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php', - 'Faker\\Provider\\zh_TW\\Payment' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Payment.php', - 'Faker\\Provider\\zh_TW\\Person' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Person.php', - 'Faker\\Provider\\zh_TW\\PhoneNumber' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php', - 'Faker\\Provider\\zh_TW\\Text' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/Provider/zh_TW/Text.php', - 'Faker\\UniqueGenerator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/UniqueGenerator.php', - 'Faker\\ValidGenerator' => __DIR__ . '/..' . '/fakerphp/faker/src/Faker/ValidGenerator.php', - 'Kint\\CallFinder' => __DIR__ . '/..' . '/kint-php/kint/src/CallFinder.php', - 'Kint\\FacadeInterface' => __DIR__ . '/..' . '/kint-php/kint/src/FacadeInterface.php', - 'Kint\\Kint' => __DIR__ . '/..' . '/kint-php/kint/src/Kint.php', - 'Kint\\Parser\\AbstractPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/AbstractPlugin.php', - 'Kint\\Parser\\ArrayLimitPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ArrayLimitPlugin.php', - 'Kint\\Parser\\ArrayObjectPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ArrayObjectPlugin.php', - 'Kint\\Parser\\Base64Plugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Base64Plugin.php', - 'Kint\\Parser\\BinaryPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/BinaryPlugin.php', - 'Kint\\Parser\\BlacklistPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/BlacklistPlugin.php', - 'Kint\\Parser\\ClassMethodsPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ClassMethodsPlugin.php', - 'Kint\\Parser\\ClassStaticsPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ClassStaticsPlugin.php', - 'Kint\\Parser\\ClosurePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ClosurePlugin.php', - 'Kint\\Parser\\ColorPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ColorPlugin.php', - 'Kint\\Parser\\ConstructablePluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ConstructablePluginInterface.php', - 'Kint\\Parser\\DOMDocumentPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/DOMDocumentPlugin.php', - 'Kint\\Parser\\DateTimePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/DateTimePlugin.php', - 'Kint\\Parser\\EnumPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/EnumPlugin.php', - 'Kint\\Parser\\FsPathPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/FsPathPlugin.php', - 'Kint\\Parser\\IteratorPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/IteratorPlugin.php', - 'Kint\\Parser\\JsonPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/JsonPlugin.php', - 'Kint\\Parser\\MicrotimePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/MicrotimePlugin.php', - 'Kint\\Parser\\MysqliPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/MysqliPlugin.php', - 'Kint\\Parser\\Parser' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/Parser.php', - 'Kint\\Parser\\PluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/PluginInterface.php', - 'Kint\\Parser\\ProxyPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ProxyPlugin.php', - 'Kint\\Parser\\SerializePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SerializePlugin.php', - 'Kint\\Parser\\SimpleXMLElementPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php', - 'Kint\\Parser\\SplFileInfoPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SplFileInfoPlugin.php', - 'Kint\\Parser\\SplObjectStoragePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/SplObjectStoragePlugin.php', - 'Kint\\Parser\\StreamPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/StreamPlugin.php', - 'Kint\\Parser\\TablePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/TablePlugin.php', - 'Kint\\Parser\\ThrowablePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ThrowablePlugin.php', - 'Kint\\Parser\\TimestampPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/TimestampPlugin.php', - 'Kint\\Parser\\ToStringPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/ToStringPlugin.php', - 'Kint\\Parser\\TracePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/TracePlugin.php', - 'Kint\\Parser\\XmlPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Parser/XmlPlugin.php', - 'Kint\\Renderer\\AbstractRenderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/AbstractRenderer.php', - 'Kint\\Renderer\\CliRenderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/CliRenderer.php', - 'Kint\\Renderer\\PlainRenderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/PlainRenderer.php', - 'Kint\\Renderer\\RendererInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/RendererInterface.php', - 'Kint\\Renderer\\RichRenderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/RichRenderer.php', - 'Kint\\Renderer\\Rich\\AbstractPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/AbstractPlugin.php', - 'Kint\\Renderer\\Rich\\ArrayLimitPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php', - 'Kint\\Renderer\\Rich\\BinaryPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php', - 'Kint\\Renderer\\Rich\\BlacklistPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php', - 'Kint\\Renderer\\Rich\\CallablePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/CallablePlugin.php', - 'Kint\\Renderer\\Rich\\ClosurePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php', - 'Kint\\Renderer\\Rich\\ColorPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/ColorPlugin.php', - 'Kint\\Renderer\\Rich\\DepthLimitPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php', - 'Kint\\Renderer\\Rich\\MethodDefinitionPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php', - 'Kint\\Renderer\\Rich\\MicrotimePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php', - 'Kint\\Renderer\\Rich\\PluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/PluginInterface.php', - 'Kint\\Renderer\\Rich\\RecursionPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/RecursionPlugin.php', - 'Kint\\Renderer\\Rich\\SimpleXMLElementPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php', - 'Kint\\Renderer\\Rich\\SourcePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/SourcePlugin.php', - 'Kint\\Renderer\\Rich\\TabPluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php', - 'Kint\\Renderer\\Rich\\TablePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/TablePlugin.php', - 'Kint\\Renderer\\Rich\\TimestampPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php', - 'Kint\\Renderer\\Rich\\TraceFramePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php', - 'Kint\\Renderer\\Rich\\ValuePluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php', - 'Kint\\Renderer\\TextRenderer' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/TextRenderer.php', - 'Kint\\Renderer\\Text\\AbstractPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/AbstractPlugin.php', - 'Kint\\Renderer\\Text\\ArrayLimitPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/ArrayLimitPlugin.php', - 'Kint\\Renderer\\Text\\BlacklistPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/BlacklistPlugin.php', - 'Kint\\Renderer\\Text\\DepthLimitPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/DepthLimitPlugin.php', - 'Kint\\Renderer\\Text\\EnumPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/EnumPlugin.php', - 'Kint\\Renderer\\Text\\MicrotimePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/MicrotimePlugin.php', - 'Kint\\Renderer\\Text\\PluginInterface' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/PluginInterface.php', - 'Kint\\Renderer\\Text\\RecursionPlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/RecursionPlugin.php', - 'Kint\\Renderer\\Text\\TracePlugin' => __DIR__ . '/..' . '/kint-php/kint/src/Renderer/Text/TracePlugin.php', - 'Kint\\Utils' => __DIR__ . '/..' . '/kint-php/kint/src/Utils.php', - 'Kint\\Zval\\BlobValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/BlobValue.php', - 'Kint\\Zval\\ClosureValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/ClosureValue.php', - 'Kint\\Zval\\DateTimeValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/DateTimeValue.php', - 'Kint\\Zval\\EnumValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/EnumValue.php', - 'Kint\\Zval\\InstanceValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/InstanceValue.php', - 'Kint\\Zval\\MethodValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/MethodValue.php', - 'Kint\\Zval\\ParameterHoldingTrait' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/ParameterHoldingTrait.php', - 'Kint\\Zval\\ParameterValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/ParameterValue.php', - 'Kint\\Zval\\Representation\\ColorRepresentation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/ColorRepresentation.php', - 'Kint\\Zval\\Representation\\MethodDefinitionRepresentation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/MethodDefinitionRepresentation.php', - 'Kint\\Zval\\Representation\\MicrotimeRepresentation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/MicrotimeRepresentation.php', - 'Kint\\Zval\\Representation\\Representation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/Representation.php', - 'Kint\\Zval\\Representation\\SourceRepresentation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/SourceRepresentation.php', - 'Kint\\Zval\\Representation\\SplFileInfoRepresentation' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Representation/SplFileInfoRepresentation.php', - 'Kint\\Zval\\ResourceValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/ResourceValue.php', - 'Kint\\Zval\\SimpleXMLElementValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/SimpleXMLElementValue.php', - 'Kint\\Zval\\StreamValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/StreamValue.php', - 'Kint\\Zval\\ThrowableValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/ThrowableValue.php', - 'Kint\\Zval\\TraceFrameValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/TraceFrameValue.php', - 'Kint\\Zval\\TraceValue' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/TraceValue.php', - 'Kint\\Zval\\Value' => __DIR__ . '/..' . '/kint-php/kint/src/Zval/Value.php', - 'Laminas\\Escaper\\Escaper' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Escaper.php', - 'Laminas\\Escaper\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/ExceptionInterface.php', - 'Laminas\\Escaper\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php', - 'Laminas\\Escaper\\Exception\\RuntimeException' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/RuntimeException.php', - 'Nexus\\CsConfig\\Factory' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Factory.php', - 'Nexus\\CsConfig\\FixerGenerator' => __DIR__ . '/..' . '/nexusphp/cs-config/src/FixerGenerator.php', - 'Nexus\\CsConfig\\Fixer\\AbstractCustomFixer' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Fixer/AbstractCustomFixer.php', - 'Nexus\\CsConfig\\Fixer\\Comment\\NoCodeSeparatorCommentFixer' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Fixer/Comment/NoCodeSeparatorCommentFixer.php', - 'Nexus\\CsConfig\\Fixer\\Comment\\SpaceAfterCommentStartFixer' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Fixer/Comment/SpaceAfterCommentStartFixer.php', - 'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus74' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus74.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus80' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus80.php', - 'Nexus\\CsConfig\\Ruleset\\Nexus81' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus81.php', - 'Nexus\\CsConfig\\Ruleset\\RulesetInterface' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/RulesetInterface.php', - 'Nexus\\CsConfig\\Test\\AbstractCustomFixerTestCase' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/AbstractCustomFixerTestCase.php', - 'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php', - 'Nexus\\CsConfig\\Test\\FixerProvider' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/FixerProvider.php', - 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasStaticAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessage.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Error.php', - 'PHPUnit\\Framework\\ErrorTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ErrorTestCase.php', - 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', - 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidParameterGroupException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsReadonlyException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', - 'PHPUnit\\Framework\\PHPTAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', - 'PHPUnit\\Framework\\Reorderable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Reorderable.php', - 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', - 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', - 'PHPUnit\\Framework\\SyntheticSkippedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', - 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', - 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Warning.php', - 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit\\Runner\\AfterIncompleteTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', - 'PHPUnit\\Runner\\AfterLastTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', - 'PHPUnit\\Runner\\AfterRiskyTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', - 'PHPUnit\\Runner\\AfterSkippedTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', - 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', - 'PHPUnit\\Runner\\AfterTestErrorHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', - 'PHPUnit\\Runner\\AfterTestFailureHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', - 'PHPUnit\\Runner\\AfterTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', - 'PHPUnit\\Runner\\AfterTestWarningHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', - 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit\\Runner\\BeforeFirstTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', - 'PHPUnit\\Runner\\BeforeTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', - 'PHPUnit\\Runner\\DefaultTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', - 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit\\Runner\\Extension\\ExtensionHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/ExtensionHandler.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Hook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', - 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCacheExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', - 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit\\Runner\\TestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', - 'PHPUnit\\Runner\\TestListenerAdapter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResultCache.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\Mapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Mapper.php', - 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit\\TextUI\\DefaultResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/DefaultResultPrinter.php', - 'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php', - 'PHPUnit\\TextUI\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php', - 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\FilterMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/FilterMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\Directory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Constant' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Constant.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Directory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Extension' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/Extension.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\File' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/File.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Group.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSetting.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilderException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PhpHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFile' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFile.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuite.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocationTo93' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/UpdateSchemaLocationTo93.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Variable' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Variable.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollectionIterator.php', - 'PHPUnit\\Util\\Annotation\\DocBlock' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', - 'PHPUnit\\Util\\Annotation\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/Registry.php', - 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit\\Util\\Cloner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php', - 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ExcludeList.php', - 'PHPUnit\\Util\\FileLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/FileLoader.php', - 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidDataSetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', - 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', - 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', - 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', - 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', - 'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit\\Util\\Reflection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Reflection.php', - 'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php', - 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', - 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', - 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', - 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml.php', - 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit\\Util\\Xml\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/FailedSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Validator.php', - 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', - 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', - 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', - 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php', - 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', - 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php', - 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php', - 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php', - 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php', - 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', - 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php', - 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php', - 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php', - 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php', - 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', - 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', - 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', - 'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', - 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', - 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', - 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', - 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php', - 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php', - 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php', - 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', - 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', - 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', - 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php', - 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php', - 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php', - 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', - 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', - 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', - 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', - 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', - 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', - 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php', - 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php', - 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', - 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php', - 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php', - 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', - 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php', - 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php', - 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php', - 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', - 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php', - 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php', - 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php', - 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', - 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', - 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php', - 'PharIo\\Version\\BuildMetaData' => __DIR__ . '/..' . '/phar-io/version/src/BuildMetaData.php', - 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php', - 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php', - 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', - 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php', - 'PharIo\\Version\\NoBuildMetaDataException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', - 'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', - 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', - 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php', - 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', - 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', - 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php', - 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/VersionConstraint.php', - 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', - 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', - 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', - 'PhpCsFixer\\AbstractDoctrineAnnotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php', - 'PhpCsFixer\\AbstractFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractFixer.php', - 'PhpCsFixer\\AbstractFopenFlagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php', - 'PhpCsFixer\\AbstractFunctionReferenceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php', - 'PhpCsFixer\\AbstractLinesBeforeNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php', - 'PhpCsFixer\\AbstractNoUselessElseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php', - 'PhpCsFixer\\AbstractPhpdocToTypeDeclarationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php', - 'PhpCsFixer\\AbstractPhpdocTypesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php', - 'PhpCsFixer\\AbstractProxyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php', - 'PhpCsFixer\\Cache\\Cache' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/Cache.php', - 'PhpCsFixer\\Cache\\CacheInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php', - 'PhpCsFixer\\Cache\\CacheManagerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php', - 'PhpCsFixer\\Cache\\Directory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/Directory.php', - 'PhpCsFixer\\Cache\\DirectoryInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php', - 'PhpCsFixer\\Cache\\FileCacheManager' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php', - 'PhpCsFixer\\Cache\\FileHandler' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php', - 'PhpCsFixer\\Cache\\FileHandlerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php', - 'PhpCsFixer\\Cache\\NullCacheManager' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php', - 'PhpCsFixer\\Cache\\Signature' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/Signature.php', - 'PhpCsFixer\\Cache\\SignatureInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php', - 'PhpCsFixer\\Config' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Config.php', - 'PhpCsFixer\\ConfigInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigInterface.php', - 'PhpCsFixer\\ConfigurationException\\InvalidConfigurationException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\InvalidFixerConfigurationException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\InvalidForEnvFixerConfigurationException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php', - 'PhpCsFixer\\ConfigurationException\\RequiredFixerConfigurationException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php', - 'PhpCsFixer\\Console\\Application' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Application.php', - 'PhpCsFixer\\Console\\Command\\DescribeCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php', - 'PhpCsFixer\\Console\\Command\\DescribeNameNotFoundException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php', - 'PhpCsFixer\\Console\\Command\\DocumentationCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php', - 'PhpCsFixer\\Console\\Command\\FixCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php', - 'PhpCsFixer\\Console\\Command\\FixCommandExitStatusCalculator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php', - 'PhpCsFixer\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php', - 'PhpCsFixer\\Console\\Command\\ListFilesCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php', - 'PhpCsFixer\\Console\\Command\\ListSetsCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php', - 'PhpCsFixer\\Console\\Command\\SelfUpdateCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php', - 'PhpCsFixer\\Console\\ConfigurationResolver' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php', - 'PhpCsFixer\\Console\\Output\\ErrorOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php', - 'PhpCsFixer\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php', - 'PhpCsFixer\\Console\\Output\\ProcessOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php', - 'PhpCsFixer\\Console\\Output\\ProcessOutputInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\CheckstyleReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\GitlabReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\JsonReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\JunitReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReportSummary' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReporterFactory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\ReporterInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\TextReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php', - 'PhpCsFixer\\Console\\Report\\FixReport\\XmlReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\JsonReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReportSummary' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReporterFactory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\ReporterInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php', - 'PhpCsFixer\\Console\\Report\\ListSetsReport\\TextReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php', - 'PhpCsFixer\\Console\\SelfUpdate\\GithubClient' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php', - 'PhpCsFixer\\Console\\SelfUpdate\\GithubClientInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php', - 'PhpCsFixer\\Console\\SelfUpdate\\NewVersionChecker' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php', - 'PhpCsFixer\\Console\\SelfUpdate\\NewVersionCheckerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php', - 'PhpCsFixer\\Console\\WarningsDetector' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php', - 'PhpCsFixer\\Differ\\DiffConsoleFormatter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php', - 'PhpCsFixer\\Differ\\DifferInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php', - 'PhpCsFixer\\Differ\\FullDiffer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php', - 'PhpCsFixer\\Differ\\NullDiffer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php', - 'PhpCsFixer\\Differ\\UnifiedDiffer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php', - 'PhpCsFixer\\DocBlock\\Annotation' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php', - 'PhpCsFixer\\DocBlock\\DocBlock' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php', - 'PhpCsFixer\\DocBlock\\Line' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/Line.php', - 'PhpCsFixer\\DocBlock\\ShortDescription' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php', - 'PhpCsFixer\\DocBlock\\Tag' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php', - 'PhpCsFixer\\DocBlock\\TagComparator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php', - 'PhpCsFixer\\DocBlock\\TypeExpression' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php', - 'PhpCsFixer\\Doctrine\\Annotation\\Token' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php', - 'PhpCsFixer\\Doctrine\\Annotation\\Tokens' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php', - 'PhpCsFixer\\Documentation\\DocumentationLocator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php', - 'PhpCsFixer\\Documentation\\FixerDocumentGenerator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php', - 'PhpCsFixer\\Documentation\\ListDocumentGenerator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/ListDocumentGenerator.php', - 'PhpCsFixer\\Documentation\\RstUtils' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php', - 'PhpCsFixer\\Documentation\\RuleSetDocumentationGenerator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php', - 'PhpCsFixer\\Error\\Error' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Error/Error.php', - 'PhpCsFixer\\Error\\ErrorsManager' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php', - 'PhpCsFixer\\FileReader' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FileReader.php', - 'PhpCsFixer\\FileRemoval' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FileRemoval.php', - 'PhpCsFixer\\Finder' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Finder.php', - 'PhpCsFixer\\FixerConfiguration\\AliasedFixerOption' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\AliasedFixerOptionBuilder' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php', - 'PhpCsFixer\\FixerConfiguration\\AllowedValueSubset' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php', - 'PhpCsFixer\\FixerConfiguration\\DeprecatedFixerOption' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\DeprecatedFixerOptionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php', - 'PhpCsFixer\\FixerConfiguration\\FixerConfigurationResolver' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php', - 'PhpCsFixer\\FixerConfiguration\\FixerConfigurationResolverInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOption' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOptionBuilder' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php', - 'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php', - 'PhpCsFixer\\FixerConfiguration\\InvalidOptionsForEnvException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php', - 'PhpCsFixer\\FixerDefinition\\CodeSample' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php', - 'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\FileSpecificCodeSample' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php', - 'PhpCsFixer\\FixerDefinition\\FileSpecificCodeSampleInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\FixerDefinition' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php', - 'PhpCsFixer\\FixerDefinition\\FixerDefinitionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificCodeSample' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificCodeSampleInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecification' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php', - 'PhpCsFixer\\FixerDefinition\\VersionSpecificationInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php', - 'PhpCsFixer\\FixerFactory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerFactory.php', - 'PhpCsFixer\\FixerFileProcessedEvent' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php', - 'PhpCsFixer\\FixerNameValidator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.php', - 'PhpCsFixer\\Fixer\\AbstractIncrementOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php', - 'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\ArrayPushFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\BacktickToShellExecFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\EregToPregFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\MbStrFunctionsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\ModernizeStrposFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoAliasFunctionsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoAliasLanguageConstructCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\NoMixedEchoPrintFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\PowToExponentiationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\RandomApiMigrationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php', - 'PhpCsFixer\\Fixer\\Alias\\SetTypeToCastFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\ArraySyntaxFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoMultilineWhitespaceAroundDoubleArrowFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoTrailingCommaInSinglelineArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NoWhitespaceBeforeCommaInArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\NormalizeIndexBraceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\TrimArraySpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php', - 'PhpCsFixer\\Fixer\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\CurlyBracesPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\EncodingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NoMultipleStatementsPerLineFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NoTrailingCommaInSinglelineFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\NonPrintableCharacterFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\OctalNotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php', - 'PhpCsFixer\\Fixer\\Basic\\PsrAutoloadingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\ClassReferenceNameCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\ConstantCaseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\IntegerLiteralCaseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\LowercaseKeywordsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\LowercaseStaticReferenceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\MagicConstantCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\MagicMethodCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\NativeFunctionCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php', - 'PhpCsFixer\\Fixer\\Casing\\NativeFunctionTypeDeclarationCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\CastSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\LowercaseCastFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\ModernizeTypesCastingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\NoShortBoolCastFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\NoUnsetCastFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php', - 'PhpCsFixer\\Fixer\\CastNotation\\ShortScalarCastFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ClassAttributesSeparationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ClassDefinitionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalClassFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalInternalClassFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\FinalPublicMethodForAbstractClassFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoBlankLinesAfterClassOpeningFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoNullPropertyInitializationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoPhp4ConstructorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\NoUnneededFinalMethodFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedClassElementsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedInterfacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\OrderedTraitsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\ProtectedToPrivateFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SelfAccessorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SelfStaticAccessorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SingleClassElementPerStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\SingleTraitInsertPerStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\ClassNotation\\VisibilityRequiredFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php', - 'PhpCsFixer\\Fixer\\ClassUsage\\DateTimeImmutableFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\CommentToPhpdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\HeaderCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\MultilineCommentOpeningClosingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\NoEmptyCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\NoTrailingWhitespaceInCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentSpacingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php', - 'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentStyleFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php', - 'PhpCsFixer\\Fixer\\ConfigurableFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php', - 'PhpCsFixer\\Fixer\\ConstantNotation\\NativeConstantInvocationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureContinuationPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\ElseifFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\EmptyLoopBodyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\EmptyLoopConditionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\IncludeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoAlternativeSyntaxFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoBreakCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoSuperfluousElseifFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoTrailingCommaInListCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededControlParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededCurlyBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\NoUselessElseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SimplifiedIfReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchCaseSemicolonToColonFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchCaseSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\SwitchContinueToBreakFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\TrailingCommaInMultilineFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php', - 'PhpCsFixer\\Fixer\\ControlStructure\\YodaStyleFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php', - 'PhpCsFixer\\Fixer\\DeprecatedFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationArrayAssignmentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php', - 'PhpCsFixer\\Fixer\\DoctrineAnnotation\\DoctrineAnnotationSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php', - 'PhpCsFixer\\Fixer\\FixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\CombineNestedDirnameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\DateTimeCreateFromFormatCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FopenFlagOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FopenFlagsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FunctionDeclarationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\FunctionTypehintSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\ImplodeCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\LambdaNotUsedImportFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\MethodArgumentSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NativeFunctionInvocationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoSpacesAfterFunctionNameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoTrailingCommaInSinglelineFunctionCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoUnreachableDefaultArgumentValueFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NoUselessSprintfFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\NullableTypeDeclarationForDefaultNullValueFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToParamTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToPropertyTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\PhpdocToReturnTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\RegularCallableCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\ReturnTypeDeclarationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\SingleLineThrowFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\StaticLambdaFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\UseArrowFunctionsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php', - 'PhpCsFixer\\Fixer\\FunctionNotation\\VoidReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php', - 'PhpCsFixer\\Fixer\\Import\\FullyQualifiedStrictTypesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php', - 'PhpCsFixer\\Fixer\\Import\\GlobalNamespaceImportFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php', - 'PhpCsFixer\\Fixer\\Import\\GroupImportFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoLeadingImportSlashFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoUnneededImportAliasFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php', - 'PhpCsFixer\\Fixer\\Import\\NoUnusedImportsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php', - 'PhpCsFixer\\Fixer\\Import\\OrderedImportsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php', - 'PhpCsFixer\\Fixer\\Import\\SingleImportPerStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php', - 'PhpCsFixer\\Fixer\\Import\\SingleLineAfterImportsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php', - 'PhpCsFixer\\Fixer\\Indentation' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordRemoveFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveIssetsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveUnsetsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DeclareEqualNormalizeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DeclareParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\DirConstantFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ErrorSuppressionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\ExplicitIndirectVariableFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\FunctionToConstantFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\GetClassToClassKeywordFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\IsNullFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\NoUnsetOnPropertyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php', - 'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php', - 'PhpCsFixer\\Fixer\\ListNotation\\ListSyntaxFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\BlankLineAfterNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\CleanNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\NoBlankLinesBeforeNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\NoLeadingNamespaceWhitespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\NamespaceNotation\\SingleBlankLineBeforeNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php', - 'PhpCsFixer\\Fixer\\Naming\\NoHomoglyphNamesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\AssignNullCoalescingToCoalesceEqualFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\BinaryOperatorSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\ConcatSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\IncrementStyleFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\LogicalOperatorsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoSpaceAroundDoubleColonFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoUselessConcatOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NoUselessNullsafeOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NotOperatorWithSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\NotOperatorWithSuccessorSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\ObjectOperatorWithoutWhitespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\OperatorLinebreakFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\StandardizeIncrementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\StandardizeNotEqualsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryOperatorSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryToElvisOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\TernaryToNullCoalescingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php', - 'PhpCsFixer\\Fixer\\Operator\\UnaryOperatorSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\BlankLineAfterOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\EchoTagSyntaxFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\FullOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpTag\\NoClosingTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertInternalTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertInternalTypeFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitExpectationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitExpectationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitFqcnAnnotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitFqcnAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitInternalClassFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitInternalClassFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMethodCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMethodCasingFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMockFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMockFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitMockShortWillReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitMockShortWillReturnFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitNamespacedFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitNamespacedFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitNoExpectationAnnotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitNoExpectationAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitSetUpTearDownVisibilityFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitSetUpTearDownVisibilityFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitSizeClassFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitSizeClassFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitStrictFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitStrictFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTargetVersion' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTargetVersion.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestAnnotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestCaseStaticMethodCallsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestCaseStaticMethodCallsFixer.php', - 'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitTestClassRequiresCoversFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitTestClassRequiresCoversFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\AlignMultilineCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\GeneralPhpdocAnnotationRemoveFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\GeneralPhpdocTagRenameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoBlankLinesAfterPhpdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoEmptyPhpdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\NoSuperfluousPhpdocTagsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAddMissingParamAnnotationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAlignFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocAnnotationWithoutDotFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocIndentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocInlineTagNormalizerFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocLineSpanFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoAccessFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoAliasTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoEmptyReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoPackageFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoUselessInheritdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocOrderByValueFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocReturnSelfReferenceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocScalarFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSeparationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSingleLineVarSpacingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocSummaryFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTagCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTagTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocToCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTrimConsecutiveBlankLineSeparationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTrimFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTypesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocTypesOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocVarAnnotationCorrectOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php', - 'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocVarWithoutNameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\NoUselessReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\ReturnAssignmentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php', - 'PhpCsFixer\\Fixer\\ReturnNotation\\SimplifiedNullReturnFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\MultilineWhitespaceBeforeSemicolonsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\NoEmptyStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\NoSinglelineWhitespaceBeforeSemicolonsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\SemicolonAfterInstructionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php', - 'PhpCsFixer\\Fixer\\Semicolon\\SpaceAfterSemicolonFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\DeclareStrictTypesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\StrictComparisonFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php', - 'PhpCsFixer\\Fixer\\Strict\\StrictParamFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\EscapeImplicitBackslashesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\ExplicitStringVariableFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\HeredocToNowdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\NoBinaryStringFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\NoTrailingWhitespaceInStringFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\SimpleToComplexStringVariableFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\SingleQuoteFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\StringLengthToEmptyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php', - 'PhpCsFixer\\Fixer\\StringNotation\\StringLineEndingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\ArrayIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\BlankLineBeforeStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\BlankLineBetweenImportGroupsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypehintFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\HeredocIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\IndentationTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\LineEndingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\MethodChainingIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoExtraBlankLinesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoSpacesAroundOffsetFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoSpacesInsideParenthesisFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoTrailingWhitespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\NoWhitespaceInBlankLineFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\SingleBlankLineAtEofFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php', - 'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php', - 'PhpCsFixer\\Fixer\\WhitespacesAwareFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php', - 'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php', - 'PhpCsFixer\\Linter\\CachingLinter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php', - 'PhpCsFixer\\Linter\\Linter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/Linter.php', - 'PhpCsFixer\\Linter\\LinterInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php', - 'PhpCsFixer\\Linter\\LintingException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/LintingException.php', - 'PhpCsFixer\\Linter\\LintingResultInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php', - 'PhpCsFixer\\Linter\\ProcessLinter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php', - 'PhpCsFixer\\Linter\\ProcessLinterProcessBuilder' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php', - 'PhpCsFixer\\Linter\\ProcessLintingResult' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php', - 'PhpCsFixer\\Linter\\TokenizerLinter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php', - 'PhpCsFixer\\Linter\\TokenizerLintingResult' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php', - 'PhpCsFixer\\Linter\\UnavailableLinterException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php', - 'PhpCsFixer\\PharChecker' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/PharChecker.php', - 'PhpCsFixer\\PharCheckerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php', - 'PhpCsFixer\\Preg' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Preg.php', - 'PhpCsFixer\\PregException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/PregException.php', - 'PhpCsFixer\\RuleSet\\AbstractMigrationSetDescription' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php', - 'PhpCsFixer\\RuleSet\\AbstractRuleSetDescription' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php', - 'PhpCsFixer\\RuleSet\\RuleSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php', - 'PhpCsFixer\\RuleSet\\RuleSetDescriptionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php', - 'PhpCsFixer\\RuleSet\\RuleSetInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php', - 'PhpCsFixer\\RuleSet\\RuleSets' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php', - 'PhpCsFixer\\RuleSet\\Sets\\DoctrineAnnotationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PERRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PERSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP54MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP56MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP70MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP70MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP71MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP71MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP73MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP74MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP74MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP81MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit30MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit32MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit35MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit43MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit48MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit50MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit52MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit54MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit55MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit56MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit57MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit60MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit75MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PHPUnit84MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR12RiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR12Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR1Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PSR2Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php', - 'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php', - 'PhpCsFixer\\RuleSet\\Sets\\SymfonyRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php', - 'PhpCsFixer\\RuleSet\\Sets\\SymfonySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php', - 'PhpCsFixer\\Runner\\FileCachingLintingIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php', - 'PhpCsFixer\\Runner\\FileFilterIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php', - 'PhpCsFixer\\Runner\\FileLintingIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php', - 'PhpCsFixer\\Runner\\Runner' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/Runner.php', - 'PhpCsFixer\\StdinFileInfo' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/StdinFileInfo.php', - 'PhpCsFixer\\Tokenizer\\AbstractTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php', - 'PhpCsFixer\\Tokenizer\\AbstractTypeTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\AlternativeSyntaxAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\AbstractControlCaseStructuresAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\ArgumentAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\CaseAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DefaultAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\EnumAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\MatchAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\NamespaceAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\NamespaceUseAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\StartEndTokenAwareAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\SwitchAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\TypeAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ArgumentsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\AttributeAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\BlocksAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ClassyAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\CommentsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ControlCaseStructuresAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\GotoLabelAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\NamespaceUsesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\NamespacesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\RangeAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\ReferenceAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\Analyzer\\WhitespacesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\CT' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php', - 'PhpCsFixer\\Tokenizer\\CodeHasher' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php', - 'PhpCsFixer\\Tokenizer\\Token' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php', - 'PhpCsFixer\\Tokenizer\\Tokens' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php', - 'PhpCsFixer\\Tokenizer\\TokensAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php', - 'PhpCsFixer\\Tokenizer\\TransformerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ArrayTypehintTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\AttributeTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\BraceClassInstantiationTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ClassConstantTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ConstructorPromotionTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\CurlyBraceTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\FirstClassCallableTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ImportTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NameQualifiedTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NamedArgumentTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NamespaceOperatorTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\NullableTypeTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\ReturnRefTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\SquareBraceTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeAlternationTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeColonTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\TypeIntersectionTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\UseTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformer\\WhitespacyCommentTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php', - 'PhpCsFixer\\Tokenizer\\Transformers' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformers.php', - 'PhpCsFixer\\ToolInfo' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ToolInfo.php', - 'PhpCsFixer\\ToolInfoInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php', - 'PhpCsFixer\\Utils' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Utils.php', - 'PhpCsFixer\\WhitespacesFixerConfig' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php', - 'PhpCsFixer\\WordMatcher' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/WordMatcher.php', - 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php', - 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', - 'PhpParser\\BuilderHelpers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', - 'PhpParser\\Builder\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php', - 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', - 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', - 'PhpParser\\Builder\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php', - 'PhpParser\\Builder\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php', - 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', - 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', - 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', - 'PhpParser\\Builder\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', - 'PhpParser\\Builder\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', - 'PhpParser\\Builder\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', - 'PhpParser\\Builder\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', - 'PhpParser\\Builder\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', - 'PhpParser\\Builder\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', - 'PhpParser\\Builder\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', - 'PhpParser\\Builder\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', - 'PhpParser\\Comment' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment.php', - 'PhpParser\\Comment\\Doc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', - 'PhpParser\\ConstExprEvaluationException' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', - 'PhpParser\\ConstExprEvaluator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', - 'PhpParser\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Error.php', - 'PhpParser\\ErrorHandler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', - 'PhpParser\\ErrorHandler\\Collecting' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', - 'PhpParser\\ErrorHandler\\Throwing' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', - 'PhpParser\\Internal\\DiffElem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', - 'PhpParser\\Internal\\Differ' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', - 'PhpParser\\Internal\\PrintableNewAnonClassNode' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PhpParser\\Internal\\TokenStream' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', - 'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', - 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php', - 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', - 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php', - 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php', - 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', - 'PhpParser\\NodeDumper' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', - 'PhpParser\\NodeFinder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', - 'PhpParser\\NodeTraverser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', - 'PhpParser\\NodeTraverserInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', - 'PhpParser\\NodeVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', - 'PhpParser\\NodeVisitorAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', - 'PhpParser\\NodeVisitor\\CloningVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', - 'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', - 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', - 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', - 'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', - 'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', - 'PhpParser\\Node\\ComplexType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php', - 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', - 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', - 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PhpParser\\Node\\Expr\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', - 'PhpParser\\Node\\Expr\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', - 'PhpParser\\Node\\Expr\\ArrowFunction' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', - 'PhpParser\\Node\\Expr\\Assign' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', - 'PhpParser\\Node\\Expr\\AssignOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\AssignRef' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', - 'PhpParser\\Node\\Expr\\BinaryOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', - 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', - 'PhpParser\\Node\\Expr\\CallLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php', - 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', - 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', - 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', - 'PhpParser\\Node\\Expr\\Cast\\Double' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', - 'PhpParser\\Node\\Expr\\Cast\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', - 'PhpParser\\Node\\Expr\\Cast\\Object_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', - 'PhpParser\\Node\\Expr\\Cast\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', - 'PhpParser\\Node\\Expr\\Cast\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', - 'PhpParser\\Node\\Expr\\ClassConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', - 'PhpParser\\Node\\Expr\\Clone_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', - 'PhpParser\\Node\\Expr\\Closure' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', - 'PhpParser\\Node\\Expr\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', - 'PhpParser\\Node\\Expr\\ConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', - 'PhpParser\\Node\\Expr\\Empty_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', - 'PhpParser\\Node\\Expr\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', - 'PhpParser\\Node\\Expr\\ErrorSuppress' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', - 'PhpParser\\Node\\Expr\\Eval_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', - 'PhpParser\\Node\\Expr\\Exit_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', - 'PhpParser\\Node\\Expr\\FuncCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', - 'PhpParser\\Node\\Expr\\Include_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', - 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', - 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', - 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', - 'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', - 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', - 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', - 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', - 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', - 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', - 'PhpParser\\Node\\Expr\\PreInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', - 'PhpParser\\Node\\Expr\\Print_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', - 'PhpParser\\Node\\Expr\\PropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', - 'PhpParser\\Node\\Expr\\ShellExec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', - 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', - 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', - 'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', - 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', - 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', - 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', - 'PhpParser\\Node\\Expr\\YieldFrom' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', - 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', - 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', - 'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', - 'PhpParser\\Node\\IntersectionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php', - 'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', - 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php', - 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', - 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', - 'PhpParser\\Node\\NullableType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', - 'PhpParser\\Node\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Param.php', - 'PhpParser\\Node\\Scalar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', - 'PhpParser\\Node\\Scalar\\DNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', - 'PhpParser\\Node\\Scalar\\Encapsed' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', - 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PhpParser\\Node\\Scalar\\LNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', - 'PhpParser\\Node\\Scalar\\MagicConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\File' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PhpParser\\Node\\Scalar\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', - 'PhpParser\\Node\\Stmt' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', - 'PhpParser\\Node\\Stmt\\Break_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', - 'PhpParser\\Node\\Stmt\\Case_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', - 'PhpParser\\Node\\Stmt\\Catch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', - 'PhpParser\\Node\\Stmt\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', - 'PhpParser\\Node\\Stmt\\ClassLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', - 'PhpParser\\Node\\Stmt\\ClassMethod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', - 'PhpParser\\Node\\Stmt\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', - 'PhpParser\\Node\\Stmt\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', - 'PhpParser\\Node\\Stmt\\Continue_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', - 'PhpParser\\Node\\Stmt\\DeclareDeclare' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', - 'PhpParser\\Node\\Stmt\\Declare_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', - 'PhpParser\\Node\\Stmt\\Do_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', - 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', - 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', - 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', - 'PhpParser\\Node\\Stmt\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php', - 'PhpParser\\Node\\Stmt\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php', - 'PhpParser\\Node\\Stmt\\Expression' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', - 'PhpParser\\Node\\Stmt\\Finally_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', - 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', - 'PhpParser\\Node\\Stmt\\Foreach_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', - 'PhpParser\\Node\\Stmt\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', - 'PhpParser\\Node\\Stmt\\Global_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', - 'PhpParser\\Node\\Stmt\\Goto_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', - 'PhpParser\\Node\\Stmt\\GroupUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', - 'PhpParser\\Node\\Stmt\\HaltCompiler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', - 'PhpParser\\Node\\Stmt\\If_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', - 'PhpParser\\Node\\Stmt\\InlineHTML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', - 'PhpParser\\Node\\Stmt\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', - 'PhpParser\\Node\\Stmt\\Label' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', - 'PhpParser\\Node\\Stmt\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', - 'PhpParser\\Node\\Stmt\\Nop' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', - 'PhpParser\\Node\\Stmt\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', - 'PhpParser\\Node\\Stmt\\PropertyProperty' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', - 'PhpParser\\Node\\Stmt\\Return_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', - 'PhpParser\\Node\\Stmt\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', - 'PhpParser\\Node\\Stmt\\Static_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', - 'PhpParser\\Node\\Stmt\\Switch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', - 'PhpParser\\Node\\Stmt\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', - 'PhpParser\\Node\\Stmt\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PhpParser\\Node\\Stmt\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', - 'PhpParser\\Node\\Stmt\\TryCatch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', - 'PhpParser\\Node\\Stmt\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', - 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', - 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', - 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', - 'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', - 'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', - 'PhpParser\\Node\\VariadicPlaceholder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php', - 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php', - 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', - 'PhpParser\\ParserFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', - 'PhpParser\\Parser\\Multiple' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', - 'PhpParser\\Parser\\Php5' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', - 'PhpParser\\Parser\\Php7' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', - 'PhpParser\\Parser\\Tokens' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', - 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', - 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Predis\\Autoloader' => __DIR__ . '/..' . '/predis/predis/src/Autoloader.php', - 'Predis\\Client' => __DIR__ . '/..' . '/predis/predis/src/Client.php', - 'Predis\\ClientConfiguration' => __DIR__ . '/..' . '/predis/predis/src/ClientConfiguration.php', - 'Predis\\ClientContextInterface' => __DIR__ . '/..' . '/predis/predis/src/ClientContextInterface.php', - 'Predis\\ClientException' => __DIR__ . '/..' . '/predis/predis/src/ClientException.php', - 'Predis\\ClientInterface' => __DIR__ . '/..' . '/predis/predis/src/ClientInterface.php', - 'Predis\\Cluster\\ClusterStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/ClusterStrategy.php', - 'Predis\\Cluster\\Distributor\\DistributorInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/DistributorInterface.php', - 'Predis\\Cluster\\Distributor\\EmptyRingException' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/EmptyRingException.php', - 'Predis\\Cluster\\Distributor\\HashRing' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/HashRing.php', - 'Predis\\Cluster\\Distributor\\KetamaRing' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/KetamaRing.php', - 'Predis\\Cluster\\Hash\\CRC16' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Hash/CRC16.php', - 'Predis\\Cluster\\Hash\\HashGeneratorInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php', - 'Predis\\Cluster\\Hash\\PhpiredisCRC16' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Hash/PhpiredisCRC16.php', - 'Predis\\Cluster\\PredisStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/PredisStrategy.php', - 'Predis\\Cluster\\RedisStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/RedisStrategy.php', - 'Predis\\Cluster\\SlotMap' => __DIR__ . '/..' . '/predis/predis/src/Cluster/SlotMap.php', - 'Predis\\Cluster\\StrategyInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/StrategyInterface.php', - 'Predis\\Collection\\Iterator\\CursorBasedIterator' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/CursorBasedIterator.php', - 'Predis\\Collection\\Iterator\\HashKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/HashKey.php', - 'Predis\\Collection\\Iterator\\Keyspace' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/Keyspace.php', - 'Predis\\Collection\\Iterator\\ListKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/ListKey.php', - 'Predis\\Collection\\Iterator\\SetKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/SetKey.php', - 'Predis\\Collection\\Iterator\\SortedSetKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/SortedSetKey.php', - 'Predis\\Command\\Argument\\ArrayableArgument' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/ArrayableArgument.php', - 'Predis\\Command\\Argument\\Geospatial\\AbstractBy' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/AbstractBy.php', - 'Predis\\Command\\Argument\\Geospatial\\ByBox' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/ByBox.php', - 'Predis\\Command\\Argument\\Geospatial\\ByInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/ByInterface.php', - 'Predis\\Command\\Argument\\Geospatial\\ByRadius' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/ByRadius.php', - 'Predis\\Command\\Argument\\Geospatial\\FromInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromInterface.php', - 'Predis\\Command\\Argument\\Geospatial\\FromLonLat' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromLonLat.php', - 'Predis\\Command\\Argument\\Geospatial\\FromMember' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromMember.php', - 'Predis\\Command\\Argument\\Search\\AggregateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/AggregateArguments.php', - 'Predis\\Command\\Argument\\Search\\AlterArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/AlterArguments.php', - 'Predis\\Command\\Argument\\Search\\CommonArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CommonArguments.php', - 'Predis\\Command\\Argument\\Search\\CreateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CreateArguments.php', - 'Predis\\Command\\Argument\\Search\\CursorArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CursorArguments.php', - 'Predis\\Command\\Argument\\Search\\DropArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/DropArguments.php', - 'Predis\\Command\\Argument\\Search\\ExplainArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/ExplainArguments.php', - 'Predis\\Command\\Argument\\Search\\ProfileArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/ProfileArguments.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\AbstractField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\FieldInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\GeoField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\NumericField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\TagField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\TextField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php', - 'Predis\\Command\\Argument\\Search\\SchemaFields\\VectorField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php', - 'Predis\\Command\\Argument\\Search\\SearchArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SearchArguments.php', - 'Predis\\Command\\Argument\\Search\\SpellcheckArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php', - 'Predis\\Command\\Argument\\Search\\SugAddArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SugAddArguments.php', - 'Predis\\Command\\Argument\\Search\\SugGetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SugGetArguments.php', - 'Predis\\Command\\Argument\\Search\\SynUpdateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php', - 'Predis\\Command\\Argument\\Server\\LimitInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/LimitInterface.php', - 'Predis\\Command\\Argument\\Server\\LimitOffsetCount' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/LimitOffsetCount.php', - 'Predis\\Command\\Argument\\Server\\To' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/To.php', - 'Predis\\Command\\Argument\\TimeSeries\\AddArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\AlterArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\CommonArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\CreateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\DecrByArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\GetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\IncrByArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\InfoArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\MGetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\MRangeArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php', - 'Predis\\Command\\Argument\\TimeSeries\\RangeArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php', - 'Predis\\Command\\Command' => __DIR__ . '/..' . '/predis/predis/src/Command/Command.php', - 'Predis\\Command\\CommandInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/CommandInterface.php', - 'Predis\\Command\\Factory' => __DIR__ . '/..' . '/predis/predis/src/Command/Factory.php', - 'Predis\\Command\\FactoryInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/FactoryInterface.php', - 'Predis\\Command\\PrefixableCommandInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/PrefixableCommandInterface.php', - 'Predis\\Command\\Processor\\KeyPrefixProcessor' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/KeyPrefixProcessor.php', - 'Predis\\Command\\Processor\\ProcessorChain' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/ProcessorChain.php', - 'Predis\\Command\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/ProcessorInterface.php', - 'Predis\\Command\\RawCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/RawCommand.php', - 'Predis\\Command\\RawFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/RawFactory.php', - 'Predis\\Command\\RedisFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/RedisFactory.php', - 'Predis\\Command\\Redis\\ACL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ACL.php', - 'Predis\\Command\\Redis\\APPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/APPEND.php', - 'Predis\\Command\\Redis\\AUTH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/AUTH.php', - 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', - 'Predis\\Command\\Redis\\BGREWRITEAOF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BGREWRITEAOF.php', - 'Predis\\Command\\Redis\\BGSAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BGSAVE.php', - 'Predis\\Command\\Redis\\BITCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITCOUNT.php', - 'Predis\\Command\\Redis\\BITFIELD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITFIELD.php', - 'Predis\\Command\\Redis\\BITOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITOP.php', - 'Predis\\Command\\Redis\\BITPOS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITPOS.php', - 'Predis\\Command\\Redis\\BLMOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLMOVE.php', - 'Predis\\Command\\Redis\\BLMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLMPOP.php', - 'Predis\\Command\\Redis\\BLPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLPOP.php', - 'Predis\\Command\\Redis\\BRPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BRPOP.php', - 'Predis\\Command\\Redis\\BRPOPLPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BRPOPLPUSH.php', - 'Predis\\Command\\Redis\\BZMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZMPOP.php', - 'Predis\\Command\\Redis\\BZPOPMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZPOPMAX.php', - 'Predis\\Command\\Redis\\BZPOPMIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZPOPMIN.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFADD.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFLOADCHUNK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFMADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFMEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php', - 'Predis\\Command\\Redis\\BloomFilter\\BFSCANDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php', - 'Predis\\Command\\Redis\\CLIENT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CLIENT.php', - 'Predis\\Command\\Redis\\COMMAND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/COMMAND.php', - 'Predis\\Command\\Redis\\CONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CONFIG.php', - 'Predis\\Command\\Redis\\COPY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/COPY.php', - 'Predis\\Command\\Redis\\Container\\ACL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ACL.php', - 'Predis\\Command\\Redis\\Container\\AbstractContainer' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/AbstractContainer.php', - 'Predis\\Command\\Redis\\Container\\ContainerFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ContainerFactory.php', - 'Predis\\Command\\Redis\\Container\\ContainerInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ContainerInterface.php', - 'Predis\\Command\\Redis\\Container\\FunctionContainer' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/FunctionContainer.php', - 'Predis\\Command\\Redis\\Container\\Json\\JSONDEBUG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php', - 'Predis\\Command\\Redis\\Container\\Search\\FTCONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php', - 'Predis\\Command\\Redis\\Container\\Search\\FTCURSOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYDIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYPROB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php', - 'Predis\\Command\\Redis\\CountMinSketch\\CMSQUERY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFADDNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERTNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFLOADCHUNK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFMEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php', - 'Predis\\Command\\Redis\\CuckooFilter\\CFSCANDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php', - 'Predis\\Command\\Redis\\DBSIZE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DBSIZE.php', - 'Predis\\Command\\Redis\\DECR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DECR.php', - 'Predis\\Command\\Redis\\DECRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DECRBY.php', - 'Predis\\Command\\Redis\\DEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DEL.php', - 'Predis\\Command\\Redis\\DISCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DISCARD.php', - 'Predis\\Command\\Redis\\DUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DUMP.php', - 'Predis\\Command\\Redis\\ECHO_' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ECHO_.php', - 'Predis\\Command\\Redis\\EVALSHA' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EVALSHA.php', - 'Predis\\Command\\Redis\\EVALSHA_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EVALSHA_RO.php', - 'Predis\\Command\\Redis\\EVAL_' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EVAL_.php', - 'Predis\\Command\\Redis\\EVAL_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EVAL_RO.php', - 'Predis\\Command\\Redis\\EXEC' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXEC.php', - 'Predis\\Command\\Redis\\EXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXISTS.php', - 'Predis\\Command\\Redis\\EXPIRE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIRE.php', - 'Predis\\Command\\Redis\\EXPIREAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIREAT.php', - 'Predis\\Command\\Redis\\EXPIRETIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIRETIME.php', - 'Predis\\Command\\Redis\\FAILOVER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FAILOVER.php', - 'Predis\\Command\\Redis\\FCALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FCALL.php', - 'Predis\\Command\\Redis\\FCALL_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FCALL_RO.php', - 'Predis\\Command\\Redis\\FLUSHALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FLUSHALL.php', - 'Predis\\Command\\Redis\\FLUSHDB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FLUSHDB.php', - 'Predis\\Command\\Redis\\FUNCTIONS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FUNCTIONS.php', - 'Predis\\Command\\Redis\\GEOADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOADD.php', - 'Predis\\Command\\Redis\\GEODIST' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEODIST.php', - 'Predis\\Command\\Redis\\GEOHASH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOHASH.php', - 'Predis\\Command\\Redis\\GEOPOS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOPOS.php', - 'Predis\\Command\\Redis\\GEORADIUS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEORADIUS.php', - 'Predis\\Command\\Redis\\GEORADIUSBYMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php', - 'Predis\\Command\\Redis\\GEOSEARCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOSEARCH.php', - 'Predis\\Command\\Redis\\GEOSEARCHSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOSEARCHSTORE.php', - 'Predis\\Command\\Redis\\GET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GET.php', - 'Predis\\Command\\Redis\\GETBIT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETBIT.php', - 'Predis\\Command\\Redis\\GETDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETDEL.php', - 'Predis\\Command\\Redis\\GETEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETEX.php', - 'Predis\\Command\\Redis\\GETRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETRANGE.php', - 'Predis\\Command\\Redis\\GETSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETSET.php', - 'Predis\\Command\\Redis\\HDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HDEL.php', - 'Predis\\Command\\Redis\\HEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HEXISTS.php', - 'Predis\\Command\\Redis\\HGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HGET.php', - 'Predis\\Command\\Redis\\HGETALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HGETALL.php', - 'Predis\\Command\\Redis\\HINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HINCRBY.php', - 'Predis\\Command\\Redis\\HINCRBYFLOAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HINCRBYFLOAT.php', - 'Predis\\Command\\Redis\\HKEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HKEYS.php', - 'Predis\\Command\\Redis\\HLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HLEN.php', - 'Predis\\Command\\Redis\\HMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HMGET.php', - 'Predis\\Command\\Redis\\HMSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HMSET.php', - 'Predis\\Command\\Redis\\HRANDFIELD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HRANDFIELD.php', - 'Predis\\Command\\Redis\\HSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HSCAN.php', - 'Predis\\Command\\Redis\\HSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HSET.php', - 'Predis\\Command\\Redis\\HSETNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HSETNX.php', - 'Predis\\Command\\Redis\\HSTRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HSTRLEN.php', - 'Predis\\Command\\Redis\\HVALS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HVALS.php', - 'Predis\\Command\\Redis\\INCR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCR.php', - 'Predis\\Command\\Redis\\INCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCRBY.php', - 'Predis\\Command\\Redis\\INCRBYFLOAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCRBYFLOAT.php', - 'Predis\\Command\\Redis\\INFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INFO.php', - 'Predis\\Command\\Redis\\Json\\JSONARRAPPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php', - 'Predis\\Command\\Redis\\Json\\JSONARRINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php', - 'Predis\\Command\\Redis\\Json\\JSONARRINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php', - 'Predis\\Command\\Redis\\Json\\JSONARRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONARRPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRPOP.php', - 'Predis\\Command\\Redis\\Json\\JSONARRTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php', - 'Predis\\Command\\Redis\\Json\\JSONCLEAR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONCLEAR.php', - 'Predis\\Command\\Redis\\Json\\JSONDEBUG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONDEBUG.php', - 'Predis\\Command\\Redis\\Json\\JSONDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONDEL.php', - 'Predis\\Command\\Redis\\Json\\JSONFORGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONFORGET.php', - 'Predis\\Command\\Redis\\Json\\JSONGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONGET.php', - 'Predis\\Command\\Redis\\Json\\JSONMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMERGE.php', - 'Predis\\Command\\Redis\\Json\\JSONMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMGET.php', - 'Predis\\Command\\Redis\\Json\\JSONMSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMSET.php', - 'Predis\\Command\\Redis\\Json\\JSONNUMINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php', - 'Predis\\Command\\Redis\\Json\\JSONOBJKEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php', - 'Predis\\Command\\Redis\\Json\\JSONOBJLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONRESP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONRESP.php', - 'Predis\\Command\\Redis\\Json\\JSONSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSET.php', - 'Predis\\Command\\Redis\\Json\\JSONSTRAPPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php', - 'Predis\\Command\\Redis\\Json\\JSONSTRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php', - 'Predis\\Command\\Redis\\Json\\JSONTOGGLE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php', - 'Predis\\Command\\Redis\\Json\\JSONTYPE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONTYPE.php', - 'Predis\\Command\\Redis\\KEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/KEYS.php', - 'Predis\\Command\\Redis\\LASTSAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LASTSAVE.php', - 'Predis\\Command\\Redis\\LCS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LCS.php', - 'Predis\\Command\\Redis\\LINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LINDEX.php', - 'Predis\\Command\\Redis\\LINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LINSERT.php', - 'Predis\\Command\\Redis\\LLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LLEN.php', - 'Predis\\Command\\Redis\\LMOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LMOVE.php', - 'Predis\\Command\\Redis\\LMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LMPOP.php', - 'Predis\\Command\\Redis\\LPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPOP.php', - 'Predis\\Command\\Redis\\LPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPUSH.php', - 'Predis\\Command\\Redis\\LPUSHX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPUSHX.php', - 'Predis\\Command\\Redis\\LRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LRANGE.php', - 'Predis\\Command\\Redis\\LREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LREM.php', - 'Predis\\Command\\Redis\\LSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LSET.php', - 'Predis\\Command\\Redis\\LTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LTRIM.php', - 'Predis\\Command\\Redis\\MGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MGET.php', - 'Predis\\Command\\Redis\\MIGRATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MIGRATE.php', - 'Predis\\Command\\Redis\\MONITOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MONITOR.php', - 'Predis\\Command\\Redis\\MOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MOVE.php', - 'Predis\\Command\\Redis\\MSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MSET.php', - 'Predis\\Command\\Redis\\MSETNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MSETNX.php', - 'Predis\\Command\\Redis\\MULTI' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MULTI.php', - 'Predis\\Command\\Redis\\OBJECT_' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/OBJECT_.php', - 'Predis\\Command\\Redis\\PERSIST' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PERSIST.php', - 'Predis\\Command\\Redis\\PEXPIRE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIRE.php', - 'Predis\\Command\\Redis\\PEXPIREAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIREAT.php', - 'Predis\\Command\\Redis\\PEXPIRETIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIRETIME.php', - 'Predis\\Command\\Redis\\PFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFADD.php', - 'Predis\\Command\\Redis\\PFCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFCOUNT.php', - 'Predis\\Command\\Redis\\PFMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFMERGE.php', - 'Predis\\Command\\Redis\\PING' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PING.php', - 'Predis\\Command\\Redis\\PSETEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PSETEX.php', - 'Predis\\Command\\Redis\\PSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PSUBSCRIBE.php', - 'Predis\\Command\\Redis\\PTTL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PTTL.php', - 'Predis\\Command\\Redis\\PUBLISH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUBLISH.php', - 'Predis\\Command\\Redis\\PUBSUB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUBSUB.php', - 'Predis\\Command\\Redis\\PUNSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php', - 'Predis\\Command\\Redis\\QUIT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/QUIT.php', - 'Predis\\Command\\Redis\\RANDOMKEY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RANDOMKEY.php', - 'Predis\\Command\\Redis\\RENAME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RENAME.php', - 'Predis\\Command\\Redis\\RENAMENX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RENAMENX.php', - 'Predis\\Command\\Redis\\RESTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RESTORE.php', - 'Predis\\Command\\Redis\\RPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPOP.php', - 'Predis\\Command\\Redis\\RPOPLPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPOPLPUSH.php', - 'Predis\\Command\\Redis\\RPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPUSH.php', - 'Predis\\Command\\Redis\\RPUSHX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPUSHX.php', - 'Predis\\Command\\Redis\\SADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SADD.php', - 'Predis\\Command\\Redis\\SAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SAVE.php', - 'Predis\\Command\\Redis\\SCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SCAN.php', - 'Predis\\Command\\Redis\\SCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SCARD.php', - 'Predis\\Command\\Redis\\SCRIPT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SCRIPT.php', - 'Predis\\Command\\Redis\\SDIFF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SDIFF.php', - 'Predis\\Command\\Redis\\SDIFFSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SDIFFSTORE.php', - 'Predis\\Command\\Redis\\SELECT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SELECT.php', - 'Predis\\Command\\Redis\\SENTINEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SENTINEL.php', - 'Predis\\Command\\Redis\\SET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SET.php', - 'Predis\\Command\\Redis\\SETBIT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETBIT.php', - 'Predis\\Command\\Redis\\SETEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETEX.php', - 'Predis\\Command\\Redis\\SETNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETNX.php', - 'Predis\\Command\\Redis\\SETRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETRANGE.php', - 'Predis\\Command\\Redis\\SHUTDOWN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SHUTDOWN.php', - 'Predis\\Command\\Redis\\SINTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTER.php', - 'Predis\\Command\\Redis\\SINTERCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTERCARD.php', - 'Predis\\Command\\Redis\\SINTERSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTERSTORE.php', - 'Predis\\Command\\Redis\\SISMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SISMEMBER.php', - 'Predis\\Command\\Redis\\SLAVEOF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SLAVEOF.php', - 'Predis\\Command\\Redis\\SLOWLOG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SLOWLOG.php', - 'Predis\\Command\\Redis\\SMEMBERS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SMEMBERS.php', - 'Predis\\Command\\Redis\\SMISMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SMISMEMBER.php', - 'Predis\\Command\\Redis\\SMOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SMOVE.php', - 'Predis\\Command\\Redis\\SORT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SORT.php', - 'Predis\\Command\\Redis\\SORT_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SORT_RO.php', - 'Predis\\Command\\Redis\\SPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SPOP.php', - 'Predis\\Command\\Redis\\SRANDMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SRANDMEMBER.php', - 'Predis\\Command\\Redis\\SREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SREM.php', - 'Predis\\Command\\Redis\\SSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SSCAN.php', - 'Predis\\Command\\Redis\\STRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/STRLEN.php', - 'Predis\\Command\\Redis\\SUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUBSCRIBE.php', - 'Predis\\Command\\Redis\\SUBSTR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUBSTR.php', - 'Predis\\Command\\Redis\\SUNION' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUNION.php', - 'Predis\\Command\\Redis\\SUNIONSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUNIONSTORE.php', - 'Predis\\Command\\Redis\\Search\\FTAGGREGATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php', - 'Predis\\Command\\Redis\\Search\\FTALIASADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASADD.php', - 'Predis\\Command\\Redis\\Search\\FTALIASDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASDEL.php', - 'Predis\\Command\\Redis\\Search\\FTALIASUPDATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php', - 'Predis\\Command\\Redis\\Search\\FTALTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALTER.php', - 'Predis\\Command\\Redis\\Search\\FTCONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCONFIG.php', - 'Predis\\Command\\Redis\\Search\\FTCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCREATE.php', - 'Predis\\Command\\Redis\\Search\\FTCURSOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCURSOR.php', - 'Predis\\Command\\Redis\\Search\\FTDICTADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTADD.php', - 'Predis\\Command\\Redis\\Search\\FTDICTDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTDEL.php', - 'Predis\\Command\\Redis\\Search\\FTDICTDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php', - 'Predis\\Command\\Redis\\Search\\FTDROPINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php', - 'Predis\\Command\\Redis\\Search\\FTEXPLAIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php', - 'Predis\\Command\\Redis\\Search\\FTINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTINFO.php', - 'Predis\\Command\\Redis\\Search\\FTPROFILE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTPROFILE.php', - 'Predis\\Command\\Redis\\Search\\FTSEARCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSEARCH.php', - 'Predis\\Command\\Redis\\Search\\FTSPELLCHECK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php', - 'Predis\\Command\\Redis\\Search\\FTSUGADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGADD.php', - 'Predis\\Command\\Redis\\Search\\FTSUGDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGDEL.php', - 'Predis\\Command\\Redis\\Search\\FTSUGGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGGET.php', - 'Predis\\Command\\Redis\\Search\\FTSUGLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGLEN.php', - 'Predis\\Command\\Redis\\Search\\FTSYNDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php', - 'Predis\\Command\\Redis\\Search\\FTSYNUPDATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php', - 'Predis\\Command\\Redis\\Search\\FTTAGVALS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTTAGVALS.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYREVRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTCDF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTMIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTQUANTILE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTRESET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTREVRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php', - 'Predis\\Command\\Redis\\TDigest\\TDIGESTTRIMMED_MEAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.php', - 'Predis\\Command\\Redis\\TIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TIME.php', - 'Predis\\Command\\Redis\\TOUCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TOUCH.php', - 'Predis\\Command\\Redis\\TTL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TTL.php', - 'Predis\\Command\\Redis\\TYPE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TYPE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSADD.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSALTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSCREATERULE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDECRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSDELETERULE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSGET.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSMREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSQUERYINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php', - 'Predis\\Command\\Redis\\TimeSeries\\TSREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php', - 'Predis\\Command\\Redis\\TopK\\TOPKADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKADD.php', - 'Predis\\Command\\Redis\\TopK\\TOPKINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php', - 'Predis\\Command\\Redis\\TopK\\TOPKINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKINFO.php', - 'Predis\\Command\\Redis\\TopK\\TOPKLIST' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKLIST.php', - 'Predis\\Command\\Redis\\TopK\\TOPKQUERY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php', - 'Predis\\Command\\Redis\\TopK\\TOPKRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.php', - 'Predis\\Command\\Redis\\UNSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', - 'Predis\\Command\\Redis\\UNWATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNWATCH.php', - 'Predis\\Command\\Redis\\WAITAOF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WAITAOF.php', - 'Predis\\Command\\Redis\\WATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WATCH.php', - 'Predis\\Command\\Redis\\XADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XADD.php', - 'Predis\\Command\\Redis\\XDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XDEL.php', - 'Predis\\Command\\Redis\\XLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XLEN.php', - 'Predis\\Command\\Redis\\XRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XRANGE.php', - 'Predis\\Command\\Redis\\XREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XREVRANGE.php', - 'Predis\\Command\\Redis\\XTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XTRIM.php', - 'Predis\\Command\\Redis\\ZADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZADD.php', - 'Predis\\Command\\Redis\\ZCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZCARD.php', - 'Predis\\Command\\Redis\\ZCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZCOUNT.php', - 'Predis\\Command\\Redis\\ZDIFF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZDIFF.php', - 'Predis\\Command\\Redis\\ZDIFFSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZDIFFSTORE.php', - 'Predis\\Command\\Redis\\ZINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZINCRBY.php', - 'Predis\\Command\\Redis\\ZINTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZINTER.php', - 'Predis\\Command\\Redis\\ZINTERCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZINTERCARD.php', - 'Predis\\Command\\Redis\\ZINTERSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZINTERSTORE.php', - 'Predis\\Command\\Redis\\ZLEXCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZLEXCOUNT.php', - 'Predis\\Command\\Redis\\ZMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZMPOP.php', - 'Predis\\Command\\Redis\\ZMSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZMSCORE.php', - 'Predis\\Command\\Redis\\ZPOPMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZPOPMAX.php', - 'Predis\\Command\\Redis\\ZPOPMIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZPOPMIN.php', - 'Predis\\Command\\Redis\\ZRANDMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANDMEMBER.php', - 'Predis\\Command\\Redis\\ZRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGE.php', - 'Predis\\Command\\Redis\\ZRANGEBYLEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZRANGEBYSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZRANGESTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGESTORE.php', - 'Predis\\Command\\Redis\\ZRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANK.php', - 'Predis\\Command\\Redis\\ZREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREM.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYLEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYRANK.php', - 'Predis\\Command\\Redis\\ZREMRANGEBYSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREVRANGE.php', - 'Predis\\Command\\Redis\\ZREVRANGEBYLEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREVRANGEBYLEX.php', - 'Predis\\Command\\Redis\\ZREVRANGEBYSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREVRANGEBYSCORE.php', - 'Predis\\Command\\Redis\\ZREVRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREVRANK.php', - 'Predis\\Command\\Redis\\ZSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZSCAN.php', - 'Predis\\Command\\Redis\\ZSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZSCORE.php', - 'Predis\\Command\\Redis\\ZUNION' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZUNION.php', - 'Predis\\Command\\Redis\\ZUNIONSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZUNIONSTORE.php', - 'Predis\\Command\\ScriptCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/ScriptCommand.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DeleteStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DeleteStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DumpStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\FlushStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\KillStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\ListStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\RestoreStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php', - 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\StatsStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php', - 'Predis\\Command\\Strategy\\StrategyResolverInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/StrategyResolverInterface.php', - 'Predis\\Command\\Strategy\\SubcommandStrategyInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/SubcommandStrategyInterface.php', - 'Predis\\Command\\Strategy\\SubcommandStrategyResolver' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/SubcommandStrategyResolver.php', - 'Predis\\Command\\Traits\\Aggregate' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Aggregate.php', - 'Predis\\Command\\Traits\\BitByte' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BitByte.php', - 'Predis\\Command\\Traits\\BloomFilters\\BucketSize' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php', - 'Predis\\Command\\Traits\\BloomFilters\\Capacity' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Capacity.php', - 'Predis\\Command\\Traits\\BloomFilters\\Error' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Error.php', - 'Predis\\Command\\Traits\\BloomFilters\\Expansion' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Expansion.php', - 'Predis\\Command\\Traits\\BloomFilters\\Items' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Items.php', - 'Predis\\Command\\Traits\\BloomFilters\\MaxIterations' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php', - 'Predis\\Command\\Traits\\BloomFilters\\NoCreate' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php', - 'Predis\\Command\\Traits\\By\\ByArgument' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/ByArgument.php', - 'Predis\\Command\\Traits\\By\\ByLexByScore' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/ByLexByScore.php', - 'Predis\\Command\\Traits\\By\\GeoBy' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/GeoBy.php', - 'Predis\\Command\\Traits\\Count' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Count.php', - 'Predis\\Command\\Traits\\DB' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/DB.php', - 'Predis\\Command\\Traits\\Expire\\ExpireOptions' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Expire/ExpireOptions.php', - 'Predis\\Command\\Traits\\From\\GeoFrom' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/From/GeoFrom.php', - 'Predis\\Command\\Traits\\Get\\Get' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Get/Get.php', - 'Predis\\Command\\Traits\\Json\\Indent' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Indent.php', - 'Predis\\Command\\Traits\\Json\\Newline' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Newline.php', - 'Predis\\Command\\Traits\\Json\\NxXxArgument' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/NxXxArgument.php', - 'Predis\\Command\\Traits\\Json\\Space' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Space.php', - 'Predis\\Command\\Traits\\Keys' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Keys.php', - 'Predis\\Command\\Traits\\LeftRight' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/LeftRight.php', - 'Predis\\Command\\Traits\\Limit\\Limit' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Limit/Limit.php', - 'Predis\\Command\\Traits\\Limit\\LimitObject' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Limit/LimitObject.php', - 'Predis\\Command\\Traits\\MinMaxModifier' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/MinMaxModifier.php', - 'Predis\\Command\\Traits\\Replace' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Replace.php', - 'Predis\\Command\\Traits\\Rev' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Rev.php', - 'Predis\\Command\\Traits\\Sorting' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Sorting.php', - 'Predis\\Command\\Traits\\Storedist' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Storedist.php', - 'Predis\\Command\\Traits\\Timeout' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Timeout.php', - 'Predis\\Command\\Traits\\To\\ServerTo' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/To/ServerTo.php', - 'Predis\\Command\\Traits\\Weights' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Weights.php', - 'Predis\\Command\\Traits\\With\\WithCoord' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/With/WithCoord.php', - 'Predis\\Command\\Traits\\With\\WithDist' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/With/WithDist.php', - 'Predis\\Command\\Traits\\With\\WithHash' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/With/WithHash.php', - 'Predis\\Command\\Traits\\With\\WithScores' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/With/WithScores.php', - 'Predis\\Command\\Traits\\With\\WithValues' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/With/WithValues.php', - 'Predis\\CommunicationException' => __DIR__ . '/..' . '/predis/predis/src/CommunicationException.php', - 'Predis\\Configuration\\OptionInterface' => __DIR__ . '/..' . '/predis/predis/src/Configuration/OptionInterface.php', - 'Predis\\Configuration\\Option\\Aggregate' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Aggregate.php', - 'Predis\\Configuration\\Option\\CRC16' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/CRC16.php', - 'Predis\\Configuration\\Option\\Cluster' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Cluster.php', - 'Predis\\Configuration\\Option\\Commands' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Commands.php', - 'Predis\\Configuration\\Option\\Connections' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Connections.php', - 'Predis\\Configuration\\Option\\Exceptions' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Exceptions.php', - 'Predis\\Configuration\\Option\\Prefix' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Prefix.php', - 'Predis\\Configuration\\Option\\Replication' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Option/Replication.php', - 'Predis\\Configuration\\Options' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Options.php', - 'Predis\\Configuration\\OptionsInterface' => __DIR__ . '/..' . '/predis/predis/src/Configuration/OptionsInterface.php', - 'Predis\\Connection\\AbstractConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/AbstractConnection.php', - 'Predis\\Connection\\AggregateConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/AggregateConnectionInterface.php', - 'Predis\\Connection\\Cluster\\ClusterInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/Cluster/ClusterInterface.php', - 'Predis\\Connection\\Cluster\\PredisCluster' => __DIR__ . '/..' . '/predis/predis/src/Connection/Cluster/PredisCluster.php', - 'Predis\\Connection\\Cluster\\RedisCluster' => __DIR__ . '/..' . '/predis/predis/src/Connection/Cluster/RedisCluster.php', - 'Predis\\Connection\\CompositeConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/CompositeConnectionInterface.php', - 'Predis\\Connection\\CompositeStreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/CompositeStreamConnection.php', - 'Predis\\Connection\\ConnectionException' => __DIR__ . '/..' . '/predis/predis/src/Connection/ConnectionException.php', - 'Predis\\Connection\\ConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/ConnectionInterface.php', - 'Predis\\Connection\\Factory' => __DIR__ . '/..' . '/predis/predis/src/Connection/Factory.php', - 'Predis\\Connection\\FactoryInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/FactoryInterface.php', - 'Predis\\Connection\\NodeConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/NodeConnectionInterface.php', - 'Predis\\Connection\\Parameters' => __DIR__ . '/..' . '/predis/predis/src/Connection/Parameters.php', - 'Predis\\Connection\\ParametersInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/ParametersInterface.php', - 'Predis\\Connection\\PhpiredisSocketConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/PhpiredisSocketConnection.php', - 'Predis\\Connection\\PhpiredisStreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/PhpiredisStreamConnection.php', - 'Predis\\Connection\\RelayConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/RelayConnection.php', - 'Predis\\Connection\\RelayMethods' => __DIR__ . '/..' . '/predis/predis/src/Connection/RelayMethods.php', - 'Predis\\Connection\\Replication\\MasterSlaveReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/MasterSlaveReplication.php', - 'Predis\\Connection\\Replication\\ReplicationInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/ReplicationInterface.php', - 'Predis\\Connection\\Replication\\SentinelReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/SentinelReplication.php', - 'Predis\\Connection\\StreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/StreamConnection.php', - 'Predis\\Connection\\WebdisConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/WebdisConnection.php', - 'Predis\\Monitor\\Consumer' => __DIR__ . '/..' . '/predis/predis/src/Monitor/Consumer.php', - 'Predis\\NotSupportedException' => __DIR__ . '/..' . '/predis/predis/src/NotSupportedException.php', - 'Predis\\Pipeline\\Atomic' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/Atomic.php', - 'Predis\\Pipeline\\ConnectionErrorProof' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/ConnectionErrorProof.php', - 'Predis\\Pipeline\\FireAndForget' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/FireAndForget.php', - 'Predis\\Pipeline\\Pipeline' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/Pipeline.php', - 'Predis\\Pipeline\\RelayAtomic' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/RelayAtomic.php', - 'Predis\\Pipeline\\RelayPipeline' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/RelayPipeline.php', - 'Predis\\PredisException' => __DIR__ . '/..' . '/predis/predis/src/PredisException.php', - 'Predis\\Protocol\\ProtocolException' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolException.php', - 'Predis\\Protocol\\ProtocolProcessorInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', - 'Predis\\Protocol\\RequestSerializerInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/RequestSerializerInterface.php', - 'Predis\\Protocol\\ResponseReaderInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ResponseReaderInterface.php', - 'Predis\\Protocol\\Text\\CompositeProtocolProcessor' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php', - 'Predis\\Protocol\\Text\\Handler\\BulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/BulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ErrorResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php', - 'Predis\\Protocol\\Text\\Handler\\IntegerResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php', - 'Predis\\Protocol\\Text\\Handler\\MultiBulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ResponseHandlerInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php', - 'Predis\\Protocol\\Text\\Handler\\StatusResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/StatusResponse.php', - 'Predis\\Protocol\\Text\\Handler\\StreamableMultiBulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php', - 'Predis\\Protocol\\Text\\ProtocolProcessor' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/ProtocolProcessor.php', - 'Predis\\Protocol\\Text\\RequestSerializer' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/RequestSerializer.php', - 'Predis\\Protocol\\Text\\ResponseReader' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/ResponseReader.php', - 'Predis\\PubSub\\AbstractConsumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/AbstractConsumer.php', - 'Predis\\PubSub\\Consumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/Consumer.php', - 'Predis\\PubSub\\DispatcherLoop' => __DIR__ . '/..' . '/predis/predis/src/PubSub/DispatcherLoop.php', - 'Predis\\PubSub\\RelayConsumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/RelayConsumer.php', - 'Predis\\Replication\\MissingMasterException' => __DIR__ . '/..' . '/predis/predis/src/Replication/MissingMasterException.php', - 'Predis\\Replication\\ReplicationStrategy' => __DIR__ . '/..' . '/predis/predis/src/Replication/ReplicationStrategy.php', - 'Predis\\Replication\\RoleException' => __DIR__ . '/..' . '/predis/predis/src/Replication/RoleException.php', - 'Predis\\Response\\Error' => __DIR__ . '/..' . '/predis/predis/src/Response/Error.php', - 'Predis\\Response\\ErrorInterface' => __DIR__ . '/..' . '/predis/predis/src/Response/ErrorInterface.php', - 'Predis\\Response\\Iterator\\MultiBulk' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulk.php', - 'Predis\\Response\\Iterator\\MultiBulkIterator' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulkIterator.php', - 'Predis\\Response\\Iterator\\MultiBulkTuple' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulkTuple.php', - 'Predis\\Response\\ResponseInterface' => __DIR__ . '/..' . '/predis/predis/src/Response/ResponseInterface.php', - 'Predis\\Response\\ServerException' => __DIR__ . '/..' . '/predis/predis/src/Response/ServerException.php', - 'Predis\\Response\\Status' => __DIR__ . '/..' . '/predis/predis/src/Response/Status.php', - 'Predis\\Session\\Handler' => __DIR__ . '/..' . '/predis/predis/src/Session/Handler.php', - 'Predis\\Transaction\\AbortedMultiExecException' => __DIR__ . '/..' . '/predis/predis/src/Transaction/AbortedMultiExecException.php', - 'Predis\\Transaction\\MultiExec' => __DIR__ . '/..' . '/predis/predis/src/Transaction/MultiExec.php', - 'Predis\\Transaction\\MultiExecState' => __DIR__ . '/..' . '/predis/predis/src/Transaction/MultiExecState.php', - 'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php', - 'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php', - 'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php', - 'Psr\\Cache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/cache/src/InvalidArgumentException.php', - 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/EventDispatcherInterface.php', - 'Psr\\EventDispatcher\\ListenerProviderInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/ListenerProviderInterface.php', - 'Psr\\EventDispatcher\\StoppableEventInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/StoppableEventInterface.php', - 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', - 'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php', - 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php', - 'SebastianBergmann\\CliParser\\Exception' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/Exception.php', - 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php', - 'SebastianBergmann\\CliParser\\Parser' => __DIR__ . '/..' . '/sebastian/cli-parser/src/Parser.php', - 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php', - 'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php', - 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', - 'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Selector.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WrongXdebugVersionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2NotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3NotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php', - 'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php', - 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php', - 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/CrapIndex.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php', - 'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php', - 'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php', - 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Cobertura.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', - 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php', - 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Filesystem.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Percentage.php', - 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php', - 'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php', - 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', - 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\ClassUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollection' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnitCollection.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnitCollectionIterator.php', - 'SebastianBergmann\\CodeUnit\\Exception' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/Exception.php', - 'SebastianBergmann\\CodeUnit\\FunctionUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/FunctionUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/InterfaceMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/InterfaceUnit.php', - 'SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php', - 'SebastianBergmann\\CodeUnit\\Mapper' => __DIR__ . '/..' . '/sebastian/code-unit/src/Mapper.php', - 'SebastianBergmann\\CodeUnit\\NoTraitException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/NoTraitException.php', - 'SebastianBergmann\\CodeUnit\\ReflectionException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/ReflectionException.php', - 'SebastianBergmann\\CodeUnit\\TraitMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/TraitMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\TraitUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/TraitUnit.php', - 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', - 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', - 'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php', - 'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php', - 'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php', - 'SebastianBergmann\\Comparator\\DoubleComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DoubleComparator.php', - 'SebastianBergmann\\Comparator\\Exception' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/Exception.php', - 'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php', - 'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php', - 'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php', - 'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php', - 'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php', - 'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php', - 'SebastianBergmann\\Comparator\\RuntimeException' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php', - 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php', - 'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php', - 'SebastianBergmann\\Complexity\\Calculator' => __DIR__ . '/..' . '/sebastian/complexity/src/Calculator.php', - 'SebastianBergmann\\Complexity\\Complexity' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/Complexity.php', - 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\ComplexityCollection' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollection.php', - 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php', - 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\Exception' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/Exception.php', - 'SebastianBergmann\\Complexity\\RuntimeException' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/RuntimeException.php', - 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', - 'SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', - 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', - 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', - 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', - 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', - 'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php', - 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', - 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', - 'SebastianBergmann\\FileIterator\\Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', - 'SebastianBergmann\\FileIterator\\Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', - 'SebastianBergmann\\FileIterator\\Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', - 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php', - 'SebastianBergmann\\GlobalState\\ExcludeList' => __DIR__ . '/..' . '/sebastian/global-state/src/ExcludeList.php', - 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', - 'SebastianBergmann\\Invoker\\Exception' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/Exception.php', - 'SebastianBergmann\\Invoker\\Invoker' => __DIR__ . '/..' . '/phpunit/php-invoker/src/Invoker.php', - 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php', - 'SebastianBergmann\\Invoker\\TimeoutException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/TimeoutException.php', - 'SebastianBergmann\\LinesOfCode\\Counter' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Counter.php', - 'SebastianBergmann\\LinesOfCode\\Exception' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/Exception.php', - 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php', - 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LineCountingVisitor.php', - 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LinesOfCode.php', - 'SebastianBergmann\\LinesOfCode\\NegativeValueException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/NegativeValueException.php', - 'SebastianBergmann\\LinesOfCode\\RuntimeException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/RuntimeException.php', - 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', - 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', - 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php', - 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php', - 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', - 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', - 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', - 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', - 'SebastianBergmann\\Template\\Exception' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/Exception.php', - 'SebastianBergmann\\Template\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php', - 'SebastianBergmann\\Template\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Template\\Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', - 'SebastianBergmann\\Timer\\Duration' => __DIR__ . '/..' . '/phpunit/php-timer/src/Duration.php', - 'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/Exception.php', - 'SebastianBergmann\\Timer\\NoActiveTimerException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php', - 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => __DIR__ . '/..' . '/phpunit/php-timer/src/ResourceUsageFormatter.php', - 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', - 'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/type/CallableType.php', - 'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php', - 'SebastianBergmann\\Type\\FalseType' => __DIR__ . '/..' . '/sebastian/type/src/type/FalseType.php', - 'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/GenericObjectType.php', - 'SebastianBergmann\\Type\\IntersectionType' => __DIR__ . '/..' . '/sebastian/type/src/type/IntersectionType.php', - 'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/type/IterableType.php', - 'SebastianBergmann\\Type\\MixedType' => __DIR__ . '/..' . '/sebastian/type/src/type/MixedType.php', - 'SebastianBergmann\\Type\\NeverType' => __DIR__ . '/..' . '/sebastian/type/src/type/NeverType.php', - 'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/type/NullType.php', - 'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/ObjectType.php', - 'SebastianBergmann\\Type\\Parameter' => __DIR__ . '/..' . '/sebastian/type/src/Parameter.php', - 'SebastianBergmann\\Type\\ReflectionMapper' => __DIR__ . '/..' . '/sebastian/type/src/ReflectionMapper.php', - 'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php', - 'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/type/SimpleType.php', - 'SebastianBergmann\\Type\\StaticType' => __DIR__ . '/..' . '/sebastian/type/src/type/StaticType.php', - 'SebastianBergmann\\Type\\TrueType' => __DIR__ . '/..' . '/sebastian/type/src/type/TrueType.php', - 'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/type/Type.php', - 'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php', - 'SebastianBergmann\\Type\\UnionType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnionType.php', - 'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnknownType.php', - 'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/type/VoidType.php', - 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', - 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', - 'Symfony\\Component\\Console\\Attribute\\AsCommand' => __DIR__ . '/..' . '/symfony/console/Attribute/AsCommand.php', - 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => __DIR__ . '/..' . '/symfony/console/CI/GithubActionReporter.php', - 'Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', - 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', - 'Symfony\\Component\\Console\\Command\\CompleteCommand' => __DIR__ . '/..' . '/symfony/console/Command/CompleteCommand.php', - 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => __DIR__ . '/..' . '/symfony/console/Command/DumpCompletionCommand.php', - 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', - 'Symfony\\Component\\Console\\Command\\LazyCommand' => __DIR__ . '/..' . '/symfony/console/Command/LazyCommand.php', - 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', - 'Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', - 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', - 'Symfony\\Component\\Console\\Completion\\CompletionInput' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionInput.php', - 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionSuggestions.php', - 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/BashCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => __DIR__ . '/..' . '/symfony/console/Completion/Output/CompletionOutputInterface.php', - 'Symfony\\Component\\Console\\Completion\\Output\\FishCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/FishCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Output\\ZshCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/ZshCompletionOutput.php', - 'Symfony\\Component\\Console\\Completion\\Suggestion' => __DIR__ . '/..' . '/symfony/console/Completion/Suggestion.php', - 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', - 'Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', - 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', - 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', - 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', - 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/console/EventListener/ErrorListener.php', - 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleErrorEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleSignalEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', - 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', - 'Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', - 'Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', - 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', - 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'Symfony\\Component\\Console\\Formatter\\WrappableOutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/WrappableOutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', - 'Symfony\\Component\\Console\\Helper\\Dumper' => __DIR__ . '/..' . '/symfony/console/Helper/Dumper.php', - 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', - 'Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', - 'Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', - 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', - 'Symfony\\Component\\Console\\Helper\\OutputWrapper' => __DIR__ . '/..' . '/symfony/console/Helper/OutputWrapper.php', - 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', - 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', - 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', - 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', - 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', - 'Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', - 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', - 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', - 'Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', - 'Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', - 'Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', - 'Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', - 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', - 'Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', - 'Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', - 'Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', - 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => __DIR__ . '/..' . '/symfony/console/Input/StreamableInputInterface.php', - 'Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', - 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', - 'Symfony\\Component\\Console\\Output\\AnsiColorMode' => __DIR__ . '/..' . '/symfony/console/Output/AnsiColorMode.php', - 'Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', - 'Symfony\\Component\\Console\\Output\\ConsoleSectionOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleSectionOutput.php', - 'Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', - 'Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', - 'Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', - 'Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', - 'Symfony\\Component\\Console\\Output\\TrimmedBufferOutput' => __DIR__ . '/..' . '/symfony/console/Output/TrimmedBufferOutput.php', - 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', - 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', - 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', - 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', - 'Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', - 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', - 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', - 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', - 'Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', - 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => __DIR__ . '/..' . '/symfony/console/Tester/ApplicationTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandCompletionTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandTester.php', - 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => __DIR__ . '/..' . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', - 'Symfony\\Component\\Console\\Tester\\TesterTrait' => __DIR__ . '/..' . '/symfony/console/Tester/TesterTrait.php', - 'Symfony\\Component\\EventDispatcher\\Attribute\\AsEventListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Attribute/AsEventListener.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/WrappedListener.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcherInterface.php', - 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventSubscriberInterface.php', - 'Symfony\\Component\\EventDispatcher\\GenericEvent' => __DIR__ . '/..' . '/symfony/event-dispatcher/GenericEvent.php', - 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', - 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', - 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php', - 'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Filesystem\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/RuntimeException.php', - 'Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php', - 'Symfony\\Component\\Filesystem\\Path' => __DIR__ . '/..' . '/symfony/filesystem/Path.php', - 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', - 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', - 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', - 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', - 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php', - 'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', - 'Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php', - 'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', - 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/LazyIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', - 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', - 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', - 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoConfigurationException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\OptionConfigurator' => __DIR__ . '/..' . '/symfony/options-resolver/OptionConfigurator.php', - 'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php', - 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php', - 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessFailedException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessSignaledException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessSignaledException.php', - 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => __DIR__ . '/..' . '/symfony/process/Exception/ProcessTimedOutException.php', - 'Symfony\\Component\\Process\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/process/Exception/RuntimeException.php', - 'Symfony\\Component\\Process\\ExecutableFinder' => __DIR__ . '/..' . '/symfony/process/ExecutableFinder.php', - 'Symfony\\Component\\Process\\InputStream' => __DIR__ . '/..' . '/symfony/process/InputStream.php', - 'Symfony\\Component\\Process\\PhpExecutableFinder' => __DIR__ . '/..' . '/symfony/process/PhpExecutableFinder.php', - 'Symfony\\Component\\Process\\PhpProcess' => __DIR__ . '/..' . '/symfony/process/PhpProcess.php', - 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/AbstractPipes.php', - 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => __DIR__ . '/..' . '/symfony/process/Pipes/PipesInterface.php', - 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/UnixPipes.php', - 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => __DIR__ . '/..' . '/symfony/process/Pipes/WindowsPipes.php', - 'Symfony\\Component\\Process\\Process' => __DIR__ . '/..' . '/symfony/process/Process.php', - 'Symfony\\Component\\Process\\ProcessUtils' => __DIR__ . '/..' . '/symfony/process/ProcessUtils.php', - 'Symfony\\Component\\Stopwatch\\Section' => __DIR__ . '/..' . '/symfony/stopwatch/Section.php', - 'Symfony\\Component\\Stopwatch\\Stopwatch' => __DIR__ . '/..' . '/symfony/stopwatch/Stopwatch.php', - 'Symfony\\Component\\Stopwatch\\StopwatchEvent' => __DIR__ . '/..' . '/symfony/stopwatch/StopwatchEvent.php', - 'Symfony\\Component\\Stopwatch\\StopwatchPeriod' => __DIR__ . '/..' . '/symfony/stopwatch/StopwatchPeriod.php', - 'Symfony\\Component\\String\\AbstractString' => __DIR__ . '/..' . '/symfony/string/AbstractString.php', - 'Symfony\\Component\\String\\AbstractUnicodeString' => __DIR__ . '/..' . '/symfony/string/AbstractUnicodeString.php', - 'Symfony\\Component\\String\\ByteString' => __DIR__ . '/..' . '/symfony/string/ByteString.php', - 'Symfony\\Component\\String\\CodePointString' => __DIR__ . '/..' . '/symfony/string/CodePointString.php', - 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/string/Exception/ExceptionInterface.php', - 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/string/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\String\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/string/Exception/RuntimeException.php', - 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/EnglishInflector.php', - 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/FrenchInflector.php', - 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => __DIR__ . '/..' . '/symfony/string/Inflector/InflectorInterface.php', - 'Symfony\\Component\\String\\LazyString' => __DIR__ . '/..' . '/symfony/string/LazyString.php', - 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => __DIR__ . '/..' . '/symfony/string/Slugger/AsciiSlugger.php', - 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => __DIR__ . '/..' . '/symfony/string/Slugger/SluggerInterface.php', - 'Symfony\\Component\\String\\UnicodeString' => __DIR__ . '/..' . '/symfony/string/UnicodeString.php', - 'Symfony\\Contracts\\EventDispatcher\\Event' => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts/Event.php', - 'Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts/EventDispatcherInterface.php', - 'Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', - 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', - 'Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', - 'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php', - 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', - 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', - 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.php', - 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', - 'Symfony\\Polyfill\\Php81\\Php81' => __DIR__ . '/..' . '/symfony/polyfill-php81/Php81.php', - 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', - 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php', - 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php', - 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php', - 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php', - 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php', - 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php', - 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php', - 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', - 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', - 'org\\bovigo\\vfs\\DotDirectory' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/DotDirectory.php', - 'org\\bovigo\\vfs\\Quota' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/Quota.php', - 'org\\bovigo\\vfs\\content\\FileContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/FileContent.php', - 'org\\bovigo\\vfs\\content\\LargeFileContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php', - 'org\\bovigo\\vfs\\content\\SeekableFileContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php', - 'org\\bovigo\\vfs\\content\\StringBasedFileContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/content/StringBasedFileContent.php', - 'org\\bovigo\\vfs\\vfsStream' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php', - 'org\\bovigo\\vfs\\vfsStreamAbstractContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamAbstractContent.php', - 'org\\bovigo\\vfs\\vfsStreamBlock' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamBlock.php', - 'org\\bovigo\\vfs\\vfsStreamContainer' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainer.php', - 'org\\bovigo\\vfs\\vfsStreamContainerIterator' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContainerIterator.php', - 'org\\bovigo\\vfs\\vfsStreamContent' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamContent.php', - 'org\\bovigo\\vfs\\vfsStreamDirectory' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamDirectory.php', - 'org\\bovigo\\vfs\\vfsStreamException' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamException.php', - 'org\\bovigo\\vfs\\vfsStreamFile' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamFile.php', - 'org\\bovigo\\vfs\\vfsStreamWrapper' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStreamWrapper.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamAbstractVisitor' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamAbstractVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamPrintVisitor' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamStructureVisitor' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamStructureVisitor.php', - 'org\\bovigo\\vfs\\visitor\\vfsStreamVisitor' => __DIR__ . '/..' . '/mikey179/vfsstream/src/main/php/org/bovigo/vfs/visitor/vfsStreamVisitor.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::$prefixesPsr0; - $loader->classMap = ComposerStaticInit01bb8cdaddb35dba667c1b3b51c53f89::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/old_vendor/composer/installed.json b/old_vendor/composer/installed.json deleted file mode 100644 index 07e55a33..00000000 --- a/old_vendor/composer/installed.json +++ /dev/null @@ -1,4416 +0,0 @@ -{ - "packages": [ - { - "name": "codeigniter/coding-standard", - "version": "v1.7.1", - "version_normalized": "1.7.1.0", - "source": { - "type": "git", - "url": "https://github.com/CodeIgniter/coding-standard.git", - "reference": "9b3a18ebd635e05717e984d40cc2f888afa52683" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CodeIgniter/coding-standard/zipball/9b3a18ebd635e05717e984d40cc2f888afa52683", - "reference": "9b3a18ebd635e05717e984d40cc2f888afa52683", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "3.13.0", - "nexusphp/cs-config": "^3.6", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "nexusphp/tachycardia": "^1.3", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "time": "2022-12-22T02:29:54+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "CodeIgniter\\CodingStandard\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Paul E. Balandan, CPA", - "email": "paulbalandan@gmail.com" - } - ], - "description": "Official Coding Standards for CodeIgniter based on PHP CS Fixer", - "keywords": [ - "phpcs", - "static analysis" - ], - "support": { - "forum": "http://forum.codeigniter.com/", - "issues": "https://github.com/CodeIgniter/coding-standard/issues", - "slack": "https://codeigniterchat.slack.com", - "source": "https://github.com/CodeIgniter/coding-standard" - }, - "install-path": "../codeigniter/coding-standard" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "version_normalized": "3.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "time": "2022-11-17T09:50:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "install-path": "./pcre" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "version_normalized": "3.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "time": "2022-04-01T19:23:25+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "install-path": "./semver" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "time": "2022-02-25T21:32:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "install-path": "./xdebug-handler" - }, - { - "name": "doctrine/annotations", - "version": "1.14.3", - "version_normalized": "1.14.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "time": "2023-02-01T09:20:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" - }, - "install-path": "../doctrine/annotations" - }, - { - "name": "doctrine/deprecations", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "time": "2023-06-03T09:27:29+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" - }, - "install-path": "../doctrine/deprecations" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "time": "2022-12-30T00:23:10+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "install-path": "../doctrine/instantiator" - }, - { - "name": "doctrine/lexer", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "time": "2022-12-14T08:49:07+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "install-path": "../doctrine/lexer" - }, - { - "name": "fakerphp/faker", - "version": "v1.23.0", - "version_normalized": "1.23.0.0", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "time": "2023-06-12T08:44:38+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" - }, - "install-path": "../fakerphp/faker" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.13.0", - "version_normalized": "3.13.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a6232229a8309e8811dc751c28b91cb34b2943e1", - "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1", - "shasum": "" - }, - "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "time": "2022-10-31T19:28:50+00:00", - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.0" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "install-path": "../friendsofphp/php-cs-fixer" - }, - { - "name": "kint-php/kint", - "version": "5.0.7", - "version_normalized": "5.0.7.0", - "source": { - "type": "git", - "url": "https://github.com/kint-php/kint.git", - "reference": "a700653a77250b122920799b10c94e904c9b78c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kint-php/kint/zipball/a700653a77250b122920799b10c94e904c9b78c7", - "reference": "a700653a77250b122920799b10c94e904c9b78c7", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3", - "phpspec/prophecy-phpunit": "^2", - "phpunit/phpunit": "^9", - "seld/phar-utils": "^1", - "symfony/finder": "^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "^5@dev" - }, - "suggest": { - "kint-php/kint-helpers": "Provides extra helper functions", - "kint-php/kint-twig": "Provides d() and s() functions in twig templates" - }, - "time": "2023-06-26T19:25:00+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "init.php" - ], - "psr-4": { - "Kint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Vollebregt", - "homepage": "https://github.com/jnvsor" - }, - { - "name": "Contributors", - "homepage": "https://github.com/kint-php/kint/graphs/contributors" - } - ], - "description": "Kint - debugging tool for PHP developers", - "homepage": "https://kint-php.github.io/kint/", - "keywords": [ - "debug", - "kint", - "php" - ], - "support": { - "issues": "https://github.com/kint-php/kint/issues", - "source": "https://github.com/kint-php/kint/tree/5.0.7" - }, - "install-path": "../kint-php/kint" - }, - { - "name": "laminas/laminas-escaper", - "version": "2.12.0", - "version_normalized": "2.12.0.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", - "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.4.0", - "maglnet/composer-require-checker": "^3.8.0", - "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.22.0" - }, - "time": "2022-10-10T10:11:09+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "install-path": "../laminas/laminas-escaper" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.11", - "version_normalized": "1.6.11.0", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "time": "2022-02-23T02:02:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "install-path": "../mikey179/vfsstream" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "version_normalized": "1.11.1.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "time": "2023-03-08T13:26:56+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "install-path": "../myclabs/deep-copy" - }, - { - "name": "nexusphp/cs-config", - "version": "v3.8.0", - "version_normalized": "3.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/NexusPHP/cs-config.git", - "reference": "8ef2d10694d0dfadb1fc028c9b5de07c8e852092" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/NexusPHP/cs-config/zipball/8ef2d10694d0dfadb1fc028c9b5de07c8e852092", - "reference": "8ef2d10694d0dfadb1fc028c9b5de07c8e852092", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "^3.13", - "php": "^7.4 || ^8.0" - }, - "conflict": { - "liaison/cs-config": "*" - }, - "require-dev": { - "nexusphp/tachycardia": "^1.3", - "phpstan/phpstan": "^1.8", - "phpunit/phpunit": "^9.5" - }, - "time": "2022-11-01T15:20:57+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Nexus\\CsConfig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Paul E. Balandan, CPA", - "email": "paulbalandan@gmail.com" - } - ], - "description": "A factory for custom rulesets for PHP CS Fixer.", - "support": { - "issues": "https://github.com/NexusPHP/cs-config/issues", - "slack": "https://nexusphp.slack.com", - "source": "https://github.com/NexusPHP/cs-config.git" - }, - "funding": [ - { - "url": "https://www.paypal.me/paulbalandan", - "type": "custom" - }, - { - "url": "https://github.com/paulbalandan", - "type": "github" - } - ], - "install-path": "../nexusphp/cs-config" - }, - { - "name": "nikic/php-parser", - "version": "v4.17.1", - "version_normalized": "4.17.1.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2023-08-13T19:53:39+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" - }, - "install-path": "../nikic/php-parser" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "version_normalized": "2.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "time": "2021-07-20T11:28:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "install-path": "../phar-io/manifest" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "time": "2022-02-21T01:04:05+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "install-path": "../phar-io/version" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.27", - "version_normalized": "9.2.27.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1", - "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "time": "2023-07-26T13:44:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-code-coverage" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "version_normalized": "3.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2021-12-02T12:48:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-file-iterator" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "time": "2020-09-28T05:58:55+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-invoker" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T05:33:50+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-text-template" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "version_normalized": "5.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:16:10+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-timer" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.10", - "version_normalized": "9.6.10.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", - "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "time": "2023-07-10T04:04:23+00:00", - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "install-path": "../phpunit/phpunit" - }, - { - "name": "predis/predis", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/5f2b410a74afaff296a87a494e4c5488cf9fab57", - "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" - }, - "time": "2023-08-15T23:01:46+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "support": { - "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "install-path": "../predis/predis" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-02-03T23:26:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "install-path": "../psr/cache" - }, - { - "name": "psr/container", - "version": "2.0.2", - "version_normalized": "2.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "time": "2021-11-05T16:47:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "install-path": "../psr/container" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "time": "2019-01-08T18:20:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "install-path": "../psr/event-dispatcher" - }, - { - "name": "psr/log", - "version": "1.1.4", - "version_normalized": "1.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2021-05-03T11:20:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "install-path": "../psr/log" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-09-28T06:08:49+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/cli-parser" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "version_normalized": "1.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:08:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/code-unit" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "version_normalized": "2.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-09-28T05:30:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/code-unit-reverse-lookup" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "version_normalized": "4.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2022-09-14T12:41:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/comparator" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "version_normalized": "2.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T15:52:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/complexity" - }, - { - "name": "sebastian/diff", - "version": "4.0.5", - "version_normalized": "4.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "time": "2023-05-07T05:35:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/diff" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "version_normalized": "5.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "time": "2023-02-03T06:03:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/environment" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "version_normalized": "4.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "time": "2022-09-14T06:03:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/exporter" - }, - { - "name": "sebastian/global-state", - "version": "5.0.6", - "version_normalized": "5.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "time": "2023-08-02T09:26:13+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/global-state" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-11-28T06:42:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/lines-of-code" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "version_normalized": "4.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:12:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/object-enumerator" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:14:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/object-reflector" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "version_normalized": "4.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2023-02-03T06:07:39+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/recursion-context" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "time": "2020-09-28T06:45:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/resource-operations" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "time": "2023-02-03T06:13:03+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/type" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "version_normalized": "3.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "time": "2020-09-28T06:39:44+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/version" - }, - { - "name": "symfony/console", - "version": "v6.3.2", - "version_normalized": "6.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/aa5d64ad3f63f2e48964fc81ee45cb318a723898", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "time": "2023-07-19T20:17:28+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/console" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.3.0", - "version_normalized": "3.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "time": "2023-05-23T14:45:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/deprecation-contracts" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.3.2", - "version_normalized": "6.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "time": "2023-07-06T06:56:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/event-dispatcher" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", - "version_normalized": "3.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "time": "2023-05-23T14:45:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/event-dispatcher-contracts" - }, - { - "name": "symfony/filesystem", - "version": "v6.3.1", - "version_normalized": "6.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "time": "2023-06-01T08:30:39+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/filesystem" - }, - { - "name": "symfony/finder", - "version": "v6.3.3", - "version_normalized": "6.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "time": "2023-07-31T08:31:44+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/finder" - }, - { - "name": "symfony/options-resolver", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "time": "2023-05-12T14:21:09+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/options-resolver" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-ctype" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-grapheme" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-normalizer" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-mbstring" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-php80" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2022-11-03T14:55:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-php81" - }, - { - "name": "symfony/process", - "version": "v6.3.2", - "version_normalized": "6.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "time": "2023-07-12T16:00:22+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/process" - }, - { - "name": "symfony/service-contracts", - "version": "v3.3.0", - "version_normalized": "3.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "time": "2023-05-23T14:45:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/service-contracts" - }, - { - "name": "symfony/stopwatch", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/service-contracts": "^2.5|^3" - }, - "time": "2023-02-16T10:14:28+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/stopwatch" - }, - { - "name": "symfony/string", - "version": "v6.3.2", - "version_normalized": "6.3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "53d1a83225002635bca3482fcbf963001313fb68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", - "reference": "53d1a83225002635bca3482fcbf963001313fb68", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "time": "2023-07-05T08:41:27+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/string" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "time": "2021-07-28T10:34:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "install-path": "../theseer/tokenizer" - } - ], - "dev": true, - "dev-package-names": [ - "codeigniter/coding-standard", - "composer/pcre", - "composer/semver", - "composer/xdebug-handler", - "doctrine/annotations", - "doctrine/deprecations", - "doctrine/instantiator", - "doctrine/lexer", - "fakerphp/faker", - "friendsofphp/php-cs-fixer", - "kint-php/kint", - "mikey179/vfsstream", - "myclabs/deep-copy", - "nexusphp/cs-config", - "nikic/php-parser", - "phar-io/manifest", - "phar-io/version", - "phpunit/php-code-coverage", - "phpunit/php-file-iterator", - "phpunit/php-invoker", - "phpunit/php-text-template", - "phpunit/php-timer", - "phpunit/phpunit", - "predis/predis", - "psr/cache", - "psr/container", - "psr/event-dispatcher", - "sebastian/cli-parser", - "sebastian/code-unit", - "sebastian/code-unit-reverse-lookup", - "sebastian/comparator", - "sebastian/complexity", - "sebastian/diff", - "sebastian/environment", - "sebastian/exporter", - "sebastian/global-state", - "sebastian/lines-of-code", - "sebastian/object-enumerator", - "sebastian/object-reflector", - "sebastian/recursion-context", - "sebastian/resource-operations", - "sebastian/type", - "sebastian/version", - "symfony/console", - "symfony/deprecation-contracts", - "symfony/event-dispatcher", - "symfony/event-dispatcher-contracts", - "symfony/filesystem", - "symfony/finder", - "symfony/options-resolver", - "symfony/polyfill-ctype", - "symfony/polyfill-intl-grapheme", - "symfony/polyfill-intl-normalizer", - "symfony/polyfill-mbstring", - "symfony/polyfill-php80", - "symfony/polyfill-php81", - "symfony/process", - "symfony/service-contracts", - "symfony/stopwatch", - "symfony/string", - "theseer/tokenizer" - ] -} diff --git a/old_vendor/composer/installed.php b/old_vendor/composer/installed.php deleted file mode 100644 index f779ebab..00000000 --- a/old_vendor/composer/installed.php +++ /dev/null @@ -1,608 +0,0 @@ - array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'type' => 'project', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'name' => 'codeigniter4/framework', - 'dev' => true, - ), - 'versions' => array( - 'codeigniter/coding-standard' => array( - 'pretty_version' => 'v1.7.1', - 'version' => '1.7.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../codeigniter/coding-standard', - 'aliases' => array(), - 'reference' => '9b3a18ebd635e05717e984d40cc2f888afa52683', - 'dev_requirement' => true, - ), - 'codeigniter4/framework' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'type' => 'project', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'dev_requirement' => false, - ), - 'composer/pcre' => array( - 'pretty_version' => '3.1.0', - 'version' => '3.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/./pcre', - 'aliases' => array(), - 'reference' => '4bff79ddd77851fe3cdd11616ed3f92841ba5bd2', - 'dev_requirement' => true, - ), - 'composer/semver' => array( - 'pretty_version' => '3.3.2', - 'version' => '3.3.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/./semver', - 'aliases' => array(), - 'reference' => '3953f23262f2bff1919fc82183ad9acb13ff62c9', - 'dev_requirement' => true, - ), - 'composer/xdebug-handler' => array( - 'pretty_version' => '3.0.3', - 'version' => '3.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/./xdebug-handler', - 'aliases' => array(), - 'reference' => 'ced299686f41dce890debac69273b47ffe98a40c', - 'dev_requirement' => true, - ), - 'doctrine/annotations' => array( - 'pretty_version' => '1.14.3', - 'version' => '1.14.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/annotations', - 'aliases' => array(), - 'reference' => 'fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af', - 'dev_requirement' => true, - ), - 'doctrine/deprecations' => array( - 'pretty_version' => 'v1.1.1', - 'version' => '1.1.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/deprecations', - 'aliases' => array(), - 'reference' => '612a3ee5ab0d5dd97b7cf3874a6efe24325efac3', - 'dev_requirement' => true, - ), - 'doctrine/instantiator' => array( - 'pretty_version' => '2.0.0', - 'version' => '2.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/instantiator', - 'aliases' => array(), - 'reference' => 'c6222283fa3f4ac679f8b9ced9a4e23f163e80d0', - 'dev_requirement' => true, - ), - 'doctrine/lexer' => array( - 'pretty_version' => '2.1.0', - 'version' => '2.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/lexer', - 'aliases' => array(), - 'reference' => '39ab8fcf5a51ce4b85ca97c7a7d033eb12831124', - 'dev_requirement' => true, - ), - 'fakerphp/faker' => array( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../fakerphp/faker', - 'aliases' => array(), - 'reference' => 'e3daa170d00fde61ea7719ef47bb09bb8f1d9b01', - 'dev_requirement' => true, - ), - 'friendsofphp/php-cs-fixer' => array( - 'pretty_version' => 'v3.13.0', - 'version' => '3.13.0.0', - 'type' => 'application', - 'install_path' => __DIR__ . '/../friendsofphp/php-cs-fixer', - 'aliases' => array(), - 'reference' => 'a6232229a8309e8811dc751c28b91cb34b2943e1', - 'dev_requirement' => true, - ), - 'kint-php/kint' => array( - 'pretty_version' => '5.0.7', - 'version' => '5.0.7.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../kint-php/kint', - 'aliases' => array(), - 'reference' => 'a700653a77250b122920799b10c94e904c9b78c7', - 'dev_requirement' => true, - ), - 'laminas/laminas-escaper' => array( - 'pretty_version' => '2.12.0', - 'version' => '2.12.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../laminas/laminas-escaper', - 'aliases' => array(), - 'reference' => 'ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490', - 'dev_requirement' => false, - ), - 'mikey179/vfsstream' => array( - 'pretty_version' => 'v1.6.11', - 'version' => '1.6.11.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../mikey179/vfsstream', - 'aliases' => array(), - 'reference' => '17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f', - 'dev_requirement' => true, - ), - 'myclabs/deep-copy' => array( - 'pretty_version' => '1.11.1', - 'version' => '1.11.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../myclabs/deep-copy', - 'aliases' => array(), - 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c', - 'dev_requirement' => true, - ), - 'nexusphp/cs-config' => array( - 'pretty_version' => 'v3.8.0', - 'version' => '3.8.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../nexusphp/cs-config', - 'aliases' => array(), - 'reference' => '8ef2d10694d0dfadb1fc028c9b5de07c8e852092', - 'dev_requirement' => true, - ), - 'nikic/php-parser' => array( - 'pretty_version' => 'v4.17.1', - 'version' => '4.17.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../nikic/php-parser', - 'aliases' => array(), - 'reference' => 'a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d', - 'dev_requirement' => true, - ), - 'phar-io/manifest' => array( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phar-io/manifest', - 'aliases' => array(), - 'reference' => '97803eca37d319dfa7826cc2437fc020857acb53', - 'dev_requirement' => true, - ), - 'phar-io/version' => array( - 'pretty_version' => '3.2.1', - 'version' => '3.2.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phar-io/version', - 'aliases' => array(), - 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74', - 'dev_requirement' => true, - ), - 'phpunit/php-code-coverage' => array( - 'pretty_version' => '9.2.27', - 'version' => '9.2.27.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', - 'aliases' => array(), - 'reference' => 'b0a88255cb70d52653d80c890bd7f38740ea50d1', - 'dev_requirement' => true, - ), - 'phpunit/php-file-iterator' => array( - 'pretty_version' => '3.0.6', - 'version' => '3.0.6.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-file-iterator', - 'aliases' => array(), - 'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf', - 'dev_requirement' => true, - ), - 'phpunit/php-invoker' => array( - 'pretty_version' => '3.1.1', - 'version' => '3.1.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-invoker', - 'aliases' => array(), - 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67', - 'dev_requirement' => true, - ), - 'phpunit/php-text-template' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-text-template', - 'aliases' => array(), - 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28', - 'dev_requirement' => true, - ), - 'phpunit/php-timer' => array( - 'pretty_version' => '5.0.3', - 'version' => '5.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-timer', - 'aliases' => array(), - 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2', - 'dev_requirement' => true, - ), - 'phpunit/phpunit' => array( - 'pretty_version' => '9.6.10', - 'version' => '9.6.10.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/phpunit', - 'aliases' => array(), - 'reference' => 'a6d351645c3fe5a30f5e86be6577d946af65a328', - 'dev_requirement' => true, - ), - 'predis/predis' => array( - 'pretty_version' => 'v2.2.1', - 'version' => '2.2.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../predis/predis', - 'aliases' => array(), - 'reference' => '5f2b410a74afaff296a87a494e4c5488cf9fab57', - 'dev_requirement' => true, - ), - 'psr/cache' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/cache', - 'aliases' => array(), - 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', - 'dev_requirement' => true, - ), - 'psr/container' => array( - 'pretty_version' => '2.0.2', - 'version' => '2.0.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/container', - 'aliases' => array(), - 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', - 'dev_requirement' => true, - ), - 'psr/event-dispatcher' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/event-dispatcher', - 'aliases' => array(), - 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', - 'dev_requirement' => true, - ), - 'psr/event-dispatcher-implementation' => array( - 'dev_requirement' => true, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/log' => array( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/log', - 'aliases' => array(), - 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', - 'dev_requirement' => false, - ), - 'psr/log-implementation' => array( - 'dev_requirement' => true, - 'provided' => array( - 0 => '1.0|2.0|3.0', - ), - ), - 'sebastian/cli-parser' => array( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/cli-parser', - 'aliases' => array(), - 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2', - 'dev_requirement' => true, - ), - 'sebastian/code-unit' => array( - 'pretty_version' => '1.0.8', - 'version' => '1.0.8.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/code-unit', - 'aliases' => array(), - 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120', - 'dev_requirement' => true, - ), - 'sebastian/code-unit-reverse-lookup' => array( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup', - 'aliases' => array(), - 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5', - 'dev_requirement' => true, - ), - 'sebastian/comparator' => array( - 'pretty_version' => '4.0.8', - 'version' => '4.0.8.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/comparator', - 'aliases' => array(), - 'reference' => 'fa0f136dd2334583309d32b62544682ee972b51a', - 'dev_requirement' => true, - ), - 'sebastian/complexity' => array( - 'pretty_version' => '2.0.2', - 'version' => '2.0.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/complexity', - 'aliases' => array(), - 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88', - 'dev_requirement' => true, - ), - 'sebastian/diff' => array( - 'pretty_version' => '4.0.5', - 'version' => '4.0.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/diff', - 'aliases' => array(), - 'reference' => '74be17022044ebaaecfdf0c5cd504fc9cd5a7131', - 'dev_requirement' => true, - ), - 'sebastian/environment' => array( - 'pretty_version' => '5.1.5', - 'version' => '5.1.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/environment', - 'aliases' => array(), - 'reference' => '830c43a844f1f8d5b7a1f6d6076b784454d8b7ed', - 'dev_requirement' => true, - ), - 'sebastian/exporter' => array( - 'pretty_version' => '4.0.5', - 'version' => '4.0.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/exporter', - 'aliases' => array(), - 'reference' => 'ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d', - 'dev_requirement' => true, - ), - 'sebastian/global-state' => array( - 'pretty_version' => '5.0.6', - 'version' => '5.0.6.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/global-state', - 'aliases' => array(), - 'reference' => 'bde739e7565280bda77be70044ac1047bc007e34', - 'dev_requirement' => true, - ), - 'sebastian/lines-of-code' => array( - 'pretty_version' => '1.0.3', - 'version' => '1.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/lines-of-code', - 'aliases' => array(), - 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc', - 'dev_requirement' => true, - ), - 'sebastian/object-enumerator' => array( - 'pretty_version' => '4.0.4', - 'version' => '4.0.4.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/object-enumerator', - 'aliases' => array(), - 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71', - 'dev_requirement' => true, - ), - 'sebastian/object-reflector' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/object-reflector', - 'aliases' => array(), - 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7', - 'dev_requirement' => true, - ), - 'sebastian/recursion-context' => array( - 'pretty_version' => '4.0.5', - 'version' => '4.0.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/recursion-context', - 'aliases' => array(), - 'reference' => 'e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1', - 'dev_requirement' => true, - ), - 'sebastian/resource-operations' => array( - 'pretty_version' => '3.0.3', - 'version' => '3.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/resource-operations', - 'aliases' => array(), - 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8', - 'dev_requirement' => true, - ), - 'sebastian/type' => array( - 'pretty_version' => '3.2.1', - 'version' => '3.2.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/type', - 'aliases' => array(), - 'reference' => '75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7', - 'dev_requirement' => true, - ), - 'sebastian/version' => array( - 'pretty_version' => '3.0.2', - 'version' => '3.0.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/version', - 'aliases' => array(), - 'reference' => 'c6c1022351a901512170118436c764e473f6de8c', - 'dev_requirement' => true, - ), - 'symfony/console' => array( - 'pretty_version' => 'v6.3.2', - 'version' => '6.3.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/console', - 'aliases' => array(), - 'reference' => 'aa5d64ad3f63f2e48964fc81ee45cb318a723898', - 'dev_requirement' => true, - ), - 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.3.0', - 'version' => '3.3.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', - 'aliases' => array(), - 'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', - 'dev_requirement' => true, - ), - 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v6.3.2', - 'version' => '6.3.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/event-dispatcher', - 'aliases' => array(), - 'reference' => 'adb01fe097a4ee930db9258a3cc906b5beb5cf2e', - 'dev_requirement' => true, - ), - 'symfony/event-dispatcher-contracts' => array( - 'pretty_version' => 'v3.3.0', - 'version' => '3.3.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', - 'aliases' => array(), - 'reference' => 'a76aed96a42d2b521153fb382d418e30d18b59df', - 'dev_requirement' => true, - ), - 'symfony/event-dispatcher-implementation' => array( - 'dev_requirement' => true, - 'provided' => array( - 0 => '2.0|3.0', - ), - ), - 'symfony/filesystem' => array( - 'pretty_version' => 'v6.3.1', - 'version' => '6.3.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/filesystem', - 'aliases' => array(), - 'reference' => 'edd36776956f2a6fcf577edb5b05eb0e3bdc52ae', - 'dev_requirement' => true, - ), - 'symfony/finder' => array( - 'pretty_version' => 'v6.3.3', - 'version' => '6.3.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/finder', - 'aliases' => array(), - 'reference' => '9915db259f67d21eefee768c1abcf1cc61b1fc9e', - 'dev_requirement' => true, - ), - 'symfony/options-resolver' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/options-resolver', - 'aliases' => array(), - 'reference' => 'a10f19f5198d589d5c33333cffe98dc9820332dd', - 'dev_requirement' => true, - ), - 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', - 'aliases' => array(), - 'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a', - 'dev_requirement' => true, - ), - 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', - 'aliases' => array(), - 'reference' => '511a08c03c1960e08a883f4cffcacd219b758354', - 'dev_requirement' => true, - ), - 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', - 'aliases' => array(), - 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6', - 'dev_requirement' => true, - ), - 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', - 'aliases' => array(), - 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', - 'dev_requirement' => true, - ), - 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php80', - 'aliases' => array(), - 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', - 'dev_requirement' => true, - ), - 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php81', - 'aliases' => array(), - 'reference' => '707403074c8ea6e2edaf8794b0157a0bfa52157a', - 'dev_requirement' => true, - ), - 'symfony/process' => array( - 'pretty_version' => 'v6.3.2', - 'version' => '6.3.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/process', - 'aliases' => array(), - 'reference' => 'c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d', - 'dev_requirement' => true, - ), - 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.3.0', - 'version' => '3.3.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/service-contracts', - 'aliases' => array(), - 'reference' => '40da9cc13ec349d9e4966ce18b5fbcd724ab10a4', - 'dev_requirement' => true, - ), - 'symfony/stopwatch' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/stopwatch', - 'aliases' => array(), - 'reference' => 'fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2', - 'dev_requirement' => true, - ), - 'symfony/string' => array( - 'pretty_version' => 'v6.3.2', - 'version' => '6.3.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/string', - 'aliases' => array(), - 'reference' => '53d1a83225002635bca3482fcbf963001313fb68', - 'dev_requirement' => true, - ), - 'theseer/tokenizer' => array( - 'pretty_version' => '1.2.1', - 'version' => '1.2.1.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../theseer/tokenizer', - 'aliases' => array(), - 'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e', - 'dev_requirement' => true, - ), - ), -); diff --git a/old_vendor/composer/pcre/LICENSE b/old_vendor/composer/pcre/LICENSE deleted file mode 100644 index c5a282ff..00000000 --- a/old_vendor/composer/pcre/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2021 Composer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/composer/pcre/README.md b/old_vendor/composer/pcre/README.md deleted file mode 100644 index 973b17d8..00000000 --- a/old_vendor/composer/pcre/README.md +++ /dev/null @@ -1,181 +0,0 @@ -composer/pcre -============= - -PCRE wrapping library that offers type-safe `preg_*` replacements. - -This library gives you a way to ensure `preg_*` functions do not fail silently, returning -unexpected `null`s that may not be handled. - -As of 3.0 this library enforces [`PREG_UNMATCHED_AS_NULL`](#preg_unmatched_as_null) usage -for all matching and replaceCallback functions, [read more below](#preg_unmatched_as_null) -to understand the implications. - -It thus makes it easier to work with static analysis tools like PHPStan or Psalm as it -simplifies and reduces the possible return values from all the `preg_*` functions which -are quite packed with edge cases. - -This library is a thin wrapper around `preg_*` functions with [some limitations](#restrictions--limitations). -If you are looking for a richer API to handle regular expressions have a look at -[rawr/t-regx](https://packagist.org/packages/rawr/t-regx) instead. - -[![Continuous Integration](https://github.com/composer/pcre/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/composer/pcre/actions) - - -Installation ------------- - -Install the latest version with: - -```bash -$ composer require composer/pcre -``` - - -Requirements ------------- - -* PHP 7.4.0 is required for 3.x versions -* PHP 7.2.0 is required for 2.x versions -* PHP 5.3.2 is required for 1.x versions - - -Basic usage ------------ - -Instead of: - -```php -if (preg_match('{fo+}', $string, $matches)) { ... } -if (preg_match('{fo+}', $string, $matches, PREG_OFFSET_CAPTURE)) { ... } -if (preg_match_all('{fo+}', $string, $matches)) { ... } -$newString = preg_replace('{fo+}', 'bar', $string); -$newString = preg_replace_callback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string); -$newString = preg_replace_callback_array(['{fo+}' => fn ($match) => strtoupper($match[0])], $string); -$filtered = preg_grep('{[a-z]}', $elements); -$array = preg_split('{[a-z]+}', $string); -``` - -You can now call these on the `Preg` class: - -```php -use Composer\Pcre\Preg; - -if (Preg::match('{fo+}', $string, $matches)) { ... } -if (Preg::matchWithOffsets('{fo+}', $string, $matches)) { ... } -if (Preg::matchAll('{fo+}', $string, $matches)) { ... } -$newString = Preg::replace('{fo+}', 'bar', $string); -$newString = Preg::replaceCallback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string); -$newString = Preg::replaceCallbackArray(['{fo+}' => fn ($match) => strtoupper($match[0])], $string); -$filtered = Preg::grep('{[a-z]}', $elements); -$array = Preg::split('{[a-z]+}', $string); -``` - -The main difference is if anything fails to match/replace/.., it will throw a `Composer\Pcre\PcreException` -instead of returning `null` (or false in some cases), so you can now use the return values safely relying on -the fact that they can only be strings (for replace), ints (for match) or arrays (for grep/split). - -Additionally the `Preg` class provides match methods that return `bool` rather than `int`, for stricter type safety -when the number of pattern matches is not useful: - -```php -use Composer\Pcre\Preg; - -if (Preg::isMatch('{fo+}', $string, $matches)) // bool -if (Preg::isMatchAll('{fo+}', $string, $matches)) // bool -``` - -Finally the `Preg` class provides a few `*StrictGroups` method variants that ensure match groups -are always present and thus non-nullable, making it easier to write type-safe code: - -```php -use Composer\Pcre\Preg; - -// $matches is guaranteed to be an array of strings, if a subpattern does not match and produces a null it will throw -if (Preg::matchStrictGroups('{fo+}', $string, $matches)) -if (Preg::matchAllStrictGroups('{fo+}', $string, $matches)) -``` - -**Note:** This is generally safe to use as long as you do not have optional subpatterns (i.e. `(something)?` -or `(something)*` or branches with a `|` that result in some groups not being matched at all). -A subpattern that can match an empty string like `(.*)` is **not** optional, it will be present as an -empty string in the matches. A non-matching subpattern, even if optional like `(?:foo)?` will anyway not be present in -matches so it is also not a problem to use these with `*StrictGroups` methods. - -If you would prefer a slightly more verbose usage, replacing by-ref arguments by result objects, you can use the `Regex` class: - -```php -use Composer\Pcre\Regex; - -// this is useful when you are just interested in knowing if something matched -// as it returns a bool instead of int(1/0) for match -$bool = Regex::isMatch('{fo+}', $string); - -$result = Regex::match('{fo+}', $string); -if ($result->matched) { something($result->matches); } - -$result = Regex::matchWithOffsets('{fo+}', $string); -if ($result->matched) { something($result->matches); } - -$result = Regex::matchAll('{fo+}', $string); -if ($result->matched && $result->count > 3) { something($result->matches); } - -$newString = Regex::replace('{fo+}', 'bar', $string)->result; -$newString = Regex::replaceCallback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string)->result; -$newString = Regex::replaceCallbackArray(['{fo+}' => fn ($match) => strtoupper($match[0])], $string)->result; -``` - -Note that `preg_grep` and `preg_split` are only callable via the `Preg` class as they do not have -complex return types warranting a specific result object. - -See the [MatchResult](src/MatchResult.php), [MatchWithOffsetsResult](src/MatchWithOffsetsResult.php), [MatchAllResult](src/MatchAllResult.php), -[MatchAllWithOffsetsResult](src/MatchAllWithOffsetsResult.php), and [ReplaceResult](src/ReplaceResult.php) class sources for more details. - -Restrictions / Limitations --------------------------- - -Due to type safety requirements a few restrictions are in place. - -- matching using `PREG_OFFSET_CAPTURE` is made available via `matchWithOffsets` and `matchAllWithOffsets`. - You cannot pass the flag to `match`/`matchAll`. -- `Preg::split` will also reject `PREG_SPLIT_OFFSET_CAPTURE` and you should use `splitWithOffsets` - instead. -- `matchAll` rejects `PREG_SET_ORDER` as it also changes the shape of the returned matches. There - is no alternative provided as you can fairly easily code around it. -- `preg_filter` is not supported as it has a rather crazy API, most likely you should rather - use `Preg::grep` in combination with some loop and `Preg::replace`. -- `replace`, `replaceCallback` and `replaceCallbackArray` do not support an array `$subject`, - only simple strings. -- As of 2.0, the library always uses `PREG_UNMATCHED_AS_NULL` for matching, which offers [much - saner/more predictable results](#preg_unmatched_as_null). As of 3.0 the flag is also set for - `replaceCallback` and `replaceCallbackArray`. - -#### PREG_UNMATCHED_AS_NULL - -As of 2.0, this library always uses PREG_UNMATCHED_AS_NULL for all `match*` and `isMatch*` -functions. As of 3.0 it is also done for `replaceCallback` and `replaceCallbackArray`. - -This means your matches will always contain all matching groups, either as null if unmatched -or as string if it matched. - -The advantages in clarity and predictability are clearer if you compare the two outputs of -running this with and without PREG_UNMATCHED_AS_NULL in $flags: - -```php -preg_match('/(a)(b)*(c)(d)*/', 'ac', $matches, $flags); -``` - -| no flag | PREG_UNMATCHED_AS_NULL | -| --- | --- | -| array (size=4) | array (size=5) | -| 0 => string 'ac' (length=2) | 0 => string 'ac' (length=2) | -| 1 => string 'a' (length=1) | 1 => string 'a' (length=1) | -| 2 => string '' (length=0) | 2 => null | -| 3 => string 'c' (length=1) | 3 => string 'c' (length=1) | -| | 4 => null | -| group 2 (any unmatched group preceding one that matched) is set to `''`. You cannot tell if it matched an empty string or did not match at all | group 2 is `null` when unmatched and a string if it matched, easy to check for | -| group 4 (any optional group without a matching one following) is missing altogether. So you have to check with `isset()`, but really you want `isset($m[4]) && $m[4] !== ''` for safety unless you are very careful to check that a non-optional group follows it | group 4 is always set, and null in this case as there was no match, easy to check for with `$m[4] !== null` | - -License -------- - -composer/pcre is licensed under the MIT License, see the LICENSE file for details. diff --git a/old_vendor/composer/pcre/composer.json b/old_vendor/composer/pcre/composer.json deleted file mode 100644 index 40477ff4..00000000 --- a/old_vendor/composer/pcre/composer.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "composer/pcre", - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "type": "library", - "license": "MIT", - "keywords": [ - "pcre", - "regex", - "preg", - "regular expression" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5", - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1" - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Composer\\Pcre\\": "tests" - } - }, - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "scripts": { - "test": "vendor/bin/simple-phpunit", - "phpstan": "phpstan analyse" - } -} diff --git a/old_vendor/composer/pcre/src/MatchAllResult.php b/old_vendor/composer/pcre/src/MatchAllResult.php deleted file mode 100644 index 4310c536..00000000 --- a/old_vendor/composer/pcre/src/MatchAllResult.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchAllResult -{ - /** - * An array of match group => list of matched strings - * - * @readonly - * @var array> - */ - public $matches; - - /** - * @readonly - * @var 0|positive-int - */ - public $count; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array> $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - $this->count = $count; - } -} diff --git a/old_vendor/composer/pcre/src/MatchAllStrictGroupsResult.php b/old_vendor/composer/pcre/src/MatchAllStrictGroupsResult.php deleted file mode 100644 index 69dcd062..00000000 --- a/old_vendor/composer/pcre/src/MatchAllStrictGroupsResult.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchAllStrictGroupsResult -{ - /** - * An array of match group => list of matched strings - * - * @readonly - * @var array> - */ - public $matches; - - /** - * @readonly - * @var 0|positive-int - */ - public $count; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array> $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - $this->count = $count; - } -} diff --git a/old_vendor/composer/pcre/src/MatchAllWithOffsetsResult.php b/old_vendor/composer/pcre/src/MatchAllWithOffsetsResult.php deleted file mode 100644 index 032a02cd..00000000 --- a/old_vendor/composer/pcre/src/MatchAllWithOffsetsResult.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchAllWithOffsetsResult -{ - /** - * An array of match group => list of matches, every match being a pair of string matched + offset in bytes (or -1 if no match) - * - * @readonly - * @var array> - * @phpstan-var array}>> - */ - public $matches; - - /** - * @readonly - * @var 0|positive-int - */ - public $count; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array> $matches - * @phpstan-param array}>> $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - $this->count = $count; - } -} diff --git a/old_vendor/composer/pcre/src/MatchResult.php b/old_vendor/composer/pcre/src/MatchResult.php deleted file mode 100644 index e951a5ee..00000000 --- a/old_vendor/composer/pcre/src/MatchResult.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchResult -{ - /** - * An array of match group => string matched - * - * @readonly - * @var array - */ - public $matches; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - } -} diff --git a/old_vendor/composer/pcre/src/MatchStrictGroupsResult.php b/old_vendor/composer/pcre/src/MatchStrictGroupsResult.php deleted file mode 100644 index 126ee629..00000000 --- a/old_vendor/composer/pcre/src/MatchStrictGroupsResult.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchStrictGroupsResult -{ - /** - * An array of match group => string matched - * - * @readonly - * @var array - */ - public $matches; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - } -} diff --git a/old_vendor/composer/pcre/src/MatchWithOffsetsResult.php b/old_vendor/composer/pcre/src/MatchWithOffsetsResult.php deleted file mode 100644 index ba4d4bc4..00000000 --- a/old_vendor/composer/pcre/src/MatchWithOffsetsResult.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class MatchWithOffsetsResult -{ - /** - * An array of match group => pair of string matched + offset in bytes (or -1 if no match) - * - * @readonly - * @var array - * @phpstan-var array}> - */ - public $matches; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - * @param array $matches - * @phpstan-param array}> $matches - */ - public function __construct(int $count, array $matches) - { - $this->matches = $matches; - $this->matched = (bool) $count; - } -} diff --git a/old_vendor/composer/pcre/src/PcreException.php b/old_vendor/composer/pcre/src/PcreException.php deleted file mode 100644 index 218b2f2d..00000000 --- a/old_vendor/composer/pcre/src/PcreException.php +++ /dev/null @@ -1,60 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -class PcreException extends \RuntimeException -{ - /** - * @param string $function - * @param string|string[] $pattern - * @return self - */ - public static function fromFunction($function, $pattern) - { - $code = preg_last_error(); - - if (is_array($pattern)) { - $pattern = implode(', ', $pattern); - } - - return new PcreException($function.'(): failed executing "'.$pattern.'": '.self::pcreLastErrorMessage($code), $code); - } - - /** - * @param int $code - * @return string - */ - private static function pcreLastErrorMessage($code) - { - if (function_exists('preg_last_error_msg')) { - return preg_last_error_msg(); - } - - // older php versions did not set the code properly in all cases - if (PHP_VERSION_ID < 70201 && $code === 0) { - return 'UNDEFINED_ERROR'; - } - - $constants = get_defined_constants(true); - if (!isset($constants['pcre'])) { - return 'UNDEFINED_ERROR'; - } - - foreach ($constants['pcre'] as $const => $val) { - if ($val === $code && substr($const, -6) === '_ERROR') { - return $const; - } - } - - return 'UNDEFINED_ERROR'; - } -} diff --git a/old_vendor/composer/pcre/src/Preg.php b/old_vendor/composer/pcre/src/Preg.php deleted file mode 100644 index 0e35f7d6..00000000 --- a/old_vendor/composer/pcre/src/Preg.php +++ /dev/null @@ -1,428 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -class Preg -{ - /** @internal */ - public const ARRAY_MSG = '$subject as an array is not supported. You can use \'foreach\' instead.'; - /** @internal */ - public const INVALID_TYPE_MSG = '$subject must be a string, %s given.'; - - /** - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @return 0|1 - * - * @param-out array $matches - */ - public static function match(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int - { - self::checkOffsetCapture($flags, 'matchWithOffsets'); - - $result = preg_match($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL, $offset); - if ($result === false) { - throw PcreException::fromFunction('preg_match', $pattern); - } - - return $result; - } - - /** - * Variant of `match()` which outputs non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @return 0|1 - * @throws UnexpectedNullMatchException - * - * @param-out array $matches - */ - public static function matchStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int - { - $result = self::match($pattern, $subject, $matchesInternal, $flags, $offset); - $matches = self::enforceNonNullMatches($pattern, $matchesInternal, 'match'); - - return $result; - } - - /** - * Runs preg_match with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL and PREG_OFFSET_CAPTURE are always set, no other flags are supported - * @return 0|1 - * - * @param-out array}> $matches - */ - public static function matchWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): int - { - $result = preg_match($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE, $offset); - if ($result === false) { - throw PcreException::fromFunction('preg_match', $pattern); - } - - return $result; - } - - /** - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @return 0|positive-int - * - * @param-out array> $matches - */ - public static function matchAll(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int - { - self::checkOffsetCapture($flags, 'matchAllWithOffsets'); - self::checkSetOrder($flags); - - $result = preg_match_all($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL, $offset); - if (!is_int($result)) { // PHP < 8 may return null, 8+ returns int|false - throw PcreException::fromFunction('preg_match_all', $pattern); - } - - return $result; - } - - /** - * Variant of `match()` which outputs non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @return 0|positive-int - * @throws UnexpectedNullMatchException - * - * @param-out array> $matches - */ - public static function matchAllStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int - { - $result = self::matchAll($pattern, $subject, $matchesInternal, $flags, $offset); - $matches = self::enforceNonNullMatchAll($pattern, $matchesInternal, 'matchAll'); - - return $result; - } - - /** - * Runs preg_match_all with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported - * @return 0|positive-int - * - * @phpstan-param array}>> $matches - */ - public static function matchAllWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): int - { - self::checkSetOrder($flags); - - $result = preg_match_all($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE, $offset); - if (!is_int($result)) { // PHP < 8 may return null, 8+ returns int|false - throw PcreException::fromFunction('preg_match_all', $pattern); - } - - return $result; - } - - /** - * @param string|string[] $pattern - * @param string|string[] $replacement - * @param string $subject - * @param int $count Set by method - * - * @param-out int<0, max> $count - */ - public static function replace($pattern, $replacement, $subject, int $limit = -1, int &$count = null): string - { - if (!is_scalar($subject)) { - if (is_array($subject)) { - throw new \InvalidArgumentException(static::ARRAY_MSG); - } - - throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject))); - } - - $result = preg_replace($pattern, $replacement, $subject, $limit, $count); - if ($result === null) { - throw PcreException::fromFunction('preg_replace', $pattern); - } - - return $result; - } - - /** - * @param string|string[] $pattern - * @param callable(array): string $replacement - * @param string $subject - * @param int $count Set by method - * @param int-mask $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set - * - * @param-out int<0, max> $count - */ - public static function replaceCallback($pattern, callable $replacement, $subject, int $limit = -1, int &$count = null, int $flags = 0): string - { - if (!is_scalar($subject)) { - if (is_array($subject)) { - throw new \InvalidArgumentException(static::ARRAY_MSG); - } - - throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject))); - } - - $result = preg_replace_callback($pattern, $replacement, $subject, $limit, $count, $flags | PREG_UNMATCHED_AS_NULL); - if ($result === null) { - throw PcreException::fromFunction('preg_replace_callback', $pattern); - } - - return $result; - } - - /** - * Variant of `replaceCallback()` which outputs non-null matches (or throws) - * - * @param string $pattern - * @param callable(array): string $replacement - * @param string $subject - * @param int $count Set by method - * @param int-mask $flags PREG_OFFSET_CAPTURE or PREG_UNMATCHED_AS_NULL, only available on PHP 7.4+ - * - * @param-out int<0, max> $count - */ - public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, int &$count = null, int $flags = 0): string - { - return self::replaceCallback($pattern, function (array $matches) use ($pattern, $replacement) { - return $replacement(self::enforceNonNullMatches($pattern, $matches, 'replaceCallback')); - }, $subject, $limit, $count, $flags); - } - - /** - * @param array): string> $pattern - * @param string $subject - * @param int $count Set by method - * @param int-mask $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set - * - * @param-out int<0, max> $count - */ - public static function replaceCallbackArray(array $pattern, $subject, int $limit = -1, int &$count = null, int $flags = 0): string - { - if (!is_scalar($subject)) { - if (is_array($subject)) { - throw new \InvalidArgumentException(static::ARRAY_MSG); - } - - throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject))); - } - - $result = preg_replace_callback_array($pattern, $subject, $limit, $count, $flags | PREG_UNMATCHED_AS_NULL); - if ($result === null) { - $pattern = array_keys($pattern); - throw PcreException::fromFunction('preg_replace_callback_array', $pattern); - } - - return $result; - } - - /** - * @param int-mask $flags PREG_SPLIT_NO_EMPTY or PREG_SPLIT_DELIM_CAPTURE - * @return list - */ - public static function split(string $pattern, string $subject, int $limit = -1, int $flags = 0): array - { - if (($flags & PREG_SPLIT_OFFSET_CAPTURE) !== 0) { - throw new \InvalidArgumentException('PREG_SPLIT_OFFSET_CAPTURE is not supported as it changes the type of $matches, use splitWithOffsets() instead'); - } - - $result = preg_split($pattern, $subject, $limit, $flags); - if ($result === false) { - throw PcreException::fromFunction('preg_split', $pattern); - } - - return $result; - } - - /** - * @param int-mask $flags PREG_SPLIT_NO_EMPTY or PREG_SPLIT_DELIM_CAPTURE, PREG_SPLIT_OFFSET_CAPTURE is always set - * @return list - * @phpstan-return list}> - */ - public static function splitWithOffsets(string $pattern, string $subject, int $limit = -1, int $flags = 0): array - { - $result = preg_split($pattern, $subject, $limit, $flags | PREG_SPLIT_OFFSET_CAPTURE); - if ($result === false) { - throw PcreException::fromFunction('preg_split', $pattern); - } - - return $result; - } - - /** - * @template T of string|\Stringable - * @param string $pattern - * @param array $array - * @param int-mask $flags PREG_GREP_INVERT - * @return array - */ - public static function grep(string $pattern, array $array, int $flags = 0): array - { - $result = preg_grep($pattern, $array, $flags); - if ($result === false) { - throw PcreException::fromFunction('preg_grep', $pattern); - } - - return $result; - } - - /** - * Variant of match() which returns a bool instead of int - * - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * - * @param-out array $matches - */ - public static function isMatch(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool - { - return (bool) static::match($pattern, $subject, $matches, $flags, $offset); - } - - /** - * Variant of `isMatch()` which outputs non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @throws UnexpectedNullMatchException - * - * @param-out array $matches - */ - public static function isMatchStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool - { - return (bool) self::matchStrictGroups($pattern, $subject, $matches, $flags, $offset); - } - - /** - * Variant of matchAll() which returns a bool instead of int - * - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * - * @param-out array> $matches - */ - public static function isMatchAll(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool - { - return (bool) static::matchAll($pattern, $subject, $matches, $flags, $offset); - } - - /** - * Variant of `isMatchAll()` which outputs non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * - * @param-out array> $matches - */ - public static function isMatchAllStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool - { - return (bool) self::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset); - } - - /** - * Variant of matchWithOffsets() which returns a bool instead of int - * - * Runs preg_match with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param array $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * - * @param-out array}> $matches - */ - public static function isMatchWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): bool - { - return (bool) static::matchWithOffsets($pattern, $subject, $matches, $flags, $offset); - } - - /** - * Variant of matchAllWithOffsets() which returns a bool instead of int - * - * Runs preg_match_all with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param array> $matches Set by method - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * - * @param-out array}>> $matches - */ - public static function isMatchAllWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): bool - { - return (bool) static::matchAllWithOffsets($pattern, $subject, $matches, $flags, $offset); - } - - private static function checkOffsetCapture(int $flags, string $useFunctionName): void - { - if (($flags & PREG_OFFSET_CAPTURE) !== 0) { - throw new \InvalidArgumentException('PREG_OFFSET_CAPTURE is not supported as it changes the type of $matches, use ' . $useFunctionName . '() instead'); - } - } - - private static function checkSetOrder(int $flags): void - { - if (($flags & PREG_SET_ORDER) !== 0) { - throw new \InvalidArgumentException('PREG_SET_ORDER is not supported as it changes the type of $matches'); - } - } - - /** - * @param array $matches - * @return array - * @throws UnexpectedNullMatchException - */ - private static function enforceNonNullMatches(string $pattern, array $matches, string $variantMethod) - { - foreach ($matches as $group => $match) { - if (null === $match) { - throw new UnexpectedNullMatchException('Pattern "'.$pattern.'" had an unexpected unmatched group "'.$group.'", make sure the pattern always matches or use '.$variantMethod.'() instead.'); - } - } - - /** @var array */ - return $matches; - } - - /** - * @param array> $matches - * @return array> - * @throws UnexpectedNullMatchException - */ - private static function enforceNonNullMatchAll(string $pattern, array $matches, string $variantMethod) - { - foreach ($matches as $group => $groupMatches) { - foreach ($groupMatches as $match) { - if (null === $match) { - throw new UnexpectedNullMatchException('Pattern "'.$pattern.'" had an unexpected unmatched group "'.$group.'", make sure the pattern always matches or use '.$variantMethod.'() instead.'); - } - } - } - - /** @var array> */ - return $matches; - } -} diff --git a/old_vendor/composer/pcre/src/Regex.php b/old_vendor/composer/pcre/src/Regex.php deleted file mode 100644 index 112fa325..00000000 --- a/old_vendor/composer/pcre/src/Regex.php +++ /dev/null @@ -1,174 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -class Regex -{ - /** - * @param non-empty-string $pattern - */ - public static function isMatch(string $pattern, string $subject, int $offset = 0): bool - { - return (bool) Preg::match($pattern, $subject, $matches, 0, $offset); - } - - /** - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - */ - public static function match(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchResult - { - self::checkOffsetCapture($flags, 'matchWithOffsets'); - - $count = Preg::match($pattern, $subject, $matches, $flags, $offset); - - return new MatchResult($count, $matches); - } - - /** - * Variant of `match()` which returns non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @throws UnexpectedNullMatchException - */ - public static function matchStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchStrictGroupsResult - { - $count = Preg::matchStrictGroups($pattern, $subject, $matches, $flags, $offset); - - return new MatchStrictGroupsResult($count, $matches); - } - - /** - * Runs preg_match with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported - */ - public static function matchWithOffsets(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchWithOffsetsResult - { - $count = Preg::matchWithOffsets($pattern, $subject, $matches, $flags, $offset); - - return new MatchWithOffsetsResult($count, $matches); - } - - /** - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - */ - public static function matchAll(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllResult - { - self::checkOffsetCapture($flags, 'matchAllWithOffsets'); - self::checkSetOrder($flags); - - $count = Preg::matchAll($pattern, $subject, $matches, $flags, $offset); - - return new MatchAllResult($count, $matches); - } - - /** - * Variant of `matchAll()` which returns non-null matches (or throws) - * - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported - * @throws UnexpectedNullMatchException - */ - public static function matchAllStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllStrictGroupsResult - { - self::checkOffsetCapture($flags, 'matchAllWithOffsets'); - self::checkSetOrder($flags); - - $count = Preg::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset); - - return new MatchAllStrictGroupsResult($count, $matches); - } - - /** - * Runs preg_match_all with PREG_OFFSET_CAPTURE - * - * @param non-empty-string $pattern - * @param int-mask $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported - */ - public static function matchAllWithOffsets(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllWithOffsetsResult - { - self::checkSetOrder($flags); - - $count = Preg::matchAllWithOffsets($pattern, $subject, $matches, $flags, $offset); - - return new MatchAllWithOffsetsResult($count, $matches); - } - /** - * @param string|string[] $pattern - * @param string|string[] $replacement - * @param string $subject - */ - public static function replace($pattern, $replacement, $subject, int $limit = -1): ReplaceResult - { - $result = Preg::replace($pattern, $replacement, $subject, $limit, $count); - - return new ReplaceResult($count, $result); - } - - /** - * @param string|string[] $pattern - * @param callable(array): string $replacement - * @param string $subject - * @param int-mask $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set - */ - public static function replaceCallback($pattern, callable $replacement, $subject, int $limit = -1, int $flags = 0): ReplaceResult - { - $result = Preg::replaceCallback($pattern, $replacement, $subject, $limit, $count, $flags); - - return new ReplaceResult($count, $result); - } - - /** - * Variant of `replaceCallback()` which outputs non-null matches (or throws) - * - * @param string $pattern - * @param callable(array): string $replacement - * @param string $subject - * @param int-mask $flags PREG_OFFSET_CAPTURE or PREG_UNMATCHED_AS_NULL, only available on PHP 7.4+ - */ - public static function replaceCallbackStrictGroups($pattern, callable $replacement, $subject, int $limit = -1, int $flags = 0): ReplaceResult - { - $result = Preg::replaceCallbackStrictGroups($pattern, $replacement, $subject, $limit, $count, $flags); - - return new ReplaceResult($count, $result); - } - - /** - * @param array): string> $pattern - * @param string $subject - * @param int-mask $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set - */ - public static function replaceCallbackArray(array $pattern, $subject, int $limit = -1, int $flags = 0): ReplaceResult - { - $result = Preg::replaceCallbackArray($pattern, $subject, $limit, $count, $flags); - - return new ReplaceResult($count, $result); - } - - private static function checkOffsetCapture(int $flags, string $useFunctionName): void - { - if (($flags & PREG_OFFSET_CAPTURE) !== 0) { - throw new \InvalidArgumentException('PREG_OFFSET_CAPTURE is not supported as it changes the return type, use '.$useFunctionName.'() instead'); - } - } - - private static function checkSetOrder(int $flags): void - { - if (($flags & PREG_SET_ORDER) !== 0) { - throw new \InvalidArgumentException('PREG_SET_ORDER is not supported as it changes the return type'); - } - } -} diff --git a/old_vendor/composer/pcre/src/ReplaceResult.php b/old_vendor/composer/pcre/src/ReplaceResult.php deleted file mode 100644 index 33847712..00000000 --- a/old_vendor/composer/pcre/src/ReplaceResult.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -final class ReplaceResult -{ - /** - * @readonly - * @var string - */ - public $result; - - /** - * @readonly - * @var 0|positive-int - */ - public $count; - - /** - * @readonly - * @var bool - */ - public $matched; - - /** - * @param 0|positive-int $count - */ - public function __construct(int $count, string $result) - { - $this->count = $count; - $this->matched = (bool) $count; - $this->result = $result; - } -} diff --git a/old_vendor/composer/pcre/src/UnexpectedNullMatchException.php b/old_vendor/composer/pcre/src/UnexpectedNullMatchException.php deleted file mode 100644 index f123828b..00000000 --- a/old_vendor/composer/pcre/src/UnexpectedNullMatchException.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Pcre; - -class UnexpectedNullMatchException extends PcreException -{ - public static function fromFunction($function, $pattern) - { - throw new \LogicException('fromFunction should not be called on '.self::class.', use '.PcreException::class); - } -} diff --git a/old_vendor/composer/platform_check.php b/old_vendor/composer/platform_check.php deleted file mode 100644 index 580fa960..00000000 --- a/old_vendor/composer/platform_check.php +++ /dev/null @@ -1,26 +0,0 @@ -= 70400)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.'; -} - -if ($issues) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); - } elseif (!headers_sent()) { - echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; - } - } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR - ); -} diff --git a/old_vendor/composer/semver/CHANGELOG.md b/old_vendor/composer/semver/CHANGELOG.md deleted file mode 100644 index c9514773..00000000 --- a/old_vendor/composer/semver/CHANGELOG.md +++ /dev/null @@ -1,209 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). - -### [3.3.2] 2022-04-01 - - * Fixed handling of non-string values (#134) - -### [3.3.1] 2022-03-16 - - * Fixed possible cache key clash in the CompilingMatcher memoization (#132) - -### [3.3.0] 2022-03-15 - - * Improved performance of CompilingMatcher by memoizing more (#131) - * Added CompilingMatcher::clear to clear all memoization caches - -### [3.2.9] 2022-02-04 - - * Revert #129 (Fixed MultiConstraint with MatchAllConstraint) which caused regressions - -### [3.2.8] 2022-02-04 - - * Updates to latest phpstan / CI by @Seldaek in https://github.com/composer/semver/pull/130 - * Fixed MultiConstraint with MatchAllConstraint by @Toflar in https://github.com/composer/semver/pull/129 - -### [3.2.7] 2022-01-04 - - * Fixed: typo in type definition of Intervals class causing issues with Psalm scanning vendors - -### [3.2.6] 2021-10-25 - - * Fixed: type improvements to parseStability - -### [3.2.5] 2021-05-24 - - * Fixed: issue comparing disjunctive MultiConstraints to conjunctive ones (#127) - * Fixed: added complete type information using phpstan annotations - -### [3.2.4] 2020-11-13 - - * Fixed: code clean-up - -### [3.2.3] 2020-11-12 - - * Fixed: constraints in the form of `X || Y, >=Y.1` and other such complex constructs were in some cases being optimized into a more restrictive constraint - -### [3.2.2] 2020-10-14 - - * Fixed: internal code cleanups - -### [3.2.1] 2020-09-27 - - * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases - * Fixed: normalization of beta0 and such which was dropping the 0 - -### [3.2.0] 2020-09-09 - - * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 - * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience - -### [3.1.0] 2020-09-08 - - * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 3.0.1 - * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package - -### [3.0.1] 2020-09-08 - - * Fixed: handling of some invalid -dev versions which were seen as valid - -### [3.0.0] 2020-05-26 - - * Break: Renamed `EmptyConstraint`, replace it with `MatchAllConstraint` - * Break: Unlikely to affect anyone but strictly speaking a breaking change, `*.*` and such variants will not match all `dev-*` versions anymore, only `*` does - * Break: ConstraintInterface is now considered internal/private and not meant to be implemented by third parties anymore - * Added `Intervals` class to check if a constraint is a subsets of another one, and allow compacting complex MultiConstraints into simpler ones - * Added `CompilingMatcher` class to speed up constraint matching against simple Constraint instances - * Added `MatchAllConstraint` and `MatchNoneConstraint` which match everything and nothing - * Added more advanced optimization of contiguous constraints inside MultiConstraint - * Added tentative support for PHP 8 - * Fixed ConstraintInterface::matches to be commutative in all cases - -### [2.0.0] 2020-04-21 - - * Break: `dev-master`, `dev-trunk` and `dev-default` now normalize to `dev-master`, `dev-trunk` and `dev-default` instead of `9999999-dev` in 1.x - * Break: Removed the deprecated `AbstractConstraint` - * Added `getUpperBound` and `getLowerBound` to ConstraintInterface. They return `Composer\Semver\Constraint\Bound` instances - * Added `MultiConstraint::create` to create the most-optimal form of ConstraintInterface from an array of constraint strings - -### [1.7.2] 2020-12-03 - - * Fixed: Allow installing on php 8 - -### [1.7.1] 2020-09-27 - - * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases - * Fixed: normalization of beta0 and such which was dropping the 0 - -### [1.7.0] 2020-09-09 - - * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 - * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience - -### [1.6.0] 2020-09-08 - - * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 1.5.2 - * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package - -### [1.5.2] 2020-09-08 - - * Fixed: handling of some invalid -dev versions which were seen as valid - * Fixed: some doctypes - -### [1.5.1] 2020-01-13 - - * Fixed: Parsing of aliased version was not validating the alias to be a valid version - -### [1.5.0] 2019-03-19 - - * Added: some support for date versions (e.g. 201903) in `~` operator - * Fixed: support for stabilities in `~` operator was inconsistent - -### [1.4.2] 2016-08-30 - - * Fixed: collapsing of complex constraints lead to buggy constraints - -### [1.4.1] 2016-06-02 - - * Changed: branch-like requirements no longer strip build metadata - [composer/semver#38](https://github.com/composer/semver/pull/38). - -### [1.4.0] 2016-03-30 - - * Added: getters on MultiConstraint - [composer/semver#35](https://github.com/composer/semver/pull/35). - -### [1.3.0] 2016-02-25 - - * Fixed: stability parsing - [composer/composer#1234](https://github.com/composer/composer/issues/4889). - * Changed: collapse contiguous constraints when possible. - -### [1.2.0] 2015-11-10 - - * Changed: allow multiple numerical identifiers in 'pre-release' version part. - * Changed: add more 'v' prefix support. - -### [1.1.0] 2015-11-03 - - * Changed: dropped redundant `test` namespace. - * Changed: minor adjustment in datetime parsing normalization. - * Changed: `ConstraintInterface` relaxed, setPrettyString is not required anymore. - * Changed: `AbstractConstraint` marked deprecated, will be removed in 2.0. - * Changed: `Constraint` is now extensible. - -### [1.0.0] 2015-09-21 - - * Break: `VersionConstraint` renamed to `Constraint`. - * Break: `SpecificConstraint` renamed to `AbstractConstraint`. - * Break: `LinkConstraintInterface` renamed to `ConstraintInterface`. - * Break: `VersionParser::parseNameVersionPairs` was removed. - * Changed: `VersionParser::parseConstraints` allows (but ignores) build metadata now. - * Changed: `VersionParser::parseConstraints` allows (but ignores) prefixing numeric versions with a 'v' now. - * Changed: Fixed namespace(s) of test files. - * Changed: `Comparator::compare` no longer throws `InvalidArgumentException`. - * Changed: `Constraint` now throws `InvalidArgumentException`. - -### [0.1.0] 2015-07-23 - - * Added: `Composer\Semver\Comparator`, various methods to compare versions. - * Added: various documents such as README.md, LICENSE, etc. - * Added: configuration files for Git, Travis, php-cs-fixer, phpunit. - * Break: the following namespaces were renamed: - - Namespace: `Composer\Package\Version` -> `Composer\Semver` - - Namespace: `Composer\Package\LinkConstraint` -> `Composer\Semver\Constraint` - - Namespace: `Composer\Test\Package\Version` -> `Composer\Test\Semver` - - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint` - * Changed: code style using php-cs-fixer. - -[3.3.2]: https://github.com/composer/semver/compare/3.3.1...3.3.2 -[3.3.1]: https://github.com/composer/semver/compare/3.3.0...3.3.1 -[3.3.0]: https://github.com/composer/semver/compare/3.2.9...3.3.0 -[3.2.9]: https://github.com/composer/semver/compare/3.2.8...3.2.9 -[3.2.8]: https://github.com/composer/semver/compare/3.2.7...3.2.8 -[3.2.7]: https://github.com/composer/semver/compare/3.2.6...3.2.7 -[3.2.6]: https://github.com/composer/semver/compare/3.2.5...3.2.6 -[3.2.5]: https://github.com/composer/semver/compare/3.2.4...3.2.5 -[3.2.4]: https://github.com/composer/semver/compare/3.2.3...3.2.4 -[3.2.3]: https://github.com/composer/semver/compare/3.2.2...3.2.3 -[3.2.2]: https://github.com/composer/semver/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/composer/semver/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/composer/semver/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/composer/semver/compare/3.0.1...3.1.0 -[3.0.1]: https://github.com/composer/semver/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/composer/semver/compare/2.0.0...3.0.0 -[2.0.0]: https://github.com/composer/semver/compare/1.5.1...2.0.0 -[1.7.2]: https://github.com/composer/semver/compare/1.7.1...1.7.2 -[1.7.1]: https://github.com/composer/semver/compare/1.7.0...1.7.1 -[1.7.0]: https://github.com/composer/semver/compare/1.6.0...1.7.0 -[1.6.0]: https://github.com/composer/semver/compare/1.5.2...1.6.0 -[1.5.2]: https://github.com/composer/semver/compare/1.5.1...1.5.2 -[1.5.1]: https://github.com/composer/semver/compare/1.5.0...1.5.1 -[1.5.0]: https://github.com/composer/semver/compare/1.4.2...1.5.0 -[1.4.2]: https://github.com/composer/semver/compare/1.4.1...1.4.2 -[1.4.1]: https://github.com/composer/semver/compare/1.4.0...1.4.1 -[1.4.0]: https://github.com/composer/semver/compare/1.3.0...1.4.0 -[1.3.0]: https://github.com/composer/semver/compare/1.2.0...1.3.0 -[1.2.0]: https://github.com/composer/semver/compare/1.1.0...1.2.0 -[1.1.0]: https://github.com/composer/semver/compare/1.0.0...1.1.0 -[1.0.0]: https://github.com/composer/semver/compare/0.1.0...1.0.0 -[0.1.0]: https://github.com/composer/semver/compare/5e0b9a4da...0.1.0 diff --git a/old_vendor/composer/semver/LICENSE b/old_vendor/composer/semver/LICENSE deleted file mode 100644 index 46697586..00000000 --- a/old_vendor/composer/semver/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2015 Composer - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/composer/semver/README.md b/old_vendor/composer/semver/README.md deleted file mode 100644 index 35db99a5..00000000 --- a/old_vendor/composer/semver/README.md +++ /dev/null @@ -1,98 +0,0 @@ -composer/semver -=============== - -Semver (Semantic Versioning) library that offers utilities, version constraint parsing and validation. - -Originally written as part of [composer/composer](https://github.com/composer/composer), -now extracted and made available as a stand-alone library. - -[![Continuous Integration](https://github.com/composer/semver/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/composer/semver/actions) - - -Installation ------------- - -Install the latest version with: - -```bash -$ composer require composer/semver -``` - - -Requirements ------------- - -* PHP 5.3.2 is required but using the latest version of PHP is highly recommended. - - -Version Comparison ------------------- - -For details on how versions are compared, refer to the [Versions](https://getcomposer.org/doc/articles/versions.md) -article in the documentation section of the [getcomposer.org](https://getcomposer.org) website. - - -Basic usage ------------ - -### Comparator - -The [`Composer\Semver\Comparator`](https://github.com/composer/semver/blob/main/src/Comparator.php) class provides the following methods for comparing versions: - -* greaterThan($v1, $v2) -* greaterThanOrEqualTo($v1, $v2) -* lessThan($v1, $v2) -* lessThanOrEqualTo($v1, $v2) -* equalTo($v1, $v2) -* notEqualTo($v1, $v2) - -Each function takes two version strings as arguments and returns a boolean. For example: - -```php -use Composer\Semver\Comparator; - -Comparator::greaterThan('1.25.0', '1.24.0'); // 1.25.0 > 1.24.0 -``` - -### Semver - -The [`Composer\Semver\Semver`](https://github.com/composer/semver/blob/main/src/Semver.php) class provides the following methods: - -* satisfies($version, $constraints) -* satisfiedBy(array $versions, $constraint) -* sort($versions) -* rsort($versions) - -### Intervals - -The [`Composer\Semver\Intervals`](https://github.com/composer/semver/blob/main/src/Intervals.php) static class provides -a few utilities to work with complex constraints or read version intervals from a constraint: - -```php -use Composer\Semver\Intervals; - -// Checks whether $candidate is a subset of $constraint -Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint); - -// Checks whether $a and $b have any intersection, equivalent to $a->matches($b) -Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b); - -// Optimizes a complex multi constraint by merging all intervals down to the smallest -// possible multi constraint. The drawbacks are this is not very fast, and the resulting -// multi constraint will have no human readable prettyConstraint configured on it -Intervals::compactConstraint(ConstraintInterface $constraint); - -// Creates an array of numeric intervals and branch constraints representing a given constraint -Intervals::get(ConstraintInterface $constraint); - -// Clears the memoization cache when you are done processing constraints -Intervals::clear() -``` - -See the class docblocks for more details. - - -License -------- - -composer/semver is licensed under the MIT License, see the LICENSE file for details. diff --git a/old_vendor/composer/semver/composer.json b/old_vendor/composer/semver/composer.json deleted file mode 100644 index ba78676d..00000000 --- a/old_vendor/composer/semver/composer.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "composer/semver", - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "type": "library", - "license": "MIT", - "keywords": [ - "semver", - "semantic", - "versioning", - "validation" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.2 || ^5", - "phpstan/phpstan": "^1.4" - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Composer\\Semver\\": "tests" - } - }, - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "scripts": { - "test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit", - "phpstan": "@php vendor/bin/phpstan analyse" - } -} diff --git a/old_vendor/composer/semver/src/Comparator.php b/old_vendor/composer/semver/src/Comparator.php deleted file mode 100644 index 38f483aa..00000000 --- a/old_vendor/composer/semver/src/Comparator.php +++ /dev/null @@ -1,113 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Comparator -{ - /** - * Evaluates the expression: $version1 > $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function greaterThan($version1, $version2) - { - return self::compare($version1, '>', $version2); - } - - /** - * Evaluates the expression: $version1 >= $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function greaterThanOrEqualTo($version1, $version2) - { - return self::compare($version1, '>=', $version2); - } - - /** - * Evaluates the expression: $version1 < $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function lessThan($version1, $version2) - { - return self::compare($version1, '<', $version2); - } - - /** - * Evaluates the expression: $version1 <= $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function lessThanOrEqualTo($version1, $version2) - { - return self::compare($version1, '<=', $version2); - } - - /** - * Evaluates the expression: $version1 == $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function equalTo($version1, $version2) - { - return self::compare($version1, '==', $version2); - } - - /** - * Evaluates the expression: $version1 != $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function notEqualTo($version1, $version2) - { - return self::compare($version1, '!=', $version2); - } - - /** - * Evaluates the expression: $version1 $operator $version2. - * - * @param string $version1 - * @param string $operator - * @param string $version2 - * - * @return bool - * - * @phpstan-param Constraint::STR_OP_* $operator - */ - public static function compare($version1, $operator, $version2) - { - $constraint = new Constraint($operator, $version2); - - return $constraint->matchSpecific(new Constraint('==', $version1), true); - } -} diff --git a/old_vendor/composer/semver/src/CompilingMatcher.php b/old_vendor/composer/semver/src/CompilingMatcher.php deleted file mode 100644 index 45bce70a..00000000 --- a/old_vendor/composer/semver/src/CompilingMatcher.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; -use Composer\Semver\Constraint\ConstraintInterface; - -/** - * Helper class to evaluate constraint by compiling and reusing the code to evaluate - */ -class CompilingMatcher -{ - /** - * @var array - * @phpstan-var array - */ - private static $compiledCheckerCache = array(); - /** - * @var array - * @phpstan-var array - */ - private static $resultCache = array(); - - /** @var bool */ - private static $enabled; - - /** - * @phpstan-var array - */ - private static $transOpInt = array( - Constraint::OP_EQ => Constraint::STR_OP_EQ, - Constraint::OP_LT => Constraint::STR_OP_LT, - Constraint::OP_LE => Constraint::STR_OP_LE, - Constraint::OP_GT => Constraint::STR_OP_GT, - Constraint::OP_GE => Constraint::STR_OP_GE, - Constraint::OP_NE => Constraint::STR_OP_NE, - ); - - /** - * Clears the memoization cache once you are done - * - * @return void - */ - public static function clear() - { - self::$resultCache = array(); - self::$compiledCheckerCache = array(); - } - - /** - * Evaluates the expression: $constraint match $operator $version - * - * @param ConstraintInterface $constraint - * @param int $operator - * @phpstan-param Constraint::OP_* $operator - * @param string $version - * - * @return mixed - */ - public static function match(ConstraintInterface $constraint, $operator, $version) - { - $resultCacheKey = $operator.$constraint.';'.$version; - - if (isset(self::$resultCache[$resultCacheKey])) { - return self::$resultCache[$resultCacheKey]; - } - - if (self::$enabled === null) { - self::$enabled = !\in_array('eval', explode(',', (string) ini_get('disable_functions')), true); - } - if (!self::$enabled) { - return self::$resultCache[$resultCacheKey] = $constraint->matches(new Constraint(self::$transOpInt[$operator], $version)); - } - - $cacheKey = $operator.$constraint; - if (!isset(self::$compiledCheckerCache[$cacheKey])) { - $code = $constraint->compile($operator); - self::$compiledCheckerCache[$cacheKey] = $function = eval('return function($v, $b){return '.$code.';};'); - } else { - $function = self::$compiledCheckerCache[$cacheKey]; - } - - return self::$resultCache[$resultCacheKey] = $function($version, strpos($version, 'dev-') === 0); - } -} diff --git a/old_vendor/composer/semver/src/Constraint/Bound.php b/old_vendor/composer/semver/src/Constraint/Bound.php deleted file mode 100644 index 7effb11a..00000000 --- a/old_vendor/composer/semver/src/Constraint/Bound.php +++ /dev/null @@ -1,122 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -class Bound -{ - /** - * @var string - */ - private $version; - - /** - * @var bool - */ - private $isInclusive; - - /** - * @param string $version - * @param bool $isInclusive - */ - public function __construct($version, $isInclusive) - { - $this->version = $version; - $this->isInclusive = $isInclusive; - } - - /** - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * @return bool - */ - public function isInclusive() - { - return $this->isInclusive; - } - - /** - * @return bool - */ - public function isZero() - { - return $this->getVersion() === '0.0.0.0-dev' && $this->isInclusive(); - } - - /** - * @return bool - */ - public function isPositiveInfinity() - { - return $this->getVersion() === PHP_INT_MAX.'.0.0.0' && !$this->isInclusive(); - } - - /** - * Compares a bound to another with a given operator. - * - * @param Bound $other - * @param string $operator - * - * @return bool - */ - public function compareTo(Bound $other, $operator) - { - if (!\in_array($operator, array('<', '>'), true)) { - throw new \InvalidArgumentException('Does not support any other operator other than > or <.'); - } - - // If they are the same it doesn't matter - if ($this == $other) { - return false; - } - - $compareResult = version_compare($this->getVersion(), $other->getVersion()); - - // Not the same version means we don't need to check if the bounds are inclusive or not - if (0 !== $compareResult) { - return (('>' === $operator) ? 1 : -1) === $compareResult; - } - - // Question we're answering here is "am I higher than $other?" - return '>' === $operator ? $other->isInclusive() : !$other->isInclusive(); - } - - public function __toString() - { - return sprintf( - '%s [%s]', - $this->getVersion(), - $this->isInclusive() ? 'inclusive' : 'exclusive' - ); - } - - /** - * @return self - */ - public static function zero() - { - return new Bound('0.0.0.0-dev', true); - } - - /** - * @return self - */ - public static function positiveInfinity() - { - return new Bound(PHP_INT_MAX.'.0.0.0', false); - } -} diff --git a/old_vendor/composer/semver/src/Constraint/Constraint.php b/old_vendor/composer/semver/src/Constraint/Constraint.php deleted file mode 100644 index dc394829..00000000 --- a/old_vendor/composer/semver/src/Constraint/Constraint.php +++ /dev/null @@ -1,435 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines a constraint. - */ -class Constraint implements ConstraintInterface -{ - /* operator integer values */ - const OP_EQ = 0; - const OP_LT = 1; - const OP_LE = 2; - const OP_GT = 3; - const OP_GE = 4; - const OP_NE = 5; - - /* operator string values */ - const STR_OP_EQ = '=='; - const STR_OP_EQ_ALT = '='; - const STR_OP_LT = '<'; - const STR_OP_LE = '<='; - const STR_OP_GT = '>'; - const STR_OP_GE = '>='; - const STR_OP_NE = '!='; - const STR_OP_NE_ALT = '<>'; - - /** - * Operator to integer translation table. - * - * @var array - * @phpstan-var array - */ - private static $transOpStr = array( - '=' => self::OP_EQ, - '==' => self::OP_EQ, - '<' => self::OP_LT, - '<=' => self::OP_LE, - '>' => self::OP_GT, - '>=' => self::OP_GE, - '<>' => self::OP_NE, - '!=' => self::OP_NE, - ); - - /** - * Integer to operator translation table. - * - * @var array - * @phpstan-var array - */ - private static $transOpInt = array( - self::OP_EQ => '==', - self::OP_LT => '<', - self::OP_LE => '<=', - self::OP_GT => '>', - self::OP_GE => '>=', - self::OP_NE => '!=', - ); - - /** - * @var int - * @phpstan-var self::OP_* - */ - protected $operator; - - /** @var string */ - protected $version; - - /** @var string|null */ - protected $prettyString; - - /** @var Bound */ - protected $lowerBound; - - /** @var Bound */ - protected $upperBound; - - /** - * Sets operator and version to compare with. - * - * @param string $operator - * @param string $version - * - * @throws \InvalidArgumentException if invalid operator is given. - * - * @phpstan-param self::STR_OP_* $operator - */ - public function __construct($operator, $version) - { - if (!isset(self::$transOpStr[$operator])) { - throw new \InvalidArgumentException(sprintf( - 'Invalid operator "%s" given, expected one of: %s', - $operator, - implode(', ', self::getSupportedOperators()) - )); - } - - $this->operator = self::$transOpStr[$operator]; - $this->version = $version; - } - - /** - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * @return string - * - * @phpstan-return self::STR_OP_* - */ - public function getOperator() - { - return self::$transOpInt[$this->operator]; - } - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if ($provider instanceof self) { - return $this->matchSpecific($provider); - } - - // turn matching around to find a match - return $provider->matches($this); - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return $this->__toString(); - } - - /** - * Get all supported comparison operators. - * - * @return array - * - * @phpstan-return list - */ - public static function getSupportedOperators() - { - return array_keys(self::$transOpStr); - } - - /** - * @param string $operator - * @return int - * - * @phpstan-param self::STR_OP_* $operator - * @phpstan-return self::OP_* - */ - public static function getOperatorConstant($operator) - { - return self::$transOpStr[$operator]; - } - - /** - * @param string $a - * @param string $b - * @param string $operator - * @param bool $compareBranches - * - * @throws \InvalidArgumentException if invalid operator is given. - * - * @return bool - * - * @phpstan-param self::STR_OP_* $operator - */ - public function versionCompare($a, $b, $operator, $compareBranches = false) - { - if (!isset(self::$transOpStr[$operator])) { - throw new \InvalidArgumentException(sprintf( - 'Invalid operator "%s" given, expected one of: %s', - $operator, - implode(', ', self::getSupportedOperators()) - )); - } - - $aIsBranch = strpos($a, 'dev-') === 0; - $bIsBranch = strpos($b, 'dev-') === 0; - - if ($operator === '!=' && ($aIsBranch || $bIsBranch)) { - return $a !== $b; - } - - if ($aIsBranch && $bIsBranch) { - return $operator === '==' && $a === $b; - } - - // when branches are not comparable, we make sure dev branches never match anything - if (!$compareBranches && ($aIsBranch || $bIsBranch)) { - return false; - } - - return \version_compare($a, $b, $operator); - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - if (strpos($this->version, 'dev-') === 0) { - if (self::OP_EQ === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('$b && $v === %s', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return sprintf('!$b || $v !== %s', \var_export($this->version, true)); - } - return 'false'; - } - - if (self::OP_NE === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('!$b || $v !== %s', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return 'true'; - } - return '!$b'; - } - - return 'false'; - } - - if (self::OP_EQ === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('\version_compare($v, %s, \'==\')', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return sprintf('$b || \version_compare($v, %s, \'!=\')', \var_export($this->version, true)); - } - - return sprintf('!$b && \version_compare(%s, $v, \'%s\')', \var_export($this->version, true), self::$transOpInt[$otherOperator]); - } - - if (self::OP_NE === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('$b || (!$b && \version_compare($v, %s, \'!=\'))', \var_export($this->version, true)); - } - - if (self::OP_NE === $otherOperator) { - return 'true'; - } - return '!$b'; - } - - if (self::OP_LT === $this->operator || self::OP_LE === $this->operator) { - if (self::OP_LT === $otherOperator || self::OP_LE === $otherOperator) { - return '!$b'; - } - } else { // $this->operator must be self::OP_GT || self::OP_GE here - if (self::OP_GT === $otherOperator || self::OP_GE === $otherOperator) { - return '!$b'; - } - } - - if (self::OP_NE === $otherOperator) { - return 'true'; - } - - $codeComparison = sprintf('\version_compare($v, %s, \'%s\')', \var_export($this->version, true), self::$transOpInt[$this->operator]); - if ($this->operator === self::OP_LE) { - if ($otherOperator === self::OP_GT) { - return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; - } - } elseif ($this->operator === self::OP_GE) { - if ($otherOperator === self::OP_LT) { - return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; - } - } - - return sprintf('!$b && %s', $codeComparison); - } - - /** - * @param Constraint $provider - * @param bool $compareBranches - * - * @return bool - */ - public function matchSpecific(Constraint $provider, $compareBranches = false) - { - $noEqualOp = str_replace('=', '', self::$transOpInt[$this->operator]); - $providerNoEqualOp = str_replace('=', '', self::$transOpInt[$provider->operator]); - - $isEqualOp = self::OP_EQ === $this->operator; - $isNonEqualOp = self::OP_NE === $this->operator; - $isProviderEqualOp = self::OP_EQ === $provider->operator; - $isProviderNonEqualOp = self::OP_NE === $provider->operator; - - // '!=' operator is match when other operator is not '==' operator or version is not match - // these kinds of comparisons always have a solution - if ($isNonEqualOp || $isProviderNonEqualOp) { - if ($isNonEqualOp && !$isProviderNonEqualOp && !$isProviderEqualOp && strpos($provider->version, 'dev-') === 0) { - return false; - } - - if ($isProviderNonEqualOp && !$isNonEqualOp && !$isEqualOp && strpos($this->version, 'dev-') === 0) { - return false; - } - - if (!$isEqualOp && !$isProviderEqualOp) { - return true; - } - return $this->versionCompare($provider->version, $this->version, '!=', $compareBranches); - } - - // an example for the condition is <= 2.0 & < 1.0 - // these kinds of comparisons always have a solution - if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) { - return !(strpos($this->version, 'dev-') === 0 || strpos($provider->version, 'dev-') === 0); - } - - $version1 = $isEqualOp ? $this->version : $provider->version; - $version2 = $isEqualOp ? $provider->version : $this->version; - $operator = $isEqualOp ? $provider->operator : $this->operator; - - if ($this->versionCompare($version1, $version2, self::$transOpInt[$operator], $compareBranches)) { - // special case, e.g. require >= 1.0 and provide < 1.0 - // 1.0 >= 1.0 but 1.0 is outside of the provided interval - - return !(self::$transOpInt[$provider->operator] === $providerNoEqualOp - && self::$transOpInt[$this->operator] !== $noEqualOp - && \version_compare($provider->version, $this->version, '==')); - } - - return false; - } - - /** - * @return string - */ - public function __toString() - { - return self::$transOpInt[$this->operator] . ' ' . $this->version; - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - $this->extractBounds(); - - return $this->lowerBound; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - $this->extractBounds(); - - return $this->upperBound; - } - - /** - * @return void - */ - private function extractBounds() - { - if (null !== $this->lowerBound) { - return; - } - - // Branches - if (strpos($this->version, 'dev-') === 0) { - $this->lowerBound = Bound::zero(); - $this->upperBound = Bound::positiveInfinity(); - - return; - } - - switch ($this->operator) { - case self::OP_EQ: - $this->lowerBound = new Bound($this->version, true); - $this->upperBound = new Bound($this->version, true); - break; - case self::OP_LT: - $this->lowerBound = Bound::zero(); - $this->upperBound = new Bound($this->version, false); - break; - case self::OP_LE: - $this->lowerBound = Bound::zero(); - $this->upperBound = new Bound($this->version, true); - break; - case self::OP_GT: - $this->lowerBound = new Bound($this->version, false); - $this->upperBound = Bound::positiveInfinity(); - break; - case self::OP_GE: - $this->lowerBound = new Bound($this->version, true); - $this->upperBound = Bound::positiveInfinity(); - break; - case self::OP_NE: - $this->lowerBound = Bound::zero(); - $this->upperBound = Bound::positiveInfinity(); - break; - } - } -} diff --git a/old_vendor/composer/semver/src/Constraint/ConstraintInterface.php b/old_vendor/composer/semver/src/Constraint/ConstraintInterface.php deleted file mode 100644 index 389b935b..00000000 --- a/old_vendor/composer/semver/src/Constraint/ConstraintInterface.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * DO NOT IMPLEMENT this interface. It is only meant for usage as a type hint - * in libraries relying on composer/semver but creating your own constraint class - * that implements this interface is not a supported use case and will cause the - * composer/semver components to return unexpected results. - */ -interface ConstraintInterface -{ - /** - * Checks whether the given constraint intersects in any way with this constraint - * - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider); - - /** - * Provides a compiled version of the constraint for the given operator - * The compiled version must be a PHP expression. - * Executor of compile version must provide 2 variables: - * - $v = the string version to compare with - * - $b = whether or not the version is a non-comparable branch (starts with "dev-") - * - * @see Constraint::OP_* for the list of available operators. - * @example return '!$b && version_compare($v, '1.0', '>')'; - * - * @param int $otherOperator one Constraint::OP_* - * - * @return string - * - * @phpstan-param Constraint::OP_* $otherOperator - */ - public function compile($otherOperator); - - /** - * @return Bound - */ - public function getUpperBound(); - - /** - * @return Bound - */ - public function getLowerBound(); - - /** - * @return string - */ - public function getPrettyString(); - - /** - * @param string|null $prettyString - * - * @return void - */ - public function setPrettyString($prettyString); - - /** - * @return string - */ - public function __toString(); -} diff --git a/old_vendor/composer/semver/src/Constraint/MatchAllConstraint.php b/old_vendor/composer/semver/src/Constraint/MatchAllConstraint.php deleted file mode 100644 index 5e51af95..00000000 --- a/old_vendor/composer/semver/src/Constraint/MatchAllConstraint.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines the absence of a constraint. - * - * This constraint matches everything. - */ -class MatchAllConstraint implements ConstraintInterface -{ - /** @var string|null */ - protected $prettyString; - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - return true; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - return 'true'; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - return '*'; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - return Bound::positiveInfinity(); - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - return Bound::zero(); - } -} diff --git a/old_vendor/composer/semver/src/Constraint/MatchNoneConstraint.php b/old_vendor/composer/semver/src/Constraint/MatchNoneConstraint.php deleted file mode 100644 index dadcf622..00000000 --- a/old_vendor/composer/semver/src/Constraint/MatchNoneConstraint.php +++ /dev/null @@ -1,83 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Blackhole of constraints, nothing escapes it - */ -class MatchNoneConstraint implements ConstraintInterface -{ - /** @var string|null */ - protected $prettyString; - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - return false; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - return 'false'; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - return '[]'; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - return new Bound('0.0.0.0-dev', false); - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - return new Bound('0.0.0.0-dev', false); - } -} diff --git a/old_vendor/composer/semver/src/Constraint/MultiConstraint.php b/old_vendor/composer/semver/src/Constraint/MultiConstraint.php deleted file mode 100644 index 1f4c0061..00000000 --- a/old_vendor/composer/semver/src/Constraint/MultiConstraint.php +++ /dev/null @@ -1,325 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines a conjunctive or disjunctive set of constraints. - */ -class MultiConstraint implements ConstraintInterface -{ - /** - * @var ConstraintInterface[] - * @phpstan-var non-empty-array - */ - protected $constraints; - - /** @var string|null */ - protected $prettyString; - - /** @var string|null */ - protected $string; - - /** @var bool */ - protected $conjunctive; - - /** @var Bound|null */ - protected $lowerBound; - - /** @var Bound|null */ - protected $upperBound; - - /** - * @param ConstraintInterface[] $constraints A set of constraints - * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive - * - * @throws \InvalidArgumentException If less than 2 constraints are passed - */ - public function __construct(array $constraints, $conjunctive = true) - { - if (\count($constraints) < 2) { - throw new \InvalidArgumentException( - 'Must provide at least two constraints for a MultiConstraint. Use '. - 'the regular Constraint class for one constraint only or MatchAllConstraint for none. You may use '. - 'MultiConstraint::create() which optimizes and handles those cases automatically.' - ); - } - - $this->constraints = $constraints; - $this->conjunctive = $conjunctive; - } - - /** - * @return ConstraintInterface[] - */ - public function getConstraints() - { - return $this->constraints; - } - - /** - * @return bool - */ - public function isConjunctive() - { - return $this->conjunctive; - } - - /** - * @return bool - */ - public function isDisjunctive() - { - return !$this->conjunctive; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - $parts = array(); - foreach ($this->constraints as $constraint) { - $code = $constraint->compile($otherOperator); - if ($code === 'true') { - if (!$this->conjunctive) { - return 'true'; - } - } elseif ($code === 'false') { - if ($this->conjunctive) { - return 'false'; - } - } else { - $parts[] = '('.$code.')'; - } - } - - if (!$parts) { - return $this->conjunctive ? 'true' : 'false'; - } - - return $this->conjunctive ? implode('&&', $parts) : implode('||', $parts); - } - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if (false === $this->conjunctive) { - foreach ($this->constraints as $constraint) { - if ($provider->matches($constraint)) { - return true; - } - } - - return false; - } - - // when matching a conjunctive and a disjunctive multi constraint we have to iterate over the disjunctive one - // otherwise we'd return true if different parts of the disjunctive constraint match the conjunctive one - // which would lead to incorrect results, e.g. [>1 and <2] would match [<1 or >2] although they do not intersect - if ($provider instanceof MultiConstraint && $provider->isDisjunctive()) { - return $provider->matches($this); - } - - foreach ($this->constraints as $constraint) { - if (!$provider->matches($constraint)) { - return false; - } - } - - return true; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - if ($this->string !== null) { - return $this->string; - } - - $constraints = array(); - foreach ($this->constraints as $constraint) { - $constraints[] = (string) $constraint; - } - - return $this->string = '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']'; - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - $this->extractBounds(); - - if (null === $this->lowerBound) { - throw new \LogicException('extractBounds should have populated the lowerBound property'); - } - - return $this->lowerBound; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - $this->extractBounds(); - - if (null === $this->upperBound) { - throw new \LogicException('extractBounds should have populated the upperBound property'); - } - - return $this->upperBound; - } - - /** - * Tries to optimize the constraints as much as possible, meaning - * reducing/collapsing congruent constraints etc. - * Does not necessarily return a MultiConstraint instance if - * things can be reduced to a simple constraint - * - * @param ConstraintInterface[] $constraints A set of constraints - * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive - * - * @return ConstraintInterface - */ - public static function create(array $constraints, $conjunctive = true) - { - if (0 === \count($constraints)) { - return new MatchAllConstraint(); - } - - if (1 === \count($constraints)) { - return $constraints[0]; - } - - $optimized = self::optimizeConstraints($constraints, $conjunctive); - if ($optimized !== null) { - list($constraints, $conjunctive) = $optimized; - if (\count($constraints) === 1) { - return $constraints[0]; - } - } - - return new self($constraints, $conjunctive); - } - - /** - * @param ConstraintInterface[] $constraints - * @param bool $conjunctive - * @return ?array - * - * @phpstan-return array{0: list, 1: bool}|null - */ - private static function optimizeConstraints(array $constraints, $conjunctive) - { - // parse the two OR groups and if they are contiguous we collapse - // them into one constraint - // [>= 1 < 2] || [>= 2 < 3] || [>= 3 < 4] => [>= 1 < 4] - if (!$conjunctive) { - $left = $constraints[0]; - $mergedConstraints = array(); - $optimized = false; - for ($i = 1, $l = \count($constraints); $i < $l; $i++) { - $right = $constraints[$i]; - if ( - $left instanceof self - && $left->conjunctive - && $right instanceof self - && $right->conjunctive - && \count($left->constraints) === 2 - && \count($right->constraints) === 2 - && ($left0 = (string) $left->constraints[0]) - && $left0[0] === '>' && $left0[1] === '=' - && ($left1 = (string) $left->constraints[1]) - && $left1[0] === '<' - && ($right0 = (string) $right->constraints[0]) - && $right0[0] === '>' && $right0[1] === '=' - && ($right1 = (string) $right->constraints[1]) - && $right1[0] === '<' - && substr($left1, 2) === substr($right0, 3) - ) { - $optimized = true; - $left = new MultiConstraint( - array( - $left->constraints[0], - $right->constraints[1], - ), - true); - } else { - $mergedConstraints[] = $left; - $left = $right; - } - } - if ($optimized) { - $mergedConstraints[] = $left; - return array($mergedConstraints, false); - } - } - - // TODO: Here's the place to put more optimizations - - return null; - } - - /** - * @return void - */ - private function extractBounds() - { - if (null !== $this->lowerBound) { - return; - } - - foreach ($this->constraints as $constraint) { - if (null === $this->lowerBound || null === $this->upperBound) { - $this->lowerBound = $constraint->getLowerBound(); - $this->upperBound = $constraint->getUpperBound(); - continue; - } - - if ($constraint->getLowerBound()->compareTo($this->lowerBound, $this->isConjunctive() ? '>' : '<')) { - $this->lowerBound = $constraint->getLowerBound(); - } - - if ($constraint->getUpperBound()->compareTo($this->upperBound, $this->isConjunctive() ? '<' : '>')) { - $this->upperBound = $constraint->getUpperBound(); - } - } - } -} diff --git a/old_vendor/composer/semver/src/Interval.php b/old_vendor/composer/semver/src/Interval.php deleted file mode 100644 index 43d5a4f5..00000000 --- a/old_vendor/composer/semver/src/Interval.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Interval -{ - /** @var Constraint */ - private $start; - /** @var Constraint */ - private $end; - - public function __construct(Constraint $start, Constraint $end) - { - $this->start = $start; - $this->end = $end; - } - - /** - * @return Constraint - */ - public function getStart() - { - return $this->start; - } - - /** - * @return Constraint - */ - public function getEnd() - { - return $this->end; - } - - /** - * @return Constraint - */ - public static function fromZero() - { - static $zero; - - if (null === $zero) { - $zero = new Constraint('>=', '0.0.0.0-dev'); - } - - return $zero; - } - - /** - * @return Constraint - */ - public static function untilPositiveInfinity() - { - static $positiveInfinity; - - if (null === $positiveInfinity) { - $positiveInfinity = new Constraint('<', PHP_INT_MAX.'.0.0.0'); - } - - return $positiveInfinity; - } - - /** - * @return self - */ - public static function any() - { - return new self(self::fromZero(), self::untilPositiveInfinity()); - } - - /** - * @return array{'names': string[], 'exclude': bool} - */ - public static function anyDev() - { - // any == exclude nothing - return array('names' => array(), 'exclude' => true); - } - - /** - * @return array{'names': string[], 'exclude': bool} - */ - public static function noDev() - { - // nothing == no names included - return array('names' => array(), 'exclude' => false); - } -} diff --git a/old_vendor/composer/semver/src/Intervals.php b/old_vendor/composer/semver/src/Intervals.php deleted file mode 100644 index d889d0ad..00000000 --- a/old_vendor/composer/semver/src/Intervals.php +++ /dev/null @@ -1,478 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; -use Composer\Semver\Constraint\ConstraintInterface; -use Composer\Semver\Constraint\MatchAllConstraint; -use Composer\Semver\Constraint\MatchNoneConstraint; -use Composer\Semver\Constraint\MultiConstraint; - -/** - * Helper class generating intervals from constraints - * - * This contains utilities for: - * - * - compacting an existing constraint which can be used to combine several into one - * by creating a MultiConstraint out of the many constraints you have. - * - * - checking whether one subset is a subset of another. - * - * Note: You should call clear to free memoization memory usage when you are done using this class - */ -class Intervals -{ - /** - * @phpstan-var array - */ - private static $intervalsCache = array(); - - /** - * @phpstan-var array - */ - private static $opSortOrder = array( - '>=' => -3, - '<' => -2, - '>' => 2, - '<=' => 3, - ); - - /** - * Clears the memoization cache once you are done - * - * @return void - */ - public static function clear() - { - self::$intervalsCache = array(); - } - - /** - * Checks whether $candidate is a subset of $constraint - * - * @return bool - */ - public static function isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint) - { - if ($constraint instanceof MatchAllConstraint) { - return true; - } - - if ($candidate instanceof MatchNoneConstraint || $constraint instanceof MatchNoneConstraint) { - return false; - } - - $intersectionIntervals = self::get(new MultiConstraint(array($candidate, $constraint), true)); - $candidateIntervals = self::get($candidate); - if (\count($intersectionIntervals['numeric']) !== \count($candidateIntervals['numeric'])) { - return false; - } - - foreach ($intersectionIntervals['numeric'] as $index => $interval) { - if (!isset($candidateIntervals['numeric'][$index])) { - return false; - } - - if ((string) $candidateIntervals['numeric'][$index]->getStart() !== (string) $interval->getStart()) { - return false; - } - - if ((string) $candidateIntervals['numeric'][$index]->getEnd() !== (string) $interval->getEnd()) { - return false; - } - } - - if ($intersectionIntervals['branches']['exclude'] !== $candidateIntervals['branches']['exclude']) { - return false; - } - if (\count($intersectionIntervals['branches']['names']) !== \count($candidateIntervals['branches']['names'])) { - return false; - } - foreach ($intersectionIntervals['branches']['names'] as $index => $name) { - if ($name !== $candidateIntervals['branches']['names'][$index]) { - return false; - } - } - - return true; - } - - /** - * Checks whether $a and $b have any intersection, equivalent to $a->matches($b) - * - * @return bool - */ - public static function haveIntersections(ConstraintInterface $a, ConstraintInterface $b) - { - if ($a instanceof MatchAllConstraint || $b instanceof MatchAllConstraint) { - return true; - } - - if ($a instanceof MatchNoneConstraint || $b instanceof MatchNoneConstraint) { - return false; - } - - $intersectionIntervals = self::generateIntervals(new MultiConstraint(array($a, $b), true), true); - - return \count($intersectionIntervals['numeric']) > 0 || $intersectionIntervals['branches']['exclude'] || \count($intersectionIntervals['branches']['names']) > 0; - } - - /** - * Attempts to optimize a MultiConstraint - * - * When merging MultiConstraints together they can get very large, this will - * compact it by looking at the real intervals covered by all the constraints - * and then creates a new constraint containing only the smallest amount of rules - * to match the same intervals. - * - * @return ConstraintInterface - */ - public static function compactConstraint(ConstraintInterface $constraint) - { - if (!$constraint instanceof MultiConstraint) { - return $constraint; - } - - $intervals = self::generateIntervals($constraint); - $constraints = array(); - $hasNumericMatchAll = false; - - if (\count($intervals['numeric']) === 1 && (string) $intervals['numeric'][0]->getStart() === (string) Interval::fromZero() && (string) $intervals['numeric'][0]->getEnd() === (string) Interval::untilPositiveInfinity()) { - $constraints[] = $intervals['numeric'][0]->getStart(); - $hasNumericMatchAll = true; - } else { - $unEqualConstraints = array(); - for ($i = 0, $count = \count($intervals['numeric']); $i < $count; $i++) { - $interval = $intervals['numeric'][$i]; - - // if current interval ends with < N and next interval begins with > N we can swap this out for != N - // but this needs to happen as a conjunctive expression together with the start of the current interval - // and end of next interval, so [>=M, N, [>=M, !=N, getEnd()->getOperator() === '<' && $i+1 < $count) { - $nextInterval = $intervals['numeric'][$i+1]; - if ($interval->getEnd()->getVersion() === $nextInterval->getStart()->getVersion() && $nextInterval->getStart()->getOperator() === '>') { - // only add a start if we didn't already do so, can be skipped if we're looking at second - // interval in [>=M, N, P, =M, !=N] already and we only want to add !=P right now - if (\count($unEqualConstraints) === 0 && (string) $interval->getStart() !== (string) Interval::fromZero()) { - $unEqualConstraints[] = $interval->getStart(); - } - $unEqualConstraints[] = new Constraint('!=', $interval->getEnd()->getVersion()); - continue; - } - } - - if (\count($unEqualConstraints) > 0) { - // this is where the end of the following interval of a != constraint is added as explained above - if ((string) $interval->getEnd() !== (string) Interval::untilPositiveInfinity()) { - $unEqualConstraints[] = $interval->getEnd(); - } - - // count is 1 if entire constraint is just one != expression - if (\count($unEqualConstraints) > 1) { - $constraints[] = new MultiConstraint($unEqualConstraints, true); - } else { - $constraints[] = $unEqualConstraints[0]; - } - - $unEqualConstraints = array(); - continue; - } - - // convert back >= x - <= x intervals to == x - if ($interval->getStart()->getVersion() === $interval->getEnd()->getVersion() && $interval->getStart()->getOperator() === '>=' && $interval->getEnd()->getOperator() === '<=') { - $constraints[] = new Constraint('==', $interval->getStart()->getVersion()); - continue; - } - - if ((string) $interval->getStart() === (string) Interval::fromZero()) { - $constraints[] = $interval->getEnd(); - } elseif ((string) $interval->getEnd() === (string) Interval::untilPositiveInfinity()) { - $constraints[] = $interval->getStart(); - } else { - $constraints[] = new MultiConstraint(array($interval->getStart(), $interval->getEnd()), true); - } - } - } - - $devConstraints = array(); - - if (0 === \count($intervals['branches']['names'])) { - if ($intervals['branches']['exclude']) { - if ($hasNumericMatchAll) { - return new MatchAllConstraint; - } - // otherwise constraint should contain a != operator and already cover this - } - } else { - foreach ($intervals['branches']['names'] as $branchName) { - if ($intervals['branches']['exclude']) { - $devConstraints[] = new Constraint('!=', $branchName); - } else { - $devConstraints[] = new Constraint('==', $branchName); - } - } - - // excluded branches, e.g. != dev-foo are conjunctive with the interval, so - // > 2.0 != dev-foo must return a conjunctive constraint - if ($intervals['branches']['exclude']) { - if (\count($constraints) > 1) { - return new MultiConstraint(array_merge( - array(new MultiConstraint($constraints, false)), - $devConstraints - ), true); - } - - if (\count($constraints) === 1 && (string)$constraints[0] === (string)Interval::fromZero()) { - if (\count($devConstraints) > 1) { - return new MultiConstraint($devConstraints, true); - } - return $devConstraints[0]; - } - - return new MultiConstraint(array_merge($constraints, $devConstraints), true); - } - - // otherwise devConstraints contains a list of == operators for branches which are disjunctive with the - // rest of the constraint - $constraints = array_merge($constraints, $devConstraints); - } - - if (\count($constraints) > 1) { - return new MultiConstraint($constraints, false); - } - - if (\count($constraints) === 1) { - return $constraints[0]; - } - - return new MatchNoneConstraint; - } - - /** - * Creates an array of numeric intervals and branch constraints representing a given constraint - * - * if the returned numeric array is empty it means the constraint matches nothing in the numeric range (0 - +inf) - * if the returned branches array is empty it means no dev-* versions are matched - * if a constraint matches all possible dev-* versions, branches will contain Interval::anyDev() - * - * @return array - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - public static function get(ConstraintInterface $constraint) - { - $key = (string) $constraint; - - if (!isset(self::$intervalsCache[$key])) { - self::$intervalsCache[$key] = self::generateIntervals($constraint); - } - - return self::$intervalsCache[$key]; - } - - /** - * @param bool $stopOnFirstValidInterval - * - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - private static function generateIntervals(ConstraintInterface $constraint, $stopOnFirstValidInterval = false) - { - if ($constraint instanceof MatchAllConstraint) { - return array('numeric' => array(new Interval(Interval::fromZero(), Interval::untilPositiveInfinity())), 'branches' => Interval::anyDev()); - } - - if ($constraint instanceof MatchNoneConstraint) { - return array('numeric' => array(), 'branches' => array('names' => array(), 'exclude' => false)); - } - - if ($constraint instanceof Constraint) { - return self::generateSingleConstraintIntervals($constraint); - } - - if (!$constraint instanceof MultiConstraint) { - throw new \UnexpectedValueException('The constraint passed in should be an MatchAllConstraint, Constraint or MultiConstraint instance, got '.\get_class($constraint).'.'); - } - - $constraints = $constraint->getConstraints(); - - $numericGroups = array(); - $constraintBranches = array(); - foreach ($constraints as $c) { - $res = self::get($c); - $numericGroups[] = $res['numeric']; - $constraintBranches[] = $res['branches']; - } - - if ($constraint->isDisjunctive()) { - $branches = Interval::noDev(); - foreach ($constraintBranches as $b) { - if ($b['exclude']) { - if ($branches['exclude']) { - // disjunctive constraint, so only exclude what's excluded in all constraints - // !=a,!=b || !=b,!=c => !=b - $branches['names'] = array_intersect($branches['names'], $b['names']); - } else { - // disjunctive constraint so exclude all names which are not explicitly included in the alternative - // (==b || ==c) || !=a,!=b => !=a - $branches['exclude'] = true; - $branches['names'] = array_diff($b['names'], $branches['names']); - } - } else { - if ($branches['exclude']) { - // disjunctive constraint so exclude all names which are not explicitly included in the alternative - // !=a,!=b || (==b || ==c) => !=a - $branches['names'] = array_diff($branches['names'], $b['names']); - } else { - // disjunctive constraint, so just add all the other branches - // (==a || ==b) || ==c => ==a || ==b || ==c - $branches['names'] = array_merge($branches['names'], $b['names']); - } - } - } - } else { - $branches = Interval::anyDev(); - foreach ($constraintBranches as $b) { - if ($b['exclude']) { - if ($branches['exclude']) { - // conjunctive, so just add all branch names to be excluded - // !=a && !=b => !=a,!=b - $branches['names'] = array_merge($branches['names'], $b['names']); - } else { - // conjunctive, so only keep included names which are not excluded - // (==a||==c) && !=a,!=b => ==c - $branches['names'] = array_diff($branches['names'], $b['names']); - } - } else { - if ($branches['exclude']) { - // conjunctive, so only keep included names which are not excluded - // !=a,!=b && (==a||==c) => ==c - $branches['names'] = array_diff($b['names'], $branches['names']); - $branches['exclude'] = false; - } else { - // conjunctive, so only keep names that are included in both - // (==a||==b) && (==a||==c) => ==a - $branches['names'] = array_intersect($branches['names'], $b['names']); - } - } - } - } - - $branches['names'] = array_unique($branches['names']); - - if (\count($numericGroups) === 1) { - return array('numeric' => $numericGroups[0], 'branches' => $branches); - } - - $borders = array(); - foreach ($numericGroups as $group) { - foreach ($group as $interval) { - $borders[] = array('version' => $interval->getStart()->getVersion(), 'operator' => $interval->getStart()->getOperator(), 'side' => 'start'); - $borders[] = array('version' => $interval->getEnd()->getVersion(), 'operator' => $interval->getEnd()->getOperator(), 'side' => 'end'); - } - } - - $opSortOrder = self::$opSortOrder; - usort($borders, function ($a, $b) use ($opSortOrder) { - $order = version_compare($a['version'], $b['version']); - if ($order === 0) { - return $opSortOrder[$a['operator']] - $opSortOrder[$b['operator']]; - } - - return $order; - }); - - $activeIntervals = 0; - $intervals = array(); - $index = 0; - $activationThreshold = $constraint->isConjunctive() ? \count($numericGroups) : 1; - $start = null; - foreach ($borders as $border) { - if ($border['side'] === 'start') { - $activeIntervals++; - } else { - $activeIntervals--; - } - if (!$start && $activeIntervals >= $activationThreshold) { - $start = new Constraint($border['operator'], $border['version']); - } elseif ($start && $activeIntervals < $activationThreshold) { - // filter out invalid intervals like > x - <= x, or >= x - < x - if ( - version_compare($start->getVersion(), $border['version'], '=') - && ( - ($start->getOperator() === '>' && $border['operator'] === '<=') - || ($start->getOperator() === '>=' && $border['operator'] === '<') - ) - ) { - unset($intervals[$index]); - } else { - $intervals[$index] = new Interval($start, new Constraint($border['operator'], $border['version'])); - $index++; - - if ($stopOnFirstValidInterval) { - break; - } - } - - $start = null; - } - } - - return array('numeric' => $intervals, 'branches' => $branches); - } - - /** - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - private static function generateSingleConstraintIntervals(Constraint $constraint) - { - $op = $constraint->getOperator(); - - // handle branch constraints first - if (strpos($constraint->getVersion(), 'dev-') === 0) { - $intervals = array(); - $branches = array('names' => array(), 'exclude' => false); - - // != dev-foo means any numeric version may match, we treat >/< like != they are not really defined for branches - if ($op === '!=') { - $intervals[] = new Interval(Interval::fromZero(), Interval::untilPositiveInfinity()); - $branches = array('names' => array($constraint->getVersion()), 'exclude' => true); - } elseif ($op === '==') { - $branches['names'][] = $constraint->getVersion(); - } - - return array( - 'numeric' => $intervals, - 'branches' => $branches, - ); - } - - if ($op[0] === '>') { // > & >= - return array('numeric' => array(new Interval($constraint, Interval::untilPositiveInfinity())), 'branches' => Interval::noDev()); - } - if ($op[0] === '<') { // < & <= - return array('numeric' => array(new Interval(Interval::fromZero(), $constraint)), 'branches' => Interval::noDev()); - } - if ($op === '!=') { - // convert !=x to intervals of 0 - x - +inf + dev* - return array('numeric' => array( - new Interval(Interval::fromZero(), new Constraint('<', $constraint->getVersion())), - new Interval(new Constraint('>', $constraint->getVersion()), Interval::untilPositiveInfinity()), - ), 'branches' => Interval::anyDev()); - } - - // convert ==x to an interval of >=x - <=x - return array('numeric' => array( - new Interval(new Constraint('>=', $constraint->getVersion()), new Constraint('<=', $constraint->getVersion())), - ), 'branches' => Interval::noDev()); - } -} diff --git a/old_vendor/composer/semver/src/Semver.php b/old_vendor/composer/semver/src/Semver.php deleted file mode 100644 index 4d6de3c2..00000000 --- a/old_vendor/composer/semver/src/Semver.php +++ /dev/null @@ -1,129 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Semver -{ - const SORT_ASC = 1; - const SORT_DESC = -1; - - /** @var VersionParser */ - private static $versionParser; - - /** - * Determine if given version satisfies given constraints. - * - * @param string $version - * @param string $constraints - * - * @return bool - */ - public static function satisfies($version, $constraints) - { - if (null === self::$versionParser) { - self::$versionParser = new VersionParser(); - } - - $versionParser = self::$versionParser; - $provider = new Constraint('==', $versionParser->normalize($version)); - $parsedConstraints = $versionParser->parseConstraints($constraints); - - return $parsedConstraints->matches($provider); - } - - /** - * Return all versions that satisfy given constraints. - * - * @param string[] $versions - * @param string $constraints - * - * @return string[] - */ - public static function satisfiedBy(array $versions, $constraints) - { - $versions = array_filter($versions, function ($version) use ($constraints) { - return Semver::satisfies($version, $constraints); - }); - - return array_values($versions); - } - - /** - * Sort given array of versions. - * - * @param string[] $versions - * - * @return string[] - */ - public static function sort(array $versions) - { - return self::usort($versions, self::SORT_ASC); - } - - /** - * Sort given array of versions in reverse. - * - * @param string[] $versions - * - * @return string[] - */ - public static function rsort(array $versions) - { - return self::usort($versions, self::SORT_DESC); - } - - /** - * @param string[] $versions - * @param int $direction - * - * @return string[] - */ - private static function usort(array $versions, $direction) - { - if (null === self::$versionParser) { - self::$versionParser = new VersionParser(); - } - - $versionParser = self::$versionParser; - $normalized = array(); - - // Normalize outside of usort() scope for minor performance increase. - // Creates an array of arrays: [[normalized, key], ...] - foreach ($versions as $key => $version) { - $normalizedVersion = $versionParser->normalize($version); - $normalizedVersion = $versionParser->normalizeDefaultBranch($normalizedVersion); - $normalized[] = array($normalizedVersion, $key); - } - - usort($normalized, function (array $left, array $right) use ($direction) { - if ($left[0] === $right[0]) { - return 0; - } - - if (Comparator::lessThan($left[0], $right[0])) { - return -$direction; - } - - return $direction; - }); - - // Recreate input array, using the original indexes which are now in sorted order. - $sorted = array(); - foreach ($normalized as $item) { - $sorted[] = $versions[$item[1]]; - } - - return $sorted; - } -} diff --git a/old_vendor/composer/semver/src/VersionParser.php b/old_vendor/composer/semver/src/VersionParser.php deleted file mode 100644 index 202ce247..00000000 --- a/old_vendor/composer/semver/src/VersionParser.php +++ /dev/null @@ -1,586 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\ConstraintInterface; -use Composer\Semver\Constraint\MatchAllConstraint; -use Composer\Semver\Constraint\MultiConstraint; -use Composer\Semver\Constraint\Constraint; - -/** - * Version parser. - * - * @author Jordi Boggiano - */ -class VersionParser -{ - /** - * Regex to match pre-release data (sort of). - * - * Due to backwards compatibility: - * - Instead of enforcing hyphen, an underscore, dot or nothing at all are also accepted. - * - Only stabilities as recognized by Composer are allowed to precede a numerical identifier. - * - Numerical-only pre-release identifiers are not supported, see tests. - * - * |--------------| - * [major].[minor].[patch] -[pre-release] +[build-metadata] - * - * @var string - */ - private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?'; - - /** @var string */ - private static $stabilitiesRegex = 'stable|RC|beta|alpha|dev'; - - /** - * Returns the stability of a version. - * - * @param string $version - * - * @return string - * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' - */ - public static function parseStability($version) - { - $version = (string) preg_replace('{#.+$}', '', (string) $version); - - if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) { - return 'dev'; - } - - preg_match('{' . self::$modifierRegex . '(?:\+.*)?$}i', strtolower($version), $match); - - if (!empty($match[3])) { - return 'dev'; - } - - if (!empty($match[1])) { - if ('beta' === $match[1] || 'b' === $match[1]) { - return 'beta'; - } - if ('alpha' === $match[1] || 'a' === $match[1]) { - return 'alpha'; - } - if ('rc' === $match[1]) { - return 'RC'; - } - } - - return 'stable'; - } - - /** - * @param string $stability - * - * @return string - */ - public static function normalizeStability($stability) - { - $stability = strtolower((string) $stability); - - return $stability === 'rc' ? 'RC' : $stability; - } - - /** - * Normalizes a version string to be able to perform comparisons on it. - * - * @param string $version - * @param ?string $fullVersion optional complete version string to give more context - * - * @throws \UnexpectedValueException - * - * @return string - */ - public function normalize($version, $fullVersion = null) - { - $version = trim((string) $version); - $origVersion = $version; - if (null === $fullVersion) { - $fullVersion = $version; - } - - // strip off aliasing - if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) { - $version = $match[1]; - } - - // strip off stability flag - if (preg_match('{@(?:' . self::$stabilitiesRegex . ')$}i', $version, $match)) { - $version = substr($version, 0, strlen($version) - strlen($match[0])); - } - - // normalize master/trunk/default branches to dev-name for BC with 1.x as these used to be valid constraints - if (\in_array($version, array('master', 'trunk', 'default'), true)) { - $version = 'dev-' . $version; - } - - // if requirement is branch-like, use full name - if (stripos($version, 'dev-') === 0) { - return 'dev-' . substr($version, 4); - } - - // strip off build metadata - if (preg_match('{^([^,\s+]++)\+[^\s]++$}', $version, $match)) { - $version = $match[1]; - } - - // match classical versioning - if (preg_match('{^v?(\d{1,5})(\.\d++)?(\.\d++)?(\.\d++)?' . self::$modifierRegex . '$}i', $version, $matches)) { - $version = $matches[1] - . (!empty($matches[2]) ? $matches[2] : '.0') - . (!empty($matches[3]) ? $matches[3] : '.0') - . (!empty($matches[4]) ? $matches[4] : '.0'); - $index = 5; - // match date(time) based versioning - } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { - $version = preg_replace('{\D}', '.', $matches[1]); - $index = 2; - } - - // add version modifiers if a version was matched - if (isset($index)) { - if (!empty($matches[$index])) { - if ('stable' === $matches[$index]) { - return $version; - } - $version .= '-' . $this->expandStability($matches[$index]) . (isset($matches[$index + 1]) && '' !== $matches[$index + 1] ? ltrim($matches[$index + 1], '.-') : ''); - } - - if (!empty($matches[$index + 2])) { - $version .= '-dev'; - } - - return $version; - } - - // match dev branches - if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) { - try { - $normalized = $this->normalizeBranch($match[1]); - // a branch ending with -dev is only valid if it is numeric - // if it gets prefixed with dev- it means the branch name should - // have had a dev- prefix already when passed to normalize - if (strpos($normalized, 'dev-') === false) { - return $normalized; - } - } catch (\Exception $e) { - } - } - - $extraMessage = ''; - if (preg_match('{ +as +' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))?$}', $fullVersion)) { - $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version'; - } elseif (preg_match('{^' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))? +as +}', $fullVersion)) { - $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-'; - } - - throw new \UnexpectedValueException('Invalid version string "' . $origVersion . '"' . $extraMessage); - } - - /** - * Extract numeric prefix from alias, if it is in numeric format, suitable for version comparison. - * - * @param string $branch Branch name (e.g. 2.1.x-dev) - * - * @return string|false Numeric prefix if present (e.g. 2.1.) or false - */ - public function parseNumericAliasPrefix($branch) - { - if (preg_match('{^(?P(\d++\\.)*\d++)(?:\.x)?-dev$}i', (string) $branch, $matches)) { - return $matches['version'] . '.'; - } - - return false; - } - - /** - * Normalizes a branch name to be able to perform comparisons on it. - * - * @param string $name - * - * @return string - */ - public function normalizeBranch($name) - { - $name = trim((string) $name); - - if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) { - $version = ''; - for ($i = 1; $i < 5; ++$i) { - $version .= isset($matches[$i]) ? str_replace(array('*', 'X'), 'x', $matches[$i]) : '.x'; - } - - return str_replace('x', '9999999', $version) . '-dev'; - } - - return 'dev-' . $name; - } - - /** - * Normalizes a default branch name (i.e. master on git) to 9999999-dev. - * - * @param string $name - * - * @return string - * - * @deprecated No need to use this anymore in theory, Composer 2 does not normalize any branch names to 9999999-dev anymore - */ - public function normalizeDefaultBranch($name) - { - if ($name === 'dev-master' || $name === 'dev-default' || $name === 'dev-trunk') { - return '9999999-dev'; - } - - return (string) $name; - } - - /** - * Parses a constraint string into MultiConstraint and/or Constraint objects. - * - * @param string $constraints - * - * @return ConstraintInterface - */ - public function parseConstraints($constraints) - { - $prettyConstraint = (string) $constraints; - - $orConstraints = preg_split('{\s*\|\|?\s*}', trim((string) $constraints)); - if (false === $orConstraints) { - throw new \RuntimeException('Failed to preg_split string: '.$constraints); - } - $orGroups = array(); - - foreach ($orConstraints as $constraints) { - $andConstraints = preg_split('{(?< ,]) *(? 1) { - $constraintObjects = array(); - foreach ($andConstraints as $constraint) { - foreach ($this->parseConstraint($constraint) as $parsedConstraint) { - $constraintObjects[] = $parsedConstraint; - } - } - } else { - $constraintObjects = $this->parseConstraint($andConstraints[0]); - } - - if (1 === \count($constraintObjects)) { - $constraint = $constraintObjects[0]; - } else { - $constraint = new MultiConstraint($constraintObjects); - } - - $orGroups[] = $constraint; - } - - $constraint = MultiConstraint::create($orGroups, false); - - $constraint->setPrettyString($prettyConstraint); - - return $constraint; - } - - /** - * @param string $constraint - * - * @throws \UnexpectedValueException - * - * @return array - * - * @phpstan-return non-empty-array - */ - private function parseConstraint($constraint) - { - // strip off aliasing - if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) { - $constraint = $match[1]; - } - - // strip @stability flags, and keep it for later use - if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) { - $constraint = '' !== $match[1] ? $match[1] : '*'; - if ($match[2] !== 'stable') { - $stabilityModifier = $match[2]; - } - } - - // get rid of #refs as those are used by composer only - if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraint, $match)) { - $constraint = $match[1]; - } - - if (preg_match('{^(v)?[xX*](\.[xX*])*$}i', $constraint, $match)) { - if (!empty($match[1]) || !empty($match[2])) { - return array(new Constraint('>=', '0.0.0.0-dev')); - } - - return array(new MatchAllConstraint()); - } - - $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?(?:' . self::$modifierRegex . '|\.([xX*][.-]?dev))(?:\+[^\s]+)?'; - - // Tilde Range - // - // Like wildcard constraints, unsuffixed tilde constraints say that they must be greater than the previous - // version, to ensure that unstable instances of the current version are allowed. However, if a stability - // suffix is added to the constraint, then a >= match on the current version is used instead. - if (preg_match('{^~>?' . $versionRegex . '$}i', $constraint, $matches)) { - if (strpos($constraint, '~>') === 0) { - throw new \UnexpectedValueException( - 'Could not parse version constraint ' . $constraint . ': ' . - 'Invalid operator "~>", you probably meant to use the "~" operator' - ); - } - - // Work out which position in the version we are operating at - if (isset($matches[4]) && '' !== $matches[4] && null !== $matches[4]) { - $position = 4; - } elseif (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) { - $position = 3; - } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) { - $position = 2; - } else { - $position = 1; - } - - // when matching 2.x-dev or 3.0.x-dev we have to shift the second or third number, despite no second/third number matching above - if (!empty($matches[8])) { - $position++; - } - - // Calculate the stability suffix - $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { - $stabilitySuffix .= '-dev'; - } - - $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1)); - $lowerBound = new Constraint('>=', $lowVersion); - - // For upper bound, we increment the position of one more significance, - // but highPosition = 0 would be illegal - $highPosition = max(1, $position - 1); - $highVersion = $this->manipulateVersionString($matches, $highPosition, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - - return array( - $lowerBound, - $upperBound, - ); - } - - // Caret Range - // - // Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple. - // In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for - // versions 0.X >=0.1.0, and no updates for versions 0.0.X - if (preg_match('{^\^' . $versionRegex . '($)}i', $constraint, $matches)) { - // Work out which position in the version we are operating at - if ('0' !== $matches[1] || '' === $matches[2] || null === $matches[2]) { - $position = 1; - } elseif ('0' !== $matches[2] || '' === $matches[3] || null === $matches[3]) { - $position = 2; - } else { - $position = 3; - } - - // Calculate the stability suffix - $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { - $stabilitySuffix .= '-dev'; - } - - $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1)); - $lowerBound = new Constraint('>=', $lowVersion); - - // For upper bound, we increment the position of one more significance, - // but highPosition = 0 would be illegal - $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - - return array( - $lowerBound, - $upperBound, - ); - } - - // X Range - // - // Any of X, x, or * may be used to "stand in" for one of the numeric values in the [major, minor, patch] tuple. - // A partial version range is treated as an X-Range, so the special character is in fact optional. - if (preg_match('{^v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.[xX*])++$}', $constraint, $matches)) { - if (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) { - $position = 3; - } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) { - $position = 2; - } else { - $position = 1; - } - - $lowVersion = $this->manipulateVersionString($matches, $position) . '-dev'; - $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev'; - - if ($lowVersion === '0.0.0.0-dev') { - return array(new Constraint('<', $highVersion)); - } - - return array( - new Constraint('>=', $lowVersion), - new Constraint('<', $highVersion), - ); - } - - // Hyphen Range - // - // Specifies an inclusive set. If a partial version is provided as the first version in the inclusive range, - // then the missing pieces are replaced with zeroes. If a partial version is provided as the second version in - // the inclusive range, then all versions that start with the supplied parts of the tuple are accepted, but - // nothing that would be greater than the provided tuple parts. - if (preg_match('{^(?P' . $versionRegex . ') +- +(?P' . $versionRegex . ')($)}i', $constraint, $matches)) { - // Calculate the stability suffix - $lowStabilitySuffix = ''; - if (empty($matches[6]) && empty($matches[8]) && empty($matches[9])) { - $lowStabilitySuffix = '-dev'; - } - - $lowVersion = $this->normalize($matches['from']); - $lowerBound = new Constraint('>=', $lowVersion . $lowStabilitySuffix); - - $empty = function ($x) { - return ($x === 0 || $x === '0') ? false : empty($x); - }; - - if ((!$empty($matches[12]) && !$empty($matches[13])) || !empty($matches[15]) || !empty($matches[17]) || !empty($matches[18])) { - $highVersion = $this->normalize($matches['to']); - $upperBound = new Constraint('<=', $highVersion); - } else { - $highMatch = array('', $matches[11], $matches[12], $matches[13], $matches[14]); - - // validate to version - $this->normalize($matches['to']); - - $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[12]) ? 1 : 2, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - } - - return array( - $lowerBound, - $upperBound, - ); - } - - // Basic Comparators - if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) { - try { - try { - $version = $this->normalize($matches[2]); - } catch (\UnexpectedValueException $e) { - // recover from an invalid constraint like foobar-dev which should be dev-foobar - // except if the constraint uses a known operator, in which case it must be a parse error - if (substr($matches[2], -4) === '-dev' && preg_match('{^[0-9a-zA-Z-./]+$}', $matches[2])) { - $version = $this->normalize('dev-'.substr($matches[2], 0, -4)); - } else { - throw $e; - } - } - - $op = $matches[1] ?: '='; - - if ($op !== '==' && $op !== '=' && !empty($stabilityModifier) && self::parseStability($version) === 'stable') { - $version .= '-' . $stabilityModifier; - } elseif ('<' === $op || '>=' === $op) { - if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) { - if (strpos($matches[2], 'dev-') !== 0) { - $version .= '-dev'; - } - } - } - - return array(new Constraint($matches[1] ?: '=', $version)); - } catch (\Exception $e) { - } - } - - $message = 'Could not parse version constraint ' . $constraint; - if (isset($e)) { - $message .= ': ' . $e->getMessage(); - } - - throw new \UnexpectedValueException($message); - } - - /** - * Increment, decrement, or simply pad a version number. - * - * Support function for {@link parseConstraint()} - * - * @param array $matches Array with version parts in array indexes 1,2,3,4 - * @param int $position 1,2,3,4 - which segment of the version to increment/decrement - * @param int $increment - * @param string $pad The string to pad version parts after $position - * - * @return string|null The new version - * - * @phpstan-param string[] $matches - */ - private function manipulateVersionString(array $matches, $position, $increment = 0, $pad = '0') - { - for ($i = 4; $i > 0; --$i) { - if ($i > $position) { - $matches[$i] = $pad; - } elseif ($i === $position && $increment) { - $matches[$i] += $increment; - // If $matches[$i] was 0, carry the decrement - if ($matches[$i] < 0) { - $matches[$i] = $pad; - --$position; - - // Return null on a carry overflow - if ($i === 1) { - return null; - } - } - } - } - - return $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4]; - } - - /** - * Expand shorthand stability string to long version. - * - * @param string $stability - * - * @return string - */ - private function expandStability($stability) - { - $stability = strtolower($stability); - - switch ($stability) { - case 'a': - return 'alpha'; - case 'b': - return 'beta'; - case 'p': - case 'pl': - return 'patch'; - case 'rc': - return 'RC'; - default: - return $stability; - } - } -} diff --git a/old_vendor/composer/xdebug-handler/CHANGELOG.md b/old_vendor/composer/xdebug-handler/CHANGELOG.md deleted file mode 100644 index c5b5bcf4..00000000 --- a/old_vendor/composer/xdebug-handler/CHANGELOG.md +++ /dev/null @@ -1,134 +0,0 @@ -## [Unreleased] - -## [3.0.3] - 2022-02-25 - * Added: support for composer/pcre versions 2 and 3. - -## [3.0.2] - 2022-02-24 - * Fixed: regression in 3.0.1 affecting Xdebug 2 - -## [3.0.1] - 2022-01-04 - * Fixed: error when calling `isXdebugActive` before class instantiation. - -## [3.0.0] - 2021-12-23 - * Removed: support for legacy PHP versions (< PHP 7.2.5). - * Added: type declarations to arguments and return values. - * Added: strict typing to all classes. - -## [2.0.3] - 2021-12-08 - * Added: support, type annotations and refactoring for stricter PHPStan analysis. - -## [2.0.2] - 2021-07-31 - * Added: support for `xdebug_info('mode')` in Xdebug 3.1. - * Added: support for Psr\Log versions 2 and 3. - * Fixed: remove ini directives from non-cli HOST/PATH sections. - -## [2.0.1] - 2021-05-05 - * Fixed: don't restart if the cwd is a UNC path and cmd.exe will be invoked. - -## [2.0.0] - 2021-04-09 - * Break: this is a major release, see [UPGRADE.md](UPGRADE.md) for more information. - * Break: removed optional `$colorOption` constructor param and passthru fallback. - * Break: renamed `requiresRestart` param from `$isLoaded` to `$default`. - * Break: changed `restart` param `$command` from a string to an array. - * Added: support for Xdebug3 to only restart if Xdebug is not running with `xdebug.mode=off`. - * Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart. - * Added: feature to bypass the shell in PHP-7.4+ by giving `proc_open` an array of arguments. - * Added: Process utility class to the API. - -## [1.4.6] - 2021-03-25 - * Fixed: fail restart if `proc_open` has been disabled in `disable_functions`. - * Fixed: enable Windows CTRL event handling in the restarted process. - -## [1.4.5] - 2020-11-13 - * Fixed: use `proc_open` when available for correct FD forwarding to the restarted process. - -## [1.4.4] - 2020-10-24 - * Fixed: exception if 'pcntl_signal' is disabled. - -## [1.4.3] - 2020-08-19 - * Fixed: restore SIGINT to default handler in restarted process if no other handler exists. - -## [1.4.2] - 2020-06-04 - * Fixed: ignore SIGINTs to let the restarted process handle them. - -## [1.4.1] - 2020-03-01 - * Fixed: restart fails if an ini file is empty. - -## [1.4.0] - 2019-11-06 - * Added: support for `NO_COLOR` environment variable: https://no-color.org - * Added: color support for Hyper terminal: https://github.com/zeit/hyper - * Fixed: correct capitalization of Xdebug (apparently). - * Fixed: improved handling for uopz extension. - -## [1.3.3] - 2019-05-27 - * Fixed: add environment changes to `$_ENV` if it is being used. - -## [1.3.2] - 2019-01-28 - * Fixed: exit call being blocked by uopz extension, resulting in application code running twice. - -## [1.3.1] - 2018-11-29 - * Fixed: fail restart if `passthru` has been disabled in `disable_functions`. - * Fixed: fail restart if an ini file cannot be opened, otherwise settings will be missing. - -## [1.3.0] - 2018-08-31 - * Added: `setPersistent` method to use environment variables for the restart. - * Fixed: improved debugging by writing output to stderr. - * Fixed: no restart when `php_ini_scanned_files` is not functional and is needed. - -## [1.2.1] - 2018-08-23 - * Fixed: fatal error with apc, when using `apc.mmap_file_mask`. - -## [1.2.0] - 2018-08-16 - * Added: debug information using `XDEBUG_HANDLER_DEBUG`. - * Added: fluent interface for setters. - * Added: `PhpConfig` helper class for calling PHP sub-processes. - * Added: `PHPRC` original value to restart stettings, for use in a restarted process. - * Changed: internal procedure to disable ini-scanning, using `-n` command-line option. - * Fixed: replaced `escapeshellarg` usage to avoid locale problems. - * Fixed: improved color-option handling to respect double-dash delimiter. - * Fixed: color-option handling regression from main script changes. - * Fixed: improved handling when checking main script. - * Fixed: handling for standard input, that never actually did anything. - * Fixed: fatal error when ctype extension is not available. - -## [1.1.0] - 2018-04-11 - * Added: `getRestartSettings` method for calling PHP processes in a restarted process. - * Added: API definition and @internal class annotations. - * Added: protected `requiresRestart` method for extending classes. - * Added: `setMainScript` method for applications that change the working directory. - * Changed: private `tmpIni` variable to protected for extending classes. - * Fixed: environment variables not available in $_SERVER when restored in the restart. - * Fixed: relative path problems caused by Phar::interceptFileFuncs. - * Fixed: incorrect handling when script file cannot be found. - -## [1.0.0] - 2018-03-08 - * Added: PSR3 logging for optional status output. - * Added: existing ini settings are merged to catch command-line overrides. - * Added: code, tests and other artefacts to decouple from Composer. - * Break: the following class was renamed: - - `Composer\XdebugHandler` -> `Composer\XdebugHandler\XdebugHandler` - -[Unreleased]: https://github.com/composer/xdebug-handler/compare/3.0.3...HEAD -[3.0.2]: https://github.com/composer/xdebug-handler/compare/3.0.2...3.0.3 -[3.0.2]: https://github.com/composer/xdebug-handler/compare/3.0.1...3.0.2 -[3.0.1]: https://github.com/composer/xdebug-handler/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/composer/xdebug-handler/compare/2.0.3...3.0.0 -[2.0.3]: https://github.com/composer/xdebug-handler/compare/2.0.2...2.0.3 -[2.0.2]: https://github.com/composer/xdebug-handler/compare/2.0.1...2.0.2 -[2.0.1]: https://github.com/composer/xdebug-handler/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/composer/xdebug-handler/compare/1.4.6...2.0.0 -[1.4.6]: https://github.com/composer/xdebug-handler/compare/1.4.5...1.4.6 -[1.4.5]: https://github.com/composer/xdebug-handler/compare/1.4.4...1.4.5 -[1.4.4]: https://github.com/composer/xdebug-handler/compare/1.4.3...1.4.4 -[1.4.3]: https://github.com/composer/xdebug-handler/compare/1.4.2...1.4.3 -[1.4.2]: https://github.com/composer/xdebug-handler/compare/1.4.1...1.4.2 -[1.4.1]: https://github.com/composer/xdebug-handler/compare/1.4.0...1.4.1 -[1.4.0]: https://github.com/composer/xdebug-handler/compare/1.3.3...1.4.0 -[1.3.3]: https://github.com/composer/xdebug-handler/compare/1.3.2...1.3.3 -[1.3.2]: https://github.com/composer/xdebug-handler/compare/1.3.1...1.3.2 -[1.3.1]: https://github.com/composer/xdebug-handler/compare/1.3.0...1.3.1 -[1.3.0]: https://github.com/composer/xdebug-handler/compare/1.2.1...1.3.0 -[1.2.1]: https://github.com/composer/xdebug-handler/compare/1.2.0...1.2.1 -[1.2.0]: https://github.com/composer/xdebug-handler/compare/1.1.0...1.2.0 -[1.1.0]: https://github.com/composer/xdebug-handler/compare/1.0.0...1.1.0 -[1.0.0]: https://github.com/composer/xdebug-handler/compare/d66f0d15cb57...1.0.0 diff --git a/old_vendor/composer/xdebug-handler/LICENSE b/old_vendor/composer/xdebug-handler/LICENSE deleted file mode 100644 index 963618a1..00000000 --- a/old_vendor/composer/xdebug-handler/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Composer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/composer/xdebug-handler/README.md b/old_vendor/composer/xdebug-handler/README.md deleted file mode 100644 index 56618fc1..00000000 --- a/old_vendor/composer/xdebug-handler/README.md +++ /dev/null @@ -1,298 +0,0 @@ -# composer/xdebug-handler - -[![packagist](https://img.shields.io/packagist/v/composer/xdebug-handler)](https://packagist.org/packages/composer/xdebug-handler) -[![Continuous Integration](https://github.com/composer/xdebug-handler/actions/workflows/continuous-integration.yml/badge.svg?branch=main)](https://github.com/composer/xdebug-handler/actions?query=branch:main) -![license](https://img.shields.io/github/license/composer/xdebug-handler.svg) -![php](https://img.shields.io/packagist/php-v/composer/xdebug-handler?colorB=8892BF) - -Restart a CLI process without loading the Xdebug extension, unless `xdebug.mode=off`. - -Originally written as part of [composer/composer](https://github.com/composer/composer), -now extracted and made available as a stand-alone library. - -### Version 3 - -Removed support for legacy PHP versions and added type declarations. - -Long term support for version 2 (PHP 5.3.2 - 7.2.4) follows [Composer 2.2 LTS](https://blog.packagist.com/composer-2-2/) policy. - -## Installation - -Install the latest version with: - -```bash -$ composer require composer/xdebug-handler -``` - -## Requirements - -* PHP 7.2.5 minimum, although using the latest PHP version is highly recommended. - -## Basic Usage -```php -use Composer\XdebugHandler\XdebugHandler; - -$xdebug = new XdebugHandler('myapp'); -$xdebug->check(); -unset($xdebug); -``` - -The constructor takes a single parameter, `$envPrefix`, which is upper-cased and prepended to default base values to create two distinct environment variables. The above example enables the use of: - -- `MYAPP_ALLOW_XDEBUG=1` to override automatic restart and allow Xdebug -- `MYAPP_ORIGINAL_INIS` to obtain ini file locations in a restarted process - -## Advanced Usage - -* [How it works](#how-it-works) -* [Limitations](#limitations) -* [Helper methods](#helper-methods) -* [Setter methods](#setter-methods) -* [Process configuration](#process-configuration) -* [Troubleshooting](#troubleshooting) -* [Extending the library](#extending-the-library) - -### How it works - -A temporary ini file is created from the loaded (and scanned) ini files, with any references to the Xdebug extension commented out. Current ini settings are merged, so that most ini settings made on the command-line or by the application are included (see [Limitations](#limitations)) - -* `MYAPP_ALLOW_XDEBUG` is set with internal data to flag and use in the restart. -* The command-line and environment are [configured](#process-configuration) for the restart. -* The application is restarted in a new process. - * The restart settings are stored in the environment. - * `MYAPP_ALLOW_XDEBUG` is unset. - * The application runs and exits. -* The main process exits with the exit code from the restarted process. - -#### Signal handling -Asynchronous signal handling is automatically enabled if the pcntl extension is loaded. `SIGINT` is set to `SIG_IGN` in the parent -process and restored to `SIG_DFL` in the restarted process (if no other handler has been set). - -From PHP 7.4 on Windows, `CTRL+C` and `CTRL+BREAK` handling is automatically enabled in the restarted process and ignored in the parent process. - -### Limitations -There are a few things to be aware of when running inside a restarted process. - -* Extensions set on the command-line will not be loaded. -* Ini file locations will be reported as per the restart - see [getAllIniFiles()](#getallinifiles). -* Php sub-processes may be loaded with Xdebug enabled - see [Process configuration](#process-configuration). - -### Helper methods -These static methods provide information from the current process, regardless of whether it has been restarted or not. - -#### _getAllIniFiles(): array_ -Returns an array of the original ini file locations. Use this instead of calling `php_ini_loaded_file` and `php_ini_scanned_files`, which will report the wrong values in a restarted process. - -```php -use Composer\XdebugHandler\XdebugHandler; - -$files = XdebugHandler::getAllIniFiles(); - -# $files[0] always exists, it could be an empty string -$loadedIni = array_shift($files); -$scannedInis = $files; -``` - -These locations are also available in the `MYAPP_ORIGINAL_INIS` environment variable. This is a path-separated string comprising the location returned from `php_ini_loaded_file`, which could be empty, followed by locations parsed from calling `php_ini_scanned_files`. - -#### _getRestartSettings(): ?array_ -Returns an array of settings that can be used with PHP [sub-processes](#sub-processes), or null if the process was not restarted. - -```php -use Composer\XdebugHandler\XdebugHandler; - -$settings = XdebugHandler::getRestartSettings(); -/** - * $settings: array (if the current process was restarted, - * or called with the settings from a previous restart), or null - * - * 'tmpIni' => the temporary ini file used in the restart (string) - * 'scannedInis' => if there were any scanned inis (bool) - * 'scanDir' => the original PHP_INI_SCAN_DIR value (false|string) - * 'phprc' => the original PHPRC value (false|string) - * 'inis' => the original inis from getAllIniFiles (array) - * 'skipped' => the skipped version from getSkippedVersion (string) - */ -``` - -#### _getSkippedVersion(): string_ -Returns the Xdebug version string that was skipped by the restart, or an empty string if there was no restart (or Xdebug is still loaded, perhaps by an extending class restarting for a reason other than removing Xdebug). - -```php -use Composer\XdebugHandler\XdebugHandler; - -$version = XdebugHandler::getSkippedVersion(); -# $version: '3.1.1' (for example), or an empty string -``` - -#### _isXdebugActive(): bool_ -Returns true if Xdebug is loaded and is running in an active mode (if it supports modes). Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`. - -### Setter methods -These methods implement a fluent interface and must be called before the main `check()` method. - -#### _setLogger(LoggerInterface $logger): self_ -Enables the output of status messages to an external PSR3 logger. All messages are reported with either `DEBUG` or `WARNING` log levels. For example (showing the level and message): - -``` -// No restart -DEBUG Checking MYAPP_ALLOW_XDEBUG -DEBUG The Xdebug extension is loaded (3.1.1) xdebug.mode=off -DEBUG No restart (APP_ALLOW_XDEBUG=0) Allowed by xdebug.mode - -// Restart overridden -DEBUG Checking MYAPP_ALLOW_XDEBUG -DEBUG The Xdebug extension is loaded (3.1.1) xdebug.mode=coverage,debug,develop -DEBUG No restart (MYAPP_ALLOW_XDEBUG=1) - -// Failed restart -DEBUG Checking MYAPP_ALLOW_XDEBUG -DEBUG The Xdebug extension is loaded (3.1.0) -WARNING No restart (Unable to create temp ini file at: ...) -``` - -Status messages can also be output with `XDEBUG_HANDLER_DEBUG`. See [Troubleshooting](#troubleshooting). - -#### _setMainScript(string $script): self_ -Sets the location of the main script to run in the restart. This is only needed in more esoteric use-cases, or if the `argv[0]` location is inaccessible. The script name `--` is supported for standard input. - -#### _setPersistent(): self_ -Configures the restart using [persistent settings](#persistent-settings), so that Xdebug is not loaded in any sub-process. - -Use this method if your application invokes one or more PHP sub-process and the Xdebug extension is not needed. This avoids the overhead of implementing specific [sub-process](#sub-processes) strategies. - -Alternatively, this method can be used to set up a default _Xdebug-free_ environment which can be changed if a sub-process requires Xdebug, then restored afterwards: - -```php -function SubProcessWithXdebug() -{ - $phpConfig = new Composer\XdebugHandler\PhpConfig(); - - # Set the environment to the original configuration - $phpConfig->useOriginal(); - - # run the process with Xdebug loaded - ... - - # Restore Xdebug-free environment - $phpConfig->usePersistent(); -} -``` - -### Process configuration -The library offers two strategies to invoke a new PHP process without loading Xdebug, using either _standard_ or _persistent_ settings. Note that this is only important if the application calls a PHP sub-process. - -#### Standard settings -Uses command-line options to remove Xdebug from the new process only. - -* The -n option is added to the command-line. This tells PHP not to scan for additional inis. -* The temporary ini is added to the command-line with the -c option. - ->_If the new process calls a PHP sub-process, Xdebug will be loaded in that sub-process (unless it implements xdebug-handler, in which case there will be another restart)._ - -This is the default strategy used in the restart. - -#### Persistent settings -Uses environment variables to remove Xdebug from the new process and persist these settings to any sub-process. - -* `PHP_INI_SCAN_DIR` is set to an empty string. This tells PHP not to scan for additional inis. -* `PHPRC` is set to the temporary ini. - ->_If the new process calls a PHP sub-process, Xdebug will not be loaded in that sub-process._ - -This strategy can be used in the restart by calling [setPersistent()](#setpersistent). - -#### Sub-processes -The `PhpConfig` helper class makes it easy to invoke a PHP sub-process (with or without Xdebug loaded), regardless of whether there has been a restart. - -Each of its methods returns an array of PHP options (to add to the command-line) and sets up the environment for the required strategy. The [getRestartSettings()](#getrestartsettings) method is used internally. - -* `useOriginal()` - Xdebug will be loaded in the new process. -* `useStandard()` - Xdebug will **not** be loaded in the new process - see [standard settings](#standard-settings). -* `userPersistent()` - Xdebug will **not** be loaded in the new process - see [persistent settings](#persistent-settings) - -If there was no restart, an empty options array is returned and the environment is not changed. - -```php -use Composer\XdebugHandler\PhpConfig; - -$config = new PhpConfig; - -$options = $config->useOriginal(); -# $options: empty array -# environment: PHPRC and PHP_INI_SCAN_DIR set to original values - -$options = $config->useStandard(); -# $options: [-n, -c, tmpIni] -# environment: PHPRC and PHP_INI_SCAN_DIR set to original values - -$options = $config->usePersistent(); -# $options: empty array -# environment: PHPRC=tmpIni, PHP_INI_SCAN_DIR='' -``` - -### Troubleshooting -The following environment settings can be used to troubleshoot unexpected behavior: - -* `XDEBUG_HANDLER_DEBUG=1` Outputs status messages to `STDERR`, if it is defined, irrespective of any PSR3 logger. Each message is prefixed `xdebug-handler[pid]`, where pid is the process identifier. - -* `XDEBUG_HANDLER_DEBUG=2` As above, but additionally saves the temporary ini file and reports its location in a status message. - -### Extending the library -The API is defined by classes and their accessible elements that are not annotated as @internal. The main class has two protected methods that can be overridden to provide additional functionality: - -#### _requiresRestart(bool $default): bool_ -By default the process will restart if Xdebug is loaded and not running with `xdebug.mode=off`. Extending this method allows an application to decide, by returning a boolean (or equivalent) value. -It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden. - -Note that the [setMainScript()](#setmainscriptscript) and [setPersistent()](#setpersistent) setters can be used here, if required. - -#### _restart(array $command): void_ -An application can extend this to modify the temporary ini file, its location given in the `tmpIni` property. New settings can be safely appended to the end of the data, which is `PHP_EOL` terminated. - -The `$command` parameter is an array of unescaped command-line arguments that will be used for the new process. - -Remember to finish with `parent::restart($command)`. - -#### Example -This example demonstrates two ways to extend basic functionality: - -* To avoid the overhead of spinning up a new process, the restart is skipped if a simple help command is requested. - -* The application needs write-access to phar files, so it will force a restart if `phar.readonly` is set (regardless of whether Xdebug is loaded) and change this value in the temporary ini file. - -```php -use Composer\XdebugHandler\XdebugHandler; -use MyApp\Command; - -class MyRestarter extends XdebugHandler -{ - private $required; - - protected function requiresRestart(bool $default): bool - { - if (Command::isHelp()) { - # No need to disable Xdebug for this - return false; - } - - $this->required = (bool) ini_get('phar.readonly'); - return $this->required || $default; - } - - protected function restart(array $command): void - { - if ($this->required) { - # Add required ini setting to tmpIni - $content = file_get_contents($this->tmpIni); - $content .= 'phar.readonly=0'.PHP_EOL; - file_put_contents($this->tmpIni, $content); - } - - parent::restart($command); - } -} -``` - -## License -composer/xdebug-handler is licensed under the MIT License, see the LICENSE file for details. diff --git a/old_vendor/composer/xdebug-handler/composer.json b/old_vendor/composer/xdebug-handler/composer.json deleted file mode 100644 index 6b649dab..00000000 --- a/old_vendor/composer/xdebug-handler/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "composer/xdebug-handler", - "description": "Restarts a process without Xdebug.", - "type": "library", - "license": "MIT", - "keywords": [ - "xdebug", - "performance" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3", - "composer/pcre": "^1 || ^2 || ^3" - }, - "require-dev": { - "symfony/phpunit-bridge": "^6.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1" - }, - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Composer\\XdebugHandler\\Tests\\": "tests" - } - }, - "scripts": { - "test": "@php vendor/bin/simple-phpunit", - "phpstan": "@php vendor/bin/phpstan analyse" - } -} diff --git a/old_vendor/composer/xdebug-handler/src/PhpConfig.php b/old_vendor/composer/xdebug-handler/src/PhpConfig.php deleted file mode 100644 index 7edac888..00000000 --- a/old_vendor/composer/xdebug-handler/src/PhpConfig.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\XdebugHandler; - -/** - * @author John Stevenson - * - * @phpstan-type restartData array{tmpIni: string, scannedInis: bool, scanDir: false|string, phprc: false|string, inis: string[], skipped: string} - */ -class PhpConfig -{ - /** - * Use the original PHP configuration - * - * @return string[] Empty array of PHP cli options - */ - public function useOriginal(): array - { - $this->getDataAndReset(); - return []; - } - - /** - * Use standard restart settings - * - * @return string[] PHP cli options - */ - public function useStandard(): array - { - $data = $this->getDataAndReset(); - if ($data !== null) { - return ['-n', '-c', $data['tmpIni']]; - } - - return []; - } - - /** - * Use environment variables to persist settings - * - * @return string[] Empty array of PHP cli options - */ - public function usePersistent(): array - { - $data = $this->getDataAndReset(); - if ($data !== null) { - $this->updateEnv('PHPRC', $data['tmpIni']); - $this->updateEnv('PHP_INI_SCAN_DIR', ''); - } - - return []; - } - - /** - * Returns restart data if available and resets the environment - * - * @phpstan-return restartData|null - */ - private function getDataAndReset(): ?array - { - $data = XdebugHandler::getRestartSettings(); - if ($data !== null) { - $this->updateEnv('PHPRC', $data['phprc']); - $this->updateEnv('PHP_INI_SCAN_DIR', $data['scanDir']); - } - - return $data; - } - - /** - * Updates a restart settings value in the environment - * - * @param string $name - * @param string|false $value - */ - private function updateEnv(string $name, $value): void - { - Process::setEnv($name, false !== $value ? $value : null); - } -} diff --git a/old_vendor/composer/xdebug-handler/src/Process.php b/old_vendor/composer/xdebug-handler/src/Process.php deleted file mode 100644 index c612200b..00000000 --- a/old_vendor/composer/xdebug-handler/src/Process.php +++ /dev/null @@ -1,118 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -declare(strict_types=1); - -namespace Composer\XdebugHandler; - -use Composer\Pcre\Preg; - -/** - * Process utility functions - * - * @author John Stevenson - */ -class Process -{ - /** - * Escapes a string to be used as a shell argument. - * - * From https://github.com/johnstevenson/winbox-args - * MIT Licensed (c) John Stevenson - * - * @param string $arg The argument to be escaped - * @param bool $meta Additionally escape cmd.exe meta characters - * @param bool $module The argument is the module to invoke - */ - public static function escape(string $arg, bool $meta = true, bool $module = false): string - { - if (!defined('PHP_WINDOWS_VERSION_BUILD')) { - return "'".str_replace("'", "'\\''", $arg)."'"; - } - - $quote = strpbrk($arg, " \t") !== false || $arg === ''; - - $arg = Preg::replace('/(\\\\*)"/', '$1$1\\"', $arg, -1, $dquotes); - - if ($meta) { - $meta = $dquotes || Preg::isMatch('/%[^%]+%/', $arg); - - if (!$meta) { - $quote = $quote || strpbrk($arg, '^&|<>()') !== false; - } elseif ($module && !$dquotes && $quote) { - $meta = false; - } - } - - if ($quote) { - $arg = '"'.(Preg::replace('/(\\\\*)$/', '$1$1', $arg)).'"'; - } - - if ($meta) { - $arg = Preg::replace('/(["^&|<>()%])/', '^$1', $arg); - } - - return $arg; - } - - /** - * Escapes an array of arguments that make up a shell command - * - * @param string[] $args Argument list, with the module name first - */ - public static function escapeShellCommand(array $args): string - { - $command = ''; - $module = array_shift($args); - - if ($module !== null) { - $command = self::escape($module, true, true); - - foreach ($args as $arg) { - $command .= ' '.self::escape($arg); - } - } - - return $command; - } - - /** - * Makes putenv environment changes available in $_SERVER and $_ENV - * - * @param string $name - * @param ?string $value A null value unsets the variable - */ - public static function setEnv(string $name, ?string $value = null): bool - { - $unset = null === $value; - - if (!putenv($unset ? $name : $name.'='.$value)) { - return false; - } - - if ($unset) { - unset($_SERVER[$name]); - } else { - $_SERVER[$name] = $value; - } - - // Update $_ENV if it is being used - if (false !== stripos((string) ini_get('variables_order'), 'E')) { - if ($unset) { - unset($_ENV[$name]); - } else { - $_ENV[$name] = $value; - } - } - - return true; - } -} diff --git a/old_vendor/composer/xdebug-handler/src/Status.php b/old_vendor/composer/xdebug-handler/src/Status.php deleted file mode 100644 index b434f859..00000000 --- a/old_vendor/composer/xdebug-handler/src/Status.php +++ /dev/null @@ -1,203 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -declare(strict_types=1); - -namespace Composer\XdebugHandler; - -use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; - -/** - * @author John Stevenson - * @internal - */ -class Status -{ - const ENV_RESTART = 'XDEBUG_HANDLER_RESTART'; - const CHECK = 'Check'; - const ERROR = 'Error'; - const INFO = 'Info'; - const NORESTART = 'NoRestart'; - const RESTART = 'Restart'; - const RESTARTING = 'Restarting'; - const RESTARTED = 'Restarted'; - - /** @var bool */ - private $debug; - - /** @var string */ - private $envAllowXdebug; - - /** @var string|null */ - private $loaded; - - /** @var LoggerInterface|null */ - private $logger; - - /** @var bool */ - private $modeOff; - - /** @var float */ - private $time; - - /** - * @param string $envAllowXdebug Prefixed _ALLOW_XDEBUG name - * @param bool $debug Whether debug output is required - */ - public function __construct(string $envAllowXdebug, bool $debug) - { - $start = getenv(self::ENV_RESTART); - Process::setEnv(self::ENV_RESTART); - $this->time = is_numeric($start) ? round((microtime(true) - $start) * 1000) : 0; - - $this->envAllowXdebug = $envAllowXdebug; - $this->debug = $debug && defined('STDERR'); - $this->modeOff = false; - } - - /** - * Activates status message output to a PSR3 logger - * - * @return void - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - - /** - * Calls a handler method to report a message - * - * @throws \InvalidArgumentException If $op is not known - */ - public function report(string $op, ?string $data): void - { - if ($this->logger !== null || $this->debug) { - $callable = [$this, 'report'.$op]; - - if (!is_callable($callable)) { - throw new \InvalidArgumentException('Unknown op handler: '.$op); - } - - $params = $data !== null ? [$data] : []; - call_user_func_array($callable, $params); - } - } - - /** - * Outputs a status message - */ - private function output(string $text, ?string $level = null): void - { - if ($this->logger !== null) { - $this->logger->log($level !== null ? $level: LogLevel::DEBUG, $text); - } - - if ($this->debug) { - fwrite(STDERR, sprintf('xdebug-handler[%d] %s', getmypid(), $text.PHP_EOL)); - } - } - - /** - * Checking status message - */ - private function reportCheck(string $loaded): void - { - list($version, $mode) = explode('|', $loaded); - - if ($version !== '') { - $this->loaded = '('.$version.')'.($mode !== '' ? ' xdebug.mode='.$mode : ''); - } - $this->modeOff = $mode === 'off'; - $this->output('Checking '.$this->envAllowXdebug); - } - - /** - * Error status message - */ - private function reportError(string $error): void - { - $this->output(sprintf('No restart (%s)', $error), LogLevel::WARNING); - } - - /** - * Info status message - */ - private function reportInfo(string $info): void - { - $this->output($info); - } - - /** - * No restart status message - */ - private function reportNoRestart(): void - { - $this->output($this->getLoadedMessage()); - - if ($this->loaded !== null) { - $text = sprintf('No restart (%s)', $this->getEnvAllow()); - if (!((bool) getenv($this->envAllowXdebug))) { - $text .= ' Allowed by '.($this->modeOff ? 'xdebug.mode' : 'application'); - } - $this->output($text); - } - } - - /** - * Restart status message - */ - private function reportRestart(): void - { - $this->output($this->getLoadedMessage()); - Process::setEnv(self::ENV_RESTART, (string) microtime(true)); - } - - /** - * Restarted status message - */ - private function reportRestarted(): void - { - $loaded = $this->getLoadedMessage(); - $text = sprintf('Restarted (%d ms). %s', $this->time, $loaded); - $level = $this->loaded !== null ? LogLevel::WARNING : null; - $this->output($text, $level); - } - - /** - * Restarting status message - */ - private function reportRestarting(string $command): void - { - $text = sprintf('Process restarting (%s)', $this->getEnvAllow()); - $this->output($text); - $text = 'Running '.$command; - $this->output($text); - } - - /** - * Returns the _ALLOW_XDEBUG environment variable as name=value - */ - private function getEnvAllow(): string - { - return $this->envAllowXdebug.'='.getenv($this->envAllowXdebug); - } - - /** - * Returns the Xdebug status and version - */ - private function getLoadedMessage(): string - { - $loaded = $this->loaded !== null ? sprintf('loaded %s', $this->loaded) : 'not loaded'; - return 'The Xdebug extension is '.$loaded; - } -} diff --git a/old_vendor/composer/xdebug-handler/src/XdebugHandler.php b/old_vendor/composer/xdebug-handler/src/XdebugHandler.php deleted file mode 100644 index 9052bfa4..00000000 --- a/old_vendor/composer/xdebug-handler/src/XdebugHandler.php +++ /dev/null @@ -1,668 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -declare(strict_types=1); - -namespace Composer\XdebugHandler; - -use Composer\Pcre\Preg; -use Psr\Log\LoggerInterface; - -/** - * @author John Stevenson - * - * @phpstan-import-type restartData from PhpConfig - */ -class XdebugHandler -{ - const SUFFIX_ALLOW = '_ALLOW_XDEBUG'; - const SUFFIX_INIS = '_ORIGINAL_INIS'; - const RESTART_ID = 'internal'; - const RESTART_SETTINGS = 'XDEBUG_HANDLER_SETTINGS'; - const DEBUG = 'XDEBUG_HANDLER_DEBUG'; - - /** @var string|null */ - protected $tmpIni; - - /** @var bool */ - private static $inRestart; - - /** @var string */ - private static $name; - - /** @var string|null */ - private static $skipped; - - /** @var bool */ - private static $xdebugActive; - - /** @var string|null */ - private static $xdebugMode; - - /** @var string|null */ - private static $xdebugVersion; - - /** @var bool */ - private $cli; - - /** @var string|null */ - private $debug; - - /** @var string */ - private $envAllowXdebug; - - /** @var string */ - private $envOriginalInis; - - /** @var bool */ - private $persistent; - - /** @var string|null */ - private $script; - - /** @var Status */ - private $statusWriter; - - /** - * Constructor - * - * The $envPrefix is used to create distinct environment variables. It is - * uppercased and prepended to the default base values. For example 'myapp' - * would result in MYAPP_ALLOW_XDEBUG and MYAPP_ORIGINAL_INIS. - * - * @param string $envPrefix Value used in environment variables - * @throws \RuntimeException If the parameter is invalid - */ - public function __construct(string $envPrefix) - { - if ($envPrefix === '') { - throw new \RuntimeException('Invalid constructor parameter'); - } - - self::$name = strtoupper($envPrefix); - $this->envAllowXdebug = self::$name.self::SUFFIX_ALLOW; - $this->envOriginalInis = self::$name.self::SUFFIX_INIS; - - self::setXdebugDetails(); - self::$inRestart = false; - - if ($this->cli = PHP_SAPI === 'cli') { - $this->debug = (string) getenv(self::DEBUG); - } - - $this->statusWriter = new Status($this->envAllowXdebug, (bool) $this->debug); - } - - /** - * Activates status message output to a PSR3 logger - */ - public function setLogger(LoggerInterface $logger): self - { - $this->statusWriter->setLogger($logger); - return $this; - } - - /** - * Sets the main script location if it cannot be called from argv - */ - public function setMainScript(string $script): self - { - $this->script = $script; - return $this; - } - - /** - * Persist the settings to keep Xdebug out of sub-processes - */ - public function setPersistent(): self - { - $this->persistent = true; - return $this; - } - - /** - * Checks if Xdebug is loaded and the process needs to be restarted - * - * This behaviour can be disabled by setting the MYAPP_ALLOW_XDEBUG - * environment variable to 1. This variable is used internally so that - * the restarted process is created only once. - */ - public function check(): void - { - $this->notify(Status::CHECK, self::$xdebugVersion.'|'.self::$xdebugMode); - $envArgs = explode('|', (string) getenv($this->envAllowXdebug)); - - if (!((bool) $envArgs[0]) && $this->requiresRestart(self::$xdebugActive)) { - // Restart required - $this->notify(Status::RESTART); - - if ($this->prepareRestart()) { - $command = $this->getCommand(); - $this->restart($command); - } - return; - } - - if (self::RESTART_ID === $envArgs[0] && count($envArgs) === 5) { - // Restarted, so unset environment variable and use saved values - $this->notify(Status::RESTARTED); - - Process::setEnv($this->envAllowXdebug); - self::$inRestart = true; - - if (self::$xdebugVersion === null) { - // Skipped version is only set if Xdebug is not loaded - self::$skipped = $envArgs[1]; - } - - $this->tryEnableSignals(); - - // Put restart settings in the environment - $this->setEnvRestartSettings($envArgs); - return; - } - - $this->notify(Status::NORESTART); - $settings = self::getRestartSettings(); - - if ($settings !== null) { - // Called with existing settings, so sync our settings - $this->syncSettings($settings); - } - } - - /** - * Returns an array of php.ini locations with at least one entry - * - * The equivalent of calling php_ini_loaded_file then php_ini_scanned_files. - * The loaded ini location is the first entry and may be empty. - * - * @return string[] - */ - public static function getAllIniFiles(): array - { - if (self::$name !== null) { - $env = getenv(self::$name.self::SUFFIX_INIS); - - if (false !== $env) { - return explode(PATH_SEPARATOR, $env); - } - } - - $paths = [(string) php_ini_loaded_file()]; - $scanned = php_ini_scanned_files(); - - if ($scanned !== false) { - $paths = array_merge($paths, array_map('trim', explode(',', $scanned))); - } - - return $paths; - } - - /** - * Returns an array of restart settings or null - * - * Settings will be available if the current process was restarted, or - * called with the settings from an existing restart. - * - * @phpstan-return restartData|null - */ - public static function getRestartSettings(): ?array - { - $envArgs = explode('|', (string) getenv(self::RESTART_SETTINGS)); - - if (count($envArgs) !== 6 - || (!self::$inRestart && php_ini_loaded_file() !== $envArgs[0])) { - return null; - } - - return [ - 'tmpIni' => $envArgs[0], - 'scannedInis' => (bool) $envArgs[1], - 'scanDir' => '*' === $envArgs[2] ? false : $envArgs[2], - 'phprc' => '*' === $envArgs[3] ? false : $envArgs[3], - 'inis' => explode(PATH_SEPARATOR, $envArgs[4]), - 'skipped' => $envArgs[5], - ]; - } - - /** - * Returns the Xdebug version that triggered a successful restart - */ - public static function getSkippedVersion(): string - { - return (string) self::$skipped; - } - - /** - * Returns whether Xdebug is loaded and active - * - * true: if Xdebug is loaded and is running in an active mode. - * false: if Xdebug is not loaded, or it is running with xdebug.mode=off. - */ - public static function isXdebugActive(): bool - { - self::setXdebugDetails(); - return self::$xdebugActive; - } - - /** - * Allows an extending class to decide if there should be a restart - * - * The default is to restart if Xdebug is loaded and its mode is not "off". - */ - protected function requiresRestart(bool $default): bool - { - return $default; - } - - /** - * Allows an extending class to access the tmpIni - * - * @param string[] $command * - */ - protected function restart(array $command): void - { - $this->doRestart($command); - } - - /** - * Executes the restarted command then deletes the tmp ini - * - * @param string[] $command - * @phpstan-return never - */ - private function doRestart(array $command): void - { - $this->tryEnableSignals(); - $this->notify(Status::RESTARTING, implode(' ', $command)); - - if (PHP_VERSION_ID >= 70400) { - $cmd = $command; - } else { - $cmd = Process::escapeShellCommand($command); - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - // Outer quotes required on cmd string below PHP 8 - $cmd = '"'.$cmd.'"'; - } - } - - $process = proc_open($cmd, [], $pipes); - if (is_resource($process)) { - $exitCode = proc_close($process); - } - - if (!isset($exitCode)) { - // Unlikely that php or the default shell cannot be invoked - $this->notify(Status::ERROR, 'Unable to restart process'); - $exitCode = -1; - } else { - $this->notify(Status::INFO, 'Restarted process exited '.$exitCode); - } - - if ($this->debug === '2') { - $this->notify(Status::INFO, 'Temp ini saved: '.$this->tmpIni); - } else { - @unlink((string) $this->tmpIni); - } - - exit($exitCode); - } - - /** - * Returns true if everything was written for the restart - * - * If any of the following fails (however unlikely) we must return false to - * stop potential recursion: - * - tmp ini file creation - * - environment variable creation - */ - private function prepareRestart(): bool - { - $error = null; - $iniFiles = self::getAllIniFiles(); - $scannedInis = count($iniFiles) > 1; - $tmpDir = sys_get_temp_dir(); - - if (!$this->cli) { - $error = 'Unsupported SAPI: '.PHP_SAPI; - } elseif (!$this->checkConfiguration($info)) { - $error = $info; - } elseif (!$this->checkMainScript()) { - $error = 'Unable to access main script: '.$this->script; - } elseif (!$this->writeTmpIni($iniFiles, $tmpDir, $error)) { - $error = $error !== null ? $error : 'Unable to create temp ini file at: '.$tmpDir; - } elseif (!$this->setEnvironment($scannedInis, $iniFiles)) { - $error = 'Unable to set environment variables'; - } - - if ($error !== null) { - $this->notify(Status::ERROR, $error); - } - - return $error === null; - } - - /** - * Returns true if the tmp ini file was written - * - * @param string[] $iniFiles All ini files used in the current process - */ - private function writeTmpIni(array $iniFiles, string $tmpDir, ?string &$error): bool - { - if (($tmpfile = @tempnam($tmpDir, '')) === false) { - return false; - } - - $this->tmpIni = $tmpfile; - - // $iniFiles has at least one item and it may be empty - if ($iniFiles[0] === '') { - array_shift($iniFiles); - } - - $content = ''; - $sectionRegex = '/^\s*\[(?:PATH|HOST)\s*=/mi'; - $xdebugRegex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi'; - - foreach ($iniFiles as $file) { - // Check for inaccessible ini files - if (($data = @file_get_contents($file)) === false) { - $error = 'Unable to read ini: '.$file; - return false; - } - // Check and remove directives after HOST and PATH sections - if (Preg::isMatchWithOffsets($sectionRegex, $data, $matches, PREG_OFFSET_CAPTURE)) { - $data = substr($data, 0, $matches[0][1]); - } - $content .= Preg::replace($xdebugRegex, ';$1', $data).PHP_EOL; - } - - // Merge loaded settings into our ini content, if it is valid - $config = parse_ini_string($content); - $loaded = ini_get_all(null, false); - - if (false === $config || false === $loaded) { - $error = 'Unable to parse ini data'; - return false; - } - - $content .= $this->mergeLoadedConfig($loaded, $config); - - // Work-around for https://bugs.php.net/bug.php?id=75932 - $content .= 'opcache.enable_cli=0'.PHP_EOL; - - return (bool) @file_put_contents($this->tmpIni, $content); - } - - /** - * Returns the command line arguments for the restart - * - * @return string[] - */ - private function getCommand(): array - { - $php = [PHP_BINARY]; - $args = array_slice($_SERVER['argv'], 1); - - if (!$this->persistent) { - // Use command-line options - array_push($php, '-n', '-c', $this->tmpIni); - } - - return array_merge($php, [$this->script], $args); - } - - /** - * Returns true if the restart environment variables were set - * - * No need to update $_SERVER since this is set in the restarted process. - * - * @param string[] $iniFiles All ini files used in the current process - */ - private function setEnvironment(bool $scannedInis, array $iniFiles): bool - { - $scanDir = getenv('PHP_INI_SCAN_DIR'); - $phprc = getenv('PHPRC'); - - // Make original inis available to restarted process - if (!putenv($this->envOriginalInis.'='.implode(PATH_SEPARATOR, $iniFiles))) { - return false; - } - - if ($this->persistent) { - // Use the environment to persist the settings - if (!putenv('PHP_INI_SCAN_DIR=') || !putenv('PHPRC='.$this->tmpIni)) { - return false; - } - } - - // Flag restarted process and save values for it to use - $envArgs = [ - self::RESTART_ID, - self::$xdebugVersion, - (int) $scannedInis, - false === $scanDir ? '*' : $scanDir, - false === $phprc ? '*' : $phprc, - ]; - - return putenv($this->envAllowXdebug.'='.implode('|', $envArgs)); - } - - /** - * Logs status messages - */ - private function notify(string $op, ?string $data = null): void - { - $this->statusWriter->report($op, $data); - } - - /** - * Returns default, changed and command-line ini settings - * - * @param mixed[] $loadedConfig All current ini settings - * @param mixed[] $iniConfig Settings from user ini files - * - */ - private function mergeLoadedConfig(array $loadedConfig, array $iniConfig): string - { - $content = ''; - - foreach ($loadedConfig as $name => $value) { - // Value will either be null, string or array (HHVM only) - if (!is_string($value) - || strpos($name, 'xdebug') === 0 - || $name === 'apc.mmap_file_mask') { - continue; - } - - if (!isset($iniConfig[$name]) || $iniConfig[$name] !== $value) { - // Double-quote escape each value - $content .= $name.'="'.addcslashes($value, '\\"').'"'.PHP_EOL; - } - } - - return $content; - } - - /** - * Returns true if the script name can be used - */ - private function checkMainScript(): bool - { - if ($this->script !== null) { - // Allow an application to set -- for standard input - return file_exists($this->script) || '--' === $this->script; - } - - if (file_exists($this->script = $_SERVER['argv'][0])) { - return true; - } - - // Use a backtrace to resolve Phar and chdir issues. - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - $main = end($trace); - - if ($main !== false && isset($main['file'])) { - return file_exists($this->script = $main['file']); - } - - return false; - } - - /** - * Adds restart settings to the environment - * - * @param string[] $envArgs - */ - private function setEnvRestartSettings(array $envArgs): void - { - $settings = [ - php_ini_loaded_file(), - $envArgs[2], - $envArgs[3], - $envArgs[4], - getenv($this->envOriginalInis), - self::$skipped, - ]; - - Process::setEnv(self::RESTART_SETTINGS, implode('|', $settings)); - } - - /** - * Syncs settings and the environment if called with existing settings - * - * @phpstan-param restartData $settings - */ - private function syncSettings(array $settings): void - { - if (false === getenv($this->envOriginalInis)) { - // Called by another app, so make original inis available - Process::setEnv($this->envOriginalInis, implode(PATH_SEPARATOR, $settings['inis'])); - } - - self::$skipped = $settings['skipped']; - $this->notify(Status::INFO, 'Process called with existing restart settings'); - } - - /** - * Returns true if there are no known configuration issues - */ - private function checkConfiguration(?string &$info): bool - { - if (!function_exists('proc_open')) { - $info = 'proc_open function is disabled'; - return false; - } - - if (extension_loaded('uopz') && !((bool) ini_get('uopz.disable'))) { - // uopz works at opcode level and disables exit calls - if (function_exists('uopz_allow_exit')) { - @uopz_allow_exit(true); - } else { - $info = 'uopz extension is not compatible'; - return false; - } - } - - // Check UNC paths when using cmd.exe - if (defined('PHP_WINDOWS_VERSION_BUILD') && PHP_VERSION_ID < 70400) { - $workingDir = getcwd(); - - if ($workingDir === false) { - $info = 'unable to determine working directory'; - return false; - } - - if (0 === strpos($workingDir, '\\\\')) { - $info = 'cmd.exe does not support UNC paths: '.$workingDir; - return false; - } - } - - return true; - } - - /** - * Enables async signals and control interrupts in the restarted process - * - * Available on Unix PHP 7.1+ with the pcntl extension and Windows PHP 7.4+. - */ - private function tryEnableSignals(): void - { - if (function_exists('pcntl_async_signals') && function_exists('pcntl_signal')) { - pcntl_async_signals(true); - $message = 'Async signals enabled'; - - if (!self::$inRestart) { - // Restarting, so ignore SIGINT in parent - pcntl_signal(SIGINT, SIG_IGN); - } elseif (is_int(pcntl_signal_get_handler(SIGINT))) { - // Restarted, no handler set so force default action - pcntl_signal(SIGINT, SIG_DFL); - } - } - - if (!self::$inRestart && function_exists('sapi_windows_set_ctrl_handler')) { - // Restarting, so set a handler to ignore CTRL events in the parent. - // This ensures that CTRL+C events will be available in the child - // process without having to enable them there, which is unreliable. - sapi_windows_set_ctrl_handler(function ($evt) {}); - } - } - - /** - * Sets static properties $xdebugActive, $xdebugVersion and $xdebugMode - */ - private static function setXdebugDetails(): void - { - if (self::$xdebugActive !== null) { - return; - } - - self::$xdebugActive = false; - if (!extension_loaded('xdebug')) { - return; - } - - $version = phpversion('xdebug'); - self::$xdebugVersion = $version !== false ? $version : 'unknown'; - - if (version_compare(self::$xdebugVersion, '3.1', '>=')) { - $modes = xdebug_info('mode'); - self::$xdebugMode = count($modes) === 0 ? 'off' : implode(',', $modes); - self::$xdebugActive = self::$xdebugMode !== 'off'; - return; - } - - // See if xdebug.mode is supported in this version - $iniMode = ini_get('xdebug.mode'); - if ($iniMode === false) { - self::$xdebugActive = true; - return; - } - - // Environment value wins but cannot be empty - $envMode = (string) getenv('XDEBUG_MODE'); - if ($envMode !== '') { - self::$xdebugMode = $envMode; - } else { - self::$xdebugMode = $iniMode !== '' ? $iniMode : 'off'; - } - - // An empty comma-separated list is treated as mode 'off' - if (Preg::isMatch('/^,+$/', str_replace(' ', '', self::$xdebugMode))) { - self::$xdebugMode = 'off'; - } - - self::$xdebugActive = self::$xdebugMode !== 'off'; - } -} diff --git a/old_vendor/doctrine/annotations/LICENSE b/old_vendor/doctrine/annotations/LICENSE deleted file mode 100644 index 5e781fce..00000000 --- a/old_vendor/doctrine/annotations/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2013 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/doctrine/annotations/README.md b/old_vendor/doctrine/annotations/README.md deleted file mode 100644 index 6b8c0359..00000000 --- a/old_vendor/doctrine/annotations/README.md +++ /dev/null @@ -1,24 +0,0 @@ -⚠️ PHP 8 introduced -[attributes](https://www.php.net/manual/en/language.attributes.overview.php), -which are a native replacement for annotations. As such, this library is -considered feature complete, and should receive exclusively bugfixes and -security fixes. - -# Doctrine Annotations - -[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) -[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) -[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) -[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) -[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) - -Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). - -## Documentation - -See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). - -## Contributing - -When making a pull request, make sure your changes follow the -[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/old_vendor/doctrine/annotations/composer.json b/old_vendor/doctrine/annotations/composer.json deleted file mode 100644 index e322d82f..00000000 --- a/old_vendor/doctrine/annotations/composer.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "doctrine/annotations", - "description": "Docblock Annotations Parser", - "license": "MIT", - "type": "library", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "require": { - "php": "^7.1 || ^8.0", - "ext-tokenizer": "*", - "doctrine/lexer": "^1 || ^2", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", - "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" - }, - "files": [ - "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", - "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" - ] - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/old_vendor/doctrine/annotations/docs/en/annotations.rst b/old_vendor/doctrine/annotations/docs/en/annotations.rst deleted file mode 100644 index 2c3c4286..00000000 --- a/old_vendor/doctrine/annotations/docs/en/annotations.rst +++ /dev/null @@ -1,252 +0,0 @@ -Handling Annotations -==================== - -There are several different approaches to handling annotations in PHP. -Doctrine Annotations maps docblock annotations to PHP classes. Because -not all docblock annotations are used for metadata purposes a filter is -applied to ignore or skip classes that are not Doctrine annotations. - -Take a look at the following code snippet: - -.. code-block:: php - - namespace MyProject\Entities; - - use Doctrine\ORM\Mapping AS ORM; - use Symfony\Component\Validator\Constraints AS Assert; - - /** - * @author Benjamin Eberlei - * @ORM\Entity - * @MyProject\Annotations\Foobarable - */ - class User - { - /** - * @ORM\Id @ORM\Column @ORM\GeneratedValue - * @dummy - * @var int - */ - private $id; - - /** - * @ORM\Column(type="string") - * @Assert\NotEmpty - * @Assert\Email - * @var string - */ - private $email; - } - -In this snippet you can see a variety of different docblock annotations: - -- Documentation annotations such as ``@var`` and ``@author``. These - annotations are ignored and never considered for throwing an - exception due to wrongly used annotations. -- Annotations imported through use statements. The statement ``use - Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace - available as ``@ORM\ClassName``. Same goes for the import of - ``@Assert``. -- The ``@dummy`` annotation. It is not a documentation annotation and - not ignored. For Doctrine Annotations it is not entirely clear how - to handle this annotation. Depending on the configuration an exception - (unknown annotation) will be thrown when parsing this annotation. -- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. - This is transformed directly into the given class name. - -How are these annotations loaded? From looking at the code you could -guess that the ORM Mapping, Assert Validation and the fully qualified -annotation can just be loaded using -the defined PHP autoloaders. This is not the case however: For error -handling reasons every check for class existence inside the -``AnnotationReader`` sets the second parameter $autoload -of ``class_exists($name, $autoload)`` to false. To work flawlessly the -``AnnotationReader`` requires silent autoloaders which many autoloaders are -not. Silent autoloading is NOT part of the `PSR-0 specification -`_ -for autoloading. - -This is why Doctrine Annotations uses its own autoloading mechanism -through a global registry. If you are wondering about the annotation -registry being global, there is no other way to solve the architectural -problems of autoloading annotation classes in a straightforward fashion. -Additionally if you think about PHP autoloading then you recognize it is -a global as well. - -To anticipate the configuration section, making the above PHP class work -with Doctrine Annotations requires this setup: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); - AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); - AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); - - $reader = new AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('dummy'); - -The second block with the annotation registry calls registers all the -three different annotation namespaces that are used. -Doctrine Annotations saves all its annotations in a single file, that is -why ``AnnotationRegistry#registerFile`` is used in contrast to -``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 -compatible loading mechanism for class to file names. - -In the third block, we create the actual ``AnnotationReader`` instance. -Note that we also add ``dummy`` to the global list of ignored -annotations for which we do not throw exceptions. Setting this is -necessary in our example case, otherwise ``@dummy`` would trigger an -exception to be thrown during the parsing of the docblock of -``MyProject\Entities\User#id``. - -Setup and Configuration ------------------------ - -To use the annotations library is simple, you just need to create a new -``AnnotationReader`` instance: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - -This creates a simple annotation reader with no caching other than in -memory (in php arrays). Since parsing docblocks can be expensive you -should cache this process by using a caching reader. - -To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. -This reader decorates the original reader and stores all annotations in a PSR-6 -cache: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\PsrCachedReader; - - $cache = ... // instantiate a PSR-6 Cache pool - - $reader = new PsrCachedReader( - new AnnotationReader(), - $cache, - $debug = true - ); - -The ``debug`` flag is used here as well to invalidate the cache files -when the PHP class with annotations changed and should be used during -development. - -.. warning :: - - The ``AnnotationReader`` works and caches under the - assumption that all annotations of a doc-block are processed at - once. That means that annotation classes that do not exist and - aren't loaded and cannot be autoloaded (using the - AnnotationRegistry) would never be visible and not accessible if a - cache is used unless the cache is cleared and the annotations - requested again, this time with all annotations defined. - -By default the annotation reader returns a list of annotations with -numeric indexes. If you want your annotations to be indexed by their -class name you can wrap the reader in an ``IndexedReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\IndexedReader; - - $reader = new IndexedReader(new AnnotationReader()); - -.. warning:: - - You should never wrap the indexed reader inside a cached reader, - only the other way around. This way you can re-use the cache with - indexed or numeric keys, otherwise your code may experience failures - due to caching in a numerical or indexed format. - -Registering Annotations -~~~~~~~~~~~~~~~~~~~~~~~ - -As explained in the introduction, Doctrine Annotations uses its own -autoloading mechanism to determine if a given annotation has a -corresponding PHP class that can be autoloaded. For annotation -autoloading you have to configure the -``Doctrine\Common\Annotations\AnnotationRegistry``. There are three -different mechanisms to configure annotation autoloading: - -- Calling ``AnnotationRegistry#registerFile($file)`` to register a file - that contains one or more annotation classes. -- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = - null)`` to register that the given namespace contains annotations and - that their base directory is located at the given $dirs or in the - include path if ``NULL`` is passed. The given directories should *NOT* - be the directory where classes of the namespace are in, but the base - directory of the root namespace. The AnnotationRegistry uses a - namespace to directory separator approach to resolve the correct path. -- Calling ``AnnotationRegistry#registerLoader($callable)`` to register - an autoloader callback. The callback accepts the class as first and - only parameter and has to return ``true`` if the corresponding file - was found and included. - -.. note:: - - Loaders have to fail silently, if a class is not found even if it - matches for example the namespace prefix of that loader. Never is a - loader to throw a warning or exception if the loading failed - otherwise parsing doc block annotations will become a huge pain. - -A sample loader callback could look like: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationRegistry; - use Symfony\Component\ClassLoader\UniversalClassLoader; - - AnnotationRegistry::registerLoader(function($class) { - $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; - - if (file_exists("/my/base/path/" . $file)) { - // file_exists() makes sure that the loader fails silently - require "/my/base/path/" . $file; - } - }); - - $loader = new UniversalClassLoader(); - AnnotationRegistry::registerLoader(array($loader, "loadClass")); - - -Ignoring missing exceptions -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default an exception is thrown from the ``AnnotationReader`` if an -annotation was found that: - -- is not part of the list of ignored "documentation annotations"; -- was not imported through a use statement; -- is not a fully qualified class that exists. - -You can disable this behavior for specific names if your docblocks do -not follow strict requirements: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('foo'); - -PHP Imports -~~~~~~~~~~~ - -By default the annotation reader parses the use-statement of a php file -to gain access to the import rules and register them for the annotation -processing. Only if you are using PHP Imports can you validate the -correct usage of annotations and throw exceptions if you misspelled an -annotation. This mechanism is enabled by default. - -To ease the upgrade path, we still allow you to disable this mechanism. -Note however that we will remove this in future versions: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setEnabledPhpImports(false); diff --git a/old_vendor/doctrine/annotations/docs/en/custom.rst b/old_vendor/doctrine/annotations/docs/en/custom.rst deleted file mode 100644 index e8f79af7..00000000 --- a/old_vendor/doctrine/annotations/docs/en/custom.rst +++ /dev/null @@ -1,443 +0,0 @@ -Custom Annotation Classes -========================= - -If you want to define your own annotations, you just have to group them -in a namespace and register this namespace in the ``AnnotationRegistry``. -Annotation classes have to contain a class-level docblock with the text -``@Annotation``: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** @Annotation */ - class Bar - { - // some code - } - -Inject annotation values ------------------------- - -The annotation parser checks if the annotation constructor has arguments, -if so then it will pass the value array, otherwise it will try to inject -values into public properties directly: - - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * - * Some Annotation using a constructor - */ - class Bar - { - private $foo; - - public function __construct(array $values) - { - $this->foo = $values['foo']; - } - } - - /** - * @Annotation - * - * Some Annotation without a constructor - */ - class Foo - { - public $bar; - } - -Optional: Constructors with Named Parameters --------------------------------------------- - -Starting with Annotations v1.11 a new annotation instantiation strategy -is available that aims at compatibility of Annotation classes with the PHP 8 -attribute feature. You need to declare a constructor with regular parameter -names that match the named arguments in the annotation syntax. - -To enable this feature, you can tag your annotation class with -``@NamedArgumentConstructor`` (available from v1.12) or implement the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface -(available from v1.11 and deprecated as of v1.12). -When using the ``@NamedArgumentConstructor`` tag, the first argument of the -constructor is considered as the default one. - - -Usage with the ``@NamedArgumentConstructor`` tag - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(string $foo) - { - $this->foo = $foo; - } - } - - /** Usable with @Bar(foo="baz") */ - /** Usable with @Bar("baz") */ - -In combination with PHP 8's constructor property promotion feature -you can simplify this to: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - public function __construct(private string $foo) {} - } - - -Usage with the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` -interface (v1.11, deprecated as of v1.12): -.. code-block:: php - - namespace MyCompany\Annotations; - - use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; - - /** @Annotation */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(private string $foo) {} - } - - /** Usable with @Bar(foo="baz") */ - -Annotation Target ------------------ - -``@Target`` indicates the kinds of class elements to which an annotation -type is applicable. Then you could define one or more targets: - -- ``CLASS`` Allowed in class docblocks -- ``PROPERTY`` Allowed in property docblocks -- ``METHOD`` Allowed in the method docblocks -- ``FUNCTION`` Allowed in function dockblocks -- ``ALL`` Allowed in class, property, method and function docblocks -- ``ANNOTATION`` Allowed inside other annotations - -If the annotations is not allowed in the current context, an -``AnnotationException`` is thrown. - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - // some code - } - - /** - * @Annotation - * @Target("CLASS") - */ - class Foo - { - // some code - } - -Attribute types ---------------- - -The annotation parser checks the given parameters using the phpdoc -annotation ``@var``, The data type could be validated using the ``@var`` -annotation on the annotation properties or using the ``@Attributes`` and -``@Attribute`` annotations. - -If the data type does not match you get an ``AnnotationException`` - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - /** @var mixed */ - public $mixed; - - /** @var boolean */ - public $boolean; - - /** @var bool */ - public $bool; - - /** @var float */ - public $float; - - /** @var string */ - public $string; - - /** @var integer */ - public $integer; - - /** @var array */ - public $array; - - /** @var SomeAnnotationClass */ - public $annotation; - - /** @var array */ - public $arrayOfIntegers; - - /** @var array */ - public $arrayOfAnnotations; - } - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - * @Attributes({ - * @Attribute("stringProperty", type = "string"), - * @Attribute("annotProperty", type = "SomeAnnotationClass"), - * }) - */ - class Foo - { - public function __construct(array $values) - { - $this->stringProperty = $values['stringProperty']; - $this->annotProperty = $values['annotProperty']; - } - - // some code - } - -Annotation Required -------------------- - -``@Required`` indicates that the field must be specified when the -annotation is used. If it is not used you get an ``AnnotationException`` -stating that this value can not be null. - -Declaring a required field: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Foo - { - /** @Required */ - public $requiredField; - } - -Usage: - -.. code-block:: php - - /** @Foo(requiredField="value") */ - public $direction; // Valid - - /** @Foo */ - public $direction; // Required field missing, throws an AnnotationException - - -Enumerated values ------------------ - -- An annotation property marked with ``@Enum`` is a field that accepts a - fixed set of scalar values. -- You should use ``@Enum`` fields any time you need to represent fixed - values. -- The annotation parser checks the given value and throws an - ``AnnotationException`` if the value does not match. - - -Declaring an enumerated property: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Direction - { - /** - * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) - */ - public $value; - } - -Annotation usage: - -.. code-block:: php - - /** @Direction("NORTH") */ - public $direction; // Valid value - - /** @Direction("NORTHEAST") */ - public $direction; // Invalid value, throws an AnnotationException - - -Constants ---------- - -The use of constants and class constants is available on the annotations -parser. - -The following usages are allowed: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - use MyCompany\Entity\SomeClass; - - /** - * @Foo(PHP_EOL) - * @Bar(Bar::FOO) - * @Foo({SomeClass::FOO, SomeClass::BAR}) - * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) - */ - class User - { - } - - -Be careful with constants and the cache ! - -.. note:: - - The cached reader will not re-evaluate each time an annotation is - loaded from cache. When a constant is changed the cache must be - cleaned. - - -Usage ------ - -Using the library API is simple. Using the annotations described in the -previous section, you can now annotate other classes with your -annotations: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - - /** - * @Foo(bar="foo") - * @Bar(foo="bar") - */ - class User - { - } - -Now we can write a script to get the annotations above: - -.. code-block:: php - - $reflClass = new ReflectionClass('MyCompany\Entity\User'); - $classAnnotations = $reader->getClassAnnotations($reflClass); - - foreach ($classAnnotations AS $annot) { - if ($annot instanceof \MyCompany\Annotations\Foo) { - echo $annot->bar; // prints "foo"; - } else if ($annot instanceof \MyCompany\Annotations\Bar) { - echo $annot->foo; // prints "bar"; - } - } - -You have a complete API for retrieving annotation class instances from a -class, property or method docblock: - - -Reader API -~~~~~~~~~~ - -Access all annotations of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotations(\ReflectionClass $class); - -Access one annotation of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotation(\ReflectionClass $class, $annotationName); - -Access all annotations of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotations(\ReflectionMethod $method); - -Access one annotation of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); - -Access all annotations of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotations(\ReflectionProperty $property); - -Access one annotation of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); - -Access all annotations of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotations(\ReflectionFunction $property); - -Access one annotation of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/old_vendor/doctrine/annotations/docs/en/index.rst b/old_vendor/doctrine/annotations/docs/en/index.rst deleted file mode 100644 index 7caffb50..00000000 --- a/old_vendor/doctrine/annotations/docs/en/index.rst +++ /dev/null @@ -1,110 +0,0 @@ -Deprecation notice -================== - -PHP 8 introduced `attributes -`_, -which are a native replacement for annotations. As such, this library is -considered feature complete, and should receive exclusively bugfixes and -security fixes. - -Introduction -============ - -Doctrine Annotations allows to implement custom annotation -functionality for PHP classes and functions. - -.. code-block:: php - - class Foo - { - /** - * @MyAnnotation(myProperty="value") - */ - private $bar; - } - -Annotations aren't implemented in PHP itself which is why this component -offers a way to use the PHP doc-blocks as a place for the well known -annotation syntax using the ``@`` char. - -Annotations in Doctrine are used for the ORM configuration to build the -class mapping, but it can be used in other projects for other purposes -too. - -Installation -============ - -You can install the Annotation component with composer: - -.. code-block:: - -   $ composer require doctrine/annotations - -Create an annotation class -========================== - -An annotation class is a representation of the later used annotation -configuration in classes. The annotation class of the previous example -looks like this: - -.. code-block:: php - - /** - * @Annotation - */ - final class MyAnnotation - { - public $myProperty; - } - -The annotation class is declared as an annotation by ``@Annotation``. - -:ref:`Read more about custom annotations. ` - -Reading annotations -=================== - -The access to the annotations happens by reflection of the class or function -containing them. There are multiple reader-classes implementing the -``Doctrine\Common\Annotations\Reader`` interface, that can access the -annotations of a class. A common one is -``Doctrine\Common\Annotations\AnnotationReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - // Deprecated and will be removed in 2.0 but currently needed - AnnotationRegistry::registerLoader('class_exists'); - - $reflectionClass = new ReflectionClass(Foo::class); - $property = $reflectionClass->getProperty('bar'); - - $reader = new AnnotationReader(); - $myAnnotation = $reader->getPropertyAnnotation( - $property, - MyAnnotation::class - ); - - echo $myAnnotation->myProperty; // result: "value" - -Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works -if you already have an autoloader configured (i.e. composer autoloader). -Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. - -A reader has multiple methods to access the annotations of a class or -function. - -:ref:`Read more about handling annotations. ` - -IDE Support ------------ - -Some IDEs already provide support for annotations: - -- Eclipse via the `Symfony2 Plugin `_ -- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ - -.. _Read more about handling annotations.: annotations -.. _Read more about custom annotations.: custom diff --git a/old_vendor/doctrine/annotations/docs/en/sidebar.rst b/old_vendor/doctrine/annotations/docs/en/sidebar.rst deleted file mode 100644 index 6f5d13c4..00000000 --- a/old_vendor/doctrine/annotations/docs/en/sidebar.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. toctree:: - :depth: 3 - - index - annotations - custom diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php deleted file mode 100644 index 9cae3dac..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php +++ /dev/null @@ -1,57 +0,0 @@ - $data Key-value for properties to be defined in this class. */ - final public function __construct(array $data) - { - foreach ($data as $key => $value) { - $this->$key = $value; - } - } - - /** - * Error handler for unknown property accessor in Annotation class. - * - * @param string $name Unknown property name. - * - * @throws BadMethodCallException - */ - public function __get($name) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } - - /** - * Error handler for unknown property mutator in Annotation class. - * - * @param string $name Unknown property name. - * @param mixed $value Property value. - * - * @throws BadMethodCallException - */ - public function __set($name, $value) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php deleted file mode 100644 index b1f85140..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php +++ /dev/null @@ -1,21 +0,0 @@ - */ - public $value; -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php deleted file mode 100644 index 6f24d9f1..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php +++ /dev/null @@ -1,69 +0,0 @@ - */ - public $value; - - /** - * Literal target declaration. - * - * @var mixed[] - */ - public $literal; - - /** - * @phpstan-param array{literal?: mixed[], value: list} $values - * - * @throws InvalidArgumentException - */ - public function __construct(array $values) - { - if (! isset($values['literal'])) { - $values['literal'] = []; - } - - foreach ($values['value'] as $var) { - if (! is_scalar($var)) { - throw new InvalidArgumentException(sprintf( - '@Enum supports only scalar values "%s" given.', - is_object($var) ? get_class($var) : gettype($var) - )); - } - } - - foreach ($values['literal'] as $key => $var) { - if (! in_array($key, $values['value'])) { - throw new InvalidArgumentException(sprintf( - 'Undefined enumerator value "%s" for literal "%s".', - $key, - $var - )); - } - } - - $this->value = $values['value']; - $this->literal = $values['literal']; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php deleted file mode 100644 index 97a15c25..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php +++ /dev/null @@ -1,43 +0,0 @@ - */ - public $names; - - /** - * @phpstan-param array{value: string|list} $values - * - * @throws RuntimeException - */ - public function __construct(array $values) - { - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new RuntimeException(sprintf( - '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', - json_encode($values['value']) - )); - } - - $this->names = $values['value']; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php deleted file mode 100644 index 16906010..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php +++ /dev/null @@ -1,13 +0,0 @@ - */ - private static $map = [ - 'ALL' => self::TARGET_ALL, - 'CLASS' => self::TARGET_CLASS, - 'METHOD' => self::TARGET_METHOD, - 'PROPERTY' => self::TARGET_PROPERTY, - 'FUNCTION' => self::TARGET_FUNCTION, - 'ANNOTATION' => self::TARGET_ANNOTATION, - ]; - - /** @phpstan-var list */ - public $value; - - /** - * Targets as bitmask. - * - * @var int - */ - public $targets; - - /** - * Literal target declaration. - * - * @var string - */ - public $literal; - - /** - * @phpstan-param array{value?: string|list} $values - * - * @throws InvalidArgumentException - */ - public function __construct(array $values) - { - if (! isset($values['value'])) { - $values['value'] = null; - } - - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new InvalidArgumentException( - sprintf( - '@Target expects either a string value, or an array of strings, "%s" given.', - is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) - ) - ); - } - - $bitmask = 0; - foreach ($values['value'] as $literal) { - if (! isset(self::$map[$literal])) { - throw new InvalidArgumentException( - sprintf( - 'Invalid Target "%s". Available targets: [%s]', - $literal, - implode(', ', array_keys(self::$map)) - ) - ); - } - - $bitmask |= self::$map[$literal]; - } - - $this->targets = $bitmask; - $this->value = $values['value']; - $this->literal = implode(', ', $this->value); - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php deleted file mode 100644 index dcdfe4df..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php +++ /dev/null @@ -1,167 +0,0 @@ - $available - * - * @return AnnotationException - */ - public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) - { - return new self(sprintf( - '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', - $attributeName, - $annotationName, - $context, - implode(', ', $available), - is_object($given) ? get_class($given) : $given - )); - } - - /** @return AnnotationException */ - public static function optimizerPlusSaveComments() - { - return new self( - 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' - ); - } - - /** @return AnnotationException */ - public static function optimizerPlusLoadComments() - { - return new self( - 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' - ); - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php deleted file mode 100644 index 1f538ee5..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php +++ /dev/null @@ -1,389 +0,0 @@ - - */ - private static $globalImports = [ - 'ignoreannotation' => Annotation\IgnoreAnnotation::class, - ]; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNamespaces = []; - - /** - * Add a new annotation to the globally ignored annotation names with regard to exception handling. - * - * @param string $name - */ - public static function addGlobalIgnoredName($name) - { - self::$globalIgnoredNames[$name] = true; - } - - /** - * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. - * - * @param string $namespace - */ - public static function addGlobalIgnoredNamespace($namespace) - { - self::$globalIgnoredNamespaces[$namespace] = true; - } - - /** - * Annotations parser. - * - * @var DocParser - */ - private $parser; - - /** - * Annotations parser used to collect parsing metadata. - * - * @var DocParser - */ - private $preParser; - - /** - * PHP parser used to collect imports. - * - * @var PhpParser - */ - private $phpParser; - - /** - * In-memory cache mechanism to store imported annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $imports = []; - - /** - * In-memory cache mechanism to store ignored annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $ignoredAnnotationNames = []; - - /** - * Initializes a new AnnotationReader. - * - * @throws AnnotationException - */ - public function __construct(?DocParser $parser = null) - { - if ( - extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || - ini_get('opcache.save_comments') === '0') - ) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - // Make sure that the IgnoreAnnotation annotation is loaded - class_exists(IgnoreAnnotation::class); - - $this->parser = $parser ?: new DocParser(); - - $this->preParser = new DocParser(); - - $this->preParser->setImports(self::$globalImports); - $this->preParser->setIgnoreNotImportedAnnotations(true); - $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); - - $this->phpParser = new PhpParser(); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $this->parser->setTarget(Target::TARGET_CLASS); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $context = 'property ' . $class->getName() . '::$' . $property->getName(); - - $this->parser->setTarget(Target::TARGET_PROPERTY); - $this->parser->setImports($this->getPropertyImports($property)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($property->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - - $this->parser->setTarget(Target::TARGET_METHOD); - $this->parser->setImports($this->getMethodImports($method)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($method->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets the annotations applied to a function. - * - * @phpstan-return list An array of Annotations. - */ - public function getFunctionAnnotations(ReflectionFunction $function): array - { - $context = 'function ' . $function->getName(); - - $this->parser->setTarget(Target::TARGET_FUNCTION); - $this->parser->setImports($this->getImports($function)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($function->getDocComment(), $context); - } - - /** - * Gets a function annotation. - * - * @return object|null The Annotation or NULL, if the requested annotation does not exist. - */ - public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) - { - $annotations = $this->getFunctionAnnotations($function); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Returns the ignored annotations for the given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getIgnoredAnnotationNames($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->ignoredAnnotationNames[$type][$name])) { - return $this->ignoredAnnotationNames[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->ignoredAnnotationNames[$type][$name]; - } - - /** - * Retrieves imports for a class or a function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getImports($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->imports[$type][$name])) { - return $this->imports[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->imports[$type][$name]; - } - - /** - * Retrieves imports for methods. - * - * @return array - */ - private function getMethodImports(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if ( - ! $trait->hasMethod($method->getName()) - || $trait->getFileName() !== $method->getFileName() - ) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Retrieves imports for properties. - * - * @return array - */ - private function getPropertyImports(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if (! $trait->hasProperty($property->getName())) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Collects parsing metadata for a given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - */ - private function collectParsingMetadata($reflection): void - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - $ignoredAnnotationNames = self::$globalIgnoredNames; - $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); - - foreach ($annotations as $annotation) { - if (! ($annotation instanceof IgnoreAnnotation)) { - continue; - } - - foreach ($annotation->names as $annot) { - $ignoredAnnotationNames[$annot] = true; - } - } - - $this->imports[$type][$name] = array_merge( - self::$globalImports, - $this->phpParser->parseUseStatements($reflection), - [ - '__NAMESPACE__' => $reflection->getNamespaceName(), - 'self' => $name, - ] - ); - - $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php deleted file mode 100644 index 259d497d..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php +++ /dev/null @@ -1,190 +0,0 @@ -|null $dirs - */ - public static function registerAutoloadNamespace(string $namespace, $dirs = null): void - { - self::$autoloadNamespaces[$namespace] = $dirs; - } - - /** - * Registers multiple namespaces. - * - * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - * - * @param string[][]|string[]|null[] $namespaces indexed by namespace name - */ - public static function registerAutoloadNamespaces(array $namespaces): void - { - self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); - } - - /** - * Registers an autoloading callable for annotations, much like spl_autoload_register(). - * - * NOTE: These class loaders HAVE to be silent when a class was not found! - * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerLoader(callable $callable): void - { - // Reset our static cache now that we have a new loader to work with - self::$failedToAutoload = []; - self::$loaders[] = $callable; - } - - /** - * Registers an autoloading callable for annotations, if it is not already registered - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerUniqueLoader(callable $callable): void - { - if (in_array($callable, self::$loaders, true)) { - return; - } - - self::registerLoader($callable); - } - - /** - * Autoloads an annotation class silently. - */ - public static function loadAnnotationClass(string $class): bool - { - if (class_exists($class, false)) { - return true; - } - - if (array_key_exists($class, self::$failedToAutoload)) { - return false; - } - - foreach (self::$autoloadNamespaces as $namespace => $dirs) { - if (strpos($class, $namespace) !== 0) { - continue; - } - - $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; - - if ($dirs === null) { - $path = stream_resolve_include_path($file); - if ($path) { - require $path; - - return true; - } - } else { - foreach ((array) $dirs as $dir) { - if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { - require $dir . DIRECTORY_SEPARATOR . $file; - - return true; - } - } - } - } - - foreach (self::$loaders as $loader) { - if ($loader($class) === true) { - return true; - } - } - - if ( - self::$loaders === [] && - self::$autoloadNamespaces === [] && - self::$registerFileUsed === false && - class_exists($class) - ) { - return true; - } - - self::$failedToAutoload[$class] = null; - - return false; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php deleted file mode 100644 index 85dbefab..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php +++ /dev/null @@ -1,266 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - /** @param bool $debug */ - public function __construct(Reader $reader, Cache $cache, $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getClassAnnotations($class); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getPropertyAnnotations($property); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getMethodAnnotations($method); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** - * Fetches a value from the cache. - * - * @param string $cacheKey The cache key. - * - * @return mixed The cached value or false when the value is not in cache. - */ - private function fetchFromCache($cacheKey, ReflectionClass $class) - { - $data = $this->cache->fetch($cacheKey); - if ($data !== false) { - if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { - return $data; - } - } - - return false; - } - - /** - * Saves a value to the cache. - * - * @param string $cacheKey The cache key. - * @param mixed $value The value. - * - * @return void - */ - private function saveToCache($cacheKey, $value) - { - $this->cache->save($cacheKey, $value); - if (! $this->debug) { - return; - } - - $this->cache->save('[C]' . $cacheKey, time()); - } - - /** - * Checks if the cache is fresh. - * - * @param string $cacheKey - * - * @return bool - */ - private function isCacheFresh($cacheKey, ReflectionClass $class) - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php deleted file mode 100644 index dbba5252..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php +++ /dev/null @@ -1,143 +0,0 @@ - - */ -final class DocLexer extends AbstractLexer -{ - public const T_NONE = 1; - public const T_INTEGER = 2; - public const T_STRING = 3; - public const T_FLOAT = 4; - - // All tokens that are also identifiers should be >= 100 - public const T_IDENTIFIER = 100; - public const T_AT = 101; - public const T_CLOSE_CURLY_BRACES = 102; - public const T_CLOSE_PARENTHESIS = 103; - public const T_COMMA = 104; - public const T_EQUALS = 105; - public const T_FALSE = 106; - public const T_NAMESPACE_SEPARATOR = 107; - public const T_OPEN_CURLY_BRACES = 108; - public const T_OPEN_PARENTHESIS = 109; - public const T_TRUE = 110; - public const T_NULL = 111; - public const T_COLON = 112; - public const T_MINUS = 113; - - /** @var array */ - protected $noCase = [ - '@' => self::T_AT, - ',' => self::T_COMMA, - '(' => self::T_OPEN_PARENTHESIS, - ')' => self::T_CLOSE_PARENTHESIS, - '{' => self::T_OPEN_CURLY_BRACES, - '}' => self::T_CLOSE_CURLY_BRACES, - '=' => self::T_EQUALS, - ':' => self::T_COLON, - '-' => self::T_MINUS, - '\\' => self::T_NAMESPACE_SEPARATOR, - ]; - - /** @var array */ - protected $withCase = [ - 'true' => self::T_TRUE, - 'false' => self::T_FALSE, - 'null' => self::T_NULL, - ]; - - /** - * Whether the next token starts immediately, or if there were - * non-captured symbols before that - */ - public function nextTokenIsAdjacent(): bool - { - return $this->token === null - || ($this->lookahead !== null - && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); - } - - /** - * {@inheritdoc} - */ - protected function getCatchablePatterns() - { - return [ - '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', - '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', - '"(?:""|[^"])*+"', - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNonCatchablePatterns() - { - return ['\s+', '\*+', '(.)']; - } - - /** - * {@inheritdoc} - */ - protected function getType(&$value) - { - $type = self::T_NONE; - - if ($value[0] === '"') { - $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); - - return self::T_STRING; - } - - if (isset($this->noCase[$value])) { - return $this->noCase[$value]; - } - - if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { - return self::T_IDENTIFIER; - } - - $lowerValue = strtolower($value); - - if (isset($this->withCase[$lowerValue])) { - return $this->withCase[$lowerValue]; - } - - // Checking numeric value - if (is_numeric($value)) { - return strpos($value, '.') !== false || stripos($value, 'e') !== false - ? self::T_FLOAT : self::T_INTEGER; - } - - return $type; - } - - /** @return array{value: int|string, type:self::T_*|null, position:int} */ - public function peek(): ?array - { - $token = parent::peek(); - - if ($token === null) { - return null; - } - - return (array) $token; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php deleted file mode 100644 index 5ec150d3..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php +++ /dev/null @@ -1,1506 +0,0 @@ - - */ - private static $classIdentifiers = [ - DocLexer::T_IDENTIFIER, - DocLexer::T_TRUE, - DocLexer::T_FALSE, - DocLexer::T_NULL, - ]; - - /** - * The lexer. - * - * @var DocLexer - */ - private $lexer; - - /** - * Current target context. - * - * @var int - */ - private $target; - - /** - * Doc parser used to collect annotation target. - * - * @var DocParser - */ - private static $metadataParser; - - /** - * Flag to control if the current annotation is nested or not. - * - * @var bool - */ - private $isNestedAnnotation = false; - - /** - * Hashmap containing all use-statements that are to be used when parsing - * the given doc block. - * - * @var array - */ - private $imports = []; - - /** - * This hashmap is used internally to cache results of class_exists() - * look-ups. - * - * @var array - */ - private $classExists = []; - - /** - * Whether annotations that have not been imported should be ignored. - * - * @var bool - */ - private $ignoreNotImportedAnnotations = false; - - /** - * An array of default namespaces if operating in simple mode. - * - * @var string[] - */ - private $namespaces = []; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names must be the raw names as used in the class, not the fully qualified - * - * @var bool[] indexed by annotation name - */ - private $ignoredAnnotationNames = []; - - /** - * A list with annotations in namespaced format - * that are not causing exceptions when not resolved to an annotation class. - * - * @var bool[] indexed by namespace name - */ - private $ignoredAnnotationNamespaces = []; - - /** @var string */ - private $context = ''; - - /** - * Hash-map for caching annotation metadata. - * - * @var array - */ - private static $annotationMetadata = [ - Annotation\Target::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'properties' => [], - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'attribute_types' => [ - 'value' => [ - 'required' => false, - 'type' => 'array', - 'array_type' => 'string', - 'value' => 'array', - ], - ], - ], - Annotation\Attribute::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_ANNOTATION', - 'targets' => Target::TARGET_ANNOTATION, - 'default_property' => 'name', - 'properties' => [ - 'name' => 'name', - 'type' => 'type', - 'required' => 'required', - ], - 'attribute_types' => [ - 'value' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'type' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'required' => [ - 'required' => false, - 'type' => 'boolean', - 'value' => 'boolean', - ], - ], - ], - Annotation\Attributes::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - 'array_type' => Annotation\Attribute::class, - 'value' => 'array<' . Annotation\Attribute::class . '>', - ], - ], - ], - Annotation\Enum::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_PROPERTY', - 'targets' => Target::TARGET_PROPERTY, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - ], - 'literal' => [ - 'type' => 'array', - 'required' => false, - ], - ], - ], - Annotation\NamedArgumentConstructor::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => null, - 'properties' => [], - 'attribute_types' => [], - ], - ]; - - /** - * Hash-map for handle types declaration. - * - * @var array - */ - private static $typeMap = [ - 'float' => 'double', - 'bool' => 'boolean', - // allow uppercase Boolean in honor of George Boole - 'Boolean' => 'boolean', - 'int' => 'integer', - ]; - - /** - * Constructs a new DocParser. - */ - public function __construct() - { - $this->lexer = new DocLexer(); - } - - /** - * Sets the annotation names that are ignored during the parsing process. - * - * The names are supposed to be the raw names as used in the class, not the - * fully qualified class names. - * - * @param bool[] $names indexed by annotation name - * - * @return void - */ - public function setIgnoredAnnotationNames(array $names) - { - $this->ignoredAnnotationNames = $names; - } - - /** - * Sets the annotation namespaces that are ignored during the parsing process. - * - * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name - * - * @return void - */ - public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) - { - $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; - } - - /** - * Sets ignore on not-imported annotations. - * - * @param bool $bool - * - * @return void - */ - public function setIgnoreNotImportedAnnotations($bool) - { - $this->ignoreNotImportedAnnotations = (bool) $bool; - } - - /** - * Sets the default namespaces. - * - * @param string $namespace - * - * @return void - * - * @throws RuntimeException - */ - public function addNamespace($namespace) - { - if ($this->imports) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->namespaces[] = $namespace; - } - - /** - * Sets the imports. - * - * @param array $imports - * - * @return void - * - * @throws RuntimeException - */ - public function setImports(array $imports) - { - if ($this->namespaces) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->imports = $imports; - } - - /** - * Sets current target context as bitmask. - * - * @param int $target - * - * @return void - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Parses the given docblock string for annotations. - * - * @param string $input The docblock string to parse. - * @param string $context The parsing context. - * - * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. - * - * @throws AnnotationException - * @throws ReflectionException - */ - public function parse($input, $context = '') - { - $pos = $this->findInitialTokenPosition($input); - if ($pos === null) { - return []; - } - - $this->context = $context; - - $this->lexer->setInput(trim(substr($input, $pos), '* /')); - $this->lexer->moveNext(); - - return $this->Annotations(); - } - - /** - * Finds the first valid annotation - * - * @param string $input The docblock string to parse - */ - private function findInitialTokenPosition($input): ?int - { - $pos = 0; - - // search for first valid annotation - while (($pos = strpos($input, '@', $pos)) !== false) { - $preceding = substr($input, $pos - 1, 1); - - // if the @ is preceded by a space, a tab or * it is valid - if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { - return $pos; - } - - $pos++; - } - - return null; - } - - /** - * Attempts to match the given token with the current lookahead token. - * If they match, updates the lookahead token; otherwise raises a syntax error. - * - * @param int $token Type of token. - * - * @return bool True if tokens match; false otherwise. - * - * @throws AnnotationException - */ - private function match(int $token): bool - { - if (! $this->lexer->isNextToken($token)) { - throw $this->syntaxError($this->lexer->getLiteral($token)); - } - - return $this->lexer->moveNext(); - } - - /** - * Attempts to match the current lookahead token with any of the given tokens. - * - * If any of them matches, this method updates the lookahead token; otherwise - * a syntax error is raised. - * - * @phpstan-param list $tokens - * - * @throws AnnotationException - */ - private function matchAny(array $tokens): bool - { - if (! $this->lexer->isNextTokenAny($tokens)) { - throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); - } - - return $this->lexer->moveNext(); - } - - /** - * Generates a new syntax error. - * - * @param string $expected Expected string. - * @param mixed[]|null $token Optional token. - */ - private function syntaxError(string $expected, ?array $token = null): AnnotationException - { - if ($token === null) { - $token = $this->lexer->lookahead; - } - - $message = sprintf('Expected %s, got ', $expected); - $message .= $this->lexer->lookahead === null - ? 'end of string' - : sprintf("'%s' at position %s", $token['value'], $token['position']); - - if (strlen($this->context)) { - $message .= ' in ' . $this->context; - } - - $message .= '.'; - - return AnnotationException::syntaxError($message); - } - - /** - * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism - * but uses the {@link AnnotationRegistry} to load classes. - * - * @param class-string $fqcn - */ - private function classExists(string $fqcn): bool - { - if (isset($this->classExists[$fqcn])) { - return $this->classExists[$fqcn]; - } - - // first check if the class already exists, maybe loaded through another AnnotationReader - if (class_exists($fqcn, false)) { - return $this->classExists[$fqcn] = true; - } - - // final check, does this class exist? - return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); - } - - /** - * Collects parsing metadata for a given annotation class - * - * @param class-string $name The annotation name - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function collectAnnotationMetadata(string $name): void - { - if (self::$metadataParser === null) { - self::$metadataParser = new self(); - - self::$metadataParser->setIgnoreNotImportedAnnotations(true); - self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); - self::$metadataParser->setImports([ - 'enum' => Enum::class, - 'target' => Target::class, - 'attribute' => Attribute::class, - 'attributes' => Attributes::class, - 'namedargumentconstructor' => NamedArgumentConstructor::class, - ]); - - // Make sure that annotations from metadata are loaded - class_exists(Enum::class); - class_exists(Target::class); - class_exists(Attribute::class); - class_exists(Attributes::class); - class_exists(NamedArgumentConstructor::class); - } - - $class = new ReflectionClass($name); - $docComment = $class->getDocComment(); - - // Sets default values for annotation metadata - $constructor = $class->getConstructor(); - $metadata = [ - 'default_property' => null, - 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, - 'constructor_args' => [], - 'properties' => [], - 'property_types' => [], - 'attribute_types' => [], - 'targets_literal' => null, - 'targets' => Target::TARGET_ALL, - 'is_annotation' => strpos($docComment, '@Annotation') !== false, - ]; - - $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] - && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); - - // verify that the class is really meant to be an annotation - if ($metadata['is_annotation']) { - self::$metadataParser->setTarget(Target::TARGET_CLASS); - - foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { - if ($annotation instanceof Target) { - $metadata['targets'] = $annotation->targets; - $metadata['targets_literal'] = $annotation->literal; - - continue; - } - - if ($annotation instanceof NamedArgumentConstructor) { - $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; - if ($metadata['has_named_argument_constructor']) { - // choose the first argument as the default property - $metadata['default_property'] = $constructor->getParameters()[0]->getName(); - } - } - - if (! ($annotation instanceof Attributes)) { - continue; - } - - foreach ($annotation->value as $attribute) { - $this->collectAttributeTypeMetadata($metadata, $attribute); - } - } - - // if not has a constructor will inject values into public properties - if ($metadata['has_constructor'] === false) { - // collect all public properties - foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { - $metadata['properties'][$property->name] = $property->name; - - $propertyComment = $property->getDocComment(); - if ($propertyComment === false) { - continue; - } - - $attribute = new Attribute(); - - $attribute->required = (strpos($propertyComment, '@Required') !== false); - $attribute->name = $property->name; - $attribute->type = (strpos($propertyComment, '@var') !== false && - preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) - ? $matches[1] - : 'mixed'; - - $this->collectAttributeTypeMetadata($metadata, $attribute); - - // checks if the property has @Enum - if (strpos($propertyComment, '@Enum') === false) { - continue; - } - - $context = 'property ' . $class->name . '::$' . $property->name; - - self::$metadataParser->setTarget(Target::TARGET_PROPERTY); - - foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { - if (! $annotation instanceof Enum) { - continue; - } - - $metadata['enum'][$property->name]['value'] = $annotation->value; - $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) - ? $annotation->literal - : $annotation->value; - } - } - - // choose the first property as default property - $metadata['default_property'] = reset($metadata['properties']); - } elseif ($metadata['has_named_argument_constructor']) { - foreach ($constructor->getParameters() as $parameter) { - if ($parameter->isVariadic()) { - break; - } - - $metadata['constructor_args'][$parameter->getName()] = [ - 'position' => $parameter->getPosition(), - 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, - ]; - } - } - } - - self::$annotationMetadata[$name] = $metadata; - } - - /** - * Collects parsing metadata for a given attribute. - * - * @param mixed[] $metadata - */ - private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void - { - // handle internal type declaration - $type = self::$typeMap[$attribute->type] ?? $attribute->type; - - // handle the case if the property type is mixed - if ($type === 'mixed') { - return; - } - - // Evaluate type - $pos = strpos($type, '<'); - if ($pos !== false) { - // Checks if the property has array - $arrayType = substr($type, $pos + 1, -1); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } else { - // Checks if the property has type[] - $pos = strrpos($type, '['); - if ($pos !== false) { - $arrayType = substr($type, 0, $pos); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } - } - - $metadata['attribute_types'][$attribute->name]['type'] = $type; - $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; - $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; - } - - /** - * Annotations ::= Annotation {[ "*" ]* [Annotation]}* - * - * @phpstan-return list - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Annotations(): array - { - $annotations = []; - - while ($this->lexer->lookahead !== null) { - if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is preceded by non-catchable pattern - if ( - $this->lexer->token !== null && - $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( - $this->lexer->token['value'] - ) - ) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is followed by either a namespace separator, or - // an identifier token - $peek = $this->lexer->glimpse(); - if ( - ($peek === null) - || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( - $peek['type'], - self::$classIdentifiers, - true - )) - || $peek['position'] !== $this->lexer->lookahead['position'] + 1 - ) { - $this->lexer->moveNext(); - continue; - } - - $this->isNestedAnnotation = false; - $annot = $this->Annotation(); - if ($annot === false) { - continue; - } - - $annotations[] = $annot; - } - - return $annotations; - } - - /** - * Annotation ::= "@" AnnotationName MethodCall - * AnnotationName ::= QualifiedName | SimpleName - * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName - * NameSpacePart ::= identifier | null | false | true - * SimpleName ::= identifier | null | false | true - * - * @return object|false False if it is not a valid annotation. - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Annotation() - { - $this->match(DocLexer::T_AT); - - // check if we have an annotation - $name = $this->Identifier(); - - if ( - $this->lexer->isNextToken(DocLexer::T_MINUS) - && $this->lexer->nextTokenIsAdjacent() - ) { - // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded - return false; - } - - // only process names which are not fully qualified, yet - // fully qualified names must start with a \ - $originalName = $name; - - if ($name[0] !== '\\') { - $pos = strpos($name, '\\'); - $alias = ($pos === false) ? $name : substr($name, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - if ($this->namespaces) { - foreach ($this->namespaces as $namespace) { - if ($this->classExists($namespace . '\\' . $name)) { - $name = $namespace . '\\' . $name; - $found = true; - break; - } - } - } elseif (isset($this->imports[$loweredAlias])) { - $namespace = ltrim($this->imports[$loweredAlias], '\\'); - $name = ($pos !== false) - ? $namespace . substr($name, $pos) - : $namespace; - $found = $this->classExists($name); - } elseif ( - ! isset($this->ignoredAnnotationNames[$name]) - && isset($this->imports['__NAMESPACE__']) - && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) - ) { - $name = $this->imports['__NAMESPACE__'] . '\\' . $name; - $found = true; - } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { - $found = true; - } - - if (! $found) { - if ($this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? -EXCEPTION - , - $name, - $this->context - )); - } - } - - $name = ltrim($name, '\\'); - - if (! $this->classExists($name)) { - throw AnnotationException::semanticalError(sprintf( - 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', - $name, - $this->context - )); - } - - // at this point, $name contains the fully qualified class name of the - // annotation, and it is also guaranteed that this class exists, and - // that it is loaded - - // collects the metadata annotation only if there is not yet - if (! isset(self::$annotationMetadata[$name])) { - $this->collectAnnotationMetadata($name); - } - - // verify that the class is really meant to be an annotation and not just any ordinary class - if (self::$annotationMetadata[$name]['is_annotation'] === false) { - if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The class "%s" is not annotated with @Annotation. -Are you sure this class can be used as annotation? -If so, then you need to add @Annotation to the _class_ doc comment of "%s". -If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. -EXCEPTION - , - $name, - $name, - $originalName, - $this->context - )); - } - - //if target is nested annotation - $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; - - // Next will be nested - $this->isNestedAnnotation = true; - - //if annotation does not support current target - if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { - throw AnnotationException::semanticalError( - sprintf( - <<<'EXCEPTION' -Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. -EXCEPTION - , - $originalName, - $this->context, - self::$annotationMetadata[$name]['targets_literal'] - ) - ); - } - - $arguments = $this->MethodCall(); - $values = $this->resolvePositionalValues($arguments, $name); - - if (isset(self::$annotationMetadata[$name]['enum'])) { - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { - // checks if the attribute is a valid enumerator - if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { - throw AnnotationException::enumeratorError( - $property, - $name, - $this->context, - $enum['literal'], - $values[$property] - ); - } - } - } - - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { - if ( - $property === self::$annotationMetadata[$name]['default_property'] - && ! isset($values[$property]) && isset($values['value']) - ) { - $property = 'value'; - } - - // handle a not given attribute or null value - if (! isset($values[$property])) { - if ($type['required']) { - throw AnnotationException::requiredError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'] - ); - } - - continue; - } - - if ($type['type'] === 'array') { - // handle the case of a single value - if (! is_array($values[$property])) { - $values[$property] = [$values[$property]]; - } - - // checks if the attribute has array type declaration, such as "array" - if (isset($type['array_type'])) { - foreach ($values[$property] as $item) { - if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', - $item - ); - } - } - } - } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'], - $values[$property] - ); - } - } - - if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { - if (PHP_VERSION_ID >= 80000) { - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s" -that can be set through its named arguments constructor. -Available named arguments: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) - )); - } - } - - return $this->instantiateAnnotiation($originalName, $this->context, $name, $values); - } - - $positionalValues = []; - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $positionalValues[$parameter['position']] = $parameter['default']; - } - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s" -that can be set through its named arguments constructor. -Available named arguments: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) - )); - } - - $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; - } - - return $this->instantiateAnnotiation($originalName, $this->context, $name, $positionalValues); - } - - // check if the annotation expects values via the constructor, - // or directly injected into public properties - if (self::$annotationMetadata[$name]['has_constructor'] === true) { - return $this->instantiateAnnotiation($originalName, $this->context, $name, [$values]); - } - - $instance = $this->instantiateAnnotiation($originalName, $this->context, $name, []); - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { - if ($property !== 'value') { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s". -Available properties: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', self::$annotationMetadata[$name]['properties']) - )); - } - - // handle the case if the property has no annotations - $property = self::$annotationMetadata[$name]['default_property']; - if (! $property) { - throw AnnotationException::creationError(sprintf( - 'The annotation @%s declared on %s does not accept any values, but got %s.', - $originalName, - $this->context, - json_encode($values) - )); - } - } - - $instance->{$property} = $value; - } - - return $instance; - } - - /** - * MethodCall ::= ["(" [Values] ")"] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function MethodCall(): array - { - $values = []; - - if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { - return $values; - } - - $this->match(DocLexer::T_OPEN_PARENTHESIS); - - if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - $values = $this->Values(); - } - - $this->match(DocLexer::T_CLOSE_PARENTHESIS); - - return $values; - } - - /** - * Values ::= Array | Value {"," Value}* [","] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Values(): array - { - $values = [$this->Value()]; - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - break; - } - - $token = $this->lexer->lookahead; - $value = $this->Value(); - - $values[] = $value; - } - - $namedArguments = []; - $positionalArguments = []; - foreach ($values as $k => $value) { - if (is_object($value) && $value instanceof stdClass) { - $namedArguments[$value->name] = $value->value; - } else { - $positionalArguments[$k] = $value; - } - } - - return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; - } - - /** - * Constant ::= integer | string | float | boolean - * - * @return mixed - * - * @throws AnnotationException - */ - private function Constant() - { - $identifier = $this->Identifier(); - - if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { - [$className, $const] = explode('::', $identifier); - - $pos = strpos($className, '\\'); - $alias = ($pos === false) ? $className : substr($className, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - switch (true) { - case ! empty($this->namespaces): - foreach ($this->namespaces as $ns) { - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - break; - } - } - - break; - - case isset($this->imports[$loweredAlias]): - $found = true; - $className = ($pos !== false) - ? $this->imports[$loweredAlias] . substr($className, $pos) - : $this->imports[$loweredAlias]; - break; - - default: - if (isset($this->imports['__NAMESPACE__'])) { - $ns = $this->imports['__NAMESPACE__']; - - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - } - } - - break; - } - - if ($found) { - $identifier = $className . '::' . $const; - } - } - - /** - * Checks if identifier ends with ::class and remove the leading backslash if it exists. - */ - if ( - $this->identifierEndsWithClassConstant($identifier) && - ! $this->identifierStartsWithBackslash($identifier) - ) { - return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); - } - - if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { - return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); - } - - if (! defined($identifier)) { - throw AnnotationException::semanticalErrorConstants($identifier, $this->context); - } - - return constant($identifier); - } - - private function identifierStartsWithBackslash(string $identifier): bool - { - return $identifier[0] === '\\'; - } - - private function identifierEndsWithClassConstant(string $identifier): bool - { - return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); - } - - /** @return int|false */ - private function getClassConstantPositionInIdentifier(string $identifier) - { - return stripos($identifier, '::class'); - } - - /** - * Identifier ::= string - * - * @throws AnnotationException - */ - private function Identifier(): string - { - // check if we have an annotation - if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { - throw $this->syntaxError('namespace separator or identifier'); - } - - $this->lexer->moveNext(); - - $className = $this->lexer->token['value']; - - while ( - $this->lexer->lookahead !== null && - $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + - strlen($this->lexer->token['value'])) && - $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) - ) { - $this->match(DocLexer::T_NAMESPACE_SEPARATOR); - $this->matchAny(self::$classIdentifiers); - - $className .= '\\' . $this->lexer->token['value']; - } - - return $className; - } - - /** - * Value ::= PlainValue | FieldAssignment - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Value() - { - $peek = $this->lexer->glimpse(); - - if ($peek['type'] === DocLexer::T_EQUALS) { - return $this->FieldAssignment(); - } - - return $this->PlainValue(); - } - - /** - * PlainValue ::= integer | string | float | boolean | Array | Annotation - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function PlainValue() - { - if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { - return $this->Arrayx(); - } - - if ($this->lexer->isNextToken(DocLexer::T_AT)) { - return $this->Annotation(); - } - - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - return $this->Constant(); - } - - switch ($this->lexer->lookahead['type']) { - case DocLexer::T_STRING: - $this->match(DocLexer::T_STRING); - - return $this->lexer->token['value']; - - case DocLexer::T_INTEGER: - $this->match(DocLexer::T_INTEGER); - - return (int) $this->lexer->token['value']; - - case DocLexer::T_FLOAT: - $this->match(DocLexer::T_FLOAT); - - return (float) $this->lexer->token['value']; - - case DocLexer::T_TRUE: - $this->match(DocLexer::T_TRUE); - - return true; - - case DocLexer::T_FALSE: - $this->match(DocLexer::T_FALSE); - - return false; - - case DocLexer::T_NULL: - $this->match(DocLexer::T_NULL); - - return null; - - default: - throw $this->syntaxError('PlainValue'); - } - } - - /** - * FieldAssignment ::= FieldName "=" PlainValue - * FieldName ::= identifier - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function FieldAssignment(): stdClass - { - $this->match(DocLexer::T_IDENTIFIER); - $fieldName = $this->lexer->token['value']; - - $this->match(DocLexer::T_EQUALS); - - $item = new stdClass(); - $item->name = $fieldName; - $item->value = $this->PlainValue(); - - return $item; - } - - /** - * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Arrayx(): array - { - $array = $values = []; - - $this->match(DocLexer::T_OPEN_CURLY_BRACES); - - // If the array is empty, stop parsing and return. - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - return $array; - } - - $values[] = $this->ArrayEntry(); - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - // optional trailing comma - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - break; - } - - $values[] = $this->ArrayEntry(); - } - - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - foreach ($values as $value) { - [$key, $val] = $value; - - if ($key !== null) { - $array[$key] = $val; - } else { - $array[] = $val; - } - } - - return $array; - } - - /** - * ArrayEntry ::= Value | KeyValuePair - * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant - * Key ::= string | integer | Constant - * - * @phpstan-return array{mixed, mixed} - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function ArrayEntry(): array - { - $peek = $this->lexer->glimpse(); - - if ( - $peek['type'] === DocLexer::T_EQUALS - || $peek['type'] === DocLexer::T_COLON - ) { - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - $key = $this->Constant(); - } else { - $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); - $key = $this->lexer->token['value']; - } - - $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); - - return [$key, $this->PlainValue()]; - } - - return [null, $this->Value()]; - } - - /** - * Checks whether the given $name matches any ignored annotation name or namespace - */ - private function isIgnoredAnnotation(string $name): bool - { - if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { - return true; - } - - foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { - $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; - - if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { - return true; - } - } - - return false; - } - - /** - * Resolve positional arguments (without name) to named ones - * - * @param array $arguments - * - * @return array - */ - private function resolvePositionalValues(array $arguments, string $name): array - { - $positionalArguments = $arguments['positional_arguments'] ?? []; - $values = $arguments['named_arguments'] ?? []; - - if ( - self::$annotationMetadata[$name]['has_named_argument_constructor'] - && self::$annotationMetadata[$name]['default_property'] !== null - ) { - // We must ensure that we don't have positional arguments after named ones - $positions = array_keys($positionalArguments); - $lastPosition = null; - foreach ($positions as $position) { - if ( - ($lastPosition === null && $position !== 0) || - ($lastPosition !== null && $position !== $lastPosition + 1) - ) { - throw $this->syntaxError('Positional arguments after named arguments is not allowed'); - } - - $lastPosition = $position; - } - - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $position = $parameter['position']; - if (isset($values[$property]) || ! isset($positionalArguments[$position])) { - continue; - } - - $values[$property] = $positionalArguments[$position]; - } - } else { - if (count($positionalArguments) > 0 && ! isset($values['value'])) { - if (count($positionalArguments) === 1) { - $value = array_pop($positionalArguments); - } else { - $value = array_values($positionalArguments); - } - - $values['value'] = $value; - } - } - - return $values; - } - - /** - * Try to instantiate the annotation and catch and process any exceptions related to failure - * - * @param class-string $name - * @param array $arguments - * - * @return object - * - * @throws AnnotationException - */ - private function instantiateAnnotiation(string $originalName, string $context, string $name, array $arguments) - { - try { - return new $name(...$arguments); - } catch (Throwable $exception) { - throw AnnotationException::creationError( - sprintf( - 'An error occurred while instantiating the annotation @%s declared on %s: "%s".', - $originalName, - $context, - $exception->getMessage() - ), - $exception - ); - } - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php deleted file mode 100644 index 6c6c22c3..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php +++ /dev/null @@ -1,315 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var array */ - private $classNameHashes = []; - - /** @var int */ - private $umask; - - /** - * @param string $cacheDir - * @param bool $debug - * @param int $umask - * - * @throws InvalidArgumentException - */ - public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) - { - if (! is_int($umask)) { - throw new InvalidArgumentException(sprintf( - 'The parameter umask must be an integer, was: %s', - gettype($umask) - )); - } - - $this->reader = $reader; - $this->umask = $umask; - - if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { - throw new InvalidArgumentException(sprintf( - 'The directory "%s" does not exist and could not be created.', - $cacheDir - )); - } - - $this->dir = rtrim($cacheDir, '\\/'); - $this->debug = $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name]; - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Saves the cache file. - * - * @param string $path - * @param mixed $data - * - * @return void - */ - private function saveCacheFile($path, $data) - { - if (! is_writable($this->dir)) { - throw new InvalidArgumentException(sprintf( - <<<'EXCEPTION' -The directory "%s" is not writable. Both the webserver and the console user need access. -You can manage access rights for multiple users with "chmod +a". -If your system does not support this, check out the acl package., -EXCEPTION - , - $this->dir - )); - } - - $tempfile = tempnam($this->dir, uniqid('', true)); - - if ($tempfile === false) { - throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); - } - - @chmod($tempfile, 0666 & (~$this->umask)); - - $written = file_put_contents( - $tempfile, - 'umask)); - - if (rename($tempfile, $path) === false) { - @unlink($tempfile); - - throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); - } - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php deleted file mode 100644 index ab27f8a5..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php +++ /dev/null @@ -1,178 +0,0 @@ - true, - 'Attribute' => true, - 'Attributes' => true, - /* Can we enable this? 'Enum' => true, */ - 'Required' => true, - 'Target' => true, - 'NamedArgumentConstructor' => true, - ]; - - private const WidelyUsedNonStandard = [ - 'fix' => true, - 'fixme' => true, - 'override' => true, - ]; - - private const PhpDocumentor1 = [ - 'abstract' => true, - 'access' => true, - 'code' => true, - 'deprec' => true, - 'endcode' => true, - 'exception' => true, - 'final' => true, - 'ingroup' => true, - 'inheritdoc' => true, - 'inheritDoc' => true, - 'magic' => true, - 'name' => true, - 'private' => true, - 'static' => true, - 'staticvar' => true, - 'staticVar' => true, - 'toc' => true, - 'tutorial' => true, - 'throw' => true, - ]; - - private const PhpDocumentor2 = [ - 'api' => true, - 'author' => true, - 'category' => true, - 'copyright' => true, - 'deprecated' => true, - 'example' => true, - 'filesource' => true, - 'global' => true, - 'ignore' => true, - /* Can we enable this? 'index' => true, */ - 'internal' => true, - 'license' => true, - 'link' => true, - 'method' => true, - 'package' => true, - 'param' => true, - 'property' => true, - 'property-read' => true, - 'property-write' => true, - 'return' => true, - 'see' => true, - 'since' => true, - 'source' => true, - 'subpackage' => true, - 'throws' => true, - 'todo' => true, - 'TODO' => true, - 'usedby' => true, - 'uses' => true, - 'var' => true, - 'version' => true, - ]; - - private const PHPUnit = [ - 'author' => true, - 'after' => true, - 'afterClass' => true, - 'backupGlobals' => true, - 'backupStaticAttributes' => true, - 'before' => true, - 'beforeClass' => true, - 'codeCoverageIgnore' => true, - 'codeCoverageIgnoreStart' => true, - 'codeCoverageIgnoreEnd' => true, - 'covers' => true, - 'coversDefaultClass' => true, - 'coversNothing' => true, - 'dataProvider' => true, - 'depends' => true, - 'doesNotPerformAssertions' => true, - 'expectedException' => true, - 'expectedExceptionCode' => true, - 'expectedExceptionMessage' => true, - 'expectedExceptionMessageRegExp' => true, - 'group' => true, - 'large' => true, - 'medium' => true, - 'preserveGlobalState' => true, - 'requires' => true, - 'runTestsInSeparateProcesses' => true, - 'runInSeparateProcess' => true, - 'small' => true, - 'test' => true, - 'testdox' => true, - 'testWith' => true, - 'ticket' => true, - 'uses' => true, - ]; - - private const PhpCheckStyle = ['SuppressWarnings' => true]; - - private const PhpStorm = ['noinspection' => true]; - - private const PEAR = ['package_version' => true]; - - private const PlainUML = [ - 'startuml' => true, - 'enduml' => true, - ]; - - private const Symfony = ['experimental' => true]; - - private const PhpCodeSniffer = [ - 'codingStandardsIgnoreStart' => true, - 'codingStandardsIgnoreEnd' => true, - ]; - - private const SlevomatCodingStandard = ['phpcsSuppress' => true]; - - private const Phan = ['suppress' => true]; - - private const Rector = ['noRector' => true]; - - private const StaticAnalysis = [ - // PHPStan, Psalm - 'extends' => true, - 'implements' => true, - 'readonly' => true, - 'template' => true, - 'use' => true, - - // Psalm - 'pure' => true, - 'immutable' => true, - ]; - - public const LIST = self::Reserved - + self::WidelyUsedNonStandard - + self::PhpDocumentor1 - + self::PhpDocumentor2 - + self::PHPUnit - + self::PhpCheckStyle - + self::PhpStorm - + self::PEAR - + self::PlainUML - + self::Symfony - + self::SlevomatCodingStandard - + self::PhpCodeSniffer - + self::Phan - + self::Rector - + self::StaticAnalysis; - - private function __construct() - { - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php deleted file mode 100644 index 62dcf748..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php +++ /dev/null @@ -1,100 +0,0 @@ -delegate = $reader; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $annotations = []; - foreach ($this->delegate->getClassAnnotations($class) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - return $this->delegate->getClassAnnotation($class, $annotationName); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $annotations = []; - foreach ($this->delegate->getMethodAnnotations($method) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - return $this->delegate->getMethodAnnotation($method, $annotationName); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $annotations = []; - foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - return $this->delegate->getPropertyAnnotation($property, $annotationName); - } - - /** - * Proxies all methods to the delegate. - * - * @param string $method - * @param mixed[] $args - * - * @return mixed - */ - public function __call($method, $args) - { - return call_user_func_array([$this->delegate, $method], $args); - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php deleted file mode 100644 index 8af224c0..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php +++ /dev/null @@ -1,14 +0,0 @@ -ReflectionClass object. - * - * @return array A list with use statements in the form (Alias => FQN). - */ - public function parseClass(ReflectionClass $class) - { - return $this->parseUseStatements($class); - } - - /** - * Parse a class or function for use statements. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @psalm-return array a list with use statements in the form (Alias => FQN). - */ - public function parseUseStatements($reflection): array - { - if (method_exists($reflection, 'getUseStatements')) { - return $reflection->getUseStatements(); - } - - $filename = $reflection->getFileName(); - - if ($filename === false) { - return []; - } - - $content = $this->getFileContent($filename, $reflection->getStartLine()); - - if ($content === null) { - return []; - } - - $namespace = preg_quote($reflection->getNamespaceName()); - $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); - $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); - } - - /** - * Gets the content of the file right up to the given line number. - * - * @param string $filename The name of the file to load. - * @param int $lineNumber The number of lines to read from file. - * - * @return string|null The content of the file or null if the file does not exist. - */ - private function getFileContent($filename, $lineNumber) - { - if (! is_file($filename)) { - return null; - } - - $content = ''; - $lineCnt = 0; - $file = new SplFileObject($filename); - while (! $file->eof()) { - if ($lineCnt++ === $lineNumber) { - break; - } - - $content .= $file->fgets(); - } - - return $content; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php deleted file mode 100644 index a7099d57..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php +++ /dev/null @@ -1,232 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - public function clearLoadedAnnotations(): void - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** @return mixed[] */ - private function fetchFromCache( - string $cacheKey, - ReflectionClass $class, - string $method, - Reflector $reflector - ): array { - $cacheKey = rawurlencode($cacheKey); - - $item = $this->cache->getItem($cacheKey); - if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { - $this->cache->save($item->set($this->delegate->{$method}($reflector))); - } - - return $item->get(); - } - - /** - * Used in debug mode to check if the cache is fresh. - * - * @return bool Returns true if the cache was fresh, or false if the class - * being read was modified since writing to the cache. - */ - private function refresh(string $cacheKey, ReflectionClass $class): bool - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - $item = $this->cache->getItem('[C]' . $cacheKey); - if ($item->isHit() && $item->get() >= $lastModification) { - return true; - } - - $this->cache->save($item->set(time())); - - return false; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php deleted file mode 100644 index 0663ffda..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php +++ /dev/null @@ -1,80 +0,0 @@ - An array of Annotations. - */ - public function getClassAnnotations(ReflectionClass $class); - - /** - * Gets a class annotation. - * - * @param ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName); - - /** - * Gets the annotations applied to a method. - * - * @param ReflectionMethod $method The ReflectionMethod of the method from which - * the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getMethodAnnotations(ReflectionMethod $method); - - /** - * Gets a method annotation. - * - * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName); - - /** - * Gets the annotations applied to a property. - * - * @param ReflectionProperty $property The ReflectionProperty of the property - * from which the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getPropertyAnnotations(ReflectionProperty $property); - - /** - * Gets a property annotation. - * - * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php deleted file mode 100644 index 8a78c119..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php +++ /dev/null @@ -1,114 +0,0 @@ -parser = new DocParser(); - $this->parser->setIgnoreNotImportedAnnotations(true); - } - - /** - * Adds a namespace in which we will look for annotations. - * - * @param string $namespace - * - * @return void - */ - public function addNamespace($namespace) - { - $this->parser->addNamespace($namespace); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - return $this->parser->parse( - $method->getDocComment(), - 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' - ); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - return $this->parser->parse( - $property->getDocComment(), - 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() - ); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } -} diff --git a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php deleted file mode 100644 index 69259fcc..00000000 --- a/old_vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php +++ /dev/null @@ -1,206 +0,0 @@ - - */ - private $tokens; - - /** - * The number of tokens. - * - * @var int - */ - private $numTokens; - - /** - * The current array pointer. - * - * @var int - */ - private $pointer = 0; - - /** @param string $contents */ - public function __construct($contents) - { - $this->tokens = token_get_all($contents); - - // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it - // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored - // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a - // docblock. If the first thing in the file is a class without a doc block this would cause calls to - // getDocBlock() on said class to return our long lost doc_comment. Argh. - // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least - // it's harmless to us. - token_get_all("numTokens = count($this->tokens); - } - - /** - * Gets the next non whitespace and non comment token. - * - * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. - * If FALSE then only whitespace and normal comments are skipped. - * - * @return mixed[]|string|null The token if exists, null otherwise. - */ - public function next($docCommentIsComment = true) - { - for ($i = $this->pointer; $i < $this->numTokens; $i++) { - $this->pointer++; - if ( - $this->tokens[$i][0] === T_WHITESPACE || - $this->tokens[$i][0] === T_COMMENT || - ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) - ) { - continue; - } - - return $this->tokens[$i]; - } - - return null; - } - - /** - * Parses a single use statement. - * - * @return array A list with all found class names for a use statement. - */ - public function parseUseStatement() - { - $groupRoot = ''; - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - while (($token = $this->next())) { - if (! $explicitAlias && $token[0] === T_STRING) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $token[0] === T_STRING) { - $alias = $token[1]; - } elseif ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - ) { - $class .= $token[1]; - - $classSplit = explode('\\', $token[1]); - $alias = $classSplit[count($classSplit) - 1]; - } elseif ($token[0] === T_NS_SEPARATOR) { - $class .= '\\'; - $alias = ''; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token === ',') { - $statements[strtolower($alias)] = $groupRoot . $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[strtolower($alias)] = $groupRoot . $class; - break; - } elseif ($token === '{') { - $groupRoot = $class; - $class = ''; - } elseif ($token === '}') { - continue; - } else { - break; - } - } - - return $statements; - } - - /** - * Gets all use statements. - * - * @param string $namespaceName The namespace name of the reflected class. - * - * @return array A list with all found use statements. - */ - public function parseUseStatements($namespaceName) - { - $statements = []; - while (($token = $this->next())) { - if ($token[0] === T_USE) { - $statements = array_merge($statements, $this->parseUseStatement()); - continue; - } - - if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { - continue; - } - - // Get fresh array for new namespace. This is to prevent the parser to collect the use statements - // for a previous namespace with the same name. This is the case if a namespace is defined twice - // or if a namespace with the same name is commented out. - $statements = []; - } - - return $statements; - } - - /** - * Gets the namespace. - * - * @return string The found namespace. - */ - public function parseNamespace() - { - $name = ''; - while ( - ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - )) - ) { - $name .= $token[1]; - } - - return $name; - } - - /** - * Gets the class name. - * - * @return string The found class name. - */ - public function parseClass() - { - // Namespaces and class names are tokenized the same: T_STRINGs - // separated by T_NS_SEPARATOR so we can use one function to provide - // both. - return $this->parseNamespace(); - } -} diff --git a/old_vendor/doctrine/annotations/psalm.xml b/old_vendor/doctrine/annotations/psalm.xml deleted file mode 100644 index e6af3892..00000000 --- a/old_vendor/doctrine/annotations/psalm.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/old_vendor/doctrine/deprecations/LICENSE b/old_vendor/doctrine/deprecations/LICENSE deleted file mode 100644 index 156905cd..00000000 --- a/old_vendor/doctrine/deprecations/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020-2021 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/doctrine/deprecations/README.md b/old_vendor/doctrine/deprecations/README.md deleted file mode 100644 index 93caf83f..00000000 --- a/old_vendor/doctrine/deprecations/README.md +++ /dev/null @@ -1,157 +0,0 @@ -# Doctrine Deprecations - -A small (side-effect free by default) layer on top of -`trigger_error(E_USER_DEPRECATED)` or PSR-3 logging. - -- no side-effects by default, making it a perfect fit for libraries that don't know how the error handler works they operate under -- options to avoid having to rely on error handlers global state by using PSR-3 logging -- deduplicate deprecation messages to avoid excessive triggering and reduce overhead - -We recommend to collect Deprecations using a PSR logger instead of relying on -the global error handler. - -## Usage from consumer perspective: - -Enable Doctrine deprecations to be sent to a PSR3 logger: - -```php -\Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger); -``` - -Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)` -messages by setting the `DOCTRINE_DEPRECATIONS` environment variable to `trigger`. -Alternatively, call: - -```php -\Doctrine\Deprecations\Deprecation::enableWithTriggerError(); -``` - -If you only want to enable deprecation tracking, without logging or calling `trigger_error` -then set the `DOCTRINE_DEPRECATIONS` environment variable to `track`. -Alternatively, call: - -```php -\Doctrine\Deprecations\Deprecation::enableTrackingDeprecations(); -``` - -Tracking is enabled with all three modes and provides access to all triggered -deprecations and their individual count: - -```php -$deprecations = \Doctrine\Deprecations\Deprecation::getTriggeredDeprecations(); - -foreach ($deprecations as $identifier => $count) { - echo $identifier . " was triggered " . $count . " times\n"; -} -``` - -### Suppressing Specific Deprecations - -Disable triggering about specific deprecations: - -```php -\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier"); -``` - -Disable all deprecations from a package - -```php -\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm"); -``` - -### Other Operations - -When used within PHPUnit or other tools that could collect multiple instances of the same deprecations -the deduplication can be disabled: - -```php -\Doctrine\Deprecations\Deprecation::withoutDeduplication(); -``` - -Disable deprecation tracking again: - -```php -\Doctrine\Deprecations\Deprecation::disable(); -``` - -## Usage from a library/producer perspective: - -When you want to unconditionally trigger a deprecation even when called -from the library itself then the `trigger` method is the way to go: - -```php -\Doctrine\Deprecations\Deprecation::trigger( - "doctrine/orm", - "https://link/to/deprecations-description", - "message" -); -``` - -If variable arguments are provided at the end, they are used with `sprintf` on -the message. - -```php -\Doctrine\Deprecations\Deprecation::trigger( - "doctrine/orm", - "https://github.com/doctrine/orm/issue/1234", - "message %s %d", - "foo", - 1234 -); -``` - -When you want to trigger a deprecation only when it is called by a function -outside of the current package, but not trigger when the package itself is the cause, -then use: - -```php -\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside( - "doctrine/orm", - "https://link/to/deprecations-description", - "message" -); -``` - -Based on the issue link each deprecation message is only triggered once per -request. - -A limited stacktrace is included in the deprecation message to find the -offending location. - -Note: A producer/library should never call `Deprecation::enableWith` methods -and leave the decision how to handle deprecations to application and -frameworks. - -## Usage in PHPUnit tests - -There is a `VerifyDeprecations` trait that you can use to make assertions on -the occurrence of deprecations within a test. - -```php -use Doctrine\Deprecations\PHPUnit\VerifyDeprecations; - -class MyTest extends TestCase -{ - use VerifyDeprecations; - - public function testSomethingDeprecation() - { - $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); - - triggerTheCodeWithDeprecation(); - } - - public function testSomethingDeprecationFixed() - { - $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); - - triggerTheCodeWithoutDeprecation(); - } -} -``` - -## What is a deprecation identifier? - -An identifier for deprecations is just a link to any resource, most often a -Github Issue or Pull Request explaining the deprecation and potentially its -alternative. diff --git a/old_vendor/doctrine/deprecations/composer.json b/old_vendor/doctrine/deprecations/composer.json deleted file mode 100644 index f8319f9a..00000000 --- a/old_vendor/doctrine/deprecations/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "doctrine/deprecations", - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "license": "MIT", - "type": "library", - "homepage": "https://www.doctrine-project.org/", - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "autoload-dev": { - "psr-4": { - "DeprecationTests\\": "test_fixtures/src", - "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/old_vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/old_vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php deleted file mode 100644 index 07cb43b6..00000000 --- a/old_vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php +++ /dev/null @@ -1,312 +0,0 @@ -|null */ - private static $type; - - /** @var LoggerInterface|null */ - private static $logger; - - /** @var array */ - private static $ignoredPackages = []; - - /** @var array */ - private static $triggeredDeprecations = []; - - /** @var array */ - private static $ignoredLinks = []; - - /** @var bool */ - private static $deduplication = true; - - /** - * Trigger a deprecation for the given package and identfier. - * - * The link should point to a Github issue or Wiki entry detailing the - * deprecation. It is additionally used to de-duplicate the trigger of the - * same deprecation during a request. - * - * @param float|int|string $args - */ - public static function trigger(string $package, string $link, string $message, ...$args): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if ($type === self::TYPE_NONE) { - return; - } - - if (isset(self::$ignoredLinks[$link])) { - return; - } - - if (array_key_exists($link, self::$triggeredDeprecations)) { - self::$triggeredDeprecations[$link]++; - } else { - self::$triggeredDeprecations[$link] = 1; - } - - if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { - return; - } - - if (isset(self::$ignoredPackages[$package])) { - return; - } - - $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); - - $message = sprintf($message, ...$args); - - self::delegateTriggerToBackend($message, $backtrace, $link, $package); - } - - /** - * Trigger a deprecation for the given package and identifier when called from outside. - * - * "Outside" means we assume that $package is currently installed as a - * dependency and the caller is not a file in that package. When $package - * is installed as a root package then deprecations triggered from the - * tests folder are also considered "outside". - * - * This deprecation method assumes that you are using Composer to install - * the dependency and are using the default /vendor/ folder and not a - * Composer plugin to change the install location. The assumption is also - * that $package is the exact composer packge name. - * - * Compared to {@link trigger()} this method causes some overhead when - * deprecation tracking is enabled even during deduplication, because it - * needs to call {@link debug_backtrace()} - * - * @param float|int|string $args - */ - public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if ($type === self::TYPE_NONE) { - return; - } - - $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); - - // first check that the caller is not from a tests folder, in which case we always let deprecations pass - if (isset($backtrace[1]['file'], $backtrace[0]['file']) && strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) { - $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR; - - if (strpos($backtrace[0]['file'], $path) === false) { - return; - } - - if (strpos($backtrace[1]['file'], $path) !== false) { - return; - } - } - - if (isset(self::$ignoredLinks[$link])) { - return; - } - - if (array_key_exists($link, self::$triggeredDeprecations)) { - self::$triggeredDeprecations[$link]++; - } else { - self::$triggeredDeprecations[$link] = 1; - } - - if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { - return; - } - - if (isset(self::$ignoredPackages[$package])) { - return; - } - - $message = sprintf($message, ...$args); - - self::delegateTriggerToBackend($message, $backtrace, $link, $package); - } - - /** - * @param list $backtrace - */ - private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if (($type & self::TYPE_PSR_LOGGER) > 0) { - $context = [ - 'file' => $backtrace[0]['file'] ?? null, - 'line' => $backtrace[0]['line'] ?? null, - 'package' => $package, - 'link' => $link, - ]; - - assert(self::$logger !== null); - - self::$logger->notice($message, $context); - } - - if (! (($type & self::TYPE_TRIGGER_ERROR) > 0)) { - return; - } - - $message .= sprintf( - ' (%s:%d called by %s:%d, %s, package %s)', - self::basename($backtrace[0]['file'] ?? 'native code'), - $backtrace[0]['line'] ?? 0, - self::basename($backtrace[1]['file'] ?? 'native code'), - $backtrace[1]['line'] ?? 0, - $link, - $package - ); - - @trigger_error($message, E_USER_DEPRECATED); - } - - /** - * A non-local-aware version of PHPs basename function. - */ - private static function basename(string $filename): string - { - $pos = strrpos($filename, DIRECTORY_SEPARATOR); - - if ($pos === false) { - return $filename; - } - - return substr($filename, $pos + 1); - } - - public static function enableTrackingDeprecations(): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_TRACK_DEPRECATIONS; - } - - public static function enableWithTriggerError(): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_TRIGGER_ERROR; - } - - public static function enableWithPsrLogger(LoggerInterface $logger): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_PSR_LOGGER; - self::$logger = $logger; - } - - public static function withoutDeduplication(): void - { - self::$deduplication = false; - } - - public static function disable(): void - { - self::$type = self::TYPE_NONE; - self::$logger = null; - self::$deduplication = true; - self::$ignoredLinks = []; - - foreach (self::$triggeredDeprecations as $link => $count) { - self::$triggeredDeprecations[$link] = 0; - } - } - - public static function ignorePackage(string $packageName): void - { - self::$ignoredPackages[$packageName] = true; - } - - public static function ignoreDeprecations(string ...$links): void - { - foreach ($links as $link) { - self::$ignoredLinks[$link] = true; - } - } - - public static function getUniqueTriggeredDeprecationsCount(): int - { - return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) { - return $carry + $count; - }, 0); - } - - /** - * Returns each triggered deprecation link identifier and the amount of occurrences. - * - * @return array - */ - public static function getTriggeredDeprecations(): array - { - return self::$triggeredDeprecations; - } - - /** - * @return int-mask-of - */ - private static function getTypeFromEnv(): int - { - switch ($_SERVER['DOCTRINE_DEPRECATIONS'] ?? $_ENV['DOCTRINE_DEPRECATIONS'] ?? null) { - case 'trigger': - self::$type = self::TYPE_TRIGGER_ERROR; - break; - - case 'track': - self::$type = self::TYPE_TRACK_DEPRECATIONS; - break; - - default: - self::$type = self::TYPE_NONE; - break; - } - - return self::$type; - } -} diff --git a/old_vendor/doctrine/deprecations/phpcs.xml b/old_vendor/doctrine/deprecations/phpcs.xml deleted file mode 100644 index f115e43d..00000000 --- a/old_vendor/doctrine/deprecations/phpcs.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - lib - tests - - - - - - diff --git a/old_vendor/doctrine/deprecations/phpstan.neon b/old_vendor/doctrine/deprecations/phpstan.neon deleted file mode 100644 index 4ee286b8..00000000 --- a/old_vendor/doctrine/deprecations/phpstan.neon +++ /dev/null @@ -1,9 +0,0 @@ -parameters: - level: 6 - paths: - - lib - - tests - -includes: - - vendor/phpstan/phpstan-phpunit/extension.neon - - vendor/phpstan/phpstan-phpunit/rules.neon diff --git a/old_vendor/doctrine/deprecations/psalm.xml b/old_vendor/doctrine/deprecations/psalm.xml deleted file mode 100644 index ad76e32e..00000000 --- a/old_vendor/doctrine/deprecations/psalm.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/old_vendor/doctrine/instantiator/.doctrine-project.json b/old_vendor/doctrine/instantiator/.doctrine-project.json deleted file mode 100644 index 24ae36e0..00000000 --- a/old_vendor/doctrine/instantiator/.doctrine-project.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "active": true, - "name": "Instantiator", - "slug": "instantiator", - "docsSlug": "doctrine-instantiator", - "codePath": "/src", - "versions": [ - { - "name": "1.5", - "branchName": "1.5.x", - "slug": "latest", - "upcoming": true - }, - { - "name": "1.4", - "branchName": "1.4.x", - "slug": "1.4", - "aliases": [ - "current", - "stable" - ], - "maintained": true, - "current": true - }, - { - "name": "1.3", - "branchName": "1.3.x", - "slug": "1.3", - "maintained": false - }, - { - "name": "1.2", - "branchName": "1.2.x", - "slug": "1.2" - }, - { - "name": "1.1", - "branchName": "1.1.x", - "slug": "1.1" - }, - { - "name": "1.0", - "branchName": "1.0.x", - "slug": "1.0" - } - ] -} diff --git a/old_vendor/doctrine/instantiator/CONTRIBUTING.md b/old_vendor/doctrine/instantiator/CONTRIBUTING.md deleted file mode 100644 index c1a2c42e..00000000 --- a/old_vendor/doctrine/instantiator/CONTRIBUTING.md +++ /dev/null @@ -1,35 +0,0 @@ -# Contributing - - * Follow the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard) - * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php) - * Any contribution must provide tests for additional introduced conditions - * Any un-confirmed issue needs a failing test case before being accepted - * Pull requests must be sent from a new hotfix/feature branch, not from `master`. - -## Installation - -To install the project and run the tests, you need to clone it first: - -```sh -$ git clone git://github.com/doctrine/instantiator.git -``` - -You will then need to run a composer installation: - -```sh -$ cd Instantiator -$ curl -s https://getcomposer.org/installer | php -$ php composer.phar update -``` - -## Testing - -The PHPUnit version to be used is the one installed as a dev- dependency via composer: - -```sh -$ ./vendor/bin/phpunit -``` - -Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement -won't be merged. - diff --git a/old_vendor/doctrine/instantiator/LICENSE b/old_vendor/doctrine/instantiator/LICENSE deleted file mode 100644 index 4d983d1a..00000000 --- a/old_vendor/doctrine/instantiator/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/doctrine/instantiator/README.md b/old_vendor/doctrine/instantiator/README.md deleted file mode 100644 index 1fa95679..00000000 --- a/old_vendor/doctrine/instantiator/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Instantiator - -This library provides a way of avoiding usage of constructors when instantiating PHP classes. - -[![Build Status](https://travis-ci.org/doctrine/instantiator.svg?branch=master)](https://travis-ci.org/doctrine/instantiator) -[![Code Coverage](https://codecov.io/gh/doctrine/instantiator/branch/master/graph/badge.svg)](https://codecov.io/gh/doctrine/instantiator/branch/master) -[![Dependency Status](https://www.versioneye.com/package/php--doctrine--instantiator/badge.svg)](https://www.versioneye.com/package/php--doctrine--instantiator) - -[![Latest Stable Version](https://poser.pugx.org/doctrine/instantiator/v/stable.png)](https://packagist.org/packages/doctrine/instantiator) -[![Latest Unstable Version](https://poser.pugx.org/doctrine/instantiator/v/unstable.png)](https://packagist.org/packages/doctrine/instantiator) - -## Installation - -The suggested installation method is via [composer](https://getcomposer.org/): - -```sh -composer require doctrine/instantiator -``` - -## Usage - -The instantiator is able to create new instances of any class without using the constructor or any API of the class -itself: - -```php -$instantiator = new \Doctrine\Instantiator\Instantiator(); - -$instance = $instantiator->instantiate(\My\ClassName\Here::class); -``` - -## Contributing - -Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out! - -## Credits - -This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which -has been donated to the doctrine organization, and which is now deprecated in favour of this package. diff --git a/old_vendor/doctrine/instantiator/composer.json b/old_vendor/doctrine/instantiator/composer.json deleted file mode 100644 index 179145e8..00000000 --- a/old_vendor/doctrine/instantiator/composer.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "doctrine/instantiator", - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "type": "library", - "license": "MIT", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "instantiate", - "constructor" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "require": { - "php": "^8.1" - }, - "require-dev": { - "ext-phar": "*", - "ext-pdo": "*", - "doctrine/coding-standard": "^11", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "autoload-dev": { - "psr-0": { - "DoctrineTest\\InstantiatorPerformance\\": "tests", - "DoctrineTest\\InstantiatorTest\\": "tests", - "DoctrineTest\\InstantiatorTestAsset\\": "tests" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/old_vendor/doctrine/instantiator/docs/en/index.rst b/old_vendor/doctrine/instantiator/docs/en/index.rst deleted file mode 100644 index 0c85da0b..00000000 --- a/old_vendor/doctrine/instantiator/docs/en/index.rst +++ /dev/null @@ -1,68 +0,0 @@ -Introduction -============ - -This library provides a way of avoiding usage of constructors when instantiating PHP classes. - -Installation -============ - -The suggested installation method is via `composer`_: - -.. code-block:: console - - $ composer require doctrine/instantiator - -Usage -===== - -The instantiator is able to create new instances of any class without -using the constructor or any API of the class itself: - -.. code-block:: php - - instantiate(User::class); - -Contributing -============ - -- Follow the `Doctrine Coding Standard`_ -- The project will follow strict `object calisthenics`_ -- Any contribution must provide tests for additional introduced - conditions -- Any un-confirmed issue needs a failing test case before being - accepted -- Pull requests must be sent from a new hotfix/feature branch, not from - ``master``. - -Testing -======= - -The PHPUnit version to be used is the one installed as a dev- dependency -via composer: - -.. code-block:: console - - $ ./vendor/bin/phpunit - -Accepted coverage for new contributions is 80%. Any contribution not -satisfying this requirement won’t be merged. - -Credits -======= - -This library was migrated from `ocramius/instantiator`_, which has been -donated to the doctrine organization, and which is now deprecated in -favour of this package. - -.. _composer: https://getcomposer.org/ -.. _CONTRIBUTING.md: CONTRIBUTING.md -.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator -.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard -.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php diff --git a/old_vendor/doctrine/instantiator/docs/en/sidebar.rst b/old_vendor/doctrine/instantiator/docs/en/sidebar.rst deleted file mode 100644 index 0c364791..00000000 --- a/old_vendor/doctrine/instantiator/docs/en/sidebar.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. toctree:: - :depth: 3 - - index diff --git a/old_vendor/doctrine/instantiator/psalm.xml b/old_vendor/doctrine/instantiator/psalm.xml deleted file mode 100644 index e9b622b3..00000000 --- a/old_vendor/doctrine/instantiator/psalm.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php b/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php deleted file mode 100644 index 1e591928..00000000 --- a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - $reflectionClass - * - * @template T of object - */ - public static function fromAbstractClass(ReflectionClass $reflectionClass): self - { - return new self(sprintf( - 'The provided class "%s" is abstract, and cannot be instantiated', - $reflectionClass->getName(), - )); - } - - public static function fromEnum(string $className): self - { - return new self(sprintf( - 'The provided class "%s" is an enum, and cannot be instantiated', - $className, - )); - } -} diff --git a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php deleted file mode 100644 index 4f70ded2..00000000 --- a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php +++ /dev/null @@ -1,61 +0,0 @@ - $reflectionClass - * - * @template T of object - */ - public static function fromSerializationTriggeredException( - ReflectionClass $reflectionClass, - Exception $exception, - ): self { - return new self( - sprintf( - 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', - $reflectionClass->getName(), - ), - 0, - $exception, - ); - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - public static function fromUncleanUnSerialization( - ReflectionClass $reflectionClass, - string $errorString, - int $errorCode, - string $errorFile, - int $errorLine, - ): self { - return new self( - sprintf( - 'Could not produce an instance of "%s" via un-serialization, since an error was triggered ' - . 'in file "%s" at line "%d"', - $reflectionClass->getName(), - $errorFile, - $errorLine, - ), - 0, - new Exception($errorString, $errorCode), - ); - } -} diff --git a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php deleted file mode 100644 index f803f89a..00000000 --- a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php +++ /dev/null @@ -1,255 +0,0 @@ - $className - * - * @phpstan-return T - * - * @throws ExceptionInterface - * - * @template T of object - */ - public function instantiate(string $className): object - { - if (isset(self::$cachedCloneables[$className])) { - /** @phpstan-var T */ - $cachedCloneable = self::$cachedCloneables[$className]; - - return clone $cachedCloneable; - } - - if (isset(self::$cachedInstantiators[$className])) { - $factory = self::$cachedInstantiators[$className]; - - return $factory(); - } - - return $this->buildAndCacheFromFactory($className); - } - - /** - * Builds the requested object and caches it in static properties for performance - * - * @phpstan-param class-string $className - * - * @phpstan-return T - * - * @template T of object - */ - private function buildAndCacheFromFactory(string $className): object - { - $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className); - $instance = $factory(); - - if ($this->isSafeToClone(new ReflectionClass($instance))) { - self::$cachedCloneables[$className] = clone $instance; - } - - return $instance; - } - - /** - * Builds a callable capable of instantiating the given $className without - * invoking its constructor. - * - * @phpstan-param class-string $className - * - * @phpstan-return callable(): T - * - * @throws InvalidArgumentException - * @throws UnexpectedValueException - * @throws ReflectionException - * - * @template T of object - */ - private function buildFactory(string $className): callable - { - $reflectionClass = $this->getReflectionClass($className); - - if ($this->isInstantiableViaReflection($reflectionClass)) { - return [$reflectionClass, 'newInstanceWithoutConstructor']; - } - - $serializedString = sprintf( - '%s:%d:"%s":0:{}', - is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, - strlen($className), - $className, - ); - - $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString); - - return static fn () => unserialize($serializedString); - } - - /** - * @phpstan-param class-string $className - * - * @phpstan-return ReflectionClass - * - * @throws InvalidArgumentException - * @throws ReflectionException - * - * @template T of object - */ - private function getReflectionClass(string $className): ReflectionClass - { - if (! class_exists($className)) { - throw InvalidArgumentException::fromNonExistingClass($className); - } - - if (enum_exists($className, false)) { - throw InvalidArgumentException::fromEnum($className); - } - - $reflection = new ReflectionClass($className); - - if ($reflection->isAbstract()) { - throw InvalidArgumentException::fromAbstractClass($reflection); - } - - return $reflection; - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @throws UnexpectedValueException - * - * @template T of object - */ - private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void - { - set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool { - $error = UnexpectedValueException::fromUncleanUnSerialization( - $reflectionClass, - $message, - $code, - $file, - $line, - ); - - return true; - }); - - try { - $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString); - } finally { - restore_error_handler(); - } - - if ($error) { - throw $error; - } - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @throws UnexpectedValueException - * - * @template T of object - */ - private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void - { - try { - unserialize($serializedString); - } catch (Exception $exception) { - throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception); - } - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool - { - return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal()); - } - - /** - * Verifies whether the given class is to be considered internal - * - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function hasInternalAncestors(ReflectionClass $reflectionClass): bool - { - do { - if ($reflectionClass->isInternal()) { - return true; - } - - $reflectionClass = $reflectionClass->getParentClass(); - } while ($reflectionClass); - - return false; - } - - /** - * Checks if a class is cloneable - * - * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects. - * - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function isSafeToClone(ReflectionClass $reflectionClass): bool - { - return $reflectionClass->isCloneable() - && ! $reflectionClass->hasMethod('__clone') - && ! $reflectionClass->isSubclassOf(ArrayIterator::class); - } -} diff --git a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php deleted file mode 100644 index c6ebe351..00000000 --- a/old_vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php +++ /dev/null @@ -1,24 +0,0 @@ - $className - * - * @phpstan-return T - * - * @throws ExceptionInterface - * - * @template T of object - */ - public function instantiate(string $className): object; -} diff --git a/old_vendor/doctrine/lexer/LICENSE b/old_vendor/doctrine/lexer/LICENSE deleted file mode 100644 index e8fdec4a..00000000 --- a/old_vendor/doctrine/lexer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2018 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/old_vendor/doctrine/lexer/README.md b/old_vendor/doctrine/lexer/README.md deleted file mode 100644 index 784f2a27..00000000 --- a/old_vendor/doctrine/lexer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Doctrine Lexer - -[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) - -Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. - -This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). - -https://www.doctrine-project.org/projects/lexer.html diff --git a/old_vendor/doctrine/lexer/UPGRADE.md b/old_vendor/doctrine/lexer/UPGRADE.md deleted file mode 100644 index 42b85b37..00000000 --- a/old_vendor/doctrine/lexer/UPGRADE.md +++ /dev/null @@ -1,14 +0,0 @@ -Note about upgrading: Doctrine uses static and runtime mechanisms to raise -awareness about deprecated code. - -- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or - Static Analysis tools (like Psalm, phpstan) -- Use of our low-overhead runtime deprecation API, details: - https://github.com/doctrine/deprecations/ - -# Upgrade to 2.0.0 - -`AbstractLexer::glimpse()` and `AbstractLexer::peek()` now return -instances of `Doctrine\Common\Lexer\Token`, which is an array-like class -Using it as an array is deprecated in favor of using properties of that class. -Using `count()` on it is deprecated with no replacement. diff --git a/old_vendor/doctrine/lexer/composer.json b/old_vendor/doctrine/lexer/composer.json deleted file mode 100644 index be3013cf..00000000 --- a/old_vendor/doctrine/lexer/composer.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "doctrine/lexer", - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "license": "MIT", - "type": "library", - "keywords": [ - "php", - "parser", - "lexer", - "annotations", - "docblock" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "require": { - "php": "^7.1 || ^8.0", - "doctrine/deprecations": "^1.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\Common\\Lexer\\": "tests" - } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/old_vendor/doctrine/lexer/src/AbstractLexer.php b/old_vendor/doctrine/lexer/src/AbstractLexer.php deleted file mode 100644 index eed4c513..00000000 --- a/old_vendor/doctrine/lexer/src/AbstractLexer.php +++ /dev/null @@ -1,346 +0,0 @@ -> - */ - private $tokens = []; - - /** - * Current lexer position in input string. - * - * @var int - */ - private $position = 0; - - /** - * Current peek of current lexer position. - * - * @var int - */ - private $peek = 0; - - /** - * The next token in the input. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $lookahead; - - /** - * The last matched/seen token. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $token; - - /** - * Composed regex for input parsing. - * - * @var string|null - */ - private $regex; - - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput($input) - { - $this->input = $input; - $this->tokens = []; - - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param int $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } - - /** - * Retrieve the original lexer's input until a given position. - * - * @param int $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param T $type - * - * @return bool - * - * @psalm-assert-if-true !=null $this->lookahead - */ - public function isNextToken($type) - { - return $this->lookahead !== null && $this->lookahead->isA($type); - } - - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param list $types - * - * @return bool - * - * @psalm-assert-if-true !=null $this->lookahead - */ - public function isNextTokenAny(array $types) - { - return $this->lookahead !== null && $this->lookahead->isA(...$types); - } - - /** - * Moves to the next token in the input string. - * - * @return bool - * - * @psalm-assert-if-true !null $this->lookahead - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = isset($this->tokens[$this->position]) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param T $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && ! $this->lookahead->isA($type)) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token. - * - * @param string $value - * @param int|string $token - * - * @return bool - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } - - return null; - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - if (! isset($this->regex)) { - $this->regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($this->regex, $input, -1, $flags); - - if ($matches === false) { - // Work around https://bugs.php.net/78122 - $matches = [[$input, 0]]; - } - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $firstMatch = $match[0]; - $type = $this->getType($firstMatch); - - $this->tokens[] = new Token( - $firstMatch, - $type, - $match[1] - ); - } - } - - /** - * Gets the literal for a given token. - * - * @param T $token - * - * @return int|string - */ - public function getLiteral($token) - { - if ($token instanceof UnitEnum) { - return get_class($token) . '::' . $token->name; - } - - $className = static::class; - - $reflClass = new ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return T|null - * - * @param-out V $value - */ - abstract protected function getType(&$value); -} diff --git a/old_vendor/doctrine/lexer/src/Token.php b/old_vendor/doctrine/lexer/src/Token.php deleted file mode 100644 index 4fbbf4e4..00000000 --- a/old_vendor/doctrine/lexer/src/Token.php +++ /dev/null @@ -1,145 +0,0 @@ - - */ -final class Token implements ArrayAccess -{ - /** - * The string value of the token in the input string - * - * @readonly - * @var V - */ - public $value; - - /** - * The type of the token (identifier, numeric, string, input parameter, none) - * - * @readonly - * @var T|null - */ - public $type; - - /** - * The position of the token in the input string - * - * @readonly - * @var int - */ - public $position; - - /** - * @param V $value - * @param T|null $type - */ - public function __construct($value, $type, int $position) - { - $this->value = $value; - $this->type = $type; - $this->position = $position; - } - - /** @param T ...$types */ - public function isA(...$types): bool - { - return in_array($this->type, $types, true); - } - - /** - * @deprecated Use the value, type or position property instead - * {@inheritDoc} - */ - public function offsetExists($offset): bool - { - Deprecation::trigger( - 'doctrine/lexer', - 'https://github.com/doctrine/lexer/pull/79', - 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead', - self::class - ); - - return in_array($offset, ['value', 'type', 'position'], true); - } - - /** - * @deprecated Use the value, type or position property instead - * {@inheritDoc} - * - * @param O $offset - * - * @return mixed - * @psalm-return ( - * O is 'value' - * ? V - * : ( - * O is 'type' - * ? T|null - * : ( - * O is 'position' - * ? int - * : mixed - * ) - * ) - * ) - * - * @template O of array-key - */ - #[ReturnTypeWillChange] - public function offsetGet($offset) - { - Deprecation::trigger( - 'doctrine/lexer', - 'https://github.com/doctrine/lexer/pull/79', - 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead', - self::class - ); - - return $this->$offset; - } - - /** - * @deprecated no replacement planned - * {@inheritDoc} - */ - public function offsetSet($offset, $value): void - { - Deprecation::trigger( - 'doctrine/lexer', - 'https://github.com/doctrine/lexer/pull/79', - 'Setting %s properties via ArrayAccess is deprecated', - self::class - ); - - $this->$offset = $value; - } - - /** - * @deprecated no replacement planned - * {@inheritDoc} - */ - public function offsetUnset($offset): void - { - Deprecation::trigger( - 'doctrine/lexer', - 'https://github.com/doctrine/lexer/pull/79', - 'Setting %s properties via ArrayAccess is deprecated', - self::class - ); - - $this->$offset = null; - } -} diff --git a/old_vendor/fakerphp/faker/CHANGELOG.md b/old_vendor/fakerphp/faker/CHANGELOG.md deleted file mode 100644 index 0900d479..00000000 --- a/old_vendor/fakerphp/faker/CHANGELOG.md +++ /dev/null @@ -1,191 +0,0 @@ -# CHANGELOG - -## [Unreleased](https://github.com/FakerPHP/Faker/compare/v1.23.0...main) - -## [2023-06-12, v1.23.0](https://github.com/FakerPHP/Faker/compare/v1.22.0..v1.23.0) - -- Update `randomElements` to return random number of elements when no count is provided (#658) - -## [2023-05-14, v1.22.0](https://github.com/FakerPHP/Faker/compare/v1.21.0..v1.22.0) - -- Fixed `randomElements()` to accept empty iterator (#605) -- Added support for passing an `Enum` to `randomElement()` and `randomElements()` (#620) -- Started rejecting invalid arguments passed to `randomElement()` and `randomElements()` (#642) - -## [2022-12-13, v1.21.0](https://github.com/FakerPHP/Faker/compare/v1.20.0..v1.21.0) - -- Dropped support for PHP 7.1, 7.2, and 7.3 (#543) -- Added support for PHP 8.2 (#528) - -## [2022-07-20, v1.20.0](https://github.com/FakerPHP/Faker/compare/v1.19.0..v1.20.0) - -- Fixed typo in French phone number (#452) -- Fixed some Hungarian naming bugs (#451) -- Fixed bug where the NL-BE VAT generation was incorrect (#455) -- Improve Turkish phone numbers for E164 and added landline support (#460) -- Add Microsoft Edge User Agent (#464) -- Added option to set image formats on Faker\Provider\Image (#473) -- Added support for French color translations (#466) -- Support filtering timezones by country code (#480) -- Fixed typo in some greek names (#490) -- Marked the Faker\Provider\Image as deprecated - -## [2022-02-02, v1.19.0](https://github.com/FakerPHP/Faker/compare/v1.18.0..v1.19.0) - -- Added color extension to core (#442) -- Added conflict with `doctrine/persistence` below version `1.4` -- Fix for support on different Doctrine ORM versions (#414) -- Fix usage of `Doctrine\Persistence` dependency -- Fix CZ Person birthNumber docblock return type (#437) -- Fix is_IS Person docbock types (#439) -- Fix is_IS Address docbock type (#438) -- Fix regexify escape backslash in character class (#434) -- Removed UUID from Generator to be able to extend it (#441) - -## [2022-01-23, v1.18.0](https://github.com/FakerPHP/Faker/compare/v1.17.0..v1.18.0) - -- Deprecated UUID, use uuid3 to specify version (#427) -- Reset formatters when adding a new provider (#366) -- Helper methods to use our custom generators (#155) -- Set allow-plugins for Composer 2.2 (#405) -- Fix kk_KZ\Person::individualIdentificationNumber generation (#411) -- Allow for -> syntax to be used in parsing (#423) -- Person->name was missing string return type (#424) -- Generate a valid BE TAX number (#415) -- Added the UUID extension to Core (#427) - -## [2021-12-05, v1.17.0](https://github.com/FakerPHP/Faker/compare/v1.16.0..v1.17.0) - -- Partial PHP 8.1 compatibility (#373) -- Add payment provider for `ne_NP` locale (#375) -- Add Egyptian Arabic `ar_EG` locale (#377) -- Updated list of South African TLDs (#383) -- Fixed formatting of E.164 numbers (#380) -- Allow `symfony/deprecation-contracts` `^3.0` (#397) - -## [2021-09-06, v1.16.0](https://github.com/FakerPHP/Faker/compare/v1.15.0..v1.16.0) - -- Add Company extension -- Add Address extension -- Add Person extension -- Add PhoneNumber extension -- Add VersionExtension (#350) -- Stricter types in Extension\Container and Extension\GeneratorAwareExtension (#345) -- Fix deprecated property access in `nl_NL` (#348) -- Add support for `psr/container` >= 2.0 (#354) -- Add missing union types in Faker\Generator (#352) - -## [2021-07-06, v1.15.0](https://github.com/FakerPHP/Faker/compare/v1.14.1..v1.15.0) - -- Updated the generator phpdoc to help identify magic methods (#307) -- Prevent direct access and triggered deprecation warning for "word" (#302) -- Updated length on all global e164 numbers (#301) -- Updated last names from different source (#312) -- Don't generate birth number of '000' for Swedish personal identity (#306) -- Add job list for localization id_ID (#339) - -## [2021-03-30, v1.14.1](https://github.com/FakerPHP/Faker/compare/v1.14.0..v1.14.1) - -- Fix where randomNumber and randomFloat would return a 0 value (#291 / #292) - -## [2021-03-29, v1.14.0](https://github.com/FakerPHP/Faker/compare/v1.13.0..v1.14.0) - -- Fix for realText to ensure the text keeps closer to its boundaries (#152) -- Fix where regexify produces a random character instead of a literal dot (#135 -- Deprecate zh_TW methods that only call base methods (#122) -- Add used extensions to composer.json as suggestion (#120) -- Moved TCNo and INN from calculator to localized providers (#108) -- Fix regex dot/backslash issue where a dot is replaced with a backslash as escape character (#206) -- Deprecate direct property access (#164) -- Added test to assert unique() behaviour (#233) -- Added RUC for the es_PE locale (#244) -- Test IBAN formats for Latin America (AR/PE/VE) (#260) -- Added VAT number for en_GB (#255) -- Added new districts for the ne_NP locale (#258) -- Fix for U.S. Area Code Generation (#261) -- Fix in numerify where a better random numeric value is guaranteed (#256) -- Fix e164PhoneNumber to only generate valid phone numbers with valid country codes (#264) -- Extract fixtures into separate classes (#234) -- Remove french domains that no longer exists (#277) -- Fix error that occurs when getting a polish title (#279) -- Use valid area codes for North America E164 phone numbers (#280) - -- Adding support for extensions and PSR-11 (#154) -- Adding trait for GeneratorAwareExtension (#165) -- Added helper class for extension (#162) -- Added blood extension to core (#232) -- Added barcode extension to core (#252) -- Added number extension (#257) - -- Various code style updates -- Added a note about our breaking change promise (#273) - -## [2020-12-18, v1.13.0](https://github.com/FakerPHP/Faker/compare/v1.12.1..v1.13.0) - -Several fixes and new additions in this release. A lot of cleanup has been done -on the codebase on both tests and consistency. - -- Feature/pl pl license plate (#62) -- Fix greek phone numbers (#16) -- Move AT payment provider logic to de_AT (#72) -- Fix wiktionary links (#73) -- Fix AT person links (#74) -- Fix AT cities (#75) -- Deprecate at_AT providers (#78) -- Add Austrian `ssn()` to `Person` provider (#79) -- Fix typos in id_ID Address (#83) -- Austrian post codes (#86) -- Updated Polish data (#70) -- Improve Austrian social security number generation (#88) -- Move US phone numbers with extension to own method (#91) -- Add UK National Insurance number generator (#89) -- Fix en_SG phone number generator (#100) -- Remove usage of mt_rand (#87) -- Remove whitespace from beginning of el_GR phone numbers (#105) -- Building numbers can not be 0, 00, 000 (#107) -- Add 172.16/12 local IPv4 block (#121) -- Add JCB credit card type (#124) -- Remove json_decode from emoji generation (#123) -- Remove ro street address (#146) - -## [2020-12-11, v1.12.1](https://github.com/FakerPHP/Faker/compare/v1.12.0..v1.12.1) - -This is a security release that prevents a hacker to execute code on the server. - -## [2020-11-23, v1.12.0](https://github.com/FakerPHP/Faker/compare/v1.11.0..v1.12.0) - -- Fix ro_RO first and last day of year calculation offset (#65) -- Fix en_NG locale test namespaces that did not match PSR-4 (#57) -- Added Singapore NRIC/FIN provider (#56) -- Added provider for Lithuanian municipalities (#58) -- Added blood types provider (#61) - -## [2020-11-15, v1.11.0](https://github.com/FakerPHP/Faker/compare/v1.10.1..v1.11.0) - -- Added Provider for Swedish Municipalities -- Updates to person names in pt_BR -- Many code style changes - -## [2020-10-28, v1.10.1](https://github.com/FakerPHP/Faker/compare/v1.10.0..v1.10.1) - -- Updates the Danish addresses in dk_DK -- Removed offense company names in nl_NL -- Clarify changelog with original fork -- Standin replacement for LoremPixel to Placeholder.com (#11) - -## [2020-10-27, v1.10.0](https://github.com/FakerPHP/Faker/compare/v1.9.1..v1.10.0) - -- Support PHP 7.1-8.0 -- Fix typo in de_DE Company Provider -- Fix dateTimeThisYear method -- Fix typo in de_DE jobTitleFormat -- Fix IBAN generation for CR -- Fix typos in greek first names -- Fix US job title typo -- Do not clear entity manager for doctrine orm populator -- Remove persian rude words -- Corrections to RU names - -## 2020-10-27, v1.9.1 - -- Initial version. Same as `fzaninotto/Faker:v1.9.1`. diff --git a/old_vendor/fakerphp/faker/LICENSE b/old_vendor/fakerphp/faker/LICENSE deleted file mode 100644 index 99ed0075..00000000 --- a/old_vendor/fakerphp/faker/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 François Zaninotto -Portions Copyright (c) 2008 Caius Durling -Portions Copyright (c) 2008 Adam Royle -Portions Copyright (c) 2008 Fiona Burrows - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/old_vendor/fakerphp/faker/README.md b/old_vendor/fakerphp/faker/README.md deleted file mode 100644 index 2c6a2684..00000000 --- a/old_vendor/fakerphp/faker/README.md +++ /dev/null @@ -1,114 +0,0 @@ -

Social card of FakerPHP

- -# Faker - -[![Packagist Downloads](https://img.shields.io/packagist/dm/FakerPHP/Faker)](https://packagist.org/packages/fakerphp/faker) -[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/FakerPHP/Faker/Tests/main)](https://github.com/FakerPHP/Faker/actions) -[![Type Coverage](https://shepherd.dev/github/FakerPHP/Faker/coverage.svg)](https://shepherd.dev/github/FakerPHP/Faker) -[![Code Coverage](https://codecov.io/gh/FakerPHP/Faker/branch/main/graph/badge.svg)](https://codecov.io/gh/FakerPHP/Faker) - -Faker is a PHP library that generates fake data for you. Whether you need to bootstrap your database, create good-looking XML documents, fill-in your persistence to stress test it, or anonymize data taken from a production service, Faker is for you. - -It's heavily inspired by Perl's [Data::Faker](https://metacpan.org/pod/Data::Faker), and by Ruby's [Faker](https://rubygems.org/gems/faker). - -## Getting Started - -### Installation - -Faker requires PHP >= 7.4. - -```shell -composer require fakerphp/faker -``` - -### Documentation - -Full documentation can be found over on [fakerphp.github.io](https://fakerphp.github.io). - -### Basic Usage - -Use `Faker\Factory::create()` to create and initialize a Faker generator, which can generate data by accessing methods named after the type of data you want. - -```php -name(); -// 'Vince Sporer' -echo $faker->email(); -// 'walter.sophia@hotmail.com' -echo $faker->text(); -// 'Numquam ut mollitia at consequuntur inventore dolorem.' -``` - -Each call to `$faker->name()` yields a different (random) result. This is because Faker uses `__call()` magic, and forwards `Faker\Generator->$method()` calls to `Faker\Generator->format($method, $attributes)`. - -```php -name() . "\n"; -} - -// 'Cyrus Boyle' -// 'Alena Cummerata' -// 'Orlo Bergstrom' -``` - -## Automated refactoring - -If you already used this library with its properties, they are now deprecated and needs to be replaced by their equivalent methods. - -You can use the provided [Rector](https://github.com/rectorphp/rector) config file to automate the work. - -Run - -```bash -composer require --dev rector/rector -``` - -to install `rector/rector`. - -Run - -```bash -vendor/bin/rector process src/ --config vendor/fakerphp/faker/rector-migrate.php -``` - -to run `rector/rector`. - -*Note:* do not forget to replace `src/` with the path to your source directory. - -Alternatively, import the configuration in your `rector.php` file: - -```php -import('vendor/fakerphp/faker/rector-migrate.php'); -}; -``` - -## License - -Faker is released under the MIT License. See [`LICENSE`](LICENSE) for details. - -## Backward compatibility promise - -Faker is using [Semver](https://semver.org/). This means that versions are tagged -with MAJOR.MINOR.PATCH. Only a new major version will be allowed to break backward -compatibility (BC). - -Classes marked as `@experimental` or `@internal` are not included in our backward compatibility promise. -You are also not guaranteed that the value returned from a method is always the -same. You are guaranteed that the data type will not change. - -PHP 8 introduced [named arguments](https://wiki.php.net/rfc/named_params), which -increased the cost and reduces flexibility for package maintainers. The names of the -arguments for methods in Faker is not included in our BC promise. diff --git a/old_vendor/fakerphp/faker/composer.json b/old_vendor/fakerphp/faker/composer.json deleted file mode 100644 index 9b85ce9d..00000000 --- a/old_vendor/fakerphp/faker/composer.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "fakerphp/faker", - "type": "library", - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "faker", - "fixtures", - "data" - ], - "license": "MIT", - "authors": [ - { - "name": "François Zaninotto" - } - ], - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "require-dev": { - "ext-intl": "*", - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "autoload-dev": { - "psr-4": { - "Faker\\Test\\": "test/Faker/", - "Faker\\Test\\Fixture\\": "test/Fixture/" - } - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "suggest": { - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality.", - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine" - }, - "config": { - "allow-plugins": { - "bamarni/composer-bin-plugin": true, - "composer/package-versions-deprecated": true - }, - "sort-packages": true - }, - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - } -} diff --git a/old_vendor/fakerphp/faker/psalm.baseline.xml b/old_vendor/fakerphp/faker/psalm.baseline.xml deleted file mode 100644 index 271a6a6b..00000000 --- a/old_vendor/fakerphp/faker/psalm.baseline.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - - - 0 - - - string - - - - - uniqueGenerator]]> - new ChanceGenerator($this, $weight, $default) - new ValidGenerator($this, $validator, $maxRetries) - - - self - self - self - - - - - TableRegistry - - - - - class]]> - class->associationMappings]]> - \Doctrine\ODM\MongoDB\Mapping\ClassMetadata - \Doctrine\ODM\MongoDB\Mapping\ClassMetadata - \Doctrine\ODM\MongoDB\Mapping\ClassMetadata - \Doctrine\ORM\Mapping\ClassMetadata - \Doctrine\ORM\Mapping\ClassMetadata - - - createQueryBuilder - getAssociationMappings - newInstance - - - - - Mandango - Mandango - - - - - mandango]]> - Mandango - - - - - \ColumnMap - - - - - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - \ColumnMap - - - - - \Propel - - - PropelPDO - - - - - ColumnMap - - - - - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - $columnMap - ColumnMap - - - - - Propel - - - PropelPDO - - - - - mapper]]> - - - string - - - $relation - $relation - BelongsTo - Locator - Mapper - - - $locator - mapper]]> - mapper]]> - mapper]]> - mapper]]> - mapper]]> - Locator - Mapper - - - - - locator]]> - Locator - - - Locator - - - - - [static::class, 'randomDigit'] - - - \UnitEnum - \UnitEnum - - - Closure - - - enum_exists($array) - enum_exists($array) - - - - - callable - - - - - false - - - - - $imei - - - int - - - - - static::$cityPrefix - - - - - static::birthNumber(static::GENDER_FEMALE) - static::birthNumber(static::GENDER_MALE) - - - - - $weights[$i] - - - - - $ref[$i] - - - - - static::split($text) - - - - - $weights[$i] - $weights[$i] - - - - - $high[$i] - $low[$i] - $result[$i] - $weights[$i + 3] - $weights[$i] - $weights[$i] - - - DateTime - - - - - static::lastName() - static::lastName() - - - diff --git a/old_vendor/fakerphp/faker/rector-migrate.php b/old_vendor/fakerphp/faker/rector-migrate.php deleted file mode 100644 index 7d99b570..00000000 --- a/old_vendor/fakerphp/faker/rector-migrate.php +++ /dev/null @@ -1,161 +0,0 @@ -ruleWithConfiguration( - Transform\Rector\Assign\PropertyFetchToMethodCallRector::class, - array_map(static function (string $property): Transform\ValueObject\PropertyFetchToMethodCall { - return new Transform\ValueObject\PropertyFetchToMethodCall( - Generator::class, - $property, - $property, - ); - }, $properties), - ); -}; diff --git a/old_vendor/fakerphp/faker/src/Faker/Calculator/Ean.php b/old_vendor/fakerphp/faker/src/Faker/Calculator/Ean.php deleted file mode 100644 index 9c3daf17..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Calculator/Ean.php +++ /dev/null @@ -1,52 +0,0 @@ - $digit) { - $sums += ((int) $digit) * $sequence[$n % 2]; - } - - return (10 - $sums % 10) % 10; - } - - /** - * Checks whether the provided number is an EAN compliant number and that - * the checksum is correct. - * - * @param string $ean An EAN number - * - * @return bool - */ - public static function isValid($ean) - { - if (!preg_match(self::PATTERN, $ean)) { - return false; - } - - return self::checksum(substr($ean, 0, -1)) === (int) substr($ean, -1); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Calculator/Iban.php b/old_vendor/fakerphp/faker/src/Faker/Calculator/Iban.php deleted file mode 100644 index b00b18f0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Calculator/Iban.php +++ /dev/null @@ -1,75 +0,0 @@ -= 0; $i -= 2) { - $sum += $number[$i]; - } - - for ($i = $length - 2; $i >= 0; $i -= 2) { - $sum += array_sum(str_split($number[$i] * 2)); - } - - return $sum % 10; - } - - /** - * @param string $partialNumber - * - * @return string - */ - public static function computeCheckDigit($partialNumber) - { - $checkDigit = self::checksum($partialNumber . '0'); - - if ($checkDigit === 0) { - return 0; - } - - return (string) (10 - $checkDigit); - } - - /** - * Checks whether a number (partial number + check digit) is Luhn compliant - * - * @param string $number - * - * @return bool - */ - public static function isValid($number) - { - return self::checksum($number) === 0; - } - - /** - * Generate a Luhn compliant number. - * - * @param string $partialValue - * - * @return string - */ - public static function generateLuhnNumber($partialValue) - { - if (!preg_match('/^\d+$/', $partialValue)) { - throw new \InvalidArgumentException('Argument should be an integer.'); - } - - return $partialValue . Luhn::computeCheckDigit($partialValue); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Calculator/TCNo.php b/old_vendor/fakerphp/faker/src/Faker/Calculator/TCNo.php deleted file mode 100644 index a75c93e1..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Calculator/TCNo.php +++ /dev/null @@ -1,43 +0,0 @@ -default = $default; - $this->generator = $generator; - $this->weight = $weight; - } - - public function ext(string $id) - { - return new self($this->generator->ext($id), $this->weight, $this->default); - } - - /** - * Catch and proxy all generator calls but return only valid values - * - * @param string $attribute - * - * @deprecated Use a method instead. - */ - public function __get($attribute) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Accessing property "%s" is deprecated, use "%s()" instead.', $attribute, $attribute); - - return $this->__call($attribute, []); - } - - /** - * @param string $name - * @param array $arguments - */ - public function __call($name, $arguments) - { - if (mt_rand(1, 100) <= (100 * $this->weight)) { - return call_user_func_array([$this->generator, $name], $arguments); - } - - return $this->default; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Container/Container.php b/old_vendor/fakerphp/faker/src/Faker/Container/Container.php deleted file mode 100644 index 2dd2d974..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Container/Container.php +++ /dev/null @@ -1,145 +0,0 @@ - - */ - private $definitions; - - private $services = []; - - /** - * Create a container object with a set of definitions. The array value MUST - * produce an object that implements Extension. - * - * @param array $definitions - */ - public function __construct(array $definitions) - { - $this->definitions = $definitions; - } - - /** - * Retrieve a definition from the container. - * - * @param string $id - * - * @throws \InvalidArgumentException - * @throws \RuntimeException - * @throws ContainerException - * @throws NotInContainerException - */ - public function get($id): Extension - { - if (!is_string($id)) { - throw new \InvalidArgumentException(sprintf( - 'First argument of %s::get() must be string', - self::class, - )); - } - - if (array_key_exists($id, $this->services)) { - return $this->services[$id]; - } - - if (!$this->has($id)) { - throw new NotInContainerException(sprintf( - 'There is not service with id "%s" in the container.', - $id, - )); - } - - $definition = $this->definitions[$id]; - - $service = $this->services[$id] = $this->getService($id, $definition); - - if (!$service instanceof Extension) { - throw new \RuntimeException(sprintf( - 'Service resolved for identifier "%s" does not implement the %s" interface.', - $id, - Extension::class, - )); - } - - return $service; - } - - /** - * Get the service from a definition. - * - * @param callable|object|string $definition - */ - private function getService($id, $definition) - { - if (is_callable($definition)) { - try { - return $definition(); - } catch (\Throwable $e) { - throw new ContainerException( - sprintf('Error while invoking callable for "%s"', $id), - 0, - $e, - ); - } - } elseif (is_object($definition)) { - return $definition; - } elseif (is_string($definition)) { - if (class_exists($definition)) { - try { - return new $definition(); - } catch (\Throwable $e) { - throw new ContainerException(sprintf('Could not instantiate class "%s"', $id), 0, $e); - } - } - - throw new ContainerException(sprintf( - 'Could not instantiate class "%s". Class was not found.', - $id, - )); - } else { - throw new ContainerException(sprintf( - 'Invalid type for definition with id "%s"', - $id, - )); - } - } - - /** - * Check if the container contains a given identifier. - * - * @param string $id - * - * @throws \InvalidArgumentException - */ - public function has($id): bool - { - if (!is_string($id)) { - throw new \InvalidArgumentException(sprintf( - 'First argument of %s::get() must be string', - self::class, - )); - } - - return array_key_exists($id, $this->definitions); - } - - /** - * Get the bindings between Extension interfaces and implementations. - */ - public function getDefinitions(): array - { - return $this->definitions; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Container/ContainerBuilder.php b/old_vendor/fakerphp/faker/src/Faker/Container/ContainerBuilder.php deleted file mode 100644 index 3fb335ff..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Container/ContainerBuilder.php +++ /dev/null @@ -1,92 +0,0 @@ - - */ - private $definitions = []; - - /** - * @param callable|object|string $value - * - * @throws \InvalidArgumentException - */ - public function add($value, string $name = null): self - { - if (!is_string($value) && !is_callable($value) && !is_object($value)) { - throw new \InvalidArgumentException(sprintf( - 'First argument to "%s::add()" must be a string, callable or object.', - self::class, - )); - } - - if ($name === null) { - if (is_string($value)) { - $name = $value; - } elseif (is_object($value)) { - $name = get_class($value); - } else { - throw new \InvalidArgumentException(sprintf( - 'Second argument to "%s::add()" is required not passing a string or object as first argument', - self::class, - )); - } - } - - $this->definitions[$name] = $value; - - return $this; - } - - public function build(): ContainerInterface - { - return new Container($this->definitions); - } - - /** - * Get an array with extension that represent the default English - * functionality. - */ - public static function defaultExtensions(): array - { - return [ - BarcodeExtension::class => Core\Barcode::class, - BloodExtension::class => Core\Blood::class, - ColorExtension::class => Core\Color::class, - DateTimeExtension::class => Core\DateTime::class, - FileExtension::class => Core\File::class, - NumberExtension::class => Core\Number::class, - VersionExtension::class => Core\Version::class, - UuidExtension::class => Core\Uuid::class, - ]; - } - - public static function getDefault(): ContainerInterface - { - $instance = new self(); - - foreach (self::defaultExtensions() as $id => $definition) { - $instance->add($definition, $id); - } - - return $instance->build(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Container/ContainerException.php b/old_vendor/fakerphp/faker/src/Faker/Container/ContainerException.php deleted file mode 100644 index 12b3caa0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Container/ContainerException.php +++ /dev/null @@ -1,14 +0,0 @@ -ean(); - } - - public function ean8(): string - { - return $this->ean(8); - } - - public function isbn10(): string - { - $code = Extension\Helper::numerify(str_repeat('#', 9)); - - return sprintf('%s%s', $code, Calculator\Isbn::checksum($code)); - } - - public function isbn13(): string - { - $code = '97' . mt_rand(8, 9) . Extension\Helper::numerify(str_repeat('#', 9)); - - return sprintf('%s%s', $code, Calculator\Ean::checksum($code)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Blood.php b/old_vendor/fakerphp/faker/src/Faker/Core/Blood.php deleted file mode 100644 index 50a5806c..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Blood.php +++ /dev/null @@ -1,42 +0,0 @@ -bloodTypes); - } - - public function bloodRh(): string - { - return Extension\Helper::randomElement($this->bloodRhFactors); - } - - public function bloodGroup(): string - { - return sprintf( - '%s%s', - $this->bloodType(), - $this->bloodRh(), - ); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Color.php b/old_vendor/fakerphp/faker/src/Faker/Core/Color.php deleted file mode 100644 index 6e4e350e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Color.php +++ /dev/null @@ -1,180 +0,0 @@ -numberBetween(1, 16777215)), 6, '0', STR_PAD_LEFT); - } - - /** - * @example '#ff0044' - */ - public function safeHexColor(): string - { - $number = new Number(); - $color = str_pad(dechex($number->numberBetween(0, 255)), 3, '0', STR_PAD_LEFT); - - return sprintf( - '#%s%s%s%s%s%s', - $color[0], - $color[0], - $color[1], - $color[1], - $color[2], - $color[2], - ); - } - - /** - * @example 'array(0,255,122)' - * - * @return int[] - */ - public function rgbColorAsArray(): array - { - $color = $this->hexColor(); - - return [ - hexdec(substr($color, 1, 2)), - hexdec(substr($color, 3, 2)), - hexdec(substr($color, 5, 2)), - ]; - } - - /** - * @example '0,255,122' - */ - public function rgbColor(): string - { - return implode(',', $this->rgbColorAsArray()); - } - - /** - * @example 'rgb(0,255,122)' - */ - public function rgbCssColor(): string - { - return sprintf( - 'rgb(%s)', - $this->rgbColor(), - ); - } - - /** - * @example 'rgba(0,255,122,0.8)' - */ - public function rgbaCssColor(): string - { - $number = new Number(); - - return sprintf( - 'rgba(%s,%s)', - $this->rgbColor(), - $number->randomFloat(1, 0, 1), - ); - } - - /** - * @example 'blue' - */ - public function safeColorName(): string - { - return Helper::randomElement($this->safeColorNames); - } - - /** - * @example 'NavajoWhite' - */ - public function colorName(): string - { - return Helper::randomElement($this->allColorNames); - } - - /** - * @example '340,50,20' - */ - public function hslColor(): string - { - $number = new Number(); - - return sprintf( - '%s,%s,%s', - $number->numberBetween(0, 360), - $number->numberBetween(0, 100), - $number->numberBetween(0, 100), - ); - } - - /** - * @example array(340, 50, 20) - * - * @return int[] - */ - public function hslColorAsArray(): array - { - $number = new Number(); - - return [ - $number->numberBetween(0, 360), - $number->numberBetween(0, 100), - $number->numberBetween(0, 100), - ]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Coordinates.php b/old_vendor/fakerphp/faker/src/Faker/Core/Coordinates.php deleted file mode 100644 index 40a26589..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Coordinates.php +++ /dev/null @@ -1,68 +0,0 @@ - 90 || $max > 90) { - throw new \LogicException('Latitude cannot be greater that 90.0'); - } - - return $this->randomFloat(6, $min, $max); - } - - /** - * @example '86.211205' - * - * @return float Uses signed degrees format (returns a float number between -180 and 180) - */ - public function longitude(float $min = -180.0, float $max = 180.0): float - { - if ($min < -180 || $max < -180) { - throw new \LogicException('Longitude cannot be less that -180.0'); - } - - if ($min > 180 || $max > 180) { - throw new \LogicException('Longitude cannot be greater that 180.0'); - } - - return $this->randomFloat(6, $min, $max); - } - - /** - * @example array('77.147489', '86.211205') - * - * @return array{latitude: float, longitude: float} - */ - public function localCoordinates(): array - { - return [ - 'latitude' => static::latitude(), - 'longitude' => static::longitude(), - ]; - } - - private function randomFloat(int $nbMaxDecimals, float $min, float $max): float - { - if ($min > $max) { - throw new \LogicException('Invalid coordinates boundaries'); - } - - return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $nbMaxDecimals); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/DateTime.php b/old_vendor/fakerphp/faker/src/Faker/Core/DateTime.php deleted file mode 100644 index f3d78776..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/DateTime.php +++ /dev/null @@ -1,230 +0,0 @@ -getTimestamp(); - } - - return strtotime(empty($until) ? 'now' : $until); - } - - /** - * Get a DateTime created based on a POSIX-timestamp. - * - * @param int $timestamp the UNIX / POSIX-compatible timestamp - */ - protected function getTimestampDateTime(int $timestamp): \DateTime - { - return new \DateTime('@' . $timestamp); - } - - protected function setDefaultTimezone(string $timezone = null): void - { - $this->defaultTimezone = $timezone; - } - - protected function getDefaultTimezone(): ?string - { - return $this->defaultTimezone; - } - - protected function resolveTimezone(?string $timezone): string - { - if ($timezone !== null) { - return $timezone; - } - - return null === $this->defaultTimezone ? date_default_timezone_get() : $this->defaultTimezone; - } - - /** - * Internal method to set the timezone on a DateTime object. - */ - protected function setTimezone(\DateTime $dateTime, ?string $timezone): \DateTime - { - $timezone = $this->resolveTimezone($timezone); - - return $dateTime->setTimezone(new \DateTimeZone($timezone)); - } - - public function dateTime($until = 'now', string $timezone = null): \DateTime - { - return $this->setTimezone( - $this->getTimestampDateTime($this->unixTime($until)), - $timezone, - ); - } - - public function dateTimeAD($until = 'now', string $timezone = null): \DateTime - { - $min = (PHP_INT_SIZE > 4) ? -62135597361 : -PHP_INT_MAX; - - return $this->setTimezone( - $this->getTimestampDateTime($this->generator->numberBetween($min, $this->getTimestamp($until))), - $timezone, - ); - } - - public function dateTimeBetween($from = '-30 years', $until = 'now', string $timezone = null): \DateTime - { - $start = $this->getTimestamp($from); - $end = $this->getTimestamp($until); - - if ($start > $end) { - throw new \InvalidArgumentException('"$from" must be anterior to "$until".'); - } - - $timestamp = $this->generator->numberBetween($start, $end); - - return $this->setTimezone( - $this->getTimestampDateTime($timestamp), - $timezone, - ); - } - - public function dateTimeInInterval($from = '-30 years', string $interval = '+5 days', string $timezone = null): \DateTime - { - $intervalObject = \DateInterval::createFromDateString($interval); - $datetime = $from instanceof \DateTime ? $from : new \DateTime($from); - - $other = (clone $datetime)->add($intervalObject); - - $begin = min($datetime, $other); - $end = $datetime === $begin ? $other : $datetime; - - return $this->dateTimeBetween($begin, $end, $timezone); - } - - public function dateTimeThisWeek($until = 'sunday this week', string $timezone = null): \DateTime - { - return $this->dateTimeBetween('monday this week', $until, $timezone); - } - - public function dateTimeThisMonth($until = 'last day of this month', string $timezone = null): \DateTime - { - return $this->dateTimeBetween('first day of this month', $until, $timezone); - } - - public function dateTimeThisYear($until = 'last day of december', string $timezone = null): \DateTime - { - return $this->dateTimeBetween('first day of january', $until, $timezone); - } - - public function dateTimeThisDecade($until = 'now', string $timezone = null): \DateTime - { - $year = floor(date('Y') / 10) * 10; - - return $this->dateTimeBetween("first day of january $year", $until, $timezone); - } - - public function dateTimeThisCentury($until = 'now', string $timezone = null): \DateTime - { - $year = floor(date('Y') / 100) * 100; - - return $this->dateTimeBetween("first day of january $year", $until, $timezone); - } - - public function date(string $format = 'Y-m-d', $until = 'now'): string - { - return $this->dateTime($until)->format($format); - } - - public function time(string $format = 'H:i:s', $until = 'now'): string - { - return $this->date($format, $until); - } - - public function unixTime($until = 'now'): int - { - return $this->generator->numberBetween(0, $this->getTimestamp($until)); - } - - public function iso8601($until = 'now'): string - { - return $this->date(\DateTime::ISO8601, $until); - } - - public function amPm($until = 'now'): string - { - return $this->date('a', $until); - } - - public function dayOfMonth($until = 'now'): string - { - return $this->date('d', $until); - } - - public function dayOfWeek($until = 'now'): string - { - return $this->date('l', $until); - } - - public function month($until = 'now'): string - { - return $this->date('m', $until); - } - - public function monthName($until = 'now'): string - { - return $this->date('F', $until); - } - - public function year($until = 'now'): string - { - return $this->date('Y', $until); - } - - public function century(): string - { - return Helper::randomElement($this->centuries); - } - - public function timezone(string $countryCode = null): string - { - if ($countryCode) { - $timezones = \DateTimeZone::listIdentifiers(\DateTimeZone::PER_COUNTRY, $countryCode); - } else { - $timezones = \DateTimeZone::listIdentifiers(); - } - - return Helper::randomElement($timezones); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/File.php b/old_vendor/fakerphp/faker/src/Faker/Core/File.php deleted file mode 100644 index adddb0cb..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/File.php +++ /dev/null @@ -1,564 +0,0 @@ - file extension(s) - * - * @see http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types - */ - private $mimeTypes = [ - 'application/atom+xml' => 'atom', - 'application/ecmascript' => 'ecma', - 'application/emma+xml' => 'emma', - 'application/epub+zip' => 'epub', - 'application/java-archive' => 'jar', - 'application/java-vm' => 'class', - 'application/javascript' => 'js', - 'application/json' => 'json', - 'application/jsonml+json' => 'jsonml', - 'application/lost+xml' => 'lostxml', - 'application/mathml+xml' => 'mathml', - 'application/mets+xml' => 'mets', - 'application/mods+xml' => 'mods', - 'application/mp4' => 'mp4s', - 'application/msword' => ['doc', 'dot'], - 'application/octet-stream' => [ - 'bin', - 'dms', - 'lrf', - 'mar', - 'so', - 'dist', - 'distz', - 'pkg', - 'bpk', - 'dump', - 'elc', - 'deploy', - ], - 'application/ogg' => 'ogx', - 'application/omdoc+xml' => 'omdoc', - 'application/pdf' => 'pdf', - 'application/pgp-encrypted' => 'pgp', - 'application/pgp-signature' => ['asc', 'sig'], - 'application/pkix-pkipath' => 'pkipath', - 'application/pkixcmp' => 'pki', - 'application/pls+xml' => 'pls', - 'application/postscript' => ['ai', 'eps', 'ps'], - 'application/pskc+xml' => 'pskcxml', - 'application/rdf+xml' => 'rdf', - 'application/reginfo+xml' => 'rif', - 'application/rss+xml' => 'rss', - 'application/rtf' => 'rtf', - 'application/sbml+xml' => 'sbml', - 'application/vnd.adobe.air-application-installer-package+zip' => 'air', - 'application/vnd.adobe.xdp+xml' => 'xdp', - 'application/vnd.adobe.xfdf' => 'xfdf', - 'application/vnd.ahead.space' => 'ahead', - 'application/vnd.dart' => 'dart', - 'application/vnd.data-vision.rdz' => 'rdz', - 'application/vnd.dece.data' => ['uvf', 'uvvf', 'uvd', 'uvvd'], - 'application/vnd.dece.ttml+xml' => ['uvt', 'uvvt'], - 'application/vnd.dece.unspecified' => ['uvx', 'uvvx'], - 'application/vnd.dece.zip' => ['uvz', 'uvvz'], - 'application/vnd.denovo.fcselayout-link' => 'fe_launch', - 'application/vnd.dna' => 'dna', - 'application/vnd.dolby.mlp' => 'mlp', - 'application/vnd.dpgraph' => 'dpg', - 'application/vnd.dreamfactory' => 'dfac', - 'application/vnd.ds-keypoint' => 'kpxx', - 'application/vnd.dvb.ait' => 'ait', - 'application/vnd.dvb.service' => 'svc', - 'application/vnd.dynageo' => 'geo', - 'application/vnd.ecowin.chart' => 'mag', - 'application/vnd.enliven' => 'nml', - 'application/vnd.epson.esf' => 'esf', - 'application/vnd.epson.msf' => 'msf', - 'application/vnd.epson.quickanime' => 'qam', - 'application/vnd.epson.salt' => 'slt', - 'application/vnd.epson.ssf' => 'ssf', - 'application/vnd.ezpix-album' => 'ez2', - 'application/vnd.ezpix-package' => 'ez3', - 'application/vnd.fdf' => 'fdf', - 'application/vnd.fdsn.mseed' => 'mseed', - 'application/vnd.fdsn.seed' => ['seed', 'dataless'], - 'application/vnd.flographit' => 'gph', - 'application/vnd.fluxtime.clip' => 'ftc', - 'application/vnd.hal+xml' => 'hal', - 'application/vnd.hydrostatix.sof-data' => 'sfd-hdstx', - 'application/vnd.ibm.minipay' => 'mpy', - 'application/vnd.ibm.secure-container' => 'sc', - 'application/vnd.iccprofile' => ['icc', 'icm'], - 'application/vnd.igloader' => 'igl', - 'application/vnd.immervision-ivp' => 'ivp', - 'application/vnd.kde.karbon' => 'karbon', - 'application/vnd.kde.kchart' => 'chrt', - 'application/vnd.kde.kformula' => 'kfo', - 'application/vnd.kde.kivio' => 'flw', - 'application/vnd.kde.kontour' => 'kon', - 'application/vnd.kde.kpresenter' => ['kpr', 'kpt'], - 'application/vnd.kde.kspread' => 'ksp', - 'application/vnd.kde.kword' => ['kwd', 'kwt'], - 'application/vnd.kenameaapp' => 'htke', - 'application/vnd.kidspiration' => 'kia', - 'application/vnd.kinar' => ['kne', 'knp'], - 'application/vnd.koan' => ['skp', 'skd', 'skt', 'skm'], - 'application/vnd.kodak-descriptor' => 'sse', - 'application/vnd.las.las+xml' => 'lasxml', - 'application/vnd.llamagraphics.life-balance.desktop' => 'lbd', - 'application/vnd.llamagraphics.life-balance.exchange+xml' => 'lbe', - 'application/vnd.lotus-1-2-3' => '123', - 'application/vnd.lotus-approach' => 'apr', - 'application/vnd.lotus-freelance' => 'pre', - 'application/vnd.lotus-notes' => 'nsf', - 'application/vnd.lotus-organizer' => 'org', - 'application/vnd.lotus-screencam' => 'scm', - 'application/vnd.mozilla.xul+xml' => 'xul', - 'application/vnd.ms-artgalry' => 'cil', - 'application/vnd.ms-cab-compressed' => 'cab', - 'application/vnd.ms-excel' => [ - 'xls', - 'xlm', - 'xla', - 'xlc', - 'xlt', - 'xlw', - ], - 'application/vnd.ms-excel.addin.macroenabled.12' => 'xlam', - 'application/vnd.ms-excel.sheet.binary.macroenabled.12' => 'xlsb', - 'application/vnd.ms-excel.sheet.macroenabled.12' => 'xlsm', - 'application/vnd.ms-excel.template.macroenabled.12' => 'xltm', - 'application/vnd.ms-fontobject' => 'eot', - 'application/vnd.ms-htmlhelp' => 'chm', - 'application/vnd.ms-ims' => 'ims', - 'application/vnd.ms-lrm' => 'lrm', - 'application/vnd.ms-officetheme' => 'thmx', - 'application/vnd.ms-pki.seccat' => 'cat', - 'application/vnd.ms-pki.stl' => 'stl', - 'application/vnd.ms-powerpoint' => ['ppt', 'pps', 'pot'], - 'application/vnd.ms-powerpoint.addin.macroenabled.12' => 'ppam', - 'application/vnd.ms-powerpoint.presentation.macroenabled.12' => 'pptm', - 'application/vnd.ms-powerpoint.slide.macroenabled.12' => 'sldm', - 'application/vnd.ms-powerpoint.slideshow.macroenabled.12' => 'ppsm', - 'application/vnd.ms-powerpoint.template.macroenabled.12' => 'potm', - 'application/vnd.ms-project' => ['mpp', 'mpt'], - 'application/vnd.ms-word.document.macroenabled.12' => 'docm', - 'application/vnd.ms-word.template.macroenabled.12' => 'dotm', - 'application/vnd.ms-works' => ['wps', 'wks', 'wcm', 'wdb'], - 'application/vnd.ms-wpl' => 'wpl', - 'application/vnd.ms-xpsdocument' => 'xps', - 'application/vnd.mseq' => 'mseq', - 'application/vnd.musician' => 'mus', - 'application/vnd.oasis.opendocument.chart' => 'odc', - 'application/vnd.oasis.opendocument.chart-template' => 'otc', - 'application/vnd.oasis.opendocument.database' => 'odb', - 'application/vnd.oasis.opendocument.formula' => 'odf', - 'application/vnd.oasis.opendocument.formula-template' => 'odft', - 'application/vnd.oasis.opendocument.graphics' => 'odg', - 'application/vnd.oasis.opendocument.graphics-template' => 'otg', - 'application/vnd.oasis.opendocument.image' => 'odi', - 'application/vnd.oasis.opendocument.image-template' => 'oti', - 'application/vnd.oasis.opendocument.presentation' => 'odp', - 'application/vnd.oasis.opendocument.presentation-template' => 'otp', - 'application/vnd.oasis.opendocument.spreadsheet' => 'ods', - 'application/vnd.oasis.opendocument.spreadsheet-template' => 'ots', - 'application/vnd.oasis.opendocument.text' => 'odt', - 'application/vnd.oasis.opendocument.text-master' => 'odm', - 'application/vnd.oasis.opendocument.text-template' => 'ott', - 'application/vnd.oasis.opendocument.text-web' => 'oth', - 'application/vnd.olpc-sugar' => 'xo', - 'application/vnd.oma.dd2+xml' => 'dd2', - 'application/vnd.openofficeorg.extension' => 'oxt', - 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx', - 'application/vnd.openxmlformats-officedocument.presentationml.slide' => 'sldx', - 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'ppsx', - 'application/vnd.openxmlformats-officedocument.presentationml.template' => 'potx', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => 'xltx', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'dotx', - 'application/vnd.pvi.ptid1' => 'ptid', - 'application/vnd.quark.quarkxpress' => [ - 'qxd', - 'qxt', - 'qwd', - 'qwt', - 'qxl', - 'qxb', - ], - 'application/vnd.realvnc.bed' => 'bed', - 'application/vnd.recordare.musicxml' => 'mxl', - 'application/vnd.recordare.musicxml+xml' => 'musicxml', - 'application/vnd.rig.cryptonote' => 'cryptonote', - 'application/vnd.rim.cod' => 'cod', - 'application/vnd.rn-realmedia' => 'rm', - 'application/vnd.rn-realmedia-vbr' => 'rmvb', - 'application/vnd.route66.link66+xml' => 'link66', - 'application/vnd.sailingtracker.track' => 'st', - 'application/vnd.seemail' => 'see', - 'application/vnd.sema' => 'sema', - 'application/vnd.semd' => 'semd', - 'application/vnd.semf' => 'semf', - 'application/vnd.shana.informed.formdata' => 'ifm', - 'application/vnd.shana.informed.formtemplate' => 'itp', - 'application/vnd.shana.informed.interchange' => 'iif', - 'application/vnd.shana.informed.package' => 'ipk', - 'application/vnd.simtech-mindmapper' => ['twd', 'twds'], - 'application/vnd.smaf' => 'mmf', - 'application/vnd.stepmania.stepchart' => 'sm', - 'application/vnd.sun.xml.calc' => 'sxc', - 'application/vnd.sun.xml.calc.template' => 'stc', - 'application/vnd.sun.xml.draw' => 'sxd', - 'application/vnd.sun.xml.draw.template' => 'std', - 'application/vnd.sun.xml.impress' => 'sxi', - 'application/vnd.sun.xml.impress.template' => 'sti', - 'application/vnd.sun.xml.math' => 'sxm', - 'application/vnd.sun.xml.writer' => 'sxw', - 'application/vnd.sun.xml.writer.global' => 'sxg', - 'application/vnd.sun.xml.writer.template' => 'stw', - 'application/vnd.sus-calendar' => ['sus', 'susp'], - 'application/vnd.svd' => 'svd', - 'application/vnd.symbian.install' => ['sis', 'sisx'], - 'application/vnd.syncml+xml' => 'xsm', - 'application/vnd.syncml.dm+wbxml' => 'bdm', - 'application/vnd.syncml.dm+xml' => 'xdm', - 'application/vnd.tao.intent-module-archive' => 'tao', - 'application/vnd.tcpdump.pcap' => ['pcap', 'cap', 'dmp'], - 'application/vnd.tmobile-livetv' => 'tmo', - 'application/vnd.trid.tpt' => 'tpt', - 'application/vnd.triscape.mxs' => 'mxs', - 'application/vnd.trueapp' => 'tra', - 'application/vnd.ufdl' => ['ufd', 'ufdl'], - 'application/vnd.uiq.theme' => 'utz', - 'application/vnd.umajin' => 'umj', - 'application/vnd.unity' => 'unityweb', - 'application/vnd.uoml+xml' => 'uoml', - 'application/vnd.vcx' => 'vcx', - 'application/vnd.visio' => ['vsd', 'vst', 'vss', 'vsw'], - 'application/vnd.visionary' => 'vis', - 'application/vnd.vsf' => 'vsf', - 'application/vnd.wap.wbxml' => 'wbxml', - 'application/vnd.wap.wmlc' => 'wmlc', - 'application/vnd.wap.wmlscriptc' => 'wmlsc', - 'application/vnd.webturbo' => 'wtb', - 'application/vnd.wolfram.player' => 'nbp', - 'application/vnd.wordperfect' => 'wpd', - 'application/vnd.wqd' => 'wqd', - 'application/vnd.wt.stf' => 'stf', - 'application/vnd.xara' => 'xar', - 'application/vnd.xfdl' => 'xfdl', - 'application/voicexml+xml' => 'vxml', - 'application/widget' => 'wgt', - 'application/winhlp' => 'hlp', - 'application/wsdl+xml' => 'wsdl', - 'application/wspolicy+xml' => 'wspolicy', - 'application/x-7z-compressed' => '7z', - 'application/x-bittorrent' => 'torrent', - 'application/x-blorb' => ['blb', 'blorb'], - 'application/x-bzip' => 'bz', - 'application/x-cdlink' => 'vcd', - 'application/x-cfs-compressed' => 'cfs', - 'application/x-chat' => 'chat', - 'application/x-chess-pgn' => 'pgn', - 'application/x-conference' => 'nsc', - 'application/x-cpio' => 'cpio', - 'application/x-csh' => 'csh', - 'application/x-debian-package' => ['deb', 'udeb'], - 'application/x-dgc-compressed' => 'dgc', - 'application/x-director' => [ - 'dir', - 'dcr', - 'dxr', - 'cst', - 'cct', - 'cxt', - 'w3d', - 'fgd', - 'swa', - ], - 'application/x-font-ttf' => ['ttf', 'ttc'], - 'application/x-font-type1' => ['pfa', 'pfb', 'pfm', 'afm'], - 'application/x-font-woff' => 'woff', - 'application/x-freearc' => 'arc', - 'application/x-futuresplash' => 'spl', - 'application/x-gca-compressed' => 'gca', - 'application/x-glulx' => 'ulx', - 'application/x-gnumeric' => 'gnumeric', - 'application/x-gramps-xml' => 'gramps', - 'application/x-gtar' => 'gtar', - 'application/x-hdf' => 'hdf', - 'application/x-install-instructions' => 'install', - 'application/x-iso9660-image' => 'iso', - 'application/x-java-jnlp-file' => 'jnlp', - 'application/x-latex' => 'latex', - 'application/x-lzh-compressed' => ['lzh', 'lha'], - 'application/x-mie' => 'mie', - 'application/x-mobipocket-ebook' => ['prc', 'mobi'], - 'application/x-ms-application' => 'application', - 'application/x-ms-shortcut' => 'lnk', - 'application/x-ms-wmd' => 'wmd', - 'application/x-ms-wmz' => 'wmz', - 'application/x-ms-xbap' => 'xbap', - 'application/x-msaccess' => 'mdb', - 'application/x-msbinder' => 'obd', - 'application/x-mscardfile' => 'crd', - 'application/x-msclip' => 'clp', - 'application/x-msdownload' => ['exe', 'dll', 'com', 'bat', 'msi'], - 'application/x-msmediaview' => [ - 'mvb', - 'm13', - 'm14', - ], - 'application/x-msmetafile' => ['wmf', 'wmz', 'emf', 'emz'], - 'application/x-rar-compressed' => 'rar', - 'application/x-research-info-systems' => 'ris', - 'application/x-sh' => 'sh', - 'application/x-shar' => 'shar', - 'application/x-shockwave-flash' => 'swf', - 'application/x-silverlight-app' => 'xap', - 'application/x-sql' => 'sql', - 'application/x-stuffit' => 'sit', - 'application/x-stuffitx' => 'sitx', - 'application/x-subrip' => 'srt', - 'application/x-sv4cpio' => 'sv4cpio', - 'application/x-sv4crc' => 'sv4crc', - 'application/x-t3vm-image' => 't3', - 'application/x-tads' => 'gam', - 'application/x-tar' => 'tar', - 'application/x-tcl' => 'tcl', - 'application/x-tex' => 'tex', - 'application/x-tex-tfm' => 'tfm', - 'application/x-texinfo' => ['texinfo', 'texi'], - 'application/x-tgif' => 'obj', - 'application/x-ustar' => 'ustar', - 'application/x-wais-source' => 'src', - 'application/x-x509-ca-cert' => ['der', 'crt'], - 'application/x-xfig' => 'fig', - 'application/x-xliff+xml' => 'xlf', - 'application/x-xpinstall' => 'xpi', - 'application/x-xz' => 'xz', - 'application/x-zmachine' => 'z1', - 'application/xaml+xml' => 'xaml', - 'application/xcap-diff+xml' => 'xdf', - 'application/xenc+xml' => 'xenc', - 'application/xhtml+xml' => ['xhtml', 'xht'], - 'application/xml' => ['xml', 'xsl'], - 'application/xml-dtd' => 'dtd', - 'application/xop+xml' => 'xop', - 'application/xproc+xml' => 'xpl', - 'application/xslt+xml' => 'xslt', - 'application/xspf+xml' => 'xspf', - 'application/xv+xml' => ['mxml', 'xhvml', 'xvml', 'xvm'], - 'application/yang' => 'yang', - 'application/yin+xml' => 'yin', - 'application/zip' => 'zip', - 'audio/adpcm' => 'adp', - 'audio/basic' => ['au', 'snd'], - 'audio/midi' => ['mid', 'midi', 'kar', 'rmi'], - 'audio/mp4' => 'mp4a', - 'audio/mpeg' => [ - 'mpga', - 'mp2', - 'mp2a', - 'mp3', - 'm2a', - 'm3a', - ], - 'audio/ogg' => ['oga', 'ogg', 'spx'], - 'audio/vnd.dece.audio' => ['uva', 'uvva'], - 'audio/vnd.rip' => 'rip', - 'audio/webm' => 'weba', - 'audio/x-aac' => 'aac', - 'audio/x-aiff' => ['aif', 'aiff', 'aifc'], - 'audio/x-caf' => 'caf', - 'audio/x-flac' => 'flac', - 'audio/x-matroska' => 'mka', - 'audio/x-mpegurl' => 'm3u', - 'audio/x-ms-wax' => 'wax', - 'audio/x-ms-wma' => 'wma', - 'audio/x-pn-realaudio' => ['ram', 'ra'], - 'audio/x-pn-realaudio-plugin' => 'rmp', - 'audio/x-wav' => 'wav', - 'audio/xm' => 'xm', - 'image/bmp' => 'bmp', - 'image/cgm' => 'cgm', - 'image/g3fax' => 'g3', - 'image/gif' => 'gif', - 'image/ief' => 'ief', - 'image/jpeg' => ['jpeg', 'jpg', 'jpe'], - 'image/ktx' => 'ktx', - 'image/png' => 'png', - 'image/prs.btif' => 'btif', - 'image/sgi' => 'sgi', - 'image/svg+xml' => ['svg', 'svgz'], - 'image/tiff' => ['tiff', 'tif'], - 'image/vnd.adobe.photoshop' => 'psd', - 'image/vnd.dece.graphic' => ['uvi', 'uvvi', 'uvg', 'uvvg'], - 'image/vnd.dvb.subtitle' => 'sub', - 'image/vnd.djvu' => ['djvu', 'djv'], - 'image/vnd.dwg' => 'dwg', - 'image/vnd.dxf' => 'dxf', - 'image/vnd.fastbidsheet' => 'fbs', - 'image/vnd.fpx' => 'fpx', - 'image/vnd.fst' => 'fst', - 'image/vnd.fujixerox.edmics-mmr' => 'mmr', - 'image/vnd.fujixerox.edmics-rlc' => 'rlc', - 'image/vnd.ms-modi' => 'mdi', - 'image/vnd.ms-photo' => 'wdp', - 'image/vnd.net-fpx' => 'npx', - 'image/vnd.wap.wbmp' => 'wbmp', - 'image/vnd.xiff' => 'xif', - 'image/webp' => 'webp', - 'image/x-3ds' => '3ds', - 'image/x-cmu-raster' => 'ras', - 'image/x-cmx' => 'cmx', - 'image/x-freehand' => ['fh', 'fhc', 'fh4', 'fh5', 'fh7'], - 'image/x-icon' => 'ico', - 'image/x-mrsid-image' => 'sid', - 'image/x-pcx' => 'pcx', - 'image/x-pict' => ['pic', 'pct'], - 'image/x-portable-anymap' => 'pnm', - 'image/x-portable-bitmap' => 'pbm', - 'image/x-portable-graymap' => 'pgm', - 'image/x-portable-pixmap' => 'ppm', - 'image/x-rgb' => 'rgb', - 'image/x-tga' => 'tga', - 'image/x-xbitmap' => 'xbm', - 'image/x-xpixmap' => 'xpm', - 'image/x-xwindowdump' => 'xwd', - 'message/rfc822' => ['eml', 'mime'], - 'model/iges' => ['igs', 'iges'], - 'model/mesh' => ['msh', 'mesh', 'silo'], - 'model/vnd.collada+xml' => 'dae', - 'model/vnd.dwf' => 'dwf', - 'model/vnd.gdl' => 'gdl', - 'model/vnd.gtw' => 'gtw', - 'model/vnd.mts' => 'mts', - 'model/vnd.vtu' => 'vtu', - 'model/vrml' => ['wrl', 'vrml'], - 'model/x3d+binary' => 'x3db', - 'model/x3d+vrml' => 'x3dv', - 'model/x3d+xml' => 'x3d', - 'text/cache-manifest' => 'appcache', - 'text/calendar' => ['ics', 'ifb'], - 'text/css' => 'css', - 'text/csv' => 'csv', - 'text/html' => ['html', 'htm'], - 'text/n3' => 'n3', - 'text/plain' => [ - 'txt', - 'text', - 'conf', - 'def', - 'list', - 'log', - 'in', - ], - 'text/prs.lines.tag' => 'dsc', - 'text/richtext' => 'rtx', - 'text/sgml' => ['sgml', 'sgm'], - 'text/tab-separated-values' => 'tsv', - 'text/troff' => [ - 't', - 'tr', - 'roff', - 'man', - 'me', - 'ms', - ], - 'text/turtle' => 'ttl', - 'text/uri-list' => ['uri', 'uris', 'urls'], - 'text/vcard' => 'vcard', - 'text/vnd.curl' => 'curl', - 'text/vnd.curl.dcurl' => 'dcurl', - 'text/vnd.curl.scurl' => 'scurl', - 'text/vnd.curl.mcurl' => 'mcurl', - 'text/vnd.dvb.subtitle' => 'sub', - 'text/vnd.fly' => 'fly', - 'text/vnd.fmi.flexstor' => 'flx', - 'text/vnd.graphviz' => 'gv', - 'text/vnd.in3d.3dml' => '3dml', - 'text/vnd.in3d.spot' => 'spot', - 'text/vnd.sun.j2me.app-descriptor' => 'jad', - 'text/vnd.wap.wml' => 'wml', - 'text/vnd.wap.wmlscript' => 'wmls', - 'text/x-asm' => ['s', 'asm'], - 'text/x-fortran' => ['f', 'for', 'f77', 'f90'], - 'text/x-java-source' => 'java', - 'text/x-opml' => 'opml', - 'text/x-pascal' => ['p', 'pas'], - 'text/x-nfo' => 'nfo', - 'text/x-setext' => 'etx', - 'text/x-sfv' => 'sfv', - 'text/x-uuencode' => 'uu', - 'text/x-vcalendar' => 'vcs', - 'text/x-vcard' => 'vcf', - 'video/3gpp' => '3gp', - 'video/3gpp2' => '3g2', - 'video/h261' => 'h261', - 'video/h263' => 'h263', - 'video/h264' => 'h264', - 'video/jpeg' => 'jpgv', - 'video/jpm' => ['jpm', 'jpgm'], - 'video/mj2' => 'mj2', - 'video/mp4' => 'mp4', - 'video/mpeg' => ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'], - 'video/ogg' => 'ogv', - 'video/quicktime' => ['qt', 'mov'], - 'video/vnd.dece.hd' => ['uvh', 'uvvh'], - 'video/vnd.dece.mobile' => ['uvm', 'uvvm'], - 'video/vnd.dece.pd' => ['uvp', 'uvvp'], - 'video/vnd.dece.sd' => ['uvs', 'uvvs'], - 'video/vnd.dece.video' => ['uvv', 'uvvv'], - 'video/vnd.dvb.file' => 'dvb', - 'video/vnd.fvt' => 'fvt', - 'video/vnd.mpegurl' => ['mxu', 'm4u'], - 'video/vnd.ms-playready.media.pyv' => 'pyv', - 'video/vnd.uvvu.mp4' => ['uvu', 'uvvu'], - 'video/vnd.vivo' => 'viv', - 'video/webm' => 'webm', - 'video/x-f4v' => 'f4v', - 'video/x-fli' => 'fli', - 'video/x-flv' => 'flv', - 'video/x-m4v' => 'm4v', - 'video/x-matroska' => ['mkv', 'mk3d', 'mks'], - 'video/x-mng' => 'mng', - 'video/x-ms-asf' => ['asf', 'asx'], - 'video/x-ms-vob' => 'vob', - 'video/x-ms-wm' => 'wm', - 'video/x-ms-wmv' => 'wmv', - 'video/x-ms-wmx' => 'wmx', - 'video/x-ms-wvx' => 'wvx', - 'video/x-msvideo' => 'avi', - 'video/x-sgi-movie' => 'movie', - ]; - - public function mimeType(): string - { - return array_rand($this->mimeTypes, 1); - } - - public function extension(): string - { - $extension = $this->mimeTypes[array_rand($this->mimeTypes, 1)]; - - return is_array($extension) ? $extension[array_rand($extension, 1)] : $extension; - } - - public function filePath(): string - { - return tempnam(sys_get_temp_dir(), 'faker'); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Number.php b/old_vendor/fakerphp/faker/src/Faker/Core/Number.php deleted file mode 100644 index f67c0426..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Number.php +++ /dev/null @@ -1,83 +0,0 @@ -= $except) { - ++$result; - } - - return $result; - } - - public function randomDigitNotZero(): int - { - return mt_rand(1, 9); - } - - public function randomFloat(?int $nbMaxDecimals = null, float $min = 0, ?float $max = null): float - { - if (null === $nbMaxDecimals) { - $nbMaxDecimals = $this->randomDigit(); - } - - if (null === $max) { - $max = $this->randomNumber(); - - if ($min > $max) { - $max = $min; - } - } - - if ($min > $max) { - $tmp = $min; - $min = $max; - $max = $tmp; - } - - return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $nbMaxDecimals); - } - - public function randomNumber(int $nbDigits = null, bool $strict = false): int - { - if (null === $nbDigits) { - $nbDigits = $this->randomDigitNotZero(); - } - $max = 10 ** $nbDigits - 1; - - if ($max > mt_getrandmax()) { - throw new \InvalidArgumentException('randomNumber() can only generate numbers up to mt_getrandmax()'); - } - - if ($strict) { - return mt_rand(10 ** ($nbDigits - 1), $max); - } - - return mt_rand(0, $max); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Uuid.php b/old_vendor/fakerphp/faker/src/Faker/Core/Uuid.php deleted file mode 100644 index 5e3b633a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Uuid.php +++ /dev/null @@ -1,56 +0,0 @@ -numberBetween(0, 2147483647) . '#' . $number->numberBetween(0, 2147483647); - - // Hash the seed and convert to a byte array - $val = md5($seed, true); - $byte = array_values(unpack('C16', $val)); - - // extract fields from byte array - $tLo = ($byte[0] << 24) | ($byte[1] << 16) | ($byte[2] << 8) | $byte[3]; - $tMi = ($byte[4] << 8) | $byte[5]; - $tHi = ($byte[6] << 8) | $byte[7]; - $csLo = $byte[9]; - $csHi = $byte[8] & 0x3f | (1 << 7); - - // correct byte order for big edian architecture - if (pack('L', 0x6162797A) == pack('N', 0x6162797A)) { - $tLo = (($tLo & 0x000000ff) << 24) | (($tLo & 0x0000ff00) << 8) - | (($tLo & 0x00ff0000) >> 8) | (($tLo & 0xff000000) >> 24); - $tMi = (($tMi & 0x00ff) << 8) | (($tMi & 0xff00) >> 8); - $tHi = (($tHi & 0x00ff) << 8) | (($tHi & 0xff00) >> 8); - } - - // apply version number - $tHi &= 0x0fff; - $tHi |= (3 << 12); - - // cast to string - return sprintf( - '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', - $tLo, - $tMi, - $tHi, - $csHi, - $csLo, - $byte[10], - $byte[11], - $byte[12], - $byte[13], - $byte[14], - $byte[15], - ); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Core/Version.php b/old_vendor/fakerphp/faker/src/Faker/Core/Version.php deleted file mode 100644 index ce484e6a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Core/Version.php +++ /dev/null @@ -1,60 +0,0 @@ -semverPreReleaseIdentifier() : '', - $build && mt_rand(0, 1) ? '+' . $this->semverBuildIdentifier() : '', - ); - } - - /** - * Common pre-release identifier - */ - private function semverPreReleaseIdentifier(): string - { - $ident = Helper::randomElement($this->semverCommonPreReleaseIdentifiers); - - if (!mt_rand(0, 1)) { - return $ident; - } - - return $ident . '.' . mt_rand(1, 99); - } - - /** - * Common random build identifier - */ - private function semverBuildIdentifier(): string - { - if (mt_rand(0, 1)) { - // short git revision syntax: https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection - return substr(sha1(Helper::lexify('??????')), 0, 7); - } - - // date syntax - return DateTime::date('YmdHis'); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/DefaultGenerator.php b/old_vendor/fakerphp/faker/src/Faker/DefaultGenerator.php deleted file mode 100644 index 688f4766..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/DefaultGenerator.php +++ /dev/null @@ -1,49 +0,0 @@ -default = $default; - } - - public function ext() - { - return $this; - } - - /** - * @param string $attribute - * - * @deprecated Use a method instead. - */ - public function __get($attribute) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Accessing property "%s" is deprecated, use "%s()" instead.', $attribute, $attribute); - - return $this->default; - } - - /** - * @param string $method - * @param array $attributes - */ - public function __call($method, $attributes) - { - return $this->default; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Documentor.php b/old_vendor/fakerphp/faker/src/Faker/Documentor.php deleted file mode 100644 index 280b8320..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Documentor.php +++ /dev/null @@ -1,70 +0,0 @@ -generator = $generator; - } - - /** - * @return array - */ - public function getFormatters() - { - $formatters = []; - $providers = array_reverse($this->generator->getProviders()); - $providers[] = new Provider\Base($this->generator); - - foreach ($providers as $provider) { - $providerClass = get_class($provider); - $formatters[$providerClass] = []; - $refl = new \ReflectionObject($provider); - - foreach ($refl->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflmethod) { - if ($reflmethod->getDeclaringClass()->getName() == 'Faker\Provider\Base' && $providerClass != 'Faker\Provider\Base') { - continue; - } - $methodName = $reflmethod->name; - - if ($reflmethod->isConstructor()) { - continue; - } - $parameters = []; - - foreach ($reflmethod->getParameters() as $reflparameter) { - $parameter = '$' . $reflparameter->getName(); - - if ($reflparameter->isDefaultValueAvailable()) { - $parameter .= ' = ' . var_export($reflparameter->getDefaultValue(), true); - } - $parameters[] = $parameter; - } - $parameters = $parameters ? '(' . implode(', ', $parameters) . ')' : ''; - - try { - $example = $this->generator->format($methodName); - } catch (\InvalidArgumentException $e) { - $example = ''; - } - - if (is_array($example)) { - $example = "array('" . implode("', '", $example) . "')"; - } elseif ($example instanceof \DateTime) { - $example = "DateTime('" . $example->format('Y-m-d H:i:s') . "')"; - } elseif ($example instanceof Generator || $example instanceof UniqueGenerator) { // modifier - $example = ''; - } else { - $example = var_export($example, true); - } - $formatters[$providerClass][$methodName . $parameters] = $example; - } - } - - return $formatters; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Extension/AddressExtension.php b/old_vendor/fakerphp/faker/src/Faker/Extension/AddressExtension.php deleted file mode 100644 index 568ca377..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Extension/AddressExtension.php +++ /dev/null @@ -1,39 +0,0 @@ -generator = $generator; - - return $instance; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Extension/Helper.php b/old_vendor/fakerphp/faker/src/Faker/Extension/Helper.php deleted file mode 100644 index 27a66143..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Extension/Helper.php +++ /dev/null @@ -1,106 +0,0 @@ -addProvider(new $providerClassName($generator)); - } - - return $generator; - } - - /** - * @param string $provider - * @param string $locale - * - * @return string - */ - protected static function getProviderClassname($provider, $locale = '') - { - if ($providerClass = self::findProviderClassname($provider, $locale)) { - return $providerClass; - } - // fallback to default locale - if ($providerClass = self::findProviderClassname($provider, static::DEFAULT_LOCALE)) { - return $providerClass; - } - // fallback to no locale - if ($providerClass = self::findProviderClassname($provider)) { - return $providerClass; - } - - throw new \InvalidArgumentException(sprintf('Unable to find provider "%s" with locale "%s"', $provider, $locale)); - } - - /** - * @param string $provider - * @param string $locale - * - * @return string|null - */ - protected static function findProviderClassname($provider, $locale = '') - { - $providerClass = 'Faker\\' . ($locale ? sprintf('Provider\%s\%s', $locale, $provider) : sprintf('Provider\%s', $provider)); - - if (class_exists($providerClass, true)) { - return $providerClass; - } - - return null; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Generator.php b/old_vendor/fakerphp/faker/src/Faker/Generator.php deleted file mode 100644 index 2cad02d7..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Generator.php +++ /dev/null @@ -1,973 +0,0 @@ -container = $container ?: Container\ContainerBuilder::getDefault(); - } - - /** - * @template T of Extension\Extension - * - * @param class-string $id - * - * @throws Extension\ExtensionNotFound - * - * @return T - */ - public function ext(string $id): Extension\Extension - { - if (!$this->container->has($id)) { - throw new Extension\ExtensionNotFound(sprintf( - 'No Faker extension with id "%s" was loaded.', - $id, - )); - } - - $extension = $this->container->get($id); - - if ($extension instanceof Extension\GeneratorAwareExtension) { - $extension = $extension->withGenerator($this); - } - - return $extension; - } - - public function addProvider($provider) - { - array_unshift($this->providers, $provider); - - $this->formatters = []; - } - - public function getProviders() - { - return $this->providers; - } - - /** - * With the unique generator you are guaranteed to never get the same two - * values. - * - * - * // will never return twice the same value - * $faker->unique()->randomElement(array(1, 2, 3)); - * - * - * @param bool $reset If set to true, resets the list of existing values - * @param int $maxRetries Maximum number of retries to find a unique value, - * After which an OverflowException is thrown. - * - * @throws \OverflowException When no unique value can be found by iterating $maxRetries times - * - * @return self A proxy class returning only non-existing values - */ - public function unique($reset = false, $maxRetries = 10000) - { - if ($reset || $this->uniqueGenerator === null) { - $this->uniqueGenerator = new UniqueGenerator($this, $maxRetries); - } - - return $this->uniqueGenerator; - } - - /** - * Get a value only some percentage of the time. - * - * @param float $weight A probability between 0 and 1, 0 means that we always get the default value. - * - * @return self - */ - public function optional(float $weight = 0.5, $default = null) - { - if ($weight > 1) { - trigger_deprecation('fakerphp/faker', '1.16', 'First argument ($weight) to method "optional()" must be between 0 and 1. You passed %f, we assume you meant %f.', $weight, $weight / 100); - $weight = $weight / 100; - } - - return new ChanceGenerator($this, $weight, $default); - } - - /** - * To make sure the value meet some criteria, pass a callable that verifies the - * output. If the validator fails, the generator will try again. - * - * The value validity is determined by a function passed as first argument. - * - * - * $values = array(); - * $evenValidator = function ($digit) { - * return $digit % 2 === 0; - * }; - * for ($i=0; $i < 10; $i++) { - * $values []= $faker->valid($evenValidator)->randomDigit; - * } - * print_r($values); // [0, 4, 8, 4, 2, 6, 0, 8, 8, 6] - * - * - * @param ?\Closure $validator A function returning true for valid values - * @param int $maxRetries Maximum number of retries to find a valid value, - * After which an OverflowException is thrown. - * - * @throws \OverflowException When no valid value can be found by iterating $maxRetries times - * - * @return self A proxy class returning only valid values - */ - public function valid(?\Closure $validator = null, int $maxRetries = 10000) - { - return new ValidGenerator($this, $validator, $maxRetries); - } - - public function seed($seed = null) - { - if ($seed === null) { - mt_srand(); - } else { - mt_srand((int) $seed, MT_RAND_PHP); - } - } - - public function format($format, $arguments = []) - { - return call_user_func_array($this->getFormatter($format), $arguments); - } - - /** - * @param string $format - * - * @return callable - */ - public function getFormatter($format) - { - if (isset($this->formatters[$format])) { - return $this->formatters[$format]; - } - - if (method_exists($this, $format)) { - $this->formatters[$format] = [$this, $format]; - - return $this->formatters[$format]; - } - - // "Faker\Core\Barcode->ean13" - if (preg_match('|^([a-zA-Z0-9\\\]+)->([a-zA-Z0-9]+)$|', $format, $matches)) { - $this->formatters[$format] = [$this->ext($matches[1]), $matches[2]]; - - return $this->formatters[$format]; - } - - foreach ($this->providers as $provider) { - if (method_exists($provider, $format)) { - $this->formatters[$format] = [$provider, $format]; - - return $this->formatters[$format]; - } - } - - throw new \InvalidArgumentException(sprintf('Unknown format "%s"', $format)); - } - - /** - * Replaces tokens ('{{ tokenName }}') with the result from the token method call - * - * @param string $string String that needs to bet parsed - * - * @return string - */ - public function parse($string) - { - $callback = function ($matches) { - return $this->format($matches[1]); - }; - - return preg_replace_callback('/{{\s?(\w+|[\w\\\]+->\w+?)\s?}}/u', $callback, $string); - } - - /** - * Get a random MIME type - * - * @example 'video/avi' - */ - public function mimeType() - { - return $this->ext(Extension\FileExtension::class)->mimeType(); - } - - /** - * Get a random file extension (without a dot) - * - * @example avi - */ - public function fileExtension() - { - return $this->ext(Extension\FileExtension::class)->extension(); - } - - /** - * Get a full path to a new real file on the system. - */ - public function filePath() - { - return $this->ext(Extension\FileExtension::class)->filePath(); - } - - /** - * Get an actual blood type - * - * @example 'AB' - */ - public function bloodType(): string - { - return $this->ext(Extension\BloodExtension::class)->bloodType(); - } - - /** - * Get a random resis value - * - * @example '+' - */ - public function bloodRh(): string - { - return $this->ext(Extension\BloodExtension::class)->bloodRh(); - } - - /** - * Get a full blood group - * - * @example 'AB+' - */ - public function bloodGroup(): string - { - return $this->ext(Extension\BloodExtension::class)->bloodGroup(); - } - - /** - * Get a random EAN13 barcode. - * - * @example '4006381333931' - */ - public function ean13(): string - { - return $this->ext(Extension\BarcodeExtension::class)->ean13(); - } - - /** - * Get a random EAN8 barcode. - * - * @example '73513537' - */ - public function ean8(): string - { - return $this->ext(Extension\BarcodeExtension::class)->ean8(); - } - - /** - * Get a random ISBN-10 code - * - * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number - * - * @example '4881416324' - */ - public function isbn10(): string - { - return $this->ext(Extension\BarcodeExtension::class)->isbn10(); - } - - /** - * Get a random ISBN-13 code - * - * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number - * - * @example '9790404436093' - */ - public function isbn13(): string - { - return $this->ext(Extension\BarcodeExtension::class)->isbn13(); - } - - /** - * Returns a random number between $int1 and $int2 (any order) - * - * @example 79907610 - */ - public function numberBetween($int1 = 0, $int2 = 2147483647): int - { - return $this->ext(Extension\NumberExtension::class)->numberBetween((int) $int1, (int) $int2); - } - - /** - * Returns a random number between 0 and 9 - */ - public function randomDigit(): int - { - return $this->ext(Extension\NumberExtension::class)->randomDigit(); - } - - /** - * Generates a random digit, which cannot be $except - */ - public function randomDigitNot($except): int - { - return $this->ext(Extension\NumberExtension::class)->randomDigitNot((int) $except); - } - - /** - * Returns a random number between 1 and 9 - */ - public function randomDigitNotZero(): int - { - return $this->ext(Extension\NumberExtension::class)->randomDigitNotZero(); - } - - /** - * Return a random float number - * - * @example 48.8932 - */ - public function randomFloat($nbMaxDecimals = null, $min = 0, $max = null): float - { - return $this->ext(Extension\NumberExtension::class)->randomFloat( - $nbMaxDecimals !== null ? (int) $nbMaxDecimals : null, - (float) $min, - $max !== null ? (float) $max : null, - ); - } - - /** - * Returns a random integer with 0 to $nbDigits digits. - * - * The maximum value returned is mt_getrandmax() - * - * @param int|null $nbDigits Defaults to a random number between 1 and 9 - * @param bool $strict Whether the returned number should have exactly $nbDigits - * - * @example 79907610 - */ - public function randomNumber($nbDigits = null, $strict = false): int - { - return $this->ext(Extension\NumberExtension::class)->randomNumber( - $nbDigits !== null ? (int) $nbDigits : null, - (bool) $strict, - ); - } - - /** - * Get a version number in semantic versioning syntax 2.0.0. (https://semver.org/spec/v2.0.0.html) - * - * @param bool $preRelease Pre release parts may be randomly included - * @param bool $build Build parts may be randomly included - * - * @example 1.0.0 - * @example 1.0.0-alpha.1 - * @example 1.0.0-alpha.1+b71f04d - */ - public function semver(bool $preRelease = false, bool $build = false): string - { - return $this->ext(Extension\VersionExtension::class)->semver($preRelease, $build); - } - - /** - * @deprecated - */ - protected function callFormatWithMatches($matches) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Protected method "callFormatWithMatches()" is deprecated and will be removed.'); - - return $this->format($matches[1]); - } - - /** - * @param string $attribute - * - * @deprecated Use a method instead. - */ - public function __get($attribute) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Accessing property "%s" is deprecated, use "%s()" instead.', $attribute, $attribute); - - return $this->format($attribute); - } - - /** - * @param string $method - * @param array $attributes - */ - public function __call($method, $attributes) - { - return $this->format($method, $attributes); - } - - public function __destruct() - { - $this->seed(); - } - - public function __wakeup() - { - $this->formatters = []; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Guesser/Name.php b/old_vendor/fakerphp/faker/src/Faker/Guesser/Name.php deleted file mode 100644 index ddb048bc..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Guesser/Name.php +++ /dev/null @@ -1,180 +0,0 @@ -generator = $generator; - } - - /** - * @param string $name - * @param int|null $size Length of field, if known - * - * @return callable|null - */ - public function guessFormat($name, $size = null) - { - $name = Base::toLower($name); - $generator = $this->generator; - - if (preg_match('/^is[_A-Z]/', $name)) { - return static function () use ($generator) { - return $generator->boolean; - }; - } - - if (preg_match('/(_a|A)t$/', $name)) { - return static function () use ($generator) { - return $generator->dateTime; - }; - } - - switch (str_replace('_', '', $name)) { - case 'firstname': - return static function () use ($generator) { - return $generator->firstName; - }; - - case 'lastname': - return static function () use ($generator) { - return $generator->lastName; - }; - - case 'username': - case 'login': - return static function () use ($generator) { - return $generator->userName; - }; - - case 'email': - case 'emailaddress': - return static function () use ($generator) { - return $generator->email; - }; - - case 'phonenumber': - case 'phone': - case 'telephone': - case 'telnumber': - return static function () use ($generator) { - return $generator->phoneNumber; - }; - - case 'address': - return static function () use ($generator) { - return $generator->address; - }; - - case 'city': - case 'town': - return static function () use ($generator) { - return $generator->city; - }; - - case 'streetaddress': - return static function () use ($generator) { - return $generator->streetAddress; - }; - - case 'postcode': - case 'zipcode': - return static function () use ($generator) { - return $generator->postcode; - }; - - case 'state': - return static function () use ($generator) { - return $generator->state; - }; - - case 'county': - if ($this->generator->locale == 'en_US') { - return static function () use ($generator) { - return sprintf('%s County', $generator->city); - }; - } - - return static function () use ($generator) { - return $generator->state; - }; - - case 'country': - switch ($size) { - case 2: - return static function () use ($generator) { - return $generator->countryCode; - }; - - case 3: - return static function () use ($generator) { - return $generator->countryISOAlpha3; - }; - - case 5: - case 6: - return static function () use ($generator) { - return $generator->locale; - }; - - default: - return static function () use ($generator) { - return $generator->country; - }; - } - - break; - - case 'locale': - return static function () use ($generator) { - return $generator->locale; - }; - - case 'currency': - case 'currencycode': - return static function () use ($generator) { - return $generator->currencyCode; - }; - - case 'url': - case 'website': - return static function () use ($generator) { - return $generator->url; - }; - - case 'company': - case 'companyname': - case 'employer': - return static function () use ($generator) { - return $generator->company; - }; - - case 'title': - if ($size !== null && $size <= 10) { - return static function () use ($generator) { - return $generator->title; - }; - } - - return static function () use ($generator) { - return $generator->sentence; - }; - - case 'body': - case 'summary': - case 'article': - case 'description': - return static function () use ($generator) { - return $generator->text; - }; - } - - return null; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php b/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php deleted file mode 100644 index c2a30e67..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php +++ /dev/null @@ -1,79 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat($column, $table) - { - $generator = $this->generator; - $schema = $table->schema(); - - switch ($schema->columnType($column)) { - case 'boolean': - return static function () use ($generator) { - return $generator->boolean; - }; - - case 'integer': - return static function () use ($generator) { - return $generator->numberBetween(0, 2147483647); - }; - - case 'biginteger': - return static function () use ($generator) { - return $generator->numberBetween(0, PHP_INT_MAX); - }; - - case 'decimal': - case 'float': - return static function () use ($generator) { - return $generator->randomFloat(); - }; - - case 'uuid': - return static function () use ($generator) { - return $generator->uuid(); - }; - - case 'string': - if (method_exists($schema, 'getColumn')) { - $columnData = $schema->getColumn($column); - } else { - $columnData = $schema->column($column); - } - $length = $columnData['length']; - - return static function () use ($generator, $length) { - return $generator->text($length); - }; - - case 'text': - return static function () use ($generator) { - return $generator->text(); - }; - - case 'date': - case 'datetime': - case 'timestamp': - case 'time': - return static function () use ($generator) { - return $generator->datetime(); - }; - - case 'binary': - default: - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php deleted file mode 100644 index cd9890bd..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php +++ /dev/null @@ -1,173 +0,0 @@ -class = $class; - } - - /** - * @param string $name - */ - public function __get($name) - { - return $this->{$name}; - } - - /** - * @param string $name - */ - public function __set($name, $value) - { - $this->{$name} = $value; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - public function mergeModifiersWith($modifiers) - { - $this->modifiers = array_merge($this->modifiers, $modifiers); - } - - /** - * @return array - */ - public function guessColumnFormatters($populator) - { - $formatters = []; - $class = $this->class; - $table = $this->getTable($class); - $schema = $table->schema(); - $pk = $schema->primaryKey(); - $guessers = $populator->getGuessers() + ['ColumnTypeGuesser' => new ColumnTypeGuesser($populator->getGenerator())]; - $isForeignKey = static function ($column) use ($table) { - foreach ($table->associations()->type('BelongsTo') as $assoc) { - if ($column == $assoc->foreignKey()) { - return true; - } - } - - return false; - }; - - foreach ($schema->columns() as $column) { - if ($column == $pk[0] || $isForeignKey($column)) { - continue; - } - - foreach ($guessers as $guesser) { - if ($formatter = $guesser->guessFormat($column, $table)) { - $formatters[$column] = $formatter; - - break; - } - } - } - - return $formatters; - } - - /** - * @return array - */ - public function guessModifiers() - { - $modifiers = []; - $table = $this->getTable($this->class); - - $belongsTo = $table->associations()->type('BelongsTo'); - - foreach ($belongsTo as $assoc) { - $modifiers['belongsTo' . $assoc->name()] = function ($data, $insertedEntities) use ($assoc) { - $table = $assoc->target(); - $foreignModel = $table->alias(); - - $foreignKeys = []; - - if (!empty($insertedEntities[$foreignModel])) { - $foreignKeys = $insertedEntities[$foreignModel]; - } else { - $foreignKeys = $table->find('all') - ->select(['id']) - ->map(static function ($row) { - return $row->id; - }) - ->toArray(); - } - - if (empty($foreignKeys)) { - throw new \Exception(sprintf('%s belongsTo %s, which seems empty at this point.', $this->getTable($this->class)->table(), $assoc->table())); - } - - $foreignKey = $foreignKeys[array_rand($foreignKeys)]; - $data[$assoc->foreignKey()] = $foreignKey; - - return $data; - }; - } - - // TODO check if TreeBehavior attached to modify lft/rgt cols - - return $modifiers; - } - - /** - * @param array $options - */ - public function execute($class, $insertedEntities, $options = []) - { - $table = $this->getTable($class); - $entity = $table->newEntity(); - - foreach ($this->columnFormatters as $column => $format) { - if (null !== $format) { - $entity->{$column} = is_callable($format) ? $format($insertedEntities, $table) : $format; - } - } - - foreach ($this->modifiers as $modifier) { - $entity = $modifier($entity, $insertedEntities); - } - - if (!$entity = $table->save($entity, $options)) { - throw new \RuntimeException("Failed saving $class record"); - } - - $pk = $table->primaryKey(); - - if (is_string($pk)) { - return $entity->{$pk}; - } - - return $entity->{$pk[0]}; - } - - public function setConnection($name) - { - $this->connectionName = $name; - } - - protected function getTable($class) - { - $options = []; - - if (!empty($this->connectionName)) { - $options['connection'] = $this->connectionName; - } - - return TableRegistry::get($class, $options); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php deleted file mode 100644 index ac195fbd..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php +++ /dev/null @@ -1,113 +0,0 @@ -generator = $generator; - } - - /** - * @return \Faker\Generator - */ - public function getGenerator() - { - return $this->generator; - } - - /** - * @return array - */ - public function getGuessers() - { - return $this->guessers; - } - - /** - * @return $this - */ - public function removeGuesser($name) - { - if ($this->guessers[$name]) { - unset($this->guessers[$name]); - } - - return $this; - } - - /** - * @throws \Exception - * - * @return $this - */ - public function addGuesser($class) - { - if (!is_object($class)) { - $class = new $class($this->generator); - } - - if (!method_exists($class, 'guessFormat')) { - throw new \Exception('Missing required custom guesser method: ' . get_class($class) . '::guessFormat()'); - } - - $this->guessers[get_class($class)] = $class; - - return $this; - } - - /** - * @param array $customColumnFormatters - * @param array $customModifiers - * - * @return $this - */ - public function addEntity($entity, $number, $customColumnFormatters = [], $customModifiers = []) - { - if (!$entity instanceof EntityPopulator) { - $entity = new EntityPopulator($entity); - } - - $entity->columnFormatters = $entity->guessColumnFormatters($this); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - - $entity->modifiers = $entity->guessModifiers($this); - - if ($customModifiers) { - $entity->mergeModifiersWith($customModifiers); - } - - $class = $entity->class; - $this->entities[$class] = $entity; - $this->quantities[$class] = $number; - - return $this; - } - - /** - * @param array $options - * - * @return array - */ - public function execute($options = []) - { - $insertedEntities = []; - - foreach ($this->quantities as $class => $number) { - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$class][] = $this->entities[$class]->execute($class, $insertedEntities, $options); - } - } - - return $insertedEntities; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php deleted file mode 100644 index 3267fe46..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php +++ /dev/null @@ -1,91 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat($fieldName, ClassMetadata $class) - { - $generator = $this->generator; - $type = $class->getTypeOfField($fieldName); - - switch ($type) { - case 'boolean': - return static function () use ($generator) { - return $generator->boolean; - }; - - case 'decimal': - $size = $class->fieldMappings[$fieldName]['precision'] ?? 2; - - return static function () use ($generator, $size) { - return $generator->randomNumber($size + 2) / 100; - }; - - case 'smallint': - return static function () use ($generator) { - return $generator->numberBetween(0, 65535); - }; - - case 'integer': - return static function () use ($generator) { - return $generator->numberBetween(0, 2147483647); - }; - - case 'bigint': - return static function () use ($generator) { - return $generator->numberBetween(0, PHP_INT_MAX); - }; - - case 'float': - return static function () use ($generator) { - return $generator->randomFloat(); - }; - - case 'string': - $size = $class->fieldMappings[$fieldName]['length'] ?? 255; - - return static function () use ($generator, $size) { - return $generator->text($size); - }; - - case 'text': - return static function () use ($generator) { - return $generator->text; - }; - - case 'datetime': - case 'date': - case 'time': - return static function () use ($generator) { - return $generator->datetime; - }; - - case 'datetime_immutable': - case 'date_immutable': - case 'time_immutable': - return static function () use ($generator) { - return \DateTimeImmutable::createFromMutable($generator->datetime); - }; - - default: - // no smart way to guess what the user expects here - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php deleted file mode 100644 index 47923999..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php +++ /dev/null @@ -1,248 +0,0 @@ -class = $class; - } - - /** - * @return string - */ - public function getClass() - { - return $this->class->getName(); - } - - public function setColumnFormatters($columnFormatters) - { - $this->columnFormatters = $columnFormatters; - } - - /** - * @return array - */ - public function getColumnFormatters() - { - return $this->columnFormatters; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - public function setModifiers(array $modifiers) - { - $this->modifiers = $modifiers; - } - - /** - * @return array - */ - public function getModifiers() - { - return $this->modifiers; - } - - public function mergeModifiersWith(array $modifiers) - { - $this->modifiers = array_merge($this->modifiers, $modifiers); - } - - /** - * @return array - */ - public function guessColumnFormatters(\Faker\Generator $generator) - { - $formatters = []; - $nameGuesser = new \Faker\Guesser\Name($generator); - $columnTypeGuesser = new ColumnTypeGuesser($generator); - - foreach ($this->class->getFieldNames() as $fieldName) { - if ($this->class->isIdentifier($fieldName) || !$this->class->hasField($fieldName)) { - continue; - } - - $size = $this->class->fieldMappings[$fieldName]['length'] ?? null; - - if ($formatter = $nameGuesser->guessFormat($fieldName, $size)) { - $formatters[$fieldName] = $formatter; - - continue; - } - - if ($formatter = $columnTypeGuesser->guessFormat($fieldName, $this->class)) { - $formatters[$fieldName] = $formatter; - - continue; - } - } - - foreach ($this->class->getAssociationNames() as $assocName) { - if ($this->class->isCollectionValuedAssociation($assocName)) { - continue; - } - - $relatedClass = $this->class->getAssociationTargetClass($assocName); - - $unique = $optional = false; - - if ($this->class instanceof \Doctrine\ORM\Mapping\ClassMetadata) { - $mappings = $this->class->getAssociationMappings(); - - foreach ($mappings as $mapping) { - if ($mapping['targetEntity'] == $relatedClass) { - if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_ONE) { - $unique = true; - $optional = $mapping['joinColumns'][0]['nullable'] ?? false; - - break; - } - } - } - } elseif ($this->class instanceof \Doctrine\ODM\MongoDB\Mapping\ClassMetadata) { - $mappings = $this->class->associationMappings; - - foreach ($mappings as $mapping) { - if ($mapping['targetDocument'] == $relatedClass) { - if ($mapping['type'] == \Doctrine\ODM\MongoDB\Mapping\ClassMetadata::ONE && $mapping['association'] == \Doctrine\ODM\MongoDB\Mapping\ClassMetadata::REFERENCE_ONE) { - $unique = true; - $optional = $mapping['nullable'] ?? false; - - break; - } - } - } - } - - $index = 0; - $formatters[$assocName] = static function ($inserted) use ($relatedClass, &$index, $unique, $optional, $generator) { - if (isset($inserted[$relatedClass])) { - if ($unique) { - $related = null; - - if (isset($inserted[$relatedClass][$index]) || !$optional) { - $related = $inserted[$relatedClass][$index]; - } - - ++$index; - - return $related; - } - - return $generator->randomElement($inserted[$relatedClass]); - } - - return null; - }; - } - - return $formatters; - } - - /** - * Insert one new record using the Entity class. - * - * @param bool $generateId - * - * @return EntityPopulator - */ - public function execute(ObjectManager $manager, $insertedEntities, $generateId = false) - { - $obj = $this->class->newInstance(); - - $this->fillColumns($obj, $insertedEntities); - $this->callMethods($obj, $insertedEntities); - - if ($generateId) { - $idsName = $this->class->getIdentifier(); - - foreach ($idsName as $idName) { - $id = $this->generateId($obj, $idName, $manager); - $this->class->reflFields[$idName]->setValue($obj, $id); - } - } - - $manager->persist($obj); - - return $obj; - } - - private function fillColumns($obj, $insertedEntities): void - { - foreach ($this->columnFormatters as $field => $format) { - if (null !== $format) { - // Add some extended debugging information to any errors thrown by the formatter - try { - $value = is_callable($format) ? $format($insertedEntities, $obj) : $format; - } catch (\InvalidArgumentException $ex) { - throw new \InvalidArgumentException(sprintf( - 'Failed to generate a value for %s::%s: %s', - get_class($obj), - $field, - $ex->getMessage(), - )); - } - // Try a standard setter if it's available, otherwise fall back on reflection - $setter = sprintf('set%s', ucfirst($field)); - - if (is_callable([$obj, $setter])) { - $obj->$setter($value); - } else { - $this->class->reflFields[$field]->setValue($obj, $value); - } - } - } - } - - private function callMethods($obj, $insertedEntities): void - { - foreach ($this->getModifiers() as $modifier) { - $modifier($obj, $insertedEntities); - } - } - - /** - * @return int - */ - private function generateId($obj, $column, ObjectManager $manager) - { - $repository = $manager->getRepository(get_class($obj)); - $result = $repository->createQueryBuilder('e') - ->select(sprintf('e.%s', $column)) - ->getQuery() - ->execute(); - $ids = array_map('current', $result->toArray()); - - do { - $id = mt_rand(); - } while (in_array($id, $ids, false)); - - return $id; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php deleted file mode 100644 index 1bce6ab4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php +++ /dev/null @@ -1,126 +0,0 @@ -generator = $generator; - $this->manager = $manager; - $this->batchSize = $batchSize; - } - - /** - * Add an order for the generation of $number records for $entity. - * - * @param mixed $entity A Doctrine classname, or a \Faker\ORM\Doctrine\EntityPopulator instance - * @param int $number The number of entities to populate - */ - public function addEntity($entity, $number, $customColumnFormatters = [], $customModifiers = [], $generateId = false) - { - if (!$entity instanceof \Faker\ORM\Doctrine\EntityPopulator) { - if (null === $this->manager) { - throw new \InvalidArgumentException('No entity manager passed to Doctrine Populator.'); - } - $entity = new \Faker\ORM\Doctrine\EntityPopulator($this->manager->getClassMetadata($entity)); - } - $entity->setColumnFormatters($entity->guessColumnFormatters($this->generator)); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - $entity->mergeModifiersWith($customModifiers); - $this->generateId[$entity->getClass()] = $generateId; - - $class = $entity->getClass(); - $this->entities[$class] = $entity; - $this->quantities[$class] = $number; - } - - /** - * Populate the database using all the Entity classes previously added. - * - * Please note that large amounts of data will result in more memory usage since the the Populator will return - * all newly created primary keys after executing. - * - * @param ObjectManager|null $entityManager A Doctrine connection object - * - * @return array A list of the inserted PKs - */ - public function execute($entityManager = null) - { - if (null === $entityManager) { - $entityManager = $this->manager; - } - - if (null === $entityManager) { - throw new \InvalidArgumentException('No entity manager passed to Doctrine Populator.'); - } - - $insertedEntities = []; - - foreach ($this->quantities as $class => $number) { - $generateId = $this->generateId[$class]; - - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$class][] = $this->entities[$class]->execute( - $entityManager, - $insertedEntities, - $generateId, - ); - - if (count($insertedEntities) % $this->batchSize === 0) { - $entityManager->flush(); - } - } - $entityManager->flush(); - } - - return $insertedEntities; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/backward-compatibility.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/backward-compatibility.php deleted file mode 100644 index 6f545f87..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Doctrine/backward-compatibility.php +++ /dev/null @@ -1,11 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat($field) - { - $generator = $this->generator; - - switch ($field['type']) { - case 'boolean': - return static function () use ($generator) { - return $generator->boolean; - }; - - case 'integer': - return static function () use ($generator) { - return $generator->numberBetween(0, 4294967295); - }; - - case 'float': - return static function () use ($generator) { - return $generator->randomFloat(); - }; - - case 'string': - return static function () use ($generator) { - return $generator->text(255); - }; - - case 'date': - return static function () use ($generator) { - return $generator->dateTime; - }; - - default: - // no smart way to guess what the user expects here - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php deleted file mode 100644 index 515ab7b6..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php +++ /dev/null @@ -1,123 +0,0 @@ -class = $class; - } - - /** - * @return string - */ - public function getClass() - { - return $this->class; - } - - public function setColumnFormatters($columnFormatters) - { - $this->columnFormatters = $columnFormatters; - } - - /** - * @return array - */ - public function getColumnFormatters() - { - return $this->columnFormatters; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - /** - * @return array - */ - public function guessColumnFormatters(\Faker\Generator $generator, Mandango $mandango) - { - $formatters = []; - $nameGuesser = new \Faker\Guesser\Name($generator); - $columnTypeGuesser = new \Faker\ORM\Mandango\ColumnTypeGuesser($generator); - - $metadata = $mandango->getMetadata($this->class); - - // fields - foreach ($metadata['fields'] as $fieldName => $field) { - if ($formatter = $nameGuesser->guessFormat($fieldName)) { - $formatters[$fieldName] = $formatter; - - continue; - } - - if ($formatter = $columnTypeGuesser->guessFormat($field)) { - $formatters[$fieldName] = $formatter; - - continue; - } - } - - // references - foreach (array_merge($metadata['referencesOne'], $metadata['referencesMany']) as $referenceName => $reference) { - if (!isset($reference['class'])) { - continue; - } - $referenceClass = $reference['class']; - - $formatters[$referenceName] = static function ($insertedEntities) use ($referenceClass) { - if (isset($insertedEntities[$referenceClass])) { - return Base::randomElement($insertedEntities[$referenceClass]); - } - - return null; - }; - } - - return $formatters; - } - - /** - * Insert one new record using the Entity class. - */ - public function execute(Mandango $mandango, $insertedEntities) - { - $metadata = $mandango->getMetadata($this->class); - - $obj = $mandango->create($this->class); - - foreach ($this->columnFormatters as $column => $format) { - if (null !== $format) { - $value = is_callable($format) ? $format($insertedEntities, $obj) : $format; - - if (isset($metadata['fields'][$column]) - || isset($metadata['referencesOne'][$column])) { - $obj->set($column, $value); - } - - if (isset($metadata['referencesMany'][$column])) { - $adder = 'add' . ucfirst($column); - $obj->$adder($value); - } - } - } - $mandango->persist($obj); - - return $obj; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php deleted file mode 100644 index de6c3b81..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php +++ /dev/null @@ -1,63 +0,0 @@ -generator = $generator; - $this->mandango = $mandango; - } - - /** - * Add an order for the generation of $number records for $entity. - * - * @param mixed $entity A Propel ActiveRecord classname, or a \Faker\ORM\Propel\EntityPopulator instance - * @param int $number The number of entities to populate - */ - public function addEntity($entity, $number, $customColumnFormatters = []) - { - if (!$entity instanceof \Faker\ORM\Mandango\EntityPopulator) { - $entity = new \Faker\ORM\Mandango\EntityPopulator($entity); - } - $entity->setColumnFormatters($entity->guessColumnFormatters($this->generator, $this->mandango)); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - $class = $entity->getClass(); - $this->entities[$class] = $entity; - $this->quantities[$class] = $number; - } - - /** - * Populate the database using all the Entity classes previously added. - * - * @return array A list of the inserted entities. - */ - public function execute() - { - $insertedEntities = []; - - foreach ($this->quantities as $class => $number) { - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$class][] = $this->entities[$class]->execute($this->mandango, $insertedEntities); - } - } - $this->mandango->flush(); - - return $insertedEntities; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php deleted file mode 100644 index 3d8a9a11..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php +++ /dev/null @@ -1,109 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat(\ColumnMap $column) - { - $generator = $this->generator; - - if ($column->isTemporal()) { - if ($column->isEpochTemporal()) { - return static function () use ($generator) { - return $generator->dateTime; - }; - } - - return static function () use ($generator) { - return $generator->dateTimeAD; - }; - } - $type = $column->getType(); - - switch ($type) { - case \PropelColumnTypes::BOOLEAN: - case \PropelColumnTypes::BOOLEAN_EMU: - return static function () use ($generator) { - return $generator->boolean; - }; - - case \PropelColumnTypes::NUMERIC: - case \PropelColumnTypes::DECIMAL: - $size = $column->getSize(); - - return static function () use ($generator, $size) { - return $generator->randomNumber($size + 2) / 100; - }; - - case \PropelColumnTypes::TINYINT: - return static function () use ($generator) { - return $generator->numberBetween(0, 127); - }; - - case \PropelColumnTypes::SMALLINT: - return static function () use ($generator) { - return $generator->numberBetween(0, 32767); - }; - - case \PropelColumnTypes::INTEGER: - return static function () use ($generator) { - return $generator->numberBetween(0, 2147483647); - }; - - case \PropelColumnTypes::BIGINT: - return static function () use ($generator) { - return $generator->numberBetween(0, PHP_INT_MAX); - }; - - case \PropelColumnTypes::FLOAT: - case \PropelColumnTypes::DOUBLE: - case \PropelColumnTypes::REAL: - return static function () use ($generator) { - return $generator->randomFloat(); - }; - - case \PropelColumnTypes::CHAR: - case \PropelColumnTypes::VARCHAR: - case \PropelColumnTypes::BINARY: - case \PropelColumnTypes::VARBINARY: - $size = $column->getSize(); - - return static function () use ($generator, $size) { - return $generator->text($size); - }; - - case \PropelColumnTypes::LONGVARCHAR: - case \PropelColumnTypes::LONGVARBINARY: - case \PropelColumnTypes::CLOB: - case \PropelColumnTypes::CLOB_EMU: - case \PropelColumnTypes::BLOB: - return static function () use ($generator) { - return $generator->text; - }; - - case \PropelColumnTypes::ENUM: - $valueSet = $column->getValueSet(); - - return static function () use ($generator, $valueSet) { - return $generator->randomElement($valueSet); - }; - - case \PropelColumnTypes::OBJECT: - case \PropelColumnTypes::PHP_ARRAY: - default: - // no smart way to guess what the user expects here - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php deleted file mode 100644 index f5af75c9..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php +++ /dev/null @@ -1,204 +0,0 @@ -class = $class; - } - - /** - * @return string - */ - public function getClass() - { - return $this->class; - } - - public function setColumnFormatters($columnFormatters) - { - $this->columnFormatters = $columnFormatters; - } - - /** - * @return array - */ - public function getColumnFormatters() - { - return $this->columnFormatters; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - /** - * @return array - */ - public function guessColumnFormatters(\Faker\Generator $generator) - { - $formatters = []; - $class = $this->class; - $peerClass = $class::PEER; - $tableMap = $peerClass::getTableMap(); - $nameGuesser = new \Faker\Guesser\Name($generator); - $columnTypeGuesser = new \Faker\ORM\Propel\ColumnTypeGuesser($generator); - - foreach ($tableMap->getColumns() as $columnMap) { - // skip behavior columns, handled by modifiers - if ($this->isColumnBehavior($columnMap)) { - continue; - } - - if ($columnMap->isForeignKey()) { - $relatedClass = $columnMap->getRelation()->getForeignTable()->getClassname(); - $formatters[$columnMap->getPhpName()] = static function ($inserted) use ($relatedClass, $generator) { - return isset($inserted[$relatedClass]) ? $generator->randomElement($inserted[$relatedClass]) : null; - }; - - continue; - } - - if ($columnMap->isPrimaryKey()) { - continue; - } - - if ($formatter = $nameGuesser->guessFormat($columnMap->getPhpName(), $columnMap->getSize())) { - $formatters[$columnMap->getPhpName()] = $formatter; - - continue; - } - - if ($formatter = $columnTypeGuesser->guessFormat($columnMap)) { - $formatters[$columnMap->getPhpName()] = $formatter; - - continue; - } - } - - return $formatters; - } - - /** - * @return bool - */ - protected function isColumnBehavior(\ColumnMap $columnMap) - { - foreach ($columnMap->getTable()->getBehaviors() as $name => $params) { - $columnName = Base::toLower($columnMap->getName()); - - switch ($name) { - case 'nested_set': - $columnNames = [$params['left_column'], $params['right_column'], $params['level_column']]; - - if (in_array($columnName, $columnNames, false)) { - return true; - } - - break; - - case 'timestampable': - $columnNames = [$params['create_column'], $params['update_column']]; - - if (in_array($columnName, $columnNames, false)) { - return true; - } - - break; - } - } - - return false; - } - - public function setModifiers($modifiers) - { - $this->modifiers = $modifiers; - } - - /** - * @return array - */ - public function getModifiers() - { - return $this->modifiers; - } - - public function mergeModifiersWith($modifiers) - { - $this->modifiers = array_merge($this->modifiers, $modifiers); - } - - /** - * @return array - */ - public function guessModifiers(\Faker\Generator $generator) - { - $modifiers = []; - $class = $this->class; - $peerClass = $class::PEER; - $tableMap = $peerClass::getTableMap(); - - foreach ($tableMap->getBehaviors() as $name => $params) { - switch ($name) { - case 'nested_set': - $modifiers['nested_set'] = static function ($obj, $inserted) use ($class, $generator): void { - if (isset($inserted[$class])) { - $queryClass = $class . 'Query'; - $parent = $queryClass::create()->findPk($generator->randomElement($inserted[$class])); - $obj->insertAsLastChildOf($parent); - } else { - $obj->makeRoot(); - } - }; - - break; - - case 'sortable': - $modifiers['sortable'] = static function ($obj, $inserted) use ($class, $generator): void { - $obj->insertAtRank($generator->numberBetween(1, count($inserted[$class] ?? []) + 1)); - }; - - break; - } - } - - return $modifiers; - } - - /** - * Insert one new record using the Entity class. - */ - public function execute($con, $insertedEntities) - { - $obj = new $this->class(); - - foreach ($this->getColumnFormatters() as $column => $format) { - if (null !== $format) { - $obj->setByName($column, is_callable($format) ? $format($insertedEntities, $obj) : $format); - } - } - - foreach ($this->getModifiers() as $modifier) { - $modifier($obj, $insertedEntities); - } - $obj->save($con); - - return $obj->getPrimaryKey(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/Populator.php deleted file mode 100644 index e3d42981..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel/Populator.php +++ /dev/null @@ -1,90 +0,0 @@ -generator = $generator; - } - - /** - * Add an order for the generation of $number records for $entity. - * - * @param mixed $entity A Propel ActiveRecord classname, or a \Faker\ORM\Propel\EntityPopulator instance - * @param int $number The number of entities to populate - */ - public function addEntity($entity, $number, $customColumnFormatters = [], $customModifiers = []) - { - if (!$entity instanceof \Faker\ORM\Propel\EntityPopulator) { - $entity = new \Faker\ORM\Propel\EntityPopulator($entity); - } - $entity->setColumnFormatters($entity->guessColumnFormatters($this->generator)); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - $entity->setModifiers($entity->guessModifiers($this->generator)); - - if ($customModifiers) { - $entity->mergeModifiersWith($customModifiers); - } - $class = $entity->getClass(); - $this->entities[$class] = $entity; - $this->quantities[$class] = $number; - } - - /** - * Populate the database using all the Entity classes previously added. - * - * @param PropelPDO $con A Propel connection object - * - * @return array A list of the inserted PKs - */ - public function execute($con = null) - { - if (null === $con) { - $con = $this->getConnection(); - } - $isInstancePoolingEnabled = \Propel::isInstancePoolingEnabled(); - \Propel::disableInstancePooling(); - $insertedEntities = []; - $con->beginTransaction(); - - foreach ($this->quantities as $class => $number) { - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$class][] = $this->entities[$class]->execute($con, $insertedEntities); - } - } - $con->commit(); - - if ($isInstancePoolingEnabled) { - \Propel::enableInstancePooling(); - } - - return $insertedEntities; - } - - protected function getConnection() - { - // use the first connection available - $class = key($this->entities); - - if (!$class) { - throw new \RuntimeException('No class found from entities. Did you add entities to the Populator ?'); - } - - $peer = $class::PEER; - - return \Propel::getConnection($peer::DATABASE_NAME, \Propel::CONNECTION_WRITE); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php deleted file mode 100644 index 4c08e0ad..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php +++ /dev/null @@ -1,112 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat(ColumnMap $column) - { - $generator = $this->generator; - - if ($column->isTemporal()) { - if ($column->getType() == PropelTypes::BU_DATE || $column->getType() == PropelTypes::BU_TIMESTAMP) { - return static function () use ($generator) { - return $generator->dateTime; - }; - } - - return static function () use ($generator) { - return $generator->dateTimeAD; - }; - } - $type = $column->getType(); - - switch ($type) { - case PropelTypes::BOOLEAN: - case PropelTypes::BOOLEAN_EMU: - return static function () use ($generator) { - return $generator->boolean; - }; - - case PropelTypes::NUMERIC: - case PropelTypes::DECIMAL: - $size = $column->getSize(); - - return static function () use ($generator, $size) { - return $generator->randomNumber($size + 2) / 100; - }; - - case PropelTypes::TINYINT: - return static function () use ($generator) { - return $generator->numberBetween(0, 127); - }; - - case PropelTypes::SMALLINT: - return static function () use ($generator) { - return $generator->numberBetween(0, 32767); - }; - - case PropelTypes::INTEGER: - return static function () use ($generator) { - return $generator->numberBetween(0, 2147483647); - }; - - case PropelTypes::BIGINT: - return static function () use ($generator) { - return $generator->numberBetween(0, PHP_INT_MAX); - }; - - case PropelTypes::FLOAT: - case PropelTypes::DOUBLE: - case PropelTypes::REAL: - return static function () use ($generator) { - return $generator->randomFloat(); - }; - - case PropelTypes::CHAR: - case PropelTypes::VARCHAR: - case PropelTypes::BINARY: - case PropelTypes::VARBINARY: - $size = $column->getSize(); - - return static function () use ($generator, $size) { - return $generator->text($size); - }; - - case PropelTypes::LONGVARCHAR: - case PropelTypes::LONGVARBINARY: - case PropelTypes::CLOB: - case PropelTypes::CLOB_EMU: - case PropelTypes::BLOB: - return static function () use ($generator) { - return $generator->text; - }; - - case PropelTypes::ENUM: - $valueSet = $column->getValueSet(); - - return static function () use ($generator, $valueSet) { - return $generator->randomElement($valueSet); - }; - - case PropelTypes::OBJECT: - case PropelTypes::PHP_ARRAY: - default: - // no smart way to guess what the user expects here - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php deleted file mode 100644 index 44804e37..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php +++ /dev/null @@ -1,207 +0,0 @@ -class = $class; - } - - /** - * @return string - */ - public function getClass() - { - return $this->class; - } - - public function setColumnFormatters($columnFormatters) - { - $this->columnFormatters = $columnFormatters; - } - - /** - * @return array - */ - public function getColumnFormatters() - { - return $this->columnFormatters; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - /** - * @return array - */ - public function guessColumnFormatters(\Faker\Generator $generator) - { - $formatters = []; - $class = $this->class; - $peerClass = $class::TABLE_MAP; - $tableMap = $peerClass::getTableMap(); - $nameGuesser = new \Faker\Guesser\Name($generator); - $columnTypeGuesser = new \Faker\ORM\Propel2\ColumnTypeGuesser($generator); - - foreach ($tableMap->getColumns() as $columnMap) { - // skip behavior columns, handled by modifiers - if ($this->isColumnBehavior($columnMap)) { - continue; - } - - if ($columnMap->isForeignKey()) { - $relatedClass = $columnMap->getRelation()->getForeignTable()->getClassname(); - $formatters[$columnMap->getPhpName()] = static function ($inserted) use ($relatedClass, $generator) { - $relatedClass = trim($relatedClass, '\\'); - - return isset($inserted[$relatedClass]) ? $generator->randomElement($inserted[$relatedClass]) : null; - }; - - continue; - } - - if ($columnMap->isPrimaryKey()) { - continue; - } - - if ($formatter = $nameGuesser->guessFormat($columnMap->getPhpName(), $columnMap->getSize())) { - $formatters[$columnMap->getPhpName()] = $formatter; - - continue; - } - - if ($formatter = $columnTypeGuesser->guessFormat($columnMap)) { - $formatters[$columnMap->getPhpName()] = $formatter; - - continue; - } - } - - return $formatters; - } - - /** - * @return bool - */ - protected function isColumnBehavior(ColumnMap $columnMap) - { - foreach ($columnMap->getTable()->getBehaviors() as $name => $params) { - $columnName = Base::toLower($columnMap->getName()); - - switch ($name) { - case 'nested_set': - $columnNames = [$params['left_column'], $params['right_column'], $params['level_column']]; - - if (in_array($columnName, $columnNames, false)) { - return true; - } - - break; - - case 'timestampable': - $columnNames = [$params['create_column'], $params['update_column']]; - - if (in_array($columnName, $columnNames, false)) { - return true; - } - - break; - } - } - - return false; - } - - public function setModifiers($modifiers) - { - $this->modifiers = $modifiers; - } - - /** - * @return array - */ - public function getModifiers() - { - return $this->modifiers; - } - - public function mergeModifiersWith($modifiers) - { - $this->modifiers = array_merge($this->modifiers, $modifiers); - } - - /** - * @return array - */ - public function guessModifiers(\Faker\Generator $generator) - { - $modifiers = []; - $class = $this->class; - $peerClass = $class::TABLE_MAP; - $tableMap = $peerClass::getTableMap(); - - foreach ($tableMap->getBehaviors() as $name => $params) { - switch ($name) { - case 'nested_set': - $modifiers['nested_set'] = static function ($obj, $inserted) use ($class, $generator): void { - if (isset($inserted[$class])) { - $queryClass = $class . 'Query'; - $parent = $queryClass::create()->findPk($generator->randomElement($inserted[$class])); - $obj->insertAsLastChildOf($parent); - } else { - $obj->makeRoot(); - } - }; - - break; - - case 'sortable': - $modifiers['sortable'] = static function ($obj, $inserted) use ($class, $generator): void { - $obj->insertAtRank($generator->numberBetween(1, count($inserted[$class] ?? []) + 1)); - }; - - break; - } - } - - return $modifiers; - } - - /** - * Insert one new record using the Entity class. - */ - public function execute($con, $insertedEntities) - { - $obj = new $this->class(); - - foreach ($this->getColumnFormatters() as $column => $format) { - if (null !== $format) { - $obj->setByName($column, is_callable($format) ? $format($insertedEntities, $obj) : $format); - } - } - - foreach ($this->getModifiers() as $modifier) { - $modifier($obj, $insertedEntities); - } - $obj->save($con); - - return $obj->getPrimaryKey(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php deleted file mode 100644 index 7698f80e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php +++ /dev/null @@ -1,93 +0,0 @@ -generator = $generator; - } - - /** - * Add an order for the generation of $number records for $entity. - * - * @param mixed $entity A Propel ActiveRecord classname, or a \Faker\ORM\Propel2\EntityPopulator instance - * @param int $number The number of entities to populate - */ - public function addEntity($entity, $number, $customColumnFormatters = [], $customModifiers = []) - { - if (!$entity instanceof \Faker\ORM\Propel2\EntityPopulator) { - $entity = new \Faker\ORM\Propel2\EntityPopulator($entity); - } - $entity->setColumnFormatters($entity->guessColumnFormatters($this->generator)); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - $entity->setModifiers($entity->guessModifiers($this->generator)); - - if ($customModifiers) { - $entity->mergeModifiersWith($customModifiers); - } - $class = $entity->getClass(); - $this->entities[$class] = $entity; - $this->quantities[$class] = $number; - } - - /** - * Populate the database using all the Entity classes previously added. - * - * @param PropelPDO $con A Propel connection object - * - * @return array A list of the inserted PKs - */ - public function execute($con = null) - { - if (null === $con) { - $con = $this->getConnection(); - } - $isInstancePoolingEnabled = Propel::isInstancePoolingEnabled(); - Propel::disableInstancePooling(); - $insertedEntities = []; - $con->beginTransaction(); - - foreach ($this->quantities as $class => $number) { - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$class][] = $this->entities[$class]->execute($con, $insertedEntities); - } - } - $con->commit(); - - if ($isInstancePoolingEnabled) { - Propel::enableInstancePooling(); - } - - return $insertedEntities; - } - - protected function getConnection() - { - // use the first connection available - $class = key($this->entities); - - if (!$class) { - throw new \RuntimeException('No class found from entities. Did you add entities to the Populator ?'); - } - - $peer = $class::TABLE_MAP; - - return Propel::getConnection($peer::DATABASE_NAME, ServiceContainerInterface::CONNECTION_WRITE); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php deleted file mode 100644 index f06ba048..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php +++ /dev/null @@ -1,84 +0,0 @@ -generator = $generator; - } - - /** - * @return \Closure|null - */ - public function guessFormat(array $field) - { - $generator = $this->generator; - $type = $field['type']; - - switch ($type) { - case 'boolean': - return static function () use ($generator) { - return $generator->boolean; - }; - - case 'decimal': - $size = $field['precision'] ?? 2; - - return static function () use ($generator, $size) { - return $generator->randomNumber($size + 2) / 100; - }; - - case 'smallint': - return static function () use ($generator) { - return $generator->numberBetween(0, 65535); - }; - - case 'integer': - return static function () use ($generator) { - return $generator->numberBetween(0, 2147483647); - }; - - case 'bigint': - return static function () use ($generator) { - return $generator->numberBetween(0, PHP_INT_MAX); - }; - - case 'float': - return static function () use ($generator) { - return $generator->randomFloat(null, 0, 4294967295); - }; - - case 'string': - $size = $field['length'] ?? 255; - - return static function () use ($generator, $size) { - return $generator->text($size); - }; - - case 'text': - return static function () use ($generator) { - return $generator->text; - }; - - case 'datetime': - case 'date': - case 'time': - return static function () use ($generator) { - return $generator->datetime; - }; - - default: - // no smart way to guess what the user expects here - return null; - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php deleted file mode 100644 index b67ae253..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php +++ /dev/null @@ -1,199 +0,0 @@ -mapper = $mapper; - $this->locator = $locator; - $this->useExistingData = $useExistingData; - } - - /** - * @return string - */ - public function getMapper() - { - return $this->mapper; - } - - public function setColumnFormatters($columnFormatters) - { - $this->columnFormatters = $columnFormatters; - } - - /** - * @return array - */ - public function getColumnFormatters() - { - return $this->columnFormatters; - } - - public function mergeColumnFormattersWith($columnFormatters) - { - $this->columnFormatters = array_merge($this->columnFormatters, $columnFormatters); - } - - public function setModifiers(array $modifiers) - { - $this->modifiers = $modifiers; - } - - /** - * @return array - */ - public function getModifiers() - { - return $this->modifiers; - } - - public function mergeModifiersWith(array $modifiers) - { - $this->modifiers = array_merge($this->modifiers, $modifiers); - } - - /** - * @return array - */ - public function guessColumnFormatters(Generator $generator) - { - $formatters = []; - $nameGuesser = new Name($generator); - $columnTypeGuesser = new ColumnTypeGuesser($generator); - $fields = $this->mapper->fields(); - - foreach ($fields as $fieldName => $field) { - if ($field['primary'] === true) { - continue; - } - - if ($formatter = $nameGuesser->guessFormat($fieldName)) { - $formatters[$fieldName] = $formatter; - - continue; - } - - if ($formatter = $columnTypeGuesser->guessFormat($field)) { - $formatters[$fieldName] = $formatter; - - continue; - } - } - $entityName = $this->mapper->entity(); - $entity = $this->mapper->build([]); - $relations = $entityName::relations($this->mapper, $entity); - - foreach ($relations as $relation) { - // We don't need any other relation here. - if ($relation instanceof BelongsTo) { - $fieldName = $relation->localKey(); - $entityName = $relation->entityName(); - $field = $fields[$fieldName]; - $required = $field['required']; - - $locator = $this->locator; - - $formatters[$fieldName] = function ($inserted) use ($required, $entityName, $locator, $generator) { - if (!empty($inserted[$entityName])) { - return $generator->randomElement($inserted[$entityName])->get('id'); - } - - if ($required && $this->useExistingData) { - // We did not add anything like this, but it's required, - // So let's find something existing in DB. - $mapper = $locator->mapper($entityName); - $records = $mapper->all()->limit(self::RELATED_FETCH_COUNT)->toArray(); - - if (empty($records)) { - return null; - } - - return $generator->randomElement($records)['id']; - } - - return null; - }; - } - } - - return $formatters; - } - - /** - * Insert one new record using the Entity class. - * - * @return string - */ - public function execute($insertedEntities) - { - $obj = $this->mapper->build([]); - - $this->fillColumns($obj, $insertedEntities); - $this->callMethods($obj, $insertedEntities); - - $this->mapper->insert($obj); - - return $obj; - } - - private function fillColumns($obj, $insertedEntities): void - { - foreach ($this->columnFormatters as $field => $format) { - if (null !== $format) { - $value = is_callable($format) ? $format($insertedEntities, $obj) : $format; - $obj->set($field, $value); - } - } - } - - private function callMethods($obj, $insertedEntities): void - { - foreach ($this->getModifiers() as $modifier) { - $modifier($obj, $insertedEntities); - } - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/Populator.php b/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/Populator.php deleted file mode 100644 index b321f5c5..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ORM/Spot/Populator.php +++ /dev/null @@ -1,89 +0,0 @@ -generator = $generator; - $this->locator = $locator; - } - - /** - * Add an order for the generation of $number records for $entity. - * - * @param string $entityName Name of Entity object to generate - * @param int $number The number of entities to populate - * @param array $customColumnFormatters - * @param array $customModifiers - * @param bool $useExistingData Should we use existing rows (e.g. roles) to populate relations? - */ - public function addEntity( - $entityName, - $number, - $customColumnFormatters = [], - $customModifiers = [], - $useExistingData = false - ) { - $mapper = $this->locator->mapper($entityName); - - if (null === $mapper) { - throw new \InvalidArgumentException('No mapper can be found for entity ' . $entityName); - } - $entity = new EntityPopulator($mapper, $this->locator, $useExistingData); - - $entity->setColumnFormatters($entity->guessColumnFormatters($this->generator)); - - if ($customColumnFormatters) { - $entity->mergeColumnFormattersWith($customColumnFormatters); - } - $entity->mergeModifiersWith($customModifiers); - - $this->entities[$entityName] = $entity; - $this->quantities[$entityName] = $number; - } - - /** - * Populate the database using all the Entity classes previously added. - * - * @param Locator $locator A Spot locator - * - * @return array A list of the inserted PKs - */ - public function execute($locator = null) - { - if (null === $locator) { - $locator = $this->locator; - } - - if (null === $locator) { - throw new \InvalidArgumentException('No entity manager passed to Spot Populator.'); - } - - $insertedEntities = []; - - foreach ($this->quantities as $entityName => $number) { - for ($i = 0; $i < $number; ++$i) { - $insertedEntities[$entityName][] = $this->entities[$entityName]->execute( - $insertedEntities, - ); - } - } - - return $insertedEntities; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Address.php deleted file mode 100644 index 9727497b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Address.php +++ /dev/null @@ -1,166 +0,0 @@ -generator->parse($format); - } - - /** - * @example 'Crist Parks' - * - * @return string - */ - public function streetName() - { - $format = static::randomElement(static::$streetNameFormats); - - return $this->generator->parse($format); - } - - /** - * @example '791 Crist Parks' - * - * @return string - */ - public function streetAddress() - { - $format = static::randomElement(static::$streetAddressFormats); - - return $this->generator->parse($format); - } - - /** - * @example 86039-9874 - * - * @return string - */ - public static function postcode() - { - return static::toUpper(static::bothify(static::randomElement(static::$postcode))); - } - - /** - * @example '791 Crist Parks, Sashabury, IL 86039-9874' - * - * @return string - */ - public function address() - { - $format = static::randomElement(static::$addressFormats); - - return $this->generator->parse($format); - } - - /** - * @example 'Japan' - * - * @return string - */ - public static function country() - { - return static::randomElement(static::$country); - } - - /** - * Uses signed degrees format (returns a float number between -90 and 90) - * - * @example '77.147489' - * - * @param float|int $min - * @param float|int $max - * - * @return float - */ - public static function latitude($min = -90, $max = 90) - { - return static::randomFloat(6, $min, $max); - } - - /** - * Uses signed degrees format (returns a float number between -180 and 180) - * - * @example '86.211205' - * - * @param float|int $min - * @param float|int $max - * - * @return float - */ - public static function longitude($min = -180, $max = 180) - { - return static::randomFloat(6, $min, $max); - } - - /** - * @example array('77.147489', '86.211205') - * - * @return float[] - */ - public static function localCoordinates() - { - return [ - 'latitude' => static::latitude(), - 'longitude' => static::longitude(), - ]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Barcode.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Barcode.php deleted file mode 100644 index 0d39a61e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Barcode.php +++ /dev/null @@ -1,107 +0,0 @@ -ean(13); - } - - /** - * Get a random EAN8 barcode. - * - * @return string - * - * @example '73513537' - */ - public function ean8() - { - return $this->ean(8); - } - - /** - * Get a random ISBN-10 code - * - * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number - * - * @return string - * - * @example '4881416324' - */ - public function isbn10() - { - $code = static::numerify(str_repeat('#', 9)); - - return $code . Isbn::checksum($code); - } - - /** - * Get a random ISBN-13 code - * - * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number - * - * @return string - * - * @example '9790404436093' - */ - public function isbn13() - { - $code = '97' . self::numberBetween(8, 9) . static::numerify(str_repeat('#', 9)); - - return $code . Ean::checksum($code); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Base.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Base.php deleted file mode 100644 index d91552c8..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Base.php +++ /dev/null @@ -1,709 +0,0 @@ -generator = $generator; - } - - /** - * Returns a random number between 0 and 9 - * - * @return int - */ - public static function randomDigit() - { - return mt_rand(0, 9); - } - - /** - * Returns a random number between 1 and 9 - * - * @return int - */ - public static function randomDigitNotNull() - { - return mt_rand(1, 9); - } - - /** - * Generates a random digit, which cannot be $except - * - * @param int $except - * - * @return int - */ - public static function randomDigitNot($except) - { - $result = self::numberBetween(0, 8); - - if ($result >= $except) { - ++$result; - } - - return $result; - } - - /** - * Returns a random integer with 0 to $nbDigits digits. - * - * The maximum value returned is mt_getrandmax() - * - * @param int $nbDigits Defaults to a random number between 1 and 9 - * @param bool $strict Whether the returned number should have exactly $nbDigits - * - * @example 79907610 - * - * @return int - */ - public static function randomNumber($nbDigits = null, $strict = false) - { - if (!is_bool($strict)) { - throw new \InvalidArgumentException('randomNumber() generates numbers of fixed width. To generate numbers between two boundaries, use numberBetween() instead.'); - } - - if (null === $nbDigits) { - $nbDigits = static::randomDigitNotNull(); - } - $max = 10 ** $nbDigits - 1; - - if ($max > mt_getrandmax()) { - throw new \InvalidArgumentException('randomNumber() can only generate numbers up to mt_getrandmax()'); - } - - if ($strict) { - return mt_rand(10 ** ($nbDigits - 1), $max); - } - - return mt_rand(0, $max); - } - - /** - * Return a random float number - * - * @param int $nbMaxDecimals - * @param float|int $min - * @param float|int $max - * - * @example 48.8932 - * - * @return float - */ - public static function randomFloat($nbMaxDecimals = null, $min = 0, $max = null) - { - if (null === $nbMaxDecimals) { - $nbMaxDecimals = static::randomDigit(); - } - - if (null === $max) { - $max = static::randomNumber(); - - if ($min > $max) { - $max = $min; - } - } - - if ($min > $max) { - $tmp = $min; - $min = $max; - $max = $tmp; - } - - return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $nbMaxDecimals); - } - - /** - * Returns a random number between $int1 and $int2 (any order) - * - * @param int $int1 default to 0 - * @param int $int2 defaults to 32 bit max integer, ie 2147483647 - * - * @example 79907610 - * - * @return int - */ - public static function numberBetween($int1 = 0, $int2 = 2147483647) - { - $min = $int1 < $int2 ? $int1 : $int2; - $max = $int1 < $int2 ? $int2 : $int1; - - return mt_rand($min, $max); - } - - /** - * Returns the passed value - */ - public static function passthrough($value) - { - return $value; - } - - /** - * Returns a random letter from a to z - * - * @return string - */ - public static function randomLetter() - { - return chr(mt_rand(97, 122)); - } - - /** - * Returns a random ASCII character (excluding accents and special chars) - * - * @return string - */ - public static function randomAscii() - { - return chr(mt_rand(33, 126)); - } - - /** - * Returns randomly ordered subsequence of $count elements from a provided array - * - * @todo update default $count to `null` (BC) for next major version - * - * @param array|class-string|\Traversable $array Array to take elements from. Defaults to a-c - * @param int|null $count Number of elements to take. If `null` then returns random number of elements - * @param bool $allowDuplicates Allow elements to be picked several times. Defaults to false - * - * @throws \InvalidArgumentException - * @throws \LengthException When requesting more elements than provided - * - * @return array New array with $count elements from $array - */ - public static function randomElements($array = ['a', 'b', 'c'], $count = 1, $allowDuplicates = false) - { - $elements = $array; - - if (is_string($array) && function_exists('enum_exists') && enum_exists($array)) { - $elements = $array::cases(); - } - - if ($array instanceof \Traversable) { - $elements = \iterator_to_array($array, false); - } - - if (!is_array($elements)) { - throw new \InvalidArgumentException(sprintf( - 'Argument for parameter $array needs to be array, an instance of %s, or an instance of %s, got %s instead.', - \UnitEnum::class, - \Traversable::class, - is_object($array) ? get_class($array) : gettype($array), - )); - } - - $numberOfElements = count($elements); - - if (!$allowDuplicates && null !== $count && $numberOfElements < $count) { - throw new \LengthException(sprintf( - 'Cannot get %d elements, only %d in array', - $count, - $numberOfElements, - )); - } - - if (null === $count) { - $count = mt_rand(1, $numberOfElements); - } - - $randomElements = []; - - $keys = array_keys($elements); - $maxIndex = $numberOfElements - 1; - $elementHasBeenSelectedAlready = []; - $numberOfRandomElements = 0; - - while ($numberOfRandomElements < $count) { - $index = mt_rand(0, $maxIndex); - - if (!$allowDuplicates) { - if (isset($elementHasBeenSelectedAlready[$index])) { - continue; - } - - $elementHasBeenSelectedAlready[$index] = true; - } - - $key = $keys[$index]; - - $randomElements[] = $elements[$key]; - - ++$numberOfRandomElements; - } - - return $randomElements; - } - - /** - * Returns a random element from a passed array - * - * @param array|class-string|\Traversable $array - * - * @throws \InvalidArgumentException - */ - public static function randomElement($array = ['a', 'b', 'c']) - { - $elements = $array; - - if (is_string($array) && function_exists('enum_exists') && enum_exists($array)) { - $elements = $array::cases(); - } - - if ($array instanceof \Traversable) { - $elements = iterator_to_array($array, false); - } - - if ($elements === []) { - return null; - } - - if (!is_array($elements)) { - throw new \InvalidArgumentException(sprintf( - 'Argument for parameter $array needs to be array, an instance of %s, or an instance of %s, got %s instead.', - \UnitEnum::class, - \Traversable::class, - is_object($array) ? get_class($array) : gettype($array), - )); - } - - $randomElements = static::randomElements($elements, 1); - - return $randomElements[0]; - } - - /** - * Returns a random key from a passed associative array - * - * @param array $array - * - * @return int|string|null - */ - public static function randomKey($array = []) - { - if (!$array) { - return null; - } - $keys = array_keys($array); - - return $keys[mt_rand(0, count($keys) - 1)]; - } - - /** - * Returns a shuffled version of the argument. - * - * This function accepts either an array, or a string. - * - * @example $faker->shuffle([1, 2, 3]); // [2, 1, 3] - * @example $faker->shuffle('hello, world'); // 'rlo,h eold!lw' - * - * @see shuffleArray() - * @see shuffleString() - * - * @param array|string $arg The set to shuffle - * - * @return array|string The shuffled set - */ - public static function shuffle($arg = '') - { - if (is_array($arg)) { - return static::shuffleArray($arg); - } - - if (is_string($arg)) { - return static::shuffleString($arg); - } - - throw new \InvalidArgumentException('shuffle() only supports strings or arrays'); - } - - /** - * Returns a shuffled version of the array. - * - * This function does not mutate the original array. It uses the - * Fisher–Yates algorithm, which is unbiased, together with a Mersenne - * twister random generator. This function is therefore more random than - * PHP's shuffle() function, and it is seedable. - * - * @see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle - * - * @example $faker->shuffleArray([1, 2, 3]); // [2, 1, 3] - * - * @param array $array The set to shuffle - * - * @return array The shuffled set - */ - public static function shuffleArray($array = []) - { - $shuffledArray = []; - $i = 0; - reset($array); - - foreach ($array as $key => $value) { - if ($i == 0) { - $j = 0; - } else { - $j = mt_rand(0, $i); - } - - if ($j == $i) { - $shuffledArray[] = $value; - } else { - $shuffledArray[] = $shuffledArray[$j]; - $shuffledArray[$j] = $value; - } - ++$i; - } - - return $shuffledArray; - } - - /** - * Returns a shuffled version of the string. - * - * This function does not mutate the original string. It uses the - * Fisher–Yates algorithm, which is unbiased, together with a Mersenne - * twister random generator. This function is therefore more random than - * PHP's shuffle() function, and it is seedable. Additionally, it is - * UTF8 safe if the mb extension is available. - * - * @see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle - * - * @example $faker->shuffleString('hello, world'); // 'rlo,h eold!lw' - * - * @param string $string The set to shuffle - * @param string $encoding The string encoding (defaults to UTF-8) - * - * @return string The shuffled set - */ - public static function shuffleString($string = '', $encoding = 'UTF-8') - { - if (function_exists('mb_strlen')) { - // UTF8-safe str_split() - $array = []; - $strlen = mb_strlen($string, $encoding); - - for ($i = 0; $i < $strlen; ++$i) { - $array[] = mb_substr($string, $i, 1, $encoding); - } - } else { - $array = str_split($string, 1); - } - - return implode('', static::shuffleArray($array)); - } - - private static function replaceWildcard($string, $wildcard, $callback) - { - if (($pos = strpos($string, $wildcard)) === false) { - return $string; - } - - for ($i = $pos, $last = strrpos($string, $wildcard, $pos) + 1; $i < $last; ++$i) { - if ($string[$i] === $wildcard) { - $string[$i] = call_user_func($callback); - } - } - - return $string; - } - - /** - * Replaces all hash sign ('#') occurrences with a random number - * Replaces all percentage sign ('%') occurrences with a not null number - * - * @param string $string String that needs to bet parsed - * - * @return string - */ - public static function numerify($string = '###') - { - // instead of using randomDigit() several times, which is slow, - // count the number of hashes and generate once a large number - $toReplace = []; - - if (($pos = strpos($string, '#')) !== false) { - for ($i = $pos, $last = strrpos($string, '#', $pos) + 1; $i < $last; ++$i) { - if ($string[$i] === '#') { - $toReplace[] = $i; - } - } - } - - if ($nbReplacements = count($toReplace)) { - $maxAtOnce = strlen((string) mt_getrandmax()) - 1; - $numbers = ''; - $i = 0; - - while ($i < $nbReplacements) { - $size = min($nbReplacements - $i, $maxAtOnce); - $numbers .= str_pad(static::randomNumber($size), $size, '0', STR_PAD_LEFT); - $i += $size; - } - - for ($i = 0; $i < $nbReplacements; ++$i) { - $string[$toReplace[$i]] = $numbers[$i]; - } - } - $string = self::replaceWildcard($string, '%', [static::class, 'randomDigitNotNull']); - - return $string; - } - - /** - * Replaces all question mark ('?') occurrences with a random letter - * - * @param string $string String that needs to bet parsed - * - * @return string - */ - public static function lexify($string = '????') - { - return self::replaceWildcard($string, '?', [static::class, 'randomLetter']); - } - - /** - * Replaces hash signs ('#') and question marks ('?') with random numbers and letters - * An asterisk ('*') is replaced with either a random number or a random letter - * - * @param string $string String that needs to be parsed - * - * @return string - */ - public static function bothify($string = '## ??') - { - $string = self::replaceWildcard($string, '*', static function () { - return mt_rand(0, 1) ? '#' : '?'; - }); - - return static::lexify(static::numerify($string)); - } - - /** - * Replaces * signs with random numbers and letters and special characters - * - * @example $faker->asciify(''********'); // "s5'G!uC3" - * - * @param string $string String that needs to bet parsed - * - * @return string - */ - public static function asciify($string = '****') - { - return preg_replace_callback('/\*/u', [static::class, 'randomAscii'], $string); - } - - /** - * Transforms a basic regular expression into a random string satisfying the expression. - * - * @example $faker->regexify('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'); // sm0@y8k96a.ej - * - * Regex delimiters '/.../' and begin/end markers '^...$' are ignored. - * - * Only supports a small subset of the regex syntax. For instance, - * unicode, negated classes, unbounded ranges, subpatterns, back references, - * assertions, recursive patterns, and comments are not supported. Escaping - * support is extremely fragile. - * - * This method is also VERY slow. Use it only when no other formatter - * can generate the fake data you want. For instance, prefer calling - * `$faker->email` rather than `regexify` with the previous regular - * expression. - * - * Also note than `bothify` can probably do most of what this method does, - * but much faster. For instance, for a dummy email generation, try - * `$faker->bothify('?????????@???.???')`. - * - * @see https://github.com/icomefromthenet/ReverseRegex for a more robust implementation - * - * @param string $regex A regular expression (delimiters are optional) - * - * @return string - */ - public static function regexify($regex = '') - { - // ditch the anchors - $regex = preg_replace('/^\/?\^?/', '', $regex); - $regex = preg_replace('/\$?\/?$/', '', $regex); - // All {2} become {2,2} - $regex = preg_replace('/\{(\d+)\}/', '{\1,\1}', $regex); - // Single-letter quantifiers (?, *, +) become bracket quantifiers ({0,1}, {0,rand}, {1, rand}) - $regex = preg_replace('/(? 0 && $weight < 1 && mt_rand() / mt_getrandmax() <= $weight) { - return $this->generator; - } - - // new system with percentage - if (is_int($weight) && mt_rand(1, 100) <= $weight) { - return $this->generator; - } - - return new DefaultGenerator($default); - } - - /** - * Chainable method for making any formatter unique. - * - * - * // will never return twice the same value - * $faker->unique()->randomElement(array(1, 2, 3)); - * - * - * @param bool $reset If set to true, resets the list of existing values - * @param int $maxRetries Maximum number of retries to find a unique value, - * After which an OverflowException is thrown. - * - * @throws \OverflowException When no unique value can be found by iterating $maxRetries times - * - * @return UniqueGenerator A proxy class returning only non-existing values - */ - public function unique($reset = false, $maxRetries = 10000) - { - if ($reset || !$this->unique) { - $this->unique = new UniqueGenerator($this->generator, $maxRetries); - } - - return $this->unique; - } - - /** - * Chainable method for forcing any formatter to return only valid values. - * - * The value validity is determined by a function passed as first argument. - * - * - * $values = array(); - * $evenValidator = function ($digit) { - * return $digit % 2 === 0; - * }; - * for ($i=0; $i < 10; $i++) { - * $values []= $faker->valid($evenValidator)->randomDigit; - * } - * print_r($values); // [0, 4, 8, 4, 2, 6, 0, 8, 8, 6] - * - * - * @param Closure $validator A function returning true for valid values - * @param int $maxRetries Maximum number of retries to find a unique value, - * After which an OverflowException is thrown. - * - * @throws \OverflowException When no valid value can be found by iterating $maxRetries times - * - * @return ValidGenerator A proxy class returning only valid values - */ - public function valid($validator = null, $maxRetries = 10000) - { - return new ValidGenerator($this->generator, $validator, $maxRetries); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Biased.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Biased.php deleted file mode 100644 index 42c70bcc..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Biased.php +++ /dev/null @@ -1,65 +0,0 @@ -generator->parse($format); - } - - /** - * @example 'Ltd' - * - * @return string - */ - public static function companySuffix() - { - return static::randomElement(static::$companySuffix); - } - - /** - * @example 'Job' - * - * @return string - */ - public function jobTitle() - { - $format = static::randomElement(static::$jobTitleFormat); - - return $this->generator->parse($format); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/DateTime.php b/old_vendor/fakerphp/faker/src/Faker/Provider/DateTime.php deleted file mode 100644 index 25df1c99..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/DateTime.php +++ /dev/null @@ -1,389 +0,0 @@ -getTimestamp(); - } - - return strtotime(empty($max) ? 'now' : $max); - } - - /** - * Get a timestamp between January 1, 1970, and now - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return int - * - * @example 1061306726 - */ - public static function unixTime($max = 'now') - { - return self::numberBetween(0, static::getMaxTimestamp($max)); - } - - /** - * Get a datetime object for a date between January 1, 1970 and now - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - * - * @see http://php.net/manual/en/timezones.php - * @see http://php.net/manual/en/function.date-default-timezone-get.php - * - * @example DateTime('2005-08-16 20:39:21') - */ - public static function dateTime($max = 'now', $timezone = null) - { - return static::setTimezone( - new \DateTime('@' . static::unixTime($max)), - $timezone, - ); - } - - /** - * Get a datetime object for a date between January 1, 001 and now - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - * - * @see http://php.net/manual/en/timezones.php - * @see http://php.net/manual/en/function.date-default-timezone-get.php - * - * @example DateTime('1265-03-22 21:15:52') - */ - public static function dateTimeAD($max = 'now', $timezone = null) - { - $min = (PHP_INT_SIZE > 4 ? -62135597361 : -PHP_INT_MAX); - - return static::setTimezone( - new \DateTime('@' . self::numberBetween($min, static::getMaxTimestamp($max))), - $timezone, - ); - } - - /** - * get a date string formatted with ISO8601 - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '2003-10-21T16:05:52+0000' - */ - public static function iso8601($max = 'now') - { - return static::date(\DateTime::ISO8601, $max); - } - - /** - * Get a date string between January 1, 1970 and now - * - * @param string $format - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '2008-11-27' - */ - public static function date($format = 'Y-m-d', $max = 'now') - { - return static::dateTime($max)->format($format); - } - - /** - * Get a time string (24h format by default) - * - * @param string $format - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '15:02:34' - */ - public static function time($format = 'H:i:s', $max = 'now') - { - return static::dateTime($max)->format($format); - } - - /** - * Get a DateTime object based on a random date between two given dates. - * Accepts date strings that can be recognized by strtotime(). - * - * @param \DateTime|string $startDate Defaults to 30 years ago - * @param \DateTime|string $endDate Defaults to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - * - * @see http://php.net/manual/en/timezones.php - * @see http://php.net/manual/en/function.date-default-timezone-get.php - * - * @example DateTime('1999-02-02 11:42:52') - */ - public static function dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = null) - { - $startTimestamp = $startDate instanceof \DateTime ? $startDate->getTimestamp() : strtotime($startDate); - $endTimestamp = static::getMaxTimestamp($endDate); - - if ($startTimestamp > $endTimestamp) { - throw new \InvalidArgumentException('Start date must be anterior to end date.'); - } - - $timestamp = self::numberBetween($startTimestamp, $endTimestamp); - - return static::setTimezone( - new \DateTime('@' . $timestamp), - $timezone, - ); - } - - /** - * Get a DateTime object based on a random date between one given date and - * an interval - * Accepts date string that can be recognized by strtotime(). - * - * @param \DateTime|string $date Defaults to 30 years ago - * @param string $interval Defaults to 5 days after - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - * - * @example dateTimeInInterval('1999-02-02 11:42:52', '+ 5 days') - * - * @see http://php.net/manual/en/timezones.php - * @see http://php.net/manual/en/function.date-default-timezone-get.php - */ - public static function dateTimeInInterval($date = '-30 years', $interval = '+5 days', $timezone = null) - { - $intervalObject = \DateInterval::createFromDateString($interval); - $datetime = $date instanceof \DateTime ? $date : new \DateTime($date); - $otherDatetime = clone $datetime; - $otherDatetime->add($intervalObject); - - $begin = min($datetime, $otherDatetime); - $end = $datetime === $begin ? $otherDatetime : $datetime; - - return static::dateTimeBetween( - $begin, - $end, - $timezone, - ); - } - - /** - * Get a date time object somewhere within a century. - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - */ - public static function dateTimeThisCentury($max = 'now', $timezone = null) - { - return static::dateTimeBetween('-100 year', $max, $timezone); - } - - /** - * Get a date time object somewhere within a decade. - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - */ - public static function dateTimeThisDecade($max = 'now', $timezone = null) - { - return static::dateTimeBetween('-10 year', $max, $timezone); - } - - /** - * Get a date time object somewhere inside the current year. - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - */ - public static function dateTimeThisYear($max = 'now', $timezone = null) - { - return static::dateTimeBetween('first day of january this year', $max, $timezone); - } - - /** - * Get a date time object somewhere within a month. - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * @param string|null $timezone time zone in which the date time should be set, default to DateTime::$defaultTimezone, if set, otherwise the result of `date_default_timezone_get` - * - * @return \DateTime - */ - public static function dateTimeThisMonth($max = 'now', $timezone = null) - { - return static::dateTimeBetween('-1 month', $max, $timezone); - } - - /** - * Get a string containing either "am" or "pm". - * - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example 'am' - */ - public static function amPm($max = 'now') - { - return static::dateTime($max)->format('a'); - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '22' - */ - public static function dayOfMonth($max = 'now') - { - return static::dateTime($max)->format('d'); - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example 'Tuesday' - */ - public static function dayOfWeek($max = 'now') - { - return static::dateTime($max)->format('l'); - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '7' - */ - public static function month($max = 'now') - { - return static::dateTime($max)->format('m'); - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example 'September' - */ - public static function monthName($max = 'now') - { - return static::dateTime($max)->format('F'); - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '1987' - */ - public static function year($max = 'now') - { - return static::dateTime($max)->format('Y'); - } - - /** - * @return string - * - * @example 'XVII' - */ - public static function century() - { - return static::randomElement(static::$century); - } - - /** - * @return string - * - * @example 'Europe/Paris' - */ - public static function timezone(string $countryCode = null) - { - if ($countryCode) { - $timezones = \DateTimeZone::listIdentifiers(\DateTimeZone::PER_COUNTRY, $countryCode); - } else { - $timezones = \DateTimeZone::listIdentifiers(); - } - - return static::randomElement($timezones); - } - - /** - * Internal method to set the time zone on a DateTime. - * - * @param string|null $timezone - * - * @return \DateTime - */ - private static function setTimezone(\DateTime $dt, $timezone) - { - return $dt->setTimezone(new \DateTimeZone(static::resolveTimezone($timezone))); - } - - /** - * Sets default time zone. - * - * @param string $timezone - */ - public static function setDefaultTimezone($timezone = null) - { - static::$defaultTimezone = $timezone; - } - - /** - * Gets default time zone. - * - * @return string|null - */ - public static function getDefaultTimezone() - { - return static::$defaultTimezone; - } - - /** - * @param string|null $timezone - * - * @return string|null - */ - private static function resolveTimezone($timezone) - { - return (null === $timezone) ? ((null === static::$defaultTimezone) ? date_default_timezone_get() : static::$defaultTimezone) : $timezone; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/File.php b/old_vendor/fakerphp/faker/src/Faker/Provider/File.php deleted file mode 100644 index 3cf3db9f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/File.php +++ /dev/null @@ -1,610 +0,0 @@ - file extension(s) - * - * @see http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types - */ - protected static $mimeTypes = [ - 'application/atom+xml' => 'atom', - 'application/ecmascript' => 'ecma', - 'application/emma+xml' => 'emma', - 'application/epub+zip' => 'epub', - 'application/java-archive' => 'jar', - 'application/java-vm' => 'class', - 'application/javascript' => 'js', - 'application/json' => 'json', - 'application/jsonml+json' => 'jsonml', - 'application/lost+xml' => 'lostxml', - 'application/mathml+xml' => 'mathml', - 'application/mets+xml' => 'mets', - 'application/mods+xml' => 'mods', - 'application/mp4' => 'mp4s', - 'application/msword' => ['doc', 'dot'], - 'application/octet-stream' => [ - 'bin', - 'dms', - 'lrf', - 'mar', - 'so', - 'dist', - 'distz', - 'pkg', - 'bpk', - 'dump', - 'elc', - 'deploy', - ], - 'application/ogg' => 'ogx', - 'application/omdoc+xml' => 'omdoc', - 'application/pdf' => 'pdf', - 'application/pgp-encrypted' => 'pgp', - 'application/pgp-signature' => ['asc', 'sig'], - 'application/pkix-pkipath' => 'pkipath', - 'application/pkixcmp' => 'pki', - 'application/pls+xml' => 'pls', - 'application/postscript' => ['ai', 'eps', 'ps'], - 'application/pskc+xml' => 'pskcxml', - 'application/rdf+xml' => 'rdf', - 'application/reginfo+xml' => 'rif', - 'application/rss+xml' => 'rss', - 'application/rtf' => 'rtf', - 'application/sbml+xml' => 'sbml', - 'application/vnd.adobe.air-application-installer-package+zip' => 'air', - 'application/vnd.adobe.xdp+xml' => 'xdp', - 'application/vnd.adobe.xfdf' => 'xfdf', - 'application/vnd.ahead.space' => 'ahead', - 'application/vnd.dart' => 'dart', - 'application/vnd.data-vision.rdz' => 'rdz', - 'application/vnd.dece.data' => ['uvf', 'uvvf', 'uvd', 'uvvd'], - 'application/vnd.dece.ttml+xml' => ['uvt', 'uvvt'], - 'application/vnd.dece.unspecified' => ['uvx', 'uvvx'], - 'application/vnd.dece.zip' => ['uvz', 'uvvz'], - 'application/vnd.denovo.fcselayout-link' => 'fe_launch', - 'application/vnd.dna' => 'dna', - 'application/vnd.dolby.mlp' => 'mlp', - 'application/vnd.dpgraph' => 'dpg', - 'application/vnd.dreamfactory' => 'dfac', - 'application/vnd.ds-keypoint' => 'kpxx', - 'application/vnd.dvb.ait' => 'ait', - 'application/vnd.dvb.service' => 'svc', - 'application/vnd.dynageo' => 'geo', - 'application/vnd.ecowin.chart' => 'mag', - 'application/vnd.enliven' => 'nml', - 'application/vnd.epson.esf' => 'esf', - 'application/vnd.epson.msf' => 'msf', - 'application/vnd.epson.quickanime' => 'qam', - 'application/vnd.epson.salt' => 'slt', - 'application/vnd.epson.ssf' => 'ssf', - 'application/vnd.ezpix-album' => 'ez2', - 'application/vnd.ezpix-package' => 'ez3', - 'application/vnd.fdf' => 'fdf', - 'application/vnd.fdsn.mseed' => 'mseed', - 'application/vnd.fdsn.seed' => ['seed', 'dataless'], - 'application/vnd.flographit' => 'gph', - 'application/vnd.fluxtime.clip' => 'ftc', - 'application/vnd.hal+xml' => 'hal', - 'application/vnd.hydrostatix.sof-data' => 'sfd-hdstx', - 'application/vnd.ibm.minipay' => 'mpy', - 'application/vnd.ibm.secure-container' => 'sc', - 'application/vnd.iccprofile' => ['icc', 'icm'], - 'application/vnd.igloader' => 'igl', - 'application/vnd.immervision-ivp' => 'ivp', - 'application/vnd.kde.karbon' => 'karbon', - 'application/vnd.kde.kchart' => 'chrt', - 'application/vnd.kde.kformula' => 'kfo', - 'application/vnd.kde.kivio' => 'flw', - 'application/vnd.kde.kontour' => 'kon', - 'application/vnd.kde.kpresenter' => ['kpr', 'kpt'], - 'application/vnd.kde.kspread' => 'ksp', - 'application/vnd.kde.kword' => ['kwd', 'kwt'], - 'application/vnd.kenameaapp' => 'htke', - 'application/vnd.kidspiration' => 'kia', - 'application/vnd.kinar' => ['kne', 'knp'], - 'application/vnd.koan' => ['skp', 'skd', 'skt', 'skm'], - 'application/vnd.kodak-descriptor' => 'sse', - 'application/vnd.las.las+xml' => 'lasxml', - 'application/vnd.llamagraphics.life-balance.desktop' => 'lbd', - 'application/vnd.llamagraphics.life-balance.exchange+xml' => 'lbe', - 'application/vnd.lotus-1-2-3' => '123', - 'application/vnd.lotus-approach' => 'apr', - 'application/vnd.lotus-freelance' => 'pre', - 'application/vnd.lotus-notes' => 'nsf', - 'application/vnd.lotus-organizer' => 'org', - 'application/vnd.lotus-screencam' => 'scm', - 'application/vnd.mozilla.xul+xml' => 'xul', - 'application/vnd.ms-artgalry' => 'cil', - 'application/vnd.ms-cab-compressed' => 'cab', - 'application/vnd.ms-excel' => [ - 'xls', - 'xlm', - 'xla', - 'xlc', - 'xlt', - 'xlw', - ], - 'application/vnd.ms-excel.addin.macroenabled.12' => 'xlam', - 'application/vnd.ms-excel.sheet.binary.macroenabled.12' => 'xlsb', - 'application/vnd.ms-excel.sheet.macroenabled.12' => 'xlsm', - 'application/vnd.ms-excel.template.macroenabled.12' => 'xltm', - 'application/vnd.ms-fontobject' => 'eot', - 'application/vnd.ms-htmlhelp' => 'chm', - 'application/vnd.ms-ims' => 'ims', - 'application/vnd.ms-lrm' => 'lrm', - 'application/vnd.ms-officetheme' => 'thmx', - 'application/vnd.ms-pki.seccat' => 'cat', - 'application/vnd.ms-pki.stl' => 'stl', - 'application/vnd.ms-powerpoint' => ['ppt', 'pps', 'pot'], - 'application/vnd.ms-powerpoint.addin.macroenabled.12' => 'ppam', - 'application/vnd.ms-powerpoint.presentation.macroenabled.12' => 'pptm', - 'application/vnd.ms-powerpoint.slide.macroenabled.12' => 'sldm', - 'application/vnd.ms-powerpoint.slideshow.macroenabled.12' => 'ppsm', - 'application/vnd.ms-powerpoint.template.macroenabled.12' => 'potm', - 'application/vnd.ms-project' => ['mpp', 'mpt'], - 'application/vnd.ms-word.document.macroenabled.12' => 'docm', - 'application/vnd.ms-word.template.macroenabled.12' => 'dotm', - 'application/vnd.ms-works' => ['wps', 'wks', 'wcm', 'wdb'], - 'application/vnd.ms-wpl' => 'wpl', - 'application/vnd.ms-xpsdocument' => 'xps', - 'application/vnd.mseq' => 'mseq', - 'application/vnd.musician' => 'mus', - 'application/vnd.oasis.opendocument.chart' => 'odc', - 'application/vnd.oasis.opendocument.chart-template' => 'otc', - 'application/vnd.oasis.opendocument.database' => 'odb', - 'application/vnd.oasis.opendocument.formula' => 'odf', - 'application/vnd.oasis.opendocument.formula-template' => 'odft', - 'application/vnd.oasis.opendocument.graphics' => 'odg', - 'application/vnd.oasis.opendocument.graphics-template' => 'otg', - 'application/vnd.oasis.opendocument.image' => 'odi', - 'application/vnd.oasis.opendocument.image-template' => 'oti', - 'application/vnd.oasis.opendocument.presentation' => 'odp', - 'application/vnd.oasis.opendocument.presentation-template' => 'otp', - 'application/vnd.oasis.opendocument.spreadsheet' => 'ods', - 'application/vnd.oasis.opendocument.spreadsheet-template' => 'ots', - 'application/vnd.oasis.opendocument.text' => 'odt', - 'application/vnd.oasis.opendocument.text-master' => 'odm', - 'application/vnd.oasis.opendocument.text-template' => 'ott', - 'application/vnd.oasis.opendocument.text-web' => 'oth', - 'application/vnd.olpc-sugar' => 'xo', - 'application/vnd.oma.dd2+xml' => 'dd2', - 'application/vnd.openofficeorg.extension' => 'oxt', - 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx', - 'application/vnd.openxmlformats-officedocument.presentationml.slide' => 'sldx', - 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'ppsx', - 'application/vnd.openxmlformats-officedocument.presentationml.template' => 'potx', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => 'xltx', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'dotx', - 'application/vnd.pvi.ptid1' => 'ptid', - 'application/vnd.quark.quarkxpress' => [ - 'qxd', - 'qxt', - 'qwd', - 'qwt', - 'qxl', - 'qxb', - ], - 'application/vnd.realvnc.bed' => 'bed', - 'application/vnd.recordare.musicxml' => 'mxl', - 'application/vnd.recordare.musicxml+xml' => 'musicxml', - 'application/vnd.rig.cryptonote' => 'cryptonote', - 'application/vnd.rim.cod' => 'cod', - 'application/vnd.rn-realmedia' => 'rm', - 'application/vnd.rn-realmedia-vbr' => 'rmvb', - 'application/vnd.route66.link66+xml' => 'link66', - 'application/vnd.sailingtracker.track' => 'st', - 'application/vnd.seemail' => 'see', - 'application/vnd.sema' => 'sema', - 'application/vnd.semd' => 'semd', - 'application/vnd.semf' => 'semf', - 'application/vnd.shana.informed.formdata' => 'ifm', - 'application/vnd.shana.informed.formtemplate' => 'itp', - 'application/vnd.shana.informed.interchange' => 'iif', - 'application/vnd.shana.informed.package' => 'ipk', - 'application/vnd.simtech-mindmapper' => ['twd', 'twds'], - 'application/vnd.smaf' => 'mmf', - 'application/vnd.stepmania.stepchart' => 'sm', - 'application/vnd.sun.xml.calc' => 'sxc', - 'application/vnd.sun.xml.calc.template' => 'stc', - 'application/vnd.sun.xml.draw' => 'sxd', - 'application/vnd.sun.xml.draw.template' => 'std', - 'application/vnd.sun.xml.impress' => 'sxi', - 'application/vnd.sun.xml.impress.template' => 'sti', - 'application/vnd.sun.xml.math' => 'sxm', - 'application/vnd.sun.xml.writer' => 'sxw', - 'application/vnd.sun.xml.writer.global' => 'sxg', - 'application/vnd.sun.xml.writer.template' => 'stw', - 'application/vnd.sus-calendar' => ['sus', 'susp'], - 'application/vnd.svd' => 'svd', - 'application/vnd.symbian.install' => ['sis', 'sisx'], - 'application/vnd.syncml+xml' => 'xsm', - 'application/vnd.syncml.dm+wbxml' => 'bdm', - 'application/vnd.syncml.dm+xml' => 'xdm', - 'application/vnd.tao.intent-module-archive' => 'tao', - 'application/vnd.tcpdump.pcap' => ['pcap', 'cap', 'dmp'], - 'application/vnd.tmobile-livetv' => 'tmo', - 'application/vnd.trid.tpt' => 'tpt', - 'application/vnd.triscape.mxs' => 'mxs', - 'application/vnd.trueapp' => 'tra', - 'application/vnd.ufdl' => ['ufd', 'ufdl'], - 'application/vnd.uiq.theme' => 'utz', - 'application/vnd.umajin' => 'umj', - 'application/vnd.unity' => 'unityweb', - 'application/vnd.uoml+xml' => 'uoml', - 'application/vnd.vcx' => 'vcx', - 'application/vnd.visio' => ['vsd', 'vst', 'vss', 'vsw'], - 'application/vnd.visionary' => 'vis', - 'application/vnd.vsf' => 'vsf', - 'application/vnd.wap.wbxml' => 'wbxml', - 'application/vnd.wap.wmlc' => 'wmlc', - 'application/vnd.wap.wmlscriptc' => 'wmlsc', - 'application/vnd.webturbo' => 'wtb', - 'application/vnd.wolfram.player' => 'nbp', - 'application/vnd.wordperfect' => 'wpd', - 'application/vnd.wqd' => 'wqd', - 'application/vnd.wt.stf' => 'stf', - 'application/vnd.xara' => 'xar', - 'application/vnd.xfdl' => 'xfdl', - 'application/voicexml+xml' => 'vxml', - 'application/widget' => 'wgt', - 'application/winhlp' => 'hlp', - 'application/wsdl+xml' => 'wsdl', - 'application/wspolicy+xml' => 'wspolicy', - 'application/x-7z-compressed' => '7z', - 'application/x-bittorrent' => 'torrent', - 'application/x-blorb' => ['blb', 'blorb'], - 'application/x-bzip' => 'bz', - 'application/x-cdlink' => 'vcd', - 'application/x-cfs-compressed' => 'cfs', - 'application/x-chat' => 'chat', - 'application/x-chess-pgn' => 'pgn', - 'application/x-conference' => 'nsc', - 'application/x-cpio' => 'cpio', - 'application/x-csh' => 'csh', - 'application/x-debian-package' => ['deb', 'udeb'], - 'application/x-dgc-compressed' => 'dgc', - 'application/x-director' => [ - 'dir', - 'dcr', - 'dxr', - 'cst', - 'cct', - 'cxt', - 'w3d', - 'fgd', - 'swa', - ], - 'application/x-font-ttf' => ['ttf', 'ttc'], - 'application/x-font-type1' => ['pfa', 'pfb', 'pfm', 'afm'], - 'application/x-font-woff' => 'woff', - 'application/x-freearc' => 'arc', - 'application/x-futuresplash' => 'spl', - 'application/x-gca-compressed' => 'gca', - 'application/x-glulx' => 'ulx', - 'application/x-gnumeric' => 'gnumeric', - 'application/x-gramps-xml' => 'gramps', - 'application/x-gtar' => 'gtar', - 'application/x-hdf' => 'hdf', - 'application/x-install-instructions' => 'install', - 'application/x-iso9660-image' => 'iso', - 'application/x-java-jnlp-file' => 'jnlp', - 'application/x-latex' => 'latex', - 'application/x-lzh-compressed' => ['lzh', 'lha'], - 'application/x-mie' => 'mie', - 'application/x-mobipocket-ebook' => ['prc', 'mobi'], - 'application/x-ms-application' => 'application', - 'application/x-ms-shortcut' => 'lnk', - 'application/x-ms-wmd' => 'wmd', - 'application/x-ms-wmz' => 'wmz', - 'application/x-ms-xbap' => 'xbap', - 'application/x-msaccess' => 'mdb', - 'application/x-msbinder' => 'obd', - 'application/x-mscardfile' => 'crd', - 'application/x-msclip' => 'clp', - 'application/x-msdownload' => ['exe', 'dll', 'com', 'bat', 'msi'], - 'application/x-msmediaview' => [ - 'mvb', - 'm13', - 'm14', - ], - 'application/x-msmetafile' => ['wmf', 'wmz', 'emf', 'emz'], - 'application/x-rar-compressed' => 'rar', - 'application/x-research-info-systems' => 'ris', - 'application/x-sh' => 'sh', - 'application/x-shar' => 'shar', - 'application/x-shockwave-flash' => 'swf', - 'application/x-silverlight-app' => 'xap', - 'application/x-sql' => 'sql', - 'application/x-stuffit' => 'sit', - 'application/x-stuffitx' => 'sitx', - 'application/x-subrip' => 'srt', - 'application/x-sv4cpio' => 'sv4cpio', - 'application/x-sv4crc' => 'sv4crc', - 'application/x-t3vm-image' => 't3', - 'application/x-tads' => 'gam', - 'application/x-tar' => 'tar', - 'application/x-tcl' => 'tcl', - 'application/x-tex' => 'tex', - 'application/x-tex-tfm' => 'tfm', - 'application/x-texinfo' => ['texinfo', 'texi'], - 'application/x-tgif' => 'obj', - 'application/x-ustar' => 'ustar', - 'application/x-wais-source' => 'src', - 'application/x-x509-ca-cert' => ['der', 'crt'], - 'application/x-xfig' => 'fig', - 'application/x-xliff+xml' => 'xlf', - 'application/x-xpinstall' => 'xpi', - 'application/x-xz' => 'xz', - 'application/x-zmachine' => 'z1', - 'application/xaml+xml' => 'xaml', - 'application/xcap-diff+xml' => 'xdf', - 'application/xenc+xml' => 'xenc', - 'application/xhtml+xml' => ['xhtml', 'xht'], - 'application/xml' => ['xml', 'xsl'], - 'application/xml-dtd' => 'dtd', - 'application/xop+xml' => 'xop', - 'application/xproc+xml' => 'xpl', - 'application/xslt+xml' => 'xslt', - 'application/xspf+xml' => 'xspf', - 'application/xv+xml' => ['mxml', 'xhvml', 'xvml', 'xvm'], - 'application/yang' => 'yang', - 'application/yin+xml' => 'yin', - 'application/zip' => 'zip', - 'audio/adpcm' => 'adp', - 'audio/basic' => ['au', 'snd'], - 'audio/midi' => ['mid', 'midi', 'kar', 'rmi'], - 'audio/mp4' => 'mp4a', - 'audio/mpeg' => [ - 'mpga', - 'mp2', - 'mp2a', - 'mp3', - 'm2a', - 'm3a', - ], - 'audio/ogg' => ['oga', 'ogg', 'spx'], - 'audio/vnd.dece.audio' => ['uva', 'uvva'], - 'audio/vnd.rip' => 'rip', - 'audio/webm' => 'weba', - 'audio/x-aac' => 'aac', - 'audio/x-aiff' => ['aif', 'aiff', 'aifc'], - 'audio/x-caf' => 'caf', - 'audio/x-flac' => 'flac', - 'audio/x-matroska' => 'mka', - 'audio/x-mpegurl' => 'm3u', - 'audio/x-ms-wax' => 'wax', - 'audio/x-ms-wma' => 'wma', - 'audio/x-pn-realaudio' => ['ram', 'ra'], - 'audio/x-pn-realaudio-plugin' => 'rmp', - 'audio/x-wav' => 'wav', - 'audio/xm' => 'xm', - 'image/bmp' => 'bmp', - 'image/cgm' => 'cgm', - 'image/g3fax' => 'g3', - 'image/gif' => 'gif', - 'image/ief' => 'ief', - 'image/jpeg' => ['jpeg', 'jpg', 'jpe'], - 'image/ktx' => 'ktx', - 'image/png' => 'png', - 'image/prs.btif' => 'btif', - 'image/sgi' => 'sgi', - 'image/svg+xml' => ['svg', 'svgz'], - 'image/tiff' => ['tiff', 'tif'], - 'image/vnd.adobe.photoshop' => 'psd', - 'image/vnd.dece.graphic' => ['uvi', 'uvvi', 'uvg', 'uvvg'], - 'image/vnd.dvb.subtitle' => 'sub', - 'image/vnd.djvu' => ['djvu', 'djv'], - 'image/vnd.dwg' => 'dwg', - 'image/vnd.dxf' => 'dxf', - 'image/vnd.fastbidsheet' => 'fbs', - 'image/vnd.fpx' => 'fpx', - 'image/vnd.fst' => 'fst', - 'image/vnd.fujixerox.edmics-mmr' => 'mmr', - 'image/vnd.fujixerox.edmics-rlc' => 'rlc', - 'image/vnd.ms-modi' => 'mdi', - 'image/vnd.ms-photo' => 'wdp', - 'image/vnd.net-fpx' => 'npx', - 'image/vnd.wap.wbmp' => 'wbmp', - 'image/vnd.xiff' => 'xif', - 'image/webp' => 'webp', - 'image/x-3ds' => '3ds', - 'image/x-cmu-raster' => 'ras', - 'image/x-cmx' => 'cmx', - 'image/x-freehand' => ['fh', 'fhc', 'fh4', 'fh5', 'fh7'], - 'image/x-icon' => 'ico', - 'image/x-mrsid-image' => 'sid', - 'image/x-pcx' => 'pcx', - 'image/x-pict' => ['pic', 'pct'], - 'image/x-portable-anymap' => 'pnm', - 'image/x-portable-bitmap' => 'pbm', - 'image/x-portable-graymap' => 'pgm', - 'image/x-portable-pixmap' => 'ppm', - 'image/x-rgb' => 'rgb', - 'image/x-tga' => 'tga', - 'image/x-xbitmap' => 'xbm', - 'image/x-xpixmap' => 'xpm', - 'image/x-xwindowdump' => 'xwd', - 'message/rfc822' => ['eml', 'mime'], - 'model/iges' => ['igs', 'iges'], - 'model/mesh' => ['msh', 'mesh', 'silo'], - 'model/vnd.collada+xml' => 'dae', - 'model/vnd.dwf' => 'dwf', - 'model/vnd.gdl' => 'gdl', - 'model/vnd.gtw' => 'gtw', - 'model/vnd.mts' => 'mts', - 'model/vnd.vtu' => 'vtu', - 'model/vrml' => ['wrl', 'vrml'], - 'model/x3d+binary' => 'x3db', - 'model/x3d+vrml' => 'x3dv', - 'model/x3d+xml' => 'x3d', - 'text/cache-manifest' => 'appcache', - 'text/calendar' => ['ics', 'ifb'], - 'text/css' => 'css', - 'text/csv' => 'csv', - 'text/html' => ['html', 'htm'], - 'text/n3' => 'n3', - 'text/plain' => [ - 'txt', - 'text', - 'conf', - 'def', - 'list', - 'log', - 'in', - ], - 'text/prs.lines.tag' => 'dsc', - 'text/richtext' => 'rtx', - 'text/sgml' => ['sgml', 'sgm'], - 'text/tab-separated-values' => 'tsv', - 'text/troff' => [ - 't', - 'tr', - 'roff', - 'man', - 'me', - 'ms', - ], - 'text/turtle' => 'ttl', - 'text/uri-list' => ['uri', 'uris', 'urls'], - 'text/vcard' => 'vcard', - 'text/vnd.curl' => 'curl', - 'text/vnd.curl.dcurl' => 'dcurl', - 'text/vnd.curl.scurl' => 'scurl', - 'text/vnd.curl.mcurl' => 'mcurl', - 'text/vnd.dvb.subtitle' => 'sub', - 'text/vnd.fly' => 'fly', - 'text/vnd.fmi.flexstor' => 'flx', - 'text/vnd.graphviz' => 'gv', - 'text/vnd.in3d.3dml' => '3dml', - 'text/vnd.in3d.spot' => 'spot', - 'text/vnd.sun.j2me.app-descriptor' => 'jad', - 'text/vnd.wap.wml' => 'wml', - 'text/vnd.wap.wmlscript' => 'wmls', - 'text/x-asm' => ['s', 'asm'], - 'text/x-fortran' => ['f', 'for', 'f77', 'f90'], - 'text/x-java-source' => 'java', - 'text/x-opml' => 'opml', - 'text/x-pascal' => ['p', 'pas'], - 'text/x-nfo' => 'nfo', - 'text/x-setext' => 'etx', - 'text/x-sfv' => 'sfv', - 'text/x-uuencode' => 'uu', - 'text/x-vcalendar' => 'vcs', - 'text/x-vcard' => 'vcf', - 'video/3gpp' => '3gp', - 'video/3gpp2' => '3g2', - 'video/h261' => 'h261', - 'video/h263' => 'h263', - 'video/h264' => 'h264', - 'video/jpeg' => 'jpgv', - 'video/jpm' => ['jpm', 'jpgm'], - 'video/mj2' => 'mj2', - 'video/mp4' => 'mp4', - 'video/mpeg' => ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'], - 'video/ogg' => 'ogv', - 'video/quicktime' => ['qt', 'mov'], - 'video/vnd.dece.hd' => ['uvh', 'uvvh'], - 'video/vnd.dece.mobile' => ['uvm', 'uvvm'], - 'video/vnd.dece.pd' => ['uvp', 'uvvp'], - 'video/vnd.dece.sd' => ['uvs', 'uvvs'], - 'video/vnd.dece.video' => ['uvv', 'uvvv'], - 'video/vnd.dvb.file' => 'dvb', - 'video/vnd.fvt' => 'fvt', - 'video/vnd.mpegurl' => ['mxu', 'm4u'], - 'video/vnd.ms-playready.media.pyv' => 'pyv', - 'video/vnd.uvvu.mp4' => ['uvu', 'uvvu'], - 'video/vnd.vivo' => 'viv', - 'video/webm' => 'webm', - 'video/x-f4v' => 'f4v', - 'video/x-fli' => 'fli', - 'video/x-flv' => 'flv', - 'video/x-m4v' => 'm4v', - 'video/x-matroska' => ['mkv', 'mk3d', 'mks'], - 'video/x-mng' => 'mng', - 'video/x-ms-asf' => ['asf', 'asx'], - 'video/x-ms-vob' => 'vob', - 'video/x-ms-wm' => 'wm', - 'video/x-ms-wmv' => 'wmv', - 'video/x-ms-wmx' => 'wmx', - 'video/x-ms-wvx' => 'wvx', - 'video/x-msvideo' => 'avi', - 'video/x-sgi-movie' => 'movie', - ]; - - /** - * Get a random MIME type - * - * @return string - * - * @example 'video/avi' - */ - public static function mimeType() - { - return static::randomElement(array_keys(static::$mimeTypes)); - } - - /** - * Get a random file extension (without a dot) - * - * @example avi - * - * @return string - */ - public static function fileExtension() - { - $random_extension = static::randomElement(array_values(static::$mimeTypes)); - - return is_array($random_extension) ? static::randomElement($random_extension) : $random_extension; - } - - /** - * Copy a random file from the source directory to the target directory and returns the filename/fullpath - * - * @param string $sourceDirectory The directory to look for random file taking - * @param string $targetDirectory - * @param bool $fullPath Whether to have the full path or just the filename - * - * @return string - */ - public static function file($sourceDirectory = '/tmp', $targetDirectory = '/tmp', $fullPath = true) - { - if (!is_dir($sourceDirectory)) { - throw new \InvalidArgumentException(sprintf('Source directory %s does not exist or is not a directory.', $sourceDirectory)); - } - - if (!is_dir($targetDirectory)) { - throw new \InvalidArgumentException(sprintf('Target directory %s does not exist or is not a directory.', $targetDirectory)); - } - - if ($sourceDirectory == $targetDirectory) { - throw new \InvalidArgumentException('Source and target directories must differ.'); - } - - // Drop . and .. and reset array keys - $files = array_filter(array_values(array_diff(scandir($sourceDirectory), ['.', '..'])), static function ($file) use ($sourceDirectory) { - return is_file($sourceDirectory . DIRECTORY_SEPARATOR . $file) && is_readable($sourceDirectory . DIRECTORY_SEPARATOR . $file); - }); - - if (empty($files)) { - throw new \InvalidArgumentException(sprintf('Source directory %s is empty.', $sourceDirectory)); - } - - $sourceFullPath = $sourceDirectory . DIRECTORY_SEPARATOR . static::randomElement($files); - - $destinationFile = Uuid::uuid() . '.' . pathinfo($sourceFullPath, PATHINFO_EXTENSION); - $destinationFullPath = $targetDirectory . DIRECTORY_SEPARATOR . $destinationFile; - - if (false === copy($sourceFullPath, $destinationFullPath)) { - return false; - } - - return $fullPath ? $destinationFullPath : $destinationFile; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php b/old_vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php deleted file mode 100644 index a8434108..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php +++ /dev/null @@ -1,307 +0,0 @@ -addProvider(new Lorem($generator)); - $generator->addProvider(new Internet($generator)); - } - - /** - * @param int $maxDepth - * @param int $maxWidth - * - * @return string - */ - public function randomHtml($maxDepth = 4, $maxWidth = 4) - { - if (!class_exists(\DOMDocument::class, false)) { - throw new \RuntimeException('ext-dom is required to use randomHtml.'); - } - - $document = new \DOMDocument(); - $this->idGenerator = new UniqueGenerator($this->generator); - - $head = $document->createElement('head'); - $this->addRandomTitle($head); - - $body = $document->createElement('body'); - $this->addLoginForm($body); - $this->addRandomSubTree($body, $maxDepth, $maxWidth); - - $html = $document->createElement('html'); - $html->appendChild($head); - $html->appendChild($body); - - $document->appendChild($html); - - return $document->saveHTML(); - } - - private function addRandomSubTree(\DOMElement $root, $maxDepth, $maxWidth) - { - --$maxDepth; - - if ($maxDepth <= 0) { - return $root; - } - - $siblings = self::numberBetween(1, $maxWidth); - - for ($i = 0; $i < $siblings; ++$i) { - if ($maxDepth == 1) { - $this->addRandomLeaf($root); - } else { - $sibling = $root->ownerDocument->createElement('div'); - $root->appendChild($sibling); - $this->addRandomAttribute($sibling); - $this->addRandomSubTree($sibling, self::numberBetween(0, $maxDepth), $maxWidth); - } - } - - return $root; - } - - private function addRandomLeaf(\DOMElement $node): void - { - $rand = self::numberBetween(1, 10); - - switch ($rand) { - case 1: - $this->addRandomP($node); - - break; - - case 2: - $this->addRandomA($node); - - break; - - case 3: - $this->addRandomSpan($node); - - break; - - case 4: - $this->addRandomUL($node); - - break; - - case 5: - $this->addRandomH($node); - - break; - - case 6: - $this->addRandomB($node); - - break; - - case 7: - $this->addRandomI($node); - - break; - - case 8: - $this->addRandomTable($node); - - break; - - default: - $this->addRandomText($node); - - break; - } - } - - private function addRandomAttribute(\DOMElement $node): void - { - $rand = self::numberBetween(1, 2); - - switch ($rand) { - case 1: - $node->setAttribute('class', $this->generator->word()); - - break; - - case 2: - $node->setAttribute('id', (string) $this->idGenerator->randomNumber(5)); - - break; - } - } - - private function addRandomP(\DOMElement $element, $maxLength = 10): void - { - $node = $element->ownerDocument->createElement(static::P_TAG); - $node->textContent = $this->generator->sentence(self::numberBetween(1, $maxLength)); - $element->appendChild($node); - } - - private function addRandomText(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $element->appendChild($text); - } - - private function addRandomA(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement(static::A_TAG); - $node->setAttribute('href', $this->generator->safeEmailDomain()); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addRandomTitle(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement(static::TITLE_TAG); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addRandomH(\DOMElement $element, $maxLength = 10): void - { - $h = static::H_TAG . (string) self::numberBetween(1, 3); - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement($h); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addRandomB(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement(static::B_TAG); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addRandomI(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement(static::I_TAG); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addRandomSpan(\DOMElement $element, $maxLength = 10): void - { - $text = $element->ownerDocument->createTextNode($this->generator->sentence(self::numberBetween(1, $maxLength))); - $node = $element->ownerDocument->createElement(static::SPAN_TAG); - $node->appendChild($text); - $element->appendChild($node); - } - - private function addLoginForm(\DOMElement $element): void - { - $textInput = $element->ownerDocument->createElement(static::INPUT_TAG); - $textInput->setAttribute('type', 'text'); - $textInput->setAttribute('id', 'username'); - - $textLabel = $element->ownerDocument->createElement(static::LABEL_TAG); - $textLabel->setAttribute('for', 'username'); - $textLabel->textContent = $this->generator->word(); - - $passwordInput = $element->ownerDocument->createElement(static::INPUT_TAG); - $passwordInput->setAttribute('type', 'password'); - $passwordInput->setAttribute('id', 'password'); - - $passwordLabel = $element->ownerDocument->createElement(static::LABEL_TAG); - $passwordLabel->setAttribute('for', 'password'); - $passwordLabel->textContent = $this->generator->word(); - - $submit = $element->ownerDocument->createElement(static::INPUT_TAG); - $submit->setAttribute('type', 'submit'); - $submit->setAttribute('value', $this->generator->word()); - - $submit = $element->ownerDocument->createElement(static::FORM_TAG); - $submit->setAttribute('action', $this->generator->safeEmailDomain()); - $submit->setAttribute('method', 'POST'); - $submit->appendChild($textLabel); - $submit->appendChild($textInput); - $submit->appendChild($passwordLabel); - $submit->appendChild($passwordInput); - $element->appendChild($submit); - } - - private function addRandomTable(\DOMElement $element, $maxRows = 10, $maxCols = 6, $maxTitle = 4, $maxLength = 10): void - { - $rows = self::numberBetween(1, $maxRows); - $cols = self::numberBetween(1, $maxCols); - - $table = $element->ownerDocument->createElement(static::TABLE_TAG); - $thead = $element->ownerDocument->createElement(static::THEAD_TAG); - $tbody = $element->ownerDocument->createElement(static::TBODY_TAG); - - $table->appendChild($thead); - $table->appendChild($tbody); - - $tr = $element->ownerDocument->createElement(static::TR_TAG); - $thead->appendChild($tr); - - for ($i = 0; $i < $cols; ++$i) { - $th = $element->ownerDocument->createElement(static::TH_TAG); - $th->textContent = $this->generator->sentence(self::numberBetween(1, $maxTitle)); - $tr->appendChild($th); - } - - for ($i = 0; $i < $rows; ++$i) { - $tr = $element->ownerDocument->createElement(static::TR_TAG); - $tbody->appendChild($tr); - - for ($j = 0; $j < $cols; ++$j) { - $th = $element->ownerDocument->createElement(static::TD_TAG); - $th->textContent = $this->generator->sentence(self::numberBetween(1, $maxLength)); - $tr->appendChild($th); - } - } - $element->appendChild($table); - } - - private function addRandomUL(\DOMElement $element, $maxItems = 11, $maxLength = 4): void - { - $num = self::numberBetween(1, $maxItems); - $ul = $element->ownerDocument->createElement(static::UL_TAG); - - for ($i = 0; $i < $num; ++$i) { - $li = $element->ownerDocument->createElement(static::LI_TAG); - $li->textContent = $this->generator->sentence(self::numberBetween(1, $maxLength)); - $ul->appendChild($li); - } - $element->appendChild($ul); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Image.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Image.php deleted file mode 100644 index 53f28dfc..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Image.php +++ /dev/null @@ -1,195 +0,0 @@ - 0 ? '?text=' . urlencode(implode(' ', $imageParts)) : '', - ); - } - - /** - * Download a remote random image to disk and return its location - * - * Requires curl, or allow_url_fopen to be on in php.ini. - * - * @example '/path/to/dir/13b73edae8443990be1aa8f1a483bc27.png' - * - * @return bool|string - */ - public static function image( - $dir = null, - $width = 640, - $height = 480, - $category = null, - $fullPath = true, - $randomize = true, - $word = null, - $gray = false, - $format = 'png' - ) { - trigger_deprecation( - 'fakerphp/faker', - '1.20', - 'Provider is deprecated and will no longer be available in Faker 2. Please use a custom provider instead', - ); - - $dir = null === $dir ? sys_get_temp_dir() : $dir; // GNU/Linux / OS X / Windows compatible - // Validate directory path - if (!is_dir($dir) || !is_writable($dir)) { - throw new \InvalidArgumentException(sprintf('Cannot write to directory "%s"', $dir)); - } - - // Generate a random filename. Use the server address so that a file - // generated at the same time on a different server won't have a collision. - $name = md5(uniqid(empty($_SERVER['SERVER_ADDR']) ? '' : $_SERVER['SERVER_ADDR'], true)); - $filename = sprintf('%s.%s', $name, $format); - $filepath = $dir . DIRECTORY_SEPARATOR . $filename; - - $url = static::imageUrl($width, $height, $category, $randomize, $word, $gray, $format); - - // save file - if (function_exists('curl_exec')) { - // use cURL - $fp = fopen($filepath, 'w'); - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_FILE, $fp); - $success = curl_exec($ch) && curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200; - fclose($fp); - curl_close($ch); - - if (!$success) { - unlink($filepath); - - // could not contact the distant URL or HTTP error - fail silently. - return false; - } - } elseif (ini_get('allow_url_fopen')) { - // use remote fopen() via copy() - $success = copy($url, $filepath); - - if (!$success) { - // could not contact the distant URL or HTTP error - fail silently. - return false; - } - } else { - return new \RuntimeException('The image formatter downloads an image from a remote HTTP server. Therefore, it requires that PHP can request remote hosts, either via cURL or fopen()'); - } - - return $fullPath ? $filepath : $filename; - } - - public static function getFormats(): array - { - trigger_deprecation( - 'fakerphp/faker', - '1.20', - 'Provider is deprecated and will no longer be available in Faker 2. Please use a custom provider instead', - ); - - return array_keys(static::getFormatConstants()); - } - - public static function getFormatConstants(): array - { - trigger_deprecation( - 'fakerphp/faker', - '1.20', - 'Provider is deprecated and will no longer be available in Faker 2. Please use a custom provider instead', - ); - - return [ - static::FORMAT_JPG => constant('IMAGETYPE_JPEG'), - static::FORMAT_JPEG => constant('IMAGETYPE_JPEG'), - static::FORMAT_PNG => constant('IMAGETYPE_PNG'), - ]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Internet.php deleted file mode 100644 index 122d9c0c..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Internet.php +++ /dev/null @@ -1,407 +0,0 @@ -generator->parse($format); - } - - /** - * @example 'jdoe@example.com' - * - * @return string - */ - final public function safeEmail() - { - return preg_replace('/\s/u', '', $this->userName() . '@' . static::safeEmailDomain()); - } - - /** - * @example 'jdoe@gmail.com' - * - * @return string - */ - public function freeEmail() - { - return preg_replace('/\s/u', '', $this->userName() . '@' . static::freeEmailDomain()); - } - - /** - * @example 'jdoe@dawson.com' - * - * @return string - */ - public function companyEmail() - { - return preg_replace('/\s/u', '', $this->userName() . '@' . $this->domainName()); - } - - /** - * @example 'gmail.com' - * - * @return string - */ - public static function freeEmailDomain() - { - return static::randomElement(static::$freeEmailDomain); - } - - /** - * @example 'example.org' - * - * @return string - */ - final public static function safeEmailDomain() - { - $domains = [ - 'example.com', - 'example.org', - 'example.net', - ]; - - return static::randomElement($domains); - } - - /** - * @example 'jdoe' - * - * @return string - */ - public function userName() - { - $format = static::randomElement(static::$userNameFormats); - $username = static::bothify($this->generator->parse($format)); - - $username = strtolower(static::transliterate($username)); - - // check if transliterate() didn't support the language and removed all letters - if (trim($username, '._') === '') { - throw new \Exception('userName failed with the selected locale. Try a different locale or activate the "intl" PHP extension.'); - } - - // clean possible trailing dots from first/last names - $username = str_replace('..', '.', $username); - $username = rtrim($username, '.'); - - return $username; - } - - /** - * @example 'fY4èHdZv68' - * - * @return string - */ - public function password($minLength = 6, $maxLength = 20) - { - $pattern = str_repeat('*', $this->numberBetween($minLength, $maxLength)); - - return $this->asciify($pattern); - } - - /** - * @example 'tiramisu.com' - * - * @return string - */ - public function domainName() - { - return $this->domainWord() . '.' . $this->tld(); - } - - /** - * @example 'faber' - * - * @return string - */ - public function domainWord() - { - $lastName = $this->generator->format('lastName'); - - $lastName = strtolower(static::transliterate($lastName)); - - // check if transliterate() didn't support the language and removed all letters - if (trim($lastName, '._') === '') { - throw new \Exception('domainWord failed with the selected locale. Try a different locale or activate the "intl" PHP extension.'); - } - - // clean possible trailing dot from last name - $lastName = rtrim($lastName, '.'); - - return $lastName; - } - - /** - * @example 'com' - * - * @return string - */ - public function tld() - { - return static::randomElement(static::$tld); - } - - /** - * @example 'http://www.runolfsdottir.com/' - * - * @return string - */ - public function url() - { - $format = static::randomElement(static::$urlFormats); - - return $this->generator->parse($format); - } - - /** - * @example 'aut-repellat-commodi-vel-itaque-nihil-id-saepe-nostrum' - * - * @return string - */ - public function slug($nbWords = 6, $variableNbWords = true) - { - if ($nbWords <= 0) { - return ''; - } - - if ($variableNbWords) { - $nbWords = (int) ($nbWords * self::numberBetween(60, 140) / 100) + 1; - } - $words = $this->generator->words($nbWords); - - return implode('-', $words); - } - - /** - * @example '237.149.115.38' - * - * @return string - */ - public function ipv4() - { - return long2ip(Miscellaneous::boolean() ? self::numberBetween(-2147483648, -2) : self::numberBetween(16777216, 2147483647)); - } - - /** - * @example '35cd:186d:3e23:2986:ef9f:5b41:42a4:e6f1' - * - * @return string - */ - public function ipv6() - { - $res = []; - - for ($i = 0; $i < 8; ++$i) { - $res[] = dechex(self::numberBetween(0, 65535)); - } - - return implode(':', $res); - } - - /** - * @example '10.1.1.17' - * - * @return string - */ - public static function localIpv4() - { - $ipBlock = self::randomElement(static::$localIpBlocks); - - return long2ip(static::numberBetween(ip2long($ipBlock[0]), ip2long($ipBlock[1]))); - } - - /** - * @example '32:F1:39:2F:D6:18' - * - * @return string - */ - public static function macAddress() - { - $mac = []; - - for ($i = 0; $i < 6; ++$i) { - $mac[] = sprintf('%02X', self::numberBetween(0, 0xff)); - } - - return implode(':', $mac); - } - - protected static function transliterate($string) - { - if (0 === preg_match('/[^A-Za-z0-9_.]/', $string)) { - return $string; - } - - $transId = 'Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;'; - - if (class_exists(\Transliterator::class, false) && $transliterator = \Transliterator::create($transId)) { - $transString = $transliterator->transliterate($string); - } else { - $transString = static::toAscii($string); - } - - return preg_replace('/[^A-Za-z0-9_.]/u', '', $transString); - } - - protected static function toAscii($string) - { - static $arrayFrom, $arrayTo; - - if (empty($arrayFrom)) { - $transliterationTable = [ - 'IJ' => 'I', 'Ö' => 'O', 'Œ' => 'O', 'Ü' => 'U', 'ä' => 'a', 'æ' => 'a', - 'ij' => 'i', 'ö' => 'o', 'œ' => 'o', 'ü' => 'u', 'ß' => 's', 'ſ' => 's', - 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', - 'Æ' => 'A', 'Ā' => 'A', 'Ą' => 'A', 'Ă' => 'A', 'Ç' => 'C', 'Ć' => 'C', - 'Č' => 'C', 'Ĉ' => 'C', 'Ċ' => 'C', 'Ď' => 'D', 'Đ' => 'D', 'È' => 'E', - 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ē' => 'E', 'Ę' => 'E', 'Ě' => 'E', - 'Ĕ' => 'E', 'Ė' => 'E', 'Ĝ' => 'G', 'Ğ' => 'G', 'Ġ' => 'G', 'Ģ' => 'G', - 'Ĥ' => 'H', 'Ħ' => 'H', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', - 'Ī' => 'I', 'Ĩ' => 'I', 'Ĭ' => 'I', 'Į' => 'I', 'İ' => 'I', 'Ĵ' => 'J', - 'Ķ' => 'K', 'Ľ' => 'K', 'Ĺ' => 'K', 'Ļ' => 'K', 'Ŀ' => 'K', 'Ł' => 'L', - 'Ñ' => 'N', 'Ń' => 'N', 'Ň' => 'N', 'Ņ' => 'N', 'Ŋ' => 'N', 'Ò' => 'O', - 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ø' => 'O', 'Ō' => 'O', 'Ő' => 'O', - 'Ŏ' => 'O', 'Ŕ' => 'R', 'Ř' => 'R', 'Ŗ' => 'R', 'Ś' => 'S', 'Ş' => 'S', - 'Ŝ' => 'S', 'Ș' => 'S', 'Š' => 'S', 'Ť' => 'T', 'Ţ' => 'T', 'Ŧ' => 'T', - 'Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ū' => 'U', 'Ů' => 'U', - 'Ű' => 'U', 'Ŭ' => 'U', 'Ũ' => 'U', 'Ų' => 'U', 'Ŵ' => 'W', 'Ŷ' => 'Y', - 'Ÿ' => 'Y', 'Ý' => 'Y', 'Ź' => 'Z', 'Ż' => 'Z', 'Ž' => 'Z', 'à' => 'a', - 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ā' => 'a', 'ą' => 'a', 'ă' => 'a', - 'å' => 'a', 'ç' => 'c', 'ć' => 'c', 'č' => 'c', 'ĉ' => 'c', 'ċ' => 'c', - 'ď' => 'd', 'đ' => 'd', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', - 'ē' => 'e', 'ę' => 'e', 'ě' => 'e', 'ĕ' => 'e', 'ė' => 'e', 'ƒ' => 'f', - 'ĝ' => 'g', 'ğ' => 'g', 'ġ' => 'g', 'ģ' => 'g', 'ĥ' => 'h', 'ħ' => 'h', - 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ī' => 'i', 'ĩ' => 'i', - 'ĭ' => 'i', 'į' => 'i', 'ı' => 'i', 'ĵ' => 'j', 'ķ' => 'k', 'ĸ' => 'k', - 'ł' => 'l', 'ľ' => 'l', 'ĺ' => 'l', 'ļ' => 'l', 'ŀ' => 'l', 'ñ' => 'n', - 'ń' => 'n', 'ň' => 'n', 'ņ' => 'n', 'ʼn' => 'n', 'ŋ' => 'n', 'ò' => 'o', - 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ø' => 'o', 'ō' => 'o', 'ő' => 'o', - 'ŏ' => 'o', 'ŕ' => 'r', 'ř' => 'r', 'ŗ' => 'r', 'ś' => 's', 'š' => 's', - 'ť' => 't', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ū' => 'u', 'ů' => 'u', - 'ű' => 'u', 'ŭ' => 'u', 'ũ' => 'u', 'ų' => 'u', 'ŵ' => 'w', 'ÿ' => 'y', - 'ý' => 'y', 'ŷ' => 'y', 'ż' => 'z', 'ź' => 'z', 'ž' => 'z', 'Α' => 'A', - 'Ά' => 'A', 'Ἀ' => 'A', 'Ἁ' => 'A', 'Ἂ' => 'A', 'Ἃ' => 'A', 'Ἄ' => 'A', - 'Ἅ' => 'A', 'Ἆ' => 'A', 'Ἇ' => 'A', 'ᾈ' => 'A', 'ᾉ' => 'A', 'ᾊ' => 'A', - 'ᾋ' => 'A', 'ᾌ' => 'A', 'ᾍ' => 'A', 'ᾎ' => 'A', 'ᾏ' => 'A', 'Ᾰ' => 'A', - 'Ᾱ' => 'A', 'Ὰ' => 'A', 'ᾼ' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', - 'Ε' => 'E', 'Έ' => 'E', 'Ἐ' => 'E', 'Ἑ' => 'E', 'Ἒ' => 'E', 'Ἓ' => 'E', - 'Ἔ' => 'E', 'Ἕ' => 'E', 'Ὲ' => 'E', 'Ζ' => 'Z', 'Η' => 'I', 'Ή' => 'I', - 'Ἠ' => 'I', 'Ἡ' => 'I', 'Ἢ' => 'I', 'Ἣ' => 'I', 'Ἤ' => 'I', 'Ἥ' => 'I', - 'Ἦ' => 'I', 'Ἧ' => 'I', 'ᾘ' => 'I', 'ᾙ' => 'I', 'ᾚ' => 'I', 'ᾛ' => 'I', - 'ᾜ' => 'I', 'ᾝ' => 'I', 'ᾞ' => 'I', 'ᾟ' => 'I', 'Ὴ' => 'I', 'ῌ' => 'I', - 'Θ' => 'T', 'Ι' => 'I', 'Ί' => 'I', 'Ϊ' => 'I', 'Ἰ' => 'I', 'Ἱ' => 'I', - 'Ἲ' => 'I', 'Ἳ' => 'I', 'Ἴ' => 'I', 'Ἵ' => 'I', 'Ἶ' => 'I', 'Ἷ' => 'I', - 'Ῐ' => 'I', 'Ῑ' => 'I', 'Ὶ' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', - 'Ν' => 'N', 'Ξ' => 'K', 'Ο' => 'O', 'Ό' => 'O', 'Ὀ' => 'O', 'Ὁ' => 'O', - 'Ὂ' => 'O', 'Ὃ' => 'O', 'Ὄ' => 'O', 'Ὅ' => 'O', 'Ὸ' => 'O', 'Π' => 'P', - 'Ρ' => 'R', 'Ῥ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Ύ' => 'Y', - 'Ϋ' => 'Y', 'Ὑ' => 'Y', 'Ὓ' => 'Y', 'Ὕ' => 'Y', 'Ὗ' => 'Y', 'Ῠ' => 'Y', - 'Ῡ' => 'Y', 'Ὺ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'P', 'Ω' => 'O', - 'Ώ' => 'O', 'Ὠ' => 'O', 'Ὡ' => 'O', 'Ὢ' => 'O', 'Ὣ' => 'O', 'Ὤ' => 'O', - 'Ὥ' => 'O', 'Ὦ' => 'O', 'Ὧ' => 'O', 'ᾨ' => 'O', 'ᾩ' => 'O', 'ᾪ' => 'O', - 'ᾫ' => 'O', 'ᾬ' => 'O', 'ᾭ' => 'O', 'ᾮ' => 'O', 'ᾯ' => 'O', 'Ὼ' => 'O', - 'ῼ' => 'O', 'α' => 'a', 'ά' => 'a', 'ἀ' => 'a', 'ἁ' => 'a', 'ἂ' => 'a', - 'ἃ' => 'a', 'ἄ' => 'a', 'ἅ' => 'a', 'ἆ' => 'a', 'ἇ' => 'a', 'ᾀ' => 'a', - 'ᾁ' => 'a', 'ᾂ' => 'a', 'ᾃ' => 'a', 'ᾄ' => 'a', 'ᾅ' => 'a', 'ᾆ' => 'a', - 'ᾇ' => 'a', 'ὰ' => 'a', 'ᾰ' => 'a', 'ᾱ' => 'a', 'ᾲ' => 'a', 'ᾳ' => 'a', - 'ᾴ' => 'a', 'ᾶ' => 'a', 'ᾷ' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', - 'ε' => 'e', 'έ' => 'e', 'ἐ' => 'e', 'ἑ' => 'e', 'ἒ' => 'e', 'ἓ' => 'e', - 'ἔ' => 'e', 'ἕ' => 'e', 'ὲ' => 'e', 'ζ' => 'z', 'η' => 'i', 'ή' => 'i', - 'ἠ' => 'i', 'ἡ' => 'i', 'ἢ' => 'i', 'ἣ' => 'i', 'ἤ' => 'i', 'ἥ' => 'i', - 'ἦ' => 'i', 'ἧ' => 'i', 'ᾐ' => 'i', 'ᾑ' => 'i', 'ᾒ' => 'i', 'ᾓ' => 'i', - 'ᾔ' => 'i', 'ᾕ' => 'i', 'ᾖ' => 'i', 'ᾗ' => 'i', 'ὴ' => 'i', 'ῂ' => 'i', - 'ῃ' => 'i', 'ῄ' => 'i', 'ῆ' => 'i', 'ῇ' => 'i', 'θ' => 't', 'ι' => 'i', - 'ί' => 'i', 'ϊ' => 'i', 'ΐ' => 'i', 'ἰ' => 'i', 'ἱ' => 'i', 'ἲ' => 'i', - 'ἳ' => 'i', 'ἴ' => 'i', 'ἵ' => 'i', 'ἶ' => 'i', 'ἷ' => 'i', 'ὶ' => 'i', - 'ῐ' => 'i', 'ῑ' => 'i', 'ῒ' => 'i', 'ῖ' => 'i', 'ῗ' => 'i', 'κ' => 'k', - 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => 'k', 'ο' => 'o', 'ό' => 'o', - 'ὀ' => 'o', 'ὁ' => 'o', 'ὂ' => 'o', 'ὃ' => 'o', 'ὄ' => 'o', 'ὅ' => 'o', - 'ὸ' => 'o', 'π' => 'p', 'ρ' => 'r', 'ῤ' => 'r', 'ῥ' => 'r', 'σ' => 's', - 'ς' => 's', 'τ' => 't', 'υ' => 'y', 'ύ' => 'y', 'ϋ' => 'y', 'ΰ' => 'y', - 'ὐ' => 'y', 'ὑ' => 'y', 'ὒ' => 'y', 'ὓ' => 'y', 'ὔ' => 'y', 'ὕ' => 'y', - 'ὖ' => 'y', 'ὗ' => 'y', 'ὺ' => 'y', 'ῠ' => 'y', 'ῡ' => 'y', 'ῢ' => 'y', - 'ῦ' => 'y', 'ῧ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'p', 'ω' => 'o', - 'ώ' => 'o', 'ὠ' => 'o', 'ὡ' => 'o', 'ὢ' => 'o', 'ὣ' => 'o', 'ὤ' => 'o', - 'ὥ' => 'o', 'ὦ' => 'o', 'ὧ' => 'o', 'ᾠ' => 'o', 'ᾡ' => 'o', 'ᾢ' => 'o', - 'ᾣ' => 'o', 'ᾤ' => 'o', 'ᾥ' => 'o', 'ᾦ' => 'o', 'ᾧ' => 'o', 'ὼ' => 'o', - 'ῲ' => 'o', 'ῳ' => 'o', 'ῴ' => 'o', 'ῶ' => 'o', 'ῷ' => 'o', 'А' => 'A', - 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', - 'Ж' => 'Z', 'З' => 'Z', 'И' => 'I', 'Й' => 'I', 'К' => 'K', 'Л' => 'L', - 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', - 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'K', 'Ц' => 'T', 'Ч' => 'C', - 'Ш' => 'S', 'Щ' => 'S', 'Ы' => 'Y', 'Э' => 'E', 'Ю' => 'Y', 'Я' => 'Y', - 'а' => 'A', 'б' => 'B', 'в' => 'V', 'г' => 'G', 'д' => 'D', 'е' => 'E', - 'ё' => 'E', 'ж' => 'Z', 'з' => 'Z', 'и' => 'I', 'й' => 'I', 'к' => 'K', - 'л' => 'L', 'м' => 'M', 'н' => 'N', 'о' => 'O', 'п' => 'P', 'р' => 'R', - 'с' => 'S', 'т' => 'T', 'у' => 'U', 'ф' => 'F', 'х' => 'K', 'ц' => 'T', - 'ч' => 'C', 'ш' => 'S', 'щ' => 'S', 'ы' => 'Y', 'э' => 'E', 'ю' => 'Y', - 'я' => 'Y', 'ð' => 'd', 'Ð' => 'D', 'þ' => 't', 'Þ' => 'T', 'ა' => 'a', - 'ბ' => 'b', 'გ' => 'g', 'დ' => 'd', 'ე' => 'e', 'ვ' => 'v', 'ზ' => 'z', - 'თ' => 't', 'ი' => 'i', 'კ' => 'k', 'ლ' => 'l', 'მ' => 'm', 'ნ' => 'n', - 'ო' => 'o', 'პ' => 'p', 'ჟ' => 'z', 'რ' => 'r', 'ს' => 's', 'ტ' => 't', - 'უ' => 'u', 'ფ' => 'p', 'ქ' => 'k', 'ღ' => 'g', 'ყ' => 'q', 'შ' => 's', - 'ჩ' => 'c', 'ც' => 't', 'ძ' => 'd', 'წ' => 't', 'ჭ' => 'c', 'ხ' => 'k', - 'ჯ' => 'j', 'ჰ' => 'h', 'ţ' => 't', 'ʼ' => "'", '̧' => '', 'ḩ' => 'h', - '‘' => "'", '’' => "'", 'ừ' => 'u', '/' => '', 'ế' => 'e', 'ả' => 'a', - 'ị' => 'i', 'ậ' => 'a', 'ệ' => 'e', 'ỉ' => 'i', 'ồ' => 'o', 'ề' => 'e', - 'ơ' => 'o', 'ạ' => 'a', 'ẵ' => 'a', 'ư' => 'u', 'ằ' => 'a', 'ầ' => 'a', - 'ḑ' => 'd', 'Ḩ' => 'H', 'Ḑ' => 'D', 'ș' => 's', 'ț' => 't', 'ộ' => 'o', - 'ắ' => 'a', 'ş' => 's', "'" => '', 'ու' => 'u', 'ա' => 'a', 'բ' => 'b', - 'գ' => 'g', 'դ' => 'd', 'ե' => 'e', 'զ' => 'z', 'է' => 'e', 'ը' => 'y', - 'թ' => 't', 'ժ' => 'zh', 'ի' => 'i', 'լ' => 'l', 'խ' => 'kh', 'ծ' => 'ts', - 'կ' => 'k', 'հ' => 'h', 'ձ' => 'dz', 'ղ' => 'gh', 'ճ' => 'ch', 'մ' => 'm', - 'յ' => 'y', 'ն' => 'n', 'շ' => 'sh', 'ո' => 'o', 'չ' => 'ch', 'պ' => 'p', - 'ջ' => 'j', 'ռ' => 'r', 'ս' => 's', 'վ' => 'v', 'տ' => 't', 'ր' => 'r', - 'ց' => 'ts', 'փ' => 'p', 'ք' => 'q', 'և' => 'ev', 'օ' => 'o', 'ֆ' => 'f', - ]; - $arrayFrom = array_keys($transliterationTable); - $arrayTo = array_values($transliterationTable); - } - - return str_replace($arrayFrom, $arrayTo, $string); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Lorem.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Lorem.php deleted file mode 100644 index 2cfb70ea..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Lorem.php +++ /dev/null @@ -1,228 +0,0 @@ -generator->parse('{{bloodType}}{{bloodRh}}'); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Miscellaneous.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Miscellaneous.php deleted file mode 100644 index 354f67bb..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Miscellaneous.php +++ /dev/null @@ -1,342 +0,0 @@ - [ - '4539###########', - '4556###########', - '4916###########', - '4532###########', - '4929###########', - '40240071#######', - '4485###########', - '4716###########', - '4##############', - ], - 'Visa Retired' => [ - '4539########', - '4556########', - '4916########', - '4532########', - '4929########', - '40240071####', - '4485########', - '4716########', - '4###########', - ], - 'MasterCard' => [ - '2221###########', - '23#############', - '24#############', - '25#############', - '26#############', - '2720###########', - '51#############', - '52#############', - '53#############', - '54#############', - '55#############', - ], - 'American Express' => [ - '34############', - '37############', - ], - 'Discover Card' => [ - '6011###########', - ], - 'JCB' => [ - '3528###########', - '3589###########', - ], - ]; - - /** - * @var array list of IBAN formats, source: @see https://www.swift.com/standards/data-standards/iban - */ - protected static $ibanFormats = [ - 'AD' => [['n', 4], ['n', 4], ['c', 12]], - 'AE' => [['n', 3], ['n', 16]], - 'AL' => [['n', 8], ['c', 16]], - 'AT' => [['n', 5], ['n', 11]], - 'AZ' => [['a', 4], ['c', 20]], - 'BA' => [['n', 3], ['n', 3], ['n', 8], ['n', 2]], - 'BE' => [['n', 3], ['n', 7], ['n', 2]], - 'BG' => [['a', 4], ['n', 4], ['n', 2], ['c', 8]], - 'BH' => [['a', 4], ['c', 14]], - 'BR' => [['n', 8], ['n', 5], ['n', 10], ['a', 1], ['c', 1]], - 'CH' => [['n', 5], ['c', 12]], - 'CR' => [['n', 4], ['n', 14]], - 'CY' => [['n', 3], ['n', 5], ['c', 16]], - 'CZ' => [['n', 4], ['n', 6], ['n', 10]], - 'DE' => [['n', 8], ['n', 10]], - 'DK' => [['n', 4], ['n', 9], ['n', 1]], - 'DO' => [['c', 4], ['n', 20]], - 'EE' => [['n', 2], ['n', 2], ['n', 11], ['n', 1]], - 'EG' => [['n', 4], ['n', 4], ['n', 17]], - 'ES' => [['n', 4], ['n', 4], ['n', 1], ['n', 1], ['n', 10]], - 'FI' => [['n', 6], ['n', 7], ['n', 1]], - 'FR' => [['n', 5], ['n', 5], ['c', 11], ['n', 2]], - 'GB' => [['a', 4], ['n', 6], ['n', 8]], - 'GE' => [['a', 2], ['n', 16]], - 'GI' => [['a', 4], ['c', 15]], - 'GR' => [['n', 3], ['n', 4], ['c', 16]], - 'GT' => [['c', 4], ['c', 20]], - 'HR' => [['n', 7], ['n', 10]], - 'HU' => [['n', 3], ['n', 4], ['n', 1], ['n', 15], ['n', 1]], - 'IE' => [['a', 4], ['n', 6], ['n', 8]], - 'IL' => [['n', 3], ['n', 3], ['n', 13]], - 'IS' => [['n', 4], ['n', 2], ['n', 6], ['n', 10]], - 'IT' => [['a', 1], ['n', 5], ['n', 5], ['c', 12]], - 'KW' => [['a', 4], ['n', 22]], - 'KZ' => [['n', 3], ['c', 13]], - 'LB' => [['n', 4], ['c', 20]], - 'LI' => [['n', 5], ['c', 12]], - 'LT' => [['n', 5], ['n', 11]], - 'LU' => [['n', 3], ['c', 13]], - 'LV' => [['a', 4], ['c', 13]], - 'MC' => [['n', 5], ['n', 5], ['c', 11], ['n', 2]], - 'MD' => [['c', 2], ['c', 18]], - 'ME' => [['n', 3], ['n', 13], ['n', 2]], - 'MK' => [['n', 3], ['c', 10], ['n', 2]], - 'MR' => [['n', 5], ['n', 5], ['n', 11], ['n', 2]], - 'MT' => [['a', 4], ['n', 5], ['c', 18]], - 'MU' => [['a', 4], ['n', 2], ['n', 2], ['n', 12], ['n', 3], ['a', 3]], - 'NL' => [['a', 4], ['n', 10]], - 'NO' => [['n', 4], ['n', 6], ['n', 1]], - 'PK' => [['a', 4], ['c', 16]], - 'PL' => [['n', 8], ['n', 16]], - 'PS' => [['a', 4], ['c', 21]], - 'PT' => [['n', 4], ['n', 4], ['n', 11], ['n', 2]], - 'RO' => [['a', 4], ['c', 16]], - 'RS' => [['n', 3], ['n', 13], ['n', 2]], - 'SA' => [['n', 2], ['c', 18]], - 'SE' => [['n', 3], ['n', 16], ['n', 1]], - 'SI' => [['n', 5], ['n', 8], ['n', 2]], - 'SK' => [['n', 4], ['n', 6], ['n', 10]], - 'SM' => [['a', 1], ['n', 5], ['n', 5], ['c', 12]], - 'TN' => [['n', 2], ['n', 3], ['n', 13], ['n', 2]], - 'TR' => [['n', 5], ['n', 1], ['c', 16]], - 'VG' => [['a', 4], ['n', 16]], - ]; - - /** - * @return string Returns a credit card vendor name - * - * @example 'MasterCard' - */ - public static function creditCardType() - { - return static::randomElement(static::$cardVendors); - } - - /** - * Returns the String of a credit card number. - * - * @param string $type Supporting any of 'Visa', 'MasterCard', 'American Express', 'Discover' and 'JCB' - * @param bool $formatted Set to true if the output string should contain one separator every 4 digits - * @param string $separator Separator string for formatting card number. Defaults to dash (-). - * - * @return string - * - * @example '4485480221084675' - */ - public static function creditCardNumber($type = null, $formatted = false, $separator = '-') - { - if (null === $type) { - $type = static::creditCardType(); - } - $mask = static::randomElement(static::$cardParams[$type]); - - $number = static::numerify($mask); - $number .= Luhn::computeCheckDigit($number); - - if ($formatted) { - $p1 = substr($number, 0, 4); - $p2 = substr($number, 4, 4); - $p3 = substr($number, 8, 4); - $p4 = substr($number, 12); - $number = $p1 . $separator . $p2 . $separator . $p3 . $separator . $p4; - } - - return $number; - } - - /** - * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date - * - * @return \DateTime - * - * @example 04/13 - */ - public function creditCardExpirationDate($valid = true) - { - if ($valid) { - return $this->generator->dateTimeBetween('now', '36 months'); - } - - return $this->generator->dateTimeBetween('-36 months', '36 months'); - } - - /** - * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date - * @param string $expirationDateFormat - * - * @return string - * - * @example '04/13' - */ - public function creditCardExpirationDateString($valid = true, $expirationDateFormat = null) - { - return $this->creditCardExpirationDate($valid)->format(null === $expirationDateFormat ? static::$expirationDateFormat : $expirationDateFormat); - } - - /** - * @param bool $valid True (by default) to get a valid expiration date, false to get a maybe valid date - * - * @return array - */ - public function creditCardDetails($valid = true) - { - $type = static::creditCardType(); - - return [ - 'type' => $type, - 'number' => static::creditCardNumber($type), - 'name' => $this->generator->name(), - 'expirationDate' => $this->creditCardExpirationDateString($valid), - ]; - } - - /** - * International Bank Account Number (IBAN) - * - * @see http://en.wikipedia.org/wiki/International_Bank_Account_Number - * - * @param string $countryCode ISO 3166-1 alpha-2 country code - * @param string $prefix for generating bank account number of a specific bank - * @param int $length total length without country code and 2 check digits - * - * @return string - */ - public static function iban($countryCode = null, $prefix = '', $length = null) - { - $countryCode = null === $countryCode ? self::randomKey(self::$ibanFormats) : strtoupper($countryCode); - - $format = !isset(static::$ibanFormats[$countryCode]) ? null : static::$ibanFormats[$countryCode]; - - if ($length === null) { - if ($format === null) { - $length = 24; - } else { - $length = 0; - - foreach ($format as $part) { - [$class, $groupCount] = $part; - $length += $groupCount; - } - } - } - - if ($format === null) { - $format = [['n', $length]]; - } - - $expandedFormat = ''; - - foreach ($format as $item) { - [$class, $length] = $item; - $expandedFormat .= str_repeat($class, $length); - } - - $result = $prefix; - $expandedFormat = substr($expandedFormat, strlen($result)); - - foreach (str_split($expandedFormat) as $class) { - switch ($class) { - default: - case 'c': - $result .= Miscellaneous::boolean() ? static::randomDigit() : strtoupper(static::randomLetter()); - - break; - - case 'a': - $result .= strtoupper(static::randomLetter()); - - break; - - case 'n': - $result .= static::randomDigit(); - - break; - } - } - - $checksum = Iban::checksum($countryCode . '00' . $result); - - return $countryCode . $checksum . $result; - } - - /** - * Return the String of a SWIFT/BIC number - * - * @example 'RZTIAT22263' - * - * @see http://en.wikipedia.org/wiki/ISO_9362 - * - * @return string Swift/Bic number - */ - public static function swiftBicNumber() - { - return self::regexify('^([A-Z]){4}([A-Z]){2}([0-9A-Z]){2}([0-9A-Z]{3})?$'); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Person.php deleted file mode 100644 index c11a72bd..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Person.php +++ /dev/null @@ -1,147 +0,0 @@ -generator->parse($format); - } - - /** - * @param string|null $gender 'male', 'female' or null for any - * - * @return string - * - * @example 'John' - */ - public function firstName($gender = null) - { - if ($gender === static::GENDER_MALE) { - return static::firstNameMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return static::firstNameFemale(); - } - - return $this->generator->parse(static::randomElement(static::$firstNameFormat)); - } - - /** - * @return string - */ - public static function firstNameMale() - { - return static::randomElement(static::$firstNameMale); - } - - /** - * @return string - */ - public static function firstNameFemale() - { - return static::randomElement(static::$firstNameFemale); - } - - /** - * @example 'Doe' - * - * @return string - */ - public function lastName() - { - return static::randomElement(static::$lastName); - } - - /** - * @example 'Mrs.' - * - * @param string|null $gender 'male', 'female' or null for any - * - * @return string - */ - public function title($gender = null) - { - if ($gender === static::GENDER_MALE) { - return static::titleMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return static::titleFemale(); - } - - return $this->generator->parse(static::randomElement(static::$titleFormat)); - } - - /** - * @example 'Mr.' - * - * @return string - */ - public static function titleMale() - { - return static::randomElement(static::$titleMale); - } - - /** - * @example 'Mrs.' - * - * @return string - */ - public static function titleFemale() - { - return static::randomElement(static::$titleFemale); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/PhoneNumber.php deleted file mode 100644 index 515ef57e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/PhoneNumber.php +++ /dev/null @@ -1,270 +0,0 @@ -generator->parse(static::randomElement(static::$formats))); - } - - /** - * @example +11134567890 - * - * @return string - */ - public function e164PhoneNumber() - { - return static::numerify($this->generator->parse(static::randomElement(static::$e164Formats))); - } - - /** - * International Mobile Equipment Identity (IMEI) - * - * @see http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity - * @see http://imei-number.com/imei-validation-check/ - * - * @example '720084494799532' - * - * @return int $imei - */ - public function imei() - { - $imei = (string) static::numerify('##############'); - $imei .= Luhn::computeCheckDigit($imei); - - return $imei; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/Text.php deleted file mode 100644 index 585d5b5a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/Text.php +++ /dev/null @@ -1,202 +0,0 @@ -realTextBetween((int) round($maxNbChars * 0.8), $maxNbChars, $indexSize); - } - - /** - * Generate a text string by the Markov chain algorithm. - * - * Depending on the $maxNbChars, returns a random valid looking text. The algorithm - * generates a weighted table with the specified number of words as the index and the - * possible following words as the value. - * - * @example 'Alice, swallowing down her flamingo, and began by taking the little golden key' - * - * @param int $minNbChars Minimum number of characters the text should contain (maximum: 8) - * @param int $maxNbChars Maximum number of characters the text should contain (minimum: 10) - * @param int $indexSize Determines how many words are considered for the generation of the next word. - * The minimum is 1, and it produces a higher level of randomness, although the - * generated text usually doesn't make sense. Higher index sizes (up to 5) - * produce more correct text, at the price of less randomness. - * - * @return string - */ - public function realTextBetween($minNbChars = 160, $maxNbChars = 200, $indexSize = 2) - { - if ($minNbChars < 1) { - throw new \InvalidArgumentException('minNbChars must be at least 1'); - } - - if ($maxNbChars < 10) { - throw new \InvalidArgumentException('maxNbChars must be at least 10'); - } - - if ($indexSize < 1) { - throw new \InvalidArgumentException('indexSize must be at least 1'); - } - - if ($indexSize > 5) { - throw new \InvalidArgumentException('indexSize must be at most 5'); - } - - if ($minNbChars >= $maxNbChars) { - throw new \InvalidArgumentException('minNbChars must be smaller than maxNbChars'); - } - - $words = $this->getConsecutiveWords($indexSize); - $iterations = 0; - - do { - ++$iterations; - - if ($iterations >= 100) { - throw new \OverflowException(sprintf('Maximum retries of %d reached without finding a valid real text', $iterations)); - } - - $result = $this->generateText($maxNbChars, $words); - } while (static::strlen($result) <= $minNbChars); - - return $result; - } - - /** - * @param int $maxNbChars - * @param array $words - * - * @return string - */ - protected function generateText($maxNbChars, $words) - { - $result = []; - $resultLength = 0; - // take a random starting point - $next = static::randomKey($words); - - while ($resultLength < $maxNbChars && isset($words[$next])) { - // fetch a random word to append - $word = static::randomElement($words[$next]); - - // calculate next index - $currentWords = static::explode($next); - $currentWords[] = $word; - array_shift($currentWords); - $next = static::implode($currentWords); - - // ensure text starts with an uppercase letter - if ($resultLength == 0 && !static::validStart($word)) { - continue; - } - - // append the element - $result[] = $word; - $resultLength += static::strlen($word) + static::$separatorLen; - } - - // remove the element that caused the text to overflow - array_pop($result); - - // build result - $result = static::implode($result); - - return static::appendEnd($result); - } - - protected function getConsecutiveWords($indexSize) - { - if (!isset($this->consecutiveWords[$indexSize])) { - $parts = $this->getExplodedText(); - $words = []; - $index = []; - - for ($i = 0; $i < $indexSize; ++$i) { - $index[] = array_shift($parts); - } - - for ($i = 0, $count = count($parts); $i < $count; ++$i) { - $stringIndex = static::implode($index); - - if (!isset($words[$stringIndex])) { - $words[$stringIndex] = []; - } - $word = $parts[$i]; - $words[$stringIndex][] = $word; - array_shift($index); - $index[] = $word; - } - // cache look up words for performance - $this->consecutiveWords[$indexSize] = $words; - } - - return $this->consecutiveWords[$indexSize]; - } - - protected function getExplodedText() - { - if ($this->explodedText === null) { - $this->explodedText = static::explode(preg_replace('/\s+/u', ' ', static::$baseText)); - } - - return $this->explodedText; - } - - protected static function explode($text) - { - return explode(static::$separator, $text); - } - - protected static function implode($words) - { - return implode(static::$separator, $words); - } - - protected static function strlen($text) - { - return function_exists('mb_strlen') ? mb_strlen($text, 'UTF-8') : strlen($text); - } - - protected static function validStart($word) - { - $isValid = true; - - if (static::$textStartsWithUppercase) { - $isValid = preg_match('/^\p{Lu}/u', $word); - } - - return $isValid; - } - - protected static function appendEnd($text) - { - return preg_replace("/([ ,-:;\x{2013}\x{2014}]+$)/us", '', $text) . '.'; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/UserAgent.php b/old_vendor/fakerphp/faker/src/Faker/Provider/UserAgent.php deleted file mode 100644 index 752df4d3..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/UserAgent.php +++ /dev/null @@ -1,219 +0,0 @@ -> 8) | (($tLo & 0xff000000) >> 24); - $tMi = (($tMi & 0x00ff) << 8) | (($tMi & 0xff00) >> 8); - $tHi = (($tHi & 0x00ff) << 8) | (($tHi & 0xff00) >> 8); - } - - // apply version number - $tHi &= 0x0fff; - $tHi |= (3 << 12); - - // cast to string - return sprintf( - '%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', - $tLo, - $tMi, - $tHi, - $csHi, - $csLo, - $byte[10], - $byte[11], - $byte[12], - $byte[13], - $byte[14], - $byte[15], - ); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php deleted file mode 100644 index 87facaaf..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php +++ /dev/null @@ -1,217 +0,0 @@ - '02', - 'الإسماعيلية' => '19', - 'أسوان' => '28', - 'أسيوط' => '25', - 'الأقصر' => '29', - 'البحر الأحمر' => '31', - 'البحيرة' => '18', - 'بني سويف' => '22', - 'بورسعيد' => '03', - 'جنوب سيناء' => '35', - 'القاهرة' => '01', - 'الدقهلية' => '12', - 'دمياط' => '11', - 'سوهاج' => '26', - 'السويس' => '04', - 'الشرقية' => '13', - 'شمال سيناء' => '34', - 'الغربية' => '16', - 'الفيوم' => '23', - 'القليوبية' => '14', - 'قنا' => '27', - 'كفر الشيخ' => '15', - 'مطروح' => '33', - 'المنوفية' => '17', - 'المنيا' => '24', - 'الوادي الجديد' => '32', - ]; - - protected static $buildingNumber = ['%####', '%###', '%#']; - - protected static $postcode = ['#####', '#####-####']; - - /** - * @see http://www.nationsonline.org/oneworld/countrynames_arabic.htm - */ - protected static $country = [ - 'الكاريبي', 'أمريكا الوسطى', 'أنتيجوا وبربودا', 'أنجولا', 'أنجويلا', 'أندورا', 'اندونيسيا', 'أورجواي', 'أوروبا', 'أوزبكستان', 'أوغندا', 'أوقيانوسيا', 'أوقيانوسيا النائية', 'أوكرانيا', 'ايران', 'أيرلندا', 'أيسلندا', 'ايطاليا', - 'بابوا غينيا الجديدة', 'باراجواي', 'باكستان', 'بالاو', 'بتسوانا', 'بتكايرن', 'بربادوس', 'برمودا', 'بروناي', 'بلجيكا', 'بلغاريا', 'بليز', 'بنجلاديش', 'بنما', 'بنين', 'بوتان', 'بورتوريكو', 'بوركينا فاسو', 'بوروندي', 'بولندا', 'بوليفيا', 'بولينيزيا', 'بولينيزيا الفرنسية', 'بيرو', - 'تانزانيا', 'تايلند', 'تايوان', 'تركمانستان', 'تركيا', 'ترينيداد وتوباغو', 'تشاد', 'توجو', 'توفالو', 'توكيلو', 'تونجا', 'تونس', 'تيمور الشرقية', - 'جامايكا', 'جبل طارق', 'جرينادا', 'جرينلاند', 'جزر الأنتيل الهولندية', 'جزر الترك وجايكوس', 'جزر القمر', 'جزر الكايمن', 'جزر المارشال', 'جزر الملديف', 'جزر الولايات المتحدة البعيدة الصغيرة', 'جزر أولان', 'جزر سليمان', 'جزر فارو', 'جزر فرجين الأمريكية', 'جزر فرجين البريطانية', 'جزر فوكلاند', 'جزر كوك', 'جزر كوكوس', 'جزر ماريانا الشمالية', 'جزر والس وفوتونا', 'جزيرة الكريسماس', 'جزيرة بوفيه', 'جزيرة مان', 'جزيرة نورفوك', 'جزيرة هيرد وماكدونالد', 'جمهورية افريقيا الوسطى', 'جمهورية التشيك', 'جمهورية الدومينيك', 'جمهورية الكونغو الديمقراطية', 'جمهورية جنوب افريقيا', 'جنوب آسيا', 'جنوب أوروبا', 'جنوب شرق آسيا', 'جنوب وسط آسيا', 'جواتيمالا', 'جوادلوب', 'جوام', 'جورجيا', 'جورجيا الجنوبية وجزر ساندويتش الجنوبية', 'جيبوتي', 'جيرسي', - 'دومينيكا', - 'رواندا', 'روسيا', 'روسيا البيضاء', 'رومانيا', 'روينيون', - 'زامبيا', 'زيمبابوي', - 'ساحل العاج', 'ساموا', 'ساموا الأمريكية', 'سانت بيير وميكولون', 'سانت فنسنت وغرنادين', 'سانت كيتس ونيفيس', 'سانت لوسيا', 'سانت مارتين', 'سانت هيلنا', 'سان مارينو', 'ساو تومي وبرينسيبي', 'سريلانكا', 'سفالبارد وجان مايان', 'سلوفاكيا', 'سلوفينيا', 'سنغافورة', 'سوازيلاند', 'سوريا', 'سورينام', 'سويسرا', 'سيراليون', 'سيشل', - 'شرق آسيا', 'شرق افريقيا', 'شرق أوروبا', 'شمال افريقيا', 'شمال أمريكا', 'شمال أوروبا', 'شيلي', - 'صربيا', 'صربيا والجبل الأسود', - 'طاجكستان', - 'عمان', - 'غامبيا', 'غانا', 'غرب آسيا', 'غرب افريقيا', 'غرب أوروبا', 'غويانا', 'غيانا', 'غينيا', 'غينيا الاستوائية', 'غينيا بيساو', - 'فانواتو', 'فرنسا', 'فلسطين', 'فنزويلا', 'فنلندا', 'فيتنام', 'فيجي', - 'قبرص', 'قرغيزستان', 'قطر', - 'كازاخستان', 'كاليدونيا الجديدة', 'كرواتيا', 'كمبوديا', 'كندا', 'كوبا', 'كوريا الجنوبية', 'كوريا الشمالية', 'كوستاريكا', 'كولومبيا', 'كومنولث الدول المستقلة', 'كيريباتي', 'كينيا', - 'لاتفيا', 'لاوس', 'لبنان', 'لوكسمبورج', 'ليبيا', 'ليبيريا', 'ليتوانيا', 'ليختنشتاين', 'ليسوتو', - 'مارتينيك', 'ماكاو الصينية', 'مالطا', 'مالي', 'ماليزيا', 'مايوت', 'مدغشقر', 'مصر', 'مقدونيا', 'ملاوي', 'منغوليا', 'موريتانيا', 'موريشيوس', 'موزمبيق', 'مولدافيا', 'موناكو', 'مونتسرات', 'ميانمار', 'ميكرونيزيا', 'ميلانيزيا', - 'ناميبيا', 'نورو', 'نيبال', 'نيجيريا', 'نيكاراجوا', 'نيوزيلاندا', 'نيوي', - 'هايتي', 'هندوراس', 'هولندا', 'هونج كونج الصينية', - 'وسط آسيا', 'وسط افريقيا', - ]; - - protected static $cityFormats = [ - '{{cityName}}', - ]; - - protected static $streetNameFormats = [ - '{{streetPrefix}} {{firstName}} {{lastName}}', - ]; - - protected static $streetAddressFormats = [ - '{{buildingNumber}} {{streetName}}', - '{{buildingNumber}} {{streetName}} {{secondaryAddress}}', - ]; - - protected static $addressFormats = [ - "{{streetAddress}}\n{{city}}", - ]; - - protected static $secondaryAddressFormats = ['شقة رقم. ##', 'عمارة رقم ##']; - - /** - * @example 'شرق' - */ - public static function cityPrefix() - { - return static::randomElement(static::$cityPrefix); - } - - /** - * @example 'المعادي' - */ - public static function cityName() - { - return static::randomElement(static::$cityName); - } - - /** - * @example 'شارع' - */ - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - /** - * @example 'شقة رقم. 350' - */ - public static function secondaryAddress() - { - return static::numerify(static::randomElement(static::$secondaryAddressFormats)); - } - - /** - * @example 'الإسكندرية' - */ - public static function governorate() - { - return static::randomKey(static::$governorates); - } - - /** - * @example '01' - * - * @return string - */ - public static function governorateId() - { - return static::randomElement(static::$governorates); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php deleted file mode 100644 index c25426a4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php +++ /dev/null @@ -1,65 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'wewebit.jo' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php deleted file mode 100644 index 1e2eaaf0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php +++ /dev/null @@ -1,16 +0,0 @@ -= 2000 ? 3 : 2; - $fullBirthDate = date('ymd', $randomBirthDateTimestamp); - $governorateId = Address::governorateId(); - $birthRegistrationSequence = mt_rand(1, 500); - - if ($gender === static::GENDER_MALE) { - $birthRegistrationSequence = $birthRegistrationSequence | 1; // Convert to the nearest odd number - } elseif ($gender === static::GENDER_FEMALE) { - $birthRegistrationSequence = $birthRegistrationSequence & ~1; // Convert to the nearest even number - } - - $birthRegistrationSequence = str_pad((string) $birthRegistrationSequence, 4, '0', STR_PAD_LEFT); - $randomCheckDigit = mt_rand(1, 9); - - return $centuryId . $fullBirthDate . $governorateId . $birthRegistrationSequence . $randomCheckDigit; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php deleted file mode 100644 index 099c408a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php +++ /dev/null @@ -1,31 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'wewebit.jo' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php deleted file mode 100644 index 27db4e54..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php +++ /dev/null @@ -1,108 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'wewebit.jo' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php deleted file mode 100644 index a09a281d..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php +++ /dev/null @@ -1,22 +0,0 @@ -generator->parse(static::randomElement(static::$lastNameFormat)); - } - - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php deleted file mode 100644 index 22051df4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php +++ /dev/null @@ -1,20 +0,0 @@ -generator->parse($format)); - } - - /** - * Generates valid czech IČO - * - * @see http://phpfashion.com/jak-overit-platne-ic-a-rodne-cislo - * - * @return string - */ - public function ico() - { - $ico = static::numerify('#######'); - $split = str_split($ico); - $prod = 0; - - foreach ([8, 7, 6, 5, 4, 3, 2] as $i => $p) { - $prod += $p * $split[$i]; - } - $mod = $prod % 11; - - if ($mod === 0 || $mod === 10) { - return "{$ico}1"; - } - - if ($mod === 1) { - return "{$ico}0"; - } - - return $ico . (11 - $mod); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php b/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php deleted file mode 100644 index e136e651..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php +++ /dev/null @@ -1,65 +0,0 @@ -format('w')]; - } - - /** - * @param \DateTime|int|string $max maximum timestamp used as random end limit, default to "now" - * - * @return string - * - * @example '2' - */ - public static function dayOfMonth($max = 'now') - { - return static::dateTime($max)->format('j'); - } - - /** - * Full date with inflected month - * - * @return string - * - * @example '16. listopadu 2003' - */ - public function formattedDate() - { - $format = static::randomElement(static::$formattedDateFormat); - - return $this->generator->parse($format); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php deleted file mode 100644 index ce5b2661..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -generator->boolean() ? static::GENDER_MALE : static::GENDER_FEMALE; - } - - $startTimestamp = strtotime(sprintf('-%d year', $maxAge)); - $endTimestamp = strtotime(sprintf('-%d year', $minAge)); - $randTimestamp = self::numberBetween($startTimestamp, $endTimestamp); - - $year = (int) (date('Y', $randTimestamp)); - $month = (int) (date('n', $randTimestamp)); - $day = (int) (date('j', $randTimestamp)); - $suffix = self::numberBetween(0, 999); - - // women has +50 to month - if ($gender == static::GENDER_FEMALE) { - $month += 50; - } - // from year 2004 everyone has +20 to month when birth numbers in one day are exhausted - if ($year >= 2004 && $this->generator->boolean(10)) { - $month += 20; - } - - $birthNumber = sprintf('%02d%02d%02d%03d', $year % 100, $month, $day, $suffix); - - // from year 1954 birth number includes CRC - if ($year >= 1954) { - $crc = intval($birthNumber, 10) % 11; - - if ($crc == 10) { - $crc = 0; - } - $birthNumber .= sprintf('%d', $crc); - } - - // add slash - if ($this->generator->boolean($slashProbability)) { - $birthNumber = substr($birthNumber, 0, 6) . '/' . substr($birthNumber, 6); - } - - return $birthNumber; - } - - public static function birthNumberMale() - { - return static::birthNumber(static::GENDER_MALE); - } - - public static function birthNumberFemale() - { - return static::birthNumber(static::GENDER_FEMALE); - } - - public function title($gender = null) - { - return static::titleMale(); - } - - /** - * replaced by specific unisex Czech title - */ - public static function titleMale() - { - return static::randomElement(static::$title); - } - - /** - * replaced by specific unisex Czech title - */ - public static function titleFemale() - { - return static::titleMale(); - } - - /** - * @param string|null $gender 'male', 'female' or null for any - * - * @example 'Albrecht' - */ - public function lastName($gender = null) - { - if ($gender === static::GENDER_MALE) { - return static::lastNameMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return static::lastNameFemale(); - } - - return $this->generator->parse(static::randomElement(static::$lastNameFormat)); - } - - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php deleted file mode 100644 index a527a254..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php +++ /dev/null @@ -1,14 +0,0 @@ -format('dmy'), static::numerify('%###')); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php deleted file mode 100644 index 6e8c28da..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php +++ /dev/null @@ -1,18 +0,0 @@ -format('dmy'); - - do { - $consecutiveNumber = (string) self::numberBetween(100, 999); - - $verificationNumber = ( - (int) $consecutiveNumber[0] * 3 - + (int) $consecutiveNumber[1] * 7 - + (int) $consecutiveNumber[2] * 9 - + (int) $birthDateString[0] * 5 - + (int) $birthDateString[1] * 8 - + (int) $birthDateString[2] * 4 - + (int) $birthDateString[3] * 2 - + (int) $birthDateString[4] * 1 - + (int) $birthDateString[5] * 6 - ) % 11; - } while ($verificationNumber == 10); - - return sprintf('%s%s%s', $consecutiveNumber, $verificationNumber, $birthDateString); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php deleted file mode 100644 index 00fbe676..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php +++ /dev/null @@ -1,23 +0,0 @@ - 'Aargau'], - ['AI' => 'Appenzell Innerrhoden'], - ['AR' => 'Appenzell Ausserrhoden'], - ['BE' => 'Bern'], - ['BL' => 'Basel-Landschaft'], - ['BS' => 'Basel-Stadt'], - ['FR' => 'Freiburg'], - ['GE' => 'Genf'], - ['GL' => 'Glarus'], - ['GR' => 'Graubünden'], - ['JU' => 'Jura'], - ['LU' => 'Luzern'], - ['NE' => 'Neuenburg'], - ['NW' => 'Nidwalden'], - ['OW' => 'Obwalden'], - ['SG' => 'St. Gallen'], - ['SH' => 'Schaffhausen'], - ['SO' => 'Solothurn'], - ['SZ' => 'Schwyz'], - ['TG' => 'Thurgau'], - ['TI' => 'Tessin'], - ['UR' => 'Uri'], - ['VD' => 'Waadt'], - ['VS' => 'Wallis'], - ['ZG' => 'Zug'], - ['ZH' => 'Zürich'], - ]; - - protected static $country = [ - 'Afghanistan', 'Alandinseln', 'Albanien', 'Algerien', 'Amerikanisch-Ozeanien', 'Amerikanisch-Samoa', 'Amerikanische Jungferninseln', 'Andorra', 'Angola', 'Anguilla', 'Antarktis', 'Antigua und Barbuda', 'Argentinien', 'Armenien', 'Aruba', 'Aserbaidschan', 'Australien', 'Ägypten', 'Äquatorialguinea', 'Äthiopien', 'Äusseres Ozeanien', - 'Bahamas', 'Bahrain', 'Bangladesch', 'Barbados', 'Belarus', 'Belgien', 'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivien', 'Bosnien und Herzegowina', 'Botsuana', 'Bouvetinsel', 'Brasilien', 'Britische Jungferninseln', 'Britisches Territorium im Indischen Ozean', 'Brunei Darussalam', 'Bulgarien', 'Burkina Faso', 'Burundi', - 'Chile', 'China', 'Cookinseln', 'Costa Rica', 'Côte d’Ivoire', - 'Demokratische Republik Kongo', 'Demokratische Volksrepublik Korea', 'Deutschland', 'Dominica', 'Dominikanische Republik', 'Dschibuti', 'Dänemark', - 'Ecuador', 'El Salvador', 'Eritrea', 'Estland', 'Europäische Union', - 'Falklandinseln', 'Fidschi', 'Finnland', 'Frankreich', 'Französisch-Guayana', 'Französisch-Polynesien', 'Französische Süd- und Antarktisgebiete', 'Färöer', - 'Gabun', 'Gambia', 'Georgien', 'Ghana', 'Gibraltar', 'Grenada', 'Griechenland', 'Grönland', 'Guadeloupe', 'Guam', 'Guatemala', 'Guernsey', 'Guinea', 'Guinea-Bissau', 'Guyana', - 'Haiti', 'Heard- und McDonald-Inseln', 'Honduras', - 'Indien', 'Indonesien', 'Irak', 'Iran', 'Irland', 'Island', 'Isle of Man', 'Israel', 'Italien', - 'Jamaika', 'Japan', 'Jemen', 'Jersey', 'Jordanien', - 'Kaimaninseln', 'Kambodscha', 'Kamerun', 'Kanada', 'Kap Verde', 'Kasachstan', 'Katar', 'Kenia', 'Kirgisistan', 'Kiribati', 'Kokosinseln', 'Kolumbien', 'Komoren', 'Kongo', 'Kroatien', 'Kuba', 'Kuwait', - 'Laos', 'Lesotho', 'Lettland', 'Libanon', 'Liberia', 'Libyen', 'Liechtenstein', 'Litauen', 'Luxemburg', - 'Madagaskar', 'Malawi', 'Malaysia', 'Malediven', 'Mali', 'Malta', 'Marokko', 'Marshallinseln', 'Martinique', 'Mauretanien', 'Mauritius', 'Mayotte', 'Mazedonien', 'Mexiko', 'Mikronesien', 'Monaco', 'Mongolei', 'Montenegro', 'Montserrat', 'Mosambik', 'Myanmar', - 'Namibia', 'Nauru', 'Nepal', 'Neukaledonien', 'Neuseeland', 'Nicaragua', 'Niederlande', 'Niederländische Antillen', 'Niger', 'Nigeria', 'Niue', 'Norfolkinsel', 'Norwegen', 'Nördliche Marianen', - 'Oman', 'Osttimor', 'Österreich', - 'Pakistan', 'Palau', 'Palästinensische Gebiete', 'Panama', 'Papua-Neuguinea', 'Paraguay', 'Peru', 'Philippinen', 'Pitcairn', 'Polen', 'Portugal', 'Puerto Rico', - 'Republik Korea', 'Republik Moldau', 'Ruanda', 'Rumänien', 'Russische Föderation', 'Réunion', - 'Salomonen', 'Sambia', 'Samoa', 'San Marino', 'Saudi-Arabien', 'Schweden', 'Schweiz', 'Senegal', 'Serbien', 'Serbien und Montenegro', 'Seychellen', 'Sierra Leone', 'Simbabwe', 'Singapur', 'Slowakei', 'Slowenien', 'Somalia', 'Sonderverwaltungszone Hongkong', 'Sonderverwaltungszone Macao', 'Spanien', 'Sri Lanka', 'St. Barthélemy', 'St. Helena', 'St. Kitts und Nevis', 'St. Lucia', 'St. Martin', 'St. Pierre und Miquelon', 'St. Vincent und die Grenadinen', 'Sudan', 'Suriname', 'Svalbard und Jan Mayen', 'Swasiland', 'Syrien', 'São Tomé und Príncipe', 'Südafrika', 'Südgeorgien und die Südlichen Sandwichinseln', - 'Tadschikistan', 'Taiwan', 'Tansania', 'Thailand', 'Togo', 'Tokelau', 'Tonga', 'Trinidad und Tobago', 'Tschad', 'Tschechische Republik', 'Tunesien', 'Turkmenistan', 'Turks- und Caicosinseln', 'Tuvalu', 'Türkei', - 'Uganda', 'Ukraine', 'Unbekannte oder ungültige Region', 'Ungarn', 'Uruguay', 'Usbekistan', - 'Vanuatu', 'Vatikanstadt', 'Venezuela', 'Vereinigte Arabische Emirate', 'Vereinigte Staaten', 'Vereinigtes Königreich', 'Vietnam', - 'Wallis und Futuna', 'Weihnachtsinsel', 'Westsahara', - 'Zentralafrikanische Republik', 'Zypern', - ]; - - protected static $cityFormats = [ - '{{cityName}}', - ]; - - protected static $streetNameFormats = [ - '{{lastName}}{{streetSuffixShort}}', - '{{cityName}}{{streetSuffixShort}}', - '{{firstName}}-{{lastName}}-{{streetSuffixLong}}', - ]; - - protected static $streetAddressFormats = [ - '{{streetName}} {{buildingNumber}}', - ]; - protected static $addressFormats = [ - "{{streetAddress}}\n{{postcode}} {{city}}", - ]; - - /** - * Returns a random city name. - * - * @example Luzern - * - * @return string - */ - public function cityName() - { - return static::randomElement(static::$cityNames); - } - - /** - * Returns a random street suffix. - * - * @example str. - * - * @return string - */ - public function streetSuffixShort() - { - return static::randomElement(static::$streetSuffixShort); - } - - /** - * Returns a random street suffix. - * - * @example Strasse - * - * @return string - */ - public function streetSuffixLong() - { - return static::randomElement(static::$streetSuffixLong); - } - - /** - * Returns a canton - * - * @example array('BE' => 'Bern') - * - * @return array - */ - public static function canton() - { - return static::randomElement(static::$canton); - } - - /** - * Returns the abbreviation of a canton. - * - * @return string - */ - public static function cantonShort() - { - $canton = static::canton(); - - return key($canton); - } - - /** - * Returns the name of canton. - * - * @return string - */ - public static function cantonName() - { - $canton = static::canton(); - - return current($canton); - } - - public static function buildingNumber() - { - return static::regexify(self::numerify(static::randomElement(static::$buildingNumber))); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Company.php deleted file mode 100644 index ead2781e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/de_CH/Company.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected static $areaCodeRegexes = [ - 2 => '(0[0-389]|0[4-6][1-68]|1[124]|1[0-9][0-9]|2[18]|2[0-9][1-9]|3[14]|3[0-35-9][0-9]|4[1]|4[02-8][0-9]|5[1]|5[02-9][0-9]|6[1]|6[02-9][0-9]|7[1]|7[2-7][0-9]|8[1]|8[02-7][0-9]|9[1]|9[02-9][0-9])', - 3 => '(0|3[15]|3[02-46-9][1-9]|3[02-46-9][02-9][0-9]|4[015]|4[2-4679][1-8]|4[2-4679][02-9][0-9]|5[15]|5[02-46-9][1-9]|5[02-46-9][02-9][0-9]|6[15]|6[02-46-9][1-9]|6[02-46-9][02-9][0-9]|7[15]|7[2-467][1-7]|7[2-467][02-689][0-9]|8[15]|8[2-46-8][013-9]|8[2-46-8][02-9][0-9]|9[15]|9[02-46-9][1-9]|9[02-46-9][02-9][0-9])', - 4 => '(0|1[02-9][0-9]|2[1]|2[02-9][0-9]|3[1]|3[02-9][0-9]|4[1]|4[0-9][0-9]|5[1]|5[02-6][0-9]|6[1]|6[02-8][0-9]|7[1]|7[02-79][0-9]|8[1]|8[02-9][0-9]|9[1]|9[02-7][0-9])', - 5 => '(0[2-8][0-9]|1[1]|1[02-9][0-9]|2[1]|2[02-9][1-9]|3[1]|3[02-8][0-9]|4[1]|4[02-9][1-9]|5[1]|5[02-9][0-9]|6[1]|6[02-9][0-9]|7[1]|7[02-7][1-9]|8[1]|8[02-8][0-9]|9[1]|9[0-7][1-9])', - 6 => '(0[02-9][0-9]|1[1]|1[02-9][0-9]|2[1]|2[02-9][0-9]|3[1]|3[02-9][0-9]|4[1]|4[0-8][0-9]|5[1]|5[02-9][0-9]|6[1]|6[2-9][0-9]|7[1]|7[02-8][1-9]|8[1]|8[02-9][1-9]|9)', - 7 => '(0[2-8][1-6]|1[1]|1[2-9][0-9]|2[1]|2[0-7][0-9]|3[1]|3[02-9][0-9]|4[1]|4[0-8][0-9]|5[1]|5[02-8][0-9]|6[1]|6[02-8][0-9]|7[1]|7[02-7][0-9]|8[1]|8[02-5][1-9]|9[1]|9[03-7][0-9])', - 8 => '(0[2-9][0-9]|1[1]|1[02-79][0-9]|2[1]|2[02-9][0-9]|3[1]|3[02-9][0-9]|4[1]|4[02-6][0-9]|5[1]|5[02-9][0-9]|6[1]|6[2-8][0-9]|7[1]|7[02-8][1-9]|8[1]|8[02-6][0-9]|9)', - 9 => '(0[6]|0[07-9][0-9]|1[1]|1[02-9][0-9]|2[1]|2[02-9][0-9]|3[1]|3[02-9][0-9]|4[1]|4[02-9][0-9]|5[1]|5[02-7][0-9]|6[1]|6[02-8][1-9]|7[1]|7[02-467][0-9]|8[1]|8[02-7][0-9]|9[1]|9[02-7][0-9])', - ]; - - /** - * @see https://en.wikipedia.org/wiki/National_conventions_for_writing_telephone_numbers#Germany - * @see https://www.itu.int/oth/T0202000051/en - * @see https://en.wikipedia.org/wiki/Telephone_numbers_in_Germany - */ - protected static $formats = [ - // International format - '+49 {{areaCode}} #######', - '+49 {{areaCode}} ### ####', - '+49 (0{{areaCode}}) #######', - '+49 (0{{areaCode}}) ### ####', - '+49{{areaCode}}#######', - '+49{{areaCode}}### ####', - - // Standard formats - '0{{areaCode}} ### ####', - '0{{areaCode}} #######', - '(0{{areaCode}}) ### ####', - '(0{{areaCode}}) #######', - ]; - - protected static $e164Formats = [ - '+49{{areaCode}}#######', - ]; - - /** - * @see https://en.wikipedia.org/wiki/Toll-free_telephone_number - */ - protected static $tollFreeAreaCodes = [ - 800, - ]; - - protected static $tollFreeFormats = [ - // Standard formats - '0{{tollFreeAreaCode}} ### ####', - '(0{{tollFreeAreaCode}}) ### ####', - '+49{{tollFreeAreaCode}} ### ####', - ]; - - public function tollFreeAreaCode() - { - return self::randomElement(static::$tollFreeAreaCodes); - } - - public function tollFreePhoneNumber() - { - $format = self::randomElement(static::$tollFreeFormats); - - return self::numerify($this->generator->parse($format)); - } - - protected static $mobileCodes = [ - 1511, 1512, 1514, 1515, 1516, 1517, - 1520, 1521, 1522, 1523, 1525, 1526, 1529, - 1570, 1573, 1575, 1577, 1578, 1579, - 1590, - ]; - - protected static $mobileFormats = [ - '+49{{mobileCode}}#######', - '+49 {{mobileCode}} ### ####', - '0{{mobileCode}}#######', - '0{{mobileCode}} ### ####', - '0 {{mobileCode}} ### ####', - ]; - - /** - * @see https://en.wikipedia.org/wiki/List_of_dialling_codes_in_Germany - * - * @return string - */ - public static function areaCode() - { - $firstDigit = self::numberBetween(2, 9); - - return $firstDigit . self::regexify(self::$areaCodeRegexes[$firstDigit]); - } - - /** - * Generate a code for a mobile number. - * - * @internal Used to generate mobile numbers. - * - * @return string - */ - public static function mobileCode() - { - return static::randomElement(static::$mobileCodes); - } - - /** - * Generate a mobile number. - * - * @example A mobile number: '015111234567' - * @example A mobile number with spaces: '01511 123 4567' - * @example A mobile number with international code prefix: '+4915111234567' - * @example A mobile number with international code prefix and spaces: '+49 1511 123 4567' - * - * @return string - */ - public function mobileNumber() - { - return ltrim(static::numerify($this->generator->parse( - static::randomElement(static::$mobileFormats), - ))); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Text.php deleted file mode 100644 index 55ed5a55..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/de_DE/Text.php +++ /dev/null @@ -1,2038 +0,0 @@ -generator->parse(static::randomElement(static::$lastNameFormat)); - } - - /** - * @example 'Θεοδωρόπουλος' - */ - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - /** - * @example 'Κοκκίνου' - */ - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php deleted file mode 100644 index 53032487..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php +++ /dev/null @@ -1,324 +0,0 @@ -generator->parse( - static::randomElement(static::$fixedLineFormats), - ))); - } - - /** - * Generate a code for a mobile number. - * - * @internal Used to generate mobile numbers. - * - * @return string - */ - public static function mobileCode() - { - return static::randomElement(static::$mobileCodes); - } - - /** - * Generate a mobile number. - * - * @example A mobile number: '6901234567' - * @example A mobile number with spaces: '690 123 4567' - * @example A mobile number with international code prefix: '+306901234567' - * @example A mobile number with international code prefix and spaces: '+30 690 123 4567' - * - * @return string - */ - public function mobileNumber() - { - return ltrim(static::numerify($this->generator->parse( - static::randomElement(static::$mobileFormats), - ))); - } - - /** - * @deprecated Use PhoneNumber::mobileNumber() instead. - */ - public static function mobilePhoneNumber() - { - return static::numerify( - strtr(static::randomElement(static::$mobileFormats), [ - '{{internationalCodePrefix}}' => static::internationalCodePrefix(), - '{{mobileCode}}' => static::mobileCode(), - ]), - ); - } - - /** - * Generate a personal number. - * - * @example A personal number: '7012345678' - * @example A personal number with spaces: '70 1234 5678' - * @example A personal number with international code prefix: '+307012345678' - * @example A personal number with international code prefix and spaces: '+30 70 1234 5678' - * - * @return string - */ - public function personalNumber() - { - return ltrim(static::numerify($this->generator->parse( - static::randomElement(static::$personalFormats), - ))); - } - - /** - * Generate a toll-free number. - * - * @example A toll-free number: '8001234567' - * @example A toll-free number with spaces: '800 123 4567' - * @example A toll-free number with international code prefix: '+308001234567' - * @example A toll-free number with international code prefix and spaces: '+30 800 123 4567' - * - * @return string - */ - public static function tollFreeNumber() - { - return ltrim(static::numerify( - strtr(static::randomElement(static::$tollFreeFormats), [ - '{{internationalCodePrefix}}' => static::internationalCodePrefix(), - ]), - )); - } - - /** - * Generate a code for a shared-cost number. - * - * @internal Used to generate shared-cost numbers. - * - * @return string - */ - public static function sharedCostCode() - { - return static::randomElement(static::$sharedCostCodes); - } - - /** - * Generate a shared-cost number. - * - * @example A shared-cost number: '8011234567' - * @example A shared-cost number with spaces: '801 123 4567' - * @example A shared-cost number with international code prefix: '+308011234567' - * @example A shared-cost number with international code prefix and spaces: '+30 801 123 4567' - * - * @return string - */ - public function sharedCostNumber() - { - return ltrim(static::numerify($this->generator->parse( - static::randomElement(static::$sharedCostFormats), - ))); - } - - /** - * Generate a code for a premium-rate number. - * - * @internal Used to generate premium-rate numbers. - * - * @return string - */ - public static function premiumRateCode() - { - return static::randomElement(static::$premiumRateCodes); - } - - /** - * Generate a premium-rate number. - * - * @example A premium-rate number: '9011234567' - * @example A premium-rate number with spaces: '901 123 4567' - * @example A premium-rate number with international code prefix: '+309011234567' - * @example A premium-rate number with international code prefix and spaces: '+30 901 123 4567' - * - * @return string - */ - public function premiumRateNumber() - { - return ltrim(static::numerify($this->generator->parse( - static::randomElement(static::$premiumRateFormats), - ))); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Text.php deleted file mode 100644 index f4be7606..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/el_GR/Text.php +++ /dev/null @@ -1,2582 +0,0 @@ - 0) { - $sum -= 97; - } - $sum = $sum * -1; - - return str_pad((string) $sum, 2, '0', STR_PAD_LEFT); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php deleted file mode 100644 index ef5934ab..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -generator->parse(static::randomElement(static::$towns)); - } - - public function syllable() - { - return static::randomElement(static::$syllables); - } - - public function direction() - { - return static::randomElement(static::$directions); - } - - public function englishStreetName() - { - return static::randomElement(static::$englishStreetNames); - } - - public function villageSuffix() - { - return static::randomElement(static::$villageSuffixes); - } - - public function estateSuffix() - { - return static::randomElement(static::$estateSuffixes); - } - - public function village() - { - return $this->generator->parse(static::randomElement(static::$villageNameFormats)); - } - - public function estate() - { - return $this->generator->parse(static::randomElement(static::$estateNameFormats)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php deleted file mode 100644 index 2de48a53..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php +++ /dev/null @@ -1,14 +0,0 @@ -generator->parse(static::randomElement(static::$societyNameFormat)); - } - - /** - * @example Mumbai - */ - public function city() - { - return static::randomElement(static::$city); - } - - /** - * @example Vaishali Nagar - */ - public function locality() - { - return $this->generator->parse(static::randomElement(static::$localityFormats)); - } - - /** - * @example Kharadi - */ - public function localityName() - { - return $this->generator->parse(static::randomElement(static::$localityName)); - } - - /** - * @example Nagar - */ - public function areaSuffix() - { - return static::randomElement(static::$areaSuffix); - } - - /** - * @example 'Delhi' - */ - public static function state() - { - return static::randomElement(static::$state); - } - - /** - * @example 'DL' - */ - public static function stateAbbr() - { - return static::randomElement(static::$stateAbbr); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php deleted file mode 100644 index a5435352..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -format('y'); - $checksumArr = ['J', 'Z', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A']; - } - - $length = count($weights); - - for ($i = strlen($result); $i < $length; ++$i) { - $result .= static::randomDigit(); - } - - $checksum = in_array($prefix, ['G', 'T'], true) ? 4 : 0; - - for ($i = 0; $i < $length; ++$i) { - $checksum += (int) $result[$i] * $weights[$i]; - } - - return $prefix . $result . $checksumArr[$checksum % 11]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php deleted file mode 100644 index f5e3ca6b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php +++ /dev/null @@ -1,105 +0,0 @@ -generator->parse($format)); - } - - public function fixedLineNumber() - { - $format = static::randomElement(static::$fixedLineNumberFormats); - - return static::numerify($this->generator->parse($format)); - } - - public function voipNumber() - { - $format = static::randomElement(static::$voipNumber); - - return static::numerify($this->generator->parse($format)); - } - - public function internationalCodePrefix() - { - return static::randomElement(static::$internationalCodePrefix); - } - - public function zeroToEight() - { - return static::randomElement(static::$zeroToEight); - } - - public function oneToEight() - { - return static::randomElement(static::$oneToEight); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Address.php deleted file mode 100644 index 9024b8b7..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_UG/Address.php +++ /dev/null @@ -1,101 +0,0 @@ - - */ - protected static $areaCodeRegexes = [ - 2 => '(0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])', - 3 => '(0[1-57-9]|1[02-9]|2[0135]|3[0-24679]|4[167]|5[12]|6[014]|8[056])', - 4 => '(0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|6[39]|7[0589]|8[04])', - 5 => '(0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[013-5]|8[056])', - 6 => '(0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[017]|6[0-279]|78|8[0-29])', - 7 => '(0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[02-59]|8[156])', - 8 => '(0[1-68]|1[02-8]|2[08]|3[0-28]|4[3578]|5[046-9]|6[02-5]|7[028])', - 9 => '(0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[0179]|5[12469]|7[0-389]|8[04-69])', - ]; - - /** - * @see https://en.wikipedia.org/wiki/National_conventions_for_writing_telephone_numbers#United_States.2C_Canada.2C_and_other_NANP_countries - */ - protected static $formats = [ - // International format - '+1-{{areaCode}}-{{exchangeCode}}-####', - '+1 ({{areaCode}}) {{exchangeCode}}-####', - '+1-{{areaCode}}-{{exchangeCode}}-####', - '+1.{{areaCode}}.{{exchangeCode}}.####', - '+1{{areaCode}}{{exchangeCode}}####', - - // Standard formats - '{{areaCode}}-{{exchangeCode}}-####', - '({{areaCode}}) {{exchangeCode}}-####', - '1-{{areaCode}}-{{exchangeCode}}-####', - '{{areaCode}}.{{exchangeCode}}.####', - - '{{areaCode}}-{{exchangeCode}}-####', - '({{areaCode}}) {{exchangeCode}}-####', - '1-{{areaCode}}-{{exchangeCode}}-####', - '{{areaCode}}.{{exchangeCode}}.####', - ]; - - protected static $formatsWithExtension = [ - '{{areaCode}}-{{exchangeCode}}-#### x###', - '({{areaCode}}) {{exchangeCode}}-#### x###', - '1-{{areaCode}}-{{exchangeCode}}-#### x###', - '{{areaCode}}.{{exchangeCode}}.#### x###', - - '{{areaCode}}-{{exchangeCode}}-#### x####', - '({{areaCode}}) {{exchangeCode}}-#### x####', - '1-{{areaCode}}-{{exchangeCode}}-#### x####', - '{{areaCode}}.{{exchangeCode}}.#### x####', - - '{{areaCode}}-{{exchangeCode}}-#### x#####', - '({{areaCode}}) {{exchangeCode}}-#### x#####', - '1-{{areaCode}}-{{exchangeCode}}-#### x#####', - '{{areaCode}}.{{exchangeCode}}.#### x#####', - ]; - - protected static $e164Formats = [ - '+1{{areaCode}}{{exchangeCode}}####', - ]; - - /** - * @see https://en.wikipedia.org/wiki/Toll-free_telephone_number#United_States - */ - protected static $tollFreeAreaCodes = [ - 800, 844, 855, 866, 877, 888, - ]; - protected static $tollFreeFormats = [ - // Standard formats - '{{tollFreeAreaCode}}-{{exchangeCode}}-####', - '({{tollFreeAreaCode}}) {{exchangeCode}}-####', - '1-{{tollFreeAreaCode}}-{{exchangeCode}}-####', - '{{tollFreeAreaCode}}.{{exchangeCode}}.####', - ]; - - public function tollFreeAreaCode() - { - return self::randomElement(static::$tollFreeAreaCodes); - } - - public function tollFreePhoneNumber() - { - $format = self::randomElement(static::$tollFreeFormats); - - return self::numerify($this->generator->parse($format)); - } - - /** - * @return string - * - * @example '555-123-546 x123' - */ - public function phoneNumberWithExtension() - { - return static::numerify($this->generator->parse(static::randomElement(static::$formatsWithExtension))); - } - - /** - * NPA-format area code - * - * @see https://en.wikipedia.org/wiki/North_American_Numbering_Plan#Numbering_system - * - * @return string - */ - public static function areaCode() - { - $firstDigit = self::numberBetween(2, 9); - - return $firstDigit . self::regexify(self::$areaCodeRegexes[$firstDigit]); - } - - /** - * NXX-format central office exchange code - * - * @see https://en.wikipedia.org/wiki/North_American_Numbering_Plan#Numbering_system - * - * @return string - */ - public static function exchangeCode() - { - $digits[] = self::numberBetween(2, 9); - $digits[] = self::randomDigit(); - - if ($digits[1] === 1) { - $digits[] = self::randomDigitNot(1); - } else { - $digits[] = self::randomDigit(); - } - - return implode('', $digits); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Text.php deleted file mode 100644 index c15d89d9..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_US/Text.php +++ /dev/null @@ -1,3721 +0,0 @@ -format('Y'), - static::randomNumber(6, true), - static::randomElement(static::$legalEntities), - ); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php deleted file mode 100644 index c2222276..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php +++ /dev/null @@ -1,23 +0,0 @@ -generator->dateTimeThisCentury(); - } - $birthDateString = $birthdate->format('ymd'); - - switch (strtolower($gender ?: '')) { - case static::GENDER_FEMALE: - $genderDigit = self::numberBetween(0, 4); - - break; - - case static::GENDER_MALE: - $genderDigit = self::numberBetween(5, 9); - - break; - - default: - $genderDigit = self::numberBetween(0, 9); - } - $sequenceDigits = str_pad(self::randomNumber(3), 3, 0, STR_PAD_BOTH); - $citizenDigit = ($citizen === true) ? '0' : '1'; - $raceDigit = self::numberBetween(8, 9); - - $partialIdNumber = $birthDateString . $genderDigit . $sequenceDigits . $citizenDigit . $raceDigit; - - return $partialIdNumber . Luhn::computeCheckDigit($partialIdNumber); - } - - /** - * @see https://en.wikipedia.org/wiki/Driving_licence_in_South_Africa - * - * @return string - */ - public function licenceCode() - { - return static::randomElement(static::$licenceCodes); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php deleted file mode 100644 index 567631a0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php +++ /dev/null @@ -1,116 +0,0 @@ -generator->parse($format)); - } - - public function tollFreeNumber() - { - $format = static::randomElement(static::$specialFormats); - - return self::numerify($this->generator->parse($format)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Address.php deleted file mode 100644 index 457f8caf..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/es_AR/Address.php +++ /dev/null @@ -1,68 +0,0 @@ -numberBetween(10000, 100000000); - } - - return $id . $separator . $this->numberBetween(80000000, 100000000); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php deleted file mode 100644 index cfe6438f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php +++ /dev/null @@ -1,29 +0,0 @@ -generator->parse($format); - } - - /** - * @example 'کد پستی' - */ - public static function postcodePrefix() - { - return static::randomElement(static::$postcodePrefix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php deleted file mode 100644 index 15da3c5a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php +++ /dev/null @@ -1,60 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'ahmad.ir' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php deleted file mode 100644 index 546e2a3f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php +++ /dev/null @@ -1,210 +0,0 @@ - 1; --$i) { - $sum += $subNationalCodeString[$count] * ($i); - ++$count; - } - - if (($sum % 11) < 2) { - return $sum % 11; - } - - return 11 - ($sum % 11); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php deleted file mode 100644 index a9606d02..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php +++ /dev/null @@ -1,76 +0,0 @@ - 5) { - throw new \InvalidArgumentException('indexSize must be at most 5'); - } - - $words = $this->getConsecutiveWords($indexSize); - $result = []; - $resultLength = 0; - // take a random starting point - $next = static::randomKey($words); - - while ($resultLength < $maxNbChars && isset($words[$next])) { - // fetch a random word to append - $word = static::randomElement($words[$next]); - - // calculate next index - $currentWords = explode(' ', $next); - - $currentWords[] = $word; - array_shift($currentWords); - $next = implode(' ', $currentWords); - - if ($resultLength == 0 && !preg_match('/^[\x{0600}-\x{06FF}]/u', $word)) { - continue; - } - // append the element - $result[] = $word; - $resultLength += strlen($word) + 1; - } - - // remove the element that caused the text to overflow - array_pop($result); - - // build result - $result = implode(' ', $result); - - return $result . '.'; - } - - /** - * License: Creative Commons Attribution-ShareAlike License - * - * Title: مدیر مدرسه - * Author: جلال آل‌احمد - * Language: Persian - * - * @see http://fa.wikisource.org/wiki/%D9%85%D8%AF%DB%8C%D8%B1_%D9%85%D8%AF%D8%B1%D8%B3%D9%87 - * - * @var string - */ - protected static $baseText = <<<'EOT' -از در که وارد شدم سیگارم دستم بود. زورم آمد سلام کنم. همین طوری دنگم گرفته بود قد باشم. رئیس فرهنگ که اجازه‌ی نشستن داد، نگاهش لحظه‌ای روی دستم مکث کرد و بعد چیزی را که می‌نوشت، تمام کرد و می‌خواست متوجه من بشود که رونویس حکم را روی میزش گذاشته بودم. حرفی نزدیم. رونویس را با کاغذهای ضمیمه‌اش زیر و رو کرد و بعد غبغب انداخت و آرام و مثلاً خالی از عصبانیت گفت: - -- جا نداریم آقا. این که نمی‌شه! هر روز یه حکم می‌دند دست یکی می‌فرستنش سراغ من... دیروز به آقای مدیر کل... - -حوصله‌ی این اباطیل را نداشتم. حرفش را بریدم که: - -- ممکنه خواهش کنم زیر همین ورقه مرقوم بفرمایید؟ - -و سیگارم را توی زیرسیگاری براق روی میزش تکاندم. روی میز، پاک و مرتب بود. درست مثل اتاق همان مهمان‌خانه‌ی تازه‌عروس‌ها. هر چیز به جای خود و نه یک ذره گرد. فقط خاکستر سیگار من زیادی بود. مثل تفی در صورت تازه تراشیده‌ای.... قلم را برداشت و زیر حکم چیزی نوشت و امضا کرد و من از در آمده بودم بیرون. خلاص. تحمل این یکی را نداشتم. با اداهایش. پیدا بود که تازه رئیس شده. زورکی غبغب می‌انداخت و حرفش را آهسته توی چشم آدم می‌زد. انگار برای شنیدنش گوش لازم نیست. صد و پنجاه تومان در کارگزینی کل مایه گذاشته بودم تا این حکم را به امضا رسانده بودم. توصیه هم برده بودم و تازه دو ماه هم دویده بودم. مو، لای درزش نمی‌رفت. می‌دانستم که چه او بپذیرد، چه نپذیرد، کار تمام است. خودش هم می‌دانست. حتماً هم دستگیرش شد که با این نک و نالی که می‌کرد، خودش را کنف کرده. ولی کاری بود و شده بود. در کارگزینی کل، سفارش کرده بودند که برای خالی نبودن عریضه رونویس را به رؤیت رئیس فرهنگ هم برسانم تازه این طور شد. و گر نه بالی حکم کارگزینی کل چه کسی می‌توانست حرفی بزند؟ یک وزارت خانه بود و یک کارگزینی! شوخی که نبود. ته دلم قرص‌تر از این‌ها بود که محتاج به این استدلال‌ها باشم. اما به نظرم همه‌ی این تقصیرها از این سیگار لعنتی بود که به خیال خودم خواسته بودم خرجش را از محل اضافه حقوق شغل جدیدم در بیاورم. البته از معلمی، هم اُقم نشسته بود. ده سال «الف.ب.» درس دادن و قیافه‌های بهت‌زده‌ی بچه‌های مردم برای مزخرف‌ترین چرندی که می‌گویی... و استغناء با غین و استقراء با قاف و خراسانی و هندی و قدیمی‌ترین شعر دری و صنعت ارسال مثل و ردالعجز... و از این مزخرفات! دیدم دارم خر می‌شوم. گفتم مدیر بشوم. مدیر دبستان! دیگر نه درس خواهم داد و نه مجبور خواهم بود برای فرار از اتلاف وقت، در امتحان تجدیدی به هر احمق بی‌شعوری هفت بدهم تا ایام آخر تابستانم را که لذیذترین تکه‌ی تعطیلات است، نجات داده باشم. این بود که راه افتادم. رفتم و از اهلش پرسیدم. از یک کار چاق کن. دستم را توی دست کارگزینی گذاشت و قول و قرار و طرفین خوش و خرم و یک روز هم نشانی مدرسه را دستم دادند که بروم وارسی، که باب میلم هست یا نه. - -و رفتم. مدرسه دو طبقه بود و نوساز بود و در دامنه‌ی کوه تنها افتاده بود و آفتاب‌رو بود. یک فرهنگ‌دوست خرپول، عمارتش را وسط زمین خودش ساخته بود و بیست و پنج سال هم در اختیار فرهنگ گذاشته بود که مدرسه‌اش کنند و رفت و آمد بشود و جاده‌ها کوبیده بشود و این قدر ازین بشودها بشود، تا دل ننه باباها بسوزد و برای این‌که راه بچه‌هاشان را کوتاه بکنند، بیایند همان اطراف مدرسه را بخرند و خانه بسازند و زمین یارو از متری یک عباسی بشود صد تومان. یارو اسمش را هم روی دیوار مدرسه کاشی‌کاری کرده بود. هنوز در و همسایه پیدا نکرده بودند که حرف‌شان بشود و لنگ و پاچه‌ی سعدی و باباطاهر را بکشند میان و یک ورق دیگر از تاریخ‌الشعرا را بکوبند روی نبش دیوار کوچه‌شان. تابلوی مدرسه هم حسابی و بزرگ و خوانا. از صد متری داد می‌زد که توانا بود هر.... هر چه دلتان بخواهد! با شیر و خورشیدش که آن بالا سر، سه پا ایستاده بود و زورکی تعادل خودش را حفظ می‌کرد و خورشید خانم روی کولش با ابروهای پیوسته و قمچیلی که به دست داشت و تا سه تیر پرتاب، اطراف مدرسه بیابان بود. درندشت و بی آب و آبادانی و آن ته رو به شمال، ردیف کاج‌های درهم فرو رفته‌ای که از سر دیوار گلی یک باغ پیدا بود روی آسمان لکه‌ی دراز و تیره‌ای زده بود. حتماً تا بیست و پنج سال دیگر همه‌ی این اطراف پر می‌شد و بوق ماشین و ونگ ونگ بچه‌ها و فریاد لبویی و زنگ روزنامه‌فروشی و عربده‌ی گل به سر دارم خیار! نان یارو توی روغن بود. - -- راستی شاید متری ده دوازده شاهی بیشتر نخریده باشد؟ شاید هم زمین‌ها را همین جوری به ثبت داده باشد؟ هان؟ - -- احمق به توچه؟!... - -بله این فکرها را همان روزی کردم که ناشناس به مدرسه سر زدم و آخر سر هم به این نتیجه رسیدم که مردم حق دارند جایی بخوابند که آب زیرشان نرود. - -- تو اگر مردی، عرضه داشته باش مدیر همین مدرسه هم بشو. - -و رفته بودم و دنبال کار را گرفته بودم تا رسیده بودم به این‌جا. همان روز وارسی فهمیده بودم که مدیر قبلی مدرسه زندانی است. لابد کله‌اش بوی قرمه‌سبزی می‌داده و باز لابد حالا دارد کفاره‌ی گناهانی را می‌دهد که یا خودش نکرده یا آهنگری در بلخ کرده. جزو پر قیچی‌های رئیس فرهنگ هم کسی نبود که با مدیرشان، اضافه حقوقی نصیبش بشود و ناچار سر و دستی برای این کار بشکند. خارج از مرکز هم نداشت. این معلومات را توی کارگزینی به دست آورده بودم. هنوز «گه خوردم نامه‌نویسی» هم مد نشده بود که بگویم یارو به این زودی‌ها از سولدونی در خواهد آمد. فکر نمی‌کردم که دیگری هم برای این وسط بیابان دلش لک زده باشد با زمستان سختش و با رفت و آمد دشوارش. - -این بود که خیالم راحت بود. از همه‌ی این‌ها گذشته کارگزینی کل موافقت کرده بود! دست است که پیش از بلند شدن بوی اسکناس، آن جا هم دو سه تا عیب شرعی و عرفی گرفته بودند و مثلاً گفته بودن لابد کاسه‌ای زیر نیم کاسه است که فلانی یعنی من، با ده سال سابقه‌ی تدریس، می‌خواهد مدیر دبستان بشود! غرض‌شان این بود که لابد خل شدم که از شغل مهم و محترم دبیری دست می‌شویم. ماهی صد و پنجاه تومان حق مقام در آن روزها پولی نبود که بتوانم نادیده بگیرم. و تازه اگر ندیده می‌گرفتم چه؟ باز باید بر می‌گشتم به این کلاس‌ها و این جور حماقت‌ها. این بود که پیش رئیس فرهنگ، صاف برگشتم به کارگزینی کل، سراغ آن که بفهمی نفهمی، دلال کارم بود. و رونویس حکم را گذاشتم و گفتم که چه طور شد و آمدم بیرون. - -دو روز بعد رفتم سراغش. معلوم شد که حدسم درست بوده است و رئیس فرهنگ گفته بوده: «من از این لیسانسه‌های پر افاده نمی‌خواهم که سیگار به دست توی هر اتاقی سر می‌کنند.» - -و یارو برایش گفته بود که اصلاً وابدا..! فلانی همچین و همچون است و مثقالی هفت صنار با دیگران فرق دارد و این هندوانه‌ها و خیال من راحت باشد و پنج‌شنبه یک هفته‌ی دیگر خودم بروم پهلوی او... و این کار را کردم. این بار رئیس فرهنگ جلوی پایم بلند شد که: «ای آقا... چرا اول نفرمودید؟!...» و از کارمندهایش گله کرد و به قول خودش، مرا «در جریان موقعیت محل» گذاشت و بعد با ماشین خودش مرا به مدرسه رساند و گفت زنگ را زودتر از موعد زدند و در حضور معلم‌ها و ناظم، نطق غرایی در خصائل مدیر جدید – که من باشم – کرد و بعد هم مرا گذاشت و رفت با یک مدرسه‌ی شش کلاسه‌ی «نوبنیاد» و یک ناظم و هفت تا معلم و دویست و سی و پنج تا شاگرد. دیگر حسابی مدیر مدرسه شده بودم! - -ناظم، جوان رشیدی بود که بلند حرف می‌زد و به راحتی امر و نهی می‌کرد و بیا و برویی داشت و با شاگردهای درشت، روی هم ریخته بود که خودشان ترتیب کارها را می‌دادند و پیدا بود که به سر خر احتیاجی ندارد و بی‌مدیر هم می‌تواند گلیم مدرسه را از آب بکشد. معلم کلاس چهار خیلی گنده بود. دو تای یک آدم حسابی. توی دفتر، اولین چیزی که به چشم می‌آمد. از آن‌هایی که اگر توی کوچه ببینی، خیال می‌کنی مدیر کل است. لفظ قلم حرف می‌زد و شاید به همین دلیل بود که وقتی رئیس فرهنگ رفت و تشریفات را با خودش برد، از طرف همکارانش تبریک ورود گفت و اشاره کرد به اینکه «ان‌شاءالله زیر سایه‌ی سرکار، سال دیگر کلاس‌های دبیرستان را هم خواهیم داشت.» پیدا بود که این هیکل کم‌کم دارد از سر دبستان زیادی می‌کند! وقتی حرف می‌زد همه‌اش درین فکر بودم که با نان آقا معلمی چه طور می‌شد چنین هیکلی به هم زد و چنین سر و تیپی داشت؟ و راستش تصمیم گرفتم که از فردا صبح به صبح ریشم را بتراشم و یخه‌ام تمیز باشد و اتوی شلوارم تیز. - -معلم کلاس اول باریکه‌ای بود، سیاه سوخته. با ته ریشی و سر ماشین کرده‌ای و یخه‌ی بسته. بی‌کراوات. شبیه میرزابنویس‌های دم پست‌خانه. حتی نوکر باب می‌نمود. و من آن روز نتوانستم بفهمم وقتی حرف می‌زند کجا را نگاه می‌کند. با هر جیغ کوتاهی که می‌زد هرهر می‌خندید. با این قضیه نمی‌شد کاری کرد. معلم کلاس سه، یک جوان ترکه‌ای بود؛ بلند و با صورت استخوانی و ریش از ته تراشیده و یخه‌ی بلند آهاردار. مثل فرفره می‌جنبید. چشم‌هایش برق عجیبی می‌زد که فقط از هوش نبود، چیزی از ناسلامتی در برق چشم‌هایش بود که مرا واداشت از ناظم بپرسم مبادا مسلول باشد. البته مسلول نبود، تنها بود و در دانشگاه درس می‌خواند. کلاس‌های پنجم و ششم را دو نفر با هم اداره می‌کردند. یکی فارسی و شرعیات و تاریخ، جغرافی و کاردستی و این جور سرگرمی‌ها را می‌گفت، که جوانکی بود بریانتین زده، با شلوار پاچه تنگ و پوشت و کراوات زرد و پهنی که نعش یک لنگر بزرگ آن را روی سینه‌اش نگه داشته بود و دائماً دستش حمایل موهای سرش بود و دم به دم توی شیشه‌ها نگاه می‌کرد. و آن دیگری که حساب و مرابحه و چیزهای دیگر می‌گفت، جوانی بود موقر و سنگین مازندرانی به نظر می‌آمد و به خودش اطمینان داشت. غیر از این‌ها، یک معلم ورزش هم داشتیم که دو هفته بعد دیدمش و اصفهانی بود و از آن قاچاق‌ها. - -رئیس فرهنگ که رفت، گرم و نرم از همه‌شان حال و احوال پرسیدم. بعد به همه سیگار تعارف کردم. سراپا همکاری و همدردی بود. از کار و بار هر کدامشان پرسیدم. فقط همان معلم کلاس سه، دانشگاه می‌رفت. آن که لنگر به سینه انداخته بود، شب‌ها انگلیسی می‌خواند که برود آمریکا. چای و بساطی در کار نبود و ربع ساعت‌های تفریح، فقط توی دفتر جمع می‌شدند و دوباره از نو. و این نمی‌شد. باید همه‌ی سنن را رعایت کرد. دست کردم و یک پنج تومانی روی میز گذاشتم و قرار شد قبل و منقلی تهیه کنند و خودشان چای را راه بیندازند. - -بعد از زنگ قرار شد من سر صف نطقی بکنم. ناظم قضیه را در دو سه کلمه برای بچه‌ها گفت که من رسیدم و همه دست زدند. چیزی نداشتم برایشان بگویم. فقط یادم است اشاره‌ای به این کردم که مدیر خیلی دلش می‌خواست یکی از شما را به جای فرزند داشته باشد و حالا نمی‌داند با این همه فرزند چه بکند؟! که بی‌صدا خندیدند و در میان صف‌های عقب یکی پکی زد به خنده. واهمه برم داشت که «نه بابا. کار ساده‌ای هم نیست!» قبلاً فکر کرده بودم که می‌روم و فارغ از دردسر اداره‌ی کلاس، در اتاق را روی خودم می‌بندم و کار خودم را می‌کنم. اما حالا می‌دیدم به این سادگی‌ها هم نیست. اگر فردا یکی‌شان زد سر اون یکی را شکست، اگر یکی زیر ماشین رفت؛ اگر یکی از ایوان افتاد؛ چه خاکی به سرم خواهم ریخت؟ - -حالا من مانده بودم و ناظم که چیزی از لای در آهسته خزید تو. کسی بود؛ فراش مدرسه با قیافه‌ای دهاتی و ریش نتراشیده و قدی کوتاه و گشاد گشاد راه می‌رفت و دست‌هایش را دور از بدن نگه می‌داشت. آمد و همان کنار در ایستاد. صاف توی چشمم نگاه می‌کرد. حال او را هم پرسیدم. هر چه بود او هم می‌توانست یک گوشه‌ی این بار را بگیرد. در یک دقیقه همه‌ی درد دل‌هایش را کرد و التماس دعاهایش که تمام شد، فرستادمش برایم چای درست کند و بیاورد. بعد از آن من به ناظم پرداختم. سال پیش، از دانشسرای مقدماتی در آمده بود. یک سال گرمسار و کرج کار کرده بود و امسال آمده بود این‌جا. پدرش دو تا زن داشته. از اولی دو تا پسر که هر دو تا چاقوکش از آب در آمده‌اند و از دومی فقط او مانده بود که درس‌خوان شده و سرشناس و نان مادرش را می‌دهد که مریض است و از پدر سال‌هاست که خبری نیست و... یک اتاق گرفته‌اند به پنجاه تومان و صد و پنجاه تومان حقوق به جایی نمی‌رسد و تازه زور که بزند سه سال دیگر می‌تواند از حق فنی نظامت مدرسه استفاده کند - -... بعد بلند شدیم که به کلاس‌ها سرکشی کنیم. بعد با ناظم به تک تک کلاس‌ها سر زدیم در این میان من به یاد دوران دبستان خودم افتادم. در کلاس ششم را باز کردیم «... ت بی پدرو مادر» جوانک بریانتین زده خورد توی صورت‌مان. یکی از بچه‌ها صورتش مثل چغندر قرمز بود. لابد بزک فحش هنوز باقی بود. قرائت فارسی داشتند. معلم دستهایش توی جیبش بود و سینه‌اش را پیش داده بود و زبان به شکایت باز کرد: - -- آقای مدیر! اصلاً دوستی سرشون نمی‌شه. تو سَری می‌خوان. ملاحظه کنید بنده با چه صمیمیتی... - -حرفش را در تشدید «ایت» بریدم که: - -- صحیح می‌فرمایید. این بار به من ببخشید. - -و از در آمدیم بیرون. بعد از آن به اطاقی که در آینده مال من بود سر زدیم. بهتر از این نمی‌شد. بی سر و صدا، آفتاب‌رو، دور افتاده. - -وسط حیاط، یک حوض بزرگ بود و کم‌عمق. تنها قسمت ساختمان بود که رعایت حال بچه‌های قد و نیم قد در آن شده بود. دور حیاط دیوار بلندی بود درست مثل دیوار چین. سد مرتفعی در مقابل فرار احتمالی فرهنگ و ته حیاط مستراح و اتاق فراش بغلش و انبار زغال و بعد هم یک کلاس. به مستراح هم سر کشیدیم. همه بی در و سقف و تیغه‌ای میان آن‌ها. نگاهی به ناظم کردم که پا به پایم می‌آمد. گفت: - -- دردسر عجیبی شده آقا. تا حالا صد تا کاغذ به ادارفردا صبح رفتم مدرسه. بچه‌ها با صف‌هاشان به طرف کلاس‌ها می‌رفتند و ناظم چوب به دست توی ایوان ایستاده بود و توی دفتر دو تا از معلم‌ها بودند. معلوم شد کار هر روزه‌شان است. ناظم را هم فرستادم سر یک کلاس دیگر و خودم آمدم دم در مدرسه به قدم زدن؛ فکر کردم از هر طرف که بیایند مرا این ته، دم در مدرسه خواهند دید و تمام طول راه در این خجالت خواهند ماند و دیگر دیر نخواهند آمد. یک سیاهی از ته جاده‌ی جنوبی پیداشد. جوانک بریانتین زده بود. مسلماً او هم مرا می‌دید، ولی آهسته‌تر از آن می‌آمد که یک معلم تأخیر کرده جلوی مدیرش می‌آمد. جلوتر که آمد حتی شنیدم که سوت می‌زد. اما بی‌انصاف چنان سلانه سلانه می‌آمد که دیدم هیچ جای گذشت نیست. اصلاً محل سگ به من نمی‌گذاشت. داشتم از کوره در می‌رفتم که یک مرتبه احساس کردم تغییری در رفتار خود داد و تند کرد. - -به خیر گذشت و گرنه خدا عالم است چه اتفاقی می‌افتاد. سلام که کرد مثل این که می‌خواست چیزی بگوید که پیش دستی کردم: - -- بفرمایید آقا. بفرمایید، بچه‌ها منتظرند. - -واقعاً به خیر گذشت. شاید اتوبوسش دیر کرده. شاید راه‌بندان بوده؛ جاده قرق بوده و باز یک گردن‌کلفتی از اقصای عالم می‌آمده که ازین سفره‌ی مرتضی علی بی‌نصیب نماند. به هر صورت در دل بخشیدمش. چه خوب شد که بد و بی‌راهی نگفتی! که از دور علم افراشته‌ی هیکل معلم کلاس چهارم نمایان شد. از همان ته مرا دیده بود. تقریباً می‌دوید. تحمل این یکی را نداشتم. «بدکاری می‌کنی. اول بسم‌الله و مته به خشخاش!» رفتم و توی دفتر نشستم و خودم را به کاری مشغول کردم که هن هن کنان رسید. چنان عرق از پیشانی‌اش می‌ریخت که راستی خجالت کشیدم. یک لیوان آب از کوه به دستش دادم و مسخ‌شده‌ی خنده‌اش را با آب به خوردش دادم و بلند که شد برود، گفتم: - -- عوضش دو کیلو لاغر شدید. - -برگشت نگاهی کرد و خنده‌ای و رفت. ناگهان ناظم از در وارد شد و از را ه نرسیده گفت: - -- دیدید آقا! این جوری می‌آند مدرسه. اون قرتی که عین خیالش هم نبود آقا! اما این یکی... - -از او پرسیدم: - -- انگار هنوز دو تا از کلاس‌ها ولند؟ - -- بله آقا. کلاس سه ورزش دارند. گفتم بنشینند دیکته بنویسند آقا. معلم حساب پنج و شش هم که نیومده آقا. - -در همین حین یکی از عکس‌های بزرگ دخمه‌های هخامنشی را که به دیوار کوبیده بود پس زد و: - -- نگاه کنید آقا... - -روی گچ دیوار با مداد قرمز و نه چندان درشت، به عجله و ناشیانه علامت داس کشیده بودند. همچنین دنبال کرد: - -- از آثار دوره‌ی اوناست آقا. کارشون همین چیزها بود. روزنومه بفروشند. تبلیغات کنند و داس چکش بکشند آقا. رئیس‌شون رو که گرفتند چه جونی کندم آقا تا حالی‌شون کنم که دست ور دارند آقا. و از روی میز پرید پایین. - -- گفتم مگه باز هم هستند؟ - -- آره آقا، پس چی! یکی همین آقازاده که هنوز نیومده آقا. هر روز نیم ساعت تأخیر داره آقا. یکی هم مثل کلاس سه. - -- خوب چرا تا حالا پاکش نکردی؟ - -- به! آخه آدم درد دلشو واسه‌ی کی بگه؟ آخه آقا در میان تو روی آدم می‌گند جاسوس، مأمور! باهاش حرفم شده آقا. کتک و کتک‌کاری! - -و بعد یک سخنرانی که چه طور مدرسه را خراب کرده‌اند و اعتماد اهل محله را چه طور از بین برده‌اند که نه انجمنی، نه کمکی به بی‌بضاعت‌ها؛ و از این حرف ها. - -بعد از سخنرانی آقای ناظم دستمالم را دادم که آن عکس‌ها را پاک کند و بعد هم راه افتادم که بروم سراغ اتاق خودم. در اتاقم را که باز کردم، داشتم دماغم با بوی خاک نم کشیده‌اش اخت می‌کرد که آخرین معلم هم آمد. آمدم توی ایوان و با صدای بلند، جوری که در تمام مدرسه بشنوند، ناظم را صدا زدم و گفتم با قلم قرمز برای آقا یک ساعت تأخیر بگذارند.ه‌ی ساختمان نوشتیم آقا. می‌گند نمی‌شه پول دولت رو تو ملک دیگرون خرج کرد. - -- گفتم راست می‌گند. - -دیگه کافی بود. آمدیم بیرون. همان توی حیاط تا نفسی تازه کنیم وضع مالی و بودجه و ازین حرف‌های مدرسه را پرسیدم. هر اتاق ماهی پانزده ریال حق نظافت داشت. لوازم‌التحریر و دفترها را هم اداره‌ی فرهنگ می‌داد. ماهی بیست و پنج تومان هم برای آب خوردن داشتند که هنوز وصول نشده بود. برای نصب هر بخاری سالی سه تومان. ماهی سی تومان هم تنخواه‌گردان مدرسه بود که مثل پول آب سوخت شده بود و حالا هم ماه دوم سال بود. اواخر آبان. حالیش کردم که حوصله‌ی این کارها را ندارم و غرضم را از مدیر شدن برایش خلاصه کردم و گفتم حاضرم همه‌ی اختیارات را به او بدهم. «اصلاً انگار که هنوز مدیر نیامده.» مهر مدرسه هم پهلوی خودش باشد. البته او را هنوز نمی‌شناختم. شنیده بودم که مدیرها قبلاً ناظم خودشان را انتخاب می‌کنند، اما من نه کسی را سراغ داشتم و نه حوصله‌اش را. حکم خودم را هم به زور گرفته بودم. سنگ‌هامان را وا کندیم و به دفتر رفتیم و چایی را که فراش از بساط خانه‌اش درست کرده بود، خوردیم تا زنگ را زدند و باز هم زدند و من نگاهی به پرونده‌های شاگردها کردم که هر کدام عبارت بود از دو برگ کاغذ. از همین دو سه برگ کاغذ دانستم که اولیای بچه‌ها اغلب زارع و باغبان و اویارند و قبل از این‌که زنگ آخر را بزنند و مدرسه تعطیل بشود بیرون آمدم. برای روز اول خیلی زیاد بود. - -فردا صبح رفتم مدرسه. بچه‌ها با صف‌هاشان به طرف کلاس‌ها می‌رفتند و ناظم چوب به دست توی ایوان ایستاده بود و توی دفتر دو تا از معلم‌ها بودند. معلوم شد کار هر روزه‌شان است. ناظم را هم فرستادم سر یک کلاس دیگر و خودم آمدم دم در مدرسه به قدم زدن؛ فکر کردم از هر طرف که بیایند مرا این ته، دم در مدرسه خواهند دید و تمام طول راه در این خجالت خواهند ماند و دیگر دیر نخواهند آمد. یک سیاهی از ته جاده‌ی جنوبی پیداشد. جوانک بریانتین زده بود. مسلماً او هم مرا می‌دید، ولی آهسته‌تر از آن می‌آمد که یک معلم تأخیر کرده جلوی مدیرش می‌آمد. جلوتر که آمد حتی شنیدم که سوت می‌زد. اما بی‌انصاف چنان سلانه سلانه می‌آمد که دیدم هیچ جای گذشت نیست. اصلاً محل سگ به من نمی‌گذاشت. داشتم از کوره در می‌رفتم که یک مرتبه احساس کردم تغییری در رفتار خود داد و تند کرد. - -به خیر گذشت و گرنه خدا عالم است چه اتفاقی می‌افتاد. سلام که کرد مثل این که می‌خواست چیزی بگوید که پیش دستی کردم: - -- بفرمایید آقا. بفرمایید، بچه‌ها منتظرند. - -واقعاً به خیر گذشت. شاید اتوبوسش دیر کرده. شاید راه‌بندان بوده؛ جاده قرق بوده و باز یک گردن‌کلفتی از اقصای عالم می‌آمده که ازین سفره‌ی مرتضی علی بی‌نصیب نماند. به هر صورت در دل بخشیدمش. چه خوب شد که بد و بی‌راهی نگفتی! که از دور علم افراشته‌ی هیکل معلم کلاس چهارم نمایان شد. از همان ته مرا دیده بود. تقریباً می‌دوید. تحمل این یکی را نداشتم. «بدکاری می‌کنی. اول بسم‌الله و مته به خشخاش!» رفتم و توی دفتر نشستم و خودم را به کاری مشغول کردم که هن هن کنان رسید. چنان عرق از پیشانی‌اش می‌ریخت که راستی خجالت کشیدم. یک لیوان آب از کوه به دستش دادم و مسخ‌شده‌ی خنده‌اش را با آب به خوردش دادم و بلند که شد برود، گفتم: - -- عوضش دو کیلو لاغر شدید. - -برگشت نگاهی کرد و خنده‌ای و رفت. ناگهان ناظم از در وارد شد و از را ه نرسیده گفت: - -- دیدید آقا! این جوری می‌آند مدرسه. اون قرتی که عین خیالش هم نبود آقا! اما این یکی... - -از او پرسیدم: - -- انگار هنوز دو تا از کلاس‌ها ولند؟ - -- بله آقا. کلاس سه ورزش دارند. گفتم بنشینند دیکته بنویسند آقا. معلم حساب پنج و شش هم که نیومده آقا. - -در همین حین یکی از عکس‌های بزرگ دخمه‌های هخامنشی را که به دیوار کوبیده بود پس زد و: - -- نگاه کنید آقا... - -روی گچ دیوار با مداد قرمز و نه چندان درشت، به عجله و ناشیانه علامت داس کشیده بودند. همچنین دنبال کرد: - -- از آثار دوره‌ی اوناست آقا. کارشون همین چیزها بود. روزنومه بفروشند. تبلیغات کنند و داس چکش بکشند آقا. رئیس‌شون رو که گرفتند چه جونی کندم آقا تا حالی‌شون کنم که دست ور دارند آقا. و از روی میز پرید پایین. - -- گفتم مگه باز هم هستند؟ - -- آره آقا، پس چی! یکی همین آقازاده که هنوز نیومده آقا. هر روز نیم ساعت تأخیر داره آقا. یکی هم مثل کلاس سه. - -- خوب چرا تا حالا پاکش نکردی؟ - -- به! آخه آدم درد دلشو واسه‌ی کی بگه؟ آخه آقا در میان تو روی آدم می‌گند جاسوس، مأمور! باهاش حرفم شده آقا. کتک و کتک‌کاری! - -و بعد یک سخنرانی که چه طور مدرسه را خراب کرده‌اند و اعتماد اهل محله را چه طور از بین برده‌اند که نه انجمنی، نه کمکی به بی‌بضاعت‌ها؛ و از این حرف ها. - -بعد از سخنرانی آقای ناظم دستمالم را دادم که آن عکس‌ها را پاک کند و بعد هم راه افتادم که بروم سراغ اتاق خودم. در اتاقم را که باز کردم، داشتم دماغم با بوی خاک نم کشیده‌اش اخت می‌کرد که آخرین معلم هم آمد. آمدم توی ایوان و با صدای بلند، جوری که در تمام مدرسه بشنوند، ناظم را صدا زدم و گفتم با قلم قرمز برای آقا یک ساعت تأخیر بگذارند. - -روز سوم باز اول وقت مدرسه بودم. هنوز از پشت دیوار نپیچیده بودم که صدای سوز و بریز بچه‌ها به پیشبازم آمد. تند کردم. پنج تا از بچه‌ها توی ایوان به خودشان می‌پیچیدند و ناظم ترکه‌ای به دست داشت و به نوبت به کف دست‌شان می‌زد. بچه‌ها التماس می‌کردند؛ گریه می‌کردند؛ اما دستشان را هم دراز می‌کردند. نزدیک بود داد بزنم یا با لگد بزنم و ناظم را پرت کنم آن طرف. پشتش به من بود و من را نمی‌دید. ناگهان زمزمه‌ای توی صف‌ها افتاد که یک مرتبه مرا به صرافت انداخت که در مقام مدیریت مدرسه، به سختی می‌شود ناظم را کتک زد. این بود که خشمم را فرو خوردم و آرام از پله‌ها رفتم بالا. ناظم، تازه متوجه من شده بود در همین حین دخالتم را کردم و خواهش کردم این بار همه‌شان را به من ببخشند. - -نمی‌دانم چه کار خطایی از آنها سر زده بود که ناظم را تا این حد عصبانی کرده بود. بچه‌ها سکسکه‌کنان رفتند توی صف‌ها و بعد زنگ را زدند و صف‌ها رفتند به کلاس‌ها و دنبالشان هم معلم‌ها که همه سر وقت حاضر بودند. نگاهی به ناظم انداختم که تازه حالش سر جا آمده بود و گفتم در آن حالی که داشت، ممکن بود گردن یک کدامشان را بشکند. که مرتبه براق شد: - -- اگه یک روز جلوشونو نگیرید سوارتون می‌شند آقا. نمی‌دونید چه قاطرهای چموشی شده‌اند آقا. - -مثل بچه مدرسه‌ای‌ها آقا آقا می‌کرد. موضوع را برگرداندم و احوال مادرش را پرسیدم. خنده، صورتش را از هم باز کرد و صدا زد فراش برایش آب بیاورد. یادم هست آن روز نیم ساعتی برای آقای ناظم صحبت کردم. پیرانه. و او جوان بود و زود می‌شد رامش کرد. بعد ازش خواستم که ترکه‌ها را بشکند و آن وقت من رفتم سراغ اتاق خودم. - -در همان هفته‌ی اول به کارها وارد شدم. فردای زمستان و نه تا بخاری زغال سنگی و روزی چهار بار آب آوردن و آب و جاروی اتاق‌ها با یک فراش جور در نمی‌آید. یک فراش دیگر از اداره ی فرهنگ خواستم که هر روز منتظر ورودش بودیم. بعد از ظهرها را نمی‌رفتم. روزهای اول با دست و دل لرزان، ولی سه چهار روزه جرأت پیدا کردم. احساس می‌کردم که مدرسه زیاد هم محض خاطر من نمی‌گردد. کلاس اول هم یکسره بود و به خاطر بچه‌های جغله دلهره‌ای نداشتم. در بیابان‌های اطراف مدرسه هم ماشینی آمد و رفت نداشت و گرچه پست و بلند بود اما به هر صورت از حیاط مدرسه که بزرگ‌تر بود. معلم ها هم، هر بعد از ظهری دو تاشان به نوبت می‌رفتند یک جوری باهم کنار آمده بودند. و ترسی هم از این نبود که بچه‌ها از علم و فرهنگ ثقل سرد بکنند. یک روز هم بازرس آمد و نیم ساعتی پیزر لای پالان هم گذاشتیم و چای و احترامات متقابل! و در دفتر بازرسی تصدیق کرد که مدرسه «با وجود عدم وسایل» بسیار خوب اداره می‌شود. - -بچه‌ها مدام در مدرسه زمین می‌خوردند، بازی می‌کردند، زمین می‌خوردند. مثل اینکه تاتوله خورده بودند. ساده‌ترین شکل بازی‌هایشان در ربع ساعت‌های تفریح، دعوا بود. فکر می‌کردم علت این همه زمین خوردن شاید این باشد که بیش‌ترشان کفش حسابی ندارند. آن‌ها هم که داشتند، بچه‌ننه بودند و بلد نبودند بدوند و حتی راه بروند. این بود که روزی دو سه بار، دست و پایی خراش بر می‌داشت. پرونده‌ی برق و تلفن مدرسه را از بایگانی بسیار محقر مدرسه بیرون کشیده بودم و خوانده بودم. اگر یک خرده می‌دویدی تا دو سه سال دیگر هم برق مدرسه درست می‌شد و هم تلفنش. دوباره سری به اداره ساختمان زدم و موضوع را تازه کردم و به رفقایی که دورادور در اداره‌ی برق و تلفن داشتم، یکی دو بار رو انداختم که اول خیال می‌کردند کار خودم را می‌خواهم به اسم مدرسه راه بیندازم و ناچار رها کردم. این قدر بود که ادای وظیفه‌ای می‌کرد. مدرسه آب نداشت. نه آب خوراکی و نه آب جاری. با هرزاب بهاره، آب انبار زیر حوض را می‌انباشتند که تلمبه‌ای سرش بود و حوض را با همان پر می‌کردند و خود بچه‌ها. اما برای آب خوردن دو تا منبع صد لیتری داشتیم از آهن سفید که مثل امامزاده‌ای یا سقاخانه‌ای دو قلو، روی چهار پایه کنار حیاط بود و روزی دو بار پر و خالی می‌شد. این آب را از همان باغی می‌آوردیم که ردیف کاج‌هایش روی آسمان، لکه‌ی دراز سیاه انداخته بود. البته فراش می‌آورد. با یک سطل بزرگ و یک آب‌پاش که سوراخ بود و تا به مدرسه می‌رسید، نصف شده بود. هر دو را از جیب خودم دادم تعمیر کردند. - -یک روز هم مالک مدرسه آمد. پیرمردی موقر و سنگین که خیال می‌کرد برای سرکشی به خانه‌ی مستأجرنشینش آمده. از در وارد نشده فریادش بلند شد و فحش را کشید به فراش و به فرهنگ که چرا بچه‌ها دیوار مدرسه را با زغال سیاه کرده‌اند واز همین توپ و تشرش شناختمش. کلی با او صحبت کردیم البته او دو برابر سن من را داشت. برایش چای هم آوردیم و با معلم‌ها آشنا شد و قول‌ها داد و رفت. کنه‌ای بود. درست یک پیرمرد. یک ساعت و نیم درست نشست. ماهی یک بار هم این برنامه را داشتند که بایست پیه‌اش را به تن می‌مالیدم. - -اما معلم‌ها. هر کدام یک ابلاغ بیست و چهار ساعته در دست داشتند، ولی در برنامه به هر کدام‌شان بیست ساعت درس بیشتر نرسیده بود. کم کم قرار شد که یک معلم از فرهنگ بخواهیم و به هر کدام‌شان هجده ساعت درس بدهیم، به شرط آن‌که هیچ بعد از ظهری مدرسه تعطیل نباشد. حتی آن که دانشگاه می‌رفت می‌توانست با هفته‌ای هجده ساعت درس بسازد. و دشوارترین کار همین بود که با کدخدامنشی حل شد و من یک معلم دیگر از فرهنگ خواستم. - -اواخر هفته‌ی دوم، فراش جدید آمد. مرد پنجاه ساله‌ای باریک و زبر و زرنگ که شب‌کلاه می‌گذاشت و لباس آبی می‌پوشید و تسبیح می‌گرداند و از هر کاری سر رشته داشت. آب خوردن را نوبتی می‌آوردند. مدرسه تر و تمیز شد و رونقی گرفت. فراش جدید سرش توی حساب بود. هر دو مستخدم با هم تمام بخاری‌ها را راه انداختند و یک کارگر هم برای کمک به آن‌ها آمد. فراش قدیمی را چهار روز پشت سر هم، سر ظهر می‌فرستادیم اداره‌ی فرهنگ و هر آن منتظر زغال بودیم. هنوز یک هفته از آمدن فراش جدید نگذشته بود که صدای همه‌ی معلم‌ها در آمده بود. نه به هیچ کدامشان سلام می‌کرد و نه به دنبال خرده فرمایش‌هایشان می‌رفت. درست است که به من سلام می‌کرد، اما معلم‌ها هم، لابد هر کدام در حدود من صاحب فضایل و عنوان و معلومات بودند که از یک فراش مدرسه توقع سلام داشته باشند. اما انگار نه انگار. - -بدتر از همه این که سر خر معلم‌ها بود. من که از همان اول، خرجم را سوا کرده بودم و آن‌ها را آزاد گذاشته بودم که در مواقع بیکاری در دفتر را روی خودشان ببندند و هر چه می‌خواهند بگویند و هر کاری می‌خواهند بکنند. اما او در فاصله‌ی ساعات درس، همچه که معلم‌ها می‌آمدند، می‌آمد توی دفتر و همین طوری گوشه‌ی اتاق می‌ایستاد و معلم‌ها کلافه می‌شدند. نه می‌توانستند شلکلک‌های معلمی‌شان را در حضور او کنار بگذارند و نه جرأت می‌کردند به او چیزی بگویند. بدزبان بود و از عهده‌ی همه‌شان بر می‌آمد. یکی دوبار دنبال نخود سیاه فرستاده بودندش. اما زرنگ بود و فوری کار را انجام می‌داد و بر می‌گشت. حسابی موی دماغ شده بود. ده سال تجربه این حداقل را به من آموخته بود که اگر معلم‌ها در ربع ساعت‌های تفریح نتوانند بخندند، سر کلاس، بچه‌های مردم را کتک خواهند زد. این بود که دخالت کردم. یک روز فراش جدید را صدا زدم. اول حال و احوالپرسی و بعد چند سال سابقه دارد و چند تا بچه و چه قدر می‌گیرد... که قضیه حل شد. سی صد و خرده‌ای حقوق می‌گرفت. با بیست و پنج سال سابقه. کار از همین جا خراب بود. پیدا بود که معلم‌ها حق دارند او را غریبه بدانند. نه دیپلمی، نه کاغذپاره‌ای، هر چه باشد یک فراش که بیشتر نبود! و تازه قلدر هم بود و حق هم داشت. اول به اشاره و کنایه و بعد با صراحت بهش فهماندم که گر چه معلم جماعت اجر دنیایی ندارد، اما از او که آدم متدین و فهمیده‌ای است بعید است و از این حرف‌ها... که یک مرتبه پرید توی حرفم که: - -- ای آقا! چه می‌فرمایید؟ شما نه خودتون این کاره‌اید و نه اینارو می‌شناسید. امروز می‌خواند سیگار براشون بخرم، فردا می‌فرستنم سراغ عرق. من این‌ها رو می‌شناسم. - -راست می‌گفت. زودتر از همه، او دندان‌های مرا شمرده بود. فهمیده بود که در مدرسه هیچ‌کاره‌ام. می‌خواستم کوتاه بیایم، ولی مدیر مدرسه بودن و در مقابل یک فراش پررو ساکت ماندن!... که خر خر کامیون زغال به دادم رسید. ترمز که کرد و صدا خوابید گفتم: - -- این حرف‌ها قباحت داره. معلم جماعت کجا پولش به عرق می‌رسه؟ حالا بدو زغال آورده‌اند. - -و همین طور که داشت بیرون می‌رفت، افزودم: - -- دو روز دیگه که محتاجت شدند و ازت قرض خواستند با هم رفیق می‌شید. - -و آمدم توی ایوان. در بزرگ آهنی مدرسه را باز کرده بودند و کامیون آمده بود تو و داشتند بارش را جلوی انبار ته حیاط خالی می‌کردند و راننده، کاغذی به دست ناظم داد که نگاهی به آن انداخت و مرا نشان داد که در ایوان بالا ایستاده بودم و فرستادش بالا. کاغذش را با سلام به دستم داد. بیجک زغال بود. رسید رسمی اداره‌ی فرهنگ بود در سه نسخه و روی آن ورقه‌ی ماشین شده‌ی «باسکول» که می‌گفت کامیون و محتویاتش جمعاً دوازده خروار است. اما رسیدهای رسمی اداری فرهنگ ساکت بودند. جای مقدار زغالی که تحویل مدرسه داده شده بود، در هر سه نسخه خالی بود. پیدا بود که تحویل گیرنده باید پرشان کند. همین کار را کردم. اوراق را بردم توی اتاق و با خودنویسم عدد را روی هر سه ورق نوشتم و امضا کردم و به دست راننده دادم که راه افتاد و از همان بالا به ناظم گفتم: - -- اگر مهر هم بایست زد، خودت بزن بابا. - -و رفتم سراغ کارم که ناگهان در باز شد و ناظم آمد تو؛ بیجک زغال دستش بود و: - -- مگه نفهمیدین آقا؟ مخصوصاً جاش رو خالی گذاشته بودند آقا... - -نفهمیده بودم. اما اگر هم فهمیده بودم، فرقی نمی‌کرد و به هر صورت از چنین کودنی نا به هنگام از جا در رفتم و به شدت گفتم: - -- خوب؟ - -- هیچ چی آقا.... رسم‌شون همینه آقا. اگه باهاشون کنار نیایید کارمونو لنگ می‌گذارند آقا... - -که از جا در رفتم. به چنین صراحتی مرا که مدیر مدرسه بودم در معامله شرکت می‌داد. و فریاد زدم: - -- عجب! حالا سرکار برای من تکلیف هم معین می‌کنید؟... خاک بر سر این فرهنگ با مدیرش که من باشم! برو ورقه رو بده دست‌شون، گورشون رو گم کنند. پدر سوخته‌ها... - -چنان فریاد زده بودم که هیچ کس در مدرسه انتظار نداشت. مدیر سر به زیر و پا به راهی بودم که از همه خواهش می‌کردم و حالا ناظم مدرسه، داشت به من یاد می‌داد که به جای نه خروار زغال مثلا هجده خروار تحویل بگیرم و بعد با اداره‌ی فرهنگ کنار بیایم. هی هی!.... تا ظهر هیچ کاری نتوانستم بکنم، جز این‌که چند بار متن استعفانامه‌ام را بنویسم و پاره کنم... قدم اول را این جور جلوی پای آدم می‌گذارند. - -بارندگی که شروع شد دستور دادم بخاری‌ها را از هفت صبح بسوزانند. بچه‌ها همیشه زود می‌آمدند. حتی روزهای بارانی. مثل این‌که اول آفتاب از خانه بیرون‌شان می‌کنند. یا ناهارنخورده. خیلی سعی کردم یک روز زودتر از بچه‌ها مدرسه باشم. اما عاقبت نشد که مدرسه را خالی از نفسِ به علم‌آلوده‌ی بچه‌ها استنشاق کنم. از راه که می‌رسیدند دور بخاری جمع می‌شدند و گیوه‌هاشان را خشک می‌کردند. و خیلی زود فهمیدم که ظهر در مدرسه ماندن هم مسأله کفش بود. هر که داشت نمی‌ماند.این قاعده در مورد معلم‌ها هم صدق می‌کرد اقلاً یک پول واکس جلو بودند. وقتی که باران می‌بارید تمام کوهپایه و بدتر از آن تمام حیاط مدرسه گل می‌شد. بازی و دویدن متوقف شده بود. مدرسه سوت و کور بود. این جا هم مسأله کفش بود. چشم اغلبشان هم قرمز بود. پیدا بود باز آن روز صبح یک فصل گریه کرده‌اند و در خانه‌شان علم صراطی بوده است. - -مدرسه داشت تخته می‌شد. عده‌ی غایب‌های صبح ده برابر شده بود و ساعت اول هیچ معلمی نمی‌توانست درس بدهد. دست‌های ورم‌کرده و سرمازده کار نمی‌کرد. حتی معلم کلاس اولمان هم می‌دانست که فرهنگ و معلومات مدارس ما صرفاً تابع تمرین است. مشق و تمرین. ده بار بیست بار. دست یخ‌کرده بیل و رنده را هم نمی‌تواند به کار بگیرد که خیلی هم زمخت‌اند و دست پر کن. این بود که به فکر افتادیم. فراش جدید واردتر از همه‌ی ما بود. یک روز در اتاق دفتر، شورامانندی داشتیم که البته او هم بود. خودش را کم‌کم تحمیل کرده بود. گفت حاضر است یکی از دُم‌کلفت‌های همسایه‌ی مدرسه را وادارد که شن برایمان بفرستد به شرط آن که ما هم برویم و از انجمن محلی برای بچه‌ها کفش و لباس بخواهیم. قرار شد خودش قضیه را دنبال کند که هفته‌ی آینده جلسه‌شان کجاست و حتی بخواهد که دعوت‌مانندی از ما بکنند. دو روز بعد سه تا کامیون شن آمد. دوتایش را توی حیاط مدرسه، خالی کردیم و سومی را دم در مدرسه، و خود بچه‌ها نیم ساعته پهنش کردند. با پا و بیل و هر چه که به دست می‌رسید. - -عصر همان روز ما را به انجمن دعوت کردند. خود من و ناظم باید می‌رفتیم. معلم کلاس چهارم را هم با خودمان بردیم. خانه‌ای که محل جلسه‌ی آن شب انجمن بود، درست مثل مدرسه، دور افتاده و تنها بود. قالی‌ها و کناره‌ها را به فرهنگ می‌آلودیم و می‌رفتیم. مثل این‌که سه تا سه تا روی هم انداخته بودند. اولی که کثیف شد دومی. به بالا که رسیدیم یک حاجی آقا در حال نماز خواندن بود. و صاحب‌خانه با لهجه‌ی غلیظ یزدی به استقبال‌مان آمد. همراهانم را معرفی کردم و لابد خودش فهمید مدیر کیست. برای ما چای آوردند. سیگارم را چاق کردم و با صاحب‌خانه از قالی‌هایش حرف زدیم. ناظم به بچه‌هایی می‌ماند که در مجلس بزرگترها خوابشان می‌گیرد و دل‌شان هم نمی‌خواست دست به سر شوند. سر اعضای انجمن باز شده بود. حاجی آقا صندوقدار بود. من و ناظم عین دو طفلان مسلم بودیم و معلم کلاس چهارم عین خولی وسطمان نشسته. اغلب اعضای انجمن به زبان محلی صحبت می‌کردند و رفتار ناشی داشتند. حتی یک کدامشان نمی‌دانستند که دست و پاهای خود را چه جور ضبط و ربط کنند. بلند بلند حرف می‌زدند. درست مثل این‌که وزارتخانه‌ی دواب سه تا حیوان تازه برای باغ وحش محله‌شان وارد کرده. جلسه که رسمی شد، صاحبخانه معرفی‌مان کرد و شروع کردند. مدام از خودشان صحبت می‌کردند از این‌که دزد دیشب فلان جا را گرفته و باید درخواست پاسبان شبانه کنیم و... - -همین طور یک ساعت حرف زدند و به مهام امور رسیدگی کردند و من و معلم کلاس چهارم سیگار کشیدیم. انگار نه انگار که ما هم بودیم. نوکرشان که آمد استکان‌ها را جمع کند، چیزی روی جلد اشنو نوشتم و برای صاحبخانه فرستادم که یک مرتبه به صرافت ما افتاد و اجازه خواست و: - -- آقایان عرضی دارند. بهتر است کارهای خودمان را بگذاریم برای بعد. - -مثلاً می‌خواست بفهماند که نباید همه‌ی حرف‌ها را در حضور ما زده باشند. و اجازه دادند معلم کلاس چهار شروع کرد به نطق و او هم شروع کرد که هر چه باشد ما زیر سایه‌ی آقایانیم و خوش‌آیند نیست که بچه‌هایی باشند که نه لباس داشته باشند و نه کفش درست و حسابی و از این حرف‌ها و مدام حرف می‌زد. ناظم هم از چُرت در آمد چیزهایی را که از حفظ کرده بود گفت و التماس دعا و کار را خراب کرد.تشری به ناظم زدم که گدابازی را بگذارد کنار و حالی‌شان کردم که صحبت از تقاضا نیست و گدایی. بلکه مدرسه دور افتاده است و مستراح بی در و پیکر و از این اباطیل... چه خوب شد که عصبانی نشدم. و قرار شد که پنج نفرشان فردا عصر بیایند که مدرسه را وارسی کنند و تشکر و اظهار خوشحالی و در آمدیم. - -در تاریکی بیابان هفت تا سواری پشت در خانه ردیف بودند و راننده‌ها توی یکی از آن‌ها جمع شده بودند و اسرار ارباب‌هاشان را به هم می‌گفتند. در این حین من مدام به خودم می‌گفتم من چرا رفتم؟ به من چه؟ مگر من در بی کفش و کلاهی‌شان مقصر بودم؟ می‌بینی احمق؟ مدیر مدرسه هم که باشی باید شخصیت و غرورت را لای زرورق بپیچی و طاق کلاهت بگذاری که اقلاً نپوسد. حتی اگر بخواهی یک معلم کوفتی باشی، نه چرا دور می‌زنی؟ حتی اگر یک فراش ماهی نود تومانی باشی، باید تا خرخره توی لجن فرو بروی.در همین حین که من در فکر بودم ناظم گفت: - -- دیدید آقا چه طور باهامون رفتار کردند؟ با یکی از قالی‌هاشون آقا تمام مدرسه رو می‌خرید. - -گفتم: - -- تا سر و کارت با الف.ب است به‌پا قیاس نکنی. خودخوری می‌آره. - -و معلم کلاس چهار گفت: - -- اگه فحشمون هم می‌دادند من باز هم راضی بودم، باید واقع‌بین بود. خدا کنه پشیمون نشند. - -بعد هم مدتی درد دل کردیم و تا اتوبوس برسد و سوار بشیم، معلوم شد که معلم کلاس چهار با زنش متارکه کرده و مادر ناظم را سرطانی تشخیص دادند. و بعد هم شب بخیر... - -دو روز تمام مدرسه نرفتم. خجالت می‌کشیدم توی صورت یک کدام‌شان نگاه کنم. و در همین دو روز حاجی آقا با دو نفر آمده بودند، مدرسه را وارسی و صورت‌برداری و ناظم می‌گفت که حتی بچه‌هایی هم که کفش و کلاهی داشتند پاره و پوره آمده بودند. و برای بچه‌ها کفش و لباس خریدند. روزهای بعد احساس کردم زن‌هایی که سر راهم لب جوی آب ظرف می‌شستند، سلام می‌کنند و یک بار هم دعای خیر یکی‌شان را از عقب سر شنیدم.اما چنان از خودم بدم آمده بود که رغبتم نمی‌شد به کفش و لباس‌هاشان نگاه کنم. قربان همان گیوه‌های پاره! بله، نان گدایی فرهنگ را نو نوار کرده بود. - -تازه از دردسرهای اول کار مدرسه فارغ شده بودم که شنیدم که یک روز صبح، یکی از اولیای اطفال آمد. بعد از سلام و احوالپرسی دست کرد توی جیبش و شش تا عکس در آورد، گذاشت روی میزم. شش تا عکس زن . و هر کدام به یک حالت. یعنی چه؟ نگاه تندی به او کردم. آدم مرتبی بود. اداری مانند. کسر شأن خودم می‌دانستم که این گوشه‌ی از زندگی را طبق دستور عکاس‌باشی فلان خانه‌ی بندری ببینم. اما حالا یک مرد اتو کشیده‌ی مرتب آمده بود و شش تا از همین عکس‌ها را روی میزم پهن کرده بود و به انتظار آن که وقاحت عکس‌ها چشم‌هایم را پر کند داشت سیگار چاق می‌کرد. - -حسابی غافلگیر شده بودم... حتماً تا هر شش تای عکس‌ها را ببینم، بیش از یک دقیقه طول کشید. همه از یک نفر بود. به این فکر گریختم که الان هزار ها یا میلیون ها نسخه‌ی آن، توی جیب چه جور آدم‌هایی است و در کجاها و چه قدر خوب بود که همه‌ی این آدم‌ها را می‌شناختم یا می‌دیدم. بیش ازین نمی‌شد گریخت. یارو به تمام وزنه وقاحتش، جلوی رویم نشسته بود. سیگاری آتش زدم و چشم به او دوختم. کلافه بود و پیدا بود برای کتک‌کاری هم آماده باشد. سرخ شده بود و داشت در دود سیگارش تکیه‌گاهی برای جسارتی که می‌خواست به خرج بدهد می‌جست. عکس‌ها را با یک ورقه از اباطیلی که همان روز سیاه کرده بودم، پوشاندم و بعد با لحنی که دعوا را با آن شروع می‌کنند؛ پرسیدم: - -- خوب، غرض؟ - -و صدایم توی اتاق پیچید. حرکتی از روی بیچارگی به خودش داد و همه‌ی جسارت‌ها را با دستش توی جیبش کرد و آرام‌تر از آن چیزی که با خودش تو آورده بود، گفت: - -- چه عرض کنم؟... از معلم کلاس پنج تون بپرسید. - -که راحت شدم و او شروع کرد به این که «این چه فرهنگی است؟ خراب بشود. پس بچه‌های مردم با چه اطمینانی به مدرسه بیایند؟ - -و از این حرف‌ها... - -خلاصه این آقا معلم کاردستی کلاس پنجم، این عکس‌ها را داده به پسر آقا تا آن‌ها را روی تخته سه لایی بچسباند و دورش را سمباده بکشد و بیاورد. به هر صورت معلم کلاس پنج بی‌گدار به آب زده. و حالا من چه بکنم؟ به او چه جوابی بدهم؟ بگویم معلم را اخراج می‌کنم؟ که نه می‌توانم و نه لزومی دارد. او چه بکند؟ حتماً در این شهر کسی را ندارد که به این عکس‌ها دلخوش کرده. ولی آخر چرا این جور؟ یعنی این قدر احمق است که حتی شاگردهایش را نمی‌شناسد؟... پاشدم ناظم را صدا بزنم که خودش آمده بود بالا، توی ایوان منتظر ایستاده بود. من آخرین کسی بودم که از هر اتفاقی در مدرسه خبردار می‌شدم. حضور این ولی طفل گیجم کرده بود که چنین عکس‌هایی را از توی جیب پسرش، و لابد به همین وقاحتی که آن‌ها را روی میز من ریخت، در آورده بوده. وقتی فهمید هر دو در مانده‌ایم سوار بر اسب شد که اله می‌کنم و بله می‌کنم، در مدرسه را می‌بندم، و از این جفنگیات.... - -حتماً نمی‌دانست که اگر در هر مدرسه بسته بشود، در یک اداره بسته شده است. اما من تا او بود نمی‌توانستم فکرم را جمع کنم. می‌خواست پسرش را بخواهیم تا شهادت بدهد و چه جانی کندیم تا حالیش کنیم که پسرش هر چه خفت کشیده، بس است و وعده‌ها دادیم که معلمش را دم خورشید کباب کنیم و از نان خوردن بیندازیم. یعنی اول ناظم شروع کرد که از دست او دل پری داشت و من هم دنبالش را گرفتم. برای دک کردن او چاره‌ای جز این نبود. و بعد رفت، ما دو نفری ماندیم با شش تا عکس زن . حواسم که جمع شد به ناظم سپردم صدایش را در نیاورد و یک هفته‌ی تمام مطلب را با عکس‌ها، توی کشوی میزم قفل کردم و بعد پسرک را صدا زدم. نه عزیزدُردانه می‌نمود و نه هیچ جور دیگر. داد می‌زد که از خانواده‌ی عیال‌واری است. کم‌خونی و فقر. دیدم معلمش زیاد هم بد تشخیص نداده. یعنی زیاد بی‌گدار به آب نزده. گفتم: - -- خواهر برادر هم داری؟ - -- آ... آ...آقا داریم آقا. - -- چند تا؟ - -- آ... آقا چهار تا آقا. - -- عکس‌ها رو خودت به بابات نشون دادی؟ - -- نه به خدا آقا... به خدا قسم... - -- پس چه طور شد؟ - -و دیدم از ترس دارد قالب تهی می‌کند. گرچه چوب‌های ناظم شکسته بود، اما ترس او از من که مدیر باشم و از ناظم و از مدرسه و از تنبیه سالم مانده بود. - -- نترس بابا. کاریت نداریم. تقصیر آقا معلمه که عکس‌ها رو داده... تو کار بدی نکردی بابا جان. فهمیدی؟ اما می‌خواهم ببینم چه طور شد که عکس‌ها دست بابات افتاد. - -- آ.. آ... آخه آقا... آخه... - -می‌دانستم که باید کمکش کنم تا به حرف بیاید. - -گفتم: - -- می‌دونی بابا؟ عکس‌هام چیز بدی نبود. تو خودت فهمیدی چی بود؟ - -- آخه آقا...نه آقا.... خواهرم آقا... خواهرم می‌گفت... - -- خواهرت؟ از تو کوچک‌تره؟ - -- نه آقا. بزرگ‌تره. می‌گفتش که آقا... می‌گفتش که آقا... هیچ چی سر عکس‌ها دعوامون شد. - -دیگر تمام بود. عکس‌ها را به خواهرش نشان داده بود که لای دفترچه پر بوده از عکس آرتیست‌ها. به او پز داده بوده. اما حاضر نبوده، حتی یکی از آن‌ها را به خواهرش بدهد. آدم مورد اعتماد معلم باشد و چنین خبطی بکند؟ و تازه جواب معلم را چه بدهد؟ ناچار خواهر او را لو داده بوده. بعد از او معلم را احضار کردم. علت احضار را می‌دانست. و داد می‌زد که چیزی ندارد بگوید. پس از یک هفته مهلت، هنوز از وقاحتی که من پیدا کرده بودم، تا از آدم خلع سلاح‌شده‌ای مثل او، دست بر ندارم، در تعجب بود. به او سیگار تعارف کردم و این قصه را برایش تعریف کردم که در اوایل تأسیس وزارت معارف، یک روز به وزیر خبر می‌دهند که فلان معلم با فلان بچه روابطی دارد. وزیر فوراً او را می‌خواهد و حال و احوال او را می‌پرسد و این‌که چرا تا به حال زن نگرفته و ناچار تقصیر گردن بی‌پولی می‌افتد و دستور که فلان قدر به او کمک کنند تا عروسی راه بیندازد و خود او هم دعوت بشود و قضیه به همین سادگی تمام می‌شود. و بعد گفتم که خیلی جوان‌ها هستند که نمی‌توانند زن بگیرند و وزرای فرهنگ هم این روزها گرفتار مصاحبه‌های روزنامه‌ای و رادیویی هستند. اما در نجیب‌خانه‌ها که باز است و ازین مزخرفات... و هم‌دردی و نگذاشتم یک کلمه حرف بزند. بعد هم عکس را که توی پاکت گذاشته بودم، به دستش دادم و وقاحت را با این جمله به حد اعلا رساندم که: - -- اگر به تخته نچسبونید، ضررشون کم‌تره. - -تا حقوقم به لیست اداره‌ی فرهنگ برسه، سه ماه طول کشید. فرهنگی‌های گداگشنه و خزانه‌ی خالی و دست‌های از پا درازتر! اما خوبیش این بود که در مدرسه‌ی ما فراش جدیدمان پولدار بود و به همه‌شان قرض داد. کم کم بانک مدرسه شده بود. از سیصد و خرده‌ای تومان که می‌گرفت، پنجاه تومان را هم خرج نمی‌کرد. نه سیگار می‌کشید و نه اهل سینما بود و نه برج دیگری داشت. از این گذشته، باغبان یکی از دم‌کلفت‌های همان اطراف بود و باغی و دستگاهی و سور و ساتی و لابد آشپزخانه‌ی مرتبی. خیلی زود معلم‌ها فهمیدند که یک فراش پولدار خیلی بیش‌تر به درد می‌خورد تا یک مدیر بی‌بو و خاصیت. - -این از معلم‌ها. حقوق مرا هم هنوز از مرکز می‌دادند. با حقوق ماه بعد هم اسم مرا هم به لیست اداره منتقل کردند. درین مدت خودم برای خودم ورقه انجام کار می‌نوشتم و امضا می‌کردم و می‌رفتم از مدرسه‌ای که قبلاً در آن درس می‌دادم، حقوقم را می‌گرفتم. سر و صدای حقوق که بلند می‌شد معلم‌ها مرتب می‌شدند و کلاس ماهی سه چهار روز کاملاً دایر بود. تا ورقه‌ی انجام کار به دستشان بدهم. غیر از همان یک بار - در اوایل کار- که برای معلم حساب پنج و شش قرمز توی دفتر گذاشتیم، دیگر با مداد قرمز کاری نداشتیم و خیال همه‌شان راحت بود. وقتی برای گرفتن حقوقم به اداره رفتم، چنان شلوغی بود که به خودم گفتم کاش اصلاً حقوقم را منتقل نکرده بودم. نه می‌توانستم سر صف بایستم و نه می‌توانستم از حقوقم بگذرم. تازه مگر مواجب‌بگیر دولت چیزی جز یک انبان گشاده‌ی پای صندوق است؟..... و اگر هم می‌ماندی با آن شلوغی باید تا دو بعداز ظهر سر پا بایستی. همه‌ی جیره‌خوارهای اداره بو برده بودند که مدیرم. و لابد آن‌قدر ساده لوح بودند که فکر کنند روزی گذارشان به مدرسه‌ی ما بیفتد. دنبال سفته‌ها می‌گشتند، به حسابدار قبلی فحش می‌دادند، التماس می‌کردند که این ماه را ندیده بگیرید و همه‌ی حق و حساب‌دان شده بودند و یکی که زودتر از نوبت پولش را می‌گرفت صدای همه در می‌آمد. در لیست مدرسه، بزرگ‌ترین رقم مال من بود. درست مثل بزرگ‌ترین گناه در نامه‌ی عمل. دو برابر فراش جدیدمان حقوق می‌گرفتم. از دیدن رقم‌های مردنی حقوق دیگران چنان خجالت کشیدم که انگار مال آن‌ها را دزدیده‌ام. و تازه خلوت که شد و ده پانزده تا امضا که کردم، صندوق‌دار چشمش به من افتاد و با یک معذرت، شش صد تومان پول دزدی را گذاشت کف دستم... مرده شور! - -هنوز برف اول نباریده بود که یک روز عصر، معلم کلاس چهار رفت زیر ماشین. زیر یک سواری. مثل همه‌ی عصرها من مدرسه نبودم. دم غروب بود که فراش قدیمی مدرسه دم در خونه‌مون، خبرش را آورد. که دویدم به طرف لباسم و تا حاضر بشوم، می‌شنیدم که دارد قضیه را برای زنم تعریف می‌کند. ماشین برای یکی از آمریکایی‌ها بوده. باقیش را از خانه که در آمدیم برایم تعریف کرد. گویا یارو خودش پشت فرمون بوده و بعد هم هول شده و در رفته. بچه‌ها خبر را به مدرسه برگردانده‌اند و تا فراش و زنش برسند، جمعیت و پاسبان‌ها سوارش کرده بودند و فرستاده بوده‌اند مریض‌خانه. به اتوبوس که رسیدم، دیدم لاک پشت است. فراش را مرخص کردم و پریدم توی تاکسی. اول رفتم سراغ پاسگاه جدید کلانتری. تعاریف تکه و پاره‌ای از پرونده مطلع بود. اما پرونده تصریحی نداشت که راننده که بوده. اما هیچ کس نمی‌دانست عاقبت چه بلایی بر سر معلم کلاس چهار ما آمده است. کشیک پاسگاه همین قدر مطلع بود که درین جور موارد «طبق جریان اداری» اول می‌روند سرکلانتری، بعد دایره‌ی تصادفات و بعد بیمارستان. اگر آشنا در نمی‌آمدیم، کشیک پاسگاه مسلماً نمی‌گذاشت به پرونده نگاه چپ بکنم. احساس کردم میان اهل محل کم‌کم دارم سرشناس می‌شوم. و از این احساس خنده‌ام گرفت. - -ساعت ۸ دم در بیمارستان بودم، اگر سالم هم بود حتماً یه چیزیش شده بود. همان طور که من یه چیزیم می‌شد. روی در بیمارستان نوشته شده بود: «از ساعت ۷ به بعد ورود ممنوع». در زدم. از پشت در کسی همین آیه را صادر کرد. دیدم فایده ندارد و باید از یک چیزی کمک بگیرم. از قدرتی، از مقامی، از هیکلی، از یک چیزی. صدایم را کلفت کردم و گفتم:« من...» می‌خواستم بگویم من مدیر مدرسه‌ام. ولی فوراً پشیمان شدم. یارو لابد می‌گفت مدیر مدرسه کدام سگی است؟ این بود با کمی مکث و طمطراق فراوان جمله‌ام را این طور تمام کردم: - -- ...بازرس وزارت فرهنگم. - -که کلون صدایی کرد و لای در باز شد. یارو با چشم‌هایش سلام کرد. رفتم تو و با همان صدا پرسیدم: - -- این معلمه مدرسه که تصادف کرده... - -تا آخرش را خواند. یکی را صدا زد و دنبالم فرستاد که طبقه‌ی فلان، اتاق فلان. از حیاط به راهرو و باز به حیاط دیگر که نصفش را برف پوشانده بود و من چنان می‌دویدم که یارو از عقب سرم هن هن می‌کرد. طبقه‌ی اول و دوم و چهارم. چهار تا پله یکی. راهرو تاریک بود و پر از بوهای مخصوص بود. هن هن کنان دری را نشان داد که هل دادم و رفتم تو. بو تندتر بود و تاریکی بیشتر. تالاری بود پر از تخت و جیرجیر کفش و خرخر یک نفر. دور یک تخت چهار نفر ایستاده بودند. حتماً خودش بود. پای تخت که رسیدم، احساس کردم همه‌ی آنچه از خشونت و تظاهر و ابهت به کمک خواسته بودم آب شد و بر سر و صورتم راه افتاد. و این معلم کلاس چهارم مدرسه‌ام بود. سنگین و با شکم بر آمده دراز کشیده بود. خیلی کوتاه‌تر از زمانی که سر پا بود به نظرم آمد. صورت و سینه‌اش از روپوش چرک‌مُرد بیرون بود. صورتش را که شسته بودند کبود کبود بود، درست به رنگ جای سیلی روی صورت بچه‌ها. مرا که دید، لبخند و چه لبخندی! شاید می‌خواست بگوید مدرسه‌ای که مدیرش عصرها سر کار نباشد، باید همین جورها هم باشد. خنده توی صورت او همین طور لرزید و لرزید تا یخ زد. - -«آخر چرا تصادف کردی؟...» - -مثل این که سوال را ازو کردم. اما وقتی که دیدم نمی‌تواند حرف بزند و به جای هر جوابی همان خنده‌ی یخ‌بسته را روی صورت دارد، خودم را به عنوان او دم چک گرفتم. «آخه چرا؟ چرا این هیکل مدیر کلی را با خودت این قد این ور و آن ور می‌بری تا بزنندت؟ تا زیرت کنند؟ مگر نمی‌دانستی که معلم حق ندارد این قدر خوش‌هیکل باشد؟ آخر چرا تصادف کردی؟» به چنان عتاب و خطابی این‌ها را می‌گفتم که هیچ مطمئن نیستم بلند بلند به خودش نگفته باشم. و یک مرتبه به کله‌ام زد که «مبادا خودت چشمش زده باشی؟» و بعد: «احمق خاک بر سر! بعد از سی و چند سال عمر، تازه خرافاتی شدی!» و چنان از خودم بیزاریم گرفت که می‌خواستم به یکی فحش بدهم، کسی را بزنم. که چشمم به دکتر کشیک افتاد. - -- مرده شور این مملکتو ببره. ساعت چهار تا حالا از تن این مرد خون می‌ره. حیفتون نیومد؟... - -دستی روی شانه‌ام نشست و فریادم را خواباند. برگشتم پدرش بود. او هم می‌خندید. دو نفر دیگر هم با او بودند. همه دهاتی‌وار؛ همه خوش قد و قواره. حظ کردم! آن دو تا پسرهایش بودند یا برادرزاده‌هایش یا کسان دیگرش. تازه داشت گل از گلم می‌شکفت که شنیدم: - -- آقا کی باشند؟ - -این راهم دکتر کشیک گفت که من باز سوار شدم: - -- مرا می‌گید آقا؟ من هیشکی. یک آقا مدیر کوفتی. این هم معلمم. - -که یک مرتبه عقل هی زد و «پسر خفه شو» و خفه شدم. بغض توی گلویم بود. دلم می‌خواست یک کلمه دیگر بگوید. یک کنایه بزند... نسبت به مهارت هیچ دکتری تا کنون نتوانسته‌ام قسم بخورم. دستش را دراز کرد که به اکراه فشار دادم و بعد شیشه‌ی بزرگی را نشانم داد که وارونه بالای تخت آویزان بود و خرفهمم کرد که این جوری غذا به او می‌رسانند و عکس هم گرفته‌اند و تا فردا صبح اگر زخم‌ها چرک نکند، جا خواهند انداخت و گچ خواهند کرد. که یکی دیگر از راه رسید. گوشی به دست و سفید پوش و معطر. با حرکاتی مثل آرتیست سینما. سلامم کرد. صدایش در ته ذهنم چیزی را مختصر تکانی داد. اما احتیاجی به کنجکاوی نبود. یکی از شاگردهای نمی‌دانم چند سال پیشم بود. خودش خودش را معرفی کرد. آقای دکتر...! عجب روزگاری! هر تکه از وجودت را با مزخرفی از انبان مزخرفاتت، مثل ذره‌ای روزی در خاکی ریخته‌ای که حالا سبز کرده. چشم داری احمق. این تویی که روی تخت دراز کشیده‌ای. ده سال آزگار از پلکان ساعات و دقایق عمرت هر لحظه یکی بالا رفته و تو فقط خستگی این بار را هنوز در تن داری. این جوجه‌فکلی و جوجه‌های دیگر که نمی‌شناسی‌شان، همه از تخمی سر در آورده‌اند که روزی حصار جوانی تو بوده و حالا شکسته و خالی مانده. دستش را گرفتم و کشیدمش کناری و در گوشش هر چه بد و بی‌راه می‌دانستم، به او و همکارش و شغلش دادم. مثلاً می‌خواستم سفارش معلم کلاس چهار مدرسه‌ام را کرده باشم. بعد هم سری برای پدر تکان دادم و گریختم. از در که بیرون آمدم، حیاط بود و هوای بارانی. از در بزرگ که بیرون آمدم به این فکر می‌کردم که «اصلا به تو چه؟ اصلاً چرا آمدی؟ می‌خواستی کنجکاوی‌ات را سیرکنی؟» و دست آخر به این نتیجه رسیدم که «طعمه‌ای برای میزنشین‌های شهربانی و دادگستری به دست آمده و تو نه می‌توانی این طعمه را از دستشان بیرون بیاوری و نه هیچ کار دیگری می‌توانی بکنی...» - -و داشتم سوار تاکسی می‌شدم تا برگردم خانه که یک دفعه به صرافت افتادم که اقلاً چرا نپرسیدی چه بلایی به سرش آمده؟» خواستم عقب‌گرد کنم، اما هیکل کبود معلم کلاس چهارم روی تخت بود و دیدم نمی‌توانم. خجالت می‌کشیدم و یا می‌ترسیدم. آن شب تا ساعت دو بیدار بودم و فردا یک گزارش مفصل به امضای مدیر مدرسه و شهادت همه‌ی معلم‌ها برای اداره‌ی فرهنگ و کلانتری محل و بعد هم دوندگی در اداره‌ی بیمه و قرار بر این که روزی نه تومان بودجه برای خرج بیمارستان او بدهند و عصر پس از مدتی رفتم مدرسه و کلاس‌ها را تعطیل کردم و معلم‌ها و بچه‌های ششم را فرستادم عیادتش و دسته گل و ازین بازی‌ها... و یک ساعتی در مدرسه تنها ماندم و فارغ از همه چیز برای خودم خیال بافتم.... و فردا صبح پدرش آمد سلام و احوالپرسی و گفت یک دست و یک پایش شکسته و کمی خونریزی داخل مغز و از طرف یارو آمریکاییه آمده‌اند عیادتش و وعده و وعید که وقتی خوب شد، در اصل چهار استخدامش کنند و با زبان بی‌زبانی حالیم کرد که گزارش را بیخود داده‌ام و حالا هم داده‌ام، دنبالش نکنم و رضایت طرفین و کاسه‌ی از آش داغ‌تر و از این حرف‌ها... خاک بر سر مملکت. - -اوایل امر توجهی به بچه‌ها نداشتم. خیال می‌کردم اختلاف سِنی میان‌مان آن قدر هست که کاری به کار همدیگر نداشته باشیم. همیشه سرم به کار خودم بود. در دفتر را می‌بستم و در گرمای بخاری دولت قلم صد تا یک غاز می‌زدم. اما این کار مرتب سه چهار هفته بیش‌تر دوام نکرد. خسته شدم. ناچار به مدرسه بیشتر می‌رسیدم. یاد روزهای قدیمی با دوستان قدیمی به خیر چه آدم‌های پاک و بی‌آلایشی بودند، چه شخصیت‌های بی‌نام و نشانی و هر کدام با چه زبانی و با چه ادا و اطوارهای مخصوص به خودشان و این جوان‌های چلفته‌ای. چه مقلدهای بی‌دردسری برای فرهنگی‌مابی! نه خبری از دیروزشان داشتند و نه از املاک تازه‌ای که با هفتاد واسطه به دست‌شان داده بودند، چیزی سرشان می‌شد. بدتر از همه بی‌دست و پایی‌شان بود. آرام و مرتب درست مثل واگن شاه عبدالعظیم می‌آمدند و می‌رفتند. فقط بلد بودند روزی ده دقیقه دیرتر بیایند و همین. و از این هم بدتر تنگ‌نظری‌شان بود. - -سه بار شاهد دعواهایی بودم که سر یک گلدان میخک یا شمعدانی بود. بچه‌باغبان‌ها زیاد بودند و هر کدام‌شان حداقل ماهی یک گلدان میخک یا شمعدانی می‌آوردند که در آن برف و سرما نعمتی بود. اول تصمیم گرفتم، مدرسه را با آن‌ها زینت دهم. ولی چه فایده؟ نه کسی آب‌شان می‌داد و نه مواظبتی. و باز بدتر از همه‌ی این‌ها، بی‌شخصیتی معلم‌ها بود که درمانده‌ام کرده بود. دو کلمه نمی‌توانستند حرف بزنند. عجب هیچ‌کاره‌هایی بودند! احساس کردم که روز به روز در کلاس‌ها معلم‌ها به جای دانش‌آموزان جاافتاده‌تر می‌شوند. در نتیجه گفتم بیش‌تر متوجه بچه‌ها باشم. - -آن‌ها که تنها با ناظم سر و کار داشتند و مثل این بود که به من فقط یک سلام نیمه‌جویده بدهکارند. با این همه نومیدکننده نبودند. توی کوچه مواظب‌شان بودم. می‌خواستم حرف و سخن‌ها و درد دل‌ها و افکارشان را از یک فحش نیمه‌کاره یا از یک ادای نیمه‌تمام حدس بزنم، که سلام‌نکرده در می‌رفتند. خیلی کم تنها به مدرسه می‌آمدند. پیدا بود که سر راه همدیگر می‌ایستند یا در خانه‌ی یکدیگر می‌روند. سه چهار نفرشان هم با اسکورت می‌آمدند. از بیست سی نفری که ناهار می‌ماندند، فقط دو نفرشان چلو خورش می‌آوردند؛ فراش اولی مدرسه برایم خبر می‌آورد. بقیه گوشت‌کوبیده، پنیر گردوئی، دم پختکی و از این جور چیزها. دو نفرشان هم بودند که نان سنگک خالی می‌آوردند. برادر بودند. پنجم و سوم. صبح که می‌آمدند، جیب‌هاشان باد کرده بود. سنگک را نصف می‌کردند و توی جیب‌هاشان می‌تپاندند و ظهر می‌شد، مثل آن‌هایی که ناهارشان را در خانه می‌خورند، می‌رفتند بیرون. من فقط بیرون رفتن‌شان را می‌دیدم. اما حتی همین‌ها هر کدام روزی، یکی دو قران از فراش مدرسه خرت و خورت می‌خریدند. از همان فراش قدیمی مدرسه که ماهی پنج تومان سرایداریش را وصول کرده بودم. هر روز که وارد اتاقم می‌شدم پشت سر من می‌آمد بارانی‌ام را بر می‌داشت و شروع می‌کرد به گزارش دادن، که دیروز باز دو نفر از معلم‌ها سر یک گلدان دعوا کرده‌اند یا مأمور فرماندار نظامی آمده یا دفتردار عوض شده و از این اباطیل... پیدا بود که فراش جدید هم در مطالبی که او می‌گفت، سهمی دارد. - -یک روز در حین گزارش دادن، اشاره‌ای کرد به این مطلب که دیروز عصر یکی از بچه‌های کلاس چهار دو تا کله قند به او فروخته است. درست مثل اینکه سر کلاف را به دستم داده باشد پرسیدم: - -- چند؟ - -- دو تومنش دادم آقا. - -- زحمت کشیدی. نگفتی از کجا آورده؟ - -- من که ضامن بهشت و جهنمش نبودم آقا. - -بعد پرسیدم: - -- چرا به آقای ناظم خبر ندادی؟ - -می‌دانستم که هم او و هم فراش جدید، ناظم را هووی خودشان می‌دانند و خیلی چیزهاشان از او مخفی بود. این بود که میان من و ناظم خاصه‌خرجی می‌کردند. در جوابم همین طور مردد مانده بود که در باز شد و فراش جدید آمد تو. که: - -- اگه خبرش می‌کرد آقا بایست سهمش رو می‌داد... - -اخمم را درهم کشیدم و گفتم: - -- تو باز رفتی تو کوک مردم! اونم این جوری سر نزده که نمی‌آیند تو اتاق کسی، پیرمرد! - -و بعد اسم پسرک را ازشان پرسیدم و حالی‌شان کردم که چندان مهم نیست و فرستادمشان برایم چای بیاورند. بعد کارم را زودتر تمام کردم و رفتم به اتاق دفتر احوالی از مادر ناظم پرسیدم و به هوای ورق زدن پرونده‌ها فهمیدم که پسرک شاگرد دوساله است و پدرش تاجر بازار. بعد برگشتم به اتاقم. یادداشتی برای پدر نوشتم که پس فردا صبح، بیاید مدرسه و دادم دست فراش جدید که خودش برساند و رسیدش را بیاورد. - -و پس فردا صبح یارو آمد. باید مدیر مدرسه بود تا دانست که اولیای اطفال چه راحت تن به کوچک‌ترین خرده‌فرمایش‌های مدرسه می‌دهند. حتم دارم که اگر از اجرای ثبت هم دنبال‌شان بفرستی به این زودی‌ها آفتابی نشوند. چهل و پنج ساله مردی بود با یخه‌ی بسته بی‌کراوات و پالتویی که بیش‌تر به قبا می‌ماند. و خجالتی می‌نمود. هنوز ننشسته، پرسیدم: - -- شما دو تا زن دارید آقا؟ - -درباره‌ی پسرش برای خودم پیش‌گویی‌هایی کرده بودم و گفتم این طوری به او رودست می‌زنم. پیدا بود که از سؤالم زیاد یکه نخورده است. گفتم برایش چای آوردند و سیگاری تعارفش کردم که ناشیانه دود کرد از ترس این که مبادا جلویم در بیاید که - به شما چه مربوط است و از این اعتراض‌ها - امانش ندادم و سؤالم را این جور دنبال کردم: - -- البته می‌بخشید. چون لابد به همین علت بچه شما دو سال در یک کلاس مانده. - -شروع کرده بودم برایش یک میتینگ بدهم که پرید وسط حرفم: - -- به سر شما قسم، روزی چهار زار پول تو جیبی داره آقا. پدرسوخته‌ی نمک به حروم...! - -حالیش کردم که علت، پول تو جیبی نیست و خواستم که عصبانی نشود و قول گرفتم که اصلاً به روی پسرش هم نیاورد و آن وقت میتینگم را برایش دادم که لابد پسر در خانه مهر و محبتی نمی‌بیند و غیب‌گویی‌های دیگر... تا عاقبت یارو خجالتش ریخت و سرِ درد دلش باز شد که عفریته زن اولش همچه بوده و همچون بوده و پسرش هم به خودش برده و کی طلاقش داده و از زن دومش چند تا بچه دارد و این نره‌خر حالا باید برای خودش نان‌آور شده باشد و زنش حق دارد که با دو تا بچه‌ی خرده‌پا به او نرسد... من هم کلی برایش صحبت کردم. چایی دومش را هم سر کشید و قول‌هایش را که داد و رفت، من به این فکر افتادم که «نکند علمای تعلیم و تربیت هم، همین جورها تخم دوزرده می‌کنند!» - -یک روز صبح که رسیدم، ناظم هنوز نیامده بود. از این اتفاق‌ها کم می‌افتاد. ده دقیقه‌ای از زنگ می‌گذشت و معلم‌ها در دفتر سرگرم اختلاط بودند. خودم هم وقتی معلم بودم به این مرض دچار بودم. اما وقتی مدیر شدم تازه فهمیدم که معلم‌ها چه لذتی می‌برند. حق هم داشتند. آدم وقتی مجبور باشد شکلکی را به صورت بگذارد که نه دیگران از آن می‌خندند و نه خود آدم لذتی می‌برد، پیداست که رفع تکلیف می‌کند. زنگ را گفتم زدند و بچه‌ها سر کلاس رفتند. دو تا از کلاس‌ها بی‌معلم بود. یکی از ششمی‌ها را فرستادم سر کلاس سوم که برای‌شان دیکته بگوید و خودم رفتم سر کلاس چهار. مدیر هم که باشی، باز باید تمرین کنی که مبادا فوت و فن معلمی از یادت برود. در حال صحبت با بچه‌ها بودم که فراش خبر آورد که خانمی توی دفتر منتظرم است. خیال کردم لابد همان زنکه‌ی بیکاره‌ای است که هفته‌ای یک بار به هوای سرکشی، به وضع درس و مشق بچه‌اش سری می‌زند. زن سفیدرویی بود با چشم‌های درشت محزون و موی بور. بیست و پنج ساله هم نمی‌نمود. اما بچه‌اش کلاس سوم بود. روز اول که دیدمش لباس نارنجی به تن داشت و تن بزک کرده بود. از زیارت من خیلی خوشحال شد و از مراتب فضل و ادبم خبر داشت. - -خیلی ساده آمده بود تا با دو تا مرد حرفی زده باشد. آن طور که ناظم خبر می‌داد، یک سالی طلاق گرفته بود و روی هم رفته آمد و رفتنش به مدرسه باعث دردسر بود. وسط بیابان و مدرسه‌ای پر از معلم‌های عزب و بی‌دست و پا و یک زن زیبا... ناچار جور در نمی‌آمد. این بود که دفعات بعد دست به سرش می‌کردم، اما از رو نمی‌رفت. سراغ ناظم و اتاق دفتر را می‌گرفت و صبر می‌کرد تا زنگ را بزنند و معلم‌ها جمع بشوند و لابد حرف و سخنی و خنده‌ای و بعد از معلم کلاس سوم سراغ کار و بار و بچه‌اش را می‌گرفت و زنگ بعد را که می‌زدند، خداحافظی می‌کرد و می‌رفت. آزاری نداشت. با چشم‌هایش نفس معلم‌ها را می‌برید. و حالا باز هم همان زن بود و آمده بود و من تا از پلکان پایین بروم در ذهنم جملات زننده‌ای ردیف می‌کردم، تا پایش را از مدرسه ببرد که در را باز کردم و سلام... - -عجب! او نبود. دخترک یکی دو ساله‌ای بود با دهان گشاد و موهای زبرش را به زحمت عقب سرش گلوله کرده بود و بفهمی نفهمی دستی توی صورتش برده بود. روی هم رفته زشت نبود. اما داد می‌زد که معلم است. گفتم که مدیر مدرسه‌ام و حکمش را داد دستم که دانشسرا دیده بود و تازه استخدام شده بود. برایمان معلم فرستاده بودند. خواستم بگویم «مگر رئیس فرهنگ نمی‌داند که این جا بیش از حد مرد است» ولی دیدم لزومی ندارد و فکر کردم این هم خودش تنوعی است. - -به هر صورت زنی بود و می‌توانست محیط خشن مدرسه را که به طرز ناشیانه‌ای پسرانه بود، لطافتی بدهد و خوش‌آمد گفتم و چای آوردند که نخورد و بردمش کلاس‌های سوم و چهارم را نشانش دادم که هر کدام را مایل است، قبول کند و صحبت از هجده ساعت درس که در انتظار او بود و برگشتیم به دفتر .پرسید غیر از او هم، معلم زن داریم. گفتم: - -- متأسفانه راه مدرسه‌ی ما را برای پاشنه‌ی کفش خانم‌ها نساخته‌اند. - -که خندید و احساس کردم زورکی می‌خندد. بعد کمی این دست و آن دست کرد و عاقبت: - -- آخه من شنیده بودم شما با معلماتون خیلی خوب تا می‌کنید. - -صدای جذابی داشت. فکر کردم حیف که این صدا را پای تخته سیاه خراب خواهد کرد. و گفتم: - -- اما نه این قدر که مدرسه تعطیل بشود خانم! و لابد به عرض‌تون رسیده که همکارهای شما، خودشون نشسته‌اند و تصمیم گرفته‌اند که هجده ساعت درس بدهند. بنده هیچ‌کاره‌ام. - -- اختیار دارید. - -و نفهمیدم با این «اختیار دارید» چه می‌خواست بگوید. اما پیدا بود که بحث سر ساعات درس نیست. آناً تصمیم گرفتم، امتحانی بکنم: - -- این را هم اطلاع داشته باشید که فقط دو تا از معلم‌های ما متأهل‌اند. - -که قرمز شد و برای این که کار دیگری نکرده باشد، برخاست و حکمش را از روی میز برداشت. پا به پا می‌شد که دیدم باید به دادش برسم. ساعت را از او پرسیدم. وقت زنگ بود. فراش را صدا کردم که زنگ را بزند و بعد به او گفتم، بهتر است مشورت دیگری هم با رئیس فرهنگ بکند و ما به هر صورت خوشحال خواهیم شد که افتخار همکاری با خانمی مثل ایشان را داشته باشیم و خداحافظ شما. از در دفتر که بیرون رفت، صدای زنگ برخاست و معلم‌ها انگار موشان را آتش زده‌اند، به عجله رسیدند و هر کدام از پشت سر، آن قدر او را پاییدند تا از در بزرگ آهنی مدرسه بیرون رفت. - -فردا صبح معلوم شد که ناظم، دنبال کار مادرش بوده است که قرار بود بستری شود، تا جای سرطان گرفته را یک دوره برق بگذارند. کل کار بیمارستان را من به کمک دوستانم انجام دادم و موقع آن رسیده بود که مادرش برود بیمارستان اما وحشتش گرفته بود و حاضر نبود به بیمارستان برود. و ناظم می‌خواست رسماً دخالت کنم و با هم برویم خانه‌شان و با زبان چرب و نرمی که به قول ناظم داشتم مادرش را راضی کنم. چاره‌ای نبود. مدرسه را به معلم‌ها سپردیم و راه افتادیم. بالاخره به خانه‌ی آن‌ها رسیدیم. خانه‌ای بسیار کوچک و اجاره‌ای. مادر با چشم‌های گود نشسته و انگار زغال به صورت مالیده! سیاه نبود اما رنگش چنان تیره بود که وحشتم گرفت. اصلاً صورت نبود. زخم سیاه شده‌ای بود که انگار از جای چشم‌ها و دهان سر باز کرده است. کلی با مادرش صحبت کردم. از پسرش و کلی دروغ و دونگ، و چادرش را روی چارقدش انداختیم و علی... و خلاصه در بیمارستان بستری شدند. - -فردا که به مدرسه آمدم، ناظم سرحال بود و پیدا بود که از شر چیزی خلاص شده است و خبر داد که معلم کلاس سه را گرفته‌اند. یک ماه و خرده‌ای می‌شد که مخفی بود و ما ورقه‌ی انجام کارش را به جانشین غیر رسمی‌اش داده بودیم و حقوقش لنگ نشده بود و تا خبر رسمی بشنود و در روزنامه‌ای بیابد و قضیه به اداره‌ی فرهنگ و لیست حقوق بکشد، باز هم می‌دادیم. اما خبر که رسمی شد، جانشین واجد شرایط هم نمی‌توانست بفرستد و باید طبق مقررات رفتار می‌کردیم و بدیش همین بود. کم کم احساس کردم که مدرسه خلوت شده است و کلاس‌ها اغلب اوقات بی‌کارند. جانشین معلم کلاس چهار هنوز سر و صورتی به کارش نداده بود و حالا یک کلاس دیگر هم بی‌معلم شد. این بود که باز هم به سراغ رئیس فرهنگ رفتم. معلوم شد آن دخترک ترسیده و «نرسیده متلک پیچش کرده‌اید» رئیس فرهنگ این طور می‌گفت. و ترجیح داده بود همان زیر نظر خودش دفترداری کند. و بعد قول و قرار و فردا و پس فردا و عاقبت چهار روز دوندگی تا دو تا معلم گرفتم. یکی جوانکی رشتی که گذاشتیمش کلاس چهار و دیگری باز یکی ازین آقاپسرهای بریانتین‌زده که هر روز کراوات عوض می‌کرد، با نقش‌ها و طرح‌های عجیب. عجب فرهنگ را با قرتی‌ها در آمیخته بودند! باداباد. او را هم گذاشتیم سر کلاس سه. اواخر بهمن، یک روز ناظم آمد اتاقم که بودجه‌ی مدرسه را زنده کرده است. گفتم: - -- مبارکه، چه قدر گرفتی؟ - -- هنوز هیچ چی آقا. قراره فردا سر ظهر بیاند این جا آقا و همین جا قالش رو بکنند. - -و فردا اصلاً مدرسه نرفتم. حتماً می‌خواست من هم باشم و در بده بستان ماهی پانزده قران، حق نظافت هر اتاق نظارت کنم و از مدیریتم مایه بگذارم تا تنخواه‌گردان مدرسه و حق آب و دیگر پول‌های عقب‌افتاده وصول بشود... فردا سه نفری آمده بودند مدرسه. ناهار هم به خرج ناظم خورده بودند. و قرار دیگری برای یک سور حسابی گذاشته بودند و رفته بودند و ناظم با زبان بی‌زبانی حالیم کرد که این بار حتماً باید باشم و آن طور که می‌گفت، جای شکرش باقی بود که مراعات کرده بودند و حق بوقی نخواسته بودند. اولین باری بود که چنین اهمیتی پیدا می‌کردم. این هم یک مزیت دیگر مدیری مدرسه بود! سی صد تومان از بودجه‌ی دولت بسته به این بود که به فلان مجلس بروی یا نروی. تا سه روز دیگر موعد سور بود، اصلاً یادم نیست چه کردم. اما همه‌اش در این فکر بودم که بروم یا نروم؟ یک بار دیگر استعفانامه‌ام را توی جیبم گذاشتم و بی این که صدایش را در بیاورم، روز سور هم نرفتم. - -بعد دیدم این طور که نمی‌شود. گفتم بروم قضایا را برای رئیس فرهنگ بگویم. و رفتم. سلام و احوالپرسی نشستم. اما چه بگویم؟ بگویم چون نمی‌خواستم در خوردن سور شرکت کنم، استعفا می‌دهم؟... دیدم چیزی ندارم که بگویم. و از این گذشته خفت‌آور نبود که به خاطر سیصد تومان جا بزنم و استعفا بدهم؟ و «خداحافظ؛ فقط آمده بودم سلام عرض کنم.» و از این دروغ‌ها و استعفانامه‌ام را توی جوی آب انداختم. اما ناظم؛ یک هفته‌ای مثل سگ بود. عصبانی، پر سر و صدا و شارت و شورت! حتی نرفتم احوال مادرش را بپرسم. یک هفته‌ی تمام می‌رفتم و در اتاقم را می‌بستم و سوراخ‌های گوشم را می‌گرفتم و تا اِز و چِزّ بچه‌ها بخوابد، از این سر تا آن سر اتاق را می‌کوبیدم. ده روز تمام، قلب من و بچه‌ها با هم و به یک اندازه از ترس و وحشت تپید. تا عاقبت پول‌ها وصول شد. منتها به جای سیصد و خرده‌ای، فقط صد و پنجاه تومان. علت هم این بود که در تنظیم صورت حساب‌ها اشتباهاتی رخ داده بود که ناچار اصلاحش کرده بودند! - -غیر از آن زنی که هفته‌ای یک بار به مدرسه سری می‌زد، از اولیای اطفال دو سه نفر دیگر هم بودند که مرتب بودند. یکی همان پاسبانی که با کمربند، پاهای پسرش را بست و فلک کرد. یکی هم کارمند پست و تلگرافی بود که ده روزی یک بار می‌آمد و پدر همان بچه‌ی شیطان. و یک استاد نجار که پسرش کلاس اول بود و خودش سواد داشت و به آن می‌بالید و کارآمد می‌نمود. یک مقنی هم بود درشت استخوان و بلندقد که بچه‌اش کلاس سوم بود و هفته‌ای یک بار می‌آمد و همان توی حیاط، ده پانزده دقیقه‌ای با فراش‌ها اختلاط می‌کرد و بی سر و صدا می‌رفت. نه کاری داشت، نه چیزی از آدم می‌خواست و همان طور که آمده بود چند دقیقه‌ای را با فراش صحبت می‌کرد و بعد می رفت. فقط یک روز نمی‌دانم چرا رفته بود بالای دیوار مدرسه. البته اول فکر کردم مأمور اداره برق است ولی بعد متوجه شدم که همان مرد مقنی است. بچه‌ها جیغ و فریاد می‌کردند و من همه‌اش درین فکر بودم که چه طور به سر دیوار رفته است؟ ماحصل داد و فریادش این بود که چرا اسم پسر او را برای گرفتن کفش و لباس به انجمن ندادیم. وقتی به او رسیدم نگاهی به او انداختم و بعد تشری به ناظم و معلم ها زدم که ولش کردند و بچه‌ها رفتند سر کلاس و بعد بی این که نگاهی به او بکنم، گفتم: - -- خسته نباشی اوستا. - -و همان طور که به طرف دفتر می‌رفتم رو به ناظم و معلم‌ها افزودم: - -- لابد جواب درست و حسابی نشنیده که رفته سر دیوار. - -که پشت سرم گرپ صدایی آمد و از در دفتر که رفتم تو، او و ناظم با هم وارد شدند. گفتم نشست. و به جای این‌که حرفی بزند به گریه افتاد. هرگز گمان نمی‌کردم از چنان قد و قامتی صدای گریه در بیاید. این بود که از اتاق بیرون آمدم و فراش را صدا زدم که آب برایش بیاورد و حالش که جا آمد، بیاوردش پهلوی من. اما دیگر از او خبری نشد که نشد. نه آن روز و نه هیچ روز دیگر. آن روز چند دقیقه‌ای بعد از شیشه‌ی اتاق خودم دیدمش که دمش را لای پایش گذاشته بود از در مدرسه بیرون می‌رفت و فراش جدید آمد که بله می‌گفتند از پسرش پنج تومان خواسته بودند تا اسمش را برای کفش و لباس به انجمن بدهند. پیدا بود باز توی کوک ناظم رفته است. مرخصش کردم و ناظم را خواستم. معلوم شد می‌خواسته ناظم را بزند. همین جوری و بی‌مقدمه. - -اواخر بهمن بود که یکی از روزهای برفی با یکی دیگر از اولیای اطفال آشنا شدم. یارو مرد بسیار کوتاهی بود؛ فرنگ مآب و بزک کرده و اتو کشیده که ننشسته از تحصیلاتش و از سفرهای فرنگش حرف زد. می‌خواست پسرش را آن وقت سال از مدرسه‌ی دیگر به آن جا بیاورد. پسرش از آن بچه‌هایی بود که شیر و مربای صبحانه‌اش را با قربان صدقه توی حلقشان می‌تپانند. کلاس دوم بود و ثلث اول دو تا تجدید آورده بود. می‌گفت در باغ ییلاقی‌اش که نزدیک مدرسه است، باغبانی دارند که پسرش شاگرد ماست و درس‌خوان است و پیدا است که بچه‌ها زیر سایه شما خوب پیشرفت می‌کنند. و از این پیزرها. و حال به خاطر همین بچه، توی این برف و سرما، آمده‌اند ساکن باغ ییلاقی شده‌اند. بلند شدم ناظم را صدا کردم و دست او و بچه‌اش را توی دست ناظم گذاشتم و خداحافظ شما... و نیم ساعت بعد ناظم برگشت که یارو خانه‌ی شهرش را به یک دبیرستان اجاره داده، به ماهی سه هزار و دویست تومان، و التماس دعا داشته، یعنی معلم سرخانه می‌خواسته و حتی بدش نمی‌آمده است که خود مدیر زحمت بکشند و ازین گنده‌گوزی‌ها... احساس کردم که ناظم دهانش آب افتاده است. و من به ناظم حالی کردم خودش برود بهتر است و فقط کاری بکند که نه صدای معلم‌ها در بیاید و نه آخر سال، برای یک معدل ده احتیاجی به من بمیرم و تو بمیری پیدا کند. همان روز عصر ناظم رفته بود و قرار و مدار برای هر روز عصر یک ساعت به ماهی صد و پنجاه تومان. - -دیگر دنیا به کام ناظم بود. حال مادرش هم بهتر بود و از بیمارستان مرخصش کرده بودند و به فکر زن گرفتن افتاده بود. و هر روز هم برای یک نفر نقشه می‌کشید حتی برای من هم. یک روز در آمد که چرا ما خودمان «انجمن خانه و مدرسه» نداشته باشیم؟ نشسته بود و حسابش را کرده بود دیده بود که پنجاه شصت نفری از اولیای مدرسه دستشان به دهان‌شان می‌رسد و از آن هم که به پسرش درس خصوصی می‌داد قول مساعد گرفته بود. حالیش کردم که مواظب حرف و سخن اداره‌ای باشد و هر کار دلش می‌خواهد بکند. کاغذ دعوت را هم برایش نوشتم با آب و تاب و خودش برای اداره‌ی فرهنگ، داد ماشین کردند و به وسیله‌ی خود بچه‌ها فرستاد. و جلسه با حضور بیست و چند نفری از اولیای بچه‌ها رسمی شد. خوبیش این بود که پاسبان کشیک پاسگاه هم آمده بود و دم در برای همه، پاشنه‌هایش را به هم می‌کوبید و معلم‌ها گوش تا گوش نشسته بودند و مجلس ابهتی داشت و ناظم، چای و شیرینی تهیه کرده بود و چراغ زنبوری کرایه کرده بود و باران هم گذاشت پشتش و سالون برای اولین بار در عمرش به نوایی رسید. - -یک سرهنگ بود که رئیسش کردیم و آن زن را که هفته‌ای یک بار می‌آمد نایب رئیس. آن که ناظم به پسرش درس خصوصی می‌داد نیامده بود. اما پاکت سربسته‌ای به اسم مدیر فرستاده بود که فی‌المجلس بازش کردیم. عذرخواهی از این‌که نتوانسته بود بیاید و وجه ناقابلی جوف پاکت. صد و پنجاه تومان. و پول را روی میز صندوق‌دار گذاشتیم که ضبط و ربط کند. نائب رئیس بزک کرده و معطر شیرینی تعارف می‌کرد و معلم‌ها با هر بار که شیرینی بر می‌داشتند، یک بار تا بناگوش سرخ می‌شدند و فراش‌ها دست به دست چای می‌آوردند. - -در فکر بودم که یک مرتبه احساس کردم، سیصد چهارصد تومان پول نقد، روی میز است و هشت صد تومان هم تعهد کرده بودند. پیرزن صندوقدار که کیف پولش را همراهش نیاورده بود ناچار حضار تصویب کردند که پول‌ها فعلاً پیش ناظم باشد. و صورت مجلس مرتب شد و امضاها ردیف پای آن و فردا فهمیدم که ناظم همان شب روی خشت نشسته بوده و به معلم‌ها سور داده بوده است. اولین کاری که کردم رونوشت مجلس آن شب را برای اداره‌ی فرهنگ فرستادم. و بعد همان استاد نجار را صدا کردم و دستور دادم برای مستراح‌ها دو روزه در بسازد که ناظم خیلی به سختی پولش را داد. و بعد در کوچه‌ی مدرسه درخت کاشتیم. تور والیبال را تعویض و تعدادی توپ در اختیار بچه‌ها گذاشتیم برای تمرین در بعد از ظهرها و آمادگی برای مسابقه با دیگر مدارس و در همین حین سر و کله‌ی بازرس تربیت بدنی هم پیدا شد و هر روز سرکشی و بیا و برو. تا یک روز که به مدرسه رسیدم شنیدم که از سالون سر و صدا می‌آید. صدای هالتر بود. ناظم سر خود رفته بود و سرخود دویست سیصد تومان داده بود و هالتر خریده بود و بچه‌های لاغر زیر بار آن گردن خود را خرد می‌کردند. من در این میان حرفی نزدم. می‌توانستم حرفی بزنم؟ من چیکاره بودم؟ اصلاً به من چه ربطی داشت؟ هر کار که دلشان می‌خواهد بکنند. مهم این بود که سالون مدرسه رونقی گرفته بود. ناظم هم راضی بود و معلم‌ها هم. چون نه خبر از حسادتی بود و نه حرف و سخنی پیش آمد. فقط می‌بایست به ناظم سفارش می کردم که فکر فراش‌ها هم باشد. - -کم کم خودمان را برای امتحان‌های ثلث دوم آماده می‌کردیم. این بود که اوایل اسفند، یک روز معلم‌ها را صدا زدم و در شورا مانندی که کردیم بی‌مقدمه برایشان داستان یکی از همکاران سابقم را گفتم که هر وقت بیست می‌داد تا دو روز تب داشت. البته معلم‌ها خندیدند. ناچار تشویق شدم و داستان آخوندی را گفتم که در بچگی معلم شرعیاتمان بود و زیر عبایش نمره می‌داد و دستش چنان می‌لرزید که عبا تکان می‌خورد و درست ده دقیقه طول می‌کشید. و تازه چند؟ بهترین شاگردها دوازده. و البته باز هم خندیدند. که این بار کلافه‌ام کرد. و بعد حالیشان کردم که بد نیست در طرح سؤال‌ها مشورت کنیم و از این حرف‌ها... - -و از شنبه‌ی بعد، امتحانات شروع شد. درست از نیمه‌ی دوم اسفند. سؤال‌ها را سه نفری می‌دیدیم. خودم با معلم هر کلاس و ناظم. در سالون میزها را چیده بودیم البته از وقتی هالتردار شده بود خیلی زیباتر شده بود. در سالون کاردستی‌های بچه‌ها در همه جا به چشم می‌خورد. هر کسی هر چیزی را به عنوان کاردستی درست کرده بودند و آورده بودند. که برای این کاردستی‌ها چه پول‌ها که خرج نشده بود و چه دست‌ها که نبریده بود و چه دعواها که نشده بود و چه عرق‌ها که ریخته نشده بود. پیش از هر امتحان که می‌شد، خودم یک میتینگ برای بچه‌ها می‌دادم که ترس از معلم و امتحان بی‌جا است و باید اعتماد به نفس داشت و ازین مزخرفات....ولی مگر حرف به گوش کسی می‌رفت؟ از در که وارد می‌شدند، چنان هجومی می‌بردند که نگو! به جاهای دور از نظر. یک بار چنان بود که احساس کردم مثل این‌که از ترس، لذت می‌برند. اگر معلم نبودی یا مدیر، به راحتی می‌توانستی حدس بزنی که کی‌ها با هم قرار و مداری دارند و کدام یک پهلو دست کدام یک خواهد نشست. یکی دو بار کوشیدم بالای دست یکی‌شان بایستم و ببینم چه می‌نویسد. ولی چنان مضطرب می‌شدند و دستشان به لرزه می‌افتاد که از نوشتن باز می‌ماندند. می‌دیدم که این مردان آینده، درین کلاس‌ها و امتحان‌ها آن قدر خواهند ترسید که وقتی دیپلمه بشوند یا لیسانسه، اصلاً آدم نوع جدیدی خواهند شد. آدمی انباشته از وحشت، انبانی از ترس و دلهره. به این ترتیب یک روز بیشتر دوام نیاوردم. چون دیدم نمی‌توانم قلب بچگانه‌ای داشته باشم تا با آن ترس و وحشت بچه‌ها را درک کنم و هم‌دردی نشان بدهم.این جور بود که می‌دیدم که معلم مدرسه هم نمی‌توانم باشم. - -دو روز قبل از عید کارنامه‌ها آماده بود و منتظر امضای مدیر. دویست و سی و شش تا امضا اقلاً تا ظهر طول می‌کشید. پیش از آن هم تا می‌توانستم از امضای دفترهای حضور و غیاب می‌گریختم. خیلی از جیره‌خورهای دولت در ادارات دیگر یا در میان همکارانم دیده بودم که در مواقع بیکاری تمرین امضا می‌کنند. پیش از آن نمی‌توانستم بفهمم چه طور از مدیری یک مدرسه یا کارمندی ساده یک اداره می‌شود به وزارت رسید. یا اصلاً آرزویش را داشت. نیم‌قراضه امضای آماده و هر کدام معرف یک شخصیت، بعد نیم‌ذرع زبان چرب و نرم که با آن، مار را از سوراخ بیرون بکشی، یا همه جا را بلیسی و یک دست هم قیافه. نه یک جور. دوازده جور. - -در این فکرها بودم که ناگهان در میان کارنامه‌ها چشمم به یک اسم آشنا افتاد. به اسم پسران جناب سرهنگ که رئیس انجمن بود. رفتم توی نخ نمراتش. همه متوسط بود و جای ایرادی نبود. و یک مرتبه به صرافت افتادم که از اول سال تا به حال بچه‌های مدرسه را فقط به اعتبار وضع مالی پدرشان قضاوت کرده‌ام. درست مثل این پسر سرهنگ که به اعتبار کیابیای پدرش درس نمی‌خواند. دیدم هر کدام که پدرشان فقیرتر است به نظر من باهوش‌تر می‌آمده‌اند. البته ناظم با این حرف‌ها کاری نداشت. مر قانونی را عمل می‌کرد. از یکی چشم می‌پوشید به دیگری سخت می‌گرفت. - -اما من مثل این که قضاوتم را درباره‌ی بچه‌ها از پیش کرده باشم و چه خوب بود که نمره‌ها در اختیار من نبود و آن یکی هم «انظباط» مال آخر سال بود. مسخره‌ترین کارها آن است که کسی به اصلاح وضعی دست بزند، اما در قلمروی که تا سر دماغش بیشتر نیست. و تازه مدرسه‌ی من، این قلمروی فعالیت من، تا سر دماغم هم نبود. به همان توی ذهنم ختم می‌شد. وضعی را که دیگران ترتیب داده بودند. به این ترتیب بعد از پنج شش ماه، می‌فهمیدم که حسابم یک حساب عقلایی نبوده است. احساساتی بوده است. ضعف‌های احساساتی مرا خشونت‌های عملی ناظم جبران می‌کرد و این بود که جمعاً نمی‌توانستم ازو بگذرم. مرد عمل بود. کار را می‌برید و پیش می‌رفت. در زندگی و در هر کاری، هر قدمی بر می‌داشت، برایش هدف بود. و چشم از وجوه دیگر قضیه می‌پوشید. این بود که برش داشت. و من نمی‌توانستم. چرا که اصلاً مدیر نبودم. خلاص... - -و کارنامه‌ی پسر سرهنگ را که زیر دستم عرق کرده بود، به دقت و احتیاج خشک کردم و امضایی زیر آن گذاشتم به قدری بد خط و مسخره بود که به یاد امضای فراش جدیدمان افتادم. حتماً جناب سرهنگ کلافه می‌شد که چرا چنین آدم بی‌سوادی را با این خط و ربط امضا مدیر مدرسه کرده‌اند. آخر یک جناب سرهنگ هم می‌داند که امضای آدم معرف شخصیت آدم است. - -اواخر تعطیلات نوروز رفتم به ملاقات معلم ترکه‌ای کلاس سوم. ناظم که با او میانه‌ی خوشی نداشت. ناچار با معلم حساب کلاس پنج و شش قرار و مداری گذاشته بودم که مختصری علاقه‌ای هم به آن حرف و سخن‌ها داشت. هم به وسیله‌ی او بود که می‌دانستم نشانی‌اش کجا است و توی کدام زندان است. در راه قبل از هر چیز خبر داد که رئیس فرهنگ عوض شده و این طور که شایع است یکی از هم دوره‌ای‌های من، جایش آمده. گفتم: - -- عجب! چرا؟ مگه رئیس قبلی چپش کم بود؟ - -- چه عرض کنم. می‌گند پا تو کفش یکی از نماینده‌ها کرده. شما خبر ندارید؟ - -- چه طور؟ از کجا خبر داشته باشم؟ - -- هیچ چی... می گند دو تا از کارچاق‌کن‌های انتخاباتی یارو از صندوق فرهنگ حقوق می‌گرفته‌اند؛ شب عیدی رئیس فرهنگ حقوق‌شون رو زده. - -- عجب! پس اونم می‌خواسته اصلاحات کنه! بیچاره. - -و بعد از این حرف زدیم که الحمدالله مدرسه مرتب است و آرام و معلم‌ها همکاری می‌کنند و ناظم بیش از اندازه همه‌کاره شده است. و من فهمیدم که باز لابد مشتری خصوصی تازه‌ای پیدا شده است که سر و صدای همه همکارها بلند شده. دم در زندان شلوغ بود. کلاه مخملی‌ها، عم‌قزی گل‌بته‌ها، خاله خانباجی‌ها و... اسم نوشتیم و نوبت گرفتیم و به جای پاها، دست‌هامان زیر بار کوچکی که داشتیم، خسته شد و خواب رفت تا نوبتمان شد. از این اتاق به آن اتاق و عاقبت نرده‌های آهنی و پشت آن معلم کلاس سه و... عجب چاق شده بود!درست مثل یک آدم حسابی شده بود. خوشحال شدیم و احوالپرسی و تشکر؛ و دیگر چه بگویم؟ بگویم چرا خودت را به دردسر انداختی؟ پیدا بود از مدرسه و کلاس به او خوش‌تر می‌گذرد. ایمانی بود و او آن را داشت و خوشبخت بود و دردسری نمی‌دید و زندان حداقل برایش کلاس درس بود. عاقبت پرسیدم: - -- پرونده‌ای هم برات درست کردند یا هنوز بلاتکلیفی؟ - -- امتحانمو دادم آقا مدیر، بد از آب در نیومد. - -- یعنی چه؟ - -- یعنی بی‌تکلیف نیستم. چون اسمم تو لیست جیره‌ی زندون رفته. خیالم راحته. چون سختی‌هاش گذشته. - -دیگر چه بگویم. دیدم چیزی ندارم خداحافظی کردم و او را با معلم حساب تنها گذاشتم و آمدم بیرون و تا مدت ملاقات تمام بشود، دم در زندان قدم زدم و به زندانی فکر کردم که برای خودم ساخته بودم. یعنی آن خرپول فرهنگ‌دوست ساخته بود. و من به میل و رغبت خودم را در آن زندانی کرده بودم. این یکی را به ضرب دگنک این جا آورده بودند. ناچار حق داشت که خیالش راحت باشد. اما من به میل و رغبت رفته بودم و چه بکنم؟ ناظم چه طور؟ راستی اگر رئیس فرهنگ از هم دوره‌ای‌های خودم باشد؛ چه طور است بروم و ازو بخواهم که ناظم را جای من بگذارد، یا همین معلم حساب را؟... که معلم حساب در آمد و راه افتادیم. با او هم دیگر حرفی نداشتم. سر پیچ خداحافظ شما و تاکسی گرفتم و یک سر به اداره‌ی فرهنگ زدم. گرچه دهم عید بود، اما هنوز رفت و آمد سال نو تمام نشده بود. برو و بیا و شیرینی و چای دو جانبه. رفتم تو. سلام و تبریک و همین تعارفات را پراندم. - -بله خودش بود. یکی از پخمه‌های کلاس. که آخر سال سوم کشتیارش شدم دو بیت شعر را حفظ کند، نتوانست که نتوانست. و حالا او رئیس بود و من آقا مدیر. راستی حیف از من، که حتی وزیر چنین رئیس فرهنگ‌هایی باشم! میز همان طور پاک بود و رفته. اما زیرسیگاری انباشته از خاکستر و ته سیگار. بلند شد و چلپ و چولوپ روبوسی کردیم و پهلوی خودش جا باز کرد و گوش تا گوش جیره‌خورهای فرهنگ تبریکات صمیمانه و بدگویی از ماسبق و هندوانه و پیزرها! و دو نفر که قد و قواره‌شان به درد گود زورخانه می‌خورد یا پای صندوق انتخابات شیرینی به مردم می‌دادند. نزدیک بود شیرینی را توی ظرفش بیندازم که دیدم بسیار احمقانه است. سیگارم که تمام شد قضیه‌ی رئیس فرهنگ قبلی و آن دو نفر را در گوشی ازش پرسیدم، حرفی نزد. فقط نگاهی می‌کرد که شبیه التماس بود و من فرصت جستم تا وضع معلم کلاس سوم را برایش روشن کنم و از او بخواهم تا آن جا که می‌تواند جلوی حقوقش را نگیرد. و از در که آمدم بیرون، تازه یادم آمد که برای کار دیگری پیش رئیس فرهنگ بودم. - -باز دیروز افتضاحی به پا شد. معقول یک ماهه‌ی فروردین راحت بودیم. اول اردیبهشت ماه جلالی و کوس رسوایی سر دیوار مدرسه. نزدیک آخر وقت یک جفت پدر و مادر، بچه‌شان در میان، وارد اتاق شدند. یکی بر افروخته و دیگری رنگ و رو باخته و بچه‌شان عیناً مثل این عروسک‌های کوکی. سلام و علیک و نشستند. خدایا دیگر چه اتفاقی افتاده است؟ - -- چه خبر شده که با خانوم سرافرازمون کردید؟ - -مرد اشاره‌ای به زنش کرد که بلند شد و دست بچه را گرفت و رفت بیرون و من ماندم و پدر. اما حرف نمی‌زد. به خودش فرصت می‌داد تا عصبانیتش بپزد. سیگارم را در آوردم و تعارفش کردم. مثل این که مگس مزاحمی را از روی دماغش بپراند، سیگار را رد کرد و من که سیگارم را آتش می‌زدم، فکر کردم لابد دردی دارد که چنین دست و پا بسته و چنین متکی به خانواده به مدرسه آمده. باز پرسیدم: - -- خوب، حالا چه فرمایش داشتید؟ - -که یک مرتبه ترکید: - -- اگه من مدیر مدرسه بودم و هم‌چه اتفاقی می‌افتاد، شیکم خودمو پاره می‌کردم. خجالت بکش مرد! برو استعفا بده. تا اهل محل نریختن تیکه تیکه‌ات کنند، دو تا گوشتو وردار و دررو. بچه‌های مردم می‌آن این جا درس بخونن و حسن اخلاق. نمی‌آن که... - -- این مزخرفات کدومه آقا! حرف حساب سرکار چیه؟ - -و حرکتی کردم که او را از در بیندازم بیرون. اما آخر باید می‌فهمیدم چه مرگش است. «ولی آخر با من چه کار دارد؟» - -- آبروی من رفته. آبروی صد ساله‌ی خونواده‌ام رفته. اگه در مدرسه‌ی تو رو تخته نکنم، تخم بابام نیستم. آخه من دیگه با این بچه چی کار کنم؟ تو این مدرسه ناموس مردم در خطره. کلانتری فهمیده؛ پزشک قانونی فهمیده؛ یک پرونده درست شده پنجاه ورق؛ تازه می‌گی حرف حسابم چیه؟ حرف حسابم اینه که صندلی و این مقام از سر تو زیاده. حرف حسابم اینه که می‌دم محاکمه‌ات کنند و از نون خوردن بندازنت... - -او می‌گفت و من گوش می‌کردم و مثل دو تا سگ هار به جان هم افتاده بودیم که در باز شد و ناظم آمد تو. به دادم رسید. در همان حال که من و پدر بچه در حال دعوا بودیم زن و بچه همان آقا رفته بودند و قضایا را برای ناظم تعریف کرده بودند و او فرستاده بوده فاعل را از کلاس کشیده بودند بیرون... و گفت چه طور است زنگ بزنیم و جلوی بچه‌ها ادبش کنیم و کردیم. یعنی این بار خود من رفتم میدان. پسرک نره‌خری بود از پنجمی‌ها با لباس مرتب و صورت سرخ و سفید و سالکی به گونه. جلوی روی بچه‌ها کشیدمش زیر مشت و لگد و بعد سه تا از ترکه‌ها را که فراش جدید فوری از باغ همسایه آورده بود، به سر و صورتش خرد کردم. چنان وحشی شده بودم که اگر ترکه‌ها نمی‌رسید، پسرک را کشته بودم. این هم بود که ناظم به دادش رسید و وساطت کرد و لاشه‌اش را توی دفتر بردند و بچه‌ها را مرخص کردند و من به اتاقم برگشتم و با حالی زار روی صندلی افتادم، نه از پدر خبری بود و نه از مادر و نه از عروسک‌های کوکی‌شان که ناموسش دست کاری شده بود. و تازه احساس کردم که این کتک‌کاری را باید به او می‌زدم. خیس عرق بودم و دهانم تلخ بود. تمام فحش‌هایی که می‌بایست به آن مردکه‌ی دبنگ می‌دادم و نداده بودم، در دهانم رسوب کرده بود و مثل دم مار تلخ شده بود. اصلاً چرا زدمش؟ چرا نگذاشتم مثل همیشه ناظم میدان‌داری کند که هم کارکشته‌تر بود و هم خونسردتر. لابد پسرک با دخترعمه‌اش هم نمی‌تواند بازی کند. لابد توی خانواده‌شان، دخترها سر ده دوازده سالگی باید از پسرهای هم سن رو بگیرند. نکند عیبی کرده باشد؟ و یک مرتبه به صرافت افتادم که بروم ببینم چه بلایی به سرش آورده‌ام. بلند شدم و یکی از فراش‌ها را صدا کردم که فهمیدم روانه‌اش کرده‌اند. آبی آورد که روی دستم می‌ریخت و صورتم را می‌شستم و می‌کوشیدم که لرزش دست‌هایم را نبیند. و در گوشم آهسته گفت که پسر مدیر شرکت اتوبوسرانی است و بدجوری کتک خورده و آن‌ها خیلی سعی کرده‌اند که تر و تمیزش کنند... - -احمق مثلا داشت توی دل مرا خالی می‌کرد. نمی‌دانست که من اول تصمیم را گرفتم، بعد مثل سگ هار شدم. و تازه می‌فهمیدم کسی را زده‌ام که لیاقتش را داشته. حتماً از این اتفاق‌ها جای دیگر هم می‌افتد. آدم بردارد پایین تنه بچه‌ی خودش را، یا به قول خودش ناموسش را بگذارد سر گذر که کلانتر محل و پزشک معاینه کنند! تا پرونده درست کنند؟ با این پدرو مادرها بچه‌ها حق دارند که قرتی و دزد و دروغگو از آب در بیایند. این مدرسه‌ها را اول برای پدر و مادرها باز کنند... - -با این افکار به خانه رسیدم. زنم در را که باز کرد؛ چشم‌هایش گرد شد. همیشه وقتی می‌ترسد این طور می‌شود. برای اینکه خیال نکند آدم کشته‌ام، زود قضایا را برایش گفتم. و دیدم که در ماند. یعنی ساکت ماند. آب سرد، عرق بیدمشک، سیگار پشت سیگار فایده نداشت، لقمه از گلویم پایین نمی‌رفت و دست‌ها هنوز می‌لرزید. هر کدام به اندازه‌ی یک ماه فعالیت کرده بودند. با سیگار چهارم شروع کردم: - -- می‌دانی زن؟ بابای یارو پول‌داره. مسلماً کار به دادگستری و این جور خنس‌ها می‌کشه. مدیریت که الفاتحه. اما خیلی دلم می‌خواد قضیه به دادگاه برسه. یک سال آزگار رو دل کشیده‌ام و دیگه خسته شده‌ام. دلم می‌خواد یکی بپرسه چرا بچه‌ی مردم رو این طوری زدی، چرا تنبیه بدنی کردی! آخه یک مدیر مدرسه هم حرف‌هایی داره که باید یک جایی بزنه... - -که بلند شد و رفت سراغ تلفن. دو سه تا از دوستانم را که در دادگستری کاره‌ای بودند، گرفت و خودم قضیه را برایشان گفتم که مواظب باشند. فردا پسرک فاعل به مدرسه نیامده بود. و ناظم برایم گفت که قضیه ازین قرار بوده است که دوتایی به هوای دیدن مجموعه تمبرهای فاعل با هم به خانه‌ای می‌روند و قضایا همان جا اتفاق می‌افتد و داد و هوار و دخالت پدر و مادرهای طرفین و خط و نشان و شبانه کلانتری؛ و تمام اهل محل خبر دارند. او هم نظرش این بود که کار به دادگستری خواهد کشید. - -و من یک هفته‌ی تمام به انتظار اخطاریه‌ی دادگستری صبح و عصر به مدرسه رفتم و مثل بخت‌النصر پشت پنجره ایستادم. اما در تمام این مدت نه از فاعل خبری شد، نه از مفعول و نه از پدر و مادر ناموس‌پرست و نه از مدیر شرکت اتوبوسرانی. انگار نه انگار که اتفاقی افتاده. بچه‌ها می‌آمدند و می‌رفتند؛ برای آب خوردن عجله می‌کردند؛ به جای بازی کتک‌کاری می‌کردند و همه چیز مثل قبل بود. فقط من ماندم و یک دنیا حرف و انتظار. تا عاقبت رسید.... احضاریه‌ای با تعیین وقت قبلی برای دو روز بعد، در فلان شعبه و پیش فلان بازپرس دادگستری. آخر کسی پیدا شده بود که به حرفم گوش کند. - -تا دو روز بعد که موعد احضار بود، اصلاً از خانه در نیامدم. نشستم و ماحصل حرف‌هایم را روی کاغذ آوردم. حرف‌هایی که با همه‌ی چرندی هر وزیر فرهنگی می‌توانست با آن یک برنامه‌ی هفت ساله برای کارش بریزد. و سر ساعت معین رفتم دادگستری. اتاق معین و بازپرس معین. در را باز کردم و سلام، و تا آمدم خودم را معرفی کنم و احضاریه را در بیاورم، یارو پیش‌دستی کرد و صندلی آورد و چای سفارش داد و «احتیاجی به این حرف‌ها نیست و قضیه‌ی کوچک بود و حل شد و راضی به زحمت شما نبودیم...» - -که عرق سرد بر بدن من نشست. چایی‌ام را که خوردم، روی همان کاغذ نشان‌دار دادگستری استعفانامه‌ام را نوشتم و به نام هم‌کلاسی پخمه‌ام که تازه رئیس شده بود، دم در پست کردم. -EOT; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php deleted file mode 100644 index d72951be..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php +++ /dev/null @@ -1,85 +0,0 @@ -format('dmy'); - - switch ((int) ($birthdate->format('Y') / 100)) { - case 18: - $centurySign = '+'; - - break; - - case 19: - $centurySign = '-'; - - break; - - case 20: - $centurySign = 'A'; - - break; - - default: - throw new \InvalidArgumentException('Year must be between 1800 and 2099 inclusive.'); - } - - $randomDigits = self::numberBetween(0, 89); - - if ($gender && $gender == static::GENDER_MALE) { - if ($randomDigits === 0) { - $randomDigits .= static::randomElement([3, 5, 7, 9]); - } else { - $randomDigits .= static::randomElement([1, 3, 5, 7, 9]); - } - } elseif ($gender && $gender == static::GENDER_FEMALE) { - if ($randomDigits === 0) { - $randomDigits .= static::randomElement([2, 4, 6, 8]); - } else { - $randomDigits .= static::randomElement([0, 2, 4, 6, 8]); - } - } else { - if ($randomDigits === 0) { - $randomDigits .= self::numberBetween(2, 9); - } else { - $randomDigits .= (string) static::numerify('#'); - } - } - $randomDigits = str_pad($randomDigits, 3, '0', STR_PAD_LEFT); - - $checksum = $checksumCharacters[(int) ($datePart . $randomDigits) % strlen($checksumCharacters)]; - - return $datePart . $centurySign . $randomDigits . $checksum; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php deleted file mode 100644 index db06ce26..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php +++ /dev/null @@ -1,101 +0,0 @@ - 'Argovie'], - ['AI' => 'Appenzell Rhodes-Intérieures'], - ['AR' => 'Appenzell Rhodes-Extérieures'], - ['BE' => 'Berne'], - ['BL' => 'Bâle-Campagne'], - ['BS' => 'Bâle-Ville'], - ['FR' => 'Fribourg'], - ['GE' => 'Genève'], - ['GL' => 'Glaris'], - ['GR' => 'Grisons'], - ['JU' => 'Jura'], - ['LU' => 'Lucerne'], - ['NE' => 'Neuchâtel'], - ['NW' => 'Nidwald'], - ['OW' => 'Obwald'], - ['SG' => 'Saint-Gall'], - ['SH' => 'Schaffhouse'], - ['SO' => 'Soleure'], - ['SZ' => 'Schwytz'], - ['TG' => 'Thurgovie'], - ['TI' => 'Tessin'], - ['UR' => 'Uri'], - ['VD' => 'Vaud'], - ['VS' => 'Valais'], - ['ZG' => 'Zoug'], - ['ZH' => 'Zurich'], - ]; - - protected static $cityFormats = [ - '{{cityName}}', - ]; - - protected static $streetNameFormats = [ - '{{streetPrefix}} {{lastName}}', - '{{streetPrefix}} de {{cityName}}', - '{{streetPrefix}} de {{lastName}}', - ]; - - protected static $streetAddressFormats = [ - '{{streetName}} {{buildingNumber}}', - ]; - protected static $addressFormats = [ - "{{streetAddress}}\n{{postcode}} {{city}}", - ]; - - /** - * Returns a random street prefix - * - * @example Rue - * - * @return string - */ - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - /** - * Returns a random city name. - * - * @example Luzern - * - * @return string - */ - public function cityName() - { - return static::randomElement(static::$cityNames); - } - - /** - * Returns a canton - * - * @example array('BE' => 'Bern') - * - * @return array - */ - public static function canton() - { - return static::randomElement(static::$canton); - } - - /** - * Returns the abbreviation of a canton. - * - * @return string - */ - public static function cantonShort() - { - $canton = static::canton(); - - return key($canton); - } - - /** - * Returns the name of canton. - * - * @return string - */ - public static function cantonName() - { - $canton = static::canton(); - - return current($canton); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php deleted file mode 100644 index 6deb9f83..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php +++ /dev/null @@ -1,7 +0,0 @@ - 'Ain'], ['02' => 'Aisne'], ['03' => 'Allier'], ['04' => 'Alpes-de-Haute-Provence'], ['05' => 'Hautes-Alpes'], - ['06' => 'Alpes-Maritimes'], ['07' => 'Ardèche'], ['08' => 'Ardennes'], ['09' => 'Ariège'], ['10' => 'Aube'], - ['11' => 'Aude'], ['12' => 'Aveyron'], ['13' => 'Bouches-du-Rhône'], ['14' => 'Calvados'], ['15' => 'Cantal'], - ['16' => 'Charente'], ['17' => 'Charente-Maritime'], ['18' => 'Cher'], ['19' => 'Corrèze'], ['2A' => 'Corse-du-Sud'], - ['2B' => 'Haute-Corse'], ['21' => "Côte-d'Or"], ['22' => "Côtes-d'Armor"], ['23' => 'Creuse'], ['24' => 'Dordogne'], - ['25' => 'Doubs'], ['26' => 'Drôme'], ['27' => 'Eure'], ['28' => 'Eure-et-Loir'], ['29' => 'Finistère'], ['30' => 'Gard'], - ['31' => 'Haute-Garonne'], ['32' => 'Gers'], ['33' => 'Gironde'], ['34' => 'Hérault'], ['35' => 'Ille-et-Vilaine'], - ['36' => 'Indre'], ['37' => 'Indre-et-Loire'], ['38' => 'Isère'], ['39' => 'Jura'], ['40' => 'Landes'], ['41' => 'Loir-et-Cher'], - ['42' => 'Loire'], ['43' => 'Haute-Loire'], ['44' => 'Loire-Atlantique'], ['45' => 'Loiret'], ['46' => 'Lot'], - ['47' => 'Lot-et-Garonne'], ['48' => 'Lozère'], ['49' => 'Maine-et-Loire'], ['50' => 'Manche'], ['51' => 'Marne'], - ['52' => 'Haute-Marne'], ['53' => 'Mayenne'], ['54' => 'Meurthe-et-Moselle'], ['55' => 'Meuse'], ['56' => 'Morbihan'], - ['57' => 'Moselle'], ['58' => 'Nièvre'], ['59' => 'Nord'], ['60' => 'Oise'], ['61' => 'Orne'], ['62' => 'Pas-de-Calais'], - ['63' => 'Puy-de-Dôme'], ['64' => 'Pyrénées-Atlantiques'], ['65' => 'Hautes-Pyrénées'], ['66' => 'Pyrénées-Orientales'], - ['67' => 'Bas-Rhin'], ['68' => 'Haut-Rhin'], ['69' => 'Rhône'], ['70' => 'Haute-Saône'], ['71' => 'Saône-et-Loire'], - ['72' => 'Sarthe'], ['73' => 'Savoie'], ['74' => 'Haute-Savoie'], ['75' => 'Paris'], ['76' => 'Seine-Maritime'], - ['77' => 'Seine-et-Marne'], ['78' => 'Yvelines'], ['79' => 'Deux-Sèvres'], ['80' => 'Somme'], ['81' => 'Tarn'], - ['82' => 'Tarn-et-Garonne'], ['83' => 'Var'], ['84' => 'Vaucluse'], ['85' => 'Vendée'], ['86' => 'Vienne'], - ['87' => 'Haute-Vienne'], ['88' => 'Vosges'], ['89' => 'Yonne'], ['90' => 'Territoire de Belfort'], ['91' => 'Essonne'], - ['92' => 'Hauts-de-Seine'], ['93' => 'Seine-Saint-Denis'], ['94' => 'Val-de-Marne'], ['95' => "Val-d'Oise"], - ['971' => 'Guadeloupe'], ['972' => 'Martinique'], ['973' => 'Guyane'], ['974' => 'La Réunion'], ['976' => 'Mayotte'], - ]; - - protected static $secondaryAddressFormats = ['Apt. ###', 'Suite ###', 'Étage ###', 'Bât. ###', 'Chambre ###']; - - /** - * @example 'Appt. 350' - */ - public static function secondaryAddress() - { - return static::numerify(static::randomElement(static::$secondaryAddressFormats)); - } - - /** - * @example 'rue' - */ - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - /** - * Randomly returns a french region. - * - * @example 'Guadeloupe' - * - * @return string - */ - public static function region() - { - return static::randomElement(static::$regions); - } - - /** - * Randomly returns a french department ('departmentNumber' => 'departmentName'). - * - * @example array('2B' => 'Haute-Corse') - * - * @return array - */ - public static function department() - { - return static::randomElement(static::$departments); - } - - /** - * Randomly returns a french department name. - * - * @example 'Ardèche' - * - * @return string - */ - public static function departmentName() - { - $randomDepartmentName = array_values(static::department()); - - return $randomDepartmentName[0]; - } - - /** - * Randomly returns a french department number. - * - * @example '59' - * - * @return string - */ - public static function departmentNumber() - { - $randomDepartmentNumber = array_keys(static::department()); - - return $randomDepartmentNumber[0]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php deleted file mode 100644 index a0048ac4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php +++ /dev/null @@ -1,40 +0,0 @@ -generator->parse($format)); - - if ($this->isCatchPhraseValid($catchPhrase)) { - break; - } - } while (true); - - return $catchPhrase; - } - - /** - * Generates a siret number (14 digits) that passes the Luhn check. - * - * @see http://fr.wikipedia.org/wiki/Syst%C3%A8me_d'identification_du_r%C3%A9pertoire_des_%C3%A9tablissements - * - * @return string - */ - public function siret($formatted = true) - { - $siret = self::siren(false); - $nicFormat = static::randomElement(static::$siretNicFormats); - $siret .= $this->numerify($nicFormat); - $siret .= Luhn::computeCheckDigit($siret); - - if ($formatted) { - $siret = substr($siret, 0, 3) . ' ' . substr($siret, 3, 3) . ' ' . substr($siret, 6, 3) . ' ' . substr($siret, 9, 5); - } - - return $siret; - } - - /** - * Generates a siren number (9 digits) that passes the Luhn check. - * - * @see http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_entreprises - * - * @return string - */ - public static function siren($formatted = true) - { - $siren = self::numerify('%#######'); - $siren .= Luhn::computeCheckDigit($siren); - - if ($formatted) { - $siren = substr($siren, 0, 3) . ' ' . substr($siren, 3, 3) . ' ' . substr($siren, 6, 3); - } - - return $siren; - } - - /** - * @var array An array containing string which should not appear twice in a catch phrase. - */ - protected static $wordsWhichShouldNotAppearTwice = ['sécurité', 'simpl']; - - /** - * Validates a french catch phrase. - * - * @param string $catchPhrase The catch phrase to validate. - * - * @return bool (true if valid, false otherwise) - */ - protected static function isCatchPhraseValid($catchPhrase) - { - foreach (static::$wordsWhichShouldNotAppearTwice as $word) { - // Fastest way to check if a piece of word does not appear twice. - $beginPos = strpos($catchPhrase, $word); - $endPos = strrpos($catchPhrase, $word); - - if ($beginPos !== false && $beginPos != $endPos) { - return false; - } - } - - return true; - } - - /** - * @see http://www.pole-emploi.fr/candidat/le-code-rome-et-les-fiches-metiers-@/article.jspz?id=60702 - * - * @note Randomly took 300 from this list - */ - protected static $jobTitleFormat = [ - 'Agent d\'accueil', - 'Agent d\'enquêtes', - 'Agent d\'entreposage', - 'Agent de curage', - 'Agro-économiste', - 'Aide couvreur', - 'Aide à domicile', - 'Aide-déménageur', - 'Ambassadeur', - 'Analyste télématique', - 'Animateur d\'écomusée', - 'Animateur web', - 'Appareilleur-gazier', - 'Archéologue', - 'Armurier d\'art', - 'Armurier spectacle', - 'Artificier spectacle', - 'Artiste dramatique', - 'Aspigiculteur', - 'Assistant de justice', - 'Assistant des ventes', - 'Assistant logistique', - 'Assistant styliste', - 'Assurance', - 'Auteur-adaptateur', - 'Billettiste voyages', - 'Brigadier', - 'Bruiteur', - 'Bâtonnier d\'art', - 'Bûcheron', - 'Cameraman', - 'Capitaine de pêche', - 'Carrier', - 'Caviste', - 'Chansonnier', - 'Chanteur', - 'Chargé de recherche', - 'Chasseur-bagagiste', - 'Chef de fabrication', - 'Chef de scierie', - 'Chef des ventes', - 'Chef du personnel', - 'Chef géographe', - 'Chef monteur son', - 'Chef porion', - 'Chiropraticien', - 'Choréologue', - 'Chromiste', - 'Cintrier-machiniste', - 'Clerc hors rang', - 'Coach sportif', - 'Coffreur béton armé', - 'Coffreur-ferrailleur', - 'Commandant de police', - 'Commandant marine', - 'Commis de coupe', - 'Comptable unique', - 'Conception et études', - 'Conducteur de jumbo', - 'Conseiller culinaire', - 'Conseiller funéraire', - 'Conseiller relooking', - 'Consultant ergonome', - 'Contrebassiste', - 'Convoyeur garde', - 'Copiste offset', - 'Corniste', - 'Costumier-habilleur', - 'Coutelier d\'art', - 'Cueilleur de cerises', - 'Céramiste concepteur', - 'Danse', - 'Danseur', - 'Data manager', - 'Dee-jay', - 'Designer produit', - 'Diététicien conseil', - 'Diététique', - 'Doreur sur métaux', - 'Décorateur-costumier', - 'Défloqueur d\'amiante', - 'Dégustateur', - 'Délégué vétérinaire', - 'Délégué à la tutelle', - 'Désamianteur', - 'Détective', - 'Développeur web', - 'Ecotoxicologue', - 'Elagueur-botteur', - 'Elagueur-grimpeur', - 'Elastiqueur', - 'Eleveur d\'insectes', - 'Eleveur de chats', - 'Eleveur de volailles', - 'Embouteilleur', - 'Employé d\'accueil', - 'Employé d\'étage', - 'Employé de snack-bar', - 'Endivier', - 'Endocrinologue', - 'Epithésiste', - 'Essayeur-retoucheur', - 'Etainier', - 'Etancheur', - 'Etancheur-bardeur', - 'Etiqueteur', - 'Expert back-office', - 'Exploitant de tennis', - 'Extraction', - 'Facteur', - 'Facteur de clavecins', - 'Facteur de secteur', - 'Fantaisiste', - 'Façadier-bardeur', - 'Façadier-ravaleur', - 'Feutier', - 'Finance', - 'Flaconneur', - 'Foreur pétrole', - 'Formateur d\'italien', - 'Fossoyeur', - 'Fraiseur', - 'Fraiseur mouliste', - 'Frigoriste maritime', - 'Fromager', - 'Galeriste', - 'Gardien de résidence', - 'Garçon de chenil', - 'Garçon de hall', - 'Gendarme mobile', - 'Guitariste', - 'Gynécologue', - 'Géodésien', - 'Géologue prospecteur', - 'Géomètre', - 'Géomètre du cadastre', - 'Gérant d\'hôtel', - 'Gérant de tutelle', - 'Gériatre', - 'Hydrothérapie', - 'Hématologue', - 'Hôte de caisse', - 'Ingénieur bâtiment', - 'Ingénieur du son', - 'Ingénieur géologue', - 'Ingénieur géomètre', - 'Ingénieur halieute', - 'Ingénieur logistique', - 'Instituteur', - 'Jointeur de placage', - 'Juge des enfants', - 'Juriste financier', - 'Kiwiculteur', - 'Lexicographe', - 'Liftier', - 'Litigeur transport', - 'Logistique', - 'Logopède', - 'Magicien', - 'Manager d\'artiste', - 'Mannequin détail', - 'Maquilleur spectacle', - 'Marbrier-poseur', - 'Marin grande pêche', - 'Matelassier', - 'Maçon', - 'Maçon-fumiste', - 'Maçonnerie', - 'Maître de ballet', - 'Maïeuticien', - 'Menuisier', - 'Miroitier', - 'Modéliste industriel', - 'Moellonneur', - 'Moniteur de sport', - 'Monteur audiovisuel', - 'Monteur de fermettes', - 'Monteur de palettes', - 'Monteur en siège', - 'Monteur prototypiste', - 'Monteur-frigoriste', - 'Monteur-truquiste', - 'Mouleur sable', - 'Mouliste drapeur', - 'Mécanicien-armurier', - 'Médecin du sport', - 'Médecin scolaire', - 'Médiateur judiciaire', - 'Médiathécaire', - 'Net surfeur surfeuse', - 'Oenologue', - 'Opérateur de plateau', - 'Opérateur du son', - 'Opérateur géomètre', - 'Opérateur piquage', - 'Opérateur vidéo', - 'Ouvrier d\'abattoir', - 'Ouvrier serriste', - 'Ouvrier sidérurgiste', - 'Palefrenier', - 'Paléontologue', - 'Pareur en abattoir', - 'Parfumeur', - 'Parqueteur', - 'Percepteur', - 'Photographe d\'art', - 'Pilote automobile', - 'Pilote de soutireuse', - 'Pilote fluvial', - 'Piqueur en ganterie', - 'Pisteur secouriste', - 'Pizzaïolo', - 'Plaquiste enduiseur', - 'Plasticien', - 'Plisseur', - 'Poissonnier-traiteur', - 'Pontonnier', - 'Porion', - 'Porteur de hottes', - 'Porteur de journaux', - 'Portier', - 'Poseur de granit', - 'Posticheur spectacle', - 'Potier', - 'Praticien dentaire', - 'Praticiens médicaux', - 'Premier clerc', - 'Preneur de son', - 'Primeuriste', - 'Professeur d\'italien', - 'Projeteur béton armé', - 'Promotion des ventes', - 'Présentateur radio', - 'Pyrotechnicien', - 'Pédicure pour bovin', - 'Pédologue', - 'Pédopsychiatre', - 'Quincaillier', - 'Radio chargeur', - 'Ramasseur d\'asperges', - 'Ramasseur d\'endives', - 'Ravaleur-ragréeur', - 'Recherche', - 'Recuiseur', - 'Relieur-doreur', - 'Responsable de salle', - 'Responsable télécoms', - 'Revenue Manager', - 'Rippeur spectacle', - 'Rogneur', - 'Récupérateur', - 'Rédacteur des débats', - 'Régleur funéraire', - 'Régleur sur tour', - 'Sapeur-pompier', - 'Scannériste', - 'Scripte télévision', - 'Sculpteur sur verre', - 'Scénariste', - 'Second de cuisine', - 'Secrétaire juridique', - 'Semencier', - 'Sertisseur', - 'Services funéraires', - 'Solier-moquettiste', - 'Sommelier', - 'Sophrologue', - 'Staffeur', - 'Story boarder', - 'Stratifieur', - 'Stucateur', - 'Styliste graphiste', - 'Surjeteur-raseur', - 'Séismologue', - 'Technicien agricole', - 'Technicien bovin', - 'Technicien géomètre', - 'Technicien plateau', - 'Technicien énergie', - 'Terminologue', - 'Testeur informatique', - 'Toiliste', - 'Topographe', - 'Toréro', - 'Traducteur d\'édition', - 'Traffic manager', - 'Trieur de métaux', - 'Turbinier', - 'Téléconseiller', - 'Tôlier-traceur', - 'Vendeur carreau', - 'Vendeur en lingerie', - 'Vendeur en meubles', - 'Vendeur en épicerie', - 'Verrier d\'art', - 'Verrier à la calotte', - 'Verrier à la main', - 'Verrier à main levée', - 'Vidéo-jockey', - 'Vitrier', - ]; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php deleted file mode 100644 index 679919da..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -numberBetween(1, 2); - } - - $nir .= - // Year of birth (aa) - $this->numerify('##') . - // Mont of birth (mm) - sprintf('%02d', $this->numberBetween(1, 12)); - - // Department - $department = key(Address::department()); - $nir .= $department; - - // Town number, depends on department length - if (strlen($department) === 2) { - $nir .= $this->numerify('###'); - } elseif (strlen($department) === 3) { - $nir .= $this->numerify('##'); - } - - // Born number (depending of town and month of birth) - $nir .= $this->numerify('###'); - - /** - * The key for a given NIR is `97 - 97 % NIR` - * NIR has to be an integer, so we have to do a little replacment - * for departments 2A and 2B - */ - if ($department === '2A') { - $nirInteger = str_replace('2A', '19', $nir); - } elseif ($department === '2B') { - $nirInteger = str_replace('2B', '18', $nir); - } else { - $nirInteger = $nir; - } - $nir .= sprintf('%02d', 97 - $nirInteger % 97); - - // Format is x xx xx xx xxx xxx xx - if ($formatted) { - $nir = substr($nir, 0, 1) . ' ' . substr($nir, 1, 2) . ' ' . substr($nir, 3, 2) . ' ' . substr($nir, 5, 2) . ' ' . substr($nir, 7, 3) . ' ' . substr($nir, 10, 3) . ' ' . substr($nir, 13, 2); - } - - return $nir; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php deleted file mode 100644 index 69c681d9..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php +++ /dev/null @@ -1,148 +0,0 @@ -phoneNumber07WithSeparator(); - - return str_replace(' ', '', $phoneNumber); - } - - /** - * Only 073 to 079 are acceptable prefixes with 07 - * - * @see http://www.arcep.fr/index.php?id=8146 - */ - public function phoneNumber07WithSeparator() - { - $phoneNumber = $this->generator->numberBetween(3, 9); - $phoneNumber .= $this->numerify('# ## ## ##'); - - return $phoneNumber; - } - - public function phoneNumber08() - { - $phoneNumber = $this->phoneNumber08WithSeparator(); - - return str_replace(' ', '', $phoneNumber); - } - - /** - * Valid formats for 08: - * - * 0# ## ## ## - * 1# ## ## ## - * 2# ## ## ## - * 91 ## ## ## - * 92 ## ## ## - * 93 ## ## ## - * 97 ## ## ## - * 98 ## ## ## - * 99 ## ## ## - * - * Formats 089(4|6)## ## ## are valid, but will be - * attributed when other 089 resource ranges are exhausted. - * - * @see https://www.arcep.fr/index.php?id=8146#c9625 - * @see https://issuetracker.google.com/u/1/issues/73269839 - */ - public function phoneNumber08WithSeparator() - { - $regex = '([012]{1}\d{1}|(9[1-357-9])( \d{2}){3}'; - - return $this->regexify($regex); - } - - /** - * @example '0601020304' - */ - public function mobileNumber() - { - $format = static::randomElement(static::$mobileFormats); - - return static::numerify($this->generator->parse($format)); - } - - /** - * @example '0891951357' - */ - public function serviceNumber() - { - $format = static::randomElement(static::$serviceFormats); - - return static::numerify($this->generator->parse($format)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php deleted file mode 100644 index bcd3167a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php +++ /dev/null @@ -1,15532 +0,0 @@ - static::latitude(46.262740, 47.564721), - 'longitude' => static::longitude(17.077949, 20.604560), - ]; - } - - protected static $streetSuffix = [ - 'árok', 'átjáró', 'dűlősor', 'dűlőút', 'erdősor', 'fasor', 'forduló', 'gát', 'határsor', 'határút', 'híd', 'játszótér', 'kert', 'körönd', 'körtér', 'körút', 'köz', 'lakótelep', 'lejáró', 'lejtő', 'lépcső', 'liget', 'mélyút', 'orom', 'országút', 'ösvény', 'park', 'part', 'pincesor', 'rakpart', 'sétány', 'sétaút', 'sor', 'sugárút', 'tér', 'tere', 'turistaút', 'udvar', 'út', 'útja', 'utca', 'üdülőpart', - ]; - protected static $postcode = ['####']; - protected static $state = [ - 'Budapest', 'Bács-Kiskun', 'Baranya', 'Békés', 'Borsod-Abaúj-Zemplén', 'Csongrád', 'Fejér', 'Győr-Moson-Sopron', 'Hajdú-Bihar', 'Heves', 'Jász-Nagykun-Szolnok', 'Komárom-Esztergom', 'Nógrád', 'Pest', 'Somogy', 'Szabolcs-Szatmár-Bereg', 'Tolna', 'Vas', 'Veszprém', 'Zala', - ]; - protected static $country = [ - 'Afganisztán', 'Albánia', 'Algéria', 'Amerikai Egyesült Államok', 'Andorra', 'Angola', 'Antigua és Barbuda', 'Argentína', 'Ausztria', 'Ausztrália', 'Azerbajdzsán', - 'Bahama-szigetek', 'Bahrein', 'Banglades', 'Barbados', 'Belgium', 'Belize', 'Benin', 'Bhután', 'Bolívia', 'Bosznia-Hercegovina', 'Botswana', 'Brazília', 'Brunei', 'Bulgária', 'Burkina Faso', 'Burma', 'Burundi', - 'Chile', 'Ciprus', 'Costa Rica', 'Csehország', 'Csád', - 'Dominikai Köztársaság', 'Dominikai Közösség', 'Dzsibuti', 'Dánia', 'Dél-Afrika', 'Dél-Korea', 'Dél-Szudán', - 'Ecuador', 'Egyenlítői-Guinea', 'Egyesült Arab Emírségek', 'Egyesült Királyság', 'Egyiptom', 'Elefántcsontpart', 'Eritrea', 'Etiópia', - 'Fehéroroszország', 'Fidzsi-szigetek', 'Finnország', 'Franciaország', 'Fülöp-szigetek', - 'Gabon', 'Gambia', 'Ghána', 'Grenada', 'Grúzia', 'Guatemala', 'Guinea', 'Guyana', 'Görögország', - 'Haiti', 'Hollandia', 'Horvátország', - 'India', 'Indonézia', 'Irak', 'Irán', 'Izland', 'Izrael', - 'Japán', 'Jemen', 'Jordánia', - 'Kambodzsa', 'Kamerun', 'Kanada', 'Katar', 'Kazahsztán', 'Kelet-Timor', 'Kenya', 'Kirgizisztán', 'Kiribati', 'Kolumbia', 'Kongói Demokratikus Köztársaság', 'Kongói Köztársaság', 'Kuba', 'Kuvait', 'Kína', 'Közép-Afrika', - 'Laosz', 'Lengyelország', 'Lesotho', 'Lettország', 'Libanon', 'Libéria', 'Liechtenstein', 'Litvánia', 'Luxemburg', 'Líbia', - 'Macedónia', 'Madagaszkár', 'Magyarország', 'Malawi', 'Maldív-szigetek', 'Mali', 'Malájzia', 'Marokkó', 'Marshall-szigetek', 'Mauritánia', 'Mexikó', 'Mikronézia', 'Moldova', 'Monaco', 'Mongólia', 'Montenegró', 'Mozambik', 'Málta', - 'Namíbia', 'Nauru', 'Nepál', 'Nicaragua', 'Niger', 'Nigéria', 'Norvégia', 'Németország', - 'Olaszország', 'Omán', 'Oroszország', - 'Pakisztán', 'Palau', 'Panama', 'Paraguay', 'Peru', 'Portugália', 'Pápua Új-Guinea', - 'Románia', 'Ruanda', - 'Saint Kitts és Nevis', 'Saint Vincent', 'Salamon-szigetek', 'Salvador', 'San Marino', 'Seychelle-szigetek', 'Spanyolország', 'Srí Lanka', 'Suriname', 'Svájc', 'Svédország', 'Szamoa', 'Szaúd-Arábia', 'Szenegál', 'Szerbia', 'Szingapúr', 'Szlovákia', 'Szlovénia', 'Szomália', 'Szudán', 'Szváziföld', 'Szíria', 'São Tomé és Príncipe', - 'Tadzsikisztán', 'Tanzánia', 'Thaiföld', 'Togo', 'Tonga', 'Trinidad és Tobago', 'Tunézia', 'Tuvalu', 'Törökország', 'Türkmenisztán', - 'Uganda', 'Ukrajna', 'Uruguay', - 'Vanuatu', 'Venezuela', 'Vietnám', - 'Zambia', 'Zimbabwe', 'Zöld-foki-szigetek', - 'Észak-Korea', 'Észtország', 'Írország', 'Örményország', 'Új-Zéland', 'Üzbegisztán', - ]; - - /** - * Source: https://hu.wikipedia.org/wiki/Magyarorsz%C3%A1g_v%C3%A1rosainak_list%C3%A1ja - */ - protected static $capitals = ['Budapest']; - protected static $bigCities = [ - 'Békéscsaba', 'Debrecen', 'Dunaújváros', 'Eger', 'Érd', 'Győr', 'Hódmezővásárhely', 'Kaposvár', 'Kecskemét', 'Miskolc', 'Nagykanizsa', 'Nyíregyháza', 'Pécs', 'Salgótarján', 'Sopron', 'Szeged', 'Székesfehérvár', 'Szekszárd', 'Szolnok', 'Szombathely', 'Tatabánya', 'Veszprém', 'Zalaegerszeg', - ]; - protected static $smallerCities = [ - 'Ajka', 'Aszód', 'Bácsalmás', - 'Baja', 'Baktalórántháza', 'Balassagyarmat', 'Balatonalmádi', 'Balatonfüred', 'Balmazújváros', 'Barcs', 'Bátonyterenye', 'Békés', 'Bélapátfalva', 'Berettyóújfalu', 'Bicske', 'Bóly', 'Bonyhád', 'Budakeszi', - 'Cegléd', 'Celldömölk', 'Cigánd', 'Csenger', 'Csongrád', 'Csorna', 'Csurgó', - 'Dabas', 'Derecske', 'Devecser', 'Dombóvár', 'Dunakeszi', - 'Edelény', 'Encs', 'Enying', 'Esztergom', - 'Fehérgyarmat', 'Fonyód', 'Füzesabony', - 'Gárdony', 'Gödöllő', 'Gönc', 'Gyál', 'Gyomaendrőd', 'Gyöngyös', 'Gyula', - 'Hajdúböszörmény', 'Hajdúhadház', 'Hajdúnánás', 'Hajdúszoboszló', 'Hatvan', 'Heves', - 'Ibrány', - 'Jánoshalma', 'Jászapáti', 'Jászberény', - 'Kalocsa', 'Kapuvár', 'Karcag', 'Kazincbarcika', 'Kemecse', 'Keszthely', 'Kisbér', 'Kiskőrös', 'Kiskunfélegyháza', 'Kiskunhalas', 'Kiskunmajsa', 'Kistelek', 'Kisvárda', 'Komárom', 'Komló', 'Körmend', 'Kőszeg', 'Kunhegyes', 'Kunszentmárton', 'Kunszentmiklós', - 'Lenti', 'Letenye', - 'Makó', 'Marcali', 'Martonvásár', 'Mátészalka', 'Mezőcsát', 'Mezőkovácsháza', 'Mezőkövesd', 'Mezőtúr', 'Mohács', 'Monor', 'Mór', 'Mórahalom', 'Mosonmagyaróvár', - 'Nagyatád', 'Nagykálló', 'Nagykáta', 'Nagykőrös', 'Nyíradony', 'Nyírbátor', - 'Orosháza', 'Oroszlány', 'Ózd', - 'Paks', 'Pannonhalma', 'Pápa', 'Pásztó', 'Pécsvárad', 'Pétervására', 'Pilisvörösvár', 'Polgárdi', 'Püspökladány', 'Putnok', - 'Ráckeve', 'Rétság', - 'Sárbogárd', 'Sarkad', 'Sárospatak', 'Sárvár', 'Sásd', 'Sátoraljaújhely', 'Sellye', 'Siklós', 'Siófok', 'Sümeg', 'Szarvas', 'Szécsény', 'Szeghalom', 'Szentendre', 'Szentes', 'Szentgotthárd', 'Szentlőrinc', 'Szerencs', 'Szigetszentmiklós', 'Szigetvár', 'Szikszó', 'Szob', - 'Tab', 'Tamási', 'Tapolca', 'Tata', 'Tét', 'Tiszafüred', 'Tiszakécske', 'Tiszaújváros', 'Tiszavasvári', 'Tokaj', 'Tolna', 'Törökszentmiklós', - 'Vác', 'Várpalota', 'Vásárosnamény', 'Vasvár', 'Vecsés', - 'Záhony', 'Zalaszentgrót', 'Zirc', - ]; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php deleted file mode 100644 index 75931991..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php +++ /dev/null @@ -1,13 +0,0 @@ -generator->parse($format); - } - - public static function country() - { - return static::randomElement(static::$country); - } - - public static function postcode() - { - return static::toUpper(static::bothify(static::randomElement(static::$postcode))); - } - - public static function regionSuffix() - { - return static::randomElement(static::$regionSuffix); - } - - public static function region() - { - return static::randomElement(static::$region); - } - - public static function cityPrefix() - { - return static::randomElement(static::$cityPrefix); - } - - public function city() - { - return static::randomElement(static::$city); - } - - public function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - public static function street() - { - return static::randomElement(static::$street); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php deleted file mode 100644 index ebdda0da..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php +++ /dev/null @@ -1,12 +0,0 @@ -generator->parse(static::randomElement(static::$formats))); - } - - public function code() - { - return static::randomElement(static::$codes); - } - - public function numberFormat() - { - return static::randomElement(static::$numberFormats); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Address.php deleted file mode 100644 index 28dd845c..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Address.php +++ /dev/null @@ -1,319 +0,0 @@ -generator->parse($format); - } - - public static function street() - { - return static::randomElement(static::$street); - } - - public static function buildingNumber() - { - return (string) self::numberBetween(1, 999); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Color.php deleted file mode 100644 index 14995b62..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/Color.php +++ /dev/null @@ -1,40 +0,0 @@ -generator->parse($lastNameRandomElement); - } - - /** - * Return last name for male - * - * @return string last name - */ - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - /** - * Return last name for female - * - * @return string last name - */ - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } - - /** - * For academic title - * - * @return string suffix - */ - public static function suffix() - { - return static::randomElement(static::$suffix); - } - - /** - * Generates Nomor Induk Kependudukan (NIK) - * - * @see https://en.wikipedia.org/wiki/National_identification_number#Indonesia - * - * @param string|null $gender - * @param \DateTime|null $birthDate - * - * @return string - */ - public function nik($gender = null, $birthDate = null) - { - // generate first numbers (region data) - $nik = $this->birthPlaceCode(); - $nik .= $this->generator->numerify('##'); - - if (!$birthDate) { - $birthDate = $this->generator->dateTimeBetween(); - } - - if (!$gender) { - $gender = $this->generator->randomElement([self::GENDER_MALE, self::GENDER_FEMALE]); - } - - // if gender is female, add 40 to days - if ($gender == self::GENDER_FEMALE) { - $nik .= $birthDate->format('d') + 40; - } else { - $nik .= $birthDate->format('d'); - } - - $nik .= $birthDate->format('my'); - - // add last random digits - $nik .= $this->generator->numerify('####'); - - return $nik; - } - - /** - * Generates birth place code for NIK - * - * @see https://id.wikipedia.org/wiki/Nomor_Induk_Kependudukan - * @see http://informasipedia.com/wilayah-indonesia/daftar-kabupaten-kota-di-indonesia/ - */ - protected function birthPlaceCode() - { - return static::randomElement(static::$birthPlaceCode); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php deleted file mode 100644 index c0bfaf5b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php +++ /dev/null @@ -1,55 +0,0 @@ - Icelandic names for women. - */ - protected static $firstNameFemale = ['Aagot', 'Abela', 'Abigael', 'Ada', 'Adda', 'Addý', 'Adela', 'Adelía', 'Adríana', 'Aðalbjörg', 'Aðalbjört', 'Aðalborg', 'Aðaldís', 'Aðalfríður', 'Aðalheiður', 'Aðalrós', 'Aðalsteina', 'Aðalsteinunn', 'Aðalveig', 'Agata', 'Agatha', 'Agða', 'Agla', 'Agnea', 'Agnes', 'Agneta', 'Alanta', 'Alba', 'Alberta', 'Albína', 'Alda', 'Aldís', 'Aldný', 'Aleta', 'Aletta', 'Alexa', 'Alexandra', 'Alexandría', 'Alexis', 'Alexía', 'Alfa', 'Alfífa', 'Alice', 'Alida', 'Alída', 'Alína', 'Alís', 'Alísa', 'Alla', 'Allý', 'Alma', 'Alrún', 'Alva', 'Alvilda', 'Amadea', 'Amal', 'Amalía', 'Amanda', 'Amelía', 'Amilía', 'Amíra', 'Amy', 'Amý', 'Analía', 'Anastasía', 'Andra', 'Andrá', 'Andrea', 'Anetta', 'Angela', 'Angelíka', 'Anika', 'Anita', 'Aníka', 'Anína', 'Aníta', 'Anja', 'Ann', 'Anna', 'Annabella', 'Annalísa', 'Anne', 'Annelí', 'Annetta', 'Anney', 'Annika', 'Annía', 'Anný', 'Antonía', 'Apríl', 'Ardís', 'Arey', 'Arinbjörg', 'Aris', 'Arisa', 'Aría', 'Aríanna', 'Aríella', 'Arín', 'Arína', 'Arís', 'Armenía', 'Arna', 'Arnbjörg', 'Arnborg', 'Arndís', 'Arney', 'Arnfinna', 'Arnfríður', 'Arngerður', 'Arngunnur', 'Arnheiður', 'Arnhildur', 'Arnika', 'Arnkatla', 'Arnlaug', 'Arnleif', 'Arnlín', 'Arnljót', 'Arnóra', 'Arnrós', 'Arnrún', 'Arnþóra', 'Arnþrúður', 'Asírí', 'Askja', 'Assa', 'Astrid', 'Atalía', 'Atena', 'Athena', 'Atla', 'Atlanta', 'Auðbjörg', 'Auðbjört', 'Auðdís', 'Auðlín', 'Auðna', 'Auðný', 'Auðrún', 'Auður', 'Aurora', 'Axelía', 'Axelma', 'Aþena', 'Ágústa', 'Ágústína', 'Álfdís', 'Álfey', 'Álfgerður', 'Álfheiður', 'Álfhildur', 'Álfrós', 'Álfrún', 'Álfsól', 'Árbjörg', 'Árbjört', 'Árdís', 'Árelía', 'Árlaug', 'Ármey', 'Árna', 'Árndís', 'Árney', 'Árnheiður', 'Árnína', 'Árný', 'Áróra', 'Ársól', 'Ársæl', 'Árún', 'Árveig', 'Árvök', 'Árþóra', 'Ása', 'Ásbjörg', 'Ásborg', 'Ásdís', 'Ásfríður', 'Ásgerður', 'Áshildur', 'Áskatla', 'Ásla', 'Áslaug', 'Ásleif', 'Ásný', 'Ásrós', 'Ásrún', 'Ást', 'Ásta', 'Ástbjörg', 'Ástbjört', 'Ástdís', 'Ástfríður', 'Ástgerður', 'Ástheiður', 'Ásthildur', 'Ástríður', 'Ástrós', 'Ástrún', 'Ástveig', 'Ástþóra', 'Ástþrúður', 'Ásvör', 'Baldey', 'Baldrún', 'Baldvina', 'Barbara', 'Barbára', 'Bassí', 'Bára', 'Bebba', 'Begga', 'Belinda', 'Bella', 'Benedikta', 'Bengta', 'Benidikta', 'Benía', 'Beníta', 'Benna', 'Benney', 'Benný', 'Benta', 'Bentey', 'Bentína', 'Bera', 'Bergdís', 'Bergey', 'Bergfríður', 'Bergheiður', 'Berghildur', 'Berglaug', 'Berglind', 'Berglín', 'Bergljót', 'Bergmannía', 'Bergný', 'Bergrán', 'Bergrín', 'Bergrós', 'Bergrún', 'Bergþóra', 'Berit', 'Bernódía', 'Berta', 'Bertha', 'Bessí', 'Bestla', 'Beta', 'Betanía', 'Betsý', 'Bettý', 'Bil', 'Birgit', 'Birgitta', 'Birna', 'Birta', 'Birtna', 'Bíbí', 'Bína', 'Bjargdís', 'Bjargey', 'Bjargheiður', 'Bjarghildur', 'Bjarglind', 'Bjarkey', 'Bjarklind', 'Bjarma', 'Bjarndís', 'Bjarney', 'Bjarnfríður', 'Bjarngerður', 'Bjarnheiður', 'Bjarnhildur', 'Bjarnlaug', 'Bjarnrún', 'Bjarnveig', 'Bjarný', 'Bjarnþóra', 'Bjarnþrúður', 'Bjartey', 'Bjartmey', 'Björg', 'Björgey', 'Björgheiður', 'Björghildur', 'Björk', 'Björney', 'Björnfríður', 'Björt', 'Bláey', 'Blíða', 'Blín', 'Blómey', 'Blædís', 'Blær', 'Bobba', 'Boga', 'Bogdís', 'Bogey', 'Bogga', 'Boghildur', 'Borg', 'Borgdís', 'Borghildur', 'Borgný', 'Borgrún', 'Borgþóra', 'Botnía', 'Bóel', 'Bót', 'Bóthildur', 'Braga', 'Braghildur', 'Branddís', 'Brá', 'Brák', 'Brigitta', 'Brimdís', 'Brimhildur', 'Brimrún', 'Brit', 'Britt', 'Britta', 'Bríana', 'Bríanna', 'Bríet', 'Bryndís', 'Brynfríður', 'Bryngerður', 'Brynheiður', 'Brynhildur', 'Brynja', 'Brynný', 'Burkney', 'Bylgja', 'Camilla', 'Carla', 'Carmen', 'Cecilia', 'Cecilía', 'Charlotta', 'Charlotte', 'Christina', 'Christine', 'Clara', 'Daðey', 'Daðína', 'Dagbjörg', 'Dagbjört', 'Dagfríður', 'Daggrós', 'Dagheiður', 'Dagmar', 'Dagmey', 'Dagný', 'Dagrún', 'Daldís', 'Daley', 'Dalía', 'Dalla', 'Dallilja', 'Dalrós', 'Dana', 'Daney', 'Danfríður', 'Danheiður', 'Danhildur', 'Danía', 'Daníela', 'Daníella', 'Dara', 'Debora', 'Debóra', 'Dendý', 'Didda', 'Dilja', 'Diljá', 'Dimmblá', 'Dimmey', 'Día', 'Díana', 'Díanna', 'Díma', 'Dís', 'Dísa', 'Dísella', 'Donna', 'Doris', 'Dorothea', 'Dóa', 'Dómhildur', 'Dóra', 'Dórey', 'Dóris', 'Dórothea', 'Dórótea', 'Dóróthea', 'Drauma', 'Draumey', 'Drífa', 'Droplaug', 'Drótt', 'Dröfn', 'Dúa', 'Dúfa', 'Dúna', 'Dýrborg', 'Dýrfinna', 'Dýrleif', 'Dýrley', 'Dýrunn', 'Dæja', 'Dögg', 'Dögun', 'Ebba', 'Ebonney', 'Edda', 'Edel', 'Edil', 'Edit', 'Edith', 'Eðna', 'Efemía', 'Egedía', 'Eggrún', 'Egla', 'Eiðný', 'Eiðunn', 'Eik', 'Einbjörg', 'Eindís', 'Einey', 'Einfríður', 'Einhildur', 'Einína', 'Einrún', 'Eir', 'Eirdís', 'Eirfinna', 'Eiríka', 'Eirný', 'Eirún', 'Elba', 'Eldbjörg', 'Eldey', 'Eldlilja', 'Eldrún', 'Eleina', 'Elektra', 'Elena', 'Elenborg', 'Elfa', 'Elfur', 'Elina', 'Elinborg', 'Elisabeth', 'Elía', 'Elíana', 'Elín', 'Elína', 'Elíná', 'Elínbet', 'Elínbjörg', 'Elínbjört', 'Elínborg', 'Elíndís', 'Elíngunnur', 'Elínheiður', 'Elínrós', 'Elírós', 'Elísa', 'Elísabet', 'Elísabeth', 'Elka', 'Ella', 'Ellen', 'Elley', 'Ellisif', 'Ellín', 'Elly', 'Ellý', 'Elma', 'Elna', 'Elsa', 'Elsabet', 'Elsie', 'Elsí', 'Elsý', 'Elva', 'Elvi', 'Elvíra', 'Elvý', 'Embla', 'Emelía', 'Emelíana', 'Emelína', 'Emeralda', 'Emilía', 'Emilíana', 'Emilíanna', 'Emilý', 'Emma', 'Emmý', 'Emý', 'Enea', 'Eneka', 'Engilbjört', 'Engilráð', 'Engilrós', 'Engla', 'Enika', 'Enja', 'Enóla', 'Eres', 'Erika', 'Erin', 'Erla', 'Erlen', 'Erlín', 'Erna', 'Esja', 'Esmeralda', 'Ester', 'Esther', 'Estiva', 'Ethel', 'Etna', 'Eufemía', 'Eva', 'Evelyn', 'Evey', 'Evfemía', 'Evgenía', 'Evíta', 'Evlalía', 'Ey', 'Eybjörg', 'Eybjört', 'Eydís', 'Eyfríður', 'Eygerður', 'Eygló', 'Eyhildur', 'Eyja', 'Eyjalín', 'Eyleif', 'Eylín', 'Eyrós', 'Eyrún', 'Eyveig', 'Eyvör', 'Eyþóra', 'Eyþrúður', 'Fanndís', 'Fanney', 'Fannlaug', 'Fanny', 'Fanný', 'Febrún', 'Fema', 'Filipía', 'Filippa', 'Filippía', 'Finna', 'Finnbjörg', 'Finnbjörk', 'Finnboga', 'Finnborg', 'Finndís', 'Finney', 'Finnfríður', 'Finnlaug', 'Finnrós', 'Fía', 'Fídes', 'Fífa', 'Fjalldís', 'Fjóla', 'Flóra', 'Folda', 'Fransiska', 'Franziska', 'Frán', 'Fregn', 'Freydís', 'Freygerður', 'Freyja', 'Freylaug', 'Freyleif', 'Friðbjörg', 'Friðbjört', 'Friðborg', 'Friðdís', 'Friðdóra', 'Friðey', 'Friðfinna', 'Friðgerður', 'Friðjóna', 'Friðlaug', 'Friðleif', 'Friðlín', 'Friðmey', 'Friðný', 'Friðrika', 'Friðrikka', 'Friðrós', 'Friðrún', 'Friðsemd', 'Friðveig', 'Friðþóra', 'Frigg', 'Fríða', 'Fríður', 'Frostrós', 'Fróðný', 'Fura', 'Fönn', 'Gabríela', 'Gabríella', 'Gauja', 'Gauthildur', 'Gefjun', 'Gefn', 'Geira', 'Geirbjörg', 'Geirdís', 'Geirfinna', 'Geirfríður', 'Geirhildur', 'Geirlaug', 'Geirlöð', 'Geirný', 'Geirríður', 'Geirrún', 'Geirþrúður', 'Georgía', 'Gerða', 'Gerður', 'Gestheiður', 'Gestný', 'Gestrún', 'Gillý', 'Gilslaug', 'Gissunn', 'Gía', 'Gígja', 'Gísela', 'Gísla', 'Gísley', 'Gíslína', 'Gíslný', 'Gíslrún', 'Gíslunn', 'Gíta', 'Gjaflaug', 'Gloría', 'Gló', 'Glóa', 'Glóbjört', 'Glódís', 'Glóð', 'Glóey', 'Gná', 'Góa', 'Gógó', 'Grein', 'Gret', 'Greta', 'Grélöð', 'Grét', 'Gréta', 'Gríma', 'Grímey', 'Grímheiður', 'Grímhildur', 'Gróa', 'Guðbjörg', 'Guðbjört', 'Guðborg', 'Guðdís', 'Guðfinna', 'Guðfríður', 'Guðjóna', 'Guðlaug', 'Guðleif', 'Guðlín', 'Guðmey', 'Guðmunda', 'Guðmundína', 'Guðný', 'Guðríður', 'Guðrún', 'Guðsteina', 'Guðveig', 'Gullbrá', 'Gullveig', 'Gullý', 'Gumma', 'Gunnbjörg', 'Gunnbjört', 'Gunnborg', 'Gunndís', 'Gunndóra', 'Gunnella', 'Gunnfinna', 'Gunnfríður', 'Gunnharða', 'Gunnheiður', 'Gunnhildur', 'Gunnjóna', 'Gunnlaug', 'Gunnleif', 'Gunnlöð', 'Gunnrún', 'Gunnur', 'Gunnveig', 'Gunnvör', 'Gunný', 'Gunnþóra', 'Gunnþórunn', 'Gurrý', 'Gúa', 'Gyða', 'Gyðja', 'Gyðríður', 'Gytta', 'Gæfa', 'Gæflaug', 'Hadda', 'Haddý', 'Hafbjörg', 'Hafborg', 'Hafdís', 'Hafey', 'Hafliða', 'Haflína', 'Hafný', 'Hafrós', 'Hafrún', 'Hafsteina', 'Hafþóra', 'Halla', 'Hallbera', 'Hallbjörg', 'Hallborg', 'Halldís', 'Halldóra', 'Halley', 'Hallfríður', 'Hallgerður', 'Hallgunnur', 'Hallkatla', 'Hallný', 'Hallrún', 'Hallveig', 'Hallvör', 'Hanna', 'Hanney', 'Hansa', 'Hansína', 'Harpa', 'Hauður', 'Hákonía', 'Heba', 'Hedda', 'Hedí', 'Heiða', 'Heiðbjörg', 'Heiðbjörk', 'Heiðbjört', 'Heiðbrá', 'Heiðdís', 'Heiðlaug', 'Heiðlóa', 'Heiðný', 'Heiðrós', 'Heiðrún', 'Heiður', 'Heiðveig', 'Hekla', 'Helen', 'Helena', 'Helga', 'Hella', 'Helma', 'Hendrikka', 'Henný', 'Henrietta', 'Henrika', 'Henríetta', 'Hera', 'Herbjörg', 'Herbjört', 'Herborg', 'Herdís', 'Herfríður', 'Hergerður', 'Herlaug', 'Hermína', 'Hersilía', 'Herta', 'Hertha', 'Hervör', 'Herþrúður', 'Hilda', 'Hildegard', 'Hildibjörg', 'Hildigerður', 'Hildigunnur', 'Hildiríður', 'Hildisif', 'Hildur', 'Hilma', 'Himinbjörg', 'Hind', 'Hinrika', 'Hinrikka', 'Hjalta', 'Hjaltey', 'Hjálmdís', 'Hjálmey', 'Hjálmfríður', 'Hjálmgerður', 'Hjálmrós', 'Hjálmrún', 'Hjálmveig', 'Hjördís', 'Hjörfríður', 'Hjörleif', 'Hjörný', 'Hjörtfríður', 'Hlaðgerður', 'Hlédís', 'Hlíf', 'Hlín', 'Hlökk', 'Hólmbjörg', 'Hólmdís', 'Hólmfríður', 'Hrafna', 'Hrafnborg', 'Hrafndís', 'Hrafney', 'Hrafngerður', 'Hrafnheiður', 'Hrafnhildur', 'Hrafnkatla', 'Hrafnlaug', 'Hrafntinna', 'Hraundís', 'Hrefna', 'Hreindís', 'Hróðný', 'Hrólfdís', 'Hrund', 'Hrönn', 'Hugbjörg', 'Hugbjört', 'Hugborg', 'Hugdís', 'Hugljúf', 'Hugrún', 'Huld', 'Hulda', 'Huldís', 'Huldrún', 'Húnbjörg', 'Húndís', 'Húngerður', 'Hvönn', 'Hödd', 'Högna', 'Hörn', 'Ida', 'Idda', 'Iða', 'Iðunn', 'Ilmur', 'Immý', 'Ina', 'Inda', 'India', 'Indiana', 'Indía', 'Indíana', 'Indíra', 'Indra', 'Inga', 'Ingdís', 'Ingeborg', 'Inger', 'Ingey', 'Ingheiður', 'Inghildur', 'Ingibjörg', 'Ingibjört', 'Ingiborg', 'Ingifinna', 'Ingifríður', 'Ingigerður', 'Ingilaug', 'Ingileif', 'Ingilín', 'Ingimaría', 'Ingimunda', 'Ingiríður', 'Ingirós', 'Ingisól', 'Ingiveig', 'Ingrid', 'Ingrún', 'Ingunn', 'Ingveldur', 'Inna', 'Irena', 'Irene', 'Irja', 'Irma', 'Irmý', 'Irpa', 'Isabel', 'Isabella', 'Ída', 'Íma', 'Ína', 'Ír', 'Íren', 'Írena', 'Íris', 'Írunn', 'Ísabel', 'Ísabella', 'Ísadóra', 'Ísafold', 'Ísalind', 'Ísbjörg', 'Ísdís', 'Ísey', 'Ísfold', 'Ísgerður', 'Íshildur', 'Ísis', 'Íslaug', 'Ísleif', 'Ísmey', 'Ísold', 'Ísól', 'Ísrún', 'Íssól', 'Ísveig', 'Íunn', 'Íva', 'Jakobína', 'Jana', 'Jane', 'Janetta', 'Jannika', 'Jara', 'Jarún', 'Jarþrúður', 'Jasmín', 'Járnbrá', 'Járngerður', 'Jenetta', 'Jenna', 'Jenný', 'Jensína', 'Jessý', 'Jovina', 'Jóa', 'Jóanna', 'Jódís', 'Jófríður', 'Jóhanna', 'Jólín', 'Jóna', 'Jónanna', 'Jónasína', 'Jónbjörg', 'Jónbjört', 'Jóndís', 'Jóndóra', 'Jóney', 'Jónfríður', 'Jóngerð', 'Jónheiður', 'Jónhildur', 'Jóninna', 'Jónída', 'Jónína', 'Jónný', 'Jóný', 'Jóra', 'Jóríður', 'Jórlaug', 'Jórunn', 'Jósebína', 'Jósefín', 'Jósefína', 'Judith', 'Júdea', 'Júdit', 'Júlía', 'Júlíana', 'Júlíanna', 'Júlíetta', 'Júlírós', 'Júnía', 'Júníana', 'Jökla', 'Jökulrós', 'Jörgína', 'Kaðlín', 'Kaja', 'Kalla', 'Kamilla', 'Kamí', 'Kamma', 'Kapitola', 'Kapítóla', 'Kara', 'Karen', 'Karin', 'Karitas', 'Karí', 'Karín', 'Karína', 'Karítas', 'Karla', 'Karlinna', 'Karlína', 'Karlotta', 'Karolína', 'Karó', 'Karólín', 'Karólína', 'Kassandra', 'Kata', 'Katarína', 'Katerína', 'Katharina', 'Kathinka', 'Katinka', 'Katla', 'Katrín', 'Katrína', 'Katý', 'Kára', 'Kellý', 'Kendra', 'Ketilbjörg', 'Ketilfríður', 'Ketilríður', 'Kiddý', 'Kira', 'Kirsten', 'Kirstín', 'Kittý', 'Kjalvör', 'Klara', 'Kládía', 'Klementína', 'Kleópatra', 'Kolbjörg', 'Kolbrá', 'Kolbrún', 'Koldís', 'Kolfinna', 'Kolfreyja', 'Kolgríma', 'Kolka', 'Konkordía', 'Konný', 'Korka', 'Kormlöð', 'Kornelía', 'Kókó', 'Krista', 'Kristbjörg', 'Kristborg', 'Kristel', 'Kristensa', 'Kristey', 'Kristfríður', 'Kristgerður', 'Kristin', 'Kristine', 'Kristíana', 'Kristíanna', 'Kristín', 'Kristína', 'Kristjana', 'Kristjóna', 'Kristlaug', 'Kristlind', 'Kristlín', 'Kristný', 'Kristólína', 'Kristrós', 'Kristrún', 'Kristveig', 'Kristvina', 'Kristþóra', 'Kría', 'Kæja', 'Laila', 'Laíla', 'Lana', 'Lara', 'Laufey', 'Laufheiður', 'Laufhildur', 'Lauga', 'Laugey', 'Laugheiður', 'Lára', 'Lárensína', 'Láretta', 'Lárey', 'Lea', 'Leikný', 'Leila', 'Lena', 'Leonóra', 'Leóna', 'Leónóra', 'Lilja', 'Liljá', 'Liljurós', 'Lill', 'Lilla', 'Lillian', 'Lillý', 'Lily', 'Lilý', 'Lind', 'Linda', 'Linddís', 'Lingný', 'Lisbeth', 'Listalín', 'Liv', 'Líba', 'Líf', 'Lífdís', 'Lín', 'Lína', 'Línbjörg', 'Líndís', 'Líneik', 'Líney', 'Línhildur', 'Lísa', 'Lísabet', 'Lísandra', 'Lísbet', 'Lísebet', 'Lív', 'Ljósbjörg', 'Ljósbrá', 'Ljótunn', 'Lofn', 'Loftveig', 'Logey', 'Lokbrá', 'Lotta', 'Louisa', 'Lousie', 'Lovísa', 'Lóa', 'Lóreley', 'Lukka', 'Lúcía', 'Lúðvíka', 'Lúísa', 'Lúna', 'Lúsinda', 'Lúsía', 'Lúvísa', 'Lydia', 'Lydía', 'Lyngheiður', 'Lýdía', 'Læla', 'Maddý', 'Magda', 'Magdalena', 'Magðalena', 'Magga', 'Maggey', 'Maggý', 'Magna', 'Magndís', 'Magnea', 'Magnes', 'Magney', 'Magnfríður', 'Magnheiður', 'Magnhildur', 'Magnúsína', 'Magný', 'Magnþóra', 'Maía', 'Maídís', 'Maísól', 'Maj', 'Maja', 'Malen', 'Malena', 'Malía', 'Malín', 'Malla', 'Manda', 'Manúela', 'Mara', 'Mardís', 'Marela', 'Marella', 'Maren', 'Marey', 'Marfríður', 'Margit', 'Margot', 'Margret', 'Margrét', 'Margrjet', 'Margunnur', 'Marheiður', 'Maria', 'Marie', 'Marikó', 'Marinella', 'Marit', 'Marí', 'María', 'Maríam', 'Marían', 'Maríana', 'Maríanna', 'Marín', 'Marína', 'Marínella', 'Maríon', 'Marísa', 'Marísól', 'Marít', 'Maríuerla', 'Marja', 'Markrún', 'Marlaug', 'Marlena', 'Marlín', 'Marlís', 'Marólína', 'Marsa', 'Marselía', 'Marselína', 'Marsibil', 'Marsilía', 'Marsý', 'Marta', 'Martha', 'Martína', 'Mary', 'Marý', 'Matta', 'Mattea', 'Matthea', 'Matthilda', 'Matthildur', 'Matthía', 'Mattíana', 'Mattína', 'Mattý', 'Maxima', 'Mábil', 'Málfríður', 'Málhildur', 'Málmfríður', 'Mánadís', 'Máney', 'Mára', 'Meda', 'Mekkin', 'Mekkín', 'Melinda', 'Melissa', 'Melkorka', 'Melrós', 'Messíana', 'Metta', 'Mey', 'Mikaela', 'Mikaelína', 'Mikkalína', 'Milda', 'Mildríður', 'Milla', 'Millý', 'Minerva', 'Minna', 'Minney', 'Minný', 'Miriam', 'Mirja', 'Mirjam', 'Mirra', 'Mist', 'Mía', 'Mínerva', 'Míra', 'Míranda', 'Mítra', 'Mjaðveig', 'Mjalldís', 'Mjallhvít', 'Mjöll', 'Mona', 'Monika', 'Módís', 'Móeiður', 'Móey', 'Móheiður', 'Móna', 'Mónika', 'Móníka', 'Munda', 'Mundheiður', 'Mundhildur', 'Mundína', 'Myrra', 'Mýr', 'Mýra', 'Mýrún', 'Mörk', 'Nadia', 'Nadía', 'Nadja', 'Nana', 'Nanna', 'Nanný', 'Nansý', 'Naomí', 'Naómí', 'Natalie', 'Natalía', 'Náttsól', 'Nella', 'Nellý', 'Nenna', 'Nicole', 'Niðbjörg', 'Nikíta', 'Nikoletta', 'Nikólína', 'Ninja', 'Ninna', 'Nína', 'Níní', 'Njála', 'Njóla', 'Norma', 'Nóa', 'Nóra', 'Nótt', 'Nýbjörg', 'Odda', 'Oddbjörg', 'Oddfreyja', 'Oddfríður', 'Oddgerður', 'Oddhildur', 'Oddlaug', 'Oddleif', 'Oddný', 'Oddrún', 'Oddveig', 'Oddvör', 'Oktavía', 'Októvía', 'Olga', 'Ollý', 'Ora', 'Orka', 'Ormheiður', 'Ormhildur', 'Otkatla', 'Otta', 'Óda', 'Ófelía', 'Óla', 'Ólafía', 'Ólafína', 'Ólavía', 'Ólivía', 'Ólína', 'Ólöf', 'Ósa', 'Ósk', 'Ótta', 'Pamela', 'París', 'Patricia', 'Patrisía', 'Pála', 'Páldís', 'Páley', 'Pálfríður', 'Pálhanna', 'Pálheiður', 'Pálhildur', 'Pálín', 'Pálína', 'Pálmey', 'Pálmfríður', 'Pálrún', 'Perla', 'Peta', 'Petra', 'Petrea', 'Petrína', 'Petronella', 'Petrónella', 'Petrós', 'Petrún', 'Petrúnella', 'Pétrína', 'Pétrún', 'Pía', 'Polly', 'Pollý', 'Pría', 'Rafney', 'Rafnhildur', 'Ragna', 'Ragnbjörg', 'Ragney', 'Ragnfríður', 'Ragnheiður', 'Ragnhildur', 'Rakel', 'Ramóna', 'Randalín', 'Randíður', 'Randý', 'Ranka', 'Rannva', 'Rannveig', 'Ráðhildur', 'Rán', 'Rebekka', 'Reginbjörg', 'Regína', 'Rein', 'Renata', 'Reyn', 'Reyndís', 'Reynheiður', 'Reynhildur', 'Rikka', 'Ripley', 'Rita', 'Ríkey', 'Rín', 'Ríta', 'Ronja', 'Rorí', 'Roxanna', 'Róberta', 'Róbjörg', 'Rós', 'Rósa', 'Rósalind', 'Rósanna', 'Rósbjörg', 'Rósborg', 'Róselía', 'Rósey', 'Rósfríður', 'Róshildur', 'Rósinkara', 'Rósinkransa', 'Róska', 'Róslaug', 'Róslind', 'Róslinda', 'Róslín', 'Rósmary', 'Rósmarý', 'Rósmunda', 'Rósný', 'Runný', 'Rut', 'Ruth', 'Rúbý', 'Rún', 'Rúna', 'Rúndís', 'Rúnhildur', 'Rúrí', 'Röfn', 'Rögn', 'Röskva', 'Sabína', 'Sabrína', 'Saga', 'Salbjörg', 'Saldís', 'Salgerður', 'Salín', 'Salína', 'Salka', 'Salma', 'Salný', 'Salome', 'Salóme', 'Salvör', 'Sandra', 'Sanna', 'Santía', 'Sara', 'Sarína', 'Sefanía', 'Selja', 'Selka', 'Selma', 'Senía', 'Septíma', 'Sera', 'Serena', 'Seselía', 'Sesilía', 'Sesselía', 'Sesselja', 'Sessilía', 'Sif', 'Sigdís', 'Sigdóra', 'Sigfríð', 'Sigfríður', 'Sigga', 'Siggerður', 'Sigmunda', 'Signa', 'Signhildur', 'Signý', 'Sigríður', 'Sigrún', 'Sigurást', 'Sigurásta', 'Sigurbára', 'Sigurbirna', 'Sigurbjörg', 'Sigurbjört', 'Sigurborg', 'Sigurdís', 'Sigurdóra', 'Sigurdríf', 'Sigurdrífa', 'Sigurða', 'Sigurey', 'Sigurfinna', 'Sigurfljóð', 'Sigurgeira', 'Sigurhanna', 'Sigurhelga', 'Sigurhildur', 'Sigurjóna', 'Sigurlaug', 'Sigurleif', 'Sigurlilja', 'Sigurlinn', 'Sigurlín', 'Sigurlína', 'Sigurmunda', 'Sigurnanna', 'Sigurósk', 'Sigurrós', 'Sigursteina', 'Sigurunn', 'Sigurveig', 'Sigurvina', 'Sigurþóra', 'Sigyn', 'Sigþóra', 'Sigþrúður', 'Silfa', 'Silfá', 'Silfrún', 'Silja', 'Silka', 'Silla', 'Silva', 'Silvana', 'Silvía', 'Sirra', 'Sirrý', 'Siv', 'Sía', 'Símonía', 'Sísí', 'Síta', 'Sjöfn', 'Skarpheiður', 'Skugga', 'Skuld', 'Skúla', 'Skúlína', 'Snjáfríður', 'Snjáka', 'Snjófríður', 'Snjólaug', 'Snorra', 'Snót', 'Snæbjörg', 'Snæbjört', 'Snæborg', 'Snæbrá', 'Snædís', 'Snæfríður', 'Snælaug', 'Snærós', 'Snærún', 'Soffía', 'Sofie', 'Sofía', 'Solveig', 'Sonja', 'Sonný', 'Sophia', 'Sophie', 'Sól', 'Sóla', 'Sólbjörg', 'Sólbjört', 'Sólborg', 'Sólbrá', 'Sólbrún', 'Sóldís', 'Sóldögg', 'Sóley', 'Sólfríður', 'Sólgerður', 'Sólhildur', 'Sólín', 'Sólkatla', 'Sóllilja', 'Sólný', 'Sólrós', 'Sólrún', 'Sólveig', 'Sólvör', 'Sónata', 'Stefana', 'Stefanía', 'Stefánný', 'Steina', 'Steinbjörg', 'Steinborg', 'Steindís', 'Steindóra', 'Steiney', 'Steinfríður', 'Steingerður', 'Steinhildur', 'Steinlaug', 'Steinrós', 'Steinrún', 'Steinunn', 'Steinvör', 'Steinþóra', 'Stella', 'Stígheiður', 'Stígrún', 'Stína', 'Stjarna', 'Styrgerður', 'Sumarlína', 'Sumarrós', 'Sunna', 'Sunnefa', 'Sunneva', 'Sunniva', 'Sunníva', 'Susan', 'Súla', 'Súsan', 'Súsanna', 'Svafa', 'Svala', 'Svalrún', 'Svana', 'Svanbjörg', 'Svanbjört', 'Svanborg', 'Svandís', 'Svaney', 'Svanfríður', 'Svanheiður', 'Svanhildur', 'Svanhvít', 'Svanlaug', 'Svanrós', 'Svanþrúður', 'Svava', 'Svea', 'Sveina', 'Sveinbjörg', 'Sveinborg', 'Sveindís', 'Sveiney', 'Sveinfríður', 'Sveingerður', 'Sveinhildur', 'Sveinlaug', 'Sveinrós', 'Sveinrún', 'Sveinsína', 'Sveinveig', 'Sylgja', 'Sylva', 'Sylvía', 'Sæbjörg', 'Sæbjört', 'Sæborg', 'Sædís', 'Sæfinna', 'Sæfríður', 'Sæhildur', 'Sælaug', 'Sæmunda', 'Sæný', 'Særós', 'Særún', 'Sæsól', 'Sæunn', 'Sævör', 'Sölva', 'Sölvey', 'Sölvína', 'Tala', 'Talía', 'Tamar', 'Tamara', 'Tanía', 'Tanja', 'Tanya', 'Tanya', 'Tara', 'Tea', 'Teitný', 'Tekla', 'Telma', 'Tera', 'Teresa', 'Teresía', 'Thea', 'Thelma', 'Theodóra', 'Theódóra', 'Theresa', 'Tindra', 'Tinna', 'Tirsa', 'Tía', 'Tíbrá', 'Tína', 'Todda', 'Torbjörg', 'Torfey', 'Torfheiður', 'Torfhildur', 'Tóbý', 'Tóka', 'Tóta', 'Tristana', 'Trú', 'Tryggva', 'Tryggvína', 'Týra', 'Ugla', 'Una', 'Undína', 'Unna', 'Unnbjörg', 'Unndís', 'Unnur', 'Urður', 'Úa', 'Úlfa', 'Úlfdís', 'Úlfey', 'Úlfheiður', 'Úlfhildur', 'Úlfrún', 'Úlla', 'Úna', 'Úndína', 'Úranía', 'Úrsúla', 'Vagna', 'Vagnbjörg', 'Vagnfríður', 'Vaka', 'Vala', 'Valbjörg', 'Valbjörk', 'Valbjört', 'Valborg', 'Valdheiður', 'Valdís', 'Valentína', 'Valería', 'Valey', 'Valfríður', 'Valgerða', 'Valgerður', 'Valhildur', 'Valka', 'Vallý', 'Valný', 'Valrós', 'Valrún', 'Valva', 'Valý', 'Valþrúður', 'Vanda', 'Vár', 'Veig', 'Veiga', 'Venus', 'Vera', 'Veronika', 'Verónika', 'Veróníka', 'Vetrarrós', 'Vébjörg', 'Védís', 'Végerður', 'Vélaug', 'Véný', 'Vibeka', 'Victoría', 'Viðja', 'Vigdís', 'Vigný', 'Viktoria', 'Viktoría', 'Vilborg', 'Vildís', 'Vilfríður', 'Vilgerður', 'Vilhelmína', 'Villa', 'Villimey', 'Vilma', 'Vilný', 'Vinbjörg', 'Vinný', 'Vinsý', 'Virginía', 'Víbekka', 'Víf', 'Vígdögg', 'Víggunnur', 'Víóla', 'Víóletta', 'Vísa', 'Von', 'Von', 'Voney', 'Vordís', 'Ylfa', 'Ylfur', 'Ylja', 'Ylva', 'Ynja', 'Yrja', 'Yrsa', 'Ýja', 'Ýma', 'Ýr', 'Ýrr', 'Þalía', 'Þeba', 'Þeódís', 'Þeódóra', 'Þjóðbjörg', 'Þjóðhildur', 'Þoka', 'Þorbjörg', 'Þorfinna', 'Þorgerður', 'Þorgríma', 'Þorkatla', 'Þorlaug', 'Þorleif', 'Þorsteina', 'Þorstína', 'Þóra', 'Þóranna', 'Þórarna', 'Þórbjörg', 'Þórdís', 'Þórða', 'Þórelfa', 'Þórelfur', 'Þórey', 'Þórfríður', 'Þórgunna', 'Þórgunnur', 'Þórhalla', 'Þórhanna', 'Þórheiður', 'Þórhildur', 'Þórkatla', 'Þórlaug', 'Þórleif', 'Þórný', 'Þórodda', 'Þórsteina', 'Þórsteinunn', 'Þórstína', 'Þórunn', 'Þórveig', 'Þórvör', 'Þrá', 'Þrúða', 'Þrúður', 'Þula', 'Þura', 'Þurí', 'Þuríður', 'Þurý', 'Þúfa', 'Þyri', 'Þyrí', 'Þöll', 'Ægileif', 'Æsa', 'Æsgerður', 'Ögmunda', 'Ögn', 'Ölrún', 'Ölveig', 'Örbrún', 'Örk', 'Ösp']; - - /** - * @var array Icelandic names for men. - */ - protected static $firstNameMale = ['Aage', 'Abel', 'Abraham', 'Adam', 'Addi', 'Adel', 'Adíel', 'Adólf', 'Adrían', 'Adríel', 'Aðalberg', 'Aðalbergur', 'Aðalbert', 'Aðalbjörn', 'Aðalborgar', 'Aðalgeir', 'Aðalmundur', 'Aðalráður', 'Aðalsteinn', 'Aðólf', 'Agnar', 'Agni', 'Albert', 'Aldar', 'Alex', 'Alexander', 'Alexíus', 'Alfons', 'Alfred', 'Alfreð', 'Ali', 'Allan', 'Alli', 'Almar', 'Alrekur', 'Alvar', 'Alvin', 'Amír', 'Amos', 'Anders', 'Andreas', 'André', 'Andrés', 'Andri', 'Anes', 'Anfinn', 'Angantýr', 'Angi', 'Annar', 'Annarr', 'Annas', 'Annel', 'Annes', 'Anthony', 'Anton', 'Antoníus', 'Aran', 'Arent', 'Ares', 'Ari', 'Arilíus', 'Arinbjörn', 'Aríel', 'Aríus', 'Arnald', 'Arnaldur', 'Arnar', 'Arnberg', 'Arnbergur', 'Arnbjörn', 'Arndór', 'Arnes', 'Arnfinnur', 'Arnfreyr', 'Arngeir', 'Arngils', 'Arngrímur', 'Arnkell', 'Arnlaugur', 'Arnleifur', 'Arnljótur', 'Arnmóður', 'Arnmundur', 'Arnoddur', 'Arnold', 'Arnór', 'Arnsteinn', 'Arnúlfur', 'Arnviður', 'Arnþór', 'Aron', 'Arthur', 'Arthúr', 'Artúr', 'Asael', 'Askur', 'Aspar', 'Atlas', 'Atli', 'Auðbergur', 'Auðbert', 'Auðbjörn', 'Auðgeir', 'Auðkell', 'Auðmundur', 'Auðólfur', 'Auðun', 'Auðunn', 'Austar', 'Austmann', 'Austmar', 'Austri', 'Axel', 'Ágúst', 'Áki', 'Álfar', 'Álfgeir', 'Álfgrímur', 'Álfur', 'Álfþór', 'Ámundi', 'Árbjartur', 'Árbjörn', 'Árelíus', 'Árgeir', 'Árgils', 'Ármann', 'Árni', 'Ársæll', 'Ás', 'Ásberg', 'Ásbergur', 'Ásbjörn', 'Ásgautur', 'Ásgeir', 'Ásgils', 'Ásgrímur', 'Ási', 'Áskell', 'Áslaugur', 'Áslákur', 'Ásmar', 'Ásmundur', 'Ásólfur', 'Ásröður', 'Ástbjörn', 'Ástgeir', 'Ástmar', 'Ástmundur', 'Ástráður', 'Ástríkur', 'Ástvald', 'Ástvaldur', 'Ástvar', 'Ástvin', 'Ástþór', 'Ásvaldur', 'Ásvarður', 'Ásþór', 'Baldur', 'Baldvin', 'Baldwin', 'Baltasar', 'Bambi', 'Barði', 'Barri', 'Bassi', 'Bastían', 'Baugur', 'Bárður', 'Beinir', 'Beinteinn', 'Beitir', 'Bekan', 'Benedikt', 'Benidikt', 'Benjamín', 'Benoný', 'Benóní', 'Benóný', 'Bent', 'Berent', 'Berg', 'Bergfinnur', 'Berghreinn', 'Bergjón', 'Bergmann', 'Bergmar', 'Bergmundur', 'Bergsteinn', 'Bergsveinn', 'Bergur', 'Bergvin', 'Bergþór', 'Bernhard', 'Bernharð', 'Bernharður', 'Berni', 'Bernódus', 'Bersi', 'Bertel', 'Bertram', 'Bessi', 'Betúel', 'Bill', 'Birgir', 'Birkir', 'Birnir', 'Birtingur', 'Birtir', 'Bjargar', 'Bjargmundur', 'Bjargþór', 'Bjarkan', 'Bjarkar', 'Bjarki', 'Bjarmar', 'Bjarmi', 'Bjarnar', 'Bjarnfinnur', 'Bjarnfreður', 'Bjarnharður', 'Bjarnhéðinn', 'Bjarni', 'Bjarnlaugur', 'Bjarnleifur', 'Bjarnólfur', 'Bjarnsteinn', 'Bjarnþór', 'Bjartmann', 'Bjartmar', 'Bjartur', 'Bjartþór', 'Bjólan', 'Bjólfur', 'Björgmundur', 'Björgólfur', 'Björgúlfur', 'Björgvin', 'Björn', 'Björnólfur', 'Blængur', 'Blær', 'Blævar', 'Boði', 'Bogi', 'Bolli', 'Borgar', 'Borgúlfur', 'Borgþór', 'Bóas', 'Bói', 'Bótólfur', 'Bragi', 'Brandur', 'Breki', 'Bresi', 'Brestir', 'Brimar', 'Brimi', 'Brimir', 'Brími', 'Brjánn', 'Broddi', 'Bruno', 'Bryngeir', 'Brynjar', 'Brynjólfur', 'Brynjúlfur', 'Brynleifur', 'Brynsteinn', 'Bryntýr', 'Brynþór', 'Burkni', 'Búi', 'Búri', 'Bæring', 'Bæringur', 'Bæron', 'Böðvar', 'Börkur', 'Carl', 'Cecil', 'Christian', 'Christopher', 'Cýrus', 'Daði', 'Dagbjartur', 'Dagfari', 'Dagfinnur', 'Daggeir', 'Dagmann', 'Dagnýr', 'Dagur', 'Dagþór', 'Dalbert', 'Dalli', 'Dalmann', 'Dalmar', 'Dalvin', 'Damjan', 'Dan', 'Danelíus', 'Daniel', 'Danival', 'Daníel', 'Daníval', 'Dante', 'Daríus', 'Darri', 'Davíð', 'Demus', 'Deníel', 'Dennis', 'Diðrik', 'Díómedes', 'Dofri', 'Dolli', 'Dominik', 'Dómald', 'Dómaldi', 'Dómaldur', 'Dónald', 'Dónaldur', 'Dór', 'Dóri', 'Dósóþeus', 'Draupnir', 'Dreki', 'Drengur', 'Dufgus', 'Dufþakur', 'Dugfús', 'Dúi', 'Dúnn', 'Dvalinn', 'Dýri', 'Dýrmundur', 'Ebbi', 'Ebeneser', 'Ebenezer', 'Eberg', 'Edgar', 'Edilon', 'Edílon', 'Edvard', 'Edvin', 'Edward', 'Eðvald', 'Eðvar', 'Eðvarð', 'Efraím', 'Eggert', 'Eggþór', 'Egill', 'Eiðar', 'Eiður', 'Eikar', 'Eilífur', 'Einar', 'Einir', 'Einvarður', 'Einþór', 'Eiríkur', 'Eivin', 'Elberg', 'Elbert', 'Eldar', 'Eldgrímur', 'Eldjárn', 'Eldmar', 'Eldon', 'Eldór', 'Eldur', 'Elentínus', 'Elfar', 'Elfráður', 'Elimar', 'Elinór', 'Elis', 'Elí', 'Elías', 'Elíeser', 'Elímar', 'Elínbergur', 'Elínmundur', 'Elínór', 'Elís', 'Ellert', 'Elli', 'Elliði', 'Ellís', 'Elmar', 'Elvar', 'Elvin', 'Elvis', 'Emanúel', 'Embrek', 'Emerald', 'Emil', 'Emmanúel', 'Engilbert', 'Engilbjartur', 'Engiljón', 'Engill', 'Enok', 'Eric', 'Erik', 'Erlar', 'Erlendur', 'Erling', 'Erlingur', 'Ernestó', 'Ernir', 'Ernst', 'Eron', 'Erpur', 'Esekíel', 'Esjar', 'Esra', 'Estefan', 'Evald', 'Evan', 'Evert', 'Eyberg', 'Eyjólfur', 'Eylaugur', 'Eyleifur', 'Eymar', 'Eymundur', 'Eyríkur', 'Eysteinn', 'Eyvar', 'Eyvindur', 'Eyþór', 'Fabrisíus', 'Falgeir', 'Falur', 'Fannar', 'Fannberg', 'Fanngeir', 'Fáfnir', 'Fálki', 'Felix', 'Fengur', 'Fenrir', 'Ferdinand', 'Ferdínand', 'Fertram', 'Feykir', 'Filip', 'Filippus', 'Finn', 'Finnbjörn', 'Finnbogi', 'Finngeir', 'Finnjón', 'Finnlaugur', 'Finnur', 'Finnvarður', 'Fífill', 'Fjalar', 'Fjarki', 'Fjólar', 'Fjólmundur', 'Fjölnir', 'Fjölvar', 'Fjörnir', 'Flemming', 'Flosi', 'Flóki', 'Flórent', 'Flóvent', 'Forni', 'Fossmar', 'Fólki', 'Francis', 'Frank', 'Franklín', 'Frans', 'Franz', 'Fránn', 'Frár', 'Freybjörn', 'Freygarður', 'Freymar', 'Freymóður', 'Freymundur', 'Freyr', 'Freysteinn', 'Freyviður', 'Freyþór', 'Friðberg', 'Friðbergur', 'Friðbert', 'Friðbjörn', 'Friðfinnur', 'Friðgeir', 'Friðjón', 'Friðlaugur', 'Friðleifur', 'Friðmann', 'Friðmar', 'Friðmundur', 'Friðrik', 'Friðsteinn', 'Friður', 'Friðvin', 'Friðþjófur', 'Friðþór', 'Friedrich', 'Fritz', 'Frímann', 'Frosti', 'Fróði', 'Fróðmar', 'Funi', 'Fúsi', 'Fylkir', 'Gabriel', 'Gabríel', 'Gael', 'Galdur', 'Gamalíel', 'Garðar', 'Garibaldi', 'Garpur', 'Garri', 'Gaui', 'Gaukur', 'Gauti', 'Gautrekur', 'Gautur', 'Gautviður', 'Geir', 'Geirarður', 'Geirfinnur', 'Geirharður', 'Geirhjörtur', 'Geirhvatur', 'Geiri', 'Geirlaugur', 'Geirleifur', 'Geirmundur', 'Geirólfur', 'Geirröður', 'Geirtryggur', 'Geirvaldur', 'Geirþjófur', 'Geisli', 'Gellir', 'Georg', 'Gerald', 'Gerðar', 'Geri', 'Gestur', 'Gilbert', 'Gilmar', 'Gils', 'Gissur', 'Gizur', 'Gídeon', 'Gígjar', 'Gísli', 'Gjúki', 'Glói', 'Glúmur', 'Gneisti', 'Gnúpur', 'Gnýr', 'Goði', 'Goðmundur', 'Gottskálk', 'Gottsveinn', 'Gói', 'Grani', 'Grankell', 'Gregor', 'Greipur', 'Greppur', 'Gretar', 'Grettir', 'Grétar', 'Grímar', 'Grímkell', 'Grímlaugur', 'Grímnir', 'Grímólfur', 'Grímur', 'Grímúlfur', 'Guðberg', 'Guðbergur', 'Guðbjarni', 'Guðbjartur', 'Guðbjörn', 'Guðbrandur', 'Guðfinnur', 'Guðfreður', 'Guðgeir', 'Guðjón', 'Guðlaugur', 'Guðleifur', 'Guðleikur', 'Guðmann', 'Guðmar', 'Guðmon', 'Guðmundur', 'Guðni', 'Guðráður', 'Guðröður', 'Guðsteinn', 'Guðvarður', 'Guðveigur', 'Guðvin', 'Guðþór', 'Gumi', 'Gunnar', 'Gunnberg', 'Gunnbjörn', 'Gunndór', 'Gunngeir', 'Gunnhallur', 'Gunnlaugur', 'Gunnleifur', 'Gunnólfur', 'Gunnóli', 'Gunnröður', 'Gunnsteinn', 'Gunnvaldur', 'Gunnþór', 'Gustav', 'Gutti', 'Guttormur', 'Gústaf', 'Gústav', 'Gylfi', 'Gyrðir', 'Gýgjar', 'Gýmir', 'Haddi', 'Haddur', 'Hafberg', 'Hafgrímur', 'Hafliði', 'Hafnar', 'Hafni', 'Hafsteinn', 'Hafþór', 'Hagalín', 'Hagbarður', 'Hagbert', 'Haki', 'Hallberg', 'Hallbjörn', 'Halldór', 'Hallfreður', 'Hallgarður', 'Hallgeir', 'Hallgils', 'Hallgrímur', 'Hallkell', 'Hallmann', 'Hallmar', 'Hallmundur', 'Hallsteinn', 'Hallur', 'Hallvarður', 'Hallþór', 'Hamar', 'Hannes', 'Hannibal', 'Hans', 'Harald', 'Haraldur', 'Harri', 'Harry', 'Harrý', 'Hartmann', 'Hartvig', 'Hauksteinn', 'Haukur', 'Haukvaldur', 'Hákon', 'Háleygur', 'Hálfdan', 'Hálfdán', 'Hámundur', 'Hárekur', 'Hárlaugur', 'Hásteinn', 'Hávar', 'Hávarður', 'Hávarr', 'Hávarr', 'Heiðar', 'Heiðarr', 'Heiðberg', 'Heiðbert', 'Heiðlindur', 'Heiðmann', 'Heiðmar', 'Heiðmundur', 'Heiðrekur', 'Heikir', 'Heilmóður', 'Heimir', 'Heinrekur', 'Heisi', 'Hektor', 'Helgi', 'Helmút', 'Hemmert', 'Hendrik', 'Henning', 'Henrik', 'Henry', 'Henrý', 'Herbert', 'Herbjörn', 'Herfinnur', 'Hergeir', 'Hergill', 'Hergils', 'Herjólfur', 'Herlaugur', 'Herleifur', 'Herluf', 'Hermann', 'Hermóður', 'Hermundur', 'Hersir', 'Hersteinn', 'Hersveinn', 'Hervar', 'Hervarður', 'Hervin', 'Héðinn', 'Hilaríus', 'Hilbert', 'Hildar', 'Hildibergur', 'Hildibrandur', 'Hildigeir', 'Hildiglúmur', 'Hildimar', 'Hildimundur', 'Hildingur', 'Hildir', 'Hildiþór', 'Hilmar', 'Hilmir', 'Himri', 'Hinrik', 'Híram', 'Hjallkár', 'Hjalti', 'Hjarnar', 'Hjálmar', 'Hjálmgeir', 'Hjálmtýr', 'Hjálmur', 'Hjálmþór', 'Hjörleifur', 'Hjörtur', 'Hjörtþór', 'Hjörvar', 'Hleiðar', 'Hlégestur', 'Hlér', 'Hlini', 'Hlíðar', 'Hlíðberg', 'Hlífar', 'Hljómur', 'Hlynur', 'Hlöðmundur', 'Hlöður', 'Hlöðvarður', 'Hlöðver', 'Hnefill', 'Hnikar', 'Hnikarr', 'Holgeir', 'Holger', 'Holti', 'Hólm', 'Hólmar', 'Hólmbert', 'Hólmfastur', 'Hólmgeir', 'Hólmgrímur', 'Hólmkell', 'Hólmsteinn', 'Hólmþór', 'Hóseas', 'Hrafn', 'Hrafnar', 'Hrafnbergur', 'Hrafnkell', 'Hrafntýr', 'Hrannar', 'Hrappur', 'Hraunar', 'Hreggviður', 'Hreiðar', 'Hreiðmar', 'Hreimur', 'Hreinn', 'Hringur', 'Hrímnir', 'Hrollaugur', 'Hrolleifur', 'Hróaldur', 'Hróar', 'Hróbjartur', 'Hróðgeir', 'Hróðmar', 'Hróðólfur', 'Hróðvar', 'Hrói', 'Hrólfur', 'Hrómundur', 'Hrútur', 'Hrærekur', 'Hugberg', 'Hugi', 'Huginn', 'Hugleikur', 'Hugo', 'Hugó', 'Huldar', 'Huxley', 'Húbert', 'Húgó', 'Húmi', 'Húnbogi', 'Húni', 'Húnn', 'Húnröður', 'Hvannar', 'Hyltir', 'Hylur', 'Hængur', 'Hænir', 'Höður', 'Högni', 'Hörður', 'Höskuldur', 'Illugi', 'Immanúel', 'Indriði', 'Ingberg', 'Ingi', 'Ingiberg', 'Ingibergur', 'Ingibert', 'Ingibjartur', 'Ingibjörn', 'Ingileifur', 'Ingimagn', 'Ingimar', 'Ingimundur', 'Ingivaldur', 'Ingiþór', 'Ingjaldur', 'Ingmar', 'Ingólfur', 'Ingvaldur', 'Ingvar', 'Ingvi', 'Ingþór', 'Ismael', 'Issi', 'Ían', 'Ígor', 'Ími', 'Ísak', 'Ísar', 'Ísarr', 'Ísbjörn', 'Íseldur', 'Ísgeir', 'Ísidór', 'Ísleifur', 'Ísmael', 'Ísmar', 'Ísólfur', 'Ísrael', 'Ívan', 'Ívar', 'Jack', 'Jafet', 'Jaki', 'Jakob', 'Jakop', 'Jamil', 'Jan', 'Janus', 'Jarl', 'Jason', 'Járngrímur', 'Játgeir', 'Játmundur', 'Játvarður', 'Jenni', 'Jens', 'Jeremías', 'Jes', 'Jesper', 'Jochum', 'Johan', 'John', 'Joshua', 'Jóakim', 'Jóann', 'Jóel', 'Jóhann', 'Jóhannes', 'Jói', 'Jómar', 'Jómundur', 'Jón', 'Jónar', 'Jónas', 'Jónatan', 'Jónbjörn', 'Jóndór', 'Jóngeir', 'Jónmundur', 'Jónsteinn', 'Jónþór', 'Jósafat', 'Jósavin', 'Jósef', 'Jósep', 'Jósteinn', 'Jósúa', 'Jóvin', 'Julian', 'Júlí', 'Júlían', 'Júlíus', 'Júní', 'Júníus', 'Júrek', 'Jökull', 'Jörfi', 'Jörgen', 'Jörmundur', 'Jörri', 'Jörundur', 'Jörvar', 'Jörvi', 'Kaj', 'Kakali', 'Kaktus', 'Kaldi', 'Kaleb', 'Kali', 'Kalman', 'Kalmann', 'Kalmar', 'Kaprasíus', 'Karel', 'Karim', 'Karkur', 'Karl', 'Karles', 'Karli', 'Karvel', 'Kaspar', 'Kasper', 'Kastíel', 'Katarínus', 'Kató', 'Kár', 'Kári', 'Keran', 'Ketilbjörn', 'Ketill', 'Kilían', 'Kiljan', 'Kjalar', 'Kjallakur', 'Kjaran', 'Kjartan', 'Kjarval', 'Kjárr', 'Kjói', 'Klemens', 'Klemenz', 'Klængur', 'Knútur', 'Knörr', 'Koðrán', 'Koggi', 'Kolbeinn', 'Kolbjörn', 'Kolfinnur', 'Kolgrímur', 'Kolmar', 'Kolskeggur', 'Kolur', 'Kolviður', 'Konráð', 'Konstantínus', 'Kormákur', 'Kornelíus', 'Kort', 'Kópur', 'Kraki', 'Kris', 'Kristall', 'Kristberg', 'Kristbergur', 'Kristbjörn', 'Kristdór', 'Kristens', 'Krister', 'Kristfinnur', 'Kristgeir', 'Kristian', 'Kristinn', 'Kristján', 'Kristjón', 'Kristlaugur', 'Kristleifur', 'Kristmann', 'Kristmar', 'Kristmundur', 'Kristofer', 'Kristófer', 'Kristvaldur', 'Kristvarður', 'Kristvin', 'Kristþór', 'Krummi', 'Kveldúlfur', 'Lambert', 'Lars', 'Laufar', 'Laugi', 'Lauritz', 'Lár', 'Lárent', 'Lárentíus', 'Lárus', 'Leiðólfur', 'Leif', 'Leifur', 'Leiknir', 'Leo', 'Leon', 'Leonard', 'Leonhard', 'Leó', 'Leópold', 'Leví', 'Lér', 'Liljar', 'Lindar', 'Lindberg', 'Línberg', 'Líni', 'Ljósálfur', 'Ljótur', 'Ljúfur', 'Loðmundur', 'Loftur', 'Logi', 'Loki', 'Lórens', 'Lórenz', 'Ludvig', 'Lundi', 'Lúðvíg', 'Lúðvík', 'Lúkas', 'Lúter', 'Lúther', 'Lyngar', 'Lýður', 'Lýtingur', 'Maggi', 'Magngeir', 'Magni', 'Magnús', 'Magnþór', 'Makan', 'Manfred', 'Manfreð', 'Manúel', 'Mar', 'Marbjörn', 'Marel', 'Margeir', 'Margrímur', 'Mari', 'Marijón', 'Marinó', 'Marías', 'Marínó', 'Marís', 'Maríus', 'Marjón', 'Markó', 'Markús', 'Markþór', 'Maron', 'Marri', 'Mars', 'Marsellíus', 'Marteinn', 'Marten', 'Marthen', 'Martin', 'Marvin', 'Mathías', 'Matthías', 'Matti', 'Mattías', 'Max', 'Maximus', 'Máni', 'Már', 'Márus', 'Mekkinó', 'Melkíor', 'Melkólmur', 'Melrakki', 'Mensalder', 'Merkúr', 'Methúsalem', 'Metúsalem', 'Meyvant', 'Michael', 'Mikael', 'Mikjáll', 'Mikkael', 'Mikkel', 'Mildinberg', 'Mías', 'Mímir', 'Míó', 'Mír', 'Mjöllnir', 'Mjölnir', 'Moli', 'Morgan', 'Moritz', 'Mosi', 'Móði', 'Móri', 'Mórits', 'Móses', 'Muggur', 'Muni', 'Muninn', 'Múli', 'Myrkvi', 'Mýrkjartan', 'Mörður', 'Narfi', 'Natan', 'Natanael', 'Nataníel', 'Náttmörður', 'Náttúlfur', 'Neisti', 'Nenni', 'Neptúnus', 'Nicolas', 'Nikanor', 'Nikolai', 'Nikolas', 'Nikulás', 'Nils', 'Níels', 'Níls', 'Njáll', 'Njörður', 'Nonni', 'Norbert', 'Norðmann', 'Normann', 'Nóam', 'Nóel', 'Nói', 'Nóni', 'Nóri', 'Nóvember', 'Númi', 'Nývarð', 'Nökkvi', 'Oddbergur', 'Oddbjörn', 'Oddfreyr', 'Oddgeir', 'Oddi', 'Oddkell', 'Oddleifur', 'Oddmar', 'Oddsteinn', 'Oddur', 'Oddvar', 'Oddþór', 'Oktavíus', 'Októ', 'Októvíus', 'Olaf', 'Olav', 'Olgeir', 'Oliver', 'Olivert', 'Orfeus', 'Ormar', 'Ormur', 'Orri', 'Orvar', 'Otkell', 'Otri', 'Otti', 'Ottó', 'Otur', 'Óðinn', 'Ófeigur', 'Ólafur', 'Óli', 'Óliver', 'Ólíver', 'Ómar', 'Ómi', 'Óskar', 'Ósvald', 'Ósvaldur', 'Ósvífur', 'Óttar', 'Óttarr', 'Parmes', 'Patrek', 'Patrekur', 'Patrick', 'Patrik', 'Páll', 'Pálmar', 'Pálmi', 'Pedró', 'Per', 'Peter', 'Pétur', 'Pjetur', 'Príor', 'Rafael', 'Rafn', 'Rafnar', 'Rafnkell', 'Ragnar', 'Ragúel', 'Randver', 'Rannver', 'Rasmus', 'Ráðgeir', 'Ráðvarður', 'Refur', 'Reginbaldur', 'Reginn', 'Reidar', 'Reifnir', 'Reimar', 'Reinar', 'Reinhart', 'Reinhold', 'Reynald', 'Reynar', 'Reynir', 'Reyr', 'Richard', 'Rikharð', 'Rikharður', 'Ríkarður', 'Ríkharð', 'Ríkharður', 'Ríó', 'Robert', 'Rolf', 'Ronald', 'Róbert', 'Rólant', 'Róman', 'Rómeó', 'Rósant', 'Rósar', 'Rósberg', 'Rósenberg', 'Rósi', 'Rósinberg', 'Rósinkar', 'Rósinkrans', 'Rósmann', 'Rósmundur', 'Rudolf', 'Runi', 'Runólfur', 'Rúbar', 'Rúben', 'Rúdólf', 'Rúnar', 'Rúrik', 'Rútur', 'Röðull', 'Rögnvald', 'Rögnvaldur', 'Rögnvar', 'Rökkvi', 'Safír', 'Sakarías', 'Salmann', 'Salmar', 'Salómon', 'Salvar', 'Samson', 'Samúel', 'Sandel', 'Sandri', 'Sandur', 'Saxi', 'Sebastian', 'Sebastían', 'Seifur', 'Seimur', 'Sesar', 'Sesil', 'Sigbergur', 'Sigbert', 'Sigbjartur', 'Sigbjörn', 'Sigdór', 'Sigfastur', 'Sigfinnur', 'Sigfreður', 'Sigfús', 'Siggeir', 'Sighvatur', 'Sigjón', 'Siglaugur', 'Sigmann', 'Sigmar', 'Sigmundur', 'Signar', 'Sigri', 'Sigríkur', 'Sigsteinn', 'Sigtryggur', 'Sigtýr', 'Sigur', 'Sigurbaldur', 'Sigurberg', 'Sigurbergur', 'Sigurbjarni', 'Sigurbjartur', 'Sigurbjörn', 'Sigurbrandur', 'Sigurdór', 'Sigurður', 'Sigurfinnur', 'Sigurgeir', 'Sigurgestur', 'Sigurgísli', 'Sigurgrímur', 'Sigurhans', 'Sigurhjörtur', 'Sigurjón', 'Sigurkarl', 'Sigurlaugur', 'Sigurlás', 'Sigurleifur', 'Sigurliði', 'Sigurlinni', 'Sigurmann', 'Sigurmar', 'Sigurmon', 'Sigurmundur', 'Sigurnýas', 'Sigurnýjas', 'Siguroddur', 'Siguróli', 'Sigurpáll', 'Sigursteinn', 'Sigursveinn', 'Sigurvaldi', 'Sigurvin', 'Sigurþór', 'Sigvaldi', 'Sigvarður', 'Sigþór', 'Silli', 'Sindri', 'Símon', 'Sírnir', 'Sírus', 'Sívar', 'Sjafnar', 'Skafti', 'Skapti', 'Skarphéðinn', 'Skefill', 'Skeggi', 'Skíði', 'Skírnir', 'Skjöldur', 'Skorri', 'Skuggi', 'Skúli', 'Skúta', 'Skær', 'Skæringur', 'Smári', 'Smiður', 'Smyrill', 'Snjóki', 'Snjólaugur', 'Snjólfur', 'Snorri', 'Snæbjartur', 'Snæbjörn', 'Snæhólm', 'Snælaugur', 'Snær', 'Snæringur', 'Snævar', 'Snævarr', 'Snæþór', 'Soffanías', 'Sophanías', 'Sophus', 'Sófónías', 'Sófus', 'Sókrates', 'Sólberg', 'Sólbergur', 'Sólbjartur', 'Sólbjörn', 'Sólimann', 'Sólmar', 'Sólmundur', 'Sólon', 'Sólver', 'Sólvin', 'Spartakus', 'Sporði', 'Spói', 'Stanley', 'Stapi', 'Starkaður', 'Starri', 'Stefan', 'Stefán', 'Stefnir', 'Steinar', 'Steinarr', 'Steinberg', 'Steinbergur', 'Steinbjörn', 'Steindór', 'Steinfinnur', 'Steingrímur', 'Steini', 'Steinkell', 'Steinmann', 'Steinmar', 'Steinmóður', 'Steinn', 'Steinólfur', 'Steinröður', 'Steinvarður', 'Steinþór', 'Stirnir', 'Stígur', 'Stormur', 'Stórólfur', 'Sturla', 'Sturlaugur', 'Sturri', 'Styr', 'Styrbjörn', 'Styrkár', 'Styrmir', 'Styrr', 'Sumarliði', 'Svafar', 'Svali', 'Svan', 'Svanberg', 'Svanbergur', 'Svanbjörn', 'Svangeir', 'Svanhólm', 'Svani', 'Svanlaugur', 'Svanmundur', 'Svanur', 'Svanþór', 'Svavar', 'Sváfnir', 'Sveinar', 'Sveinberg', 'Sveinbjartur', 'Sveinbjörn', 'Sveinjón', 'Sveinlaugur', 'Sveinmar', 'Sveinn', 'Sveinungi', 'Sveinþór', 'Svend', 'Sverre', 'Sverrir', 'Svölnir', 'Svörfuður', 'Sýrus', 'Sæberg', 'Sæbergur', 'Sæbjörn', 'Sæi', 'Sælaugur', 'Sæmann', 'Sæmundur', 'Sær', 'Sævald', 'Sævaldur', 'Sævar', 'Sævarr', 'Sævin', 'Sæþór', 'Sölmundur', 'Sölvar', 'Sölvi', 'Sören', 'Sörli', 'Tandri', 'Tarfur', 'Teitur', 'Theodór', 'Theódór', 'Thomas', 'Thor', 'Thorberg', 'Thór', 'Tindar', 'Tindri', 'Tindur', 'Tinni', 'Tími', 'Tímon', 'Tímoteus', 'Tímóteus', 'Tístran', 'Tjaldur', 'Tjörfi', 'Tjörvi', 'Tobías', 'Tolli', 'Tonni', 'Torfi', 'Tóbías', 'Tói', 'Tóki', 'Tómas', 'Tór', 'Trausti', 'Tristan', 'Trostan', 'Trúmann', 'Tryggvi', 'Tumas', 'Tumi', 'Tyrfingur', 'Týr', 'Ubbi', 'Uggi', 'Ulrich', 'Uni', 'Unnar', 'Unnbjörn', 'Unndór', 'Unnsteinn', 'Unnþór', 'Urðar', 'Uxi', 'Úddi', 'Úlfar', 'Úlfgeir', 'Úlfhéðinn', 'Úlfkell', 'Úlfljótur', 'Úlftýr', 'Úlfur', 'Úlrik', 'Úranus', 'Vagn', 'Vakur', 'Valberg', 'Valbergur', 'Valbjörn', 'Valbrandur', 'Valdemar', 'Valdi', 'Valdimar', 'Valdór', 'Valentín', 'Valentínus', 'Valgarð', 'Valgarður', 'Valgeir', 'Valíant', 'Vallaður', 'Valmar', 'Valmundur', 'Valsteinn', 'Valter', 'Valtýr', 'Valur', 'Valves', 'Valþór', 'Varmar', 'Vatnar', 'Váli', 'Vápni', 'Veigar', 'Veigur', 'Ver', 'Vermundur', 'Vernharð', 'Vernharður', 'Vestar', 'Vestmar', 'Veturliði', 'Vébjörn', 'Végeir', 'Vékell', 'Vélaugur', 'Vémundur', 'Vésteinn', 'Victor', 'Viðar', 'Vigfús', 'Viggó', 'Vignir', 'Vigri', 'Vigtýr', 'Vigur', 'Vikar', 'Viktor', 'Vilberg', 'Vilbergur', 'Vilbert', 'Vilbjörn', 'Vilbogi', 'Vilbrandur', 'Vilgeir', 'Vilhelm', 'Vilhjálmur', 'Vili', 'Viljar', 'Vilji', 'Villi', 'Vilmar', 'Vilmundur', 'Vincent', 'Vinjar', 'Virgill', 'Víðar', 'Víðir', 'Vífill', 'Víglundur', 'Vígmar', 'Vígmundur', 'Vígsteinn', 'Vígþór', 'Víkingur', 'Vopni', 'Vorm', 'Vöggur', 'Völundur', 'Vörður', 'Vöttur', 'Walter', 'Werner', 'Wilhelm', 'Willard', 'William', 'Willum', 'Ylur', 'Ymir', 'Yngvar', 'Yngvi', 'Yrkill', 'Ýmir', 'Ýrar', 'Zakaría', 'Zakarías', 'Zophanías', 'Zophonías', 'Zóphanías', 'Zóphonías', 'Þangbrandur', 'Þengill', 'Þeyr', 'Þiðrandi', 'Þiðrik', 'Þinur', 'Þjálfi', 'Þjóðann', 'Þjóðbjörn', 'Þjóðgeir', 'Þjóðleifur', 'Þjóðmar', 'Þjóðólfur', 'Þjóðrekur', 'Þjóðvarður', 'Þjóstar', 'Þjóstólfur', 'Þorberg', 'Þorbergur', 'Þorbjörn', 'Þorbrandur', 'Þorfinnur', 'Þorgarður', 'Þorgautur', 'Þorgeir', 'Þorgestur', 'Þorgils', 'Þorgísl', 'Þorgnýr', 'Þorgrímur', 'Þorkell', 'Þorlaugur', 'Þorlákur', 'Þorleifur', 'Þorleikur', 'Þormar', 'Þormóður', 'Þormundur', 'Þorri', 'Þorsteinn', 'Þorvaldur', 'Þorvar', 'Þorvarður', 'Þór', 'Þórar', 'Þórarinn', 'Þórbergur', 'Þórbjörn', 'Þórður', 'Þórgnýr', 'Þórgrímur', 'Þórhaddur', 'Þórhalli', 'Þórhallur', 'Þórir', 'Þórlaugur', 'Þórleifur', 'Þórlindur', 'Þórmar', 'Þórmundur', 'Þóroddur', 'Þórormur', 'Þórólfur', 'Þórsteinn', 'Þórörn', 'Þrastar', 'Þráinn', 'Þrándur', 'Þróttur', 'Þrúðmar', 'Þrymur', 'Þröstur', 'Þyrnir', 'Ægir', 'Æsir', 'Ævar', 'Ævarr', 'Ögmundur', 'Ögri', 'Ölnir', 'Ölver', 'Ölvir', 'Öndólfur', 'Önundur', 'Örlaugur', 'Örlygur', 'Örn', 'Örnólfur', 'Örvar', 'Össur', 'Öxar']; - - /** - * @var array Icelandic middle names. - */ - protected static $middleName = [ - 'Aðaldal', 'Aldan', 'Arnberg', 'Arnfjörð', 'Austan', 'Austdal', 'Austfjörð', 'Áss', 'Bakkdal', 'Bakkmann', 'Bald', 'Ben', 'Bergholt', 'Bergland', 'Bíldsfells', 'Bjarg', 'Bjarndal', 'Bjarnfjörð', 'Bláfeld', 'Blómkvist', 'Borgdal', 'Brekkmann', 'Brim', 'Brúnsteð', 'Dalhoff', 'Dan', 'Diljan', 'Ektavon', 'Eldberg', 'Elísberg', 'Elvan', 'Espólín', 'Eyhlíð', 'Eyvík', 'Falk', 'Finndal', 'Fossberg', 'Freydal', 'Friðhólm', 'Giljan', 'Gilsfjörð', 'Gnarr', 'Gnurr', 'Grendal', 'Grindvík', 'Gull', 'Haffjörð', 'Hafnes', 'Hafnfjörð', 'Har', 'Heimdal', 'Heimsberg', 'Helgfell', 'Herberg', 'Hildiberg', 'Hjaltdal', 'Hlíðkvist', 'Hnappdal', 'Hnífsdal', 'Hofland', 'Hofteig', 'Hornfjörð', 'Hólmberg', 'Hrafnan', 'Hrafndal', 'Hraunberg', 'Hreinberg', 'Hreindal', 'Hrútfjörð', 'Hvammdal', 'Hvítfeld', 'Höfðdal', 'Hörðdal', 'Íshólm', 'Júl', 'Kjarrval', 'Knaran', 'Knarran', 'Krossdal', 'Laufkvist', 'Laufland', 'Laugdal', 'Laxfoss', 'Liljan', 'Linddal', 'Línberg', 'Ljós', 'Loðmfjörð', 'Lyngberg', 'Magdal', 'Magg', 'Matt', 'Miðdal', 'Miðvík', 'Mjófjörð', 'Móberg', 'Mýrmann', 'Nesmann', 'Norðland', 'Núpdal', 'Ólfjörð', 'Ósland', 'Ósmann', 'Reginbald', 'Reykfell', 'Reykfjörð', 'Reynholt', 'Salberg', 'Sandhólm', 'Seljan', 'Sigurhólm', 'Skagalín', 'Skíðdal', 'Snæberg', 'Snædahl', 'Sólan', 'Stardal', 'Stein', 'Steinbekk', 'Steinberg', 'Storm', 'Straumberg', 'Svanhild', 'Svarfdal', 'Sædal', 'Val', 'Valagils', 'Vald', 'Varmdal', 'Vatnsfjörð', 'Vattar', 'Vattnes', 'Viðfjörð', 'Vídalín', 'Víking', 'Vopnfjörð', 'Yngling', 'Þor', 'Önfjörð', 'Örbekk', 'Öxdal', 'Öxndal', - ]; - - /** - * Randomly return an Icelandic middle name. - * - * @return string - */ - public static function middleName() - { - return static::randomElement(static::$middleName); - } - - /** - * Generate prepared last name for further processing. - * - * @return string - */ - public function lastName() - { - $name = static::firstNameMale(); - - if (substr($name, -2) === 'ur') { - $name = substr($name, 0, strlen($name) - 2); - } - - if (substr($name, -1) !== 's') { - $name .= 's'; - } - - return $name; - } - - /** - * Randomly return an Icelandic last name for a woman. - * - * @return string - */ - public function lastNameMale() - { - return $this->lastName() . 'son'; - } - - /** - * Randomly return an Icelandic last name for a man. - * - * @return string - */ - public function lastNameFemale() - { - return $this->lastName() . 'dóttir'; - } - - /** - * Return a random Icelandic Kennitala (Social Security number). - * - * @see http://en.wikipedia.org/wiki/Kennitala - * - * @return string - */ - public static function ssn() - { - // random birth date - $birthdate = DateTime::dateTimeThisCentury(); - - // last four buffer - $lastFour = null; - - // security variable reference - $ref = '32765432'; - - // valid flag - $valid = false; - - while (!$valid) { - // make two random numbers - $rand = static::randomDigit() . static::randomDigit(); - - // 8 char string with birth date and two random numbers - $tmp = $birthdate->format('dmy') . $rand; - - // loop through temp string - for ($i = 7, $sum = 0; $i >= 0; --$i) { - // calculate security variable - $sum += ($tmp[$i] * $ref[$i]); - } - - // subtract 11 if not 11 - $chk = ($sum % 11 === 0) ? 0 : (11 - ($sum % 11)); - - if ($chk < 10) { - $lastFour = $rand . $chk . substr($birthdate->format('Y'), 1, 1); - - $valid = true; - } - } - - return sprintf('%s-%s', $birthdate->format('dmy'), $lastFour); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php deleted file mode 100644 index 7118666e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php +++ /dev/null @@ -1,17 +0,0 @@ - 'Argovia'], - ['AI' => 'Appenzello Interno'], - ['AR' => 'Appenzello Esterno'], - ['BE' => 'Berna'], - ['BL' => 'Basilea Campagna'], - ['BS' => 'Basilea Città'], - ['FR' => 'Friburgo'], - ['GE' => 'Ginevra'], - ['GL' => 'Glarona'], - ['GR' => 'Grigioni'], - ['JU' => 'Giura'], - ['LU' => 'Lucerna'], - ['NE' => 'Neuchâtel'], - ['NW' => 'Nidvaldo'], - ['OW' => 'Obvaldo'], - ['SG' => 'San Gallo'], - ['SH' => 'Sciaffusa'], - ['SO' => 'Soletta'], - ['SZ' => 'Svitto'], - ['TG' => 'Turgovia'], - ['TI' => 'Ticino'], - ['UR' => 'Uri'], - ['VD' => 'Vaud'], - ['VS' => 'Vallese'], - ['ZG' => 'Zugo'], - ['ZH' => 'Zurigo'], - ]; - - protected static $cityFormats = [ - '{{cityName}}', - ]; - - protected static $streetNameFormats = [ - '{{streetSuffix}} {{firstName}}', - '{{streetSuffix}} {{lastName}}', - ]; - - protected static $streetAddressFormats = [ - '{{streetName}} {{buildingNumber}}', - ]; - protected static $addressFormats = [ - "{{streetAddress}}\n{{postcode}} {{city}}", - ]; - - /** - * Returns a random street prefix - * - * @example Via - * - * @return string - */ - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - /** - * Returns a random city name. - * - * @example Luzern - * - * @return string - */ - public function cityName() - { - return static::randomElement(static::$cityNames); - } - - /** - * Returns a canton - * - * @example array('BE' => 'Bern') - * - * @return array - */ - public static function canton() - { - return static::randomElement(static::$canton); - } - - /** - * Returns the abbreviation of a canton. - * - * @return string - */ - public static function cantonShort() - { - $canton = static::canton(); - - return key($canton); - } - - /** - * Returns the name of canton. - * - * @return string - */ - public static function cantonName() - { - $canton = static::canton(); - - return current($canton); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Company.php deleted file mode 100644 index bb5f9460..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/it_CH/Company.php +++ /dev/null @@ -1,15 +0,0 @@ -generator->parse($format); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php deleted file mode 100644 index 0e4b88df..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php +++ /dev/null @@ -1,17 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'yamada.jp' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php deleted file mode 100644 index 399e5595..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php +++ /dev/null @@ -1,147 +0,0 @@ -generator->parse($format); - } - - /** - * @param string|null $gender 'male', 'female' or null for any - * - * @return string - * - * @example 'アキラ' - */ - public function firstKanaName($gender = null) - { - if ($gender === static::GENDER_MALE) { - return static::firstKanaNameMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return static::firstKanaNameFemale(); - } - - return $this->generator->parse(static::randomElement(static::$firstKanaNameFormat)); - } - - /** - * @example 'アキラ' - */ - public static function firstKanaNameMale() - { - return static::randomElement(static::$firstKanaNameMale); - } - - /** - * @example 'アケミ' - */ - public static function firstKanaNameFemale() - { - return static::randomElement(static::$firstKanaNameFemale); - } - - /** - * @example 'アオタ' - */ - public static function lastKanaName() - { - return static::randomElement(static::$lastKanaName); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php deleted file mode 100644 index 1e0595e0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php +++ /dev/null @@ -1,19 +0,0 @@ -generator->parse($format); - } - - public static function companyPrefix() - { - return static::randomElement(static::$companyPrefixes); - } - - public static function companyNameElement() - { - return static::randomElement(static::$companyElements); - } - - public static function companyNameSuffix() - { - return static::randomElement(static::$companyNameSuffixes); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php deleted file mode 100644 index 375c32a7..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php +++ /dev/null @@ -1,43 +0,0 @@ - 'კვირა', - 'Monday' => 'ორშაბათი', - 'Tuesday' => 'სამშაბათი', - 'Wednesday' => 'ოთხშაბათი', - 'Thursday' => 'ხუთშაბათი', - 'Friday' => 'პარასკევი', - 'Saturday' => 'შაბათი', - ]; - $week = static::dateTime($max)->format('l'); - - return $map[$week] ?? $week; - } - - public static function monthName($max = 'now') - { - $map = [ - 'January' => 'იანვარი', - 'February' => 'თებერვალი', - 'March' => 'მარტი', - 'April' => 'აპრილი', - 'May' => 'მაისი', - 'June' => 'ივნისი', - 'July' => 'ივლისი', - 'August' => 'აგვისტო', - 'September' => 'სექტემბერი', - 'October' => 'ოქტომბერი', - 'November' => 'ნოემბერი', - 'December' => 'დეკემბერი', - ]; - $month = static::dateTime($max)->format('F'); - - return $map[$month] ?? $month; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php deleted file mode 100644 index d07e41cc..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php +++ /dev/null @@ -1,15 +0,0 @@ -generator->parse($format); - } - - public static function companyPrefix() - { - return static::randomElement(static::$companyPrefixes); - } - - public static function companyNameElement() - { - return static::randomElement(static::$companyElements); - } - - public static function companyNameSuffix() - { - return static::randomElement(static::$companyNameSuffixes); - } - - /** - * National Business Identification Numbers - * - * @see http://egov.kz/wps/portal/Content?contentPath=%2Fegovcontent%2Fbus_business%2Ffor_businessmen%2Farticle%2Fbusiness_identification_number&lang=en - * - * @param \DateTime $registrationDate - * - * @return string 12 digits, like 150140000019 - */ - public static function businessIdentificationNumber(\DateTime $registrationDate = null) - { - if (!$registrationDate) { - $registrationDate = \Faker\Provider\DateTime::dateTimeThisYear(); - } - - $dateAsString = $registrationDate->format('ym'); - $legalEntityType = (string) self::numberBetween(4, 6); - $legalEntityAdditionalType = (string) self::numberBetween(0, 3); - $randomDigits = (string) static::numerify('######'); - - return $dateAsString . $legalEntityType . $legalEntityAdditionalType . $randomDigits; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php deleted file mode 100644 index 0328da09..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ - [ - self::CENTURY_19TH => self::MALE_CENTURY_19TH, - self::CENTURY_20TH => self::MALE_CENTURY_20TH, - self::CENTURY_21ST => self::MALE_CENTURY_21ST, - ], - self::GENDER_FEMALE => [ - self::CENTURY_19TH => self::FEMALE_CENTURY_19TH, - self::CENTURY_20TH => self::FEMALE_CENTURY_20TH, - self::CENTURY_21ST => self::FEMALE_CENTURY_21ST, - ], - ]; - - /** - * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F - * - * @var array - */ - protected static $maleNameFormats = [ - '{{lastName}}ұлы {{firstNameMale}}', - ]; - - /** - * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F - * - * @var array - */ - protected static $femaleNameFormats = [ - '{{lastName}}қызы {{firstNameFemale}}', - ]; - - /** - * @see http://koshpendi.kz/index.php/nomad/imena/ - * - * @var array - */ - protected static $firstNameMale = [ - 'Аылғазы', - 'Әбдіқадыр', - 'Бабағожа', - 'Ғайса', - 'Дәмен', - 'Егізбек', - 'Жазылбек', - 'Зұлпықар', - 'Игісін', - 'Кәдіржан', - 'Қадырқан', - 'Латиф', - 'Мағаз', - 'Нармағамбет', - 'Оңалбай', - 'Өндіріс', - 'Пердебек', - 'Рақат', - 'Сағындық', - 'Танабай', - 'Уайыс', - 'Ұйықбай', - 'Үрімбай', - 'Файзрахман', - 'Хангелді', - 'Шаттық', - 'Ыстамбақы', - 'Ібни', - ]; - - /** - * @see http://koshpendi.kz/index.php/nomad/imena/ - * - * @var array - */ - protected static $firstNameFemale = [ - 'Асылтас', - 'Әужа', - 'Бүлдіршін', - 'Гүлшаш', - 'Ғафура', - 'Ділдә', - 'Еркежан', - 'Жібек', - 'Зылиқа', - 'Ирада', - 'Күнсұлу', - 'Қырмызы', - 'Ләтипа', - 'Мүштәри', - 'Нұршара', - 'Орынша', - 'Өрзия', - 'Перизат', - 'Рухия', - 'Сындыбала', - 'Тұрсынай', - 'Уәсима', - 'Ұрқия', - 'Үрия', - 'Фируза', - 'Хафиза', - 'Шырынгүл', - 'Ырысты', - 'Іңкәр', - ]; - - /** - * @see http://koshpendi.kz/index.php/nomad/imena/ - * @see https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F - * - * @var array - */ - protected static $lastName = [ - 'Адырбай', - 'Әжібай', - 'Байбөрі', - 'Ғизат', - 'Ділдабек', - 'Ешмұхамбет', - 'Жігер', - 'Зікірия', - 'Иса', - 'Кунту', - 'Қыдыр', - 'Лұқпан', - 'Мышырбай', - 'Нысынбай', - 'Ошақбай', - 'Өтетілеу', - 'Пірәлі', - 'Рүстем', - 'Сырмұхамбет', - 'Тілеміс', - 'Уәлі', - 'Ұлықбек', - 'Үстем', - 'Фахир', - 'Хұсайын', - 'Шілдебай', - 'Ыстамбақы', - 'Ісмет', - ]; - - /** - * Note! When calculating individual identification number - * 2000-01-01 - 2000-12-31 counts as 21th century - * 1900-01-01 - 1900-12-31 counts as 20th century - * - * @param int $year - * - * @return int - */ - private static function getCenturyByYear($year) - { - if (($year >= 2100) || ($year < 1800)) { - throw new \InvalidArgumentException('Unexpected century'); - } - - if ($year >= 2000) { - return self::CENTURY_21ST; - } - - if ($year >= 1900) { - return self::CENTURY_20TH; - } - - return self::CENTURY_19TH; - } - - /** - * National Individual Identification Numbers - * - * @see http://egov.kz/wps/portal/Content?contentPath=%2Fegovcontent%2Fcitizen_migration%2Fpassport_id_card%2Farticle%2Fiin_info&lang=en - * @see https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B8%D0%B2%D0%B8%D0%B4%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80 - * - * @param \DateTime $birthDate - * @param int $gender - * - * @return string 12 digits, like 780322300455 - */ - public static function individualIdentificationNumber(\DateTime $birthDate = null, $gender = self::GENDER_MALE) - { - if (!$birthDate) { - $birthDate = DateTime::dateTimeBetween(); - } - - do { - $population = self::numberBetween(1000, 2000); - $century = self::getCenturyByYear((int) $birthDate->format('Y')); - - $iin = $birthDate->format('ymd'); - $iin .= (string) self::$genderCenturyMap[$gender][$century]; - $iin .= (string) $population; - $checksum = self::checkSum($iin); - } while ($checksum === 10); - - return $iin . (string) $checksum; - } - - /** - * @param string $iinValue - * - * @return int - */ - public static function checkSum($iinValue) - { - $controlDigit = self::getControlDigit($iinValue, self::$firstSequenceBitWeights); - - if ($controlDigit === 10) { - return self::getControlDigit($iinValue, self::$secondSequenceBitWeights); - } - - return $controlDigit; - } - - /** - * @param string $iinValue - * @param array $sequence - * - * @return int - */ - protected static function getControlDigit($iinValue, $sequence) - { - $sum = 0; - - for ($i = 0; $i <= 10; ++$i) { - $sum += (int) $iinValue[$i] * $sequence[$i]; - } - - return $sum % 11; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php deleted file mode 100644 index c5d6440d..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php +++ /dev/null @@ -1,16 +0,0 @@ -generator->parse($format)); - } - - /** - * @example 'kim.kr' - */ - public function domainName() - { - return static::randomElement(static::$lastNameAscii) . '.' . $this->tld(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php deleted file mode 100644 index 71f6175b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php +++ /dev/null @@ -1,54 +0,0 @@ -generator->parse($format)); - } - - public function cellPhoneNumber() - { - $format = self::randomElement(array_slice(static::$formats, 6, 1)); - - return self::numerify($this->generator->parse($format)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php deleted file mode 100644 index 8182f899..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php +++ /dev/null @@ -1,1725 +0,0 @@ -에 나오는 요귀의 불빛 모양으로 푸르무레 하게 허공을 비추오. 동경의 불바다는 내 마음을 더욱 음침하게 하였소. -이 때에 뒤에서, -"모시모시(여보세요)." -하는 소리가 들렸소. 그것은 흰 저고리를 입은 호텔 보이였소. -"왜?" -하고 나는 고개만 돌렸소. -"손님이 오셨습니다." -"손님?" -하고 나는 보이에게로 한 걸음 가까이 갔소. 나를 찾을 손님이 어디 있나 하고 나는 놀란 것이오. -"따님께서 오셨습니다. 방으로 모셨습니다." -하고 보이는 들어가 버리고 말았소. -"따님?" -하고 나는 더욱 놀랐소. 순임이가 서울서 나를 따라왔나? 그것은 안 될 말이오. 순임이가 내 뒤를 따라 떠났더라도 아무리 빨리 와도 내일이 아니면 못 왔을 것이오. 그러면 누군가. 정임인가. 정임이가 병원에서 뛰어온 것인가. -나는 두근거리는 가슴을 억지로 진정하면서 내 방문을 열었소. -그것은 정임이었소. 정임은 내가 쓰다가 둔 편지를 보고 있다가 벌떡 일어나 내게 달려들어 안겨 버렸소. 나는 얼빠진 듯이 정임이가 하라는 대로 내버려두었소. 그 편지는 부치려고 쓴 것도 아닌데 그 편지를 정임이가 본 것이 안되었다고 생각하였소. -형! 나를 책망하시오. 심히 부끄러운 말이지마는 나는 정임을 힘껏 껴안아 주고 싶었소. 나는 몇 번이나 정임의 등을 굽어 보면서 내 팔에 힘을 넣으려고 하였소. 정임은 심히 귀여웠소. 정임이가 그처럼 나를 사모하는 것이 심히 기뻤소. 나는 감정이 재우쳐서 눈이 안 보이고 정신이 몽롱하여짐을 깨달았소. 나는 아프고 쓰린 듯한 기쁨을 깨달았소. 영어로 엑스터시라든지, 한문으로 무아의 경지란 이런 것이 아닌가 하였소. 나는 사십 평생에 이러한 경험을 처음 한 것이오. -형! 형이 아시다시피 나는 내 아내 이외에 젊은 여성에게 이렇게 안겨 본 일이 없소. 물론 안아 본 일도 없소. -그러나 형! 나는 나를 눌렀소. 내 타오르는 애욕을 차디찬 이지의 입김으로 불어서 끄려고 애를 썼소. -"글쎄 웬일이냐. 앓는 것이 이 밤중에 비를 맞고 왜 나온단 말이냐. 철없는 것 같으니." -하고 나는 아버지의 위엄으로 정임의 두 어깨를 붙들어 암체어에 앉혔소. 그리고 나도 테이블을 하나 세워 두고 맞은편에 앉았소. -정임은 부끄러운 듯이 두 손으로 낯을 가리우고 제 무릎에 엎드려 울기를 시작하오. -정임은 누런 갈색의 외투를 입었소. 무엇을 타고 왔는지 모르지마는 구두에는 꽤 많이 물이 묻고 모자에는 빗방울 얼룩이 보이오. -"네가 이러다가 다시 병이 더치면 어찌한단 말이냐. 아이가 왜 그렇게 철이 없니?" -하고 나는 더욱 냉정한 어조로 책망하고 데스크 위에 놓인 내 편지 초를 집어 박박 찢어 버렸소. 종이 찢는 소리에 정임은 잠깐 고개를 들어서 처음에는 내 손을 보고 다음에는 내 얼굴을 보았소. 그러나 나는 모르는 체하고 도로 교의에 돌아와 앉아서 가만히 눈을 감았소. 그리고 도무지 흥분되지 아니한 모양을 꾸몄소. -형! 어떻게나 힘드는 일이오? 참으면 참을수록 내 이빨이 마주 부딪고, 얼굴의 근육은 씰룩거리고 손은 불끈불끈 쥐어지오. -"정말 내일 가세요?" -하고 아마 오 분 동안이나 침묵을 지키다가 정임이가 고개를 들고 물었소. -"그럼, 가야지." -하고 나는 빙그레 웃어 보였소. -"저도 데리고 가세요!" -하는 정임의 말은 마치 서릿발이 날리는 칼날과 같았소. 나는 깜짝 놀라서 정임을 바라보았소. 그의 눈은 빛나고 입은 꼭 다물고 얼굴의 근육은 팽팽하게 켕겼소. 정임의 얼굴에는 찬바람이 도는 무서운 기운이 있었소. -나는 즉각적으로 죽기를 결심한 여자의 모양이라고 생각하였소. 열정으로 불덩어리가 되었던 정임은 내가 보이는 냉랭한 태도로 말미암아 갑자기 얼어 버린 것 같았소. -"어디를?" -하고 나는 정임의 `저도 데리고 가세요.' 하는 담대한 말에 놀라면서 물었소. -"어디든지, 아버지 가시는 데면 어디든지 저를 데리고 가세요. 저는 아버지를 떠나서는 혼자서는 못 살 것을 지나간 반 달 동안에 잘 알았습니다. 아까 아버지 오셨다 가신 뒤에 생각해 보니깐 암만해도 아버지는 다시 저에게 와 보시지 아니하고 가실 것만 같애요. 그리고 저로 해서 아버지께서는 무슨 큰 타격을 당하신 것만 같으셔요. 처음 뵈올 적에 벌써 가슴이 뜨끔했습니다. 그리고 여행을 떠나신다는 말씀을 듣고는 반드시 무슨 큰일이 나셨느니라고만 생각했습니다. 그리고 저어, 저로 해서 그러신 것만 같고, 저를 버리시고 혼자 가시려는 것만 같고, 그래서 달려왔더니 여기 써 놓으신 편지를 보고 그 편지에 다른 말씀은 어찌 됐든지, 네 일기를 보았다 하신 말씀을 보고는 다 알았습니다. 저와 한 방에 있는 애가 암만해도 어머니 스파인가봐요. 제가 입원하기 전에도 제 눈치를 슬슬 보고 또 책상 서랍도 뒤지는 눈치가 보이길래 일기책은 늘 쇠 잠그는 서랍에 넣어 두었는데 아마 제가 정신 없이 앓고 누웠는 동안에 제 핸드백에서 쇳대를 훔쳐 갔던가봐요. 그래서는 그 일기책을 꺼내서 서울로 보냈나봐요. 그걸루 해서 아버지께서는 불명예스러운 누명을 쓰시고 학교일도 내놓으시게 되고 집도 떠나시게 되셨나봐요. 다시는 집에 안 돌아오실 양으로 결심을 하셨나봐요. 아까 병원에서도 하시는 말씀이 모두 유언하시는 것만 같아서 퍽 의심을 가졌었는데 지금 그 쓰시던 편지를 보고는 다 알았습니다. 그렇지만 그렇지만." -하고 웅변으로 내려 말하던 정임은 갑자기 복받치는 열정을 이기지 못하는 듯이, 한 번 한숨을 지우고, -"그렇지만 저는 아버지를 따라가요. 절루 해서 아버지께서는 집도 잃으시고 명예도 잃으시고 사업도 잃으시고 인생의 모든 것을 다 잃으셨으니 저는 아버지를 따라가요. 어디를 가시든지 저는 어린 딸로 아버지를 따라다니다가 아버지께서 먼저 돌아가시면 저도 따라 죽어서 아버지 발 밑에 묻힐 테야요. 제가 먼저 죽거든 제가 병이 있으니깐 물론 제가 먼저 죽지요. 죽어도 좋습니다. 병원에서 앓다가 혼자 죽는 건 싫어요. 아버지 곁에서 죽으면 아버지께서, 오 내 딸 정임아 하시고 귀해 주시고 불쌍히 여겨 주시겠지요. 그리고 제 몸을 어디든지 땅에 묻으시고 `사랑하는 내 딸 정임의 무덤'이라고 패라도 손수 쓰셔서 세워 주시지 않겠습니까." -하고 정임은 비쭉비쭉하다가 그만 무릎 위에 엎더져 울고 마오. -나는 다만 죽은 사람 모양으로 반쯤 눈을 감고 앉아 있었소. 가슴 속에는 정임의 곁에서 지지 않는 열정을 품으면서도 정임의 말대로 정임을 데리고 아무도 모르는 곳으로 가 버리고 싶으면서도 나는 이 열정의 불길을 내 입김으로 꺼 버리지 아니하면 아니 되는 것이었소. -"아아, 제가 왜 났어요? 왜 하나님께서 저를 세상에 보내셨어요? 아버지의 일생을 파멸시키려 난 것이지요? 제가 지금 죽어 버려서 아버지의 명예를 회복할 수 있다면 저는 죽어 버릴 터이야요. 기쁘게 죽어 버리겠습니다. 제가 여덟 살부터 오늘날까지 받은 은혜를 제 목숨 하나로 갚을 수가 있다면 저는 지금으로 죽어 버리겠습니다. 그렇지만 그렇지만……. -그렇지만 그렇지만 저는 다만 얼마라도 다만 하루라도 아버지 곁에서 살고 싶어요 다만 하루만이라도, 아버지! 제가 왜 이렇습니까, 네? 제가 어려서 이렇습니까. 미친 년이 되어서 이렇습니까. 아버지께서는 아실 테니 말씀해 주세요. 하루만이라도 아버지를 모시고 아버지 곁에서 살았으면 죽어도 한이 없겠습니다. 제 생각이 잘못이야요? 제 생각이 죄야요? 왜 죄입니까? 아버지, 저를 버리시고 혼자 가시지 마세요, 네? `정임아, 너를 데리고 가마.' 하고 약속해 주세요, 네." -정임은 아주 담대하게 제가 하고자 하는 말을 다 하오. 그 얌전한, 수삽한정임의 속에 어디 그러한 용기가 있었던가, 참 이상한 일이오. 나는 귀여운 어린 계집애 정임의 속에 엉큼한 여자가 들어앉은 것을 발견하였소. 그가 몇 가지 재료(내가 여행을 떠난다는 것과 제 일기를 보았다는 것)를 종합하여 나와 저와의 새에, 또 그 때문에 어떠한 일이 일어난 것을 추측하는 그 상상력도 놀랍거니와 그렇게 내 앞에서는 별로 입도 벌리지 아니하던 그가 이처럼 담대하게 제 속에 있는 말을 거리낌없이 다 해 버리는 용기를 아니 놀랄 수 없었소. 내가, 사내요 어른인 내가 도리어 정임에게 리드를 받고 놀림을 받음을 깨달았소. -그러나 정임을 위해서든지, 중년 남자의 위신을 위해서든지 나는 의지력으로, 도덕력으로, 정임을 누르고 훈계하지 아니하면 아니 되겠다고 생각하였소. -"정임아." -하고 나는 비로소 입을 열어서 불렀소. 내 어성은 장중하였소. 나는 할 수 있는 위엄을 다하여 `정임아.' 하고 부른 것이오. -"정임아, 네 속은 다 알았다. 네 마음 네 뜻은 그만하면 다 알았다. 네가 나를 그처럼 생각해 주는 것을 고맙게 생각한다. 기쁘게도 생각한다. 그러나 정임아." -하고 나는 일층 태도와 소리를 엄숙하게 하여, -"네가 청하는 말은 절대로 들을 수 없는 말이다. 내가 너를 친딸같이 사랑하기 때문에 나는 너를 데리고 가지 못하는 것이다. 나는 세상에서 죽고 조선에서 죽더라도 너는 죽어서 아니 된다. 차마 너까지는 죽이고 싶지 아니하단 말이다. 내가 어디 가서 없어져 버리면 세상은 네게 씌운 누명이 애매한 줄을 알게 될 것이 아니냐. 그리되면 너는 조선의 좋은 일꾼이 되어서 일도 많이 하고 또 사랑하는 남편을 맞아서 행복된 생활도 할 수 있을 것이 아니냐. 그것이 내가 네게 바라는 것이다. 내가 어디 가 있든지, 내가 살아 있는 동안 나는 네가 잘되는 것만, 행복되게 사는 것만 바라보고 혼자 기뻐할 것이 아니냐. -네가 다 옳게 알았다. 나는 네 말대로 조선을 영원히 떠나기로 하였다. 그렇지마는 나는 이렇게 된 것을 조금도 슬퍼하지 아니한다. 너를 위해서 내가 무슨 희생을 한다고 하면 내게는 그것이 큰 기쁨이다. 그뿐 아니라, 나는 인제는 세상이 싫어졌다. 더 살기가 싫어졌다. 내가 십여 년 동안 전생명을 바쳐서 교육한 학생들에게까지 배척을 받을 때에는 나는 지금까지 살아온 것을 생각만 하여도 진저리가 난다. 그렇지마는 나는 이것이 다 내가 부족한 때문인 줄을 잘 안다. 나는 조선을 원망한다든가, 내 동포를 원망한다든가, 그럴 생각은 없다. 원망을 한다면 나 자신의 부족을 원망할 뿐이다. 내가 원체 교육을 한다든지 남의 지도자가 된다든지 할 자격이 없음을 원망한다면 원망할까, 내가 어떻게 조선이나 조선 사람을 원망하느냐. 그러니까 인제 내게 남은 일은 나를 조선에서 없애 버리는 것이다. 감히 십여 년 간 교육가라고 자처해 오던 거짓되고 외람된 생활을 끊어 버리는 것이다. 남편 노릇도 못 하고 아버지 노릇도 못 하는 사람이 남의 스승은 어떻게 되고 지도자는 어떻게 되느냐. 하니까 나는 이제 세상을 떠나 버리는 것이 조금도 슬프지 아니하고 도리어 몸이 가뜬하고 유쾌해지는 것 같다. -오직 하나 마음에 걸리는 것은 내 선배요 사랑하는 동지이던 남 선생의 유일한 혈육이던 네게다가 누명을 씌우고 가는 것이다." -"그게 어디 아버지 잘못입니까?" -하고 정임은 입술을 깨물었소. -"모두 제가 철이 없어서 저 때문에……." -하고 정임은 몸을 떨고 울었소. -"아니! 그렇게 생각하지 마라. 내가 지금 세상을 버릴 때에 무슨 기쁨이 한 가지 남는 것이 있다고 하면 너 하나가, 이 세상에서 오직 너 하나가 나를 따라 주는 것이다. 아마 너도 나를 잘못 알고 따라 주는 것이겠지마는 세상이 다 나를 버리고, 처자까지도 다 나를 버릴 때에 오직 너 하나가 나를 소중히 알아 주니 어찌 고맙지 않겠느냐. 그러니까 정임아 너는 몸을 조심하여서 건강을 회복하여서 오래 잘 살고, 그리고 나를 생각해 다오." -하고 나도 울었소. -형! 내가 정임에게 이런 말을 한 것이 잘못이지요. 그러나 나는 그 때에 이런 말을 아니 할 수 없었소. 왜 그런고 하니, 그것이 내 진정이니까. 나도 학교 선생으로, 교장으로, 또 주제넘게 지사로의 일생을 보내노라고 마치 오직 얼음 같은 의지력만 가진 사람 모양으로 사십 평생을 살아 왔지마는 내 속에도 열정은 있었던 것이오. 다만 그 열정을 누르고 죽이고 있었을 뿐이오. 물론 나는 아마 일생에 이 열정의 고삐를 놓아 줄 날이 없겠지요. 만일 내가 이 열정의 고삐를 놓아서 자유로 달리게 한다고 하면 나는 이 경우에 정임을 안고, 내 열정으로 정임을 태워 버렸을는지도 모르오. 그러나 나는 정임이가 열정으로 탈수록 나는 내 열정의 고삐를 두 손으로 꽉 붙들고 이를 악물고 매달릴 결심을 한 것이오. -열한 시! -"정임아. 인제 병원으로 가거라." -하고 나는 엄연하게 명령하였소. -"내일 저를 보시고 떠나시지요?" -하고 정임은 눈물을 씻고 물었소. -"그럼, J조교수도 만나고 너도 보고 떠나지." -하고 나는 거짓말을 하였소. 이 경우에 내가 거짓말쟁이라는 큰 죄인이 되는 것이 정임에게 대하여 정임을 위하여 가장 옳은 일이라고 생각한 까닭이오. -정임은, 무서운 직각력과 상상력을 가진 정임은 내 말의 진실성을 의심하는 듯이 나를 뚫어지게 바라보았소. 나는 차마 정임의 시선을 마주 보지 못하여 외면하여 버렸소. -정임은 수건으로 눈물을 씻고 체경 앞에 가서 화장을 고치고 그리고, -"저는 가요." -하고 내 앞에 허리를 굽혀서 작별 인사를 하였소. -"오, 가 자거라." -하고 나는 극히 범연하게 대답하였소. 나는 자리옷을 입었기 때문에 현관까지 작별할 수도 없어서 보이를 불러 자동차를 하나 준비하라고 명하고 내 방에서 작별할 생각을 하였소. -"내일 병원에 오세요?" -하고 정임은 고개를 숙이고 낙루하였소. -"오, 가마." -하고 나는 또 거짓말을 하였소. 세상을 버리기로 결심한 사람의 거짓말은 하나님께서도 용서하시겠지요. 설사 내가 거짓말을 한 죄로 지옥에 간다 하더라도 이 경우에 정임을 위하여 거짓말을 아니 할 수가 없지 않소? 내가 거짓말을 아니 하면 정임은 아니 갈 것이 분명하였소. -"전 가요." -하고 정임은 또 한 번 절을 하였으나 소리를 내어서 울었소. -"울지 마라! 몸 상한다." -하고 나는 정임에게 대한 최후의 친절을 정임의 곁에 한 걸음 가까이 가서 어깨를 또닥또닥하여 주고, 외투를 입혀 주었소. -"안녕히 주무세요." -하고 정임은 문을 열고 나가 버렸소. -정임의 걸어가는 소리가 차차 멀어졌소. -나는 얼빠진 사람 모양으로 그 자리에 우두커니 서 있었소. -창에 부딪히는 빗발 소리가 들리고 자동차 소리가 먼 나라에서 오는 것같이 들리오. 이것이 정임이가 타고 가는 자동차 소리인가. 나는 정임을 따라가서 붙들어 오고 싶었소. 내 몸과 마음은 정임을 따라서 허공에 떠가는 것 같았소. -아아 이렇게 나는 정임을 곁에 두고 싶을까. 이렇게 내가 정임의 곁에 있고 싶을까. 그러하건마는 나는 정임을 떼어 버리고 가지 아니하면 아니 된다! 그것은 애끓는 일이다. 기막히는 일이다! 그러나 내 도덕적 책임은 엄정하게 그렇게 명령하지 않느냐. 나는 이 도덕적 책임의 명령 그것은 더위가 없는 명령이다 을 털끝만치라도 휘어서는 아니 된다. -그러나 정임이가 호텔 현관까지 자동차를 타기 전에 한 번만 더 바라보는 것도 못 할 일일까. 한 번만, 잠깐만 더 바라보는 것도 못 할 일일까. 잠깐만 일 분만 아니 일 초만 한 시그마라는 극히 짧은 동안만 바라보는 것도 못 할 일일까. 아니, 정임을 한 시그마 동안만 더 보고 싶다 나는 이렇게 생각하고 벌떡 일어나서 도어의 핸들에 손을 대었소. -`안 된다! 옳잖다!' -하고 나는 내 소파에 돌아와서 털썩 몸을 던졌소. -`최후의 순간이 아니냐. 최후의 순간에 용감히 이겨야 할 것이 아니냐. 아서라! 아서라!' -하고 나는 혼자 주먹을 불끈불끈 쥐었소. -이 때에 짜박짜박 하고 걸어오는 소리가 들리오. 내 가슴은 쌍방망이로 두들기는 것같이 뛰었소. -`설마 정임일까.' -하면서도 나는 숨을 죽이고 귀를 기울였소. -그 발자국 소리는 분명 내 문 밖에 와서 그쳤소. 그리고는 소리가 없었소. -`내 귀의 환각인가.' -하고 나는 한숨을 내쉬었소. -그러나 다음 순간 또 두어 번 문을 두드리는 소리가 들렸소. -"이에스." -하고 나는 대답하고 문을 바라보았소. -문이 열렸소. -들어오는 이는 정임이었소. -"웬일이냐." -하고 나는 엄숙한 태도를 지었소. 그것으로 일 초의 일천분지 일이라도 다시 한 번 보고 싶던 정임을 보고 기쁨을 카무플라주한 것이오. -정임은 서슴지 않고 내 뒤에 와서 내 교의에 몸을 기대며, -"암만해도 오늘이 마지막인 것만 같아서, 다시 뵈올 기약은 없는 것만 같아서 가다가 도로 왔습니다. 한 번만 더 뵙고 갈 양으로요. 그래 도로 와서도 들어올까 말까 하고 주저주저하다가 이것이 마지막인데 하고 용기를 내어서 들어왔습니다. 내일 저를 보시고 가신다는 것이 부러 하신 말씀만 같고, 마지막 뵈옵고, 뵈온대도 그래도 한 번 더 뵈옵기만 해도……." -하고 정임의 말은 끝을 아물지 못하였소. 그는 내 등 뒤에 서 있기 때문에 그가 어떠한 표정을 하고 있는지는 볼 수가 없었소. 나는 다만 아버지의 위엄으로 정면을 바라보고 있었을 뿐이오. -`정임아, 나도 네가 보고 싶었다. 네 뒤를 따라가고 싶었다. 내 몸과 마음은 네 뒤를 따라서 허공으로 날았다. 나는 너를 한 초라도 한 초의 천분지 일 동안이라도 한 번 더 보고 싶었다. 정임아, 내 진정은 너를 언제든지 내 곁에 두고 싶다. 정임아, 지금 내 생명이 가진 것은 오직 너뿐이다.' -이런 말이라도 하고 싶었소. 그러나 이런 말을 하여서는 아니 되오! 만일 내가 이런 말을 하여 준다면 정임이가 기뻐하겠지요. 그러나 나는 정임이에게 이런 기쁨을 주어서는 아니 되오! -나는 어디까지든지 아버지의 위엄, 아버지의 냉정함을 아니 지켜서는 아니 되오. -그렇지마는 내 가슴에 타오르는 이름지을 수 없는 열정의 불길은 내 이성과 의지력을 태워 버리려 하오. 나는 눈이 아뜩아뜩함을 깨닫소. 나는 내 생명의 불길이 깜박깜박함을 깨닫소. -그렇지마는! 아아 그렇지마는 나는 이 도덕적 책임의 무상 명령의 발령자인 쓴 잔을 마시지 아니하여서는 아니 되는 것이오. -`산! 바위!' -나는 정신을 가다듬어서 이것을 염하였소. -그러나 열정의 파도가 치는 곳에 산은 움직이지 아니하오? 바위는 흔들리지 아니하오? 태산과 반석이 그 흰 불길에 타서 재가 되지는 아니하오? 인생의 모든 힘 가운데 열정보다 더 폭력적인 것이 어디 있소? 아마도 우주의 모든 힘 가운데 사람의 열정과 같이 폭력적, 불가항력적인 것은 없으리라. 뇌성, 벽력, 글쎄 그것에나 비길까. 차라리 천체와 천체가 수학적으로 계산할 수 없는 비상한 속력을 가지고 마주 달려들어서 우리의 귀로 들을 수 없는 큰 소리와 우리가 굳다고 일컫는 금강석이라도 증기를 만들고야 말 만한 열을 발하는 충돌의 순간에나 비길까. 형. 사람이라는 존재가 우주의 모든 존재 중에 가장 비상한 존재인 것 모양으로 사람의 열정의 힘은 우주의 모든 신비한 힘 가운데 가장 신비한 힘이 아니겠소? 대체 우주의 모든 힘은 그것이 아무리 큰 힘이라고 하더라도 저 자신을 깨뜨리는 것은 없소. 그렇지마는 사람이라는 존재의 열정은 능히 제 생명을 깨뜨려 가루를 만들고 제 생명을 살라서 소지를 올리지 아니하오? 여보, 대체 이에서 더 폭력이요, 신비적인 것이 어디 있단 말이오. -이 때 내 상태, 어깨 뒤에서 열정으로 타고 섰는 정임을 느끼는 내 상태는 바야흐로 대폭발, 대충돌을 기다리는 아슬아슬한 때가 아니었소. 만일 조금만이라도 내가 내 열정의 고삐에 늦춤을 준다고 하면 무서운 대폭발이 일어났을 것이오. -"정임아!" -하고 나는 충분히 마음을 진정해 가지고 고개를 옆으로 돌려 정임의 얼굴을 찾았소. -"네에." -하고 정임은 입을 약간 내 귀 가까이로 가져와서 그 씨근거리는 소리가 분명히 내 귀에 들리고 그 후끈후끈하는 뜨거운 입김이 내 목과 뺨에 감각되었소. -억지로 진정하였던 내 가슴은 다시 설레기를 시작하였소. 그 불규칙한 숨소리와 뜨거운 입김 때문이었을까. -"시간 늦는다. 어서 가거라. 이 아버지는 언제까지든지 너를 사랑하는 딸 로 소중히 소중히 가슴에 품고 있으마. 또 후일에 다시 만날 때도 있을지 아느냐. 설사 다시 만날 때가 없다기로니 그것이 무엇이 그리 대수냐. 나이 많은 사람은 먼저 죽고 젊은 사람은 오래 살아서 인생의 일을 많이 하는 것이 순서가 아니냐. 너는 몸이 아직 약하니 마음을 잘 안정해서 어서 건강을 회복하여라. 그리고 굳세게 굳세게, 힘있게 힘있게 살아 다오. 조선은 사람을 구한다. 나 같은 사람은 인제 조선서 더 일할 자격을 잃어버린 사람이지마는 네야 어떠냐. 설사 누가 무슨 말을 해서 학교에서 학비를 아니 준다거든 내가 네게 준 재산을 가지고 네 마음대로 공부를 하려무나. 네가 그렇게 해 주어야 나를 위하는 것이다. 자 인제 가거라. 네 앞길이 양양하지 아니하냐. 자 인제 가거라. 나는 내일 아침 동경을 떠날란다. 자 어서." -하고 나는 화평하게 웃는 낯으로 일어섰소. -정임은 울먹울먹하고 고개를 숙이오. -밖에서는 바람이 점점 강해져서 소리를 하고 유리창을 흔드오. -"그럼, 전 가요." -하고 정임은 고개를 들었소. -"그래. 어서 가거라. 벌써 열한시 반이다. 병원 문은 아니 닫니!" -정임은 대답이 없소. -"어서!" -하고 나는 보이를 불러 자동차를 하나 준비하라고 일렀소. -"갈랍니다." -하고 정임은 고개를 숙여서 내게 인사를 하고 문을 향하여 한 걸음 걷다가 잠깐 주저하더니, 다시 돌아서서, -"저를 한 번만 안아 주셔요. 아버지가 어린 딸을 안듯이 한 번만 안아 주셔요." -하고 내 앞으로 가까이 와 서오. -나는 팔을 벌려 주었소. 정임은 내 가슴을 향하고 몸을 던졌소. 그리고 제 이뺨 저뺨을 내 가슴에 대고 비볐소. 나는 두 팔을 정임의 어깨 위에 가벼이 놓았소. -이러한 지 몇 분이 지났소. 아마 일 분도 다 못 되었는지 모르오. -정임은 내 가슴에서 고개를 들어 나를 뚫어지게 우러러보더니, 다시 내 가슴에 낯을 대더니 아마 내 심장이 무섭게 뛰는 소리를 정임은 들었을 것이오 정임은 다시 고개를 들고, -"어디를 가시든지 편지나 주셔요." -하고 굵은 눈물을 떨구고는 내게서 물러서서 또 한 번 절하고, -"안녕히 가셔요. 만주든지 아령이든지 조선 사람 많이 사는 곳에 가셔서 일하고 사셔요. 돌아가실 생각은 마셔요. 제가, 아버지 말씀대로 혼자 떨어져 있으니 아버지도 제 말씀대로 돌아가실 생각은 마셔요, 네, 그렇다고 대답하셔요!" -하고는 또 한 번 내 가슴에 몸을 기대오. -죽기를 결심한 나는 `오냐, 그러마.' 하는 대답을 할 수는 없었소. 그래서, -"오, 내 살도록 힘쓰마." -하는 약속을 주어서 정임을 돌려보냈소. -정임의 발자국 소리가 안 들리게 된 때에 나는 빠른 걸음으로 옥상 정원으로 나갔소. 비가 막 뿌리오. -나는 정임이가 타고 나가는 자동차라도 볼 양으로 호텔 현관 앞이 보이는 꼭대기로 올라갔소. 현관을 떠난 자동차 하나가 전찻길로 나서서는 북을 향하고 달아나서 순식간에 그 꽁무니에 달린 붉은 불조차 스러져 버리고 말았소. -나는 미친 사람 모양으로, -"정임아, 정임아!" -하고 수없이 불렀소. 나는 사 층이나 되는 이 꼭대기에서 뛰어내려서 정임이가 타고 간 자동차의 뒤를 따르고 싶었소. -"아아 영원한 인생의 이별!" -나는 그 옥상에 얼마나 오래 섰던지를 모르오. 내 머리와 낯과 배스로브에서는 물이 흐르오. 방에 들어오니 정임이가 끼치고 간 향기와 추억만 남았소. -나는 방 안 구석구석에 정임의 모양이 보이는 것을 깨달았소. 특별히 정임이가 고개를 숙이고 서 있던 내 교의 뒤에는 분명히 갈색 외투를 입은 정임의 모양이 완연하오. -"정임아!" -하고 나는 그 곳으로 따라가오. 그러나 가면 거기는 정임은 없소. -나는 교의에 앉소. 그러면 정임의 씨근씨근하는 숨소리와 더운 입김이 분명 내 오른편에 감각이 되오. 아아 무서운 환각이여! -나는 자리에 눕소. 그리고 정임의 환각을 피하려고 불을 끄오. 그러면 정임이가 내게 안기던 자리쯤에 환하게 정임의 모양이 나타나오. -나는 불을 켜오. 또 불을 끄오. -날이 밝자 나는 비가 갠 것을 다행으로 비행장에 달려가서 비행기를 얻어 탔소. -나는 다시 조선의 하늘을 통과하기가 싫어서 북강에서 비행기에서 내려서 문사에 와서 대련으로 가는 배를 탔소. -나는 대련에서 내려서 하룻밤을 여관에서 자고는 곧 장춘 가는 급행을 탔소. 물론 아무에게도 엽서 한 장 한 일 없었소. 그것은 인연을 끊은 세상에 대하여 연연한 마음을 가지는 것을 부끄럽게 생각한 까닭이오. -차가 옛날에는 우리 조상네가 살고 문화를 짓던 옛 터전인 만주의 벌판을 달릴 때에는 감회도 없지 아니하였소. 그러나 나는 지금 그런 한가한 감상을 쓸 겨를이 없소. -내가 믿고 가는 곳은 하얼빈에 있는 어떤 친구요. 그는 R라는 사람으로서 경술년에 A씨 등의 망명객을 따라 나갔다가 아라사에서 무관 학교를 졸업하고 아라사 사관으로서 구주 대전에도 출정을 하였다가, 혁명 후에도 이내 적위군에 머물러서 지금까지 소비에트 장교로 있는 사람이오. 지금은 육군 소장이라던가. -나는 하얼빈에 그 사람을 찾아가는 것이오. 그 사람을 찾아야 아라사에 들어갈 여행권을 얻을 것이요, 여행권을 얻어야 내가 평소에 이상하게도 그리워하던 바이칼 호를 볼 것이오. -하얼빈에 내린 것은 해가 뉘엿뉘엿 넘어가는 석양이었소. -나는 안중근이 이등박문(伊藤博文:이토 히로부미)을 쏜 곳이 어딘가 하고 벌판과 같이 넓은 플랫폼에 내렸소. 과연 국제 도시라 서양 사람, 중국 사람, 일본 사람이 각기 제 말로 지껄이오. 아아 조선 사람도 있을 것이오마는 다들 양복을 입거나 청복을 입거나 하고 또 사람이 많은 곳에서는 말도 잘 하지 아니하여 아무쪼록 조선 사람인 것을 표시하지 아니하는 판이라 그 골격과 표정을 살피기 전에는 어느 것이 조선 사람인지 알 길이 없소. 아마 허름하게 차리고 기운 없이, 비창한 빛을 띠고 사람의 눈을 슬슬 피하는 저 순하게 생긴 사람들이 조선 사람이겠지요. 언제나 한 번 가는 곳마다 동양이든지, 서양이든지, -`나는 조선 사람이오!' -하고 뽐내고 다닐 날이 있을까 하면 눈물이 나오. 더구나, 하얼빈과 같은 각색 인종이 모여서 생존 경쟁을 하는 마당에 서서 이런 비감이 간절하오. 아아 이 불쌍한 유랑의 무리 중에 나도 하나를 더 보태는가 하면 눈물을 씻지 아니할 수 없었소. -나는 역에서 나와서 어떤 아라사 병정 하나를 붙들고 R의 아라사 이름을 불렀소. 그리고 아느냐고 영어로 물었소. -그 병정은 내 말을 잘못 알아들었는지, 또는 R를 모르는지 무엇이라고 아라사말로 지껄이는 모양이나 나는 물론 그것을 알아들을 수가 없었소. 그러나 나는 그 병정의 표정에서 내게 호의를 가진 것을 짐작하고 한 번 더 분명히, -"요십 알렉산드로비치 리가이." -라고 불러 보았소. -그 병정은 빙그레 웃고 고개를 흔드오. 이 두 외국 사람의 이상한 교섭에 흥미를 가지고 여러 아라사 병정과 동양 사람들이 십여 인이나 우리 주위에 모여드오. -그 병정이 나를 바라보고 또 한 번 그 이름을 불러 보라는 모양 같기로 나는 이번에는 R의 아라사 이름에 `제너럴'이라는 말을 붙여 불러 보았소. -그랬더니 어떤 다른 병정이 뛰어들며, -"게네라우 리가이!" -하고 안다는 표정을 하오. `게네라우'라는 것이 아마 아라사말로 장군이란 말인가 하였소. -"예스. 예스." -하고 나는 기쁘게 대답하였소. 그리고는 아라사 병정들끼리 무에라고 지껄이더니, 그 중에 한 병정이 나서면서 고개를 끄덕끄덕하고, 제가 마차 하나를 불러서 나를 태우고 저도 타고 어디로 달려가오. -그 아라사 병정은 친절히 알지도 못하는 말로 이것저것을 가리키면서 설명을 하더니 내가 못 알아듣는 줄을 생각하고 내 어깨를 툭 치고 웃소. 어린애와 같이 순한 사람들이구나 하고 나는 고맙다는 표로 고개만 끄덕끄덕하였소. -어디로 어떻게 가는지 서양 시가로 달려가다가 어떤 큰 저택 앞에 이르러서 마차를 그 현관 앞으로 들이몰았소. -현관에서는 종졸이 나왔소. 내가 명함을 들여보냈더니 부관인 듯한 아라사 장교가 나와서 나를 으리으리한 응접실로 인도하였소. 얼마 있노라니 중년이 넘은 어떤 대장이 나오는데 군복에 칼끈만 늘였소. -"이게 누구요." -하고 그 대장은 달려들어서 나를 껴안았소. 이십오 년 만에 만나는 우리는 서로 알아본 것이오. -이윽고 나는 그의 부인과 자녀들도 만났소. 그들은 다 아라사 사람이오. -저녁이 끝난 뒤에 나는 R의 부인과 딸의 음악과 그림 구경과 기타의 관대를 받고 단둘이 이야기할 기회를 얻었소. 경술년 당시 이야기도 나오고, A씨의 이야기도 나오고, R의 신세 타령도 나오고, 내 이십오 년 간의 생활 이야기도 나오고, 소비에트 혁명 이야기도 나오고, 하얼빈 이야기도 나오고, 우리네가 어려서 서로 사귀던 회구담도 나오고 이야기가 그칠 바를 몰랐소. "조선은 그립지 않은가." -하는 내 말에 쾌활하던 R는 고개를 숙이고 추연한 빛을 보였소. -나는 R의 추연한 태도를 아마 고국을 그리워하는 것으로만 여겼소. 그래서 나는 그리 침음하는 것을 보고, -"얼마나 고국이 그립겠나. 나는 고국을 떠난 지가 일 주일도 안 되건마는 못 견디게 그리운데." -하고 동정하는 말을 하였소. -했더니, 이 말 보시오. 그는 침음을 깨뜨리고 고개를 번쩍 들며, -"아니! 나는 고국이 조금도 그립지 아니하이. 내가 지금 생각한 것은 자네 말을 듣고 고국이 그리운가 그리워할 것이 있는가를 생각해 본 것일세. 그랬더니 아무리 생각하여도 나는 고국이 그립다는 생각을 가질 수가 없어. 그야 어려서 자라날 때에 보던 강산이라든지 내 기억에 남은 아는 사람들이라든지, 보고 싶다 하는 생각도 없지 아니하지마는 그것이 고국이 그리운 것이라고 할 수가 있을까. 그 밖에는 나는 아무리 생각하여도 고국이 그리운 것을 찾을 길이 없네. 나도 지금 자네를 보고 또 자네 말을 듣고 오래 잊어버렸던 고국을 좀 그립게, 그립다 하게 생각하려고 해 보았지마는 도무지 나는 고국이 그립다는 생각이 나지 않네." -이 말에 나는 깜짝 놀랐소. 몸서리치게 무서웠소. 나는 해외에 오래 표랑하는 사람은 으레 고국을 그리워할 것으로 믿고 있었소. 그런데 이 사람이, 일찍은 고국을 사랑하여 목숨까지도 바치려던 이 사람이 도무지 이처럼 고국을 잊어버린다는 것은 놀라운 정도를 지나서 괘씸하기 그지없었소. 나도 비록 조선을 떠난다고, 영원히 버린다고 나서기는 했지마는 나로는 죽기 전에는 아니 비록 죽더라도 잊어버리지 못할 고국을 잊어버린 R의 심사가 난측하고 원망스러웠소. -"고국이 그립지가 않아?" -하고 R에게 묻는 내 어성에는 격분한 빛이 있었소. -"이상하게 생각하시겠지. 하지만 고국에 무슨 그리울 것이 있단 말인가. 그 빈대 끓는 오막살이가 그립단 말인가. 나무 한 개 없는 산이 그립단 말인가. 물보다도 모래가 많은 다 늙어빠진 개천이 그립단 말인가. 그 무기력하고 가난한, 시기 많고 싸우고 하는 그 백성을 그리워한단 말인가. 그렇지 아니하면 무슨 그리워할 음악이 있단 말인가, 미술이 있단 말인가, 문학이 있단 말인가, 사상이 있단 말인가, 사모할 만한 인물이 있단 말인가! 날더러 고국의 무엇을 그리워하란 말인가. 나는 조국이 없는 사람일세. 내가 소비에트 군인으로 있으니 소비에트가 내 조국이겠지. 그러나 진심으로 내 조국이라는 생각은 나지 아니하네." -하고 저녁 먹을 때에 약간 붉었던 R의 얼굴은 이상한 흥분으로 더욱 붉어지오.유 정유 정 -R는 먹던 담배를 화나는 듯이 재떨이에 집어던지며, -"내가 하얼빈에 온 지가 인제 겨우 삼사 년밖에 안 되지마는 조선 사람 때문에 나는 견딜 수가 없어. 와서 달라는 것도 달라는 것이지마는 조선 사람이 또 어찌하였느니 또 어찌하였느니 하는 불명예한 말을 들을 때에는 나는 금시에 죽어 버리고 싶단 말일세. 내게 가장 불쾌한 것이 있다고 하면 그것은 고국이라는 기억과 조선 사람의 존잴세. 내가 만일 어느 나라의 독재자가 된다고 하면 나는 첫째로 조선인 입국 금지를 단행하려네. 만일 조선이라는 것을 잊어버릴 약이 있다고 하면 나는 생명과 바꾸어서라도 사 먹고 싶어." -하고 R는 약간 흥분된 어조를 늦추어서, -"나도 모스크바에 있다가 처음 원동에 나왔을 적에는 길을 다녀도 혹시 동포가 눈에 뜨이지나 아니하나 하고 찾았네. 그래서 어디서든지 동포를 만나면 반가이 손을 잡았지. 했지만 점점 그들은 오직 귀찮은 존재에 지나지 못하다는 것을 알았단 말일세. 인제는 조선 사람이라고만 하면 만나기가 무섭고 끔찍끔찍하고 진저리가 나는 걸 어떡허나. 자네 명함이 들어온 때에도 조선 사람인가 하고 가슴이 뜨끔했네." -하고 R는 웃지도 아니하오. 그의 얼굴에는, 군인다운 기운찬 얼굴에는 증오와 분노의 빛이 넘쳤소. -"나도 자네 집에 환영받는 나그네는 아닐세그려." -하고 나는 이 견디기 어려운 불쾌하고 무서운 공기를 완화하기 위하여 농담삼아 한 마디를 던지고 웃었소. -나는 R의 말이 과격함에 놀랐지마는, 또 생각하면 R가 한 말 가운데는 들을 만한 이유도 없지 아니하오. 그것을 생각할 때에 나는 R를 괘씸하게 생각하기 전에 내가 버린다는 조선을 위하여서 가슴이 아팠소. 그렇지만 이제 나 따위가 가슴을 아파한대야 무슨 소용이 있소. 조선에 남아 계신 형이나 R의 말을 참고삼아 쓰시기 바라오. 어쨌으나 나는 R에게서 목적한 여행권을 얻었소. R에게는 다만, -`나는 피곤한 몸을 좀 정양하고 싶다. 나는 내가 평소에 즐겨하는 바이칼 호반에서 눈과 얼음의 한겨울을 지내고 싶다.' -는 것을 여행의 이유로 삼았소. -R는 나의 초췌한 모양을 짐작하고 내 핑계를 그럴듯하게 아는 모양이었소. 그리고 나더러, `이왕 정양하려거든 카프카 지방으로 가거라. 거기는 기후 풍경도 좋고 또 요양원의 설비도 있다.'는 것을 말하였소. 나도 톨스토이의 소설에서, 기타의 여행기 등속에서 이 지방에 관한 말을 못 들은 것이 아니나 지금 내 처지에는 그런 따뜻하고 경치 좋은 지방을 가릴 여유도 없고 또 그러한 지방보다도 눈과 얼음과 바람의 시베리아의 겨울이 합당한 듯하였소. -그러나 나는 R의 호의를 굳이 사양할 필요도 없어서 그가 써 주는 대로 소개장을 다 받아 넣었소. 그는 나를 처남 매부 간이라고 소개해 주었소. -나는 모스크바 가는 다음 급행을 기다리는 사흘 동안 R의 집의 손이 되어서 R부처의 친절한 대우를 받았소. -그 후에는 나는 R와 조선에 관한 토론을 한 일은 없지마는 R가 이름지어 말을 할 때에는 조선을 잊었노라, 그리워할 것이 없노라, 하지마는 무의식적으로 말을 할 때에는 조선을 못 잊고 또 조선을 여러 점으로 그리워하는 양을 보았소. 나는 그것으로써 만족하게 여겼소. -나는 금요일 오후 세시 모스크바 가는 급행으로 하얼빈을 떠났소. 역두에는 R와 R의 가족이 나와서 꽃과 과일과 여러 가지 선물로 나를 전송하였소. R와 R의 가족은 나를 정말 형제의 예로 대우하여 차가 떠나려 할 때에 포옹과 키스로 작별하여 주었소. -이 날은 퍽 따뜻하고 일기가 좋은 날이었소. 하늘에 구름 한 점, 땅에 바람 한 점 없이 마치 늦은 봄날과 같이 따뜻한 날이었소. -차는 떠났소. 판다는 둥 안 판다는 둥 말썽 많은 동중로(지금은 북만 철로라고 하오.)의 국제 열차에 몸을 의탁한 것이오. -송화강(松花江:쑹화 강)의 철교를 건너오. 아아 그리도 낯익은 송화강! 송화강이 왜 낯이 익소. 이 송화강은 불함산(장백산)에 근원을 발하여 광막한 북만주의 사람도 없는 벌판을 혼자 소리도 없이 흘러가는 것이 내 신세와 같소. 이 북만주의 벌판을 만든 자가 송화강이지마는 나는 그만한 힘이 없는 것이 부끄러울 뿐이오. 이 광막한 북만의 벌판을 내 손으로 개척하여서 조선 사람의 낙원을 만들자 하고 뽐내어 볼까. 그것은 형이 하시오. 내 어린것이 자라거든 그놈에게나 그러한 생각을 넣어 주시오. -동양의 국제적 괴물인 하얼빈 시가도 까맣게 안개에서 스러져 버리고 말았소. 그러나 그 시가를 싼 까만 기운이 국제적 풍운을 포장한 것이라고 할까요. -가도가도 벌판. 서리맞은 마른 풀바다. 실개천 하나도 없는 메마른 사막. 어디를 보아도 산 하나 없으니 하늘과 땅이 착 달라붙은 듯한 천지. 구름 한 점 없건만도 그 큰 태양 가지고도 미처 다 비추지 못하여 지평선 호를 그린 지평선 위에는 항상 황혼이 떠도는 듯한 세계. 이 속으로 내가 몸을 담은 열차는 서쪽으로 서쪽으로 해가 가는 걸음을 따라서 달리고 있소. 열차가 달리는 바퀴 소리도 반향할 곳이 없어 힘없는 한숨같이 스러지고 마오. -기쁨 가진 사람이 지루해서 못 견딜 이 풍경은 나같이 수심 가진 사람에게는 가장 공상의 말을 달리기에 합당한 곳이오. -이 곳에도 산도 있고 냇물도 있고 삼림도 있고 꽃도 피고 날짐승, 길짐승이 날고 기던 때도 있었겠지요. 그러던 것이 몇만 년 지나는 동안에 산은 낮아지고 골은 높아져서 마침내 이 꼴이 된 것인가 하오. 만일 큰 힘이 있어 이 광야를 파낸다 하면 물 흐르고 고기 놀던 강과, 울고 웃던 생물이 살던 자취가 있을 것이오. 아아 이 모든 기억을 꽉 품고 죽은 듯이 잠잠한 광야에! -내가 탄 차가 F역에 도착하였을 때에는 북만주 광야의 석양의 아름다움은 그 극도에 달한 것 같았소. 둥긋한 지평선 위에 거의 걸린 커다란 해! 아마 그 신비하고 장엄함이 내 경험으로는 이 곳에서밖에는 볼 수 없는 것이라고생각하오. 이글이글 이글이글 그러면서도 둥글다는 체모를 변치 아니하는 그 지는 해! -게다가 먼 지평선으로부터 기어드는 황혼은 인제는 대지를 거의 다 덮어 버려서 마른 풀로 된 지면은 가뭇가뭇한 빛을 띠고 사막의 가는 모래를 머금은 지는 해의 광선을 반사하여서 대기는 짙은 자줏빛을 바탕으로 한 가지각색의 명암을 가진, 오색이 영롱한, 도무지 내가 일찍 경험해 보지 못한 색채의 세계를 이루었소. 아 좋다! -그 속에 수은같이 빛나는, 수없는 작고 큰 호수들의 빛! 그 속으로 날아오는 수없고 이름 모를 새들의 떼도 이 세상의 것이라고는 생각하지 아니하오. -나는 거의 무의식적으로 차에서 뛰어내렸소. 거의 떠날 시간이 다 되어서 짐의 일부분은 미처 가지지도 못하고 뛰어내렸소. 반쯤 미친 것이오. -정거장 앞 조그마한 아라사 사람의 여관에다가 짐을 맡겨 버리고 나는 단장을 끌고 철도 선로를 뛰어 건너서 호수의 수은빛 나는 곳을 찾아서 지향 없이 걸었소. -한 호수를 가서 보면 또 저 편 호수가 더 아름다워 보이오. 원컨대 저 지는 해가 다 지기 전에 이 광야에 있는 호수를 다 돌아보고 싶소. -내가 호숫 가에 섰을 때에 그 거울같이 잔잔한 호수면에 비치는 내 그림자의 외로움이여, 그러나 아름다움이여! 그 호수는 영원한 우주의 신비를 품고 하늘이 오면 하늘을, 새가 오면 새를, 구름이 오면 구름을, 그리고 내가 오면 나를 비추지 아니하오. 나는 호수가 되고 싶소. 그러나 형! 나는 이 호수면에서 얼마나 정임의 얼굴을 찾았겠소. 그것은 물리학적으로 불가능한 일이겠지요. 동경의 병실에 누워 있는 정임의 모양이 몽고 사막의 호수면에 비칠 리야 있겠소. 없겠지마는 나는 호수마다 정임의 그림자를 찾았소. 그러나 보이는 것은 외로운 내 그림자뿐이오. -`가자. 끝없는 사막으로 한없이 가자. 가다가 내 기운이 진하는 자리에 나는 내 손으로 모래를 파고 그 속에 내 몸을 묻고 죽어 버리자. 살아서 다시 볼 수 없는 정임의 「이데아」를 안고 이 깨끗한 광야에서 죽어 버리 자.' -하고 나는 지는 해를 향하고 한정 없이 걸었소. 사막이 받았던 따뜻한 기운은 아직도 다 식지는 아니하였소. 사막에는 바람 한 점도 없소. 소리 하나도 없소. 발자국 밑에서 우는 마른 풀과 모래의 바스락거리는 소리가 들릴 뿐이오. -나는 허리를 지평선에 걸었소. 그 신비한 광선은 내 가슴으로부터 위에만을 비추고 있소. -문득 나는 해를 따라가는 별 두 개를 보았소. 하나는 앞을 서고 하나는 뒤를 섰소. 앞의 별은 좀 크고 뒤의 별은 좀 작소. 이런 별들은 산 많은 나라 다시 말하면 서쪽 지평선을 보기 어려운 나라에서만 생장한 나로서는 보지 못하던 별이오. 나는 그 별의 이름을 모르오. `두 별'이오. -해가 지평선에서 뚝 떨어지자 대기의 자줏빛은 남빛으로 변하였소. 오직 해가 금시 들어간 자리에만 주홍빛의 여광이 있을 뿐이오. 내 눈앞에서는 남빛 안개가 피어오르는 듯하였소. 앞에 보이는 호수만이 유난히 빛나오. 또 한 떼의 이름 모를 새들이 수면을 스치며 날 저문 것을 놀라는 듯이 어지러이 날아 지나가오. 그들은 소리도 아니 하오. 날개치는 소리도 아니 들리오. 그것들은 사막의 황혼의 허깨비인 것 같소. -나는 자꾸 걷소. 해를 따르던 나는 두 별을 따라서 자꾸 걷소. -별들은 진 해를 따라서 바삐 걷는 것도 같고, 헤매는 나를 어떤 나라로 끄는 것도 같소. -아니 두 별 중에 앞선 별이 한 번 반짝하고는 최후로 한 번 반짝하고는 지평선 밑에 숨어 버리고 마오. 뒤에 남은 외별의 외로움이여! 나는 울고 싶었소. 그러나 나는 하나만 남은 작은 별 외로운 작은 별을 따라서 더 빨리 걸음을 걸었소. 그 한 별마저 넘어가 버리면 나는 어찌하오. -내가 웬일이오. 나는 시인도 아니요, 예술가도 아니오. 나는 정으로 행동한 일은 없다고 믿는 사람이오. 그러나 형! 이 때에 미친 것이 아니요, 내 가슴에는 무엇인지 모를 것을 따를 요샛말로 이른바 동경으로 찼소. -`아아 저 작은 별!' -그것도 지평선에 닿았소. -`아아 저 작은 별. 저것마저 넘어가면 나는 어찌하나.' -인제는 어둡소. 광야의 황혼은 명색뿐이요, 순식간이요, 해지자 신비하다고 할 만한 극히 짧은 동안에 아름다운 황혼을 조금 보이고는 곧 칠과 같은 암흑이오. 호수의 물만이 어디서 은빛을 받았는지 뿌옇게 나만이 유일한 존재다, 나만이 유일한 빛이다 하는 듯이 인제는 수은빛이 아니라 남빛을 발하고 있을 뿐이오. -나는 그 중 빛을 많이 받은, 그 중 환해 보이는 호수면을 찾아 두리번거리며, 그러나 빠른 걸음으로 헤매었소. 그러나 내가 좀더 맑은 호수면을 찾는 동안에 이 광야의 어둠은 더욱더욱 짙어지오. -나는 어떤 조그마한 호숫 가에 펄썩 앉았소. 내 앞에는 짙은 남빛의 수면에 조그마한 거울만한 밝은 데가 있소. 마치 내 눈에서 무슨 빛이 나와서, 아마 정임을 그리워하는 빛이 나와서 그 수면에 반사하는 듯이. 나는 허겁지겁 그 빤한 수면을 들여다보았소. 혹시나 정임의 모양이 거기 나타나지나 아니할까 하고. 세상에는 그러한 기적도 있지 아니한가 하고. -물에는 정임의 얼굴이 어른거리는 것 같았소. 이따금 정임의 눈도 어른거리고 코도 번뜻거리고 입도 번뜻거리는 것 같소. 그러나 수면은 점점 어두워 가서 그 환영조차 더욱 희미해지오. -나는 호수면에 빤하던 한 조각조차 캄캄해지는 것을 보고 숨이 막힐 듯함을 깨달으면서 고개를 들었소. -고개를 들려고 할 때에, 형이여, 이상한 일도 다 있소. 그 수면에 정임의 모양이, 얼굴만 아니라, 그 몸 온통이 그 어깨, 가슴, 팔, 다리까지도, 그 눈과 입까지도, 그 얼굴의 흰 것과 입술이 불그레한 것까지도, 마치 환한 대낮에 실물을 대한 모양으로 소상하게 나타났소. -"정임이!" -하고 나는 소리를 지르며 물로 뛰어들려 하였소. 그러나 형, 그 순간에 정임의 모양은 사라져 버리고 말았소. -나는 이 어둠 속에 어디 정임이가 나를 따라온 것같이 생각했소. 혹시나 정임이가 죽어서 그 몸은 동경의 대학 병원에 벗어 내어던지고 혼이 빠져 나와서 물에 비치었던 것이 아닐까, 나는 가슴이 울렁거림을 진정치 못하면서 호숫 가에서 벌떡 일어나서 어둠 속에 정임을 만져보려는 듯이, 어두워서 눈에 보지는 못하더라도 자꾸 헤매노라면 몸에 부딪히기라도 할 것 같아서 함부로 헤매었소. 그리고는 눈앞에 번뜻거리는 정임의 환영을 팔을 벌려서 안고 소리를 내어서 불렀소. -"정임이, 정임이." -하고 나는 수없이 정임을 부르면서 헤매었소. -그러나 형, 이것도 죄지요. 이것도 하나님께서 금하시는 일이지요. 그러길래 광야에 아주 어둠이 덮이고 새까만 하늘에 별이 총총하게 나고는 영 정임의 헛그림자조차 아니 보이지요. 나는 죄를 피해서 정임을 떠나서 멀리 온 것이니 정임의 헛그림자를 따라다니는 것도 옳지 않지요. -그렇지만 내가 이렇게 혼자서 정임을 생각만 하는 것이야 무슨 죄 될 것이 있을까요. 내가 정임을 만 리나 떠나서 이렇게 헛그림자나 그리며 그리워하는 것이야 무슨 죄가 될까요. 설사 죄가 되기로서니 낸들 이것까지야 어찌하오. 내가 내 혼을 죽여 버리기 전에야 내 힘으로 어찌하오. 설사 죄가 되어서 내가 지옥의 꺼지지 않는 유황불 속에서 영원한 형벌을 받게 되기로서니 그것을 어찌하오. 형, 이것, 이것도 말아야 옳은가요. 정임의 헛그림자까지도 끊어 버려야 옳은가요. -이 때요. 바로 이 때요. 내 앞 수십 보나 될까(캄캄한 밤이라 먼지 가까운지 분명히 알 수 없지마는) 하는 곳에 난데없는 등불 하나가 나서오. 나는 깜짝 놀라서 우뚝 섰소. 이 무인지경, 이 밤중에 갑자기 보이는 등불 그것은 마치 이 세상 같지 아니하였소. -저 등불이 어떤 등불일까, 그 등불이 몇 걸음 가까이 오니, 그 등불 뒤에 사람의 다리가 보이오. -"누구요?" -하는 것은 귀에 익은 조선말이오. 어떻게 이 몽고의 광야에서 조선말을 들을까 하고 나는 등불을 처음 볼 때보다 더욱 놀랐소. -"나는 지나가던 사람이오." -하고 나도 등불을 향하여 마주 걸어갔소. -그 사람은 등불을 들어서 내 얼굴을 비추어 보더니, -"당신 조선 사람이오?" -하고 묻소. -"네, 나는 조선 사람이오. 당신도 음성을 들으니 조선 사람인데, 어떻게 이런 광야에, 아닌 밤중에, 여기 계시단 말이오." -하고 나는 놀라는 표정 그대로 대답하였소. -"나는 이 근방에 사는 사람이니까 여기 오는 것도 있을 일이지마는 당신이야말로 이 아닌 밤중에." -하고 육혈포를 집어넣고, 손을 내밀어서 내게 악수를 구하오. -나는 반갑게 그의 손을 잡았소. 그러나 나는 `죽을 지경에 어떻게 오셨단 말이오.' 하고, 그가 내가 무슨 악의를 가진 흉한이 아닌 줄을 알고 손에 빼어들었던 육혈포로 시기를 잠깐이라도 노린 것을 불쾌하게 생각하였던 것이오. -그도 내 이름도 묻지 아니하고 또 나도 그의 이름을 묻지 아니하고 나는 그에게 끌려서 그가 인도하는 곳으로 갔소. 그 곳이란 것은 아까 등불이 처음 나타나던 곳인 듯한데, 거기서 또 한 번 놀란 것은 어떤 부인이 있는 것이오. 남자는 아라사식 양복을 입었으나 부인은 중국 옷 비슷한 옷을 입었소. 남자는 나를 끌어서 그 부인에게 인사하게 하고, -"이는 내 아내요." -하고 또 그 아내라는 부인에게는, -"이 이는 조선 양반이오. 성함이 뉘시죠?" -하고 그는 나를 바라보오. 나는, -"최석입니다." -하고 바로 대답하였소. -"최석 씨?" -하고 그 남자는 소개하던 것도 잊어버리고 내 얼굴을 들여다보오. -"네, 최석입니다." -"아 ●●학교 교장으로 계신 최석 씨." -하고 그 남자는 더욱 놀라오. -"네, 어떻게 내 이름을 아세요?" -하고 나도 그가 혹시 아는 사람이나 아닌가 하고 등불 빛에 얼굴을 들여다 보았으나 도무지 그 얼굴이 본 기억이 없소. -"최 선생을 내가 압니다. 남 선생한테 말씀을 많이 들었지요. 그런데 남 선생도 돌아가신 지가 벌써 몇 핸가." -하고 감개무량한 듯이 그 아내를 돌아보오. -"십오 년이지요." -하고 곁에 섰던 부인이 말하오. -"벌써 십오 년인가." -하고 그 남자는 나를 보고, -"정임이 잘 자랍니까? 벌써 이십이 넘었지." -하고 또 부인을 돌아보오. -"스물세 살이지." -하고 부인이 확실치 아니한 듯이 대답하오. -"네, 스물세 살입니다. 지금 동경에 있습니다. 병이 나서 입원한 것을 보고 왔는데." -하고 나는 번개같이 정임의 병실과 정임의 호텔 장면 등을 생각하고 가슴이 설렘을 깨달았소. 의외인 곳에서 의외인 사람들을 만나서 정임의 말을 하게 된 것을 기뻐하였소. -"무슨 병입니까. 정임이가 본래 몸이 약해서." -하고 부인이 직접 내게 묻소. -"네. 몸이 좀 약합니다. 병이 좀 나은 것을 보고 떠났습니다마는 염려가 됩니다." -하고 나는 무의식중에 고개를 동경이 있는 방향으로 돌렸소. 마치 고개를 동으로 돌리면 정임이가 보이기나 할 것같이. -"자, 우리 집으로 갑시다." -하고 나는 아직 그의 성명도 모르는 남자는, 그의 아내를 재촉하더니, -"우리가 조선 동포를 만난 것이 십여 년 만이오. 그런데 최 선생, 이것을 좀 보시고 가시지요." -하고 그는 빙그레 웃으면서 나를 서너 걸음 끌고 가오. 거기는 조그마한 무덤이 있고 그 앞에는 석 자 높이나 되는 목패를 세웠는데 그 목패에는 `두 별 무덤'이라는 넉 자를 썼소. -내가 이상한 눈으로 그 무덤과 목패를 보고 있는 것을 보고 그는, -"이게 무슨 무덤인지 아십니까?" -하고 유쾌하게 묻소. -"두 별 무덤이라니 무슨 뜻인가요?" -하고 나도 그의 유쾌한 표정에 전염이 되어서 웃고 물었소. -"이것은 우리 둘의 무덤이외다." -하고 그는 아내의 어깨를 치며 유쾌하게 웃었소. 부인은 부끄러운 듯이 웃고 고개를 숙이오. -도무지 모두 꿈 같고 환영 같소. -"자 갑시다. 자세한 말은 우리 집에 가서 합시다." -하고 서너 걸음 어떤 방향으로 걸어가니 거기는 말을 세 필이나 맨 마차가 있소. 몽고 사람들이 가족을 싣고 수초를 따라 돌아다니는 그러한 마차요. 삿자리로 홍예형의 지붕을 만들고 그 속에 들어가 앉게 되었소. 그의 부인과 나와는 이 지붕 속에 들어앉고 그는 손수 어자대에 앉아서 입으로 쮸쮸쮸쮸 하고 말을 모오. 등불도 꺼 버리고 캄캄한 속으로 달리오. -"불이 있으면 군대에서 의심을 하지요. 도적놈이 엿보지요. 게다가 불이 있으면 도리어 앞이 안 보인단 말요. 쯧쯧쯧쯧!" -하는 소리가 들리오. -대체 이 사람은 무슨 사람인가. 또 이 부인은 무슨 사람인가 하고 나는 어두운 속에서 혼자 생각하였소. 다만 잠시 본 인상으로 보아서 그들은 행복된 부부인 것 같았소. 그들이 무엇 하러 이 아닌 밤중에 광야에 나왔던가. 또 그 이상야릇한 두 별 무덤이란 무엇인가. -나는 불현듯 집을 생각하였소. 내 아내와 어린것들을 생각하였소. 가정과 사회에서 쫓겨난 내가 아니오. 쫓겨난 자의 생각은 언제나 슬픔뿐이었소. -나는 내 아내를 원망치 아니하오. 그는 결코 악한 여자가 아니오. 다만 보통 여자요. 그는 질투 때문에 이성의 힘을 잃은 것이오. 여자가 질투 때문에 이성을 잃는 것이 천직이 아닐까요. 그가 나를 사랑하길래 나를 위해서 질투를 가지는 것이 아니오. -설사 질투가 그로 하여금 칼을 들어 내 가슴을 찌르게 하였다 하더라도 나는 감사한 생각을 가지고 눈을 감을 것이오. 사랑하는 자는 질투한다고 하오. 질투를 누르는 것도 아름다운 일이지마는 질투에 타는 것도 아름다운 일이 아닐까요. -덜크럭덜크럭 하고 차바퀴가 철로길을 넘어가는 소리가 나더니 이윽고 마차는 섰소. -앞에 빨갛게 불이 비치오. -"자 이게 우리 집이오." -하고 그가 마차에서 뛰어내리는 양이 보이오. 내려 보니까 달이 올라오오. 굉장히 큰 달이, 붉은 달이 지평선으로서 넘석하고 올라오오. -달빛에 비추인 바를 보면 네모나게 담 담이라기보다는 성을 둘러쌓은 달 뜨는 곳으로 열린 대문을 들어서서 넓은 마당에 내린 것을 발견하였소. -"아버지!" -"엄마!" -하고 아이들이 뛰어나오오. 말만큼이나 큰 개가 네 놈이나 꼬리를 치고 나오오. 그놈들이 주인집 마차 소리를 알아듣고 짖지 아니한 모양이오. -큰 아이는 계집애로 여남은 살, 작은 아이는 사내로 육칠 세, 모두 중국 옷을 입었소. -우리는 방으로 들어갔소. 방은 아라사식 절반, 중국식 절반으로 세간이 놓여 있고 벽에는 조선 지도와 단군의 초상이 걸려 있소. -그들 부처는 지도와 단군 초상 앞에 허리를 굽혀 배례하오. 나도 무의식적으로 그대로 하였소. -그는 차를 마시며 이렇게 말하오. -"우리는 자식들을 이 흥안령 가까운 무변 광야에서 기르는 것으로 낙을 삼고 있지요. 조선 사람들은 하도 마음이 작아서 걱정이니 이런 호호탕탕한 넓은 벌판에서 길러나면 마음이 좀 커질까 하지요. 또 흥안령 밑에서 지나 중원을 통일한 제왕이 많이 났으니 혹시나 그 정기가 남아 있을까 하지요. 우리 부처의 자손이 몇 대를 두고 퍼지는 동안에는 행여나 마음 큰 인물이 하나 둘 날는지 알겠어요, 하하하하." -하고 그는 제 말을 제가 비웃는 듯이 한바탕 웃고 나서, -"그러나 이건 내 진정이외다. 우리도 이렇게 고국을 떠나 있지마는 그래도 고국 소식이 궁금해서 신문 하나는 늘 보지요. 하지만 어디 시원한 소식이 있어요. 그저 조리복소니가 되어가는 것이 아니면 조그마한 생각을 가지고, 눈곱만한 야심을 가지고, 서 푼어치 안 되는 이상을 가지고 찧고 까불고 싸우고 하는 것밖에 안 보이니 이거 어디 살 수가 있나. 그래서 나는 마음 큰 자손을 낳아서 길러 볼까 하고 이를테면 새 민족을 하나 만들어 볼까 하고, 둘째 단군, 둘째 아브라함이나 하나 낳아 볼까 하고 하하하하앗하." -하고 유쾌하게, 그러나 비통하게 웃소. -나는 저녁을 굶어서 배가 고프고, 밤길을 걸어서 몸이 곤한 것도 잊고 그의 말을 들었소. -부인이 김이 무럭무럭 나는 호떡을 큰 뚝배기에 담고 김치를 작은 뚝배기에 담고, 또 돼지고기 삶은 것을 한 접시 담아다가 탁자 위에 놓소. -건넌방이라고 할 만한 방에서 젖먹이 우는 소리가 들리오. 부인은 삼십이나 되었을까, 남편은 서른댓 되었을 듯한 키가 훨쩍 크고 눈과 코가 크고 손도 큰 건장한 대장부요, 음성이 부드러운 것이 체격에 어울리지 아니하나 그것이 아마 그의 정신 생활이 높은 표겠지요. -"신문에서 최 선생이 학교를 고만두시게 되었다는 말도 보았지요. 그러나 나는 그것이 다 최 선생에게 대한 중상인 줄을 짐작하였고, 또 오늘 이렇게 만나 보니까 더구나 그것이 다 중상인 줄을 알지요." -하고 그는 확신 있는 어조로 말하오. -"고맙습니다." -나는 이렇게밖에 대답할 말이 없었소. -"아, 머, 고맙다고 하실 것도 없지요." -하고 그는 머리를 뒤로 젖히고 한참이나 생각을 하더니 우선 껄껄 한바탕 웃고 나서, -"내가 최 선생이 당하신 경우와 꼭 같은 경우를 당하였거든요. 이를테면 과부 설움은 동무 과부가 안다는 것이지요." -하고 그는 자기의 내력을 말하기 시작하오. -"내 집은 본래 서울입니다. 내가 어렸을 적에 내 선친께서 시국에 대해서 불평을 품고 당신 삼 형제의 가족을 끌고 재산을 모두 팔아 가지고 간도에를 건너오셨지요. 간도에 맨 먼저 ●●학교를 세운 이가 내 선친이지요." -여기까지 하는 말을 듣고 나는 그가 누구인지를 알았소. 그는 R씨라고 간도 개척자요, 간도에 조선인 문화를 세운 이로 유명한 이의 아들인 것이 분명하오. 나는 그의 이름이 누구인지도 물어 볼 것 없이 알았소. -"아 그러십니까. 네, 그러세요." -하고 나는 감탄하였소. -"네, 내 선친을 혹 아실는지요. 선친의 말씀이 노 그러신단 말씀야요. 조선 사람은 속이 좁아서 못쓴다고 <정감록>에도 그런 말이 있다고 조선은 산이 많고 들이 좁아서 사람의 마음이 작아서 큰일하기가 어렵고, 큰사람이 나기가 어렵다고. 웬만치 큰사람이 나면 서로 시기해서 큰일할 새가 없이 한다고 그렇게 <정감록>에도 있다더군요. 그래서 선친께서 자손에게나 희망을 붙이고 간도로 오신 모양이지요. 거기서 자라났다는 것이 내 꼴입니다마는, 아하하. -내가 자라서 아버지께서 세우신 K여학교의 교사로 있을 때 일입니다. 지금 내 아내는 그 때 학생으로 있었구. 그러자 내 아버지께서 재산이 다 없어져서 학교를 독담하실 수가 없고, 또 얼마 아니해서 아버지께서 돌아가시고 보니 학교에는 세력 다툼이 생겨서 아버지의 후계자로 추정되는 나를 배척하게 되었단 말씀이오. 거기서 나를 배척하는 자료를 삼은 것이 나와 지금 내 아내가 된 학생의 관계란 것인데 이것은 전연 무근지설인 것은 말할 것도 없소. 나도 총각이요, 그는 처녀니까 혼인을 하자면 못 할 것도 없지마는 그것이 사제 관계라면 중대 문제거든. 그래서 나는 단연히 사직을 하고 내가 사직한 것은 제 죄를 승인한 것이라 하여서 그 학생 지금 내 아내도 출교 처분을 당한 것이오. 그러고 보니, 그 여자의 아버지 내 장인이지요 그 여자의 아버지는 나를 죽일 놈같이 원망을 하고 그 딸을 죽일 년이라고 감금을 하고 어쨌으나 조그마한 간도 사회에서 큰 파문을 일으켰단 말이오. -이 문제를 더 크게 만든 것은 지금 내 아내인, 그 딸의 자백이오. 무어라고 했는고 하니, 나는 그 사람을 사랑하오, 그 사람한테가 아니면 시집을 안 가오, 하고 뻗댔단 말요. -나는 이 여자가 이렇게 나를 생각하는가 할 때 의분심이 나서 나는 어떻게 해서든지 이 여자와 혼인하리라고 결심을 하였소. 나는 마침내 정식으로 K장로라는 내 장인에게 청혼을 하였으나 단박에 거절을 당하고 말았지요. K장로는 그 딸을 간도에 두는 것이 옳지 않다고 해서 서울로 보내기로 하였단 말을 들었소. 그래서 나는 최후의 결심으로 그 여자 지금 내 아내 된 사람을 데리고 간도에서 도망하였소. 하하하하. 밤중에 단둘이서. -지금 같으면야 사제간에 결혼을 하기로 그리 큰 문제가 될 것이 없지마는 그 때에 어디 그랬나요. 사제간에 혼인이란 것은 부녀간에 혼인한다는 것과 같이 생각하였지요. 더구나 그 때 간도 사회에는 청교도적 사상과 열렬한 애국심이 있어서 도덕 표준이 여간 높지 아니하였지요. 그런 시대니까 내가 내 제자인 여학생을 데리고 달아난다는 것은 살인 강도를 하는 이상으로 무서운 일이었지요. 지금도 나는 그렇게 생각합니다마는. -그래서 우리 두 사람은 우리 두 사람이라는 것보다도 내 생각에는 어찌하였으나 나를 위해서 제 목숨을 버리려는 그에게 사실 나도 마음 속으로는 그를 사랑하였지요. 다만 사제간이니까 영원히 달할 수는 없는 사랑이라고 단념하였을 뿐이지요. 그러니까 비록 부처 생활은 못 하더라도 내가 그의 사랑을 안다는 것과 나도 그를 이만큼 사랑한다는 것만을 보여 주자는 것이지요. -때는 마침 가을이지마는, 몸에 지닌 돈도 얼마 없고 천신만고로 길림까지를 나와 가지고는 배를 타고 송화강을 내려서 하얼빈에 가 가지고 거 기서 간신히 치타까지의 여비와 여행권을 얻어 가지고 차를 타고 떠나지 않았어요. 그것이 바로 십여 년 전 오늘이란 말이오." -이 때에 부인이 옥수수로 만든 국수와 감자 삶은 것을 가지고 들어오오. -나는 R의 말을 듣던 끝이라 유심히 부인을 바라보았소. 그는 중키나 되는 둥근 얼굴이 혈색이 좋고 통통하여 미인이라기보다는 씩씩한 여자요. 그런 중에 조선 여자만이 가지는 아담하고 점잖은 맛이 있소. -"앉으시지요. 지금 두 분께서 처음 사랑하시던 말씀을 듣고 있습니다." -하고 나는 부인에게 교의를 권하였소. -"아이, 그런 말씀은 왜 하시오." -하고 부인은 갑자기 십 년이나 어려지는 모양으로 수삽한 빛을 보이고 고개를 숙이고 달아나오. -"그래서요. 그래 오늘이 기념일이외다그려." -하고 나도 웃었소. -"그렇지요. 우리는 해마다 오늘이 오면 우리 무덤에 성묘를 가서 하룻밤을 새우지요. 오늘은 손님이 오셔서 중간에 돌아왔지만, 하하하하." -하고 그는 유쾌하게 웃소. -"성묘라니?" -하고 나는 물었소. -"아까 보신 두 별 무덤 말이오. 그것이 우리 내외의 무덤이지요. 하하하하." -"…………." -나는 영문을 모르고 가만히 앉았소. -"내 이야기를 들으시지요. 그래 둘이서 차를 타고 오지 않았겠어요. 물론 여전히 선생님과 제자지요. 그렇지만 워낙 여러 날 단둘이서 같이 고생을 하고 여행을 했으니 사랑의 불길이 탈 것이야 물론 아니겠어요. 다만 사제라는 굳은 의리가 그것을 겉에 나오지 못하도록 누른 것이지요. ……그런데 꼭 오늘같이 좋은 날인데 여기는 대개 일기가 일정합니다. 좀체로 비가 오는 일도 없고 흐리는 날도 없지요. 헌데 F역에를 오니까 참 석양 경치가 좋단 말이오. 그 때에 불현듯, 에라 여기서 내려서 이 석양 속에 저 호숫 가에 둘이서 헤매다가 깨끗이 사제의 몸으로 이 깨끗한 광야에 묻혀 버리자 하는 생각이 나겠지요. 그래 그 때 말을 내 아내 그 때에는 아직 아내가 아니지요 내 아내에게 그런 말을 하였더니 참 좋다고 박장을 하고 내 어깨에 매달리는구려. 그래서 우리 둘은 차가 거의 떠날 임박해서 차에서 뛰어내렸지요." -하고 그는 그때 광경을 눈앞에 그리는 모양으로 말을 끊고 우두커니 허공을 바라보오. 그러나 그의 입 언저리에는 유쾌한 회고에서 나오는 웃음이었소. -"이야기 다 끝났어요?" -하고 부인이 크바스라는 청량 음료를 들고 들어오오. -"아니오. 이제부터가 정통이니 당신도 거기 앉으시오. 지금 차에서 내린 데까지 왔는데 당신도 앉아서 한 파트를 맡으시오." -하고 R는 부인의 손을 잡아서 자리에 앉히오. 부인도 웃으면서 앉소. -"최 선생 처지가 꼭 나와 같단 말요. 정임의 처지가 당신과 같고." -하고 그는 말을 계속하오. -"그래 차에서 내려서 나는 이 양반하고 물을 찾아 헤매었지요. 아따, 석양이 어떻게 좋은지 이 양반은 박장을 하고 노래를 부르고 우리 둘은 마치 유쾌하게 산보하는 사람 같았지요." -"참 좋았어요. 그 때에는 참 좋았어요. 그 석양에 비친 광야와 호수라는 건 어떻게 좋은지 그 수은 같은 물 속에 텀벙 뛰어들고 싶었어요. 그 후엔 해마다 보아도 그만 못해." -하고 부인이 참견을 하오. -아이들은 다 자는 모양이오. -"그래 지향없이 헤매는데 해는 뉘엿뉘엿 넘어가구, 어스름은 기어들고 그 때 마침 하늘에는 별 둘이 나타났단 말이야. 그것을 이 여학생이 먼저 보고서 갑자기 추연해지면서 선생님 저 별 보셔요, 앞선 큰 별은 선생님이 구 따라가는 작은 별은 저야요, 하겠지요. 그 말이, 또 그 태도가 어떻게 가련한지. 그래서 나는 하늘을 바라보니깐 과연 별 두 개가 지는 해를 따르는 듯이 따라간다 말요. 말을 듣고 보니 과연 우리 신세와도 같지 않아요? -그리고는 이 사람이 또 이럽니다그려 `선생님, 앞선 큰 별은 아무리 따라도 저 작은 별은 영원히 따라잡지 못하겠지요. 영원히 영원히 따라가다가 따라가다가 못 해서 마침내는 저 작은 별은 죽어서 검은 재가 되고 말겠지요? 저 작은 별이 제 신세와 어쩌면 그리 같을까.' 하고 한탄을 하겠지요. 그 때에 한탄을 하고 눈물을 흘리고 섰는 어린 처녀의 석양빛에 비췬 모양을 상상해 보세요, 하하하하. 그 때에는 당신도 미인이었소. 하하하하." -하고 내외가 유쾌하게 웃는 것을 보니 나는 더욱 적막하여짐을 깨달았소. 어쩌면 그 석양, 그 두 별이 이들에게와 내게 꼭 같은 인상을 주었을까 하니 참으로 이상하다 하였소. -"그래 인제." -하고 R는 다시 이야기를 계속하오. -"그래 인제 둘이서 그야말로 감개무량하게 두 별을 바라보며 걸었지요. 그러다가 해가 넘어가고 앞선 큰 별이 넘어가고 그리고는 혼자서 깜빡깜빡하고 가던 작은 별이 넘어가니 우리는 그만 땅에 주저앉았소. 거기가 어딘고 하니 그 두 별 무덤이 있는 곳이지요. `선생님 저를 여기다가 파묻어 주시고 가셔요. 선생님 손수 저를 여기다가 묻어 놓고 가 주셔요.' 하고 이 사람이 조르지요." -하는 것을 부인은, -"내가 언제." -하고 남편을 흘겨보오. -"그럼 무에라고 했소? 어디 본인이 한 번 옮겨 보오." -하고 R가 말을 끊소. -"간도를 떠난 지가 한 달이 되도록 단둘이 다녀도 요만큼도 귀해 주는 점이 안 뵈니 그럼 파묻어 달라고 안 해요?" -하고 부인은 웃소. -"흥흥." -하고 R는 부인의 말에 웃고 나서, -"그 자리에 묻어 달란 말을 들으니까, 어떻게 측은한지, 그럼 나도 함께 묻히자고 그랬지요. 나는 그 때에 참말 그 자리에 함께 묻히고 싶었어요. 그래서 나는 손으로 곧 구덩이를 팠지요. 떡가루 같은 모래판이니까 파기는 힘이 아니 들겠지요. 이이도 물끄러미 내가 땅을 파는 것을 보고 섰더니만 자기도 파기를 시작하겠지요." -하고 내외가 다 웃소. -"그래 순식간에……." -하고 R는 이야기를 계속하오. -"순식간에 둘이 드러누울 만한 구덩이를 아마 두 자 깊이나 되게, 네모나게 파 놓고는 내가 들어가 누워 보고 그러고는 또 파고 하여 아주 편안한 구덩이를 파고 나서는 나는 아주 세상을 하직할 셈으로 사방을 둘러보 고 사방이래야 컴컴한 어둠밖에 없지만 사방을 둘러보고, 이를테면 세상과 작별을 하고 드러누웠지요. 지금 이렇게 회고담을 할 때에는 우습기도 하지마는 그 때에는 참으로 종교적이라 할 만한 엄숙이었소. 그때 우리 둘의 처지는 앞도 절벽, 뒤도 절벽이어서 죽는 길밖에 없었지요. 또 그뿐 아니라 인생의 가장 깨끗하고 가장 사랑의 맑은 정이 타고 가장 기쁘고도 슬프고도 이를테면 모든 감정이 절정에 달하고, 그러한 순간에 목숨을 끊어 버리는 것이 가장 좋은 일이요, 가장 마땅한 일같이 생각하였지요. 광야에 아름다운 황혼이 순간에 스러지는 모양으로 우리 두 생명의 아름다움도 순간에 스러지자는 우리는 철학자도 시인도 아니지마는 우리들의 환경이 우리 둘에게 그러한 생각을 넣어 준 것이지요. -그래서 내가 가만히 드러누워 있는 것을 저이가 물끄러미 보고 있더니 자기도 내 곁에 들어와 눕겠지요. 그런 뒤에는 황혼에 남은 빛도 다 스러지고 아주 캄캄한 암흑 세계가 되어 버렸지요. 하늘에 어떻게 그렇게 별이 많은지. 가만히 하늘을 바라보노라면 참 별이 많아요. 우주란 참 커요. 그런데 이 끝없이 큰 우주에 한없이 많은 별들이 다 제자리를 지키고 제 길을 지켜서 서로 부딪지도 아니하고 끝없이 긴 시간에 질서를 유지하고 있는 것을 보면 우주에는 어떤 주재하는 뜻, 섭리하는 뜻이 있다 하는 생각이 나겠지요. 나도 예수교인의 가정에서 자라났지마는 이 때처럼 하나님이라 할까 이름은 무엇이라고 하든지 간에 우주의 섭리자의 존재를 강렬하게 의식한 일은 없었지요. -그렇지만 `사람의 마음에 비기면 저까짓 별들이 다 무엇이오?' 하고 그때 겨우 열여덟 살밖에 안 된 이이가 내 귀에 입을 대고 말할 때에는 나도 참으로 놀랐습니다. 나이는 나보다 오륙 년 상관밖에 안 되지마는 이십 세 내외에 오륙 년 상관이 적은 것인가요? 게다가 나는 선생이요 자기는 학생이니까 어린애로만 알았던 것이 그런 말을 하니 놀랍지 않아요? 어째서 사람의 마음이 하늘보다도 더 이상할까 하고 내가 물으니까, 그 대답이 `나는 무엇이라고 설명할 수가 없지마는 내 마음 속에 일어나는 것이 하늘이나 땅에 일어나는 모든 것보다도 더 아름답고 더 알 수 없고 더 뜨겁고 그런 것 같아요.' 그러겠지요. 생명이란 모든 아름다운 것 중에 가장 아름다운 것이라는 것을 나는 깨달았어요. 그 말에, `그렇다 하면 이 아름답고 신비한 생명을 내는 우주는 더 아름다운 것이 아니오?' 하고 내가 반문하니까, 당신(부인을 향하여) 말이, `전 모르겠어요, 어쨌으나 전 행복합니다. 저는 이 행복을 깨뜨리고 싶지 않습니다. 놓쳐 버리고 싶지 않습니다. 이 행복 선생님 곁에 있는 이 행복을 꽉 안고 죽고 싶어요.' 그러지 않았소?" -"누가 그랬어요? 아이 난 다 잊어버렸어요." -하고 부인은 차를 따르오. R는 인제는 하하하 하는 웃음조차 잊어버리고, 부인에게 농담을 붙이는 것조차 잊어버리고, 그야말로 종교적 엄숙 그대로말을 이어, -"`자 저는 약을 먹어요.' 하고 손을 입으로 가져가는 동작이 감행되겠지요. 약이란 것은 하얼빈에서 준비한 아편이지요. 하얼빈서 치타까지 가는 동안에 흥안령이나 어느 삼림지대나 어디서나 죽을 자리를 찾자고 준비한 것이니까. 나는 입 근처로 가는 그의 손을 붙들었어요. 붙들면서 나는 `잠깐만 기다리오. 오늘 밤 안으로 그 약을 먹으면 고만이 아니오? 이 행복된 순간을 잠깐이라도 늘립시다. 달 올라올 때까지만.' 나는 이렇게 말했지요. `선생님도 행복되셔요? 선생님은 불행이시지. 저 때문에 불행이시지. 저만 이곳에 묻어 주시구는 선생님은 세상에 돌아가 사셔요, 오래오래 사셔요, 일 많이 하고 사셔요.' 하고 울지 않겠어요. 나는 그 때에 내 아내가 하던 말을 한 마디도 잊지 아니합니다. 그 말을 듣던 때의 내 인상은 아마 일생 두고 잊히지 아니하겠지요. -나는 자백합니다. 그 순간에 나는 처음으로 내 아내를 안고 키스를 하였지요. 내 속에 눌리고 눌리고 쌓이고 하였던 열정이 그만 일시에 폭발되었던 것이오. 아아 이것이 최초의 것이요, 동시에 최후의 것이로구나 할 때에 내 눈에서는 끓는 듯한 눈물이 흘렀소이다. 두 사람의 심장이 뛰는 소리, 두 사람의 풀무 불길 같은 숨소리. -이윽고 달이 떠올라 왔습니다. 가이없는 벌판이니까 달이 뜨니까 갑자기 천지가 환해지고 우리 둘이 손으로 파서 쌓아 놓은 흙무더기가 이 산 없는 세상에 산이나 되는 것같이 조그마한 검은 그림자를 지고 있겠지요. `자 우리 달빛을 띠고 좀 돌아다닐까.' 하고 나는 아내를 안아 일으켰지요. 내 팔에 안겨서 고개를 뒤로 젖힌 내 아내의 얼굴이 달빛에 비친 양을 나는 잘 기억합니다. 실신한 듯한, 만족한 듯한, 그리고도 절망한 듯한 그 표정을 무엇으로 그릴지 모릅니다. 그림도 그릴 줄 모르고 조각도 할 줄 모르고 글도 쓸 줄 모르는 내가 그것을 어떻게 그립니까. 그저 가슴 속에 품고 이렇게 오늘의 내 아내를 바라볼 뿐이지요. -나는 내 아내를 팔에 걸고 네, 걸었다고 하는 것이 가장 합당하지 요 이렇게 팔에다 걸고 달빛을 받은 황량한 벌판, 아무리 하여도 환하게 밝아지지는 아니하는 벌판을 헤매었습니다. 이따금 내 아내가, `어서 죽고 싶어요, 전 죽고만 싶어요.' 하는 말에는 대답도 아니 하고. 죽고 싶다는 그 말은 물론 진정일 것이지요. 아무리 맑은 일기라 하더라도 오후가 되면 흐려지는 법이니까 오래 살아가는 동안에 늘 한 모양으로 이 순간같이 깨끗하고 뜨거운 기분으로 갈 수는 없지 않아요? 불쾌한 일도 생기고, 보기 흉한 일도 생길는지 모르거든. 그러니까 이 완전한 깨끗과 완전한 사랑과 완전한 행복 속에 죽어 버리자는 뜻을 나는 잘 알지요. 더구나 우리들이 살아 남는대야 앞길이 기구하지 평탄할 리는 없지 아니해요? 그래서 나는 `죽지, 우리 이 달밤에 실컷 돌아다니다가, 더 돌아다니기가 싫거든 그 구덩에 돌아가서 약을 먹읍시다.' 이렇게 말하고 우리 둘은 헤맸지요. 낮에 보면 어디까지나 평평한 벌판인 것만 같지마는 달밤에 보면 이 사막에도 아직 채 스러지지 아니한 산의 형적이 남아 있어서 군데군데 거뭇거뭇한 그림자가 있겠지요. 그 그림자 속에는 걸어 들어가면 어떤 데는 우리 허리만큼 그림자에 가리우고 어떤 데는 우리 둘을 다 가리워 버리는 데도 있단 말야요. 죽음의 그림자라는 생각이 나면 그래도 몸에 소름이 끼쳐요. -차차 달이 높아지고 추위가 심해져서 바람결이 지나갈 때에는 눈에서 눈물이 날 지경이지요. 원체 대기 중에 수분이 적으니까 서리도 많지 않지마는, 그래도 대기 중에 있는 수분은 다 얼어 버려서 얼음가루가 되었는 게지요. 공중에는 반짝반짝하는 수정가루 같은 것이 보입니다. 낮에는 땀이 흐르리만큼 덥던 사막도 밤이 되면 이렇게 기온이 내려가지요. 춥다고 생각은 하면서도 춥다는 말은 아니 하고 우리는 어떤 때에는 달을 따라서, 어떤 때에는 달을 등지고, 어떤 때에는 호수에 비친 달을 굽어보고, 이 모양으로 한없이 말도 없이 돌아다녔지요. 이 세상 생명의 마지막 순간을 힘껏 의식하려는 듯이. -마침내 `나는 더 못 걸어요.' 하고 이이가 내 어깨에 매달려 버리고 말았지요." -하고 R가 부인을 돌아보니 부인은 편물하던 손을 쉬고, -"다리가 아픈 줄은 모르겠는데 다리가 이리 뉘구 저리 뉘구 해서 걸음을 걸을 수가 없었어요. 춥기는 하구." -하고 소리를 내어서 웃소. -"그럴 만도 하지." -하고 R는 긴장한 표정을 약간 풀고 앉은 자세를 잠깐 고치며, -"그 후에 그 날 밤 돌아다닌 곳을 더듬어 보니까, 자세히는 알 수 없지마는 삼십 리는 더 되는 것 같거든. 다리가 아프지 아니할 리가 있나." -하고 차를 한 모금 마시고 나서 말을 계속하오. -"그래서 나는 내 외투를 벗어서, 이이(부인)를 싸서 어린애 안듯이 안고 걸었지요. 외투로 쌌으니 자기도 춥지 않구, 나는 또 무거운 짐을 안았으니 땀이 날 지경이구, 그뿐 아니라 내가 제게 주는 최후의 서비스라 하니 기쁘고, 말하자면 일거 삼득이지요. 하하하하. 지난 일이니 웃지마는 그 때 사정을 생각해 보세요, 어떠했겠나." -하고 R는 약간 처참한 빛을 띠면서, -"그러니 그 구덩이를 어디 찾을 수가 있나. 얼마를 찾아 돌아다니다가 아무 데서나 죽을 생각도 해 보았지마는 몸뚱이를 그냥 벌판에 내놓고 죽고 싶지는 아니하고 또 그 구덩이가 우리 두 사람에게 특별한 의미가 있는 것 같아서 기어코 그것을 찾아 내고야 말았지요. 그 때는 벌써 새벽이 가까웠던 모양이오. 열 시나 넘어서 뜬 하현달이 낮이 기울었으니 그렇지 않겠어요. 그 구덩이에 와서 우리는 한 번 더 하늘과 달과 별과, 그리고 마음 속에 떠오른 사람들과 하직하고 약 먹을 준비를 했지요. -약을 검은 고약과 같은 아편을 맛이 쓰다는 아편을 물도 없이 먹으려 들었지요. -우리 둘은 아까 모양으로 가지런히 누워서 하늘을 바라보았는데 달이 밝으니까 보이던 별들 중에 숨은 별이 많고 또 별들의 위치 우리에게 낯익은 북두칠성 자리도 변했을 것 아니야요. 이상한 생각이 나요. 우리가 벌판으로 헤매는 동안에 천지가 모두 변한 것 같아요. 사실 변하였지요. 그 변한 것이 우스워서 나는 껄껄 웃었지요. 워낙 내가 웃음이 좀 헤프지만 이 때처럼 헤프게 실컷 웃어 본 일은 없습니다. -왜 웃느냐고 아내가 좀 성을 낸 듯이 묻기로, `천지와 인생이 변하는 것이 우스워서 웃었소.' 그랬지요. 그랬더니, `천지와 인생은 변할는지 몰라도 내 마음은 안 변해요!' 하고 소리를 지르겠지요. 퍽 분개했던 모양이야." -하고 R는 그 아내를 보오. -"그럼 분개 안 해요? 남은 죽을 결심을 하고 발발 떨구 있는데 곁에서 껄껄거리고 웃으니, 어째 분하지가 않아요. 나는 분해서 달아나려고 했어요." -하고 부인은 아직도 분함이 남은 것같이 말하오. -"그래 달아나지 않았소?" -하고 R는 부인이 벌떡 일어나서 비틀거리고 달아나는 흉내를 팔과 다리로 내고 나서, -"이래서 죽는 시간이 지체가 되었지요. 그래서 내가 빌고 달래고 해서 가까스로 안정을 시키고 나니 손에 쥐었던 아편이 땀에 푹 젖었겠지요. 내가 웃은 것은 죽기 전 한 번 천지와 인생을 웃어 버린 것인데 그렇게 야단이니…… 하하하하." -R는 식은 차를 한 모금 더 마시며, -"참 목도 마르기도 하더니. 입에는 침 한 방울 없고. 그러나 못물을 먹을 생각도 없고. 나중에는 말을 하려고 해도 혀가 안 돌아가겠지요. -이러는 동안에 달빛이 희미해지길래 웬일인가 하고 고개를 번쩍 들었더니 해가 떠오릅니다그려. 어떻게 붉고 둥글고 씩씩한지. `저 해 보오.' 하고 나는 기계적으로 벌떡 일어나서 구덩이에서 뛰어나왔지요." -하고 빙그레 웃소. R의 빙그레 웃는 양이 참 좋았소. -"내가 뛰어나오는 것을 보고 이이도 뿌시시 일어났지요. 그 해! 그 해의 새 빛을 받는 하늘과 땅의 빛! 나는 그것을 형용할 말을 가지지 못합니다. 다만 힘껏 소리치고 싶고 기운껏 달음박질치고 싶은 생각이 날 뿐이어요. -`우리 삽시다, 죽지 말고 삽시다, 살아서 새 세상을 하나 만들어 봅시다.' 이렇게 말하였지요. 하니까 이이가 처음에는 깜짝 놀라는 것 같아요. 그러나 마침내 아내도 죽을 뜻을 변하였지요. 그래서 남 선생을 청하여다가 그 말씀을 여쭈었더니 남 선생께서 고개를 끄덕끄덕하시고 우리 둘의 혼인 주례를 하셨지요. 그 후 십여 년에 우리는 밭 갈고 아이 기르고 이런 생활을 하고 있는데 언제나 여기 새 민족이 생기고 누가 새 단군이 될는지요. 하하하하, 아하하하. 피곤하시겠습니다. 이야기가 너무 길어서." -하고 R는 말을 끊소. -나는 R부처가 만류하는 것도 다 뿌리치고 여관으로 돌아왔소. R와 함께 달빛 속, 개 짖는 소리 속을 지나서 아라사 사람의 조그마한 여관으로 돌아왔소. 여관 주인도 R를 아는 모양이어서 반갑게 인사하고 또 내게 대한 부탁도 하는 모양인가 보오. -R는 내 방에 올라와서 내일 하루 지날 일도 이야기하고 또 남 선생과 정임에게 관한 이야기도 하였으나, 나는 그가 무슨 이야기를 하는지 잘 들을 만한 마음의 여유도 없어서 마음 없는 대답을 할 뿐이었소. -R가 돌아간 뒤에 나는 옷도 벗지 아니하고 침대에 드러누웠소. 페치카를 때기는 한 모양이나 방이 써늘하기 그지없소. -`그 두 별 무덤이 정말 R와 그 여학생과 두 사람이 영원히 달치 못할 꿈을 안은 채로 깨끗하게 죽어서 묻힌 무덤이었으면 얼마나 좋을까. 만일 그렇다 하면 내일 한 번 더 가서 보토라도 하고 오련마는.' -하고 나는 R부처의 생활에 대하여 일종의 불만과 환멸을 느꼈소. -그리고 내가 정임을 여기나 시베리아나 어떤 곳으로 불러다가 만일 R와 같은 흉내를 낸다 하면, 하고 생각해 보고는 나는 진저리를 쳤소. 나는 내머리 속에 다시 그러한 생각이 한 조각이라도 들어올 것을 두려워하였소. -급행을 기다리자면 또 사흘을 기다리지 아니하면 아니 되기로 나는 이튿날 새벽에 떠나는 구간차를 타고 F역을 떠나 버렸소. R에게는 고맙다는 편지 한 장만을 써 놓고. 나는 R를 더 보기를 원치 아니하였소. 그것은 반드시 R를 죄인으로 보아서 그런 것은 아니오마는 그저 나는 다시 R를 대면하기를 원치 아니한 것이오. -나는 차가 R의 집 앞을 지날 때에도 R의 집에 대하여서는 외면하였소. -이 모양으로 나는 흥안령을 넘고, 하일라르의 솔밭을 지나서 마침내 이 곳에 온 것이오. -형! 나는 인제는 이 편지를 끝내오. 더 쓸 말도 없거니와 인제는 이것을 쓰기도 싫증이 났소. -이 편지를 쓰기 시작할 때에는 바이칼에 물결이 흉용하더니 이 편지를 끝내는 지금에는 가의 가까운 물에는 얼음이 얼었소. 그리고 저 멀리 푸른 물이 늠실늠실 하얗게 눈 덮인 산 빛과 어울리게 되었소. -사흘이나 이어서 오던 눈이 밤새에 개고 오늘 아침에는 칼날 같은 바람이 눈을 날리고 있소. -나는 이 얼음 위로 걸어서 저 푸른 물 있는 곳까지 가고 싶은 유혹을 금할 수 없소. 더구나 이 편지도 다 쓰고 나니, 인제는 내가 이 세상에서 할 마지막 일까지 다 한 것 같소. -내가 이 앞에 어디로 가서 어찌 될는지는 나도 모르지마는 희미한 소원을 말하면 눈 덮인 시베리아의 인적 없는 삼림 지대로 한정 없이 헤매다가 기운 진하는 곳에서 이 목숨을 마치고 싶소. -최석 군은 `끝'이라는 글자를 썼다가 지워 버리고 딴 종이에다가 이런 말을 썼다 -다 쓰고 나니 이런 편지도 다 부질없는 일이오. 내가 이런 말을 한대야 세상이 믿어 줄 리도 없지 않소. 말이란 소용 없는 것이오. 내가 아무리 내 아내에게 말을 했어도 아니 믿었거든 내 아내도 내 말을 아니 믿었거든 하물며 세상이 내 말을 믿을 리가 있소. 믿지 아니할 뿐 아니라 내 말 중에서 자기네 목적에 필요한 부분만은 믿고, 또 자기네 목적에 필요한 부분은 마음대로 고치고 뒤집고 보태고 할 것이니까, 나는 이 편지를 쓴 것이 한 무익하고 어리석은 일인 줄을 깨달았소. -형이야 이 편지를 아니 보기로니 나를 안 믿겠소? 그 중에는 혹 형이 지금까지 모르던 자료도 없지 아니하니, 형만 혼자 보시고 형만 혼자 내 사정을 알아 주시면 다행이겠소. 세상에 한 믿는 친구를 가지는 것이 저마다 하는 일이겠소? -나는 이 쓸데없는 편지를 몇 번이나 불살라 버리려고 하였으나 그래도 거기도 일종의 애착심이 생기고 미련이 생기는구려. 형 한 분이라도 보여 드리고 싶은 마음이 생기는구려. 내가 S형무소에 입감해 있을 적에 형무소 벽에 죄수가 손톱으로 성명을 새긴 것을 보았소. 뒤에 물었더니 그것은 흔히 사형수가 하는 짓이라고. 사형수가 교수대에 끌려 나가기 바로 전에 흔히 손톱으로 담벼락이나 마룻바닥에 제 이름을 새기는 일이 있다고 하는 말을 들었소. 내가 형에게 쓰는 이 편지도 그 심리와 비슷한 것일까요? -형! 나는 보통 사람보다는, 정보다는 지로, 상식보다는 이론으로, 이해보다는 의리로 살아 왔다고 자신하오. 이를테면 논리학적으로 윤리학적으로 살아온 것이라고 할까. 나는 엄격한 교사요, 교장이었소. 내게는 의지력과 이지력밖에 없는 것 같았소. 그러한 생활을 수십 년 해 오지 아니하였소? 나는 이 앞에 몇십 년을 더 살더라도 내 이 성격이나 생활 태도에는 변함이 없으리라고 자신하였소. 불혹지년이 지났으니 그렇게 생각하였을 것이 아니오? -그런데 형! 참 이상한 일이 있소. 그것은 내가 지금까지 처해 있던 환경을벗어나서 호호 탕탕하게 넓은 세계에 알몸을 내어던짐을 당하니 내 마음 속에는 무서운 여러 가지 변화가 일어나는구려. 나는 이 말도 형에게 아니 하려고 생각하였소. 노여워하지 마시오, 내게까지도 숨기느냐고. 그런 것이 아니오, 형은커녕 나 자신에게까지도 숨기려고 하였던 것이오. 혹시 그런 기다리지 아니 하였던 원, 그런 생각이 내 마음의 하늘에 일어나리라고 상상도 아니하였던, 그런 생각이 일어날 때에는 나는 스스로 놀라고 스스로 슬퍼하였소. 그래서 스스로 숨기기로 하였소. -그 숨긴다는 것이 무엇이냐 하면 그것은 열정이요, 정의 불길이요, 정의 광풍이요, 정의 물결이오. 만일 내 의식이 세계를 평화로운 풀 있고, 꽃 있고, 나무 있는 벌판이라고 하면 거기 난데없는 미친 짐승들이 불을 뿜고 소리를 지르고 싸우고, 영각을 하고 날쳐서, 이 동산의 평화의 화초를 다 짓밟아 버리고 마는 그러한 모양과 같소. -형! 그 이상야릇한 짐승들이 여태껏, 사십 년 간을 어느 구석에 숨어 있었소? 그러다가 인제 뛰어나와 각각 제 권리를 주장하오? -지금 내 가슴 속은 끓소. 내 몸은 바짝 여위었소. 그것은 생리학적으로나 심리학적으로나 타는 것이요, 연소하는 것이오. 그래서 다만 내 몸의 지방만이 타는 것이 아니라, 골수까지 타고, 몸이 탈 뿐이 아니라 생명 그 물건이 타고 있는 것이오. 그러면 어찌할까. -지위, 명성, 습관, 시대 사조 등등으로 일생에 눌리고 눌렸던 내 자아의 일부분이 혁명을 일으킨 것이오? 한 번도 자유로 권세를 부려 보지 못한 본능과 감정들이 내 생명이 끝나기 전에 한 번 날뛰어 보려는 것이오. 이것이 선이오? 악이오? -그들은 내가 지금까지 옳다고 여기고 신성하다고 여기던 모든 권위를 모조리 둘러엎으려고 드오. 그러나 형! 나는 도저히 이 혁명을 용인할 수가 없소. 나는 죽기까지 버티기로 결정을 하였소. 내 속에서 두 세력이 싸우다가 싸우다가 승부가 결정이 못 된다면 나는 승부의 결정을 기다리지 아니하고 살기를 그만두려오. -나는 눈 덮인 삼림 속으로 들어가려오. 나는 V라는 대삼림 지대가 어디인 줄도 알고 거기를 가려면 어느 정거장에서 내릴 것도 다 알아 놓았소. -만일 단순히 죽는다 하면 구태여 멀리 찾아갈 필요도 없지마는 그래도 나 혼자로는 내 사상과 감정의 청산을 하고 싶소. 살 수 있는 날까지 세상을 떠난 곳에서 살다가 완전한 해결을 얻는 날 나는 혹은 승리의, 혹은 패배의 종막을 닫칠 것이오. 만일 해결이 안 되면 안 되는 대로 그치면 그만이지요. -나는 이 붓을 놓기 전에 어젯밤에 꾼 꿈 이야기 하나는 하려오. 꿈이 하도 수상해서 마치 내 전도에 대한 신의 계시와도 같기로 하는 말이오. 그 꿈은 이러하였소. -내가 꽁이깨(꼬이까라는 아라사말로 침대라는 말이 조선 동포의 입으로 변한 말이오.) 짐을 지고 삽을 메고 눈이 덮인 삼림 속을 혼자 걸었소. 이 꽁이깨 짐이란 것은 금점꾼들이 그 여행 중에 소용품, 마른 빵, 소금, 내복 등속을 침대 매트리스에 넣어서 지고 다니는 것이오. 이 짐하고 삽 한 개, 도끼 한 개, 그것이 시베리아로 금을 찾아 헤매는 조선 동포들의 행색이오. 내가 이르쿠츠크에서 이러한 동포를 만났던 것이 꿈으로 되어 나온 모양이오. -나는 꿈에는 세상을 다 잊어버린, 아주 깨끗하고 침착한 사람으로 이 꽁이깨 짐을 지고 삽을 메고 밤인지 낮인지 알 수 없으나 땅은 눈빛으로 희고, 하늘은 구름빛으로 회색인 삼림 지대를 허덕허덕 걸었소. 길도 없는 데를, 인적도 없는 데를. -꿈에도 내 몸은 퍽 피곤해서 쉴 자리를 찾는 마음이었소. -나는 마침내 어떤 언덕 밑 한 군데를 골랐소. 그리고 상시에 이야기에서 들은 대로 삽으로 내가 누울 자리만한 눈을 치고, 그리고는 도끼로 곁에 선 나무 몇 개를 찍어 누이고 거기다가 불을 놓고 그 불김에 녹은 땅을 두어 자나 파내고 그 속에 드러누웠소. 훈훈한 것이 아주 편안하였소. -하늘에는 별이 반짝거렸소. F역에서 보던 바와 같이 큰 별 작은 별도 보이고 평시에 보지 못하던 붉은 별, 푸른 별 들도 보였소. 나는 이 이상한 하늘, 이상한 별들이 있는 하늘을 보고 드러누워 있노라니까 문득 어디서 발자국 소리가 들렸소. 퉁퉁퉁퉁 우루루루…… 나는 벌떡 일어나려 하였으나 몸이 천 근이나 되어서 움직일 수가 없었소. 가까스로 고개를 조금 들고 보니 뿔이 길다랗고 눈이 불같이 붉은 사슴의 떼가 무엇에 놀랐는지 껑충껑충 뛰어 지나가오. 이것은 아마 크로포트킨의 <상호 부조론> 속에 말한 시베리아의 사슴의 떼가 꿈이 되어 나온 모양이오. -그러더니 그 사슴의 떼가 다 지나간 뒤에, 그 사슴의 떼가 오던 방향으로서 정임이가 걸어오는 것이 아니라 스르륵 하고 미끄러져 오오. 마치 인형을 밀어 주는 것같이. -"정임아!" -하고 나는 소리를 치고 몸을 일으키려 하였소. -정임의 모양은 나를 잠깐 보고는 미끄러지는 듯이 흘러가 버리오. -나는 정임아, 정임아를 부르고 팔다리를 부둥거렸소. 그러다가 마침내 내 몸이 번쩍 일으켜짐을 깨달았소. 나는 정임의 뒤를 따랐소. -나는 눈 위로 삼림 속으로 정임의 그림자를 따랐소. 보일 듯 안 보일 듯, 잡힐 듯 안 잡힐 듯, 나는 무거운 다리를 끌고 정임을 따랐소. -정임은 이 추운 날이언만 눈과 같이 흰 옷을 입었소. 그 옷은 옛날 로마 여인의 옷과 같이 바람결에 펄렁거렸소. -"오지 마세요. 저를 따라오지 못하십니다." -하고 정임은 눈보라 속에 가리워 버리고 말았소. 암만 불러도 대답이 없고 눈보라가 다 지나간 뒤에도 붉은 별, 푸른 별과 뿔 긴 사슴의 떼뿐이오. 정임은 보이지 아니하였소. 나는 미칠 듯이 정임을 찾고 부르다가 잠을 깨었소. -꿈은 이것뿐이오. 꿈을 깨어서 창 밖을 바라보니 얼음과 눈에 덮인 바이칼호 위에는 새벽의 겨울 달이 비치어 있었소. 저 멀리 검푸르게 보이는 것이 채 얼어붙지 아니한 물이겠지요. 오늘 밤에 바람이 없고 기온이 내리면 그것마저 얼어붙을는지 모르지요. 벌써 살얼음이 잡혔는지도 모르지요. 아아, 그 속은 얼마나 깊을까. 나는 바이칼의 물 속이 관심이 되어서 못 견디겠소. -형! 나는 자백하지 아니할 수 없소. 이 꿈은 내 마음의 어떤 부분을 설명한 것이라고. 그러나 형! 나는 이것을 부정하려오. 굳세게 부정하려오. 나는 이 꿈을 부정하려오. 억지로라도 부정하려오. 나는 결코 내 속에 일어난 혁명을 용인하지 아니하려오. 나는 그것을 혁명으로 인정하지 아니하려오. 아니오! 아니오! 그것은 반란이오! 내 인격의 통일에 대한 반란이오. 단연코 무단적으로 진정하지 아니하면 아니 될 반란이오. 보시오! 나는 굳게 서서 한 걸음도 뒤로 물러서지 아니할 것이오. 만일에 형이 광야에 구르는 내 시체나 해골을 본다든지, 또는 무슨 인연으로 내 무덤을 발견하는 날이 있다고 하면 그 때에 형은 내가 이 모든 반란을 진정한 개선의 군주로 죽은 것을 알아 주시오. -인제 바이칼에 겨울의 석양이 비치었소. 눈을 인 나지막한 산들이 지는 햇빛에 자줏빛을 발하고 있소. 극히 깨끗하고 싸늘한 광경이오. 아디유! -이 편지를 우편에 부치고는 나는 최후의 방랑의 길을 떠나오. 찾을 수도 없고, 편지 받을 수도 없는 곳으로. -부디 평안히 계시오. 일 많이 하시오. 부인께 문안 드리오. 내 가족과 정임의 일 맡기오. 아디유! -이것으로 최석 군의 편지는 끝났다. -나는 이 편지를 받고 울었다. 이것이 일 편의 소설이라 하더라도 슬픈 일이어든, 하물며 내가 가장 믿고 사랑하는 친구의 일임에야. -이 편지를 받고 나는 곧 최석 군의 집을 찾았다. 주인을 잃은 이 집에서는아이들이 마당에서 떠들고 있었다. -"삼청동 아자씨 오셨수. 어머니, 삼청동 아자씨." -하고 최석 군의 작은딸이 나를 보고 뛰어들어갔다. -최석의 부인이 나와 나를 맞았다. -부인은 머리도 빗지 아니하고, 얼굴에는 조금도 화장을 아니하고, 매무시도 흘러내릴 지경으로 정돈되지 못하였다. 일 주일이나 못 만난 동안에 부인의 모양은 더욱 초췌하였다. -"노석헌테서 무슨 기별이나 있습니까." -하고 나는 무슨 말로 말을 시작할지 몰라서 이런 말을 하였다. -"아니오. 왜 그이가 집에 편지하나요?" -하고 부인은 성난 빛을 보이며, -"집을 떠난 지가 근 사십 일이 되건만 엽서 한 장 있나요. 집안 식구가 다 죽기로 눈이나 깜짝할 인가요. 그저 정임이헌테만 미쳐서 죽을지 살지를 모르지요." -하고 울먹울먹한다. -"잘못 아십니다. 부인께서 노석의 마음을 잘못 아십니다. 그런 것이 아닙니다." -하고 나는 확신 있는 듯이 말을 시작하였다. -"노석의 생각을 부인께서 오해하신 줄은 벌써부터 알았지마는 오늘 노석의 편지를 받아보고 더욱 분명히 알았습니다." -하고 나는 부인의 표정의 변화를 엿보았다. -"편지가 왔어요?" -하고 부인은 놀라면서, -"지금 어디 있어요? 일본 있지요?" -하고 질투의 불길을 눈으로 토하였다. -"일본이 아닙니다. 노석은 지금 아라사에 있습니다." -"아라사요?" -하고 부인은 놀라는 빛을 보이더니, -"그럼 정임이를 데리고 아주 아라사로 가케오치를 하였군요." -하고 히스테리컬한 웃음을 보이고는 몸을 한 번 떨었다. -부인은 남편과 정임의 관계를 말할 때마다 이렇게 경련적인 웃음을 웃고 몸을 떠는 것이 버릇이었다. -"아닙니다. 노석은 혼자 가 있습니다. 그렇게 오해를 마세요." -하고 나는 보에 싼 최석의 편지를 내어서 부인의 앞으로 밀어 놓으며, -"이것을 보시면 다 아실 줄 압니다. 어쨌으나 노석은 결코 정임이를 데리고 간 것이 아니요, 도리어 정임이를 멀리 떠나서 간 것입니다. 그러나 그보다도 중대 문제가 있습니다. 노석은 이 편지를 보면 죽을 결심을 한 모양입니다." -하고 부인의 주의를 질투로부터 그 남편에게 대한 동정에 끌어 보려 하였다. -"흥. 왜요? 시체 정사를 하나요? 좋겠습니다. 머리가 허연 것이 딸자식 같은 계집애허구 정사를 한다면 그 꼴 좋겠습니다. 죽으라지요. 죽으래요. 죽는 것이 낫지요. 그리구 살아서 무엇 해요?" -내 뜻은 틀려 버렸다. 부인의 표정과 말에서는 더욱더욱 독한 질투의 안개와 싸늘한 얼음가루가 날았다. -나는 부인의 이 태도에 반감을 느꼈다. 아무리 질투의 감정이 강하다 하기로, 사람의 생명이 제 남편의 생명이 위태함에도 불구하고 오직 제 질투의 감정에만 충실하려 하는 그 태도가 불쾌하였다. 그래서 나는, -"나는 그만큼 말씀해 드렸으니 더 할 말씀은 없습니다. 아무려나 좀더 냉정하게 생각해 보세요. 그리고 이것을 읽어 보세요." -하고 일어나서 집으로 돌아와 버리고 말았다. -도무지 불쾌하기 그지없는 날이다. 최석의 태도까지도 불쾌하다. 달아나긴 왜 달아나? 죽기는 왜 죽어? 못난 것! 기운 없는 것! 하고 나는 최석이가 곁에 섰기나 한 것처럼 눈을 흘기고 중얼거렸다. -최석의 말대로 최석의 부인은 악한 사람이 아니요, 그저 보통인 여성일는지 모른다. 그렇다 하면 여자의 마음이란 너무도 질투의 종이 아닐까. 설사 남편 되는 최석의 사랑이 아내로부터 정임에게로 옮아 갔다고 하더라도 그것을 질투로 회복하려는 것은 어리석은 일이다. 이미 사랑이 떠난 남편을 네 마음대로 가거라 하고 자발적으로 내어버릴 것이지마는 그것을 못 할 사정이 있다고 하면 모르는 체하고 내버려 둘 것이 아닌가. 그래도 이것은 우리네 남자의 이론이요, 여자로는 이런 경우에 질투라는 반응밖에 없도록 생긴 것일까 나는 이런 생각을 하고 있었다. -시계가 아홉시를 친다. -남대문 밖 정거장을 떠나는 열차의 기적 소리가 들린다. -나는 만주를 생각하고, 시베리아를 생각하고 최석을 생각하였다. 마음으로는 정임을 사랑하면서 그 사랑을 발표할 수 없어서 시베리아의 눈 덮인 삼림 속으로 방황하는 최석의 모양이 최석의 꿈 이야기에 있는 대로 눈앞에 선하게 떠나온다. -`사랑은 목숨을 빼앗는다.' -하고 나는 사랑일래 일어나는 인생의 비극을 생각하였다. 그러나 최석의 경우는 보통 있는 공식과는 달라서 사랑을 죽이기 위해서 제 목숨을 죽이는 것이었다. 그렇다 하더라도, -`사랑은 목숨을 빼앗는다.' -는 데에는 다름이 없다. -나는 불쾌도 하고 몸도 으스스하여 얼른 자리에 누웠다. 며느리가 들어온 뒤부터 사랑 생활을 하는 지가 벌써 오 년이나 되었다. 우리 부처란 인제는 한 역사적 존재요, 윤리적 관계에 불과하였다. 오래 사귄 친구와 같은 익숙함이 있고, 집에 없지 못할 사람이라는 필요감도 있지마는 젊은 부처가 가지는 듯한 그런 정은 벌써 없는 지 오래였다. 아내도 나를 대하면 본체만체, 나도 아내를 대하면 본체만체, 무슨 필요가 있어서 말을 붙이더라도 아무쪼록 듣기 싫기를 원하는 듯이 톡톡 내던졌다. 아내도 근래에 와서는 옷도 아무렇게나, 머리도 아무렇게나, 어디 출입할 때밖에는 도무지 화장을 아니 하였다. -그러나 그렇다고 우리 부처의 새가 좋지 못한 것도 아니었다. 서로 소중히 여기는 마음도 있었다. 아내가 안에 있다고 생각하면 마음이 든든하고 또 아내의 말에 의하건대 내가 사랑에 있거니 하면 마음이 든든하다고 한다. -우리 부처의 관계는 이러한 관계다. -나는 한 방에서 혼자 잠을 자는 것이 습관이 되어서 누가 곁에 있으면 잠이 잘 들지 아니하였다. 혹시 어린것들이 매를 얻어맞고 사랑으로 피난을 와서 울다가 내 자리에서 잠이 들면 귀엽기는 귀여워도 잠자리는 편안치 아니하였다. 나는 책을 보고 글을 쓰고 공상을 하고 있으면 족하였다. 내게는 아무 애욕적 요구도 없었다. 이것은 내 정력이 쇠모한 까닭인지 모른다. -그러나 최석의 편지를 본 그 날 밤에는 도무지 잠이 잘 들지 아니하였다. 최석의 편지가 최석의 고민이 내 졸던 의식에 무슨 자극을 준 듯하였다. 적막한 듯하였다. 허전한 듯하였다. 무엇인지 모르나 그리운 것이 있는 것 같았다. -"어, 이거 안되었군." -하고 나는 벌떡 일어나 담배를 피워 물었다. -"나으리 주무셔 곕시오?" -하고 아범이 전보를 가지고 왔다. -"명조 경성 착 남정임" -이라는 것이었다. -"정임이가 와?" -하고 나는 전보를 다시 읽었다. -최석의 그 편지를 보면 최석 부인에게는 어떤 반응이 일어나고 정임에게는 어떤 반응이 일어날까, 하고 생각하면 자못 마음이 편하지 못하였다. -이튿날 아침에 나는 부산서 오는 차를 맞으려고 정거장에를 나갔다. -차는 제 시간에 들어왔다. 남정임은 슈트케이스 하나를 들고 차에서 내렸다. 검은 외투에 검은 모자를 쓴 그의 얼굴은 더욱 해쓱해 보였다. -"선생님!" -하고 정임은 나를 보고 손에 들었던 짐을 땅바닥에 내려놓고, 내 앞으로 왔다. -"풍랑이나 없었나?" -하고 나는 내 손에 잡힌 정임의 손이 싸늘한 것을 근심하였다. -"네. 아주 잔잔했습니다. 저같이 약한 사람도 밖에 나와서 바다 경치를 구경하였습니다." -하고 정임은 사교적인 웃음을 웃었다. 그러나 그의 눈에는 눈물이 있는 것 같았다. -"최 선생님 어디 계신지 아세요?" -하고 정임은 나를 따라 서면서 물었다. -"나도 지금까지 몰랐는데 어제 편지를 하나 받았지." -하는 것이 내 대답이었다. -"네? 편지 받으셨어요? 어디 계십니까?" -하고 정임은 걸음을 멈추었다. -"나도 몰라." -하고 나도 정임과 같이 걸음을 멈추고, -"그 편지를 쓴 곳도 알고 부친 곳도 알지마는 지금 어디로 갔는지 그것은 모르지. 찾을 생각도 말고 편지할 생각도 말라고 했으니까." -하고 사실대로 대답하였다. -"어디야요? 그 편지 부치신 곳이 어디야요? 저 이 차로 따라갈 테야요." -하고 정임은 조급하였다. -"갈 때에는 가더라도 이 차에야 갈 수가 있나." -하고 나는 겨우 정임을 끌고 들어왔다. -정임을 집으로 데리고 와서 대강 말을 하고, 이튿날 새벽 차로 떠난다는 것을, -"가만 있어. 어떻게 계획을 세워 가지고 해야지." -하여 가까스로 붙들어 놓았다. -아침을 먹고 나서 최석 집에를 가 보려고 할 즈음에 순임이가 와서 마루 끝에 선 채로, -"선생님, 어머니가 잠깐만 오십시사구요." -하였다. -"정임이가 왔다." -하고 내가 그러니까, -"정임이가요?" -하고 순임은 깜짝 놀라면서, -"정임이는 아버지 계신 데를 알아요?" -하고 물었다. -"정임이도 모른단다. 너 아버지는 시베리아에 계시고 정임이는 동경 있다가 왔는데 알 리가 있니?" -하고 나는 순임의 생각을 깨뜨리려 하였다. 순임은, -"정임이가 어디 있어요?" -하고 방들 있는 곳을 둘러보며, -"언제 왔어요?" -하고는 그제야 정임에게 대한 반가운 정이 발하는 듯이, -"정임아!" -하고 불러 본다. -"언니요? 여기 있수." -하고 정임이가 머릿방 문을 열고 옷을 갈아입던 채로 고개를 내어민다. -순임은 구두를 차내버리듯이 벗어 놓고 정임의 방으로 뛰어들어간다. -나는 최석의 집에를 가느라고 외투를 입고 모자를 쓰고 정임의 방문을 열어 보았다. 두 처녀는 울고 있었다. -"정임이도 가지. 아주머니 뵈러 안 가?" -하고 나는 정임을 재촉하였다. -"선생님 먼저 가 계셔요." -하고 순임이가 눈물을 씻고 일어나면서, -"이따가 제가 정임이허구 갑니다." -하고 내게 눈을 끔쩍거려 보였다. 갑자기 정임이가 가면 어머니와 정임이와 사이에 어떠한 파란이 일어나지나 아니할까 하고 순임이가 염려하는 것이었다. 순임도 인제는 노성하여졌다고 나는 생각하였다. -"선생님 이 편지가 다 참말일까요?" -하고 나를 보는 길로 최석 부인이 물었다. 최석 부인은 히스테리를 일으킨 사람 모양으로 머리와 손을 떨었다. -나는 참말이냐 하는 것이 무엇을 가리키는 말인지 분명하지 아니하여서, -"노석이 거짓말할 사람입니까?" -하고 대체론으로 대답하였다. -"앉으십쇼. 앉으시란 말씀도 안 하고." -하고 부인은 침착한 모양을 보이려고 빙그레 웃었으나, 그것은 실패였다. -"그게 참말일까요? 정임이가 아기를 뗀 것이 아니라, 폐가 나빠서 피를 토하고 입원하였다는 것이?" -하고 부인은 중대하다는 표정을 가지고 묻는다. -"그럼 그것이 참말이 아니구요. 아직도 그런 의심을 가지고 계십니까. 정임이와 한 방에 있는 학생이 모함한 것이라고 안 그랬어요? 그게 말이 됩니까." -하고 언성을 높여서 대답하였다. -"그럼 왜 정임이가 호텔에서 왜 아버지한테 한 번 안아 달라고 그래요? 그 편지에 쓴 대로 한 번 안아만 보았을까요?" -이것은 부인의 둘째 물음이었다. -"나는 그뿐이라고 믿습니다. 그것이 도리어 깨끗하다는 표라고 믿습니다. 안 그렇습니까?" -하고 나는 딱하다는 표정을 하였다. -"글쎄요." -하고 부인은 한참이나 생각하고 있다가, -"정말 애 아버지가 혼자 달아났을까요? 정임이를 데리고 가케오치한 것이 아닐까요? 꼭 그랬을 것만 같은데." -하고 부인은 괴로운 표정을 감추려는 듯이 고개를 숙인다. -나는 남편에게 대한 아내의 의심이 어떻게 깊은가에 아니 놀랄 수가 없어서, -"허." -하고 한 마디 웃고, -"그렇게 수십 년 동안 부부 생활을 하시고도 그렇게 노석의 인격을 몰라 주십니까. 나는 부인께서 하시는 말씀이 부러 하시는 농담으로밖에 아니 들립니다. 정임이가 지금 서울 있습니다." -하고 또 한 번 웃었다. 정말 기막힌 웃음이었다. -"정임이가 서울 있어요?" -하고 부인은 펄쩍 뛰면서, -"어디 있다가 언제 왔습니까? 그게 정말입니까?" -하고 의아한 빛을 보인다. 꼭 최석이하고 함께 달아났을 정임이가 서울에 있을 리가 없는 것이었다. -"동경서 오늘 아침에 왔습니다. 지금 우리 집에서 순임이허구 이야기를 하고 있으니까 조금 있으면 뵈오러 올 것입니다." -하고 나는 정임이가 분명히 서울 있는 것을 일일이 증거를 들어서 증명하였다. 그리고 우스운 것을 속으로 참았다. 그러나 다음 순간에는 이 병들고 늙은 아내의 질투와 의심으로 괴로워서 덜덜덜덜 떨고 앉았는 것을 가엾게 생각하였다. -정임이가 지금 서울에 있는 것이 더 의심할 여지가 없는 사실임이 판명되매, 부인은 도리어 낙망하는 듯하였다. 그가 제 마음대로 그려 놓고 믿고 하던 모든 철학의 계통이 무너진 것이었다. -한참이나 흩어진 정신을 못 수습하는 듯이 앉아 있더니 아주 기운 없는 어조로, -"선생님 애 아버지가 정말 죽을까요? 정말 영영 집에를 안 돌아올까요?" -하고 묻는다. 그 눈에는 벌써 눈물이 어리었다. -"글쎄요. 내 생각 같아서는 다시는 집에 돌아오지 아니할 것 같습니다. 또 그만치 망신을 했으니, 이제 무슨 낯으로 돌아옵니까. 내라도 다시 집에 돌아올 생각은 아니 내겠습니다." -하고 나는 의식적으로 악의를 가지고 부인의 가슴에 칼을 하나 박았다. -그 칼은 분명히 부인의 가슴에 아프게 박힌 모양이었다. -"선생님. 어떡하면 좋습니까. 애 아버지가 죽지 않게 해 주세요. 그렇지 않아도 순임이년이 제가 걔 아버지를 달아나게나 한 것처럼 원망을 하는데요. 그러다가 정녕 죽으면 어떻게 합니까. 제일 딴 자식들의 원망을 들을까봐 겁이 납니다. 선생님, 어떻게 애 아버지를 붙들어다 주세요." -하고 마침내 참을 수 없이 울었다. 말은 비록 자식들의 원망이 두렵다고 하지마는 질투의 감정이 스러질 때에 그에게는 남편에게 대한 아내의 애정이 막혔던 물과 같이 터져 나온 것이라고 나는 해석하였다. -"글쎄, 어디 있는 줄 알고 찾습니까. 노석의 성미에 한번 아니 한다고 했으면 다시 편지할 리는 만무하다고 믿습니다." -하여 나는 부인의 가슴에 둘째 칼날을 박았다. -나는 비록 최석의 부인이 청하지 아니하더라도 최석을 찾으러 떠나지 아니하면 아니 될 의무를 진다. 산 최석을 못 찾더라도 최석의 시체라도, 무덤이라도, 죽은 자리라도, 마지막 있던 곳이라도 찾아보지 아니하면 아니 될 의무를 깨닫는다. -그러나 시국이 변하여 그 때에는 아라사에 가는 것은 여간 곤란한 일이 아니었다. 그 때에는 북만의 풍운이 급박하여 만주리를 통과하기는 사실상 불가능에 가까웠다. 마점산(馬占山) 일파의 군대가 흥안령, 하일라르 등지에 웅거하여 언제 대충돌이 폭발될는지 모르던 때였다. 이 때문에 시베리아에 들어가기는 거의 절망 상태라고 하겠고, 또 관헌도 아라사에 들어가는 여행권을 잘 교부할 것 같지 아니하였다. -부인은 울고, 나는 이런 생각 저런 생각 하고 있는 동안에 문 밖에는 순임이, 정임이가 들어오는 소리가 들렸다. -"아이, 정임이냐." -하고 부인은 반갑게 허리 굽혀 인사하는 정임의 어깨에 손을 대고, -"자 앉아라. 그래 인제 병이 좀 나으냐…… 수척했구나. 더 노성해지구 반 년도 못 되었는데." -하고 정임에게 대하여 애정을 표하는 것을 보고 나는 의외지마는 다행으로 생각하였다. 나는 정임이가 오면 보기 싫은 한 신을 연출하지 않나 하고 근심하였던 것이다. -"희 잘 자라요?" -하고 정임은 한참이나 있다가 비로소 입을 열었다. -"응, 잘 있단다. 컸나 가 보아라." -하고 부인은 더욱 반가운 표정을 보인다. -"어느 방이야?" -하고 정임은 선물 보퉁이를 들고 순임과 함께 나가 버린다. 여자인 정임은 희와 순임과 부인과 또 순임의 다른 동생에게 선물 사 오는 것을 잊어버리지 아니하였다. -정임과 순임은 한 이삼 분 있다가 돌아왔다. 밖에서 희가 무엇이라고 지절대는 소리가 들린다. 아마 정임이가 사다 준 선물을 받고 좋아하는 모양이다. -정임은 들고 온 보퉁이에서 여자용 배스로브 하나를 내어서 부인에게주며, -"맞으실까?" -하였다. -"아이 그건 무어라고 사 왔니?" -하고 부인은 좋아라고 입어 보고, 이리 보고 저리 보고 하면서, -"난 이런 거 처음 입어 본다." -하고 자꾸 끈을 동여맨다. -"정임이가 난 파자마를 사다 주었어." -하고 순임은 따로 쌌던 굵은 줄 있는 융 파자마를 내어서 경매장 사람 모양으로 흔들어 보이며, -"어머니 그 배스로브 나 주우. 어머닌 늙은이가 그건 입어서 무엇 하우?" -하고 부인이 입은 배스로브를 벗겨서 제가 입고 두 호주머니에 손을 넣고 어기죽어기죽하고 서양 부인네 흉내를 낸다. -"저런 말괄량이가 너도 정임이처럼 좀 얌전해 보아라." -하고 부인은 순임을 향하여 눈을 흘긴다. -이 모양으로 부인과 정임과의 대면은 가장 원만하게 되었다. -그러나 부인은 정임에게 최석의 편지를 보이기를 원치 아니하였다. 편지가 왔다는 말조차 입 밖에 내지 아니하였다. 그러나 순임이가 정임에게 대하여 표하는 애정은 여간 깊지 아니하였다. 그 둘은 하루 종일 같이 있었다. 정임은 그 날 저녁에 나를 보고, -"순임이헌테 최 선생님 편지 사연은 다 들었어요. 순임이가 그 편지를 훔쳐다가 얼른얼른 몇 군데 읽어도 보았습니다. 순임이가 저를 퍽 동정하면서 절더러 최 선생을 따라가 보라고 그래요. 혼자 가기가 어려우면 자기허구 같이 가자고. 가서 최 선생을 데리고 오자고. 어머니가 못 가게 하거든 몰래 둘이 도망해 가자고. 그래서 그러자고 그랬습니다. 안됐지요. 선생님?" -하고 저희끼리 작정은 다 해 놓고는 슬쩍 내 의향을 물었다. -"젊은 여자 단둘이서 먼 여행을 어떻게 한단 말이냐? 게다가 지금 북만주 형세가 대단히 위급한 모양인데. 또 정임이는 그 건강 가지고 어디를 가, 이 추운 겨울에?" -하고 나는 이런 말이 다 쓸데없는 말인 줄 알면서도 어른으로서 한 마디 안 할 수 없어서 하였다. 정임은 더 제 뜻을 주장하지도 아니하였다. -그 날 저녁에 정임은 순임의 집에서 잤는지 집에 오지를 아니하였다. -나는 이 일을 어찌하면 좋은가, 이 두 여자의 행동을 어찌하면 좋은가 하고 혼자 끙끙 생각하고 있었다. -이튿날 나는 궁금해서 최석의 집에를 갔더니 부인이, -"우리 순임이 댁에 갔어요?" -하고 의외의 질문을 하였다. -"아니오." -하고 나는 놀랐다. -"그럼, 이것들이 어딜 갔어요? 난 정임이허구 댁에서 잔 줄만 알았는데." -하고 부인은 무슨 불길한 것이나 본 듯이 몸을 떤다. 히스테리가 일어난 것이었다. -나는 입맛을 다시었다. 분명히 이 두 여자가 시베리아를 향하고 떠났구나 하였다. -그 날은 소식이 없이 지났다. 그 이튿날도 소식이 없이 지났다. -최석 부인은 딸까지 잃어버리고 미친 듯이 울고 애통하다가 머리를 싸매고 누워 버리고 말았다. -정임이와 순임이가 없어진 지 사흘 만에 아침 우편에 편지 한 장을 받았다. 그 봉투는 봉천 야마도 호텔 것이었다. 그 속에는 편지 두 장이 들어 있었다. 한 장은 , -선생님! 저는 아버지를 위하여, 정임을 위하여 정임과 같이 집을 떠났습니다. -어머님께서 슬퍼하실 줄은 알지마는 저희들이 다행히 아버지를 찾아서 모시고 오면 어머니께서도 기뻐하실 것을 믿습니다. 저희들이 가지 아니하고는 아버지는 살아서 돌아오실 것 같지 아니합니다. 아버지를 이처럼 불행하시게 한 죄는 절반은 어머니께 있고, 절반은 제게 있습니다. 저는 아버지 일을 생각하면 가슴이 미어지고 이가 갈립니다. 저는 아무리 해서라도 아버지를 찾아내어야겠습니다. -저는 정임을 무한히 동정합니다. 저는 어려서 정임을 미워하고 아버지를 미워하였지마는 지금은 아버지의 마음과 정임의 마음을 알아볼 만치 자랐습니다. -선생님! 저희들은 둘이 손을 잡고 어디를 가서든지 아버지를 찾아내겠습니다. 하나님의 사자가 낮에는 구름이 되고 밤에는 별이 되어서 반드시 저희들의 앞길을 인도할 줄 믿습니다. -선생님, 저희 어린것들의 뜻을 불쌍히 여기셔서 돈 천 원만 전보로 보내 주시기를 바랍니다. -만일 만주리로 가는 길이 끊어지면 몽고로 자동차로라도 가려고 합니다. 아버지 편지에 적힌 F역의 R씨를 찾고, 그리고 바이칼 호반의 바이칼리스코에를 찾아, 이 모양으로 찾으면 반드시 아버지를 찾아 내고야 말 것을 믿습니다. -선생님, 돈 천 원만 봉천 야마도 호텔 최순임 이름으로 부쳐 주세요. 그리고 어머니헌테는 아직 말씀 말아 주세요. -선생님. 이렇게 걱정하시게 해서 미안합니다. 용서하세요. -순임 상서 -이렇게 써 있다. 또 한 장에는, -선생님! 저는 마침내 돌아오지 못할 길을 떠나나이다. 어디든지 최 선생님을 뵈옵는 곳에서 이 몸을 묻어 버리려 하나이다. 지금 또 몸에 열이 나는 모양이요, 혈담도 보이오나 최 선생을 뵈올 때까지는 아무리 하여서라도 이 목숨을 부지하려 하오며, 최 선생을 뵈옵고 제가 진 은혜를 감사하는 한 말씀만 사뢰면 고대 죽사와도 여한이 없을까 하나이다. -순임 언니가 제게 주시는 사랑과 동정은 오직 눈물과 감격밖에 더 표할 말씀이 없나이다. 순임 언니가 저를 보호하여 주니 마음이 든든하여이다……. -이라고 하였다. -편지를 보아야 별로 놀랄 것은 없었다. 다만 말괄량이로만 알았던 순임의 속에 어느새에 그러한 감정이 발달하였나 하는 것을 놀랄 뿐이었다. -그러나 걱정은 이것이다. 순임이나 정임이나 다 내가 감독해야 할 처지에 있거늘 그들이 만리 긴 여행을 떠난다고 하니 감독자인 내 태도를 어떻게 할까 하는 것이다. -나는 편지를 받는 길로 우선 돈 천 원을 은행에 가서 찾아다 놓았다. -암만해도 내가 서울에 가만히 앉아서 두 아이에게 돈만 부쳐 주는 것이 인정에 어그러지는 것 같아서 나는 여러 가지로 주선을 하여서 여행의 양해를 얻어 가지고 봉천을 향하여 떠났다. -내가 봉천에 도착한 것은 밤 열시가 지나서였다. 순임과 정임은 자리옷 바람으로 내 방으로 달려와서 반가워하였다. 그들이 반가워하는 양은 실로 눈물이 흐를 만하였다. -"아이구 선생님!" -"아이구 어쩌면!" -하는 것이 그들의 내게 대한 인사의 전부였다. -"정임이 어떠오?" -하고 나는 순임의 편지에 정임이가 열이 있단 말을 생각하였다. -"무어요. 괜찮습니다." -하고 정임은 웃었다. -전등빛에 보이는 정임의 얼굴은 그야말로 대리석으로 깎은 듯하였다. 여위고 핏기가 없는 것이 더욱 정임의 용모에 엄숙한 맛을 주었다. -"돈 가져오셨어요?" -하고 순임이가 어리광 절반으로 묻다가 내가 웃고 대답이 없음을 보고, -"우리를 붙들러 오셨어요?" -하고 성내는 양을 보인다. -"그래 둘이서들 간다니 어떻게 간단 말인가. 시베리아가 어떤 곳에 붙었는지 알지도 못하면서." -하고 나는 두 사람이 그리 슬퍼하지 아니하는 순간을 보는 것이 다행하여서 농담삼아 물었다. -"왜 몰라요? 시베리아가 저기 아니야요?" -하고 순임이가 산해관 쪽을 가리키며, -"우리도 지리에서 배워서 다 알아요. 어저께 하루 종일 지도를 사다 놓고 연구를 하였답니다. 봉천서 신경, 신경서 하얼빈, 하얼빈에서 만주리, 만주리에서 이르쿠츠크, 보세요, 잘 알지 않습니까. 또 만일 중동 철도가 불통이면 어떻게 가는고 하니 여기서 산해관을 가고, 산해관서 북경을 가지요. 그리고는 북경서 장가구를 가지 않습니까. 장가구서 자동차를 타고 몽고를 통과해서 가거든요. 잘 알지 않습니까." -하고 정임의 허리를 안으며, -"그렇지이?" -하고 자신 있는 듯이 웃는다. -"또 몽고로도 못 가게 되어서 구라파를 돌게 되면?" -하고 나는 교사가 생도에게 묻는 모양으로 물었다. -"네, 저 인도양으로 해서 지중해로 해서 프랑스로 해서 그렇게 가지요." -"허, 잘 아는구나." -하고 나는 웃었다. -"그렇게만 알아요? 또 해삼위로 해서 가는 길도 알아요. 저희를 어린애로 아시네." -"잘못했소." -"하하." -"후후." -사실 그들은 벌써 어린애들은 아니었다. 순임도 벌써 그 아버지의 말할 수 없는 사정에 동정할 나이가 되었다. 순임이가 기어다닌 것은 본 나로는 이것도 이상하게 보였다. 나는 벌써 나이 많았구나 하는 생각이 나지 아니할 수 없었다. -나는 잠 안 드는 하룻밤을 지내면서 옆방에서 정임이가 기침을 짓는 소리를 들었다. 그 소리는 내 가슴을 아프게 하였다. -이튿날 나는 두 사람에게 돈 천 원을 주어서 신경 가는 급행차를 태워 주었다. 대륙의 이 건조하고 추운 기후에 정임의 병든 폐가 견디어 날까 하고 마음이 놓이지 아니하였다. 그러나 나는 그들을 가라고 권할 수는 있어도 가지 말라고 붙들 수는 없었다. 다만 제 아버지, 제 애인을 죽기 전에 만날 수 있기만 빌 뿐이었다. -나는 두 아이를 북쪽으로 떠나 보내고 혼자 여관에 들어와서 도무지 정신을 진정하지 못하여 술을 먹고 잊으려 하였다. 그러다가 그 날 밤차로 서울로 돌아왔다. -이튿날 아침에 나는 최석 부인을 찾아서 순임과 정임이가 시베리아로 갔단 말을 전하였다. -그 때에 최 부인은 거의 아무 정신이 없는 듯하였다. 아무 말도 하지 아니하고 울고만 있었다. -얼마 있다가 부인은, -"그것들이 저희들끼리 가서 괜찮을까요?" -하는 한 마디를 할 뿐이었다. -며칠 후에 순임에게서 편지가 왔다. 그것은 하얼빈에서 부친 것이었다. -하얼빈을 오늘 떠납니다. 하얼빈에 와서 아버지 친구 되시는 R소장을 만나뵈옵고 아버지 일을 물어 보았습니다. 그리고 저희 둘이서 찾아 떠났다는 말씀을 하였더니 R소장이 대단히 동정하여서 여행권도 준비해 주시기로 저희는 아버지를 찾아서 오늘 오후 모스크바 가는 급행으로 떠납니다. 가다가 F역에 내리기는 어려울 듯합니다. 정임의 건강이 대단히 좋지 못합니다. 일기가 갑자기 추워지는 관계인지 정임의 신열이 오후면 삼십팔 도를 넘고 기침도 대단합니다. 저는 염려가 되어서 정임더러 하얼빈에서 입원하여 조리를 하라고 권하였지마는 도무지 듣지를 아니합니다. 어디까지든지 가는 대로 가다가 더 못 가게 되면 그 곳에서 죽는다고 합니다. -저는 그 동안 며칠 정임과 같이 있는 중에 정임이가 어떻게 아름답고 높고 굳세게 깨끗한 여자인 것을 발견하였습니다. 저는 지금까지 정임을 몰라본 것을 부끄럽게 생각합니다. 그리고 또 제 아버지께서 어떻게 갸륵한 어른이신 것을 인제야 깨달았습니다. 자식 된 저까지도 아버지와 정임과의 관계를 의심하였습니다. 의심하는 것보다는 세상에서 말하는 대로 믿고 있었습니다. 그러나 정임을 만나 보고 정임의 말을 듣고 아버지께서 선생님께 드린 편지가 모두 참인 것을 깨달았습니다. 아버지께서는 친구의 의지 없는 딸인 정임을 당신의 친혈육인 저와 꼭 같이 사랑하려고 하신 것이었습니다. 그것이 얼마나 갸륵한 일입니까. 그런데 제 어머니와 저는 그 갸륵하신 정신을 몰라보고 오해하였습니다. 어머니는 질투하시고 저는 시기하였습니다. 이것이 얼마나 아버지를 그렇게 갸륵하신 아버지를 몰라뵈온 것입니다. 이것이 얼마나 부끄럽고 원통한 일입니까. -선생님께서도 여러 번 아버지의 인격이 높다는 것을 저희 모녀에게 설명해 주셨습니다마는 마음이 막힌 저는 선생님의 말씀도 믿지 아니하였습니다. -선생님, 정임은 참으로 아버지를 사랑합니다. 정임에게는 이 세상에 아버지밖에는 사랑하는 아무것도 없이, 그렇게 외●으로, 그렇게 열렬하게 아버지를 사모하고 사랑합니다. 저는 잘 압니다. 정임이가 처음에는 아버지로 사랑하였던 것을, 그러나 어느 새에 정임의 아버지에게 대한 사랑이 무엇인지 모를 사랑으로 변한 것을, 그것이 연애냐 하고 물으면 정임은 아니라고 할 것입니다. 정임의 그 대답은 결코 거짓이 아닙니다. 정임은 숙성하지마는 아직도 극히 순결합니다. 정임은 부모를 잃은 후에 아버지밖에 사랑한 사람이 없습니다. 또 아버지에게밖에 사랑받던 일도 없습니다. 그러니깐 정임은 아버지를 그저 사랑합니다 전적으로 사랑합니다. 선생님, 정임의 사랑에는 아버지에 대한 자식의 사랑, 오라비에 대한 누이의 사랑, 사내 친구에 대한 여자 친구의 사랑, 애인에 대한 애인의 사랑, 이 밖에 존경하고 숭배하는 선생에 대한 제자의 사랑까지, 사랑의 모든 종류가 포함되어 있는 것을 저는 발견하였습니다. -선생님, 정임의 정상은 차마 볼 수가 없습니다. 아버지의 안부를 근심하는 양은 제 몇십 배나 되는지 모르게 간절합니다. 정임은 저 때문에 아버지가 불행하게 되셨다고 해서 차마 볼 수 없게 애통하고 있습니다. 진정을 말씀하오면 저는 지금 아버지보다도 어머니보다도 정임에게 가장 동정이 끌립니다. 선생님, 저는 아버지를 찾아가는 것이 아니라 정임을 돕기 위하여 간호하기 위하여 가는 것 같습니다. -선생님, 저는 아직 사랑이란 것이 무엇인지를 모릅니다. 그러나 정임을 보고 사랑이란 것이 어떻게 신비하고 열렬하고 놀라운 것인가를 안 것 같습니다. -순임의 편지는 계속된다. -선생님, 하얼빈에 오는 길에 송화강 굽이를 볼 때에는 정임이가 어떻게나 울었는지, 그것은 차마 볼 수가 없었습니다. 아버지께서 송화강을 보시고 감상이 깊으셨더란 것을 생각한 것입니다. 무인지경으로, 허옇게 눈이 덮인 벌판으로 흘러가는 송화강 굽이, 그것은 슬픈 풍경입니다. 아버지께서 여기를 지나실 때에는 마른 풀만 있는 광야였을 것이니 그 때에는 더욱 황량하였을 것이라고 정임은 말하고 웁니다. -정임은 제가 아버지를 아는 것보다 아버지를 잘 아는 것 같습니다. 평소에 아버지와는 그리 접촉이 없건마는 정임은 아버지의 의지력, 아버지의 숨은 열정, 아버지의 성미까지 잘 압니다. 저는 정임의 말을 듣고야 비로소 참 그래, 하는 감탄을 발한 일이 여러 번 있습니다. -정임의 말을 듣고야 비로소 아버지가 남보다 뛰어나신 인물인 것을 깨달았습니다. 아버지는 정의감이 굳세고 겉으로는 싸늘하도록 이지적이지마는 속에는 불 같은 열정이 있으시고, 아버지는 쇠 같은 의지력과 칼날 같은 판단력이 있어서 언제나 주저하심이 없고 또 흔들리심이 없다는 것, 아버지께서는 모든 것을 용서하고 모든 것을 호의로 해석하여서 누구를 미워하거나 원망하심이 없는 등, 정임은 아버지의 마음의 목록과 설명서를 따로 외우는 것처럼 아버지의 성격을 설명합니다. 듣고 보아서 비로소 아버지의 딸인 저는 내 아버지가 어떤 아버지인가를 알았습니다. -선생님, 이해가 사랑을 낳는단 말씀이 있지마는 저는 정임을 보아서 사랑이 이해를 낳는 것이 아닌가 합니다. -어쩌면 어머니와 저는 평생을 아버지를 모시고 있으면서도 아버지를 몰랐습니까. 이성이 무디고 양심이 흐려서 그랬습니까. 정임은 진실로 존경할 여자입니다. 제가 남자라 하더라도 정임을 아니 사랑하고는 못 견디겠습니다. -아버지는 분명 정임을 사랑하신 것입니다. 처음에는 친구의 딸로, 다음에는 친딸과 같이, 또 다음에는 무엇인지 모르게 뜨거운 사랑이 생겼으리라고 믿습니다. 그것을 아버지는 죽인 것입니다. 그것을 죽이려고 이 달할 수 없는 사랑을 죽이려고 시베리아로 달아나신 것입니다. 인제야 아버지께서 선생님께 하신 편지의 뜻이 알아진 것 같습니다. 백설이 덮인 시베리아의 삼림 속으로 혼자 헤매며 정임에게로 향하는 사랑을 죽이려고 무진 애를 쓰시는 그 심정이 알아지는 것 같습니다. -선생님 이것이 얼마나 비참한 일입니까. 저는 정임의 짐에 지니고 온 일기를 보다가 이러한 구절을 발견하였습니다. -선생님. 저는 세인트 오거스틴의 <참회록>을 절반이나 다 보고 나도 잠이 들지 아니합니다. 잠이 들기 전에 제가 항상 즐겨하는 아베마리아의 노래를 유성기로 듣고 나서 오늘 일기를 쓰려고 하니 슬픈 소리만 나옵니다. -사랑하는 어른이여. 저는 멀리서 당신을 존경하고 신뢰하는 마음에서만 살아야 할 것을 잘 압니다. 여기에서 영원한 정지를 하지 아니하면 아니 됩니다. 비록 제 생명이 괴로움으로 끊어지고 제 혼이 피어 보지 못하고 스러져 버리더라도 저는 이 멀리서 바라보는 존경과 신뢰의 심경에서 한 발자국이라도 옮기지 않아야 할 것을 잘 압니다. 나를 위하여 놓여진 생의 궤도는 나의 생명을 부인하는 억지의 길입니다. 제가 몇 년 전 기숙사 베드에서 이런 밤에 내다보면 즐겁고 아름답던 내 생의 꿈은 다 깨어졌습니다. -제 영혼의 한 조각이 먼 세상 알지 못할 세계로 떠다니고 있습니다. 잃어버린 마음 조각 어찌하다가 제가 이렇게 되었는지 모릅니다. -피어 오르는 생명의 광채를 스스로 사형에 처하지 아니하면 아니 될 때 어찌 슬픔이 없겠습니까. 이것은 현실로 사람의 생명을 죽이는 것보다 더 무서운 죄가 아니오리까. 나의 세계에서 처음이요 마지막으로 발견한 빛을 어둠 속에 소멸해 버리라는 이 일이 얼마나 떨리는 직무오리까. 이 허깨비의 형의 사람이 살기 위하여 내 손으로 칼을 들어 내 영혼의 환희를 쳐야 옳습니까. 저는 하나님을 원망합니다. -이렇게 씌어 있습니다. 선생님 이것이 얼마나 피 흐르는 고백입니까. -선생님, 저는 정임의 이 고백을 보고 무조건으로 정임의 사랑을 시인합니다. 선생님, 제 목숨을 바쳐서 하는 일에 누가 시비를 하겠습니까. 더구나 그 동기에 티끌만큼도 불순한 것이 없음에야 무조건으로 시인하지 아니하고 어찌합니까. -바라기는 정임의 병이 크게 되지 아니하고 아버지께서 무사히 계셔서 속히 만나뵙게 되는 것입니다마는 앞길이 망망하여 가슴이 두근거림을 금치 못합니다. 게다가 오늘은 함박눈이 퍼부어서 천지가 온통 회색으로 한 빛이 되었으니 더욱 전도가 막막합니다. 그러나 선생님 저는 앓는 정임을 데리고 용감하게 시베리아 길을 떠납니다. -한 일 주일 후에 또 편지 한 장이 왔다. 그것도 순임의 편지여서 이러한 말이 있었다. -……오늘 새벽에 흥안령을 지났습니다. 플랫폼의 한란계는 영하 이십삼 도를 가리켰습니다. 사람들의 얼굴은 솜털에 성에가 슬어서 남녀 노소 할 것 없이 하얗게 분을 바른 것 같습니다. 유리에 비친 내 얼굴도 그와 같이 흰 것을 보고 놀랐습니다. 숨을 들이쉴 때에는 코털이 얼어서 숨이 끊기고 바람결이 지나가면 눈물이 얼어서 눈썹이 마주 붙습니다. 사람들은 털과 가죽에 싸여서 곰같이 보입니다. -또 이런 말도 있었다. -아라사 계집애들이 우유병들을 품에 품고 서서 손님이 사기를 기다리고 있습니다. 저도 두 병을 사서 정임이와 나누어 먹었습니다. 우유는 따뜻합니다. 그것을 식히지 아니할 양으로 품에 품고 섰던 것입니다. -또 이러한 구절도 있었다. -정거장에 닿을 때마다 저희들은 밖을 내다봅니다. 행여나 아버지가 거기 계시지나 아니할까 하고요. 차가 어길 때에는 더구나 마음이 조입니다. 아버지가 그 차를 타고 지나가시지나 아니하는가 하고요. 그리고는 정임은 웁니다. 꼭 뵈올 어른을 놓쳐나 버린 듯이. -그리고는 이 주일 동안이나 소식이 없다가 편지 한 장이 왔다. 그것은 정임의 글씨였다. -선생님, 저는 지금 최 선생께서 계시던 바이칼 호반의 그 집에 와서 홀로 누웠습니다. 순임은 주인 노파와 함께 F역으로 최 선생을 찾아서 오늘 아침에 떠나고 병든 저만 혼자 누워서 얼음에 싸인 바이칼 호의 눈보라치는 바람 소리를 듣고 있습니다. 열은 삼십팔 도로부터 구 도 사이를 오르내리고 기침은 나고 몸의 괴로움을 견딜 수 없습니다. 그러하오나 선생님, 저는 하나님을 불러서 축원합니다. 이 실낱 같은 생명이 다 타 버리기 전에 최 선생의 낯을 다만 일 초 동안이라도 보여지이라고. 그러하오나 선생님, 이 축원이 이루어지겠습니까. -저는 한사코 F역까지 가려 하였사오나 순임 형이 울고 막사오며 또 주인 노파가 본래 미국 사람과 살던 사람으로 영어를 알아서 순임 형의 도움이 되겠기로 저는 이 곳에 누워 있습니다. 순임 형은 기어코 아버지를 찾아 모시고 오마고 약속하였사오나 이 넓은 시베리아에서 어디 가서 찾겠습니까. -선생님, 저는 죽음을 봅니다. 죽음이 바로 제 앞에 와서 선 것을 봅니다. 그의 손은 제 여윈 손을 잡으려고 들먹거림을 봅니다. -선생님, 죽은 뒤에도 의식이 남습니까. 만일 의식이 남는다 하면 죽은 뒤에도 이 아픔과 괴로움을 계속하지 아니하면 아니 됩니까. 죽은 뒤에는 오직 영원한 어둠과 잊어버림이 있습니까. 죽은 뒤에는 혹시나 생전에 먹었던 마음을 자유로 펼 도리가 있습니까. 이 세상에서 그립고 사모하던 이를 죽은 뒤에는 자유로 만나 보고 언제나 마음껏 같이할 수가 있습니까. 그런 일도 있습니까. 이런 일을 바라는 것도 죄가 됩니까. -정임의 편지는 더욱 절망적인 어조로 찬다. -저는 처음 병이 났을 때에는 죽는 것이 싫고 무서웠습니다. 그러나 지금은 죽는 것이 조금도 무섭지 아니합니다. 다만 차마 죽지 못하는 것이 한. -하고는 `다만 차마' 이하를 박박 지워 버렸다. 그리고는 새로 시작하여 나와내 가족에게 대한 문안을 하고는 끝을 막았다. -나는 이 편지를 받고 울었다. 무슨 큰 비극이 가까운 것을 예상하게 하였다. -그 후 한 십여 일이나 지나서 전보가 왔다. 그것은 영문으로 씌었는데, -"아버지 병이 급하다. 나로는 어쩔 수 없다. 돈 가지고 곧 오기를 바란다." -하고 그 끝에 B호텔이라고 주소를 적었다. 전보 발신국이 이르쿠츠크인 것을 보니 B호텔이라 함은 이르쿠츠크인 것이 분명하였다. -나는 최석 부인에게 최석이가 아직 살아 있다는 것을 전하고 곧 여행권 수속을 하였다. 절망으로 알았던 여행권은 사정이 사정인만큼 곧 발부되었다. -나는 비행기로 여의도를 떠났다. 백설에 개개한 땅을, 남빛으로 푸른 바다를 굽어보는 동안에 대련을 들러 거기서 다른 비행기를 갈아타고 봉천, 신경, 하얼빈을 거쳐, 치치하얼에 들렀다가 만주리로 급행하였다. -웅대한 대륙의 설경도 나에게 아무러한 인상도 주지 못하였다. 다만 푸른 하늘과 희고 평평한 땅과의 사이로 한량 없이 허공을 날아간다는 생각밖에 없었다. 그것은 사랑하는 두 친구가 목숨이 경각에 달린 것을 생각할 때에 마음에 아무 여유도 없는 까닭이었다. -만주리에서도 비행기를 타려 하였으나 소비에트 관헌이 허락을 아니 하여 열차로 갈 수밖에 없었다. -초조한 몇 밤을 지나고 이르쿠츠크에 내린 것이 오전 두시. 나는 B호텔로 이스보스치카라는 마차를 몰았다. 죽음과 같이 고요하게 눈 속에 자는 시간에는 여기저기 전등이 반짝거릴 뿐, 이따금 밤의 시가를 경계하는 병정들의 눈이 무섭게 빛나는 것이 보였다. -B호텔에서 미스 초이(최 양)를 찾았으나 순임은 없고 어떤 서양 노파가 나와서, -"유 미스터 Y?" -하고 의심스러운 눈으로 나를 보았다. -그렇다는 내 대답을 듣고는 노파는 반갑게 손을 내밀어서 내 손을 잡았다. -나는 넉넉하지 못한 영어로 그 노파에게서 최석이가 아직 살았다는 말과 정임의 소식은 들은 지 오래라는 말과 최석과 순임은 여기서 삼십 마일이나 떨어진 F역에서도 썰매로 더 가는 삼림 속에 있다는 말을 들었다. -나는 그 밤을 여기서 지내고 이튿날 아침에 떠나는 완행차로 그 노파와 함께 이르쿠츠크를 떠났다. -이 날도 천지는 오직 눈뿐이었다. 차는 가끔 삼림 중으로 가는 모양이나 모두 회색빛에 가리워서 분명히 보이지를 아니하였다. -F역이라는 것은 삼림 속에 있는 조그마한 정거장으로 집이라고는 정거장 집밖에 없었다. 역부 두엇이 털옷에 하얗게 눈을 뒤쓰고 졸리는 듯이 오락가락할 뿐이었다. -우리는 썰매 하나를 얻어 타고 어디가 길인지 분명치도 아니한 눈 속으로 말을 몰았다. -바람은 없는 듯하지마는 그래도 눈발을 한편으로 비끼는 모양이어서 아름드리 나무들의 한쪽은 하얗게 눈으로 쌓이고 한쪽은 검은 빛이 더욱 돋보였다. 백 척은 넘을 듯한 꼿꼿한 침엽수(전나무 따윈가)들이 어디까지든지, 하늘에서 곧 내려박은 못 모양으로, 수없이 서 있는 사이로 우리 썰매는 간다. 땅에 덮인 눈은 새로 피워 놓은 솜같이 희지마는 하늘에서 내리는 눈은 구름빛과 공기빛과 어울려서 밥 잦힐 때에 굴뚝에서 나오는 연기와 같이 연회색이다. -바람도 불지 아니하고 새도 날지 아니하건마는 나무 높은 가지에 쌓인 눈이 이따금 덩치로 떨어져서는 고요한 수풀 속에 작은 동요를 일으킨다. -우리 썰매가 가는 길이 자연스러운 복잡한 커브를 도는 것을 보면 필시 얼음 언 개천 위로 달리는 모양이었다. -한 시간이나 달린 뒤에 우리 썰매는 늦은 경사지를 올랐다. 말을 어거하는 아라사 사람은 쭈쭈쭈쭈, 후르르 하고 주문을 외우듯이 입으로 말을 재촉하고 고삐를 이리 들고 저리 들어 말에게 방향을 가리킬 뿐이요, 채찍은 보이기만하고 한 번도 쓰지 아니하였다. 그와 말과는 완전히 뜻과 정이 맞는 동지인 듯하였다. -처음에는 몰랐으나 차차 추워짐을 깨달았다. 발과 무르팍이 시렸다. -"얼마나 머오?" -하고 나는 오래간만에 입을 열어서 노파에게 물었다. 노파는 털수건으로 머리를 싸매고 깊숙한 눈만 남겨 가지고 실신한 사람 모양으로 허공만 바라보고 있다가, 내가 묻는 말에 비로소 잠이나 깬 듯이, -"멀지 않소. 인젠 한 십오 마일." -하고는 나를 바라보았다. 그 눈은 아마 웃는 모양이었다. -그 얼굴, 그 눈, 그 음성이 모두 이 노파가 인생 풍파의 슬픈 일 괴로운 일에 부대끼고 지친 것을 표하였다. 그리고 죽는 날까지 살아간다 하는 듯하였다. -경사지를 올라서서 보니 그것은 한 산등성이였다. 방향은 알 수 없으나 우리가 가는 방향에는 더 높은 등성이가 있는 모양이나 다른 곳은 다 이보다 낮은 것 같아서 하얀 눈바다가 끝없이 보이는 듯하였다. 그 눈보라는 들쑹날쑹이 있는 것을 보면 삼림의 꼭대기인 것이 분명하였다. 더구나 여기저기 뾰족뾰족 눈송이 붙을 수 없는 마른 나뭇가지가 거뭇거뭇 보이는 것을 보아서 그러하였다. 만일 눈이 걷혀 주었으면 얼마나 안계가 넓으랴, 최석 군이 고민하는 가슴을 안고 이리로 헤매었구나 하면서 나는 목을 둘러서 사방을 바라보았다. -우리는 그 등성이를 내려갔다. 말이 미처 발을 땅에 놓을 수가 없는 정도로 빨리 내려갔다. 여기는 산불이 났던 자리인 듯하여 거뭇거뭇 불탄 자국 있는 마른 나무들이 드문드문 서 있었다. 그 나무들은 찍어 가는 사람도 없으매 저절로 썩어서 없어지기를 기다릴 수밖에 없었다. 그들은 나서 아주 썩어 버리기까지 천 년 이상은 걸린다고 하니 또한 장한 일이다. -이 대삼림에 불이 붙는다 하면 그것은 장관일 것이다. 달밤에 높은 곳에서 이 경치를 내려다본다 하면 그도 장관일 것이요, 여름에 한창 기운을 펼 때도 장관일 것이다. 나는 오뉴월경에 시베리아를 여행하는 이들이 끝없는 꽃바다를 보았다는 기록을 생각하였다. -"저기요!" -하는 노파의 말에 나는 생각의 줄을 끊었다. 저기라고 가리키는 곳을 보니 거기는 집이라고 생각되는 물건이 나무 사이로 보였다. 창이 있으니 분명 집이었다. -우리 이스보스치카가 가까이 오는 것을 보았는지, 그 집 같은 물건의 문 같은 것이 열리며 검은 외투 입은 여자 하나가 팔을 허우적거리며 뛰어나온다. 아마 소리도 치는 모양이겠지마는 그 소리는 아니 들렸다. 나는 그것이 순임인 줄을 얼른 알았다. 또 순임이밖에 될 사람도 없었다. -순임은 한참 달음박질로 오다가 눈이 깊어서 걸음을 걷기가 힘이 드는지 멈칫 섰다. 그의 검은 외투는 어느덧 흰 점으로 얼려져 가지고 어깨는 희게 되는 것이 보였다. -순임의 갸름한 얼굴이 보였다. -"선생님!" -하고 순임도 나를 알아보고는 또 팔을 허우적거리며 소리를 질렀다. -나도 반가워서 모자를 벗어 둘렀다. -"아이 선생님!" -하고 순임은 내가 썰매에서 일어서기도 전에 내게 와서 매달리며 울었다. -"아버지 어떠시냐?" -하고 나는 순임의 등을 두드렸다. 나는 다리가 마비가 되어서 곧 일어설 수가 없었다. -"아버지 어떠시냐?" -하고 나는 한 번 더 물었다. -순임은 벌떡 일어나 두 주먹으로 흐르는 눈물을 쳐내 버리며, -"대단하셔요." -하고도 울음을 금치 못하였다. -노파는 벌써 썰매에서 내려서 기운 없는 걸음으로 비틀비틀 걷기를 시작하였다. -나는 순임을 따라서 언덕을 오르며, -"그래 무슨 병환이시냐?" -하고 물었다. -"몰라요. 신열이 대단하셔요." -"정신은 차리시든?" -"처음 제가 여기 왔을 적에는 그렇지 않더니 요새에는 가끔 혼수 상태에 빠지시는 모양이야요." -이만한 지식을 가지고 나는 최석이가 누워 있는 집 앞에 다다랐다. -이 집은 통나무를 댓 개 우물 정자로 가로놓고 지붕은 무엇으로 했는지 모르나 눈이 덮이고, 문 하나 창 하나를 내었는데 문은 나무껍질인 모양이나 창은 젖빛 나는 유리창인 줄 알았더니 뒤에 알아본즉 그것은 유리가 아니요, 양목을 바르고 물을 뿜어서 얼려 놓은 것이었다. 그리고 통나무와 통나무 틈바구니에는 쇠털과 같은 마른 풀을 꼭꼭 박아서 바람을 막았다. -문을 열고 들어서니 부엌에 들어서는 모양으로 쑥 빠졌는데 화끈화끈하는 것이 한증과 같다. 그렇지 않아도 침침한 날에 언 눈으로 광선 부족한 방에 들어오니, 캄캄 절벽이어서 아무것도 보이지 아니하였다. -순임이가 앞서서 양초에 불을 켠다. 촛불 빛은 방 한편 쪽 침대라고 할 만한 높은 곳에 담요를 덮고 누운 최석의 시체와 같은 흰 얼굴을 비춘다. -"아버지, 아버지 샌전 아저씨 오셨어요." -하고 순임은 최석의 귀에 입을 대고 가만히 불렀다. -그러나 대답이 없었다. -나는 최석의 이마를 만져 보았다. 축축하게 땀이 흘렀다. 그러나 그리 더운 줄은 몰랐다. -방 안의 공기는 숨이 막힐 듯하였다. 그 난방 장치는 삼굿의 원리를 이용한 것이었다. 돌멩이로 아궁이를 쌓고 그 위에 큰 돌멩이들을 많이 쌓고 거기다가 불을 때어서 달게 한 뒤에 거기 눈을 부어 뜨거운 증기를 발하는 것이었다. -이 건축법은 조선 동포들이 시베리아로 금광을 찾아다니면서 하는 법이란 말을 들었으나 최석이가 누구에게서 배워 가지고 어떤 모양으로 지었는지는 최석의 말을 듣기 전에는 알 수 없는 일이다. -나는 내 힘이 미치는 데까지 최석의 병 치료에 대한 손을 쓰고 어떻게 해서든지 이르쿠츠크의 병원으로 최석을 데려다가 입원시킬 도리를 궁리하였다. 그러나 냉정하게 생각하면 최석은 살아날 가망이 없는 것만 같았다. -내가 간 지 사흘 만에 최석은 처음으로 정신을 차려서 눈을 뜨고 나를 알아보았다. -그는 반가운 표정을 하고 빙그레 웃기까지 하였다. -"다 일없나?" -이런 말도 알아들을 수가 있었다. -그러나 심히 기운이 없는 모양이기로 나는 많이 말을 하지 아니하였다. -최석은 한참이나 눈을 감고 있더니, -"정임이 소식 들었나?" -하였다. -"괜찮대요." -하고 곁에서 순임이가 말하였다. -그리고는 또 혼몽하는 듯하였다. -그 날 또 한 번 최석은 정신을 차리고 순임더러는 저리로 가라는 뜻을 표하고 나더러 귀를 가까이 대라는 뜻을 보이기로 그대로 하였더니, -"내 가방 속에 일기가 있으니 그걸 자네만 보고는 불살라 버려. 내가 죽은 뒤에라도 그것이 세상 사람의 눈에 들면 안 되지. 순임이가 볼까 걱정이 되지마는 내가 몸을 꼼짝할 수가 있나." -하는 뜻을 말하였다. -"그러지." -하고 나는 고개를 끄덕여 보였다. -그러고 난 뒤에 나는 최석이가 시킨 대로 가방을 열고 책들을 뒤져서 그 일기책이라는 공책을 꺼내었다. -"순임이 너 이거 보았니?" -하고 나는 곁에서 내가 책 찾는 것을 보고 섰던 순임에게 물었다. -"아니오. 그게 무어여요?" -하고 순임은 내 손에 든 책을 빼앗으려는 듯이 손을 내밀었다. -나는 순임의 손이 닿지 않도록 책을 한편으로 비키며, -"이것이 네 아버지 일기인 모양인데 너는 보이지 말고 나만 보라고 하셨다. 네 아버지가 네가 이것을 보았을까 해서 염려를 하시는데 안 보았으면 다행이다." -하고 나는 그 책을 들고 밖으로 나왔다. -날이 밝다. 해는 중천에 있다. 중천이래야 저 남쪽 지평선 가까운 데다. 밤이 열여덟 시간, 낮이 대여섯 시간밖에 안 되는 북쪽 나라다. 멀건 햇빛이다. -나는 볕이 잘 드는 곳을 골라서 나무에 몸을 기대고 최석의 일기를 읽기 시작하였다. 읽은 중에서 몇 구절을 골라 볼까. -"집이 다 되었다. 이 집은 내가 생전 살고 그 속에서 이 세상을 마칠 집이다. 마음이 기쁘다. 시끄러운 세상은 여기서 멀지 아니하냐. 내가 여기 홀로 있기로 누가 찾을 사람도 없을 것이다. 내가 여기서 죽기로 누가 슬퍼해 줄 사람도 없을 것이다. 때로 곰이나 찾아올까. 지나가던 사슴이나 들여다볼까. -이것이 내 소원이 아니냐. 세상의 시끄러움을 떠나는 것이 내 소원이 아니냐. 이 속에서 나는 나를 이기기를 공부하자." -첫날은 이런 평범한 소리를 썼다. -그 이튿날에는. -"어떻게나 나는 약한 사람인고. 제 마음을 제가 지배하지 못하는 사람인고. 밤새도록 나는 정임을 생각하였다. 어두운 허공을 향하여 정임을 불렀다. 정임이가 나를 찾아서 동경을 떠나서 이리로 오지나 아니하나 하고 생각하였다. 어떻게나 부끄러운 일인고? 어떻게나 가증한 일인고? -나는 아내를 생각하려 하였다. 아이들을 생각하려 하였다. 아내와 아이들을 생각함으로 정임의 생각을 이기려 하였다. -최석아, 너는 남편이 아니냐. 아버지가 아니냐. 정임은 네 딸이 아니냐. 이런 생각을 하였다. -그래도 정임의 일류전은 아내와 아이들의 생각을 밀치고 달려오는 절대 위력을 가진 듯하였다. -아, 나는 어떻게나 파렴치한 사람인고. 나이 사십이 넘어 오십을 바라보는 놈이 아니냐. 사십에 불혹이라고 아니 하느냐. 교육가로 깨끗한 교인으로 일생을 살아 왔다고 자처하는 내가 아니냐 하고 나는 내 입으로 내 손가락을 물어서 두 군데나 피를 내었다." -최석의 둘째 날 일기는 계속된다. -"내 손가락에서 피가 날 때에 나는 유쾌하였다. 나는 승첩의 기쁨을 깨달았다. -그러나 아아 그러나 그 빨간, 참회의 핏방울 속에서도 애욕의 불길이 일지 아니하는가. 나는 마침내 제도할 수 없는 인생인가." -이 집에 든 지 둘째날에 벌써 이러한 비관적 말을 하였다. -또 며칠을 지난 뒤 일기에, -"나는 동경으로 돌아가고 싶다. 정임의 곁으로 가고 싶다. 시베리아의광야의 유혹도 아무 힘이 없다. 어젯밤은 삼림의 좋은 달을 보았으나 그 달을 아름답게 보려 하였으나 아무리 하여도 아름답게 보이지를 아니하였다. -하늘이나 달이나 삼림이나 모두 무의미한 존재다. 이처럼 무의미한 존재를 나는 경험한 일이 없다. 그것은 다만 기쁨을 자아내지 아니할 뿐더러 슬픔도 자아내지 못하였다. 그것은 잿더미였다. 아무도 듣는 이 없는 데서 내 진정을 말하라면 그것은 이 천지에 내게 의미 있는 것은 정임이밖에 없다는 것이다. -나는 정임의 곁에 있고 싶다. 정임을 내 곁에 두고 싶다. 왜? 그것은 나도 모른다. -만일 이 움 속에라도 정임이가 있다 하면 얼마나 이것이 즐거운 곳이 될까. -그러나 이것은 불가능한 일이다. 이 일이 있어서는 아니 된다. 나는 이 생각을 죽여야 한다. 다시 거두를 못 하도록 목숨을 끊어 버려야 한다. -이것을 나는 원한다. 원하지마는 내게는 그 힘이 없는 모양이다. -나는 종교를 생각하여 본다. 철학을 생각하여 본다. 인류를 생각하여 본다. 나라를 생각하여 본다. 이것을 가지고 내 애욕과 바꾸려고 애써 본다. 그렇지마는 내게 그러한 힘이 없다. 나는 완전히 헬플리스함을 깨닫는다. -아아 나는 어찌할꼬? -나는 못생긴 사람이다. 그까짓 것을 못 이겨? 그까짓 것을 못 이겨? -나는 예수의 광야에서의 유혹을 생각한다. 천하를 주마 하는 유혹을 생각한다. 나는 싯다르타 태자가 왕궁을 버리고 나온 것을 생각하고, 또 스토아 철학자의 의지력을 생각하였다. -그러나 나는 그러한 생각으로도 이 생각을 이길 수가 없는 것 같다. -나는 혁명가를 생각하였다. 모든 것 사랑도 목숨도 다 헌신짝같이 집어던지고 피 흐르는 마당으로 뛰어나가는 용사를 생각하였다. 나는 이끝없는 삼림 속으로 혁명의 용사 모양으로 달음박질치다가 기운이 진한 곳에서 죽어 버리는 것이 소원이었다. 그러나 거기까지도 이 생각은 따르지 아니할까. -나는 지금 곧 죽어 버릴까. 나는 육혈포를 손에 들어 보았다. 이 방아쇠를 한 번만 튕기면 내 생명은 없어지는 것이 아닌가. 그리 되면 모든 이 마음의 움직임은 소멸되는 것이 아닌가. 이것으로 만사가 해결되는 것이 아닌가. -아 하나님이시여, 힘을 주시옵소서. 천하를 이기는 힘보다도 나 자신을 이기는 힘을 주시옵소서. 이 죄인으로 하여금 하나님의 눈에 의롭고 깨끗한 사람으로 이 일생을 마치게 하여 주시옵소서, 이렇게 나는 기도를 한다. -그러나 하나님께서는 나를 버리셨다. 하나님께서는 내게 힘을 주시지 아니하시었다. 나를 이 비참한 자리에서 썩어져 죽게 하시었다." -최석은 어떤 날 일기에 또 이런 것도 썼다. 그것은 예전 내게 보낸 편지에 있던 꿈 이야기를 연상시키는 것이었다. 그것은 이러하다. -"오늘 밤은 달이 좋다. 시베리아의 겨울 해는 참 못생긴 사람과도 같이 기운이 없지마는 하얀 땅, 검푸른 하늘에 저쪽 지평선을 향하고 흘러가는 반달은 참으로 맑음 그것이었다. -나는 평생 처음 시 비슷한 것을 지었다. -임과 이별하던 날 밤에는 남쪽 나라에 바람비가 쳤네 -임 타신 자동차의 뒷불이 빨간 뒷불이 빗발에 찢겼네 -임 떠나 혼자 헤매는 시베리아의 오늘 밤에는 -지려는 쪽달이 눈 덮인 삼림에 걸렸구나 -아아 저 쪽달이여 -억지로 반을 갈겨진 것도 같아라 -아아 저 쪽달이여 -잃어진 짝을 찾아 -차디찬 허공 속을 영원히 헤매는 것도 같구나 -나도 저 달과 같이 잃어버린 반쪽을 찾아 무궁한 시간과 공간에서 헤매는 것만 같다. -에익. 내가 왜 이리 약한가. 어찌하여 크나큰 많은 일을 돌아보지 못하고 요만한 애욕의 포로가 되는가. -그러나 나는 차마 그 달을 버리고 들어올 수가 없었다. 내가 왜 이렇게 센티멘털하게 되었는고. 내 쇠 같은 의지력이 어디로 갔는고. 내 누를 수 없는 자존심이 어디로 갔는고. 나는 마치 유모의 손에 달린 젖먹이와도 같다. 내 일신은 도시 애욕 덩어리로 화해 버린 것 같다. -이른바 사랑 사랑이란 말은 종교적 의미인 것 이외에도 입에 담기도 싫어하던 말이다 이런 것은 내 의지력과 자존심을 녹여 버렸는가. 또 이 부자연한 고독의 생활이 나를 이렇게 내 인격을 이렇게 파괴하였는가. -그렇지 아니하면 내 자존심이라는 것이나, 의지력이라는 것이나, 인격이라는 것이 모두 세상의 습관과 사조에 휩쓸리던 것인가. 남들이 그러니까 남들이 옳다니까 남들이 무서우니까 이 애욕의 무덤에 회를 발랐던 것인가. 그러다가 고독과 반성의 기회를 얻으매 모든 회칠과 가면을 떼어 버리고 빨가벗은 애욕의 뭉텅이가 나온 것인가. -그렇다 하면, 이것이 참된 나인가. 이것이 하나님께서 지어 주신 대로의 나인가. 가슴에 타오르는 애욕의 불길 이 불길이 곧 내 영혼의 불길인가. -어쩌면 그 모든 높은 이상들 인류에 대한, 민족에 대한, 도덕에 대한, 신앙에 대한 그 높은 이상들이 이렇게도 만만하게 마치 바람에 불리는 재 모양으로 자취도 없이 흩어져 버리고 말까. 그리고 그 뒤에는 평소에그렇게도 미워하고 천히 여기던 애욕의 검은 흙만 남고 말까. -아아 저 눈 덮인 땅이여, 차고 맑은 달이여, 허공이여! 나는 너희들을 부러워하노라. -불교도들의 해탈이라는 것이 이러한 애욕이 불붙는 지옥에서 눈과 같이 싸늘하고 허공과 같이 빈 곳으로 들어감을 이름인가. -석가의 팔 년 간 설산 고행이 이 애욕의 뿌리를 끊으려 함이라 하고 예수의 사십 일 광야의 고행과 겟세마네의 고민도 이 애욕의 뿌리 때문이었던가. -그러나 그것을 이기어 낸 사람이 천지 개벽 이래에 몇몇이나 되었는고? 나 같은 것이 그 중에 한 사람 되기를 바랄 수가 있을까. -나 같아서는 마침내 이 애욕의 불길에 다 타서 재가 되어 버릴 것만 같다. 아아 어떻게나 힘있고 무서운 불길인고." -이러한 고민의 자백도 있었다. -또 어떤 날 일기에는 최석은 이런 말을 썼다. -"나는 단연히 동경으로 돌아가기를 결심하였다." -그리고는 그 이튿날은, -"나는 단연히 동경으로 돌아가리란 결심을 한 것을 굳세게 취소한다. 나는 이러한 결심을 하는 나 자신을 굳세게 부인한다." -또 이런 말도 있다. -"나는 정임을 시베리아로 부르련다." -또 그 다음에는, -"아아 나는 하루바삐 죽어야 한다. 이 목숨을 연장하였다가는 무슨 일을 저지를는지 모른다. 나는 깨끗하게 나를 이기는 도덕적 인격으로 이 일생을 마쳐야 한다. 이 밖에 내 사업이 무엇이냐." -또 어떤 곳에는, -"아아 무서운 하룻밤이었다. 나는 지난 하룻밤을 누를 수 없는 애욕의 불길에 탔다. 나는 내 주먹으로 내 가슴을 두드리고 머리를 벽에 부딪쳤다. 나는 주먹으로 담벽을 두드려 손등이 터져서 피가 흘렀다. 나는 내 머리카락을 쥐어뜯었다. 나는 수없이 발을 굴렀다. 나는 이 무서운 유혹을 이기려고 내 몸을 아프게 하였다. 나는 견디다 못하여 문을 박차고 뛰어나갔다. 밖에는 달이 있고 눈이 있었다. 그러나 눈은 핏빛이요, 달은 찌그러진 것 같았다. 나는 눈 속으로 달음박질쳤다. 달을 따라서 엎드러지며 자빠지며 달음질쳤다. 나는 소리를 질렀다. 나는 미친 사람 같았다." -그러고는 어디까지 갔다가 어느 때에 어떠한 심경의 변화를 얻어 가지고 돌아왔다는 말은 쓰이지 아니하였으나 최석의 병의 원인을 설명하는 것 같았다. -"열이 나고 기침이 난다. 가슴이 아프다. 이것이 폐렴이 되어서 혼자 깨끗하게 이 생명을 마치게 하여 주소서 하고 빈다. 나는 오늘부터 먹고 마시기를 그치련다." -이러한 말을 썼다. 그러고는, -"정임, 정임, 정임, 정임." -하고 정임의 이름을 수없이 쓴 것도 있고, 어떤 데는, -"Overcome, Overcome." -하고 영어로 쓴 것도 있었다. -그리고 마지막에, -"나는 죽음과 대면하였다. 사흘째 굶고 앓은 오늘에 나는 극히 맑고 침착한 정신으로 죽음과 대면하였다. 죽음은 검은 옷을 입었으나 그 얼굴에는 자비의 표정이 있었다. 죽음은 곧 검은 옷을 입은 구원의 손이었다. 죽음은 아름다운 그림자였다. 죽음은 반가운 애인이요, 결코 무서운 원수가 아니었다. 나는 죽음의 손을 잡노라. 감사하는 마음으로 죽음의 품에 안기노라. 아멘." -이것을 쓴 뒤에는 다시는 일기가 없었다. 이것으로 최석이가 그 동안 지난 일을 적어도 심리적 변화만은 대강 추측할 수가 있었다. -다행히 최석의 병은 점점 돌리는 듯하였다. 열도 내리고 식은땀도 덜 흘렸다. 안 먹는다고 고집하던 음식도 먹기를 시작하였다. -정임에게로 갔던 노파에게서는 정임도 열이 내리고 일어나 앉을 만하다는 편지가 왔다. -나는 노파의 편지를 최석에게 읽어 주었다. 최석은 그 편지를 듣고 매우 흥분하는 모양이었으나 곧 안심하는 빛을 보였다. -나는 최석의 병이 돌리는 것을 보고 정임을 찾아볼 양으로 떠나려 하였으나 순임이가 듣지 아니하였다. 혼자서 앓는 아버지를 맡아 가지고 있을 수는 없다는 것이었다. 그래서 노파가 오기를 기다리기로 하였다. -나는 최석이가 먹을 음식도 살 겸 우편국에도 들를 겸 시가까지 가기로 하고 이 곳 온 지 일 주일이나 지나서 처음으로 산에서 나왔다. -나는 이르쿠츠크에 가서 최석을 위하여 약품과 먹을 것을 사고 또 순임을 위해서도 먹을 것과 의복과 또 하모니카와 손풍금도 사 가지고 정거장에 나와서 돌아올 차를 기다리고 있었다. -나는 순후해 보이는 아라사 사람들이 정거장에서 오락가락하는 것을 보고 속으로는 최석이가 병이 좀 나은 것을 다행으로 생각하고, 또 최석과 정임의 장래가 어찌 될까 하는 것도 생각하면서 뷔페(식당)에서 뜨거운 차이(차)를 마시고 있었다. -이 때에 밖을 바라보고 있던 내 눈은 문득 이상한 것을 보았다. 그것은 그 노파가 이리로 향하고 걸어오는 것인데 그 노파와 팔을 걸은 젊은 여자가 있는 것이다. 머리를 검은 수건으로 싸매고 입과 코를 가리웠으니 분명히 알 수 없으나 혹은 정임이나 아닌가 할 수밖에 없었다. 정임이가 몸만 기동하게 되면 최석을 보러 올 것은 정임의 열정적인 성격으로 보아서 당연한 일이기 때문이었다. -나는 반쯤 먹던 차를 놓고 뷔페 밖으로 뛰어나갔다. -"오 미시즈 체스터필드?" -하고 나는 노파 앞에 손을 내어밀었다. 노파는 체스터필드라는 미국 남편의 성을 따라서 부르는 것을 기억하였다. -"선생님!" -하는 것은 정임이었다. 그 소리만은 변치 아니하였다. 나는 검은 장갑을 낀 정임의 손을 잡았다. 나는 여러 말 아니하고 노파와 정임을 뷔페로 끌고 들어왔다. -늙은 뷔페 보이는 번쩍번쩍하는 사모바르에서 차 두 잔을 따라다가 노파와 정임의 앞에 놓았다. -노파는 어린애에게 하는 모양으로 정임의 수건을 벗겨 주었다. 그 속에서는 해쓱하게 여윈 정임의 얼굴이 나왔다. 두 볼에 불그레하게 홍훈이 도는 것도 병 때문인가. -"어때? 신열은 없나?" -하고 나는 정임에게 물었다. -"괜찮아요." -하고 정임은 웃으며, -"최 선생님께서는 어떠세요?" -하고 묻는다. -"좀 나으신 모양이야. 그래서 나는 오늘 정임을 좀 보러 가려고 했는데 이 체스터필드 부인께서 아니 오시면 순임이가 혼자 있을 수가 없다고 해서, 그래 이렇게 최 선생 자실 것을 사 가지고 가는 길이야." -하고 말을 하면서도 나는 정임의 눈과 입과 목에서 그의 병과 마음을 알아보려고 애를 썼다. -중병을 앓은 깐 해서는 한 달 전 남대문서 볼 때보다 얼마 더 초췌한 것 같지는 아니하였다. -"네에." -하고 정임은 고개를 숙였다. 그의 안경알에는 이슬이 맺혔다. -"선생님 댁은 다 안녕하셔요?" -"응, 내가 떠날 때에는 괜찮았어." -"최 선생님 댁도?" -"응." -"선생님 퍽은 애를 쓰셨어요." -하고 정임은 울음인지 웃음인지 모를 웃음을 웃는다. -말을 모르는 노파는 우리가 하는 말을 눈치나 채려는 듯이 멀거니 보고 있다가 서투른 영어로, -"아직 미스 남은 신열이 있답니다. 그래도 가 본다고, 죽어도 가 본다고 내 말을 안 듣고 따라왔지요." -하고 정임에게 애정 있는 눈흘김을 주며, -"유 노티 차일드(말썽꾼이)." -하고 입을 씰룩하며 정임을 안경 위로 본다. -"니체워, 마뚜슈까(괜찮아요, 어머니)." -하고 정임은 노파를 보고 웃었다. 정임의 서양 사람에게 대한 행동은 서양식으로 째었다고 생각하였다. -정임은 도리어 유쾌한 빛을 보였다. 다만 그의 붉은빛 띤 눈과 마른 입술이 그의 몸에 열이 있음을 보였다. 나는 그의 손끝과 발끝이 싸늘하게 얼었을 것을 상상하였다. -마침 이 날은 날이 온화하였다. 엷은 햇빛도 오늘은 두꺼워진 듯하였다. -우리 세 사람은 F역에서 내려서 썰매 하나를 얻어 타고 산으로 향하였다. 산도 아니지마는 산 있는 나라에서 살던 우리는 최석이가 사는 곳을 산이라고 부르는 습관을 지었다. 삼림이 있으니 산같이 생각된 까닭이었다. -노파가 오른편 끝에 앉고, 가운데다가 정임을 앉히고 왼편 끝에 내가 앉았다. -쩟쩟쩟 하는 소리에 말은 달리기 시작하였다. 한 필은 키 큰 말이요, 한 필은 키가 작은 말인데 키 큰 말은 아마 늙은 군마 퇴물인가 싶게 허우대는 좋으나 몸이 여위고 털에는 윤이 없었다. 조금만 올라가는 길이 되어도 고개를 숙이고 애를 썼다. 작은 말은 까불어서 가끔 채찍으로 얻어맞았다. -"아이 삼림이 좋아요." -하고 정임은 정말 기쁜 듯이 나를 돌아보았다. -"좋아?" -하고 나는 멋없이 대꾸하고 나서, 후회되는 듯이, -"밤낮 삼림 속에서만 사니까 지루한데." -하는 말을 붙였다. -"저는 저 눈 있는 삼림 속으로 한정 없이 가고 싶어요. 그러나 저는 인제 기운이 없으니깐 웬걸 그래 보겠어요?" -하고 한숨을 쉬었다. -"왜 그런 소릴 해. 인제 나을걸." -하고 나는 정임의 눈을 들여다보았다. 마치 슬픈 눈물 방울이나 찾으려는 듯이. -"제가 지금도 열이 삼십팔 도가 넘습니다. 정신이 흐릿해지는 것을 보니까 아마 더 올라가나 봐요. 그래도 괜찮아요. 오늘 하루야 못 살라고요. 오늘 하루만 살면 괜찮아요. 최 선생님만 한 번 뵙고 죽으면 괜찮아요." -"왜 그런 소릴 해?" -하고 나는 책망하는 듯이 언성을 높였다. -정임은 기침을 시작하였다. 한바탕 기침을 하고는 기운이 진한 듯이 노파에게 기대며 조선말로, -"추워요." -하였다. 이 여행이 어떻게 정임의 병에 좋지 못할 것은 의사가 아닌 나로도 짐작할 수가 있었다. 그러나 나로는 더 어찌할 수가 없었다. -나는 외투를 벗어서 정임에게 입혀 주고 노파는 정임을 안아서 몸이 덜 흔들리도록 또 춥지 않도록 하였다. -나는 정임의 모양을 애처로워서 차마 볼 수가 없었다. 그러나 이것은 하나님밖에는 어찌할 도리가 없는 일이었다. -얼마를 지나서 정임은 갑자기 고개를 들고 일어나며, -"인제 몸이 좀 녹았습니다. 선생님 추우시겠어요. 이 외투 입으셔요." -하고 그의 입만 웃는 웃음을 웃었다. -"난 춥지 않아. 어서 입고 있어." -하고 나는 정임이가 외투를 벗는 것을 막았다. 정임은 더 고집하려고도 아니하고, -"선생님 시베리아의 삼림은 참 좋아요. 눈 덮인 것이 더 좋은 것 같아요. 저는 이 인적 없고 자유로운 삼림 속으로 헤매어 보고 싶어요." -하고 아까 하던 것과 같은 말을 또 하였다. -"며칠 잘 정양하여서, 날이나 따뜻하거든 한 번 산보나 해 보지." -하고 나는 정임의 말 뜻이 다른 데 있는 줄을 알면서도 부러 평범하게 대답하였다. -정임은 대답이 없었다. -"여기서도 아직 멀어요?" -하고 정임은 몸이 흔들리는 것을 심히 괴로워하는 모양으로 두 손을 자리에 짚어 몸을 버티면서 말하였다. -"고대야, 최 선생이 반가워할 터이지. 오죽이나 반갑겠나." -하고 나는 정임을 위로하는 뜻으로 말하였다. -"아이 참 미안해요. 제가 죄인이야요. 저 때문에 애매한 누명을 쓰시고 저렇게 사업도 버리시고 병환까지 나시니 저는 어떡허면 이 죄를 씻습니까?" -하고 눈물 고인 눈으로 정임은 나를 쳐다보았다. -나는 정임과 최석을 이 자유로운 시베리아의 삼림 속에 단둘이 살게 하고 싶었다. 그러나 최석은 살아나가겠지마는 정임이가 살아날 수가 있을까, 하고 나는 정임의 어깨를 바라보았다. 그의 목숨은 실낱 같은 것 같았다. 바람받이에 놓인 등잔불과만 같은 것 같았다. 이 목숨이 끊어지기 전에 사랑하는 이의 얼굴을 한 번 대하겠다는 것밖에 아무 소원이 없는 정임은 참으로 가엾어서 가슴이 미어지는 것 같았다. -"염려 말어. 무슨 걱정이야? 최 선생도 병이 돌리고 정임도 인제 얼마 정양하면 나을 것 아닌가. 아무 염려 말아요." -하고 나는 더욱 최석과 정임과 두 사람의 사랑을 달하게 할 결심을 하였다. 하나님께서 계시다면 이 가엾은 간절한 두 사람의 마음을 가슴 미어지게 아니 생각할 리가 없다고 생각하였다. 우주의 모든 일 중에 정임의 정경보다 더 슬프고 불쌍한 정경이 또 있을까 하였다. 차디찬 눈으로 덮인 시베리아의 광야에 병든 정임의 사랑으로 타는 불똥과 같이 날아가는 이 정경은 인생이 가질 수 있는 최대한 비극인 것 같았다. -정임은 지쳐서 고개를 숙이고 있다가도 가끔 고개를 들어서는 기운 나는 양을 보이려고, 유쾌한 양을 보이려고 애를 썼다. -"저 나무 보셔요. 오백 년은 살았겠지요?" -이런 말도 하였다. 그러나 그것은 다 억지로 지어서 하는 것이었다. 그러다가는 또 기운이 지쳐서는 고개를 숙이고, 혹은 노파의 어깨에 혹은 내 어깨에 쓰러졌다. -마침내 우리가 향하고 가는 움집이 보였다. -"정임이, 저기야." -하고 나는 움집을 가리켰다. -"네에?" -하고 정임은 내 손가락 가는 곳을 보고 다음에는 내 얼굴을 보았다. 잘 보이지 않는 모양이다. -"저기 저것 말야. 저기 저 고작 큰 전나무 두 개가 있지 않아? 그 사이로 보이는 저, 저거 말야. 옳지 옳지, 순임이 지금 나오지 않아?" -하였다. -순임이가 무엇을 가지러 나오는지 문을 열고 나와서는 밥 짓느라고 지어 놓은 이를테면 부엌에를 들어갔다가 나오는 길에 이 쪽을 바라보다가 우리를 발견하였는지 몇 걸음 빨리 오다가는 서서 보고 오다가는 서서 보더니 내가 모자를 내두르는 것을 보고야 우리 일행인 것을 확실히 알고 달음박질을 쳐서 나온다. -우리 썰매를 만나자, -"정임이야? 어쩌면 이 추운데." -하고 순임은 정임을 안고 그 안경으로 정임의 눈을 들여다본다. -"어쩌면 앓으면서 이렇게 와?" -하고 순임은 노파와 나를 책망하는 듯이 돌아보았다. -"아버지 어떠시냐?" -하고 나는 짐을 들고 앞서서 오면서 뒤따르는 순임에게 물었다. -"아버지요?" -하고 순임은 어른에게 대한 경의를 표하노라고 내 곁에 와서 걸으며, -"아버지께서 오늘은 말씀을 많이 하셨어요. 순임이가 고생하는구나 고맙다, 이런 말씀도 하시고, 지금 같아서는 일어날 것도 같은데 기운이 없어서, 이런 말씀도 하시고, 또 선생님이 이르쿠츠크에를 들어가셨으니 무엇을 사 오실 듯싶으냐, 알아맞혀 보아라, 이런 농담도 하시고, 정임이가 어떤가 한 번 보았으면, 이런 말씀도 하시겠지요. 또 순임아, 내가 죽더라도 정임을 네 친동생으로 알아서 부디 잘 사랑해 주어라, 정임은 불쌍한 애다, 참 정임은 불쌍해! 이런 말씀도 하시겠지요. 그렇게 여러 가지 말씀을 많이 하시더니, 순임아 내가 죽거든 선생님을 아버지로 알고 그 지도를 받아라, 그러시길래 제가 아버지 안 돌아가셔요! 그랬더니 아버지께서 웃으시면서, 죽지 말까, 하시고는 어째 가슴이 좀 거북한가, 하시더니 잠이 드셨어요. 한 시간이나 되었을까, 온." -집 앞에 거의 다 가서는 순임은 정임의 팔을 꼈던 것을 놓고 빨리 집으로 뛰어들어갔다. -치마폭을 펄럭거리고 뛰는 양에는 어렸을 적 말괄량이 순임의 모습이 남아 있어서 나는 혼자 웃었다. 순임은 정임이가 왔다는 기쁜 소식을 한 시각이라도 빨리 아버지께 전하고 싶었던 것이다. -"아버지, 주무시우? 정임이가 왔어요. 정임이가 왔습니다." -하고 부르는 소리가 밖에서도 들렸다. -나도 방에 들어서고, 정임도 뒤따라 들어서고, 노파는 부엌으로 물건을 두러 들어갔다. -방은 절벽같이 어두웠다. -"순임아, 불을 좀 켜려무나." -하고 최석의 얼굴을 찾느라고 눈을 크게 뜨고 고개를 숙이며, -"자나? 정임이가 왔네." -하고 불렀다. -정임도 곁에 와서 선다. -최석은 대답이 없었다. -순임이가 촛불을 켜자 최석의 얼굴이 환하게 보였다. -"여보게, 여봐. 자나?" -하고 나는 무서운 예감을 가지면서 최석의 어깨를 흔들었다. -그것이 무엇인지 모르지마는 최석은 시체라 하는 것을 나는 내 손을 통해서 깨달았다. -나는 깜짝 놀라서 이불을 벗기고 최석의 팔을 잡아 맥을 짚어 보았다. 거기는 맥이 없었다. -나는 최석의 자리옷 가슴을 헤치고 귀를 가슴에 대었다. 그 살은 얼음과 같이 차고 그 가슴은 고요하였다. 심장은 뛰기를 그친 것이었다. -나는 최석의 가슴에서 귀를 떼고 일어서면서, -"네 아버지는 돌아가셨다. 네 손으로 눈이나 감겨 드려라." -하였다. 내 눈에서는 눈물이 흘렀다. -"선생님!" -하고 정임은 전연히 절제할 힘을 잃어버린 듯이 최석의 가슴에 엎어졌다. 그러고는 소리를 내어 울었다. 순임은, -"아버지, 아버지!" -하고 최석의 베개 곁에 이마를 대고 울었다. -아라사 노파도 울었다. -방 안에는 오직 울음 소리뿐이요, 말이 없었다. 최석은 벌써 이 슬픈 광경도 몰라보는 사람이었다. -최석이가 자기의 싸움을 이기고 죽었는지, 또는 끝까지 지다가 죽었는지 그것은 영원한 비밀이어서 알 도리가 없었다. 그러나 이것만은 확실하다 그의 의식이 마지막으로 끝나는 순간에 그의 의식기에 떠오르던 오직 하나가 정임이었으리라는 것만은. -지금 정임이가 그의 가슴에 엎어져 울지마는, 정임의 뜨거운 눈물이 그의 가슴을 적시건마는 최석의 가슴은 뛸 줄을 모른다. 이것이 죽음이란 것이다. -뒤에 경찰의가 와서 검사한 결과에 의하면, 최석은 폐렴으로 앓던 결과로 심장마비를 일으킨 것이라고 하였다. -나는 최석의 장례를 끝내고 순임과 정임을 데리고 오려 하였으나 정임은 듣지 아니하고 노파와 같이 바이칼 촌으로 가 버렸다. -그런 뒤로는 정임에게서는 일체 음신이 없다. 때때로 노파에게서 편지가 오는데 정임은 최석이가 있던 방에 가만히 있다고만 하였다. -서투른 영어가 뜻을 충분히 발표하지 못하는 것이었다. -나는 정임에게 안심하고 병을 치료하라는 편지도 하고 돈이 필요하거든 청구하라는 편지도 하나 영 답장이 없다. -만일 정임이가 죽었다는 기별이 오면 나는 한 번 더 시베리아에 가서 둘을 가지런히 묻고 `두 별 무덤'이라는 비를 세워 줄 생각이다. 그러나 나는 정임이가 조선으로 오기를 바란다. -여러분은 최석과 정임에게 대한 이 기록을 믿고 그 두 사람에게 대한 오해를 풀라. -EOT; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php deleted file mode 100644 index f8967ffe..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php +++ /dev/null @@ -1,209 +0,0 @@ -generator->parse($format); - } - - public static function country() - { - return static::randomElement(static::$country); - } - - public static function postcode() - { - return static::toUpper(static::bothify(static::randomElement(static::$postcode))); - } - - public static function regionSuffix() - { - return static::randomElement(static::$regionSuffix); - } - - public static function region() - { - return static::randomElement(static::$region); - } - - public static function citySuffix() - { - return static::randomElement(static::$citySuffix); - } - - public function city() - { - return static::randomElement(static::$city); - } - - public static function streetSuffix() - { - return static::randomElement(static::$streetSuffix); - } - - public static function street() - { - return static::randomElement(static::$street); - } - - /** - * Lithuania municipality - * - * @see https://en.wikipedia.org/wiki/Municipality - * - * @return string - */ - public function municipality() - { - return static::randomElement(static::$municipality); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php deleted file mode 100644 index 89370b3d..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php +++ /dev/null @@ -1,15 +0,0 @@ -generator->parse(static::randomElement(static::$lastNameFormat)); - } - - /** - * Return male last name - * - * @return string - * - * @example 'Vasiliauskas' - */ - public function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - /** - * Return female last name - * - * @return string - * - * @example 'Žukauskaitė' - */ - public function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } - - /** - * Return driver license number - * - * @return string - * - * @example 12345678 - */ - public function driverLicence() - { - return $this->bothify('########'); - } - - /** - * Return passport number - * - * @return string - * - * @example 12345678 - */ - public function passportNumber() - { - return $this->bothify('########'); - } - - /** - * National Personal Identity number (asmens kodas) - * - * @see https://en.wikipedia.org/wiki/National_identification_number#Lithuania - * @see https://lt.wikipedia.org/wiki/Asmens_kodas - * - * @param string $gender [male|female] - * @param \DateTime $birthdate - * @param string $randomNumber three integers - * - * @return string on format XXXXXXXXXXX - */ - public function personalIdentityNumber($gender = 'male', \DateTime $birthdate = null, $randomNumber = '') - { - if (!$birthdate) { - $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury(); - } - - $genderNumber = ($gender == 'male') ? 1 : 0; - $firstNumber = (int) floor($birthdate->format('Y') / 100) * 2 - 34 - $genderNumber; - - $datePart = $birthdate->format('ymd'); - $randomDigits = (string) (!$randomNumber || strlen($randomNumber) < 3) ? static::numerify('###') : substr($randomNumber, 0, 3); - $partOfPerosnalCode = $firstNumber . $datePart . $randomDigits; - - $sum = self::calculateSum($partOfPerosnalCode, 1); - $liekana = $sum % 11; - - if ($liekana !== 10) { - $lastNumber = $liekana; - - return $firstNumber . $datePart . $randomDigits . $lastNumber; - } - - $sum = self::calculateSum($partOfPerosnalCode, 2); - $liekana = $sum % 11; - - $lastNumber = ($liekana !== 10) ? $liekana : 0; - - return $firstNumber . $datePart . $randomDigits . $lastNumber; - } - - /** - * Calculate the sum of personal code - * - * @see https://en.wikipedia.org/wiki/National_identification_number#Lithuania - * @see https://lt.wikipedia.org/wiki/Asmens_kodas - * - * @param string $numbers - * @param int $time [1|2] - * - * @return int - */ - private static function calculateSum($numbers, $time = 1) - { - if ($time == 1) { - $multipliers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]; - } else { - $multipliers = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3]; - } - - $sum = 0; - - for ($i = 1; $i <= 10; ++$i) { - $sum += ((int) $numbers[$i - 1]) * $multipliers[$i - 1]; - } - - return (int) $sum; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php deleted file mode 100644 index 05e32d31..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php +++ /dev/null @@ -1,17 +0,0 @@ -generator->parse($format); - } - - public static function country() - { - return static::randomElement(static::$country); - } - - public static function postcode() - { - return static::toUpper(static::bothify(static::randomElement(static::$postcode))); - } - - public static function regionSuffix() - { - return static::randomElement(static::$regionSuffix); - } - - public static function region() - { - return static::randomElement(static::$region); - } - - public static function cityPrefix() - { - return static::randomElement(static::$cityPrefix); - } - - public function city() - { - return static::randomElement(static::$city); - } - - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - public static function street() - { - return static::randomElement(static::$street); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php deleted file mode 100644 index 04c895fb..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php +++ /dev/null @@ -1,19 +0,0 @@ -format('dmy'); - $randomDigits = (string) static::numerify('####'); - - $checksum = Luhn::computeCheckDigit($datePart . $randomDigits); - - return $datePart . '-' . $randomDigits . $checksum; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php deleted file mode 100644 index 2cfdcb5a..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php +++ /dev/null @@ -1,15 +0,0 @@ - static::latitude(42.43, 42.45), - 'longitude' => static::longitude(19.16, 19.27), - ]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Company.php deleted file mode 100644 index 2483c20f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/me_ME/Company.php +++ /dev/null @@ -1,49 +0,0 @@ -generator->parse(static::$idNumberFormat)); - } - - /** - * @return string - * - * @example 'Ф' - */ - public function alphabet() - { - return static::randomElement(static::$alphabet); - } - - /** - * @return string - * - * @example 'Э' - */ - public function namePrefix() - { - return static::randomElement(static::$namePrefix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php deleted file mode 100644 index b6706f3f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php +++ /dev/null @@ -1,13 +0,0 @@ - Townships - * @see https://en.wikipedia.org/wiki/Template:Johor > Townships - * @see https://en.wikipedia.org/wiki/Template:Kedah > Townships - * @see https://en.wikipedia.org/wiki/Template:Kelantan > Townships - * @see https://en.wikipedia.org/wiki/Template:Melaka > Townships - * @see https://en.wikipedia.org/wiki/Template:Negeri_Sembilan > Townships - * @see https://en.wikipedia.org/wiki/Template:Perak > Townships - * @see https://en.wikipedia.org/wiki/Template:Penang > Townships - * @see https://en.wikipedia.org/wiki/Template:Selangor > Townships - * @see https://en.wikipedia.org/wiki/Template:Terengganu > Townships - */ - protected static $townshipPrefix = [ - 'Alam', 'Apartment', 'Ara', - 'Bandar', 'Bandar', 'Bandar', 'Bandar', 'Bandar', 'Bandar', - 'Bandar Bukit', 'Bandar Seri', 'Bandar Sri', 'Bandar Baru', 'Batu', 'Bukit', - 'Desa', 'Damansara', - 'Kampung', 'Kampung Baru', 'Kampung Baru', 'Kondominium', 'Kota', - 'Laman', 'Lembah', - 'Medan', - 'Pandan', 'Pangsapuri', 'Petaling', 'Puncak', - 'Seri', 'Sri', - 'Taman', 'Taman', 'Taman', 'Taman', 'Taman', 'Taman', - 'Taman Desa', - ]; - protected static $townshipSuffix = [ - 'Aman', 'Amanjaya', 'Anggerik', 'Angkasa', 'Antarabangsa', 'Awan', - 'Bahagia', 'Bangsar', 'Baru', 'Belakong', 'Bendahara', 'Bestari', 'Bintang', 'Brickfields', - 'Casa', 'Changkat', 'Country Heights', - 'Damansara', 'Damai', 'Dato Harun', 'Delima', 'Duta', - 'Flora', - 'Gembira', 'Genting', - 'Harmoni', 'Hartamas', - 'Impian', 'Indah', 'Intan', - 'Jasa', 'Jaya', - 'Keramat', 'Kerinchi', 'Kiara', 'Kinrara', 'Kuchai', - 'Laksamana', - 'Mahkota', 'Maluri', 'Manggis', 'Maxwell', 'Medan', 'Melawati', 'Menjalara', 'Meru', 'Mulia', 'Mutiara', - 'Pahlawan', 'Perdana', 'Pertama', 'Permai', 'Pelangi', 'Petaling', 'Pinang', 'Puchong', 'Puteri', 'Putra', - 'Rahman', 'Rahmat', 'Raya', 'Razak', 'Ria', - 'Saujana', 'Segambut', 'Selamat', 'Selatan', 'Semarak', 'Sentosa', 'Seputeh', 'Setapak', 'Setia Jaya', 'Sinar', 'Sungai Besi', 'Sungai Buaya', 'Sungai Long', 'Suria', - 'Tasik Puteri', 'Tengah', 'Timur', 'Tinggi', 'Tropika', 'Tun Hussein Onn', 'Tun Perak', 'Tunku', - 'Ulu', 'Utama', 'Utara', - 'Wangi', - ]; - - /** - * @see https://en.wikipedia.org/wiki/Template:Greater_Kuala_Lumpur - * @see https://en.wikipedia.org/wiki/Template:Johor - * @see https://en.wikipedia.org/wiki/Template:Kedah - * @see https://en.wikipedia.org/wiki/Template:Kelantan - * @see https://en.wikipedia.org/wiki/Template:Labuan - * @see https://en.wikipedia.org/wiki/Template:Melaka - * @see https://en.wikipedia.org/wiki/Template:Negeri_Sembilan - * @see https://en.wikipedia.org/wiki/Template:Pahang - * @see https://en.wikipedia.org/wiki/Template:Perak - * @see https://en.wikipedia.org/wiki/Template:Perlis - * @see https://en.wikipedia.org/wiki/Template:Penang - * @see https://en.wikipedia.org/wiki/Template:Sabah - * @see https://en.wikipedia.org/wiki/Template:Sarawak - * @see https://en.wikipedia.org/wiki/Template:Selangor - * @see https://en.wikipedia.org/wiki/Template:Terengganu - */ - protected static $towns = [ - 'johor' => [ - 'Ayer Hitam', - 'Batu Pahat', 'Bukit Gambir', 'Bukit Kepong', 'Bukit Naning', - 'Desaru', - 'Endau', - 'Gelang Patah', 'Gemas Baharu', - 'Iskandar Puteri', - 'Jementah', 'Johor Lama', 'Johor Bahru', - 'Kempas', 'Kluang', 'Kota Iskandar', 'Kota Tinggi', 'Kukup', 'Kulai', - 'Labis ', 'Larkin', 'Layang-Layang', - 'Mersing', 'Muar', - 'Pagoh', 'Paloh', 'Parit Jawa', 'Pasir Gudang', 'Pekan Nanas', 'Permas Jaya', 'Pontian Kechil', - 'Renggam', - 'Segamat', 'Senai', 'Simpang Renggam', 'Skudai', 'Sri Gading', - 'Tangkak', 'Tebrau', - 'Ulu Tiram', - 'Yong Peng', - ], - 'kedah' => [ - 'Alor Setar', - 'Baling', 'Bukit Kayu Hitam', - 'Changlun', - 'Durian Burung', - 'Gurun', - 'Jitra', - 'Kepala Batas', 'Kuah', 'Kuala Kedah', 'Kuala Ketil', 'Kulim', - 'Langgar', 'Lunas', - 'Merbok', - 'Padang Serai', 'Pendang', - 'Serdang', 'Sintok', 'Sungai Petani', - 'Tawar, Baling', - 'Yan', - ], - 'kelantan' => [ - 'Bachok', 'Bunut Payong', - 'Dabong', - 'Gua Musang', - 'Jeli', - 'Ketereh', 'Kota Bharu', 'Kuala Krai', - 'Lojing', - 'Machang', - 'Pasir Mas', 'Pasir Puteh', - 'Rantau Panjang', - 'Salor', - 'Tok Bali', - 'Wakaf Bharu', 'Wakaf Che Yeh', - ], - 'kl' => [ - 'Ampang', - 'Bandar Tasik Selatan', 'Bandar Tun Razak', 'Bangsar', 'Batu', 'Brickfields', 'Bukit Bintang', 'Bukit Jalil', 'Bukit Tunku', - 'Cheras', 'Chow Kit', - 'Damansara Town Centre', 'Dang Wangi', 'Desa Petaling', 'Desa Tun Hussein Onn', - 'Jinjang', - 'Kampung Baru', 'Kampung Kasipillay', 'Kampung Pandan', 'Kampung Sungai Penchala', 'Kepong', 'KLCC', 'Kuchai Lama', - 'Lake Gardens', 'Lembah Pantai', - 'Medan Tuanku', 'Mid Valley City', 'Mont Kiara', - 'Pantai Dalam', 'Pudu', - 'Salak South', 'Segambut', 'Semarak', 'Sentul', 'Setapak', 'Setiawangsa', 'Seputeh', 'Sri Hartamas', 'Sri Petaling', 'Sungai Besi', - 'Taman Desa', 'Taman Melawati', 'Taman OUG', 'Taman Tun Dr Ismail', 'Taman U-Thant', 'Taman Wahyu', 'Titiwangsa', 'Tun Razak Exchange', - 'Wangsa Maju', - ], - 'labuan' => [ - 'Batu Manikar', - 'Kiamsam', - 'Layang-Layang', - 'Rancha-Rancha', - ], - 'melaka' => [ - 'Alor Gajah', - 'Bandaraya Melaka', 'Batu Berendam', 'Bukit Beruang', 'Bukit Katil', - 'Cheng', - 'Durian Tunggal', - 'Hang Tuah Jaya', - 'Jasin', - 'Klebang', - 'Lubuk China', - 'Masjid Tanah', - 'Naning', - 'Pekan Asahan', - 'Ramuan China', - 'Simpang Ampat', - 'Tanjung Bidara', 'Telok Mas', - 'Umbai', - ], - 'nsembilan' => [ - 'Ayer Kuning', 'Ampangan', - 'Bahau', 'Batang Benar', - 'Chembong', - 'Dangi', - 'Gemas', - 'Juasseh', - 'Kuala Pilah', - 'Labu', 'Lenggeng', 'Linggi', - 'Mantin', - 'Nilai', - 'Pajam', 'Pedas', 'Pengkalan Kempas', 'Port Dickson', - 'Rantau', 'Rompin', - 'Senawang', 'Seremban', 'Sungai Gadut', - 'Tampin', 'Tiroi', - ], - 'pahang' => [ - 'Bandar Tun Razak', 'Bentong', 'Brinchang', 'Bukit Fraser', 'Bukit Tinggi', - 'Chendor', - 'Gambang', 'Genting Highlands', 'Genting Sempah', - 'Jerantut', - 'Karak', 'Kemayan', 'Kota Shahbandar', 'Kuala Lipis', 'Kuala Pahang', 'Kuala Rompin', 'Kuantan', - 'Lanchang', 'Lubuk Paku', - 'Maran', 'Mengkuang', 'Mentakab', - 'Nenasi', - 'Panching', - 'Pekan', 'Penor', - 'Raub', - 'Sebertak', 'Sungai Lembing', - 'Tanah Rata', 'Tanjung Sepat', 'Tasik Chini', 'Temerloh', 'Teriang', 'Tringkap', - ], - 'penang' => [ - 'Air Itam', - 'Balik Pulau', 'Batu Ferringhi', 'Batu Kawan', 'Bayan Lepas', 'Bukit Mertajam', 'Butterworth', - 'Gelugor', 'George Town', - 'Jelutong', - 'Kepala Batas', - 'Nibong Tebal', - 'Permatang Pauh', 'Pulau Tikus', - 'Simpang Ampat', - 'Tanjung Bungah', 'Tanjung Tokong', - ], - 'perak' => [ - 'Ayer Tawar', - 'Bagan Serai', 'Batu Gajah', 'Behrang', 'Bidor', 'Bukit Gantang', 'Bukit Merah', - 'Changkat Jering', 'Chemor', 'Chenderiang', - 'Damar Laut', - 'Gerik', 'Gopeng', 'Gua Tempurung', - 'Hutan Melintang', - 'Ipoh', - 'Jelapang', - 'Kamunting', 'Kampar', 'Kuala Kangsar', - 'Lekir', 'Lenggong', 'Lumut', - 'Malim Nawar', 'Manong', 'Menglembu', - 'Pantai Remis', 'Parit', 'Parit Buntar', 'Pasir Salak', 'Proton City', - 'Simpang Pulai', 'Sitiawan', 'Slim River', 'Sungai Siput', 'Sungkai', - 'Taiping', 'Tambun', 'Tanjung Malim', 'Tanjung Rambutan', 'Tapah', 'Teluk Intan', - 'Ulu Bernam', - ], - 'perlis' => [ - 'Arau', - 'Beseri', - 'Chuping', - 'Kaki Bukit', 'Kangar', 'Kuala Perlis', - 'Mata Ayer', - 'Padang Besar', - 'Sanglang', 'Simpang Empat', - 'Wang Kelian', - ], - 'putrajaya' => [ - 'Precinct 1', 'Precinct 4', 'Precinct 5', - 'Precinct 6', 'Precinct 8', 'Precinct 10', - 'Precinct 11', 'Precinct 12', 'Precinct 13', - 'Precinct 16', 'Precinct 18', 'Precinct 19', - ], - 'sabah' => [ - 'Beaufort', 'Bingkor', - 'Donggongon', - 'Inanam', - 'Kinabatangan', 'Kota Belud', 'Kota Kinabalu', 'Kuala Penyu', 'Kimanis', 'Kundasang', - 'Lahad Datu', 'Likas', 'Lok Kawi', - 'Manggatal', - 'Nabawan', - 'Papar', 'Pitas', - 'Ranau', - 'Sandakan', 'Sapulut', 'Semporna', 'Sepanggar', - 'Tambunan', 'Tanjung Aru', 'Tawau', 'Tenom', 'Tuaran', - 'Weston', - ], - 'sarawak' => [ - 'Asajaya', - 'Ba\'kelalan', 'Bario', 'Batu Kawa', 'Batu Niah', 'Betong', 'Bintulu', - 'Dalat', 'Daro', - 'Engkilili', - 'Julau', - 'Kapit', 'Kota Samarahan', 'Kuching', - 'Lawas', 'Limbang', 'Lubok Antu', - 'Marudi', 'Matu', 'Miri', - 'Oya', - 'Pakan', - 'Sadong Jaya', 'Sematan', 'Sibu', 'Siburan', 'Song', 'Sri Aman', 'Sungai Tujoh', - 'Tanjung Kidurong', 'Tanjung Manis', 'Tatau', - ], - 'selangor' => [ - 'Ampang', 'Assam Jawa', - 'Balakong', 'Bandar Baru Bangi', 'Bandar Baru Selayang', 'Bandar Sunway', 'Bangi', 'Banting', 'Batang Kali', 'Batu Caves', 'Bestari Jaya', 'Bukit Lanjan', - 'Cheras', 'Cyberjaya', - 'Damansara', 'Dengkil', - 'Ijok', - 'Jenjarom', - 'Kajang', 'Kelana Jaya', 'Klang', 'Kuala Kubu Bharu', 'Kuala Selangor', 'Kuang', - 'Lagong', - 'Morib', - 'Pandamaran', 'Paya Jaras', 'Petaling Jaya', 'Port Klang', 'Puchong', - 'Rasa', 'Rawang', - 'Salak Tinggi', 'Sekinchan', 'Selayang', 'Semenyih', 'Sepang', 'Serendah', 'Seri Kembangan', 'Shah Alam', 'Subang', 'Subang Jaya', 'Sungai Buloh', - 'Tanjung Karang', 'Tanjung Sepat', - 'Ulu Klang', 'Ulu Yam', - ], - 'terengganu' => [ - 'Ajil', - 'Bandar Ketengah Jaya', 'Bandar Permaisuri', 'Bukit Besi', 'Bukit Payong', - 'Chukai', - 'Jerteh', - 'Kampung Raja', 'Kerteh', 'Kijal', 'Kuala Besut', 'Kuala Berang', 'Kuala Dungun', 'Kuala Terengganu', - 'Marang', 'Merchang', - 'Pasir Raja', - 'Rantau Abang', - 'Teluk Kalung', - 'Wakaf Tapai', - ], - ]; - - /** - * @see https://en.wikipedia.org/wiki/States_and_federal_territories_of_Malaysia - */ - protected static $states = [ - 'johor' => [ - 'Johor Darul Ta\'zim', - 'Johor', - ], - 'kedah' => [ - 'Kedah Darul Aman', - 'Kedah', - ], - 'kelantan' => [ - 'Kelantan Darul Naim', - 'Kelantan', - ], - 'kl' => [ - 'KL', - 'Kuala Lumpur', - 'WP Kuala Lumpur', - ], - 'labuan' => [ - 'Labuan', - ], - 'melaka' => [ - 'Malacca', - 'Melaka', - ], - 'nsembilan' => [ - 'Negeri Sembilan Darul Khusus', - 'Negeri Sembilan', - ], - 'pahang' => [ - 'Pahang Darul Makmur', - 'Pahang', - ], - 'penang' => [ - 'Penang', - 'Pulau Pinang', - ], - 'perak' => [ - 'Perak Darul Ridzuan', - 'Perak', - ], - 'perlis' => [ - 'Perlis Indera Kayangan', - 'Perlis', - ], - 'putrajaya' => [ - 'Putrajaya', - ], - 'sabah' => [ - 'Sabah', - ], - 'sarawak' => [ - 'Sarawak', - ], - 'selangor' => [ - 'Selangor Darul Ehsan', - 'Selangor', - ], - 'terengganu' => [ - 'Terengganu Darul Iman', - 'Terengganu', - ], - ]; - - /** - * @see https://ms.wikipedia.org/wiki/Senarai_negara_berdaulat - */ - protected static $country = [ - 'Abkhazia', 'Afghanistan', 'Afrika Selatan', 'Republik Afrika Tengah', 'Akrotiri dan Dhekelia', 'Albania', 'Algeria', 'Amerika Syarikat', 'Andorra', 'Angola', 'Antigua dan Barbuda', 'Arab Saudi', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', - 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belanda', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Bonaire', 'Bosnia dan Herzegovina', 'Botswana', 'Brazil', 'Brunei Darussalam', 'Bulgaria', 'Burkina Faso', 'Burundi', - 'Cameroon', 'Chad', 'Chile', 'Republik Rakyat China', 'Republik China di Taiwan', 'Colombia', 'Comoros', 'Republik Demokratik Congo', 'Republik Congo', 'Kepulauan Cook', 'Costa Rica', 'Côte d\'Ivoire (Ivory Coast)', 'Croatia', 'Cuba', 'Curaçao', 'Cyprus', 'Republik Turki Cyprus Utara', 'Republik Czech', - 'Denmark', 'Djibouti', 'Dominika', 'Republik Dominika', - 'Ecuador', 'El Salvador', 'Emiriah Arab Bersatu', 'Eritrea', 'Estonia', - 'Kepulauan Faroe', 'Fiji', 'Filipina', 'Finland', - 'Gabon', 'Gambia', 'Georgia', 'Ghana', 'Grenada', 'Greece (Yunani)', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Guinea Khatulistiwa', 'Guiana Perancis', 'Guyana', - 'Habsyah (Etiopia)', 'Haiti', 'Honduras', 'Hungary', - 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland', 'Israel', 'Itali', - 'Jamaika', 'Jepun', 'Jerman', 'Jordan', - 'Kanada', 'Kazakhstan', 'Kemboja', 'Kenya', 'Kiribati', 'Korea Selatan', 'Korea Utara', 'Kosovo', 'Kuwait', 'Kyrgyzstan', - 'Laos', 'Latvia', 'Lesotho', 'Liberia', 'Libya', 'Liechtenstein', 'Lithuania', 'Lubnan', 'Luxembourg', - 'Macedonia', 'Madagaskar', 'Maghribi', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Kepulauan Marshall', 'Mauritania', 'Mauritius', 'Mesir', 'Mexico', 'Persekutuan Micronesia', 'Moldova', 'Monaco', 'Montenegro', 'Mongolia', 'Mozambique', 'Myanmar', - 'Namibia', 'Nauru', 'Nepal', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Niue', 'Norway', - 'Oman', 'Ossetia Selatan', - 'Pakistan', 'Palau', 'Palestin', 'Panama', 'Papua New Guinea', 'Paraguay', 'Perancis', 'Peru', 'Poland', 'Portugal', - 'Qatar', - 'Romania', 'Russia', 'Rwanda', - 'Sahara Barat', 'Saint Kitts dan Nevis', 'Saint Lucia', 'Saint Vincent dan Grenadines', 'Samoa', 'San Marino', 'São Tomé dan Príncipe', 'Scotland', 'Senegal', 'Sepanyol', 'Serbia', 'Seychelles', 'Sierra Leone', 'Singapura', 'Slovakia', 'Slovenia', 'Kepulauan Solomon', 'Somalia', 'Somaliland', 'Sri Lanka', 'Sudan', 'Sudan Selatan', 'Suriname', 'Swaziland', 'Sweden', 'Switzerland', 'Syria', - 'Tajikistan', 'Tanjung Verde', 'Tanzania', 'Thailand', 'Timor Leste', 'Togo', 'Tonga', 'Transnistria', 'Trinidad dan Tobago', 'Tunisia', 'Turki', 'Turkmenistan', 'Tuvalu', - 'Uganda', 'Ukraine', 'United Kingdom', 'Uruguay', 'Uzbekistan', - 'Vanuatu', 'Kota Vatican', 'Venezuela', 'Vietnam', - 'Yaman', - 'Zambia', 'Zimbabwe', - ]; - - /** - * Return a building prefix - * - * @example 'No.' - * - * @return string - */ - public static function buildingPrefix() - { - return static::randomElement(static::$buildingPrefix); - } - - /** - * Return a building number - * - * @example '123' - * - * @return string - */ - public static function buildingNumber() - { - return static::toUpper(static::lexify(static::numerify(static::randomElement(static::$buildingNumber)))); - } - - /** - * Return a street prefix - * - * @example 'Jalan' - */ - public function streetPrefix() - { - $format = static::randomElement(static::$streetPrefix); - - return $this->generator->parse($format); - } - - /** - * Return a complete streename - * - * @example 'Jalan Utama 7' - * - * @return string - */ - public function streetName() - { - $format = static::toUpper(static::lexify(static::numerify(static::randomElement(static::$streetNameFormats)))); - - return $this->generator->parse($format); - } - - /** - * Return a randown township - * - * @example Taman Bahagia - * - * @return string - */ - public function township() - { - $format = static::toUpper(static::lexify(static::numerify(static::randomElement(static::$townshipFormats)))); - - return $this->generator->parse($format); - } - - /** - * Return a township prefix abbreviation - * - * @example 'USJ' - * - * @return string - */ - public function townshipPrefixAbbr() - { - return static::randomElement(static::$townshipPrefixAbbr); - } - - /** - * Return a township prefix - * - * @example 'Taman' - * - * @return string - */ - public function townshipPrefix() - { - return static::randomElement(static::$townshipPrefix); - } - - /** - * Return a township suffix - * - * @example 'Bahagia' - */ - public function townshipSuffix() - { - return static::randomElement(static::$townshipSuffix); - } - - /** - * Return a postcode based on state - * - * @example '55100' - * - * @see https://en.wikipedia.org/wiki/Postal_codes_in_Malaysia#States - * - * @param string|null $state 'state' or null - * - * @return string - */ - public static function postcode($state = null) - { - $format = [ - 'perlis' => [ // (01000 - 02800) - '0' . self::numberBetween(1000, 2800), - ], - 'kedah' => [ // (05000 - 09810) - '0' . self::numberBetween(5000, 9810), - ], - 'penang' => [ // (10000 - 14400) - self::numberBetween(10000, 14400), - ], - 'kelantan' => [ // (15000 - 18500) - self::numberBetween(15000, 18500), - ], - 'terengganu' => [ // (20000 - 24300) - self::numberBetween(20000, 24300), - ], - 'pahang' => [ // (25000 - 28800 | 39000 - 39200 | 49000, 69000) - self::numberBetween(25000, 28800), - self::numberBetween(39000, 39200), - self::numberBetween(49000, 69000), - ], - 'perak' => [ // (30000 - 36810) - self::numberBetween(30000, 36810), - ], - 'selangor' => [ // (40000 - 48300 | 63000 - 68100) - self::numberBetween(40000, 48300), - self::numberBetween(63000, 68100), - ], - 'kl' => [ // (50000 - 60000) - self::numberBetween(50000, 60000), - ], - 'putrajaya' => [ // (62000 - 62988) - self::numberBetween(62000, 62988), - ], - 'nsembilan' => [ // (70000 - 73509) - self::numberBetween(70000, 73509), - ], - 'melaka' => [ // (75000 - 78309) - self::numberBetween(75000, 78309), - ], - 'johor' => [ // (79000 - 86900) - self::numberBetween(79000, 86900), - ], - 'labuan' => [ // (87000 - 87033) - self::numberBetween(87000, 87033), - ], - 'sabah' => [ // (88000 - 91309) - self::numberBetween(88000, 91309), - ], - 'sarawak' => [ // (93000 - 98859) - self::numberBetween(93000, 98859), - ], - ]; - - $postcode = null === $state ? static::randomElement($format) : $format[$state]; - - return (string) static::randomElement($postcode); - } - - /** - * Return the complete town address with matching postcode and state - * - * @example 55100 Bukit Bintang, Kuala Lumpur - * - * @return string - */ - public function townState() - { - $state = static::randomElement(array_keys(static::$states)); - $postcode = static::postcode($state); - $town = static::randomElement(static::$towns[$state]); - $state = static::randomElement(static::$states[$state]); - - return $postcode . ' ' . $town . ', ' . $state; - } - - /** - * Return a random city (town) - * - * @example 'Ampang' - * - * @return string - */ - public function city() - { - $state = static::randomElement(array_keys(static::$towns)); - - return static::randomElement(static::$towns[$state]); - } - - /** - * Return a random state - * - * @example 'Johor' - * - * @return string - */ - public function state() - { - $state = static::randomElement(array_keys(static::$states)); - - return static::randomElement(static::$states[$state]); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php deleted file mode 100644 index 4dc8b2cb..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php +++ /dev/null @@ -1,105 +0,0 @@ -generator->parse($formats); - } - - /** - * Return Peninsular prefix alphabet - * - * @example 'W' - * - * @return string - */ - public static function peninsularPrefix() - { - return static::randomElement(static::$peninsularPrefix); - } - - /** - * Return Sarawak state prefix alphabet - * - * @example 'QA' - * - * @return string - */ - public static function sarawakPrefix() - { - return static::randomElement(static::$sarawakPrefix); - } - - /** - * Return Sabah state prefix alphabet - * - * @example 'SA' - * - * @return string - */ - public static function sabahPrefix() - { - return static::randomElement(static::$sabahPrefix); - } - - /** - * Return specialty licence plate prefix - * - * @example 'G1M' - * - * @return string - */ - public static function specialPrefix() - { - return static::randomElement(static::$specialPrefix); - } - - /** - * Return a valid license plate alphabet - * - * @example 'A' - * - * @return string - */ - public static function validAlphabet() - { - return static::randomElement(static::$validAlphabets); - } - - /** - * Return a valid number sequence between 1 and 9999 - * - * @example '1234' - * - * @return int - */ - public static function numberSequence() - { - return self::numberBetween(1, 9999); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php deleted file mode 100644 index b64c2bbd..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php +++ /dev/null @@ -1,244 +0,0 @@ -generator->parse($formats); - } - - /** - * Return a Malaysian Bank account number - * - * @example '1234567890123456' - * - * @return string - */ - public function bankAccountNumber() - { - $formats = static::randomElement(static::$bankAccountNumberFormats); - - return static::numerify($formats); - } - - /** - * Return a Malaysian Local Bank - * - * @example 'Public Bank' - * - * @return string - */ - public static function localBank() - { - return static::randomElement(static::$localBanks); - } - - /** - * Return a Malaysian Foreign Bank - * - * @example 'Citibank Berhad' - * - * @return string - */ - public static function foreignBank() - { - return static::randomElement(static::$foreignBanks); - } - - /** - * Return a Malaysian Government Bank - * - * @example 'Bank Simpanan Nasional' - * - * @return string - */ - public static function governmentBank() - { - return static::randomElement(static::$governmentBanks); - } - - /** - * Return a Malaysian insurance company - * - * @example 'AIA Malaysia' - * - * @return string - */ - public static function insurance() - { - return static::randomElement(static::$insuranceCompanies); - } - - /** - * Return a Malaysian Bank SWIFT Code - * - * @example 'MBBEMYKLXXX' - * - * @return string - */ - public static function swiftCode() - { - return static::toUpper(static::lexify(static::randomElement(static::$swiftCodes))); - } - - /** - * Return the Malaysian currency symbol - * - * @example 'RM' - * - * @return string - */ - public static function currencySymbol() - { - return static::randomElement(static::$currencySymbol); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php deleted file mode 100644 index 1cd011bf..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php +++ /dev/null @@ -1,811 +0,0 @@ -generator->parse(static::randomElement($formats)); - } - - /** - * Return a Malaysian I.C. No. - * - * @example '890123-45-6789' - * - * @see https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) - * - * @param string|null $gender 'male', 'female' or null for any - * @param bool|string|null $hyphen true, false, or any separator characters - * - * @return string - */ - public static function myKadNumber($gender = null, $hyphen = false) - { - // year of birth - $yy = self::numberBetween(0, 99); - - // month of birth - $mm = DateTime::month(); - - // day of birth - $dd = DateTime::dayOfMonth(); - - // place of birth (1-59 except 17-20) - while (in_array($pb = self::numberBetween(1, 59), [17, 18, 19, 20], false)) { - } - - // random number - $nnn = self::numberBetween(0, 999); - - // gender digit. Odd = MALE, Even = FEMALE - $g = self::numberBetween(0, 9); - //Credit: https://gist.github.com/mauris/3629548 - if ($gender === static::GENDER_MALE) { - $g = $g | 1; - } elseif ($gender === static::GENDER_FEMALE) { - $g = $g & ~1; - } - - // formatting with hyphen - if ($hyphen === true) { - $hyphen = '-'; - } elseif ($hyphen === false) { - $hyphen = ''; - } - - return sprintf('%02d%02d%02d%s%02d%s%03d%01d', $yy, $mm, $dd, $hyphen, $pb, $hyphen, $nnn, $g); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php deleted file mode 100644 index 7cce02fa..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php +++ /dev/null @@ -1,217 +0,0 @@ -generator->parse($format)); - } - - return static::numerify($this->generator->parse($format)); - } - - /** - * Return prefix digits for 011 numbers - * - * @example '10' - * - * @return string - */ - public static function zeroOneOnePrefix() - { - return static::numerify(static::randomElement(static::$zeroOneOnePrefix)); - } - - /** - * Return prefix digits for 014 numbers - * - * @example '2' - * - * @return string - */ - public static function zeroOneFourPrefix() - { - return static::numerify(static::randomElement(static::$zeroOneFourPrefix)); - } - - /** - * Return prefix digits for 015 numbers - * - * @example '1' - * - * @return string - */ - public static function zeroOneFivePrefix() - { - return static::numerify(static::randomElement(static::$zeroOneFivePrefix)); - } - - /** - * Return a Malaysian Fixed Line Phone Number. - * - * @example '+603-4567-8912' - * - * @param bool $countryCodePrefix true, false - * @param bool $formatting true, false - * - * @return string - */ - public function fixedLineNumber($countryCodePrefix = true, $formatting = true) - { - if ($formatting) { - $format = static::randomElement(static::$fixedLineNumberFormatsWithFormatting); - } else { - $format = static::randomElement(static::$fixedLineNumberFormats); - } - - if ($countryCodePrefix) { - return static::countryCodePrefix($formatting) . static::numerify($this->generator->parse($format)); - } - - return static::numerify($this->generator->parse($format)); - } - - /** - * Return a Malaysian VoIP Phone Number. - * - * @example '+6015-678-9234' - * - * @param bool $countryCodePrefix true, false - * @param bool $formatting true, false - * - * @return string - */ - public function voipNumber($countryCodePrefix = true, $formatting = true) - { - if ($formatting) { - $format = static::randomElement(static::$voipNumberWithFormatting); - } else { - $format = static::randomElement(static::$voipNumber); - } - - if ($countryCodePrefix) { - return static::countryCodePrefix($formatting) . static::numerify($this->generator->parse($format)); - } - - return static::numerify($this->generator->parse($format)); - } - - /** - * Return a Malaysian Country Code Prefix. - * - * @example '+6' - * - * @param bool $formatting true, false - * - * @return string - */ - public static function countryCodePrefix($formatting = true) - { - if ($formatting) { - return static::randomElement(static::$plusSymbol) . static::randomElement(static::$countryCodePrefix); - } - - return static::randomElement(static::$countryCodePrefix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php deleted file mode 100644 index cbc39d7b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php +++ /dev/null @@ -1,197 +0,0 @@ -format('dmy'); - - /** - * @todo These number should be random based on birth year - * - * @see http://no.wikipedia.org/wiki/F%C3%B8dselsnummer - */ - $randomDigits = (string) static::numerify('##'); - - switch ($gender) { - case static::GENDER_MALE: - $genderDigit = static::randomElement([1, 3, 5, 7, 9]); - - break; - - case static::GENDER_FEMALE: - $genderDigit = static::randomElement([0, 2, 4, 6, 8]); - - break; - - default: - $genderDigit = (string) static::numerify('#'); - } - - $digits = $datePart . $randomDigits . $genderDigit; - - /** - * @todo Calculate modulo 11 of $digits - * - * @see http://no.wikipedia.org/wiki/F%C3%B8dselsnummer - */ - $checksum = (string) static::numerify('##'); - - return $digits . $checksum; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php deleted file mode 100644 index 4767db48..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php +++ /dev/null @@ -1,41 +0,0 @@ -generator->parse($format)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php deleted file mode 100644 index 59b31de4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php +++ /dev/null @@ -1,131 +0,0 @@ -format('ymd')); - $help = $date->format('Y') >= 2000 ? 2 : null; - - $check = (int) ($help . $dob . $middle); - $rest = sprintf('%02d', 97 - ($check % 97)); - - return $dob . $middle . $rest; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php deleted file mode 100644 index 9e4a3917..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php +++ /dev/null @@ -1,20 +0,0 @@ -generator->lastName(); - - break; - } - - if (Miscellaneous::boolean()) { - return $companyName . ' ' . static::randomElement(static::$companySuffix); - } - - return $companyName; - } - - /** - * Belasting Toegevoegde Waarde (BTW) = VAT - * - * @example 'NL123456789B01' - * - * @see https://www.belastingdienst.nl/wps/wcm/connect/bldcontentnl/belastingdienst/zakelijk/btw/administratie_bijhouden/btw_nummers_controleren/uw_btw_nummer - * - * @return string VAT Number - */ - public static function vat() - { - return sprintf('%s%d%s%d', 'NL', self::randomNumber(9, true), 'B', self::randomNumber(2, true)); - } - - /** - * Alias dutch vat number format - * - * @return string - */ - public static function btw() - { - return self::vat(); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php deleted file mode 100644 index bf30e795..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ - 9) { - if ($nr[1] > 0) { - $nr[0] = 8; - --$nr[1]; - } else { - $nr[0] = 1; - ++$nr[1]; - } - } - - return implode('', array_reverse($nr)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php deleted file mode 100644 index 5d4163a0..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php +++ /dev/null @@ -1,39 +0,0 @@ - 'D', - 'kujawsko-pomorskie' => 'C', - 'lubelskie' => 'L', - 'lubuskie' => 'F', - 'łódzkie' => 'E', - 'małopolskie' => 'K', - 'mazowieckie' => 'W', - 'opolskie' => 'O', - 'podkarpackie' => 'R', - 'podlaskie' => 'B', - 'pomorskie' => 'G', - 'śląskie' => 'S', - 'świętokrzyskie' => 'T', - 'warmińsko-mazurskie' => 'N', - 'wielkopolskie' => 'P', - 'zachodniopomorskie' => 'Z', - ]; - - /** - * @var array list of special vehicle registration number prefixes. - */ - protected static $specials = [ - 'army' => 'U', - 'services' => 'H', - ]; - - /** - * @var array list of Polish counties and respective vehicle registration number prefixes. - */ - protected static $counties = [ - 'D' => [ - 'Jelenia Góra' => ['J'], - 'Legnica' => ['L'], - 'Wałbrzych' => ['B'], - 'Wrocław' => ['W', 'X'], - 'bolesławiecki' => ['BL'], - 'dzierżoniowski' => ['DZ'], - 'głogowski' => ['GL'], - 'górowski' => ['GR'], - 'jaworski' => ['JA'], - 'jeleniogórski' => ['JE'], - 'kamiennogórski' => ['KA'], - 'kłodzki' => ['KL'], - 'legnicki' => ['LE'], - 'lubański' => ['LB'], - 'lubiński' => ['LU'], - 'lwówecki' => ['LW'], - 'milicki' => ['MI'], - 'oleśnicki' => ['OL'], - 'oławski' => ['OA'], - 'polkowicki' => ['PL'], - 'strzeliński' => ['ST'], - 'średzki' => ['SR'], - 'świdnicki' => ['SW'], - 'trzebnicki' => ['TR'], - 'wałbrzyski' => ['BA'], - 'wołowski' => ['WL'], - 'wrocławski' => ['WR'], - 'ząbkowicki' => ['ZA'], - 'zgorzelecki' => ['ZG'], - 'złotoryjski' => ['ZL'], - ], - 'C' => [ - 'Bydgoszcz' => ['B'], - 'Grudziądz' => ['G'], - 'Toruń' => ['T'], - 'Włocławek' => ['W'], - 'aleksandrowski' => ['AL'], - 'brodnicki' => ['BR'], - 'bydgoski' => ['BY'], - 'chełmiński' => ['CH'], - 'golubsko-dobrzyński' => ['GD'], - 'grudziądzki' => ['GR'], - 'inowrocławski' => ['IN'], - 'lipnowski' => ['LI'], - 'mogileński' => ['MG'], - 'nakielski' => ['NA'], - 'radziejowski' => ['RA'], - 'rypiński' => ['RY'], - 'sępoleński' => ['SE'], - 'świecki' => ['SW'], - 'toruński' => ['TR'], - 'tucholski' => ['TU'], - 'wąbrzeski' => ['WA'], - 'włocławski' => ['WL'], - 'żniński' => ['ZN'], - ], - 'L' => [ - 'Biała Podlaska' => ['B'], - 'Chełm' => ['C'], - 'Lublin' => ['U'], - 'Zamość' => ['Z'], - 'bialski' => ['BI'], - 'biłgorajski' => ['BL'], - 'chełmski' => ['CH'], - 'hrubieszowski' => ['HR'], - 'janowski' => ['JA'], - 'krasnostawski' => ['KS'], - 'kraśnicki' => ['KR'], - 'lubartowski' => ['LB'], - 'lubelski' => ['UB'], - 'łęczyński' => ['LE'], - 'łukowski' => ['LU'], - 'opolski' => ['OP'], - 'parczewski' => ['PA'], - 'puławski' => ['PU'], - 'radzyński' => ['RA'], - 'rycki' => ['RY'], - 'świdnicki' => ['SW'], - 'tomaszowski' => ['TM'], - 'włodawski' => ['WL'], - 'zamojski' => ['ZA'], - ], - 'F' => [ - 'Gorzów Wielkopolski' => ['G'], - 'Zielona Góra' => ['Z'], - 'gorzowski' => ['GW'], - 'krośnieński' => ['KR'], - 'międzyrzecki' => ['MI'], - 'nowosolski' => ['NW'], - 'słubicki' => ['SL'], - 'strzelecko-drezdenecki' => ['SD'], - 'sulęciński' => ['SU'], - 'świebodziński' => ['SW'], - 'wschowski' => ['WS'], - 'zielonogórski' => ['ZI'], - 'żagański' => ['ZG'], - 'żarski' => ['ZA'], - ], - 'E' => [ - 'Łódź' => ['L'], - 'Piotrków Trybunalski' => ['P'], - 'Skierniewice' => ['S'], - 'brzeziński' => ['BR'], - 'bełchatowski' => ['BE'], - 'kutnowski' => ['KU'], - 'łaski' => ['LA'], - 'łęczycki' => ['LE'], - 'łowicki' => ['LC'], - 'łódzki wschodni' => ['LW'], - 'opoczyński' => ['OP'], - 'pabianicki' => ['PA'], - 'pajęczański' => ['PJ'], - 'piotrkowski' => ['PI'], - 'poddębicki' => ['PD'], - 'radomszczański' => ['RA'], - 'rawski' => ['RW'], - 'sieradzki' => ['SI'], - 'skierniewicki' => ['SK'], - 'tomaszowski' => ['TM'], - 'wieluński' => ['WI'], - 'wieruszowski' => ['WE'], - 'zduńskowolski' => ['ZD'], - 'zgierski' => ['ZG'], - ], - 'K' => [ - 'Kraków' => ['R'], - 'Nowy Sącz' => ['N'], - 'Tarnów' => ['T'], - 'bocheński' => ['BA', 'BC'], - 'brzeski' => ['BR'], - 'chrzanowski' => ['CH'], - 'dąbrowski' => ['DA'], - 'gorlicki' => ['GR'], - 'krakowski' => ['RA'], - 'limanowski' => ['LI'], - 'miechowski' => ['MI'], - 'myślenicki' => ['MY'], - 'nowosądecki' => ['NS'], - 'nowotarski' => ['NT'], - 'olkuski' => ['OL'], - 'oświęcimski' => ['OS'], - 'proszowicki' => ['PR'], - 'suski' => ['SU'], - 'tarnowski' => ['TA'], - 'tatrzański' => ['TT'], - 'wadowicki' => ['WA'], - 'wielicki' => ['WI'], - ], - 'W' => [ - 'Ostrołęka' => ['O'], - 'Płock' => ['P'], - 'Radom' => ['R'], - 'Siedlce' => ['S'], - 'białobrzeski' => ['BR'], - 'ciechanowski' => ['CI'], - 'garwoliński' => ['G'], - 'gostyniński' => ['GS'], - 'grodziski' => ['GM'], - 'grójecki' => ['GR'], - 'kozienicki' => ['KZ'], - 'legionowski' => ['L'], - 'lipski' => ['LI'], - 'łosicki' => ['LS'], - 'makowski' => ['MA'], - 'miński' => ['M'], - 'mławski' => ['ML'], - 'nowodworski' => ['ND'], - 'ostrołęcki' => ['OS'], - 'ostrowski' => ['OR'], - 'otwocki' => ['OT'], - 'piaseczyński' => ['PA', 'PI'], - 'płocki' => ['PL'], - 'płoński' => ['PN'], - 'pruszkowski' => ['PP', 'PR', 'PS'], - 'przasnyski' => ['PZ'], - 'przysuski' => ['PY'], - 'pułtuski' => ['PU'], - 'radomski' => ['RA'], - 'siedlecki' => ['SI'], - 'sierpecki' => ['SE'], - 'sochaczewski' => ['SC'], - 'sokołowski' => ['SK'], - 'szydłowiecki' => ['SZ'], - 'warszawski' => ['A', 'B', 'D', 'E', 'F', 'H', 'I', 'J', 'K', 'N', 'T', 'U', 'W', 'X', 'Y'], - 'warszawski zachodni' => ['Z'], - 'węgrowski' => ['WE'], - 'wołomiński' => ['WL', 'V'], - 'wyszkowski' => ['WY'], - 'zwoleński' => ['ZW'], - 'żuromiński' => ['ZU'], - 'żyrardowski' => ['ZY'], - ], - 'O' => [ - 'Opole' => ['P'], - 'brzeski' => ['B'], - 'głubczycki' => ['GL'], - 'kędzierzyńsko-kozielski' => ['K'], - 'kluczborski' => ['KL'], - 'krapkowicki' => ['KR'], - 'namysłowski' => ['NA'], - 'nyski' => ['NY'], - 'oleski' => ['OL'], - 'opolski' => ['PO'], - 'prudnicki' => ['PR'], - 'strzelecki' => ['ST'], - ], - 'R' => [ - 'Krosno' => ['K'], - 'Przemyśl' => ['P'], - 'Rzeszów' => ['Z'], - 'Tarnobrzeg' => ['T'], - 'bieszczadzki' => ['BI'], - 'brzozowski' => ['BR'], - 'dębicki' => ['DE'], - 'jarosławski' => ['JA'], - 'jasielski' => ['JS'], - 'kolbuszowski' => ['KL'], - 'krośnieński' => ['KR'], - 'leski' => ['LS'], - 'leżajski' => ['LE'], - 'lubaczowski' => ['LU'], - 'łańcucki' => ['LA'], - 'mielecki' => ['MI'], - 'niżański' => ['NI'], - 'przemyski' => ['PR'], - 'przeworski' => ['PZ'], - 'ropczycko-sędziszowski' => ['RS'], - 'rzeszowski' => ['ZE'], - 'sanocki' => ['SA'], - 'stalowowolski' => ['ST'], - 'strzyżowski' => ['SR'], - 'tarnobrzeski' => ['TA'], - ], - 'B' => [ - 'Białystok' => ['I'], - 'Łomża' => ['L'], - 'Suwałki' => ['S'], - 'augustowski' => ['AU'], - 'białostocki' => ['IA'], - 'bielski' => ['BI'], - 'grajewski' => ['GR'], - 'hajnowski' => ['HA'], - 'kolneński' => ['KL'], - 'łomżyński' => ['LM'], - 'moniecki' => ['MN'], - 'sejneński' => ['SE'], - 'siemiatycki' => ['SI'], - 'sokólski' => ['SK'], - 'suwalski' => ['SU'], - 'wysokomazowiecki' => ['WM'], - 'zambrowski' => ['ZA'], - ], - 'G' => [ - 'Gdańsk' => ['D'], - 'Gdynia' => ['A'], - 'Słupsk' => ['S'], - 'Sopot' => ['SP'], - 'bytowski' => ['BY'], - 'chojnicki' => ['CH'], - 'człuchowski' => ['CZ'], - 'gdański' => ['DA'], - 'kartuski' => ['KY', 'KA'], - 'kościerski' => ['KS'], - 'kwidzyński' => ['KW'], - 'lęborski' => ['LE'], - 'malborski' => ['MB'], - 'nowodworski' => ['ND'], - 'pucki' => ['PU'], - 'słupski' => ['SL'], - 'starogardzki' => ['ST'], - 'sztumski' => ['SZ'], - 'tczewski' => ['TC'], - 'wejherowski' => ['WE', 'WO'], - ], - 'S' => [ - 'Bielsko-Biała' => ['B'], - 'Bytom' => ['Y'], - 'Chorzów' => ['H'], - 'Częstochowa' => ['C'], - 'Dąbrowa Górnicza' => ['D'], - 'Gliwice' => ['G'], - 'Jastrzębie-Zdrój' => ['JZ'], - 'Jaworzno' => ['J'], - 'Katowice' => ['K'], - 'Mysłowice' => ['M'], - 'Piekary Śląskie' => ['PI'], - 'Ruda Śląska,' => ['L', 'RS'], - 'Rybnik' => ['R'], - 'Siemianowice Śląskie' => ['I'], - 'Sosnowiec' => ['O'], - 'Świętochłowice' => ['W'], - 'Tychy' => ['T'], - 'Zabrze' => ['Z'], - 'Żory' => ['ZO'], - 'będziński' => ['BE'], - 'bielski' => ['BI'], - 'cieszyński' => ['CN', 'CI'], - 'częstochowski' => ['CZ'], - 'gliwicki' => ['GL'], - 'kłobucki' => ['KL'], - 'lubliniecki' => ['LU'], - 'mikołowski' => ['MI'], - 'myszkowski' => ['MY'], - 'pszczyński' => ['PS'], - 'raciborski' => ['RC'], - 'rybnicki' => ['RB'], - 'tarnogórski' => ['TA'], - 'bieruńsko - lędziński' => ['BL'], - 'wodzisławski' => ['WD', 'WZ'], - 'zawierciański' => ['ZA'], - 'żywiecki' => ['ZY'], - ], - 'T' => [ - 'Kielce' => ['K'], - 'buski' => ['BU'], - 'jędrzejowski' => ['JE'], - 'kazimierski' => ['KA'], - 'kielecki' => ['KI'], - 'konecki' => ['KN'], - 'opatowski' => ['OP'], - 'ostrowiecki' => ['OS'], - 'pińczowski' => ['PI'], - 'sandomierski' => ['SA'], - 'skarżyski' => ['SK'], - 'starachowicki' => ['ST'], - 'staszowski' => ['SZ'], - 'włoszczowski' => ['LW'], - ], - 'N' => [ - 'Elbląg' => ['E'], - 'Olsztyn' => ['O'], - 'bartoszycki' => ['BA'], - 'braniewski' => ['BR'], - 'działdowski' => ['DZ'], - 'elbląski' => ['EB'], - 'ełcki' => ['EL'], - 'giżycki' => ['GI'], - 'iławski' => ['IL'], - 'kętrzyński' => ['KE'], - 'lidzbarski' => ['LI'], - 'mrągowski' => ['MR'], - 'nidzicki' => ['NI'], - 'nowomiejski' => ['NM'], - 'olecki' => ['OE'], - 'gołdapski' => ['GO'], - 'olsztyński' => ['OL'], - 'ostródzki' => ['OS'], - 'piski' => ['PI'], - 'szczycieński' => ['SZ'], - 'węgorzewski' => ['WE'], - ], - 'P' => [ - 'Kalisz' => ['A', 'K'], - 'Konin' => ['KO', 'N'], - 'Leszno' => ['L'], - 'Poznań' => ['O', 'Y'], - 'chodzieski' => ['CH'], - 'czarnkowsko-trzcianecki' => ['CT'], - 'gnieźnieński' => ['GN'], - 'gostyński' => ['GS'], - 'grodziski' => ['GO'], - 'jarociński' => ['JA'], - 'kaliski' => ['KA'], - 'kępiński' => ['KE'], - 'kolski' => ['KL'], - 'koniński' => ['KN'], - 'kościański' => ['KS'], - 'krotoszyński' => ['KR'], - 'leszczyński' => ['LE'], - 'międzychodzki' => ['MI'], - 'nowotomyski' => ['NT'], - 'obornicki' => ['OB'], - 'ostrowski' => ['OS'], - 'ostrzeszowski' => ['OT'], - 'pilski' => ['P'], - 'pleszewski' => ['PL'], - 'poznański' => ['OZ', 'Z'], - 'rawicki' => ['RA'], - 'słupecki' => ['SL'], - 'szamotulski' => ['SZ'], - 'średzki' => ['SR'], - 'śremski' => ['SE'], - 'turecki' => ['TU'], - 'wągrowiecki' => ['WA'], - 'wolsztyński' => ['WL'], - 'wrzesiński' => ['WR'], - 'złotowski' => ['ZL'], - ], - 'Z' => [ - 'Koszalin' => ['K'], - 'Szczecin' => ['S', 'Z'], - 'Świnoujście' => ['SW'], - 'białogardzki' => ['BI'], - 'choszczeński' => ['CH'], - 'drawski' => ['DR'], - 'goleniowski' => ['GL'], - 'gryficki' => ['GY'], - 'gryfiński' => ['GR'], - 'kamieński' => ['KA'], - 'kołobrzeski' => ['KL'], - 'koszaliński' => ['KO'], - 'łobeski' => ['LO'], - 'myśliborski' => ['MY'], - 'policki' => ['PL'], - 'pyrzycki' => ['PY'], - 'sławieński' => ['SL'], - 'stargardzki' => ['ST'], - 'szczecinecki' => ['SZ'], - 'świdwiński' => ['SD'], - 'wałecki' => ['WA'], - ], - 'U' => [ - 'Siły Zbrojne Rzeczypospolitej Polskiej' => ['A', 'B', 'C', 'D', 'E', 'G', 'I', 'J', 'K', 'L'], - ], - 'H' => [ - 'Centralne Biuro Antykorupcyjne' => ['A'], - 'Służba Ochrony Państwa' => ['BA', 'BB', 'BE', 'BF', 'BG'], - 'Służba Celno-Skarbowa' => ['CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR'], - 'Agencja Bezpieczeństwa Wewnętrznego' => ['K'], - 'Agencja Wywiadu' => ['K'], - 'Służba Kontrwywiadu Wojskowego' => ['M'], - 'Służba Wywiadu Wojskowego' => ['M'], - 'Policja' => ['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PG', 'PH', 'PJ', 'PK', 'PL', 'PL', 'PL', 'PL', 'PL', 'PM', 'PN', 'PP', 'PS', 'PT', 'PU', 'PW', 'PZ'], - 'Straż Graniczna' => ['WA', 'WK'], - ], - ]; - - /** - * @var array list of regex expressions matching Polish license plate suffixess when county code is 1 character long. - */ - protected static $plateSuffixesGroup1 = [ - '\d{5}', - '\d{4}[A-PR-Z]', - '\d{3}[A-PR-Z]{2}', - '[1-9][A-PR-Z]\d{3}', - '[1-9][A-PR-Z]{2}\d{2}', - ]; - - /** - * @var array list of regex expressions matching Polish license plate suffixess when county code is 2 characters long. - */ - protected static $plateSuffixesGroup2 = [ - '[A-PR-Z]\d{3}', - '\d{2}[A-PR-Z]{2}', - '[1-9][A-PR-Z]\d{2}', - '\d{2}[A-PR-Z][1-9]', - '[1-9][A-PR-Z]{2}[1-9]', - '[A-PR-Z]{2}\d{2}', - '\d{5}', - '\d{4}[A-PR-Z]', - '\d{3}[A-PR-Z]{2}', - '[A-PR-Z]\d{2}[A-PR-Z]', - '[A-PR-Z][1-9][A-PR-Z]{2}', - ]; - - /** - * Generates random license plate. - * - * @param bool $special whether special license plates should be included - * @param array|null $voivodeships list of voivodeships license plate should be generated from - * @param array|null $counties list of counties license plate should be generated from - */ - public static function licensePlate( - bool $special = false, - ?array $voivodeships = null, - ?array $counties = null - ): string { - $voivodeshipsAvailable = static::$voivodeships + ($special ? static::$specials : []); - $voivodeshipCode = static::selectRandomArea($voivodeshipsAvailable, $voivodeships); - - $countiesAvailable = static::$counties[$voivodeshipCode]; - $countySelected = self::selectRandomArea($countiesAvailable, $counties); - - $countyCode = static::randomElement($countySelected); - - $suffix = static::regexify(static::randomElement(strlen($countyCode) === 1 ? static::$plateSuffixesGroup1 : static::$plateSuffixesGroup2)); - - return "{$voivodeshipCode}{$countyCode} {$suffix}"; - } - - /** - * Selects random area from the list of available and requested. - */ - protected static function selectRandomArea(array $available, ?array $requested) - { - $requested = array_intersect(array_keys($available), $requested ?? []); - - if (empty($requested)) { - $requested = array_keys($available); - } - - return $available[static::randomElement($requested)]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php deleted file mode 100644 index f2a60307..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php +++ /dev/null @@ -1,120 +0,0 @@ - 'Narodowy Bank Polski', - '102' => 'Powszechna Kasa Oszczędności Bank Polski Spółka Akcyjna', - '103' => 'Bank Handlowy w Warszawie Spółka Akcyjna', - '105' => 'ING Bank Śląski Spółka Akcyjna', - '106' => 'Bank BPH Spółka Akcyjna', - '109' => 'Santander Bank Polska Spółka Akcyjna', - '113' => 'Bank Gospodarstwa Krajowego', - '114' => 'mBank Spółka Akcyjna', - '116' => 'Bank Millennium Spółka Akcyjna', - '122' => 'Bank Handlowo-Kredytowy Spółka Akcyjna w Katowicach w likwidacji', - '124' => 'Bank Polska Kasa Opieki Spółka Akcyjna', - '132' => 'Bank Pocztowy Spółka Akcyjna', - '154' => 'Bank Ochrony Środowiska Spółka Akcyjna', - '158' => 'Mercedes-Benz Bank Polska Spółka Akcyjna', - '161' => 'SGB-Bank Spółka Akcyjna', - '168' => 'PLUS BANK Spółka Akcyjna', - '184' => 'Société Générale Spółka Akcyjna Oddział w Polsce', - '187' => 'Nest Bank Spółka Akcyjna', - '189' => 'Pekao Bank Hipoteczny Spółka Akcyjna', - '191' => 'Deutsche Bank Polska Spółka Akcyjna', - '193' => 'BANK POLSKIEJ SPÓŁDZIELCZOŚCI SPÓŁKA AKCYJNA', - '194' => 'Credit Agricole Bank Polska Spółka Akcyjna', - '195' => 'Idea Bank Spółka Akcyjna', - '203' => 'BNP Paribas Bank Polska Spółka Akcyjna', - '212' => 'Santander Consumer Bank Spółka Akcyjna', - '215' => 'mBank Hipoteczny Spółka Akcyjna', - '216' => 'Toyota Bank Polska Spółka Akcyjna', - '219' => 'DNB Bank Polska Spółka Akcyjna', - '224' => 'Banque PSA Finance Spółka Akcyjna Oddział w Polsce', - '225' => 'Svenska Handelsbanken AB Spółka Akcyjna Oddział w Polsce', - '235' => 'BNP Paribas S.A. Oddział w Polsce ', - '236' => 'Danske Bank A/S Spółka Akcyjna Oddział w Polsce', - '237' => 'Skandinaviska Enskilda Banken AB (Spółka Akcyjna) - Oddział w Polsce', - '239' => 'CAIXABANK, S.A. (SPÓŁKA AKCYJNA) ODDZIAŁ W POLSCE', - '241' => 'Elavon Financial Services Designated Activity Company (Spółka z O.O. o Wyznaczonym Przedmiocie Działalności) Oddział w Polsce', - '243' => 'BNP Paribas Securities Services Spółka Komandytowo - Akcyjna Oddział w Polsce', - '247' => 'HAITONG BANK, S.A. Spółka Akcyjna Oddział w Polsce', - '248' => 'Getin Noble Bank Spółka Akcyjna', - '249' => 'Alior Bank Spółka Akcyjna', - '251' => 'Aareal Bank Aktiengesellschaft (Spółka Akcyjna) - Oddział w Polsce', - '254' => 'Citibank Europe plc (Publiczna Spółka Akcyjna) Oddział w Polsce', - '255' => 'Ikano Bank AB (publ) Spółka Akcyjna Oddział w Polsce', - '256' => 'Nordea Bank Abp Spółka Akcyjna Oddział w Polsce', - '258' => 'J.P. Morgan Europe Limited Spółka z ograniczoną odpowiedzialnością Oddział w Polsce', - '260' => 'Bank of China (Luxembourg) S.A. Spółka Akcyjna Oddział w Polsce', - '262' => 'Industrial and Commercial Bank of China (Europe) S.A. (Spółka Akcyjna) Oddział w Polsce', - '264' => 'RCI Banque Spółka Akcyjna Oddział w Polsce', - '265' => 'EUROCLEAR Bank SA/NV (Spółka Akcyjna) - Oddział w Polsce', - '266' => 'Intesa Sanpaolo S.p.A. Spółka Akcyjna Oddział w Polsce', - '267' => 'Western Union International Bank GmbH, Sp. z o.o. Oddział w Polsce', - '269' => 'PKO Bank Hipoteczny Spółka Akcyjna', - '270' => 'TF BANK AB (Spółka z ograniczoną odpowiedzialnością) Oddział w Polsce', - '271' => 'FCE Bank Spółka Akcyjna Oddział w Polsce', - '272' => 'AS Inbank Spółka Akcyjna - Oddział w Polsce', - '273' => 'China Construction Bank (Europe) S.A. (Spółka Akcyjna) Oddział w Polsce', - '274' => 'MUFG Bank (Europe) N.V. S.A. Oddział w Polsce', - '275' => 'John Deere Bank S.A. Spółka Akcyjna Oddział w Polsce ', - '277' => 'Volkswagen Bank GmbH Spółka z ograniczoną odpowiedzialnością Oddział w Polsce', - '278' => 'ING Bank Hipoteczny Spółka Akcyjna', - '279' => 'Raiffeisen Bank International AG (Spółka Akcyjna) Oddział w Polsce', - '280' => 'HSBC France (Spółka Akcyjna) Oddział w Polsce', - '281' => 'Goldman Sachs Bank Europe SE Spółka Europejska Oddział w Polsce', - '283' => 'J.P. Morgan AG (Spółka Akcyjna) Oddział w Polsce', - '284' => 'UBS Europe SE (Spółka Europejska) Oddział w Polsce', - '285' => 'Banca Farmafactoring S.p.A. Spółka Akcyjna Oddział w Polsce', - '286' => 'FCA Bank S.p.A. Spółka Akcyjna Oddział w Polsce', - '287' => 'Bank Nowy BFG Spółka Akcyjna', - '288' => 'ALLFUNDS BANK S.A.U. (SPÓŁKA AKCYJNA) ODDZIAŁ W POLSCE', - ]; - - /** - * @example 'Euro Bank SA' - */ - public static function bank() - { - return static::randomElement(static::$banks); - } - - /** - * International Bank Account Number (IBAN) - * - * @see http://en.wikipedia.org/wiki/International_Bank_Account_Number - * - * @param string $prefix for generating bank account number of a specific bank - * @param string $countryCode ISO 3166-1 alpha-2 country code - * @param int $length total length without country code and 2 check digits - * - * @return string - */ - public static function bankAccountNumber($prefix = '', $countryCode = 'PL', $length = null) - { - return static::iban($countryCode, $prefix, $length); - } - - protected static function addBankCodeChecksum($iban, $countryCode = 'PL') - { - if ($countryCode != 'PL' || strlen($iban) <= 8) { - return $iban; - } - $checksum = 0; - $weights = [7, 1, 3, 9, 7, 1, 3]; - - for ($i = 0; $i < 7; ++$i) { - $checksum += $weights[$i] * (int) $iban[$i]; - } - $checksum = $checksum % 10; - - return substr($iban, 0, 7) . $checksum . substr($iban, 8); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php deleted file mode 100644 index 6d7312db..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php +++ /dev/null @@ -1,243 +0,0 @@ -generator->parse(static::randomElement(static::$lastNameFormat)); - } - - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } - - public function title($gender = null) - { - return static::randomElement(static::$title); - } - - /** - * replaced by specific unisex Polish title - */ - public static function titleMale() - { - return static::randomElement(static::$title); - } - - /** - * replaced by specific unisex Polish title - */ - public static function titleFemale() - { - return static::randomElement(static::$title); - } - - /** - * PESEL - Universal Electronic System for Registration of the Population - * - * @see http://en.wikipedia.org/wiki/PESEL - * - * @param DateTime $birthdate - * @param string $sex M for male or F for female - * - * @return string 11 digit number, like 44051401358 - */ - public static function pesel($birthdate = null, $sex = null) - { - if ($birthdate === null) { - $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury(); - } - - $weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]; - $length = count($weights); - - $fullYear = (int) $birthdate->format('Y'); - $year = (int) $birthdate->format('y'); - $month = $birthdate->format('m') + (((int) ($fullYear / 100) - 14) % 5) * 20; - $day = $birthdate->format('d'); - - $result = [(int) ($year / 10), $year % 10, (int) ($month / 10), $month % 10, (int) ($day / 10), $day % 10]; - - for ($i = 6; $i < $length; ++$i) { - $result[$i] = static::randomDigit(); - } - - $result[$length - 1] |= 1; - - if ($sex == 'F') { - $result[$length - 1] -= 1; - } - - $checksum = 0; - - for ($i = 0; $i < $length; ++$i) { - $checksum += $weights[$i] * $result[$i]; - } - $checksum = (10 - ($checksum % 10)) % 10; - $result[] = $checksum; - - return implode('', $result); - } - - /** - * National Identity Card number - * - * @see http://en.wikipedia.org/wiki/Polish_National_Identity_Card - * - * @return string 3 letters and 6 digits, like ABA300000 - */ - public static function personalIdentityNumber() - { - $range = str_split('ABCDEFGHIJKLMNPRSTUVWXYZ'); - $low = ['A', static::randomElement($range), static::randomElement($range)]; - $high = [static::randomDigit(), static::randomDigit(), static::randomDigit(), static::randomDigit(), static::randomDigit()]; - $weights = [7, 3, 1, 7, 3, 1, 7, 3]; - $checksum = 0; - - for ($i = 0, $size = count($low); $i < $size; ++$i) { - $checksum += $weights[$i] * (ord($low[$i]) - 55); - } - - for ($i = 0, $size = count($high); $i < $size; ++$i) { - $checksum += $weights[$i + 3] * $high[$i]; - } - $checksum %= 10; - - return implode('', $low) . $checksum . implode('', $high); - } - - /** - * Taxpayer Identification Number (NIP in Polish) - * - * @see http://en.wikipedia.org/wiki/PESEL#Other_identifiers - * @see http://pl.wikipedia.org/wiki/NIP - * - * @return string 10 digit number - */ - public static function taxpayerIdentificationNumber() - { - $weights = [6, 5, 7, 2, 3, 4, 5, 6, 7]; - $result = []; - - do { - $result = [ - static::randomDigitNotNull(), static::randomDigitNotNull(), static::randomDigitNotNull(), - static::randomDigit(), static::randomDigit(), static::randomDigit(), - static::randomDigit(), static::randomDigit(), static::randomDigit(), - ]; - $checksum = 0; - - for ($i = 0, $size = count($result); $i < $size; ++$i) { - $checksum += $weights[$i] * $result[$i]; - } - $checksum %= 11; - } while ($checksum == 10); - $result[] = $checksum; - - return implode('', $result); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php deleted file mode 100644 index d421539b..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php +++ /dev/null @@ -1,18 +0,0 @@ - - - Prof. Hart will answer or forward your message. - - We would prefer to send you information by email. - - - **The Legal Small Print** - - - (Three Pages) - - ***START**THE SMALL PRINT!**FOR PUBLIC DOMAIN EBOOKS**START*** - Why is this "Small Print!" statement here? You know: lawyers. - They tell us you might sue us if there is something wrong with - your copy of this eBook, even if you got it for free from - someone other than us, and even if what's wrong is not our - fault. So, among other things, this "Small Print!" statement - disclaims most of our liability to you. It also tells you how - you may distribute copies of this eBook if you want to. - - *BEFORE!* YOU USE OR READ THIS EBOOK - By using or reading any part of this PROJECT GUTENBERG-tm - eBook, you indicate that you understand, agree to and accept - this "Small Print!" statement. If you do not, you can receive - a refund of the money (if any) you paid for this eBook by - sending a request within 30 days of receiving it to the person - you got it from. If you received this eBook on a physical - medium (such as a disk), you must return it with your request. - - ABOUT PROJECT GUTENBERG-TM EBOOKS - This PROJECT GUTENBERG-tm eBook, like most PROJECT GUTENBERG-tm eBooks, - is a "public domain" work distributed by Professor Michael S. Hart - through the Project Gutenberg Association (the "Project"). - Among other things, this means that no one owns a United States copyright - on or for this work, so the Project (and you!) can copy and - distribute it in the United States without permission and - without paying copyright royalties. Special rules, set forth - below, apply if you wish to copy and distribute this eBook - under the "PROJECT GUTENBERG" trademark. - - Please do not use the "PROJECT GUTENBERG" trademark to market - any commercial products without permission. - - To create these eBooks, the Project expends considerable - efforts to identify, transcribe and proofread public domain - works. Despite these efforts, the Project's eBooks and any - medium they may be on may contain "Defects". Among other - things, Defects may take the form of incomplete, inaccurate or - corrupt data, transcription errors, a copyright or other - intellectual property infringement, a defective or damaged - disk or other eBook medium, a computer virus, or computer - codes that damage or cannot be read by your equipment. - - LIMITED WARRANTY; DISCLAIMER OF DAMAGES - But for the "Right of Replacement or Refund" described below, - [1] Michael Hart and the Foundation (and any other party you may - receive this eBook from as a PROJECT GUTENBERG-tm eBook) disclaims - all liability to you for damages, costs and expenses, including - legal fees, and [2] YOU HAVE NO REMEDIES FOR NEGLIGENCE OR - UNDER STRICT LIABILITY, OR FOR BREACH OF WARRANTY OR CONTRACT, - INCLUDING BUT NOT LIMITED TO INDIRECT, CONSEQUENTIAL, PUNITIVE - OR INCIDENTAL DAMAGES, EVEN IF YOU GIVE NOTICE OF THE - POSSIBILITY OF SUCH DAMAGES. - - If you discover a Defect in this eBook within 90 days of - receiving it, you can receive a refund of the money (if any) - you paid for it by sending an explanatory note within that - time to the person you received it from. If you received it - on a physical medium, you must return it with your note, and - such person may choose to alternatively give you a replacement - copy. If you received it electronically, such person may - choose to alternatively give you a second opportunity to - receive it electronically. - - THIS EBOOK IS OTHERWISE PROVIDED TO YOU "AS-IS". NO OTHER - WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, ARE MADE TO YOU AS - TO THE EBOOK OR ANY MEDIUM IT MAY BE ON, INCLUDING BUT NOT - LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A - PARTICULAR PURPOSE. - - Some states do not allow disclaimers of implied warranties or - the exclusion or limitation of consequential damages, so the - above disclaimers and exclusions may not apply to you, and you - may have other legal rights. - - INDEMNITY - You will indemnify and hold Michael Hart, the Foundation, - and its trustees and agents, and any volunteers associated - with the production and distribution of Project Gutenberg-tm - texts harmless, from all liability, cost and expense, including - legal fees, that arise directly or indirectly from any of the - following that you do or cause: [1] distribution of this eBook, - [2] alteration, modification, or addition to the eBook, - or [3] any Defect. - - DISTRIBUTION UNDER "PROJECT GUTENBERG-tm" - You may distribute copies of this eBook electronically, or by - disk, book or any other medium if you either delete this - "Small Print!" and all other references to Project Gutenberg, - or: - - [1] Only give exact copies of it. Among other things, this - requires that you do not remove, alter or modify the - eBook or this "small print!" statement. You may however, - if you wish, distribute this eBook in machine readable - binary, compressed, mark-up, or proprietary form, - including any form resulting from conversion by word - processing or hypertext software, but only so long as - *EITHER*: - - [*] The eBook, when displayed, is clearly readable, and - does *not* contain characters other than those - intended by the author of the work, although tilde - (~), asterisk (*) and underline (_) characters may - be used to convey punctuation intended by the - author, and additional characters may be used to - indicate hypertext links; OR - - [*] The eBook may be readily converted by the reader at - no expense into plain ASCII, EBCDIC or equivalent - form by the program that displays the eBook (as is - the case, for instance, with most word processors); - OR - - [*] You provide, or agree to also provide on request at - no additional cost, fee or expense, a copy of the - eBook in its original plain ASCII form (or in EBCDIC - or other equivalent proprietary form). - - [2] Honor the eBook refund and replacement provisions of this - "Small Print!" statement. - - [3] Pay a trademark license fee to the Foundation of 20% of the - gross profits you derive calculated using the method you - already use to calculate your applicable taxes. If you - don't derive profits, no royalty is due. Royalties are - payable to "Project Gutenberg Literary Archive Foundation" - the 60 days following each date you prepare (or were - legally required to prepare) your annual (or equivalent - periodic) tax return. Please contact us beforehand to - let us know your plans and to work out the details. - - WHAT IF YOU *WANT* TO SEND MONEY EVEN IF YOU DON'T HAVE TO? - Project Gutenberg is dedicated to increasing the number of - public domain and licensed works that can be freely distributed - in machine readable form. - - The Project gratefully accepts contributions of money, time, - public domain materials, or royalty free copyright licenses. - Money should be paid to the: - "Project Gutenberg Literary Archive Foundation." - - If you are interested in contributing scanning equipment or - software or other items, please contact Michael Hart at: - hart@pobox.com - - [Portions of this eBook's header and trailer may be reprinted only - when distributed free of all fees. Copyright (C) 2001, 2002 by - Michael S. Hart. Project Gutenberg is a TradeMark and may not be - used in any sales of Project Gutenberg eBooks or other materials be - they hardware or software or any other related product without - express permission.] - - *END THE SMALL PRINT! FOR PUBLIC DOMAIN EBOOKS*Ver.02/11/02*END* - - */ -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php deleted file mode 100644 index 10bdd571..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php +++ /dev/null @@ -1,154 +0,0 @@ -generator->numerify('########0001'); - $n .= check_digit($n); - $n .= check_digit($n); - - return $formatted ? vsprintf('%d%d.%d%d%d.%d%d%d/%d%d%d%d-%d%d', str_split($n)) : $n; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php deleted file mode 100644 index fc68ae66..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ - [ - '4##############', - ], - 'MasterCard' => [ - '5##############', - ], - 'American Express' => [ - '34############', - '37############', - ], - 'Discover Card' => [ - '6011###########', - '622############', - '64#############', - '65#############', - ], - 'Diners' => [ - '301############', - '301##########', - '305############', - '305##########', - '36#############', - '36###########', - '38#############', - '38###########', - ], - 'Elo' => [ - '636368#########', - '438935#########', - '504175#########', - '451416#########', - '636297#########', - '5067###########', - '4576###########', - '4011###########', - ], - 'Hipercard' => [ - '38#############', - '60#############', - ], - 'Aura' => [ - '50#############', - ], - ]; - - /** - * International Bank Account Number (IBAN) - * - * @see http://en.wikipedia.org/wiki/International_Bank_Account_Number - * - * @param string $prefix for generating bank account number of a specific bank - * @param string $countryCode ISO 3166-1 alpha-2 country code - * @param int $length total length without country code and 2 check digits - * - * @return string - */ - public static function bankAccountNumber($prefix = '', $countryCode = 'BR', $length = null) - { - return static::iban($countryCode, $prefix, $length); - } - - /** - * @see list of Brazilians banks (2018-02-15), source: https://pt.wikipedia.org/wiki/Lista_de_bancos_do_Brasil - */ - protected static $banks = [ - 'BADESUL Desenvolvimento S.A. – Agência de Fomento/RS', - 'Banco Central do Brasil', - 'Banco da Amazônia', - 'Banco de Brasília', - 'Banco de Desenvolvimento de Minas Gerais', - 'Banco de Desenvolvimento do Espírito Santo', - 'Banco de Desenvolvimento do Paraná', - 'Banco do Brasil', - 'Banco do Estado de Sergipe Banese Estadual', - 'Banco do Estado do Espírito Santo Banestes', - 'Banco do Estado do Pará', - 'Banco do Estado do Rio Grande do Sul', - 'Banco do Nordeste do Brasil', - 'Banco Nacional de Desenvolvimento Econômico e Social', - 'Banco Regional de Desenvolvimento do Extremo Sul', - 'Caixa Econômica Federal', - 'Banco ABN Amro S.A.', - 'Banco Alfa', - 'Banco Banif', - 'Banco BBM', - 'Banco BMG', - 'Banco Bonsucesso', - 'Banco BTG Pactual', - 'Banco Cacique', - 'Banco Caixa Geral - Brasil', - 'Banco Citibank', - 'Banco Credibel', - 'Banco Credit Suisse', - 'Góis Monteiro & Co', - 'Banco Fator', - 'Banco Fibra', - 'Agibank', - 'Banco Guanabara', - 'Banco Industrial do Brasil', - 'Banco Industrial e Comercial', - 'Banco Indusval', - 'Banco Inter', - 'Banco Itaú BBA', - 'Banco ItaúBank', - 'Banco Itaucred Financiamentos', - 'Banco Mercantil do Brasil', - 'Banco Modal Modal', - 'Banco Morada', - 'Banco Pan', - 'Banco Paulista', - 'Banco Pine', - 'Banco Renner', - 'Banco Ribeirão Preto', - 'Banco Safra', - 'Banco Santander', - 'Banco Sofisa', - 'Banco Topázio', - 'Banco Votorantim', - 'Bradesco Bradesco', - 'Itaú Unibanco', - 'Banco Original', - 'Banco Neon', - 'Nu Pagamentos S.A', - 'XP Investimentos Corretora de Câmbio Títulos e Valores Mobiliários S.A', - ]; - - /** - * @example 'Banco Neon' - */ - public static function bank() - { - return static::randomElement(static::$banks); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php deleted file mode 100644 index 6331e7ba..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php +++ /dev/null @@ -1,159 +0,0 @@ -generator->numerify('#########'); - $n .= check_digit($n); - $n .= check_digit($n); - - return $formatted ? vsprintf('%d%d%d.%d%d%d.%d%d%d-%d%d', str_split($n)) : $n; - } - - /** - * A random RG number, following Sao Paulo state's rules. - * - * @see http://pt.wikipedia.org/wiki/C%C3%A9dula_de_identidade - * - * @param bool $formatted If the number should have dots/dashes or not. - * - * @return string - */ - public function rg($formatted = true) - { - $n = $this->generator->numerify('########'); - $n .= check_digit($n); - - return $formatted ? vsprintf('%d%d.%d%d%d.%d%d%d-%s', str_split($n)) : $n; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php deleted file mode 100644 index 6717def5..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php +++ /dev/null @@ -1,150 +0,0 @@ - '']); - } - - return $number; - } - - /** - * Generates an 9-digit landline number without formatting characters. - * - * @param bool $formatted [def: true] If it should return a formatted number or not. - * - * @return string - */ - public static function landline($formatted = true) - { - $number = static::numerify(static::randomElement(static::$landlineFormats)); - - if (!$formatted) { - $number = strtr($number, ['-' => '']); - } - - return $number; - } - - /** - * Randomizes between cellphone and landline numbers. - * - * @param bool $formatted [def: true] If it should return a formatted number or not. - */ - public static function phone($formatted = true) - { - $options = static::randomElement([ - ['cellphone', false], - ['cellphone', true], - ['landline', null], - ]); - - return call_user_func("static::{$options[0]}", $formatted, $options[1]); - } - - /** - * Generates a complete phone number. - * - * @param string $type [def: landline] One of "landline" or "cellphone". Defaults to "landline" on invalid values. - * @param bool $formatted [def: true] If the number should be formatted or not. - * - * @return string - */ - protected static function anyPhoneNumber($type, $formatted = true) - { - $area = static::areaCode(); - $number = ($type == 'cellphone') ? - static::cellphone($formatted) : - static::landline($formatted); - - return $formatted ? "($area) $number" : $area . $number; - } - - /** - * Concatenates {@link areaCode} and {@link cellphone} into a national cellphone number. - * - * @param bool $formatted [def: true] If it should return a formatted number or not. - * - * @return string - */ - public static function cellphoneNumber($formatted = true) - { - return static::anyPhoneNumber('cellphone', $formatted); - } - - /** - * Concatenates {@link areaCode} and {@link landline} into a national landline number. - * - * @param bool $formatted [def: true] If it should return a formatted number or not. - * - * @return string - */ - public static function landlineNumber($formatted = true) - { - return static::anyPhoneNumber('landline', $formatted); - } - - /** - * Randomizes between complete cellphone and landline numbers. - */ - public function phoneNumber() - { - $method = static::randomElement(['cellphoneNumber', 'landlineNumber']); - - return call_user_func("static::$method", true); - } - - /** - * Randomizes between complete cellphone and landline numbers, cleared from formatting symbols. - */ - public static function phoneNumberCleared() - { - $method = static::randomElement(['cellphoneNumber', 'landlineNumber']); - - return call_user_func("static::$method", false); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php deleted file mode 100644 index d177c872..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php +++ /dev/null @@ -1,3427 +0,0 @@ -= 12; - $verifier = 0; - - for ($i = 1; $i <= $length; ++$i) { - if (!$second_algorithm) { - $multiplier = $i + 1; - } else { - $multiplier = ($i >= 9) ? $i - 7 : $i + 1; - } - $verifier += $numbers[$length - $i] * $multiplier; - } - - $verifier = 11 - ($verifier % 11); - - if ($verifier >= 10) { - $verifier = 0; - } - - return $verifier; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php deleted file mode 100644 index 0d3f8508..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php +++ /dev/null @@ -1,130 +0,0 @@ - 0; --$i) { - $numbers[$i] = substr($number, $i - 1, 1); - $partial[$i] = $numbers[$i] * $factor; - $sum += $partial[$i]; - - if ($factor == $base) { - $factor = 1; - } - ++$factor; - } - $res = $sum % 11; - - if ($res == 0 || $res == 1) { - $digit = 0; - } else { - $digit = 11 - $res; - } - - return $digit; - } - - /** - * @see http://nomesportugueses.blogspot.pt/2012/01/lista-dos-cem-nomes-mais-usados-em.html - */ - protected static $firstNameMale = [ - 'Rodrigo', 'João', 'Martim', 'Afonso', 'Tomás', 'Gonçalo', 'Francisco', 'Tiago', - 'Diogo', 'Guilherme', 'Pedro', 'Miguel', 'Rafael', 'Gabriel', 'Santiago', 'Dinis', - 'David', 'Duarte', 'José', 'Simão', 'Daniel', 'Lucas', 'Gustavo', 'André', 'Denis', - 'Salvador', 'António', 'Vasco', 'Henrique', 'Lourenço', 'Manuel', 'Eduardo', 'Bernardo', - 'Leandro', 'Luís', 'Diego', 'Leonardo', 'Alexandre', 'Rúben', 'Mateus', 'Ricardo', - 'Vicente', 'Filipe', 'Bruno', 'Nuno', 'Carlos', 'Rui', 'Hugo', 'Samuel', 'Álvaro', - 'Matias', 'Fábio', 'Ivo', 'Paulo', 'Jorge', 'Xavier', 'Marco', 'Isaac', 'Raúl', 'Benjamim', - 'Renato', 'Artur', 'Mário', 'Frederico', 'Cristiano', 'Ivan', 'Sérgio', 'Micael', - 'Vítor', 'Edgar', 'Kevin', 'Joaquim', 'Igor', 'Ângelo', 'Enzo', 'Valentim', 'Flávio', - 'Joel', 'Fernando', 'Sebastião', 'Tomé', 'César', 'Cláudio', 'Nelson', 'Lisandro', 'Jaime', - 'Gil', 'Mauro', 'Sandro', 'Hélder', 'Matheus', 'William', 'Gaspar', 'Márcio', - 'Martinho', 'Emanuel', 'Marcos', 'Telmo', 'Davi', 'Wilson', - ]; - - protected static $firstNameFemale = [ - 'Maria', 'Leonor', 'Matilde', 'Mariana', 'Ana', 'Beatriz', 'Inês', 'Lara', 'Carolina', 'Margarida', - 'Joana', 'Sofia', 'Diana', 'Francisca', 'Laura', 'Sara', 'Madalena', 'Rita', 'Mafalda', 'Catarina', - 'Luana', 'Marta', 'Íris', 'Alice', 'Bianca', 'Constança', 'Gabriela', 'Eva', 'Clara', 'Bruna', 'Daniela', - 'Iara', 'Filipa', 'Vitória', 'Ariana', 'Letícia', 'Bárbara', 'Camila', 'Rafaela', 'Carlota', 'Yara', - 'Núria', 'Raquel', 'Ema', 'Helena', 'Benedita', 'Érica', 'Isabel', 'Nicole', 'Lia', 'Alícia', 'Mara', - 'Jéssica', 'Soraia', 'Júlia', 'Luna', 'Victória', 'Luísa', 'Teresa', 'Miriam', 'Adriana', 'Melissa', - 'Andreia', 'Juliana', 'Alexandra', 'Yasmin', 'Tatiana', 'Leticia', 'Luciana', 'Eduarda', 'Cláudia', - 'Débora', 'Fabiana', 'Renata', 'Kyara', 'Kelly', 'Irina', 'Mélanie', 'Nádia', 'Cristiana', 'Liliana', - 'Patrícia', 'Vera', 'Doriana', 'Ângela', 'Mia', 'Erica', 'Mónica', 'Isabela', 'Salomé', 'Cátia', - 'Verónica', 'Violeta', 'Lorena', 'Érika', 'Vanessa', 'Iris', 'Anna', 'Viviane', 'Rebeca', 'Neuza', - ]; - - protected static $lastName = [ - 'Abreu', 'Almeida', 'Alves', 'Amaral', 'Amorim', 'Andrade', 'Anjos', 'Antunes', 'Araújo', 'Assunção', - 'Azevedo', 'Baptista', 'Barbosa', 'Barros', 'Batista', 'Borges', 'Branco', 'Brito', 'Campos', 'Cardoso', - 'Carneiro', 'Carvalho', 'Castro', 'Coelho', 'Correia', 'Costa', 'Cruz', 'Cunha', 'Domingues', 'Esteves', - 'Faria', 'Fernandes', 'Ferreira', 'Figueiredo', 'Fonseca', 'Freitas', 'Garcia', 'Gaspar', 'Gomes', - 'Gonçalves', 'Guerreiro', 'Henriques', 'Jesus', 'Leal', 'Leite', 'Lima', 'Lopes', 'Loureiro', 'Lourenço', - 'Macedo', 'Machado', 'Magalhães', 'Maia', 'Marques', 'Martins', 'Matias', 'Matos', 'Melo', 'Mendes', - 'Miranda', 'Monteiro', 'Morais', 'Moreira', 'Mota', 'Moura', 'Nascimento', 'Neto', 'Neves', 'Nogueira', - 'Nunes', 'Oliveira', 'Pacheco', 'Paiva', 'Pereira', 'Pinheiro', 'Pinho', 'Pinto', 'Pires', 'Ramos', - 'Reis', 'Ribeiro', 'Rocha', 'Rodrigues', 'Santos', 'Silva', 'Simões', 'Soares', 'Sousa', - 'Sá', 'Tavares', 'Teixeira', 'Torres', 'Valente', 'Vaz', 'Vicente', 'Vieira', - ]; -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php deleted file mode 100644 index 948ba94d..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php +++ /dev/null @@ -1,50 +0,0 @@ - '01', 'AR' => '02', 'AG' => '03', 'B' => '40', 'BC' => '04', 'BH' => '05', - 'BN' => '06', 'BT' => '07', 'BV' => '08', 'BR' => '09', 'BZ' => '10', 'CS' => '11', - 'CL' => '51', 'CJ' => '12', 'CT' => '13', 'CV' => '14', 'DB' => '15', 'DJ' => '16', - 'GL' => '17', 'GR' => '52', 'GJ' => '18', 'HR' => '19', 'HD' => '20', 'IL' => '21', - 'IS' => '22', 'IF' => '23', 'MM' => '24', 'MH' => '25', 'MS' => '26', 'NT' => '27', - 'OT' => '28', 'PH' => '29', 'SM' => '30', 'SJ' => '31', 'SB' => '32', 'SV' => '33', - 'TR' => '34', 'TM' => '35', 'TL' => '36', 'VS' => '37', 'VL' => '38', 'VN' => '39', - - 'B1' => '41', 'B2' => '42', 'B3' => '43', 'B4' => '44', 'B5' => '45', 'B6' => '46', - ]; - - /** - * Personal Numerical Code (CNP) - * - * @see http://ro.wikipedia.org/wiki/Cod_numeric_personal - * - * @example 1111111111118 - * - * @param string|null $gender Person::GENDER_MALE or Person::GENDER_FEMALE - * @param string|null $dateOfBirth (1800-2099) 'Y-m-d', 'Y-m', 'Y' I.E. '1981-06-16', '2085-03', '1900' - * @param string|null $county county code where the CNP was issued - * @param bool|null $isResident flag if the person resides in Romania - * - * @return string 13 digits CNP code - */ - public function cnp($gender = null, $dateOfBirth = null, $county = null, $isResident = true) - { - $genders = [Person::GENDER_MALE, Person::GENDER_FEMALE]; - - if (empty($gender)) { - $gender = static::randomElement($genders); - } elseif (!in_array($gender, $genders, false)) { - throw new \InvalidArgumentException("Gender must be '{Person::GENDER_MALE}' or '{Person::GENDER_FEMALE}'"); - } - - $date = $this->getDateOfBirth($dateOfBirth); - - if (null === $county) { - $countyCode = static::randomElement(array_values(static::$cnpCountyCodes)); - } elseif (!array_key_exists($county, static::$cnpCountyCodes)) { - throw new \InvalidArgumentException("Invalid county code '{$county}' received"); - } else { - $countyCode = static::$cnpCountyCodes[$county]; - } - - $cnp = (string) $this->getGenderDigit($date, $gender, $isResident) - . $date->format('ymd') - . $countyCode - . static::numerify('##%') - ; - - $checksum = $this->getChecksumDigit($cnp); - - return $cnp . $checksum; - } - - /** - * @param string|null $dateOfBirth - * - * @return \DateTime - */ - protected function getDateOfBirth($dateOfBirth) - { - if (empty($dateOfBirth)) { - $dateOfBirthParts = [self::numberBetween(1800, 2099)]; - } else { - $dateOfBirthParts = explode('-', $dateOfBirth); - } - $baseDate = \Faker\Provider\DateTime::dateTimeBetween("first day of January {$dateOfBirthParts[0]}", "last day of December {$dateOfBirthParts[0]}"); - - switch (count($dateOfBirthParts)) { - case 1: - $dateOfBirthParts[] = $baseDate->format('m'); - //don't break, we need the day also - // no break - case 2: - $dateOfBirthParts[] = $baseDate->format('d'); - //don't break, next line will - // no break - case 3: - break; - - default: - throw new \InvalidArgumentException("Invalid date of birth - must be null or in the 'Y-m-d', 'Y-m', 'Y' format"); - } - - if ($dateOfBirthParts[0] < 1800 || $dateOfBirthParts[0] > 2099) { - throw new \InvalidArgumentException("Invalid date of birth - year must be between 1800 and 2099, '{$dateOfBirthParts[0]}' received"); - } - - $dateOfBirthFinal = implode('-', $dateOfBirthParts); - $date = \DateTime::createFromFormat('Y-m-d', $dateOfBirthFinal); - //a full (invalid) date might have been supplied, check if it converts - if ($date->format('Y-m-d') !== $dateOfBirthFinal) { - throw new \InvalidArgumentException("Invalid date of birth - '{$date->format('Y-m-d')}' generated based on '{$dateOfBirth}' received"); - } - - return $date; - } - - /** - * https://ro.wikipedia.org/wiki/Cod_numeric_personal#S - * - * @param bool $isResident - * @param string $gender - * - * @return int - */ - protected static function getGenderDigit(\DateTime $dateOfBirth, $gender, $isResident) - { - if (!$isResident) { - return 9; - } - - if ($dateOfBirth->format('Y') < 1900) { - if ($gender == Person::GENDER_MALE) { - return 3; - } - - return 4; - } - - if ($dateOfBirth->format('Y') < 2000) { - if ($gender == Person::GENDER_MALE) { - return 1; - } - - return 2; - } - - if ($gender == Person::GENDER_MALE) { - return 5; - } - - return 6; - } - - /** - * Calculates a checksum for the Personal Numerical Code (CNP). - * - * @param string $value 12 digit CNP - * - * @return int checksum digit - */ - protected function getChecksumDigit($value) - { - $checkNumber = 279146358279; - - $checksum = 0; - - foreach (range(0, 11) as $digit) { - $checksum += (int) substr($value, $digit, 1) * (int) substr($checkNumber, $digit, 1); - } - $checksum = $checksum % 11; - - return $checksum == 10 ? 1 : $checksum; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php deleted file mode 100644 index 01c58591..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php +++ /dev/null @@ -1,62 +0,0 @@ - [ - '021#######', // Bucharest - '023#######', - '024#######', - '025#######', - '026#######', - '027#######', // non-geographic - '031#######', // Bucharest - '033#######', - '034#######', - '035#######', - '036#######', - '037#######', // non-geographic - ], - 'mobile' => [ - '07########', - ], - ]; - - protected static $specialFormats = [ - 'toll-free' => [ - '0800######', - '0801######', // shared-cost numbers - '0802######', // personal numbering - '0806######', // virtual cards - '0807######', // pre-paid cards - '0870######', // internet dial-up - ], - 'premium-rate' => [ - '0900######', - '0903######', // financial information - '0906######', // adult entertainment - ], - ]; - - /** - * @see http://en.wikipedia.org/wiki/Telephone_numbers_in_Romania#Last_years - */ - public function phoneNumber() - { - $type = static::randomElement(array_keys(static::$normalFormats)); - - return static::numerify(static::randomElement(static::$normalFormats[$type])); - } - - public static function tollFreePhoneNumber() - { - return static::numerify(static::randomElement(static::$specialFormats['toll-free'])); - } - - public static function premiumRatePhoneNumber() - { - return static::numerify(static::randomElement(static::$specialFormats['premium-rate'])); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php deleted file mode 100644 index 1e40597c..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php +++ /dev/null @@ -1,155 +0,0 @@ -generator->parse($format); - } - - public static function country() - { - return static::randomElement(static::$country); - } - - public static function postcode() - { - return static::toUpper(static::bothify(static::randomElement(static::$postcode))); - } - - public static function regionSuffix() - { - return static::randomElement(static::$regionSuffix); - } - - public static function region() - { - return static::randomElement(static::$region); - } - - public static function cityPrefix() - { - return static::randomElement(static::$cityPrefix); - } - - public function city() - { - return static::randomElement(static::$city); - } - - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } - - public static function street() - { - return static::randomElement(static::$street); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php deleted file mode 100644 index d31d1208..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php +++ /dev/null @@ -1,23 +0,0 @@ -generator->parse($format); - } - - public static function companyPrefix() - { - return static::randomElement(static::$companyPrefixes); - } - - public static function companyNameElement() - { - return static::randomElement(static::$companyElements); - } - - public static function companyNameSuffix() - { - return static::randomElement(static::$companyNameSuffixes); - } - - /** - * Generates a Russian Taxpayer Personal Identification Number - * - * @param string $area_code - * - * @return string - * - * @deprecated use {@link \Faker\Provider\ru_RU\Company::inn10()} instead - * @see \Faker\Provider\ru_RU\Company::inn10() - */ - public static function inn($area_code = '') - { - return self::inn10($area_code); - } - - /** - * Generates a Russian Taxpayer Personal Identification Number - * - * @param string $area_code - * - * @return string - */ - public static function inn10($area_code = '') - { - if ($area_code === '' || (int) $area_code === 0) { - //Simple generation code for areas in Russian without check for valid - $area_code = self::numberBetween(1, 91); - } else { - $area_code = (int) $area_code; - } - $area_code = str_pad($area_code, 2, '0', STR_PAD_LEFT); - $inn_base = $area_code . static::numerify('#######'); - - return $inn_base . self::inn10Checksum($inn_base); - } - - public static function kpp($inn = '') - { - if ($inn === '' || strlen($inn) < 4) { - $inn = self::inn10(); - } - - return substr($inn, 0, 4) . '01001'; - } - - /** - * Generates INN Checksum - * - * @see https://ru.wikipedia.org/wiki/%D0%98%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_%D0%BD%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%89%D0%B8%D0%BA%D0%B0 - * - * @param string $inn - * - * @return string Checksum (one digit) - */ - public static function inn10Checksum($inn) - { - $multipliers = [2, 4, 10, 3, 5, 9, 4, 6, 8]; - $sum = 0; - - for ($i = 0; $i < 9; ++$i) { - $sum += (int) $inn[$i] * $multipliers[$i]; - } - - return (string) (($sum % 11) % 10); - } - - /** - * Checks whether an INN has a valid checksum - * - * @param string $inn - * - * @return bool - */ - public static function inn10IsValid($inn) - { - return strlen($inn) === 10 && self::inn10Checksum($inn) === $inn[9]; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php deleted file mode 100644 index 195ef5f4..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -.*<' | \ - * sed -r 's/—//' | sed -r 's/[\<\>]//g' | sed -r "s/(^|$)/'/g" | sed -r 's/$/,/' | sed -r 's/\&(laquo|raquo);/"/g' | \ - * sed -r 's/\s+/ /g'" - */ - protected static $banks = [ - 'Новый Промышленный Банк', - 'Новый Символ', - 'Нокссбанк', - 'Ноосфера', - 'Нордеа Банк', - 'Нота-Банк', - 'НС Банк', - 'НСТ-Банк', - 'Нэклис-Банк', - 'Образование', - 'Объединенный Банк Промышленных Инвестиций', - 'Объединенный Банк Республики', - 'Объединенный Капитал', - 'Объединенный Кредитный Банк', - 'Объединенный Кредитный Банк Московский филиал', - 'Объединенный Национальный Банк', - 'Объединенный Резервный Банк', - 'Океан Банк', - 'ОЛМА-Банк', - 'Онего', - 'Оней Банк', - 'ОПМ-Банк', - 'Оргбанк', - 'Оренбург', - 'ОТП Банк', - 'ОФК Банк', - 'Охабанк', - 'Первобанк', - 'Первомайский', - 'Первоуральскбанк', - 'Первый Дортрансбанк', - 'Первый Инвестиционный банк', - 'Первый Клиентский Банк', - 'Первый Чешско-Российский Банк', - 'Пересвет', - 'Пермь', - 'Петербургский Социальный Коммерческий Банк', - 'Петрокоммерц', - 'ПИР Банк', - 'Платина', - 'Плато-Банк', - 'Плюс Банк', - 'Пойдем!', - 'Почтобанк', - 'Прайм Финанс', - 'Преодоление', - 'Приморье', - 'Примсоцбанк', - 'Примтеркомбанк', - 'Прио-Внешторгбанк', - 'Приобье', - 'Приполярный', - 'Приско Капитал Банк', - 'Пробизнесбанк', - 'Проинвестбанк', - 'Прокоммерцбанк', - 'Проминвестбанк', - 'Промрегионбанк', - 'Промсвязьбанк', - 'Промсвязьинвестбанк', - 'Промсельхозбанк', - 'Промтрансбанк', - 'Промышленно-Финансовое Сотрудничество', - 'Промэнергобанк', - 'Профессионал Банк', - 'Профит Банк', - 'Прохладный', - 'Пульс Столицы', - 'Радиотехбанк', - 'Развитие', - 'Развитие-Столица', - 'Райффайзенбанк', - 'Расчетно-Кредитный Банк', - 'Расчетный Дом', - 'РБА', - 'Региональный Банк Развития', - 'Региональный Банк Сбережений', - 'Региональный Коммерческий Банк', - 'Региональный Кредит', - 'Регионфинансбанк', - 'Регнум', - 'Резерв', - 'Ренессанс', - 'Ренессанс Кредит', - 'Рента-Банк', - 'РЕСО Кредит', - 'Республиканский Кредитный Альянс', - 'Ресурс-Траст', - 'Риабанк', - 'Риал-Кредит', - 'Ринвестбанк', - 'Ринвестбанк Московский офис', - 'РИТ-Банк', - 'РН Банк', - 'Росавтобанк', - 'Росбанк', - 'Росбизнесбанк', - 'Росгосстрах Банк', - 'Росдорбанк', - 'РосЕвроБанк', - 'РосинтерБанк', - 'Роспромбанк', - 'Россельхозбанк', - 'Российская Финансовая Корпорация', - 'Российский Капитал', - 'Российский Кредит', - 'Российский Национальный Коммерческий Банк', - 'Россита-Банк', - 'Россия', - 'Рост Банк', - 'Ростфинанс', - 'Росэксимбанк', - 'Росэнергобанк', - 'Роял Кредит Банк', - 'РСКБ', - 'РТС-Банк', - 'РУБанк', - 'Рублев', - 'Руна-Банк', - 'Рунэтбанк', - 'Рускобанк', - 'Руснарбанк', - 'Русский Банк Сбережений', - 'Русский Ипотечный Банк', - 'Русский Международный Банк', - 'Русский Национальный Банк', - 'Русский Стандарт', - 'Русский Торговый Банк', - 'Русский Трастовый Банк', - 'Русский Финансовый Альянс', - 'Русский Элитарный Банк', - 'Русславбанк', - 'Руссобанк', - 'Русстройбанк', - 'Русфинанс Банк', - 'Русь', - 'РусьРегионБанк', - 'Русьуниверсалбанк', - 'РусЮгбанк', - 'РФИ Банк', - 'Саммит Банк', - 'Санкт-Петербургский Банк Инвестиций', - 'Саратов', - 'Саровбизнесбанк', - 'Сбербанк России', - 'Связной Банк', - 'Связь-Банк', - 'СДМ-Банк', - 'Севастопольский Морской банк', - 'Северный Кредит', - 'Северный Народный Банк', - 'Северо-Восточный Альянс', - 'Северо-Западный 1 Альянс Банк', - 'Северстройбанк', - 'Севзапинвестпромбанк', - 'Сельмашбанк', - 'Сервис-Резерв', - 'Сетелем Банк', - 'СИАБ', - 'Сибирский Банк Реконструкции и Развития', - 'Сибнефтебанк', - 'Сибсоцбанк', - 'Сибэс', - 'Сибэс Московский офис', - 'Синергия', - 'Синко-Банк', - 'Система', - 'Сити Инвест Банк', - 'Ситибанк', - 'СКА-Банк', - 'СКБ-Банк', - 'Славия', - 'Славянбанк', - 'Славянский Кредит', - 'Смартбанк', - 'СМБ-Банк', - 'Смолевич', - 'СМП Банк', - 'Снежинский', - 'Собинбанк', - 'Соверен Банк', - 'Советский', - 'Совкомбанк', - 'Современные Стандарты Бизнеса', - 'Содружество', - 'Соколовский', - 'Солид Банк', - 'Солидарность (Москва)', - 'Солидарность (Самара)', - 'Социнвестбанк', - 'Социнвестбанк Московский филиал', - 'Социум-Банк', - 'Союз', - 'Союзный', - 'Спецстройбанк', - 'Спиритбанк', - 'Спурт Банк', - 'Спутник', - 'Ставропольпромстройбанк', - 'Сталь Банк', - 'Стандарт-Кредит', - 'Стар Альянс', - 'СтарБанк', - 'Старооскольский Агропромбанк', - 'Старый Кремль', - 'Стелла-Банк', - 'Столичный Кредит', - 'Стратегия', - 'Строительно-Коммерческий Банк', - 'Стройлесбанк', - 'Сумитомо Мицуи', - 'Сургутнефтегазбанк', - 'СЭБ Банк', - 'Таатта', - 'Таврический', - 'Таганрогбанк', - 'Тагилбанк', - 'Тайдон', - 'Тайм Банк', - 'Тальменка-Банк', - 'Тальменка-Банк Московский филиал', - 'Тамбовкредитпромбанк', - 'Татагропромбанк', - 'Татсоцбанк', - 'Татфондбанк', - 'Таурус Банк', - 'ТверьУниверсалБанк', - 'Тексбанк', - 'Темпбанк', - 'Тендер-Банк', - 'Терра', - 'Тетраполис', - 'Тимер Банк', - 'Тинькофф Банк', - 'Тихоокеанский Внешторгбанк', - 'Тойота Банк', - 'Тольяттихимбанк', - 'Томскпромстройбанк', - 'Торгово-Промышленный Банк Китая', - 'Торговый Городской Банк', - 'Торжокуниверсалбанк', - 'Транскапиталбанк', - 'Транснациональный Банк', - 'Транспортный', - 'Трансстройбанк', - 'Траст Капитал Банк', - 'Тройка-Д Банк', - 'Тульский Промышленник', - 'Тульский Промышленник Московский офис', - 'Тульский Расчетный Центр', - 'Турбобанк', - 'Тусар', - 'ТЭМБР-Банк', - 'ТЭСТ', - 'Углеметбанк', - 'Уздан', - 'Унифин', - 'Унифондбанк', - 'Уралкапиталбанк', - 'Уралприватбанк', - 'Уралпромбанк', - 'Уралсиб', - 'Уралтрансбанк', - 'Уралфинанс', - 'Уральский Банк Реконструкции и Развития', - 'Уральский Межрегиональный Банк', - 'Уральский Финансовый Дом', - 'Ури Банк', - 'Уссури', - 'ФДБ', - 'ФИА-Банк', - 'Финам Банк', - 'Финанс Бизнес Банк', - 'Финансово-Промышленный Капитал', - 'Финансовый Капитал', - 'Финансовый Стандарт', - 'Финарс Банк', - 'Финпромбанк (ФПБ Банк)', - 'Финтрастбанк', - 'ФК Открытие (бывш. НОМОС-Банк)', - 'Флора-Москва', - 'Фольксваген Банк Рус', - 'Фондсервисбанк', - 'Фора-Банк', - 'Форбанк', - 'Форус Банк', - 'Форштадт', - 'Фьючер', - 'Хакасский Муниципальный Банк', - 'Ханты-Мансийский банк Открытие', - 'Химик', - 'Хлынов', - 'Хованский', - 'Холдинвестбанк', - 'Холмск', - 'Хоум Кредит Банк', - 'Центр-инвест', - 'Центрально-Азиатский', - 'Центрально-Европейский Банк', - 'Центркомбанк', - 'ЦентроКредит', - 'Церих', - 'Чайна Констракшн', - 'Чайнасельхозбанк', - 'Челиндбанк', - 'Челябинвестбанк', - 'Черноморский банк развития и реконструкции', - 'Чувашкредитпромбанк', - 'Эйч-Эс-Би-Си Банк (HSBC)', - 'Эко-Инвест', - 'Экономбанк', - 'Экономикс-Банк', - 'Экси-Банк', - 'Эксперт Банк', - 'Экспобанк', - 'Экспресс-Волга', - 'Экспресс-Кредит', - 'Эл Банк', - 'Элита', - 'Эльбин', - 'Энергобанк', - 'Энергомашбанк', - 'Энерготрансбанк', - 'Эно', - 'Энтузиастбанк', - 'Эргобанк', - 'Ю Би Эс Банк', - 'ЮГ-Инвестбанк', - 'Югра', - 'Южный Региональный Банк', - 'ЮМК', - 'Юниаструм Банк', - 'ЮниКредит Банк', - 'Юнистрим', - 'Япы Креди Банк Москва', - 'ЯР-Банк', - 'Яринтербанк', - 'Ярославич', - 'K2 Банк', - 'АББ', - 'Абсолют Банк', - 'Авангард', - 'Аверс', - 'Автоградбанк', - 'АвтоКредитБанк', - 'Автоторгбанк', - 'Агроинкомбанк', - 'Агропромкредит', - 'Агророс', - 'Агросоюз', - 'Адамон Банк', - 'Адамон Банк Московский филиал', - 'Аделантбанк', - 'Адмиралтейский', - 'Азиатско-Тихоокеанский Банк', - 'Азимут', - 'Азия Банк', - 'Азия-Инвест Банк', - 'Ай-Си-Ай-Си-Ай Банк (ICICI)', - 'Айви Банк', - 'АйМаниБанк', - 'Ак Барс', - 'Акибанк', - 'Аккобанк', - 'Акрополь', - 'Аксонбанк', - 'Актив Банк', - 'АктивКапитал Банк', - 'АктивКапитал Банк Московский филиал', - 'АктивКапитал Банк Санкт-Петербургский филиал', - 'Акцент', - 'Акцепт', - 'Акция', - 'Алданзолотобанк', - 'Александровский', - 'Алеф-Банк', - 'Алжан', - 'Алмазэргиэнбанк', - 'АлтайБизнес-Банк', - 'Алтайкапиталбанк', - 'Алтынбанк', - 'Альба Альянс', - 'Альта-Банк', - 'Альтернатива', - 'Альфа-Банк', - 'АМБ Банк', - 'Америкэн Экспресс Банк', - 'Анелик РУ', - 'Анкор Банк', - 'Анталбанк', - 'Апабанк', - 'Аресбанк', - 'Арзамас', - 'Арксбанк', - 'Арсенал', - 'Аспект', - 'Ассоциация', - 'БайкалБанк', - 'БайкалИнвестБанк', - 'Байкалкредобанк', - 'Балаково-Банк', - 'Балтийский Банк', - 'Балтика', - 'Балтинвестбанк', - 'Банк "Акцент" Московский филиал', - 'Банк "МБА-Москва"', - 'Банк "Санкт-Петербург"', - 'Банк АВБ', - 'Банк БКФ', - 'Банк БФА', - 'Банк БЦК-Москва', - 'Банк Город', - 'Банк Жилищного Финансирования', - 'Банк Инноваций и Развития', - 'Банк Интеза', - 'Банк ИТБ', - 'Банк Казани', - 'Банк Китая (Элос)', - 'Банк Кредит Свисс', - 'Банк МБФИ', - 'Банк Москвы', - 'Банк на Красных Воротах', - 'Банк Оранжевый (бывш. Промсервисбанк)', - 'Банк оф Токио-Мицубиси', - 'Банк Премьер Кредит', - 'Банк ПСА Финанс Рус', - 'Банк Развития Технологий', - 'Банк Расчетов и Сбережений', - 'Банк Раунд', - 'Банк РСИ', - 'Банк Сберегательно-кредитного сервиса', - 'Банк СГБ', - 'Банк Торгового Финансирования', - 'Банк Финсервис', - 'Банк Экономический Союз', - 'Банкирский Дом', - 'Банкхаус Эрбе', - 'Башкомснаббанк', - 'Башпромбанк', - 'ББР Банк', - 'Белгородсоцбанк', - 'Бенифит-Банк', - 'Берейт', - 'Бест Эффортс Банк', - 'Бизнес для Бизнеса', - 'Бинбанк', - 'БИНБАНК кредитные карты', - 'Бинбанк Мурманск', - 'БКС Инвестиционный Банк', - 'БМВ Банк', - 'БНП Париба Банк', - 'Богородский', - 'Богородский Муниципальный Банк', - 'Братский АНКБ', - 'БСТ-Банк', - 'Булгар Банк', - 'Бум-Банк', - 'Бумеранг', - 'БФГ-Кредит', - 'БыстроБанк', - 'Вакобанк', - 'Вега-Банк', - 'Век', - 'Великие Луки Банк', - 'Венец', - 'Верхневолжский', - 'Верхневолжский Крымский филиал', - 'Верхневолжский Московский филиал', - 'Верхневолжский Невский филиал', - 'Верхневолжский Таврический филиал', - 'Верхневолжский Ярославский филиал', - 'Веста', - 'Вестинтербанк', - 'Взаимодействие', - 'Викинг', - 'Витабанк', - 'Витязь', - 'Вкабанк', - 'Владбизнесбанк', - 'Владпромбанк', - 'Внешпромбанк', - 'Внешфинбанк', - 'Внешэкономбанк', - 'Военно-Промышленный Банк', - 'Возрождение', - 'Вокбанк', - 'Вологдабанк', - 'Вологжанин', - 'Воронеж', - 'Восточно-Европейский Трастовый Банк', - 'Восточный Экспресс Банк', - 'ВостСибтранскомбанк', - 'ВРБ Москва', - 'Всероссийский Банк Развития Регионов', - 'ВТБ', - 'ВТБ 24', - 'ВУЗ-Банк', - 'Выборг-Банк', - 'Выборг-Банк Московский филиал', - 'Вэлтон Банк', - 'Вятич', - 'Вятка-Банк', - 'Гагаринский', - 'Газбанк', - 'Газнефтьбанк', - 'Газпромбанк', - 'Газстройбанк', - 'Газтрансбанк', - 'Газэнергобанк', - 'Ганзакомбанк', - 'Гарант-Инвест', - 'Гаранти Банк Москва', - 'Геленджик-Банк', - 'Генбанк', - 'Геобанк', - 'Гефест', - 'Глобус', - 'Глобэкс', - 'Голдман Сакс Банк', - 'Горбанк', - 'ГПБ-Ипотека', - 'Гранд Инвест Банк', - 'Гринкомбанк', - 'Гринфилдбанк', - 'Грис-Банк', - 'Гута-Банк', - 'Далена', - 'Далетбанк', - 'Далта-Банк', - 'Дальневосточный Банк', - 'Данске Банк', - 'Девон-Кредит', - 'ДельтаКредит', - 'Денизбанк Москва', - 'Держава', - 'Дж. П. Морган Банк', - 'Джаст Банк', - 'Джей энд Ти Банк', - 'Дил-Банк', - 'Динамичные Системы', - 'Дойче Банк', - 'Долинск', - 'Дом-Банк', - 'Дон-Тексбанк', - 'Донкомбанк', - 'Донхлеббанк', - 'Дорис Банк', - 'Дружба', - 'ЕАТП Банк', - 'Евразийский Банк', - 'Евроазиатский Инвестиционный Банк', - 'ЕвроАксис Банк', - 'Евроальянс', - 'Еврокапитал-Альянс', - 'Еврокоммерц', - 'Еврокредит', - 'Евромет', - 'Европейский Стандарт', - 'Европлан Банк', - 'ЕвроситиБанк', - 'Еврофинанс Моснарбанк', - 'Единственный', - 'Единый Строительный Банк', - 'Екатеринбург', - 'Екатерининский', - 'Енисей', - 'Енисейский Объединенный Банк', - 'Ермак', - 'Живаго-Банк', - 'Жилкредит', - 'Жилстройбанк', - 'Запсибкомбанк', - 'Заречье', - 'Заубер Банк', - 'Земкомбанк', - 'Земский Банк', - 'Зенит', - 'Зенит Сочи', - 'Зернобанк', - 'Зираат Банк', - 'Златкомбанк', - 'И.Д.Е.А. Банк', - 'Иваново', - 'Идеалбанк', - 'Ижкомбанк', - 'ИК Банк', - 'Икано Банк', - 'Инбанк', - 'Инвест-Экобанк', - 'Инвестиционный Банк Кубани', - 'Инвестиционный Республиканский Банк', - 'Инвестиционный Союз', - 'Инвесткапиталбанк', - 'Инвестсоцбанк', - 'Инвестторгбанк', - 'ИНГ Банк', - 'Индустриальный Сберегательный Банк', - 'Инкаробанк', - 'Интерактивный Банк', - 'Интеркоммерц Банк', - 'Интеркоопбанк', - 'Интеркредит', - 'Интернациональный Торговый Банк', - 'Интерпрогрессбанк', - 'Интерпромбанк', - 'Интехбанк', - 'Информпрогресс', - 'Ипозембанк', - 'ИпоТек Банк', - 'Иронбанк', - 'ИРС', - 'Итуруп', - 'Ишбанк', - 'Йошкар-Ола', - 'Калуга', - 'Камский Горизонт', - 'Камский Коммерческий Банк', - 'Камчаткомагропромбанк', - 'Канский', - 'Капитал', - 'Капиталбанк', - 'Кедр', - 'Кемсоцинбанк', - 'Кетовский Коммерческий Банк', - 'Киви Банк', - 'Классик Эконом Банк', - 'Клиентский', - 'Кольцо Урала', - 'Коммерцбанк (Евразия)', - 'Коммерческий Банк Развития', - 'Коммерческий Индо Банк', - 'Консервативный Коммерческий Банк', - 'Констанс-Банк', - 'Континенталь', - 'Конфидэнс Банк', - 'Кор', - 'Кореа Эксчендж Банк Рус', - 'Королевский Банк Шотландии', - 'Космос', - 'Костромаселькомбанк', - 'Кошелев-Банк', - 'Крайинвестбанк', - 'Кранбанк', - 'Креди Агриколь КИБ', - 'Кредит Европа Банк', - 'Кредит Урал Банк', - 'Кредит Экспресс', - 'Кредит-Москва', - 'Кредитинвест', - 'Кредо Финанс', - 'Кредпромбанк', - 'Кремлевский', - 'Крокус-Банк', - 'Крона-Банк', - 'Кросна-Банк', - 'Кроссинвестбанк', - 'Крыловский', - 'КС Банк', - 'Кубанский Универсальный Банк', - 'Кубань Кредит', - 'Кубаньторгбанк', - 'Кузбассхимбанк', - 'Кузнецкбизнесбанк', - 'Кузнецкий', - 'Кузнецкий Мост', - 'Курган', - 'Курскпромбанк', - 'Лада-Кредит', - 'Лайтбанк', - 'Ланта-Банк', - 'Левобережный', - 'Легион', - 'Леноблбанк', - 'Лесбанк', - 'Лето Банк', - 'Липецккомбанк', - 'Логос', - 'Локо-Банк', - 'Лэнд-Банк', - 'М2М Прайвет Банк', - 'Майкопбанк', - 'Майский', - 'МАК-Банк', - 'Максима', - 'Максимум', - 'МАСТ-Банк', - 'Мастер-Капитал', - 'МВС Банк', - 'МДМ Банк', - 'Мегаполис', - 'Международный Акционерный Банк', - 'Международный Банк Развития', - 'Международный Банк Санкт-Петербурга (МБСП)', - 'Международный Коммерческий Банк', - 'Международный Расчетный Банк', - 'Международный Строительный Банк', - 'Международный Финансовый Клуб', - 'Межотраслевая Банковская Корпорация', - 'Межрегиональный Банк Реконструкции', - 'Межрегиональный Клиринговый Банк', - 'Межрегиональный Почтовый Банк', - 'Межрегиональный промышленно-строительный банк', - 'Межрегионбанк', - 'Межтопэнергобанк', - 'Межтрастбанк', - 'Мерседес-Бенц Банк Рус', - 'Металлинвестбанк', - 'Металлург', - 'Меткомбанк (Каменск-Уральский)', - 'Меткомбанк (Череповец)', - 'Метробанк', - 'Метрополь', - 'Мидзухо Банк', - 'Мико-Банк', - 'Милбанк', - 'Миллениум Банк', - 'Мир Бизнес Банк', - 'Мираф-Банк', - 'Мираф-Банк Московский филиал', - 'Миръ', - 'Михайловский ПЖСБ', - 'Морган Стэнли Банк', - 'Морской Банк', - 'Мосводоканалбанк', - 'Москва', - 'Москва-Сити', - 'Московский Вексельный Банк', - 'Московский Индустриальный Банк', - 'Московский Коммерческий Банк', - 'Московский Кредитный Банк', - 'Московский Национальный Инвестиционный Банк', - 'Московский Нефтехимический Банк', - 'Московский Областной Банк', - 'Московско-Парижский Банк', - 'Московское Ипотечное Агентство', - 'Москоммерцбанк', - 'Мосстройэкономбанк (М Банк)', - 'Мострансбанк', - 'Мосуралбанк', - 'МС Банк Рус', - 'МСП Банк', - 'МТИ-Банк', - 'МТС Банк', - 'Муниципальный Камчатпрофитбанк', - 'Мурманский Социальный Коммерческий Банк', - 'МФБанк', - 'Н-Банк', - 'Нальчик', - 'Наратбанк', - 'Народный Банк', - 'Народный Банк Республики Тыва', - 'Народный Доверительный Банк', - 'Народный Земельно-Промышленный Банк', - 'Народный Инвестиционный Банк', - 'Натиксис Банк', - 'Нацинвестпромбанк', - 'Национальная Факторинговая Компания', - 'Национальный Банк "Траст"', - 'Национальный Банк Взаимного Кредита', - 'Национальный Банк Сбережений', - 'Национальный Залоговый Банк', - 'Национальный Клиринговый Банк', - 'Национальный Клиринговый Центр', - 'Национальный Корпоративный Банк', - 'Национальный Резервный Банк', - 'Национальный Стандарт', - 'Наш Дом', - 'НБД-Банк', - 'НБК-Банк', - 'Невастройинвест', - 'Невский Банк', - 'Нейва', - 'Нерюнгрибанк', - 'Нефтепромбанк', - 'Нефтяной Альянс', - 'Нижневолжский Коммерческий Банк', - 'Нико-Банк', - 'НК Банк', - 'НоваховКапиталБанк', - 'Новация', - 'Новикомбанк', - 'Новобанк', - 'Новое Время', - 'Новокиб', - 'Новопокровский', - 'Новый Век', - 'Новый Кредитный Союз', - 'Новый Московский Банк', - ]; - - /** - * @example 'Новый Московский Банк' - */ - public static function bank() - { - return static::randomElement(static::$banks); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php deleted file mode 100644 index 95ec8069..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php +++ /dev/null @@ -1,180 +0,0 @@ -middleNameMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return $this->middleNameFemale(); - } - - return $this->middleName(static::randomElement([ - static::GENDER_MALE, - static::GENDER_FEMALE, - ])); - } - - /** - * Return last name for the specified gender. - * - * @param string|null $gender A gender of the last name should be generated - * for. If the argument is skipped a random gender will be used. - * - * @return string Last name - */ - public function lastName($gender = null) - { - $lastName = static::randomElement(static::$lastName); - - if (static::GENDER_FEMALE === $gender) { - return $lastName . 'а'; - } - - if (static::GENDER_MALE === $gender) { - return $lastName; - } - - return $lastName . static::randomElement(static::$lastNameSuffix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php deleted file mode 100644 index 06f63373..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php +++ /dev/null @@ -1,14 +0,0 @@ -generator->parse(static::randomElement(static::$lastNameFormat)); - } - - public static function lastNameMale() - { - return static::randomElement(static::$lastNameMale); - } - - public static function lastNameFemale() - { - return static::randomElement(static::$lastNameFemale); - } - - /** - * @example 'PhD' - */ - public static function suffix() - { - return static::randomElement(static::$suffix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php deleted file mode 100644 index bd195e4f..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php +++ /dev/null @@ -1,15 +0,0 @@ -format('ymd'); - $randomDigits = $this->getBirthNumber($gender); - - $checksum = Luhn::computeCheckDigit($datePart . $randomDigits); - - return $datePart . '-' . $randomDigits . $checksum; - } - - /** - * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE - * - * @return string of three digits - */ - protected function getBirthNumber($gender = null) - { - if ($gender && $gender === static::GENDER_MALE) { - return (string) static::numerify('##') . static::randomElement([1, 3, 5, 7, 9]); - } - - $zeroCheck = static function ($callback) { - do { - $randomDigits = $callback(); - } while ($randomDigits === '000'); - - return $randomDigits; - }; - - if ($gender && $gender === static::GENDER_FEMALE) { - return $zeroCheck(static function () { - return (string) static::numerify('##') . static::randomElement([0, 2, 4, 6, 8]); - }); - } - - return $zeroCheck(static function () { - return (string) static::numerify('###'); - }); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php deleted file mode 100644 index 2d5c5882..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php +++ /dev/null @@ -1,64 +0,0 @@ - Swedish mobile number formats - */ - protected static array $mobileFormats = [ - '+467########', - '+46(0)7########', - '+46 (0)7## ## ## ##', - '+46 (0)7## ### ###', - '07## ## ## ##', - '07## ### ###', - '07##-## ## ##', - '07##-### ###', - '07# ### ## ##', - '07#-### ## ##', - '07#-#######', - ]; - - public function mobileNumber(): string - { - $format = static::randomElement(static::$mobileFormats); - - return self::numerify($this->generator->parse($format)); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Address.php deleted file mode 100644 index 49182816..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/th_TH/Address.php +++ /dev/null @@ -1,141 +0,0 @@ -format('a') === 'am' ? 'öö' : 'ös'; - } - - public static function dayOfWeek($max = 'now') - { - $map = [ - 'Sunday' => 'Pazar', - 'Monday' => 'Pazartesi', - 'Tuesday' => 'Salı', - 'Wednesday' => 'Çarşamba', - 'Thursday' => 'Perşembe', - 'Friday' => 'Cuma', - 'Saturday' => 'Cumartesi', - ]; - $week = static::dateTime($max)->format('l'); - - return $map[$week] ?? $week; - } - - public static function monthName($max = 'now') - { - $map = [ - 'January' => 'Ocak', - 'February' => 'Şubat', - 'March' => 'Mart', - 'April' => 'Nisan', - 'May' => 'Mayıs', - 'June' => 'Haziran', - 'July' => 'Temmuz', - 'August' => 'Ağustos', - 'September' => 'Eylül', - 'October' => 'Ekim', - 'November' => 'Kasım', - 'December' => 'Aralık', - ]; - $month = static::dateTime($max)->format('F'); - - return $map[$month] ?? $month; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php deleted file mode 100644 index 9d821119..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ - $digit) { - if ($index % 2 === 0) { - $evenSum += $digit; - } else { - $oddSum += $digit; - } - } - - $tenthDigit = (7 * $evenSum - $oddSum) % 10; - $eleventhDigit = ($evenSum + $oddSum + $tenthDigit) % 10; - - return $tenthDigit . $eleventhDigit; - } - - /** - * Checks whether a TCNo has a valid checksum - * - * @param string $tcNo - * - * @return bool - */ - public static function tcNoIsValid($tcNo) - { - return self::tcNoChecksum(substr($tcNo, 0, -2)) === substr($tcNo, -2, 2); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php deleted file mode 100644 index 3103c77e..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php +++ /dev/null @@ -1,186 +0,0 @@ -generator->parse($format); - } - - public static function streetPrefix() - { - return static::randomElement(static::$streetPrefix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php deleted file mode 100644 index 502161ce..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php +++ /dev/null @@ -1,23 +0,0 @@ -generator->parse($format); - } - - public static function companyPrefix() - { - return static::randomElement(static::$companyPrefix); - } - - public static function companyName() - { - return static::randomElement(static::$companyName); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php deleted file mode 100644 index 61193547..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php +++ /dev/null @@ -1,9 +0,0 @@ -middleNameMale(); - } - - if ($gender === static::GENDER_FEMALE) { - return $this->middleNameFemale(); - } - - return $this->middleName(static::randomElement([ - static::GENDER_MALE, - static::GENDER_FEMALE, - ])); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php deleted file mode 100644 index 15b443f3..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php +++ /dev/null @@ -1,72 +0,0 @@ -generator->parse($format)); - } - - public function hamletPrefix() - { - return static::randomElement(static::$hamletPrefix); - } - - public function wardName() - { - $format = static::randomElement(static::$wardNameFormats); - - return static::bothify($this->generator->parse($format)); - } - - public function wardPrefix() - { - return static::randomElement(static::$wardPrefix); - } - - public function districtName() - { - $format = static::randomElement(static::$districtNameFormats); - - return static::bothify($this->generator->parse($format)); - } - - public function districtPrefix() - { - return static::randomElement(static::$districtPrefix); - } - - /** - * @example 'Hà Nội' - */ - public function city() - { - return static::randomElement(static::$city); - } - - /** - * @example 'Bắc Giang' - */ - public static function province() - { - return static::randomElement(static::$province); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php deleted file mode 100644 index df788550..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php +++ /dev/null @@ -1,36 +0,0 @@ -generator->parse(static::randomElement(static::$middleNameFormat)); - } - - public static function middleNameMale() - { - return static::randomElement(static::$middleNameMale); - } - - public static function middleNameFemale() - { - return static::randomElement(static::$middleNameFemale); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php deleted file mode 100644 index a6f47f15..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php +++ /dev/null @@ -1,61 +0,0 @@ - [ - '0[a] ### ####', - '(0[a]) ### ####', - '0[a]-###-####', - '(0[a])###-####', - '84-[a]-###-####', - '(84)([a])###-####', - '+84-[a]-###-####', - ], - '8' => [ - '0[a] #### ####', - '(0[a]) #### ####', - '0[a]-####-####', - '(0[a])####-####', - '84-[a]-####-####', - '(84)([a])####-####', - '+84-[a]-####-####', - ], - ]; - - public function phoneNumber() - { - $areaCode = static::randomElement(static::$areaCodes); - $areaCodeLength = strlen($areaCode); - $digits = 7; - - if ($areaCodeLength < 2) { - $digits = 8; - } - - return static::numerify(str_replace('[a]', $areaCode, static::randomElement(static::$formats[$digits]))); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php deleted file mode 100644 index d67e1497..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php +++ /dev/null @@ -1,148 +0,0 @@ -city() . static::area(); - } - - public static function postcode() - { - $prefix = str_pad(self::numberBetween(1, 85), 2, 0, STR_PAD_LEFT); - $suffix = '00'; - - return $prefix . self::numberBetween(10, 88) . $suffix; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php deleted file mode 100644 index 254fd071..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php +++ /dev/null @@ -1,66 +0,0 @@ -format('a') === 'am' ? '上午' : '下午'; - } - - public static function dayOfWeek($max = 'now') - { - $map = [ - 'Sunday' => '星期日', - 'Monday' => '星期一', - 'Tuesday' => '星期二', - 'Wednesday' => '星期三', - 'Thursday' => '星期四', - 'Friday' => '星期五', - 'Saturday' => '星期六', - ]; - $week = static::dateTime($max)->format('l'); - - return $map[$week] ?? $week; - } - - public static function monthName($max = 'now') - { - $map = [ - 'January' => '一月', - 'February' => '二月', - 'March' => '三月', - 'April' => '四月', - 'May' => '五月', - 'June' => '六月', - 'July' => '七月', - 'August' => '八月', - 'September' => '九月', - 'October' => '十月', - 'November' => '十一月', - 'December' => '十二月', - ]; - $month = static::dateTime($max)->format('F'); - - return $map[$month] ?? $month; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php deleted file mode 100644 index e1a87964..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php +++ /dev/null @@ -1,24 +0,0 @@ - [ - '板橋區', '三重區', '中和區', '永和區', - '新莊區', '新店區', '樹林區', '鶯歌區', - '三峽區', '淡水區', '汐止區', '瑞芳區', - '土城區', '蘆洲區', '五股區', '泰山區', - '林口區', '深坑區', '石碇區', '坪林區', - '三芝區', '石門區', '八里區', '平溪區', - '雙溪區', '貢寮區', '金山區', '萬里區', - '烏來區', - ], - '宜蘭縣' => [ - '宜蘭市', '羅東鎮', '蘇澳鎮', '頭城鎮', '礁溪鄉', - '壯圍鄉', '員山鄉', '冬山鄉', '五結鄉', '三星鄉', - '大同鄉', '南澳鄉', - ], - '桃園市' => [ - '桃園區', '中壢區', '大溪區', '楊梅區', '蘆竹區', - '大園區', '龜山區', '八德區', '龍潭區', '平鎮區', - '新屋區', '觀音區', '復興區', - ], - '新竹縣' => [ - '竹北市', '竹東鎮', '新埔鎮', '關西鎮', '湖口鄉', - '新豐鄉', '芎林鄉', '橫山鄉', '北埔鄉', '寶山鄉', - '峨眉鄉', '尖石鄉', '五峰鄉', - ], - '苗栗縣' => [ - '苗栗市', '苑裡鎮', '通霄鎮', '竹南鎮', '頭份鎮', - '後龍鎮', '卓蘭鎮', '大湖鄉', '公館鄉', '銅鑼鄉', - '南庄鄉', '頭屋鄉', '三義鄉', '西湖鄉', '造橋鄉', - '三灣鄉', '獅潭鄉', '泰安鄉', - ], - '臺中市' => [ - '豐原區', '東勢區', '大甲區', '清水區', '沙鹿區', - '梧棲區', '后里區', '神岡區', '潭子區', '大雅區', - '新社區', '石岡區', '外埔區', '大安區', '烏日區', - '大肚區', '龍井區', '霧峰區', '太平區', '大里區', - '和平區', '中區', '東區', '南區', '西區', '北區', - '西屯區', '南屯區', '北屯區', - ], - '彰化縣' => [ - '彰化市', '鹿港鎮', '和美鎮', '線西鄉', '伸港鄉', - '福興鄉', '秀水鄉', '花壇鄉', '芬園鄉', '員林鎮', - '溪湖鎮', '田中鎮', '大村鄉', '埔鹽鄉', '埔心鄉', - '永靖鄉', '社頭鄉', '二水鄉', '北斗鎮', '二林鎮', - '田尾鄉', '埤頭鄉', '芳苑鄉', '大城鄉', '竹塘鄉', - '溪州鄉', - ], - '南投縣' => [ - '南投市', '埔里鎮', '草屯鎮', '竹山鎮', '集集鎮', - '名間鄉', '鹿谷鄉', '中寮鄉', '魚池鄉', '國姓鄉', - '水里鄉', '信義鄉', '仁愛鄉', - ], - '雲林縣' => [ - '斗六市', '斗南鎮', '虎尾鎮', '西螺鎮', '土庫鎮', - '北港鎮', '古坑鄉', '大埤鄉', '莿桐鄉', '林內鄉', - '二崙鄉', '崙背鄉', '麥寮鄉', '東勢鄉', '褒忠鄉', - '臺西鄉', '元長鄉', '四湖鄉', '口湖鄉', '水林鄉', - ], - '嘉義縣' => [ - '太保市', '朴子市', '布袋鎮', '大林鎮', '民雄鄉', - '溪口鄉', '新港鄉', '六腳鄉', '東石鄉', '義竹鄉', - '鹿草鄉', '水上鄉', '中埔鄉', '竹崎鄉', '梅山鄉', - '番路鄉', '大埔鄉', '阿里山鄉', - ], - '臺南市' => [ - '新營區', '鹽水區', '白河區', '柳營區', '後壁區', - '東山區', '麻豆區', '下營區', '六甲區', '官田區', - '大內區', '佳里區', '學甲區', '西港區', '七股區', - '將軍區', '北門區', '新化區', '善化區', '新市區', - '安定區', '山上區', '玉井區', '楠西區', '南化區', - '左鎮區', '仁德區', '歸仁區', '關廟區', '龍崎區', - '永康區', '東區', '南區', '西區', '北區', '中區', - '安南區', '安平區', - ], - '高雄市' => [ - '鳳山區', '林園區', '大寮區', '大樹區', '大社區', - '仁武區', '鳥松區', '岡山區', '橋頭區', '燕巢區', - '田寮區', '阿蓮區', '路竹區', '湖內區', '茄萣區', - '永安區', '彌陀區', '梓官區', '旗山區', '美濃區', - '六龜區', '甲仙區', '杉林區', '內門區', '茂林區', - '桃源區', '三民區', '鹽埕區', '鼓山區', '左營區', - '楠梓區', '三民區', '新興區', '前金區', '苓雅區', - '前鎮區', '旗津區', '小港區', - ], - '屏東縣' => [ - '屏東市', '潮州鎮', '東港鎮', '恆春鎮', '萬丹鄉', - '長治鄉', '麟洛鄉', '九如鄉', '里港鄉', '鹽埔鄉', - '高樹鄉', '萬巒鄉', '內埔鄉', '竹田鄉', '新埤鄉', - '枋寮鄉', '新園鄉', '崁頂鄉', '林邊鄉', '南州鄉', - '佳冬鄉', '琉球鄉', '車城鄉', '滿州鄉', '枋山鄉', - '三地門鄉', '霧臺鄉', '瑪家鄉', '泰武鄉', '來義鄉', - '春日鄉', '獅子鄉', '牡丹鄉', - ], - '臺東縣' => [ - '臺東市', '成功鎮', '關山鎮', '卑南鄉', '鹿野鄉', - '池上鄉', '東河鄉', '長濱鄉', '太麻里鄉', '大武鄉', - '綠島鄉', '海端鄉', '延平鄉', '金峰鄉', '達仁鄉', - '蘭嶼鄉', - ], - '花蓮縣' => [ - '花蓮市', '鳳林鎮', '玉里鎮', '新城鄉', '吉安鄉', - '壽豐鄉', '光復鄉', '豐濱鄉', '瑞穗鄉', '富里鄉', - '秀林鄉', '萬榮鄉', '卓溪鄉', - ], - '澎湖縣' => [ - '馬公市', '湖西鄉', '白沙鄉', '西嶼鄉', '望安鄉', - '七美鄉', - ], - '基隆市' => [ - '中正區', '七堵區', '暖暖區', '仁愛區', '中山區', - '安樂區', '信義區', - ], - '新竹市' => [ - '東區', '北區', '香山區', - ], - '嘉義市' => [ - '東區', '西區', - ], - '臺北市' => [ - '松山區', '信義區', '大安區', '中山區', '中正區', - '大同區', '萬華區', '文山區', '南港區', '內湖區', - '士林區', '北投區', - ], - '連江縣' => [ - '南竿鄉', '北竿鄉', '莒光鄉', '東引鄉', - ], - '金門縣' => [ - '金城鎮', '金沙鎮', '金湖鎮', '金寧鄉', '烈嶼鄉', '烏坵鄉', - ], - ]; - - /** - * @see http://terms.naer.edu.tw/download/287/ - */ - protected static $country = [ - '不丹', '中非', '丹麥', '伊朗', '冰島', '剛果', - '加彭', '北韓', '南非', '卡達', '印尼', '印度', - '古巴', '哥德', '埃及', '多哥', '寮國', '尼日', - '巴曼', '巴林', '巴紐', '巴西', '希臘', '帛琉', - '德國', '挪威', '捷克', '教廷', '斐濟', '日本', - '智利', '東加', '查德', '汶萊', '法國', '波蘭', - '波赫', '泰國', '海地', '瑞典', '瑞士', '祕魯', - '秘魯', '約旦', '紐埃', '緬甸', '美國', '聖尼', - '聖普', '肯亞', '芬蘭', '英國', '荷蘭', '葉門', - '蘇丹', '諾魯', '貝南', '越南', '迦彭', - '迦納', '阿曼', '阿聯', '韓國', '馬利', - '以色列', '以色利', '伊拉克', '俄羅斯', - '利比亞', '加拿大', '匈牙利', '南極洲', - '南蘇丹', '厄瓜多', '吉布地', '吐瓦魯', - '哈撒克', '哈薩克', '喀麥隆', '喬治亞', - '土庫曼', '土耳其', '塔吉克', '塞席爾', - '墨西哥', '大西洋', '奧地利', '孟加拉', - '安哥拉', '安地卡', '安道爾', '尚比亞', - '尼伯爾', '尼泊爾', '巴哈馬', '巴拉圭', - '巴拿馬', '巴貝多', '幾內亞', '愛爾蘭', - '所在國', '摩洛哥', '摩納哥', '敍利亞', - '敘利亞', '新加坡', '東帝汶', '柬埔寨', - '比利時', '波扎那', '波札那', '烏克蘭', - '烏干達', '烏拉圭', '牙買加', '獅子山', - '甘比亞', '盧安達', '盧森堡', '科威特', - '科索夫', '科索沃', '立陶宛', '紐西蘭', - '維德角', '義大利', '聖文森', '艾塞亞', - '菲律賓', '萬那杜', '葡萄牙', '蒲隆地', - '蓋亞納', '薩摩亞', '蘇利南', '西班牙', - '貝里斯', '賴索托', '辛巴威', '阿富汗', - '阿根廷', '馬其頓', '馬拉威', '馬爾他', - '黎巴嫩', '亞塞拜然', '亞美尼亞', '保加利亞', - '南斯拉夫', '厄利垂亞', '史瓦濟蘭', '吉爾吉斯', - '吉里巴斯', '哥倫比亞', '坦尚尼亞', '塞內加爾', - '塞内加爾', '塞爾維亞', '多明尼加', '多米尼克', - '奈及利亞', '委內瑞拉', '宏都拉斯', '尼加拉瓜', - '巴基斯坦', '庫克群島', '愛沙尼亞', '拉脫維亞', - '摩爾多瓦', '摩里西斯', '斯洛伐克', '斯里蘭卡', - '格瑞那達', '模里西斯', '波多黎各', '澳大利亞', - '烏茲別克', '玻利維亞', '瓜地馬拉', '白俄羅斯', - '突尼西亞', '納米比亞', '索馬利亞', '索馬尼亞', - '羅馬尼亞', '聖露西亞', '聖馬利諾', '莫三比克', - '莫三鼻克', '葛摩聯盟', '薩爾瓦多', '衣索比亞', - '西薩摩亞', '象牙海岸', '賴比瑞亞', '賽普勒斯', - '馬來西亞', '馬爾地夫', '克羅埃西亞', - '列支敦斯登', '哥斯大黎加', '布吉納法索', - '布吉那法索', '幾內亞比索', '幾內亞比紹', - '斯洛維尼亞', '索羅門群島', '茅利塔尼亞', - '蒙特內哥羅', '赤道幾內亞', '阿爾及利亞', - '阿爾及尼亞', '阿爾巴尼亞', '馬紹爾群島', - '馬達加斯加', '密克羅尼西亞', '沙烏地阿拉伯', - '千里達及托巴哥', - ]; - - protected static $postcode = ['###-##', '###']; - - public function street() - { - return static::randomElement(static::$street); - } - - public static function randomChineseNumber() - { - $digits = [ - '', '一', '二', '三', '四', '五', '六', '七', '八', '九', - ]; - - return $digits[static::randomDigitNotNull()]; - } - - public static function randomNumber2() - { - return static::randomNumber(2) + 1; - } - - public static function randomNumber3() - { - return static::randomNumber(3) + 1; - } - - public static function localLatitude() - { - return static::randomFloat(6, 22, 25); - } - - public static function localLongitude() - { - return static::randomFloat(6, 120, 122); - } - - public function city() - { - $county = static::randomElement(array_keys(static::$city)); - $city = static::randomElement(static::$city[$county]); - - return $county . $city; - } - - public function state() - { - return '臺灣省'; - } - - public static function stateAbbr() - { - return '臺'; - } - - public static function cityPrefix() - { - return ''; - } - - public static function citySuffix() - { - return ''; - } - - public static function secondaryAddress() - { - return (static::randomNumber(2) + 1) . static::randomElement(static::$secondaryAddressSuffix); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php deleted file mode 100644 index 19fa6d87..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php +++ /dev/null @@ -1,66 +0,0 @@ -generator->parse($format); - } - - public static function companyModifier() - { - return static::randomElement(static::$companyModifier); - } - - public static function companyPrefix() - { - return static::randomElement(static::$companyPrefix); - } - - public function catchPhrase() - { - return static::randomElement(static::$catchPhrase); - } - - public function bs() - { - $result = ''; - - foreach (static::$bsWords as &$word) { - $result .= static::randomElement($word); - } - - return $result; - } - - /** - * return standard VAT / Tax ID / Uniform Serial Number - * - * @example 28263822 - * - * @return int - */ - public function VAT() - { - return static::randomNumber(8, true); - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php deleted file mode 100644 index 102a716c..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php +++ /dev/null @@ -1,48 +0,0 @@ -format('a') === 'am' ? '上午' : '下午'; - } - - public static function dayOfWeek($max = 'now') - { - $map = [ - 'Sunday' => '星期日', - 'Monday' => '星期一', - 'Tuesday' => '星期二', - 'Wednesday' => '星期三', - 'Thursday' => '星期四', - 'Friday' => '星期五', - 'Saturday' => '星期六', - ]; - $week = static::dateTime($max)->format('l'); - - return $map[$week] ?? $week; - } - - public static function monthName($max = 'now') - { - $map = [ - 'January' => '一月', - 'February' => '二月', - 'March' => '三月', - 'April' => '四月', - 'May' => '五月', - 'June' => '六月', - 'July' => '七月', - 'August' => '八月', - 'September' => '九月', - 'October' => '十月', - 'November' => '十一月', - 'December' => '十二月', - ]; - $month = static::dateTime($max)->format('F'); - - return $map[$month] ?? $month; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php deleted file mode 100644 index c3fb5fff..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php +++ /dev/null @@ -1,28 +0,0 @@ - 10, - 'B' => 11, - 'C' => 12, - 'D' => 13, - 'E' => 14, - 'F' => 15, - 'G' => 16, - 'H' => 17, - 'I' => 34, - 'J' => 18, - 'K' => 19, - 'M' => 21, - 'N' => 22, - 'O' => 35, - 'P' => 23, - 'Q' => 24, - 'T' => 27, - 'U' => 28, - 'V' => 29, - 'W' => 32, - 'X' => 30, - 'Z' => 33, - ]; - - /** - * @see https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E5%9C%8B%E6%B0%91%E8%BA%AB%E5%88%86%E8%AD%89 - */ - public static $idDigitValidator = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]; - - protected static $maleNameFormats = [ - '{{lastName}}{{firstNameMale}}', - ]; - - protected static $femaleNameFormats = [ - '{{lastName}}{{firstNameFemale}}', - ]; - - protected static $titleMale = ['先生', '博士', '教授']; - protected static $titleFemale = ['小姐', '太太', '博士', '教授']; - - /** - * @see http://zh.wikipedia.org/wiki/%E7%99%BE%E5%AE%B6%E5%A7%93 - */ - protected static $lastName = [ - '趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮', - '陳', '褚', '衛', '蔣', '沈', '韓', '楊', '朱', '秦', - '尤', '許', '何', '呂', '施', '張', '孔', '曹', '嚴', - '華', '金', '魏', '陶', '姜', '戚', '謝', '鄒', '喻', - '柏', '水', '竇', '章', '雲', '蘇', '潘', '葛', - '奚', '范', '彭', '郎', '魯', '韋', '昌', '馬', - '苗', '鳳', '花', '方', '俞', '任', '袁', '柳', - '酆', '鮑', '史', '唐', '費', '廉', '岑', '薛', - '雷', '賀', '倪', '湯', '滕', '殷', '羅', '畢', - '郝', '鄔', '安', '常', '樂', '于', '時', '傅', - '皮', '卞', '齊', '康', '伍', '余', '元', '卜', - '顧', '孟', '平', '黃', '和', '穆', '蕭', '尹', - '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', - '米', '貝', '明', '臧', '計', '伏', '成', '戴', - '談', '宋', '茅', '龐', '熊', '紀', '舒', '屈', - '項', '祝', '董', '梁', '杜', '阮', '藍', '閔', - '席', '季', '麻', '強', '賈', '路', '婁', '危', - '江', '童', '顏', '郭', '梅', '盛', '林', '刁', - '鍾', '徐', '丘', '駱', '高', '夏', '蔡', '田', - '樊', '胡', '凌', '霍', '虞', '萬', '支', '柯', - '昝', '管', '盧', '莫', '經', '房', '裘', '繆', - '干', '解', '應', '宗', '丁', '宣', '賁', '鄧', - '郁', '單', '杭', '洪', '包', '諸', '左', '石', - '崔', '吉', '鈕', '龔', '程', '嵇', '邢', '滑', - '裴', '陸', '榮', '翁', '荀', '羊', '於', '惠', - '甄', '麴', '家', '封', '芮', '羿', '儲', '靳', - '汲', '邴', '糜', '松', '井', '段', '富', '巫', - '烏', '焦', '巴', '弓', '牧', '隗', '山', '谷', - '車', '侯', '宓', '蓬', '全', '郗', '班', '仰', - '秋', '仲', '伊', '宮', '甯', '仇', '欒', '暴', - '甘', '鈄', '厲', '戎', '祖', '武', '符', '劉', - '景', '詹', '束', '龍', '葉', '幸', '司', '韶', - '郜', '黎', '薊', '薄', '印', '宿', '白', '懷', - '蒲', '邰', '從', '鄂', '索', '咸', '籍', '賴', - '卓', '藺', '屠', '蒙', '池', '喬', '陰', '鬱', - '胥', '能', '蒼', '雙', '聞', '莘', '黨', '翟', - '譚', '貢', '勞', '逄', '姬', '申', '扶', '堵', - '冉', '宰', '酈', '雍', '郤', '璩', '桑', '桂', - '濮', '牛', '壽', '通', '邊', '扈', '燕', '冀', - '郟', '浦', '尚', '農', '溫', '別', '莊', '晏', - '柴', '瞿', '閻', '充', '慕', '連', '茹', '習', - '宦', '艾', '魚', '容', '向', '古', '易', '慎', - '戈', '廖', '庾', '終', '暨', '居', '衡', '步', - '都', '耿', '滿', '弘', '匡', '國', '文', '寇', - '廣', '祿', '闕', '東', '歐', '殳', '沃', '利', - '蔚', '越', '夔', '隆', '師', '鞏', '厙', '聶', - '晁', '勾', '敖', '融', '冷', '訾', '辛', '闞', - '那', '簡', '饒', '空', '曾', '毋', '沙', '乜', - '養', '鞠', '須', '豐', '巢', '關', '蒯', '相', - '查', '后', '荊', '紅', '游', '竺', '權', '逯', - '蓋', '益', '桓', '公', '万俟', '司馬', '上官', - '歐陽', '夏侯', '諸葛', '聞人', '東方', '赫連', - '皇甫', '尉遲', '公羊', '澹臺', '公冶', '宗政', - '濮陽', '淳于', '單于', '太叔', '申屠', '公孫', - '仲孫', '軒轅', '令狐', '鍾離', '宇文', '長孫', - '慕容', '鮮于', '閭丘', '司徒', '司空', '亓官', - '司寇', '仉', '督', '子車', '顓孫', '端木', '巫馬', - '公西', '漆雕', '樂正', '壤駟', '公良', '拓跋', - '夾谷', '宰父', '穀梁', '晉', '楚', '閆', '法', - '汝', '鄢', '涂', '欽', '段干', '百里', '東郭', - '南門', '呼延', '歸', '海', '羊舌', '微生', '岳', - '帥', '緱', '亢', '況', '後', '有', '琴', '梁丘', - '左丘', '東門', '西門', '商', '牟', '佘', '佴', - '伯', '賞', '南宮', '墨', '哈', '譙', '笪', '年', - '愛', '陽', '佟', '第五', '言', '福', - ]; - - /** - * @see http://technology.chtsai.org/namefreq/ - */ - protected static $characterMale = [ - '佳', '俊', '信', '偉', '傑', '冠', '君', '哲', - '嘉', '威', '宇', '安', '宏', '宗', '宜', '家', - '庭', '廷', '建', '彥', '心', '志', '思', '承', - '文', '柏', '樺', '瑋', '穎', '美', '翰', '華', - '詩', '豪', '賢', '軒', '銘', '霖', - ]; - - protected static $characterFemale = [ - '伶', '佩', '佳', '依', '儀', '冠', '君', '嘉', - '如', '娟', '婉', '婷', '安', '宜', '家', '庭', - '心', '思', '怡', '惠', '慧', '文', '欣', '涵', - '淑', '玲', '珊', '琪', '琬', '瑜', '穎', '筑', - '筱', '美', '芬', '芳', '華', '萍', '萱', '蓉', - '詩', '貞', '郁', '鈺', '雅', '雯', '靜', '馨', - ]; - - public static function randomName($pool, $n) - { - $name = ''; - - for ($i = 0; $i < $n; ++$i) { - $name .= static::randomElement($pool); - } - - return $name; - } - - public static function firstNameMale() - { - return static::randomName(static::$characterMale, self::numberBetween(1, 2)); - } - - public static function firstNameFemale() - { - return static::randomName(static::$characterFemale, self::numberBetween(1, 2)); - } - - public static function suffix() - { - return ''; - } - - /** - * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE - * - * @see https://en.wikipedia.org/wiki/National_Identification_Card_(Republic_of_China) - * - * @return string Length 10 alphanumeric characters, begins with 1 latin character (birthplace), - * 1 number (gender) and then 8 numbers (the last one is check digit). - */ - public function personalIdentityNumber($gender = null) - { - $birthPlace = self::randomKey(self::$idBirthplaceCode); - $birthPlaceCode = self::$idBirthplaceCode[$birthPlace]; - - $gender = ($gender != null) ? $gender : self::randomElement([self::GENDER_FEMALE, self::GENDER_MALE]); - $genderCode = ($gender === self::GENDER_MALE) ? 1 : 2; - - $randomNumberCode = self::randomNumber(7, true); - - $codes = str_split($birthPlaceCode . $genderCode . $randomNumberCode); - $total = 0; - - foreach ($codes as $key => $code) { - $total += $code * self::$idDigitValidator[$key]; - } - - $checkSumDigit = 10 - ($total % 10); - - if ($checkSumDigit == 10) { - $checkSumDigit = 0; - } - - return $birthPlace . $genderCode . $randomNumberCode . $checkSumDigit; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php b/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php deleted file mode 100644 index db9ac327..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php +++ /dev/null @@ -1,19 +0,0 @@ - 251: - $temp .= $chars[++$i]; - // no break - case $ord > 247: - $temp .= $chars[++$i]; - // no break - case $ord > 239: - $temp .= $chars[++$i]; - // no break - case $ord > 223: - $temp .= $chars[++$i]; - // no break - case $ord > 191: - $temp .= $chars[++$i]; - } - - $encoding[] = $temp; - } - - return $encoding; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/UniqueGenerator.php b/old_vendor/fakerphp/faker/src/Faker/UniqueGenerator.php deleted file mode 100644 index fef167b6..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/UniqueGenerator.php +++ /dev/null @@ -1,87 +0,0 @@ - ['0123' => null], - * 'city' => ['London' => null, 'Tokyo' => null], - * ] - * - * @var array> - */ - protected $uniques = []; - - /** - * @param Extension|Generator $generator - * @param int $maxRetries - * @param array> $uniques - */ - public function __construct($generator, $maxRetries = 10000, &$uniques = []) - { - $this->generator = $generator; - $this->maxRetries = $maxRetries; - $this->uniques = &$uniques; - } - - public function ext(string $id) - { - return new self($this->generator->ext($id), $this->maxRetries, $this->uniques); - } - - /** - * Catch and proxy all generator calls but return only unique values - * - * @param string $attribute - * - * @deprecated Use a method instead. - */ - public function __get($attribute) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Accessing property "%s" is deprecated, use "%s()" instead.', $attribute, $attribute); - - return $this->__call($attribute, []); - } - - /** - * Catch and proxy all generator calls with arguments but return only unique values - * - * @param string $name - * @param array $arguments - */ - public function __call($name, $arguments) - { - if (!isset($this->uniques[$name])) { - $this->uniques[$name] = []; - } - $i = 0; - - do { - $res = call_user_func_array([$this->generator, $name], $arguments); - ++$i; - - if ($i > $this->maxRetries) { - throw new \OverflowException(sprintf('Maximum retries of %d reached without finding a unique value', $this->maxRetries)); - } - } while (array_key_exists(serialize($res), $this->uniques[$name])); - $this->uniques[$name][serialize($res)] = null; - - return $res; - } -} diff --git a/old_vendor/fakerphp/faker/src/Faker/ValidGenerator.php b/old_vendor/fakerphp/faker/src/Faker/ValidGenerator.php deleted file mode 100644 index bf409456..00000000 --- a/old_vendor/fakerphp/faker/src/Faker/ValidGenerator.php +++ /dev/null @@ -1,78 +0,0 @@ -valid() - * - * @mixin Generator - */ -class ValidGenerator -{ - protected $generator; - protected $validator; - protected $maxRetries; - - /** - * @param Extension|Generator $generator - * @param callable|null $validator - * @param int $maxRetries - */ - public function __construct($generator, $validator = null, $maxRetries = 10000) - { - if (null === $validator) { - $validator = static function () { - return true; - }; - } elseif (!is_callable($validator)) { - throw new \InvalidArgumentException('valid() only accepts callables as first argument'); - } - $this->generator = $generator; - $this->validator = $validator; - $this->maxRetries = $maxRetries; - } - - public function ext(string $id) - { - return new self($this->generator->ext($id), $this->validator, $this->maxRetries); - } - - /** - * Catch and proxy all generator calls but return only valid values - * - * @param string $attribute - * - * @deprecated Use a method instead. - */ - public function __get($attribute) - { - trigger_deprecation('fakerphp/faker', '1.14', 'Accessing property "%s" is deprecated, use "%s()" instead.', $attribute, $attribute); - - return $this->__call($attribute, []); - } - - /** - * Catch and proxy all generator calls with arguments but return only valid values - * - * @param string $name - * @param array $arguments - */ - public function __call($name, $arguments) - { - $i = 0; - - do { - $res = call_user_func_array([$this->generator, $name], $arguments); - ++$i; - - if ($i > $this->maxRetries) { - throw new \OverflowException(sprintf('Maximum retries of %d reached without finding a valid value', $this->maxRetries)); - } - } while (!call_user_func($this->validator, $res)); - - return $res; - } -} diff --git a/old_vendor/fakerphp/faker/src/autoload.php b/old_vendor/fakerphp/faker/src/autoload.php deleted file mode 100644 index a4dfa9ec..00000000 --- a/old_vendor/fakerphp/faker/src/autoload.php +++ /dev/null @@ -1,29 +0,0 @@ - indices (SpacePossum) -* minor #6171 Fix tests and CS (SpacePossum) -* minor #6172 DX: Tokens::insertSlices - groom code and fix tests (keradus) -* minor #6174 PhpdocAlignFixer: fix property-read/property-write descriptions not getting aligned (antichris) -* minor #6177 DX: chmod +x for benchmark.sh file (keradus) -* minor #6180 gitlab reporter - add fixed severity to match format (cbourreau) -* minor #6183 Simplify DiffConsoleFormatter (kubawerlos) -* minor #6184 Do not support array of patterns in Preg methods (kubawerlos) -* minor #6185 Upgrade PHPStan (kubawerlos) -* minor #6189 Finder - fix usage of ignoreDotFiles (kubawerlos) -* minor #6190 DX: DiffConsoleFormatter - escape - (keradus) -* minor #6194 Update Docker setup (julienfalque) -* minor #6196 clean ups (SpacePossum) -* minor #6198 DX: format dot files (kubawerlos) -* minor #6200 DX: Composer's branch-alias leftovers cleanup (kubawerlos) -* minor #6203 Bump required PHP to 7.4 (keradus) -* minor #6205 DX: bump PHPUnit to v9, PHPUnit bridge to v6 and Prophecy-PHPUnit to v2 (keradus) -* minor #6210 NullableTypeDeclarationForDefaultNullValueFixer - fix tests (HypeMC) -* minor #6212 bump year 2021 -> 2022 (SpacePossum) -* minor #6215 DX: Doctrine\Annotation\Tokens - fix phpstan violations (keradus) -* minor #6216 DX: Doctrine\Annotation\Tokens - drop unused methods (keradus) -* minor #6217 DX: lock SCA tools for PR builds (keradus) -* minor #6218 Use composer/xdebug-handler v3 (gharlan) -* minor #6222 Show runtime on version command (SpacePossum) -* minor #6229 Simplify Tokens::isMonolithicPhp tests (kubawerlos) -* minor #6232 Use expectNotToPerformAssertions where applicable (SpacePossum) -* minor #6233 Update Tokens::isMonolithicPhp (kubawerlos) -* minor #6236 Annotation - improve getting variable name (kubawerlos) - -Changelog for v3.4.0 --------------------- - -* bug #6117 SingleSpaceAfterConstruct - handle before destructuring close brace (liquid207) -* bug #6122 NoMultilineWhitespaceAroundDoubleArrowFixer - must run before MethodArgumentSpaceFixer (kubawerlos) -* bug #6130 StrictParamFixer - must run before MethodArgumentSpaceFixer (kubawerlos) -* bug #6137 NewWithBracesFixer - must run before ClassDefinitionFixer (kubawerlos) -* bug #6139 PhpdocLineSpanFixer - must run before NoSuperfluousPhpdocTagsFixer (kubawerlos) -* bug #6143 OperatorLinebreakFixer - fix for alternative syntax (kubawerlos) -* bug #6159 ImportTransformer - fix for grouped constant and function imports (kubawerlos) -* bug #6161 NoUnreachableDefaultArgumentValueFixer - fix for attributes (kubawerlos) -* feature #5776 DX: test on PHP 8.1 (kubawerlos) -* feature #6152 PHP8.1 support (SpacePossum) -* minor #6095 Allow Symfony 6 (derrabus, keradus) -* minor #6107 Drop support of PHPUnit v7 dependency (keradus) -* minor #6109 Add return type to `DummyTestSplFileInfo::getRealPath()` (derrabus) -* minor #6115 Remove PHP 7.2 polyfill (derrabus) -* minor #6116 CI: remove installation of mbstring polyfill in build script, it's required dependency now (keradus) -* minor #6119 OrderedClassElementsFixer - PHPUnit assert(Pre|Post)Conditions methods support (meyerbaptiste) -* minor #6121 Use Tokens::ensureWhitespaceAtIndex to simplify code (kubawerlos) -* minor #6127 Remove 2nd parameter to XdebugHandler constructor (phil-davis) -* minor #6129 clean ups (SpacePossum) -* minor #6138 PHP8.1 - toString cannot return type hint void (SpacePossum) -* minor #6146 PHP 8.1: add new_in_initializers to PHP 8.1 integration test (keradus) -* minor #6147 DX: update composer-normalize (keradus) -* minor #6156 DX: drop hack for Prophecy incompatibility (keradus) - -Changelog for v3.3.1 --------------------- - -* minor #6067 Bump minimum PHP version to 7.2 (keradus) - -Changelog for v3.3.0 --------------------- - -* bug #6054 Utils - Add multibyte and UTF-8 support (paulbalandan) -* bug #6061 ModernizeStrposFixer - fix for negated with leading slash (kubawerlos) -* bug #6064 SquareBraceTransformer - fix detect array destructing in foreach (SpacePossum) -* bug #6082 PhpUnitDedicateAssertFixer must run before NoUnusedImportsFixer (kubawerlos) -* bug #6089 TokensAnalyzer.php - Fix T_ENCAPSED_AND_WHITESPACE handling in isBina… (SpacePossum) -* feature #5123 PhpdocTypesFixer - support generic types (kubawerlos) -* minor #5775 DX: run static code analysis on PHP 8.0 (kubawerlos) -* minor #6050 DX: TypeIntersectionTransformer - prove to not touch T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG (keradus) -* minor #6051 NoExtraBlankLinesFixer - Improve deprecation message (paulbalandan) -* minor #6060 DX: Add upgrade guide link when next Major is available (keradus) -* minor #6066 Clean ups (SpacePossum, kubawerlos) -* minor #6069 DX: cleanup stub file (keradus) -* minor #6070 Update UPGRADE-v3.md with php_unit_test_annotation/case deprecation (kubawerlos) -* minor #6072 Update usage doc to reflect change to PSR12 default. (hannob, keradus) -* minor #6084 Change: Remove __constructor() from RuleSetDescriptionInterface (niklam) -* minor #6085 Dx: reuse WhitespacesAnalyzer::detectIndent (kubawerlos) -* minor #6087 AbstractProxyFixer - more tests (SpacePossum) - -Changelog for v3.2.1 ---------------------- - -experimental release - -* Require PHP 7.2 - -Changelog for v3.2.0 --------------------- - -* bug #5809 FunctionsAnalyzer - fix for recognizing global functions in attributes (kubawerlos) -* bug #5909 NativeFunctionCasingFixer - fix for attributes and imported functions (kubawerlos) -* bug #5920 ClassAttributesSeparationFixer - fixes & enhancements (SpacePossum) -* bug #5923 TypeAlternationTransformer - fix for promoted properties (kubawerlos) -* bug #5938 NoAliasFunctionsFixer - remove dir -> getdir mapping (SpacePossum) -* bug #5941 TokensAnalyzer - isAnonymousClass bug on PHP8 (SpacePossum) -* bug #5942 TokensAnalyzer - isConstantInvocation PHP 8 issue (SpacePossum) -* bug #5943 NoUnusedImportsFixer - use in attribute (SpacePossum) -* bug #5955 Fixed `class_attributes_separation` processing class with multiple trait imports (GrahamCampbell) -* bug #5977 LowercaseStaticReference - SingleClassElementPerStatement - union types (SpacePossum) -* bug #5984 RegularCallableCallFixer must run before NativeFunctionInvocationFixer (kubawerlos) -* bug #5986 CurlyBraceTransformer - count T_CURLY_OPEN itself as level as well (SpacePossum) -* bug #5989 NoAliasFunctionsFixer - Correct mapping (weshooper) -* bug #6004 SwitchContinueToBreakFixer - Fix candidate check (SpacePossum) -* bug #6005 CommentsAnalyzer - before static call (SpacePossum) -* bug #6007 YodaStyleFixer - PHP8 named arguments support (liquid207) -* bug #6015 CommentsAnalyzer - constructor property promotion support (liquid207) -* bug #6020 RegularCallableCallFixer - case insensitive fixing (SpacePossum) -* bug #6037 PhpdocLineSpanFixer - do not crash on trait imports (SpacePossum) -* feature #4834 AssignNullCoalescingToCoalesceEqualFixer - introduction (SpacePossum) -* feature #5754 ModernizeStrposFixer - introduction (derrabus, SpacePossum, keradus) -* feature #5858 EmptyLoopConditionFixer - introduction (SpacePossum) -* feature #5967 PHP8.1 - type "never" support (SpacePossum) -* feature #5968 PHP8.1 - "readonly" property modifier support (SpacePossum) -* feature #5970 IntegerLiteralCaseFixer - introduction (SpacePossum) -* feature #5971 PHP8.1 - Explicit octal integer literal notation (SpacePossum) -* feature #5997 NoSuperfluousPhpdocTagsFixer - Add union types support (julienfalque) -* feature #6026 TypeIntersectionTransformer - introduction (kubawerlos, SpacePossum) -* feature #6031 NoSpaceAroundDoubleColonFixer - introduction (SpacePossum) -* feature #6047 StringLengthToEmptyFixer - introduction (SpacePossum) -* minor #5773 NoAlternativeSyntaxFixer - Add option to not fix non-monolithic PHP code (paulbalandan) -* minor #5887 Detect renamed rules in configuration resolver (shakaran) -* minor #5901 DX: update PHPStan (kubawerlos) -* minor #5906 Remove references to PHP 7.0 in tests (with updates) (kubawerlos) -* minor #5918 Remove PHP version specific code sample constraint when not needed (kubawerlos) -* minor #5924 PSR12 - ClassDefinition - space_before_parenthesis (SpacePossum) -* minor #5925 DX: ProjectCodeTest - fix detection by testExpectedInputOrder (keradus) -* minor #5926 DX: remove not needed requirements from fixtures (kubawerlos) -* minor #5927 Symfonyset - EmptyLoopBody (SpacePossum) -* minor #5928 PhpdocTo*TypeFixer - add more test cases (keradus) -* minor #5929 Remove not needed PHP version checks (kubawerlos) -* minor #5930 simplify code, more tests (SpacePossum) -* minor #5931 logo copyright - bump year (SpacePossum) -* minor #5932 Extract ControlStructureContinuationPositionFixer from BracesFixer (julienfalque) -* minor #5933 Consistency invalid configuration exception for test (shakaran) -* minor #5934 Add return types (SpacePossum) -* minor #5949 Removed PHP 5 exception catch (GrahamCampbell) -* minor #5952 ClassAttributesSeparationFixer - Re-add omitted `only_if_meta` option (paulbalandan) -* minor #5957 Keep PHPStan cache between Docker runs (julienfalque) -* minor #5958 Fix STDIN test when path is one level deep (julienfalque) -* minor #5959 SymfonySet - add EmptyLoopConditionFixer (SpacePossum) -* minor #5961 Remove duplicated method (julienfalque) -* minor #5962 DX: Add return types (kubawerlos) -* minor #5963 DX: extract config for special CI jobs (keradus) -* minor #5964 DX: use modernize_strpos (keradus) -* minor #5965 CI: don't try to execute jobs with Symfony:^3 (keradus) -* minor #5972 PHP8.1 - FirstClassCallable (SpacePossum) -* minor #5973 PHP8.1 - "final const" support (SpacePossum) -* minor #5975 Tree shake PHP8.1 PRs (SpacePossum) -* minor #5978 PHP8.1 - Enum (start) (SpacePossum) -* minor #5982 Fix test warning (SpacePossum) -* minor #5987 PHP8.1 - Enum (start) (SpacePossum) -* minor #5995 Fix link to Code Climate SPEC.md in GitlabReporter (astehlik) -* minor #5996 Fix URL to Doctrine Annotations documentation (astehlik) -* minor #6000 Prevent PHP CS Fixer from fixing PHPStan cache files (julienfalque) -* minor #6006 SCA/utilize PHP8.1 (SpacePossum) -* minor #6008 SCA (SpacePossum) -* minor #6010 SCA (SpacePossum) -* minor #6011 NoSuperfluousPhpdocTagsFixer - Remove superfluous annotation `@abstract` and `@final` (liquid207, SpacePossum) -* minor #6018 PhpdocLineSpan - Allow certain types to be ignored (devfrey) -* minor #6019 Improve test coverage (SpacePossum) -* minor #6021 Linter/*Exception - Tag as final (SpacePossum) -* minor #6023 OrderedClassElementsFixer - PHP8.1 readonly properties support (SpacePossum) -* minor #6027 MbStrFunctionsFixer - more details about risky (SpacePossum) -* minor #6028 BinaryOperatorSpacesFixer - list all operators in doc (SpacePossum) -* minor #6029 PhpUnitDedicateAssertFixer - add "assertStringContainsString" and "as… (SpacePossum) -* minor #6030 SingleSpaceAfterConstructFixer - Add `switch` support (SpacePossum) -* minor #6033 ArgumentsAnalyzerTest - add more tests (SpacePossum) -* minor #6034 7.0|7.1 - cleanup tests (SpacePossum) -* minor #6035 Documentation generation split up and add list. (SpacePossum) -* minor #6048 Fix "can not" spelling (mvorisek) - -Changelog for v3.1.0 --------------------- - -* feature #5572 PhpdocToCommentFixer - Add `ignored_tags` option (VincentLanglet) -* feature #5588 NoAliasFunctionsFixer - Add more function aliases (danog) -* feature #5704 ClassAttributesSeparationFixer - Introduce `only_if_meta` spacing option (paulbalandan) -* feature #5734 TypesSpacesFixer - Introduction (kubawerlos) -* feature #5745 EmptyLoopBodyFixer - introduction (SpacePossum, keradus) -* feature #5751 Extract DeclareParenthesesFixer from BracesFixer (julienfalque, keradus) -* feature #5877 ClassDefinitionFixer - PSR12 for anonymous class (SpacePossum) -* minor #5875 EmptyLoopBodyFixer - NoTrailingWhitespaceFixer - priority test (SpacePossum) -* minor #5914 Deprecate ClassKeywordRemoveFixer (kubawerlos) - -Changelog for v3.0.3 --------------------- - -* bug #4927 PhpdocAlignFixer - fix for whitespace in type (kubawerlos) -* bug #5720 NoUnusedImportsFixer - Fix undetected unused imports when type mismatch (julienfalque, SpacePossum) -* bug #5806 DoctrineAnnotationFixer - Add template to ignored_tags (akalineskou) -* bug #5849 PhpdocTagTypeFixer - must not remove inlined tags within other tags (boesing) -* bug #5853 BracesFixer - handle alternative short foreach with if (SpacePossum) -* bug #5855 GlobalNamespaceImportFixer - fix for attributes imported as constants (kubawerlos) -* bug #5881 SelfUpdateCommand - fix link to UPGRADE docs (keradus) -* bug #5884 CurlyBraceTransformer - fix handling dynamic property with string with variable (kubawerlos, keradus) -* bug #5912 TypeAlternationTransformer - fix for "callable" type (kubawerlos) -* bug #5913 SingleSpaceAfterConstructFixer - improve comma handling (keradus) -* minor #5829 DX: Fix SCA with PHPMD (paulbalandan) -* minor #5838 PHP7 - use spaceship (SpacePossum, keradus) -* minor #5848 Docs: update PhpStorm integration link (keradus) -* minor #5856 Add AttributeAnalyzer (kubawerlos) -* minor #5857 DX: PHPMD - exclude fixtures (keradus) -* minor #5859 Various fixes (kubawerlos) -* minor #5864 DX: update dev tools (kubawerlos) -* minor #5876 AttributeTransformerTest - add more tests (SpacePossum) -* minor #5879 Update UPGRADE-v3.md adding relative links (shakaran, keradus) -* minor #5882 Docs: don't use v2 for installation example (keradus) -* minor #5883 Docs: typo (brianteeman, keradus) -* minor #5890 DX: use PHP 8.1 polyfill (keradus) -* minor #5902 Remove references to PHP 7.0 in tests (only removing lines) (kubawerlos) -* minor #5905 DX: Use "yield from" in tests (kubawerlos, keradus) -* minor #5917 Use `@PHP71Migration` rules (kubawerlos, keradus) - -Changelog for v3.0.2 --------------------- - -* bug #5816 FullyQualifiedStrictTypesFixer - fix for union types (kubawerlos, keradus) -* bug #5835 PhpdocTypesOrderFixer: fix for array shapes (kubawerlos) -* bug #5837 SingleImportPerStatementFixer - fix const and function imports (SpacePossum) -* bug #5844 PhpdocTypesOrderFixer: handle callable() type (Slamdunk) -* minor #5839 DX: automate checking 7.0 types on project itself (keradus) -* minor #5840 DX: drop v2 compatible config in project itself (keradus) - -Changelog for v3.0.1 --------------------- - -* bug #5395 PhpdocTagTypeFixer: Do not modify array shapes (localheinz, julienfalque) -* bug #5678 UseArrowFunctionsFixer - fix for return without value (kubawerlos) -* bug #5679 PhpUnitNamespacedFixer - do not try to fix constant usage (kubawerlos) -* bug #5681 RegularCallableCallFixer - fix for function name with escaped slash (kubawerlos) -* bug #5687 FinalInternalClassFixer - fix for annotation with space after "@" (kubawerlos) -* bug #5688 ArrayIndentationFixer - fix for really long arrays (kubawerlos) -* bug #5690 PhpUnitNoExpectationAnnotationFixer - fix "expectedException" annotation with message below (kubawerlos) -* bug #5693 YodaStyleFixer - fix for assignment operators (kubawerlos) -* bug #5697 StrictParamFixer - fix for method definition (kubawerlos) -* bug #5702 CommentToPhpdocFixer - fix for single line comments starting with more than 2 slashes (kubawerlos) -* bug #5703 DateTimeImmutableFixer - fix for method definition (kubawerlos) -* bug #5718 VoidReturnFixer - do not break syntax with magic methods (kubawerlos) -* bug #5727 SingleSpaceAfterConstructFixer - Add support for `namespace` (julienfalque) -* bug #5730 Fix transforming deprecations into exceptions (julienfalque) -* bug #5738 TokensAnalyzer - fix for union types (kubawerlos) -* bug #5741 Fix constant invocation detection cases (kubawerlos) -* bug #5769 Fix priority between `phpdoc_to_property_type` and `no_superfluous_phpdoc_tags` (julienfalque) -* bug #5774 FunctionsAnalyzer::isTheSameClassCall - fix for $this with double colon following (kubawerlos) -* bug #5779 SingleLineThrowFixer - fix for throw in match (kubawerlos) -* bug #5781 ClassDefinition - fix for anonymous class with trailing comma (kubawerlos) -* bug #5783 StaticLambdaFixer - consider parent:: as a possible reference to $this (fancyweb) -* bug #5791 NoBlankLinesAfterPhpdoc - Add T_NAMESPACE in array of forbidden successors (paulbalandan) -* bug #5799 TypeAlternationTransformer - fix for multiple function parameters (kubawerlos) -* bug #5804 NoBreakCommentFixer - fix for "default" in "match" (kubawerlos) -* bug #5805 SingleLineCommentStyleFixer - run after HeaderCommentFixer (kubawerlos) -* bug #5817 NativeFunctionTypeDeclarationCasingFixer - fix for union types (kubawerlos) -* bug #5823 YodaStyleFixer - yield support (SpacePossum) -* minor #4914 Improve PHPDoc types support (julienfalque, keradus) -* minor #5592 Fix checking for default config used in rule sets (kubawerlos) -* minor #5675 Docs: extend Upgrade Guide (keradus) -* minor #5680 DX: benchmark.sh - ensure deps are updated to enable script working across less-similar branches (keradus) -* minor #5689 Calculate code coverage on PHP 8 (kubawerlos) -* minor #5694 DX: fail on risky tests (kubawerlos) -* minor #5695 Utils - save only unique deprecations to avoid memory issues (PetrHeinz) -* minor #5710 [typo] add correct backquotes (PhilETaylor) -* minor #5711 Fix doc, "run-in" show-progress option is no longer present (mvorisek) -* minor #5713 Upgrade-Guide: fix typo (staabm) -* minor #5717 Run migration rules on PHP 8 (kubawerlos, keradus) -* minor #5721 Fix reStructuredText markup (julienfalque) -* minor #5725 Update LICENSE (exussum12) -* minor #5731 CI - Fix checkbashisms installation (julienfalque) -* minor #5736 Remove references to PHP 5.6 (kubawerlos, keradus) -* minor #5739 DX: more typehinting (keradus) -* minor #5740 DX: more type-related docblocks (keradus) -* minor #5746 Config - Improve deprecation message with details (SpacePossum) -* minor #5747 RandomApiMigrationFixer - better docs and better "random_int" support (SpacePossum) -* minor #5748 Updated the link to netbeans plugins page (cyberguroo) -* minor #5750 Test all const are in uppercase (SpacePossum) -* minor #5752 NoNullPropertyInitializationFixer - fix static properties as well (HypeMC) -* minor #5756 Fix rule sets descriptions (kubawerlos) -* minor #5761 Fix links in custom rules documentation (julienfalque) -* minor #5771 doc(config): change set's name (Kocal) -* minor #5777 DX: update PHPStan (kubawerlos) -* minor #5789 DX: update PHPStan (kubawerlos) -* minor #5808 Update PHPStan to 0.12.92 (kubawerlos) -* minor #5813 Docs: point to v3 in installation description (Jimbolino) -* minor #5824 Deprecate v2 (keradus) -* minor #5825 DX: update checkbashisms to v2.21.3 (keradus) -* minor #5826 SCA: check both composer files (keradus) -* minor #5827 ClassAttributesSeparationFixer - Add `trait_import` support (SpacePossum) -* minor #5831 DX: fix SCA violations (keradus) - -Changelog for v3.0.0 --------------------- - -* bug #5164 Differ - surround file name with double quotes if it contains spacing. (SpacePossum) -* bug #5560 PSR2: require visibility only for properties and methods (kubawerlos) -* bug #5576 ClassAttributesSeparationFixer: do not allow using v2 config (kubawerlos) -* feature #4979 Pass file to differ (paulhenri-l, SpacePossum) -* minor #3374 show-progress option: drop run-in and estimating, rename estimating-max to dots (keradus) -* minor #3375 Fixers - stop exposing extra properties/consts (keradus) -* minor #3376 Tokenizer - remove deprecations and legacy mode (keradus) -* minor #3377 rules - change default options (keradus) -* minor #3378 SKIP_LINT_TEST_CASES - drop env (keradus) -* minor #3379 MethodArgumentSpaceFixer - fixSpace is now private (keradus) -* minor #3380 rules - drop rootless configurations (keradus) -* minor #3381 rules - drop deprecated configurations (keradus) -* minor #3382 DefinedFixerInterface - incorporate into FixerInterface (keradus) -* minor #3383 FixerDefinitionInterface - drop getConfigurationDescription and getDefaultConfiguration (keradus) -* minor #3384 diff-format option: drop sbd diff, use udiffer by default, drop SebastianBergmannDiffer and SebastianBergmannShortDiffer classes (keradus) -* minor #3385 ConfigurableFixerInterface::configure - param is now not nullable and not optional (keradus) -* minor #3386 ConfigurationDefinitionFixerInterface - incorporate into ConfigurableFixerInterface (keradus) -* minor #3387 FixCommand - forbid passing 'config' and 'rules' options together (keradus) -* minor #3388 Remove Helpers (keradus) -* minor #3389 AccessibleObject - drop class (keradus) -* minor #3390 Drop deprecated rules: blank_line_before_return, hash_to_slash_comment, method_separation, no_extra_consecutive_blank_lines, no_multiline_whitespace_before_semicolons and pre_increment (keradus) -* minor #3456 AutoReview - drop references to removed rule (keradus) -* minor #3659 use php-cs-fixer/diff ^2.0 (SpacePossum) -* minor #3681 CiIntegrationTest - fix incompatibility from 2.x line (keradus) -* minor #3740 NoUnusedImportsFixer - remove SF exception (SpacePossum) -* minor #3771 UX: always set error_reporting in entry file, not Application (keradus) -* minor #3922 Make some more classes final (ntzm, SpacePossum) -* minor #3995 Change default config of native_function_invocation (dunglas, SpacePossum) -* minor #4432 DX: remove empty sets from RuleSet (kubawerlos) -* minor #4489 Fix ruleset @PHPUnit50Migration:risky (kubawerlos) -* minor #4620 DX: cleanup additional, not used parameters (keradus) -* minor #4666 Remove deprecated rules: lowercase_constants, php_unit_ordered_covers, silenced_deprecation_error (keradus) -* minor #4697 Remove deprecated no_short_echo_tag rule (julienfalque) -* minor #4851 fix phpstan on 3.0 (SpacePossum) -* minor #4901 Fix SCA (SpacePossum) -* minor #5069 Fixed failing tests on 3.0 due to unused import after merge (GrahamCampbell) -* minor #5096 NativeFunctionInvocationFixer - BacktickToShellExecFixer - fix integration test (SpacePossum) -* minor #5171 Fix test (SpacePossum) -* minor #5245 Fix CI for 3.0 line (keradus) -* minor #5351 clean ups (SpacePossum) -* minor #5364 DX: Do not display runtime twice on 3.0 line (keradus) -* minor #5412 3.0 - cleanup (SpacePossum, keradus) -* minor #5417 Further BC cleanup for 3.0 (keradus) -* minor #5418 Drop src/Test namespace (keradus) -* minor #5436 Drop mapping of strings to boolean option other than yes/no (keradus) -* minor #5440 Change default ruleset to PSR-12 (keradus) -* minor #5477 Drop diff-format (keradus) -* minor #5478 Docs: Cleanup UPGRADE markdown files (keradus) -* minor #5479 ArraySyntaxFixer, ListSyntaxFixer - change default syntax to short (keradus) -* minor #5480 Tokens::findBlockEnd - drop deprecated argument (keradus) -* minor #5485 ClassAttributesSeparationFixer - drop deprecated flat list configuration (keradus) -* minor #5486 CI: drop unused env variables (keradus) -* minor #5488 Do not distribute documentation (szepeviktor) -* minor #5513 DX: Tokens::warnPhp8SplFixerArrayChange - drop unused method (keradus) -* minor #5520 DX: Drop IsIdenticalConstraint (keradus) -* minor #5521 DX: apply rules configuration cleanups for PHP 7.1+ (keradus) -* minor #5524 DX: drop support of very old deps (keradus) -* minor #5525 Drop phpunit-legacy-adapter (keradus) -* minor #5527 Bump required PHP to 7.1 (keradus) -* minor #5529 DX: bump required PHPUnit to v7+ (keradus) -* minor #5532 Apply PHP 7.1 typing (keradus) -* minor #5541 RuleSet - disallow null usage to disable the rule (keradus) -* minor #5555 DX: further typing improvements (keradus) -* minor #5562 Fix table row rendering for default values of array_syntax and list_syntax (derrabus) -* minor #5608 DX: new cache filename (keradus) -* minor #5609 Forbid old config filename usage (keradus) -* minor #5638 DX: remove Utils::calculateBitmask (keradus) -* minor #5641 DX: use constants for PHPUnit version on 3.0 line (keradus) -* minor #5643 FixCommand - simplify help (keradus) -* minor #5644 Token::toJson() - remove parameter (keradus) -* minor #5645 DX: YodaStyleFixerTest - fix CI (keradus) -* minor #5649 DX: YodaStyleFixerTest - fix 8.0 compat (keradus) -* minor #5650 DX: FixCommand - drop outdated/duplicated docs (keradus) -* minor #5656 DX: mark some constants as internal or private (keradus) -* minor #5657 DX: convert some properties to constants (keradus) -* minor #5669 Remove TrailingCommaInMultilineArrayFixer (kubawerlos, keradus) - -Changelog for v2.19.3 ---------------------- - -* minor #6060 DX: Add upgrade guide link when next Major is available (keradus) - -Changelog for v2.19.2 ---------------------- - -* bug #5881 SelfUpdateCommand - fix link to UPGRADE docs (keradus) - -Changelog for v2.19.1 ---------------------- - -* bug #5395 PhpdocTagTypeFixer: Do not modify array shapes (localheinz, julienfalque) -* bug #5678 UseArrowFunctionsFixer - fix for return without value (kubawerlos) -* bug #5679 PhpUnitNamespacedFixer - do not try to fix constant usage (kubawerlos) -* bug #5681 RegularCallableCallFixer - fix for function name with escaped slash (kubawerlos) -* bug #5687 FinalInternalClassFixer - fix for annotation with space after "@" (kubawerlos) -* bug #5688 ArrayIndentationFixer - fix for really long arrays (kubawerlos) -* bug #5690 PhpUnitNoExpectationAnnotationFixer - fix "expectedException" annotation with message below (kubawerlos) -* bug #5693 YodaStyleFixer - fix for assignment operators (kubawerlos) -* bug #5697 StrictParamFixer - fix for method definition (kubawerlos) -* bug #5702 CommentToPhpdocFixer - fix for single line comments starting with more than 2 slashes (kubawerlos) -* bug #5703 DateTimeImmutableFixer - fix for method definition (kubawerlos) -* bug #5718 VoidReturnFixer - do not break syntax with magic methods (kubawerlos) -* bug #5727 SingleSpaceAfterConstructFixer - Add support for `namespace` (julienfalque) -* bug #5730 Fix transforming deprecations into exceptions (julienfalque) -* bug #5738 TokensAnalyzer - fix for union types (kubawerlos) -* bug #5741 Fix constant invocation detection cases (kubawerlos) -* bug #5769 Fix priority between `phpdoc_to_property_type` and `no_superfluous_phpdoc_tags` (julienfalque) -* bug #5774 FunctionsAnalyzer::isTheSameClassCall - fix for $this with double colon following (kubawerlos) -* bug #5779 SingleLineThrowFixer - fix for throw in match (kubawerlos) -* bug #5781 ClassDefinition - fix for anonymous class with trailing comma (kubawerlos) -* bug #5783 StaticLambdaFixer - consider parent:: as a possible reference to $this (fancyweb) -* bug #5791 NoBlankLinesAfterPhpdoc - Add T_NAMESPACE in array of forbidden successors (paulbalandan) -* bug #5799 TypeAlternationTransformer - fix for multiple function parameters (kubawerlos) -* bug #5804 NoBreakCommentFixer - fix for "default" in "match" (kubawerlos) -* bug #5805 SingleLineCommentStyleFixer - run after HeaderCommentFixer (kubawerlos) -* bug #5817 NativeFunctionTypeDeclarationCasingFixer - fix for union types (kubawerlos) -* bug #5823 YodaStyleFixer - yield support (SpacePossum) -* minor #4914 Improve PHPDoc types support (julienfalque, keradus) -* minor #5680 DX: benchmark.sh - ensure deps are updated to enable script working across less-similar branches (keradus) -* minor #5689 Calculate code coverage on PHP 8 (kubawerlos) -* minor #5694 DX: fail on risky tests (kubawerlos) -* minor #5695 Utils - save only unique deprecations to avoid memory issues (PetrHeinz) -* minor #5710 [typo] add correct backquotes (PhilETaylor) -* minor #5717 Run migration rules on PHP 8 (kubawerlos, keradus) -* minor #5721 Fix reStructuredText markup (julienfalque) -* minor #5725 Update LICENSE (exussum12) -* minor #5731 CI - Fix checkbashisms installation (julienfalque) -* minor #5740 DX: more type-related docblocks (keradus) -* minor #5746 Config - Improve deprecation message with details (SpacePossum) -* minor #5747 RandomApiMigrationFixer - better docs and better "random_int" support (SpacePossum) -* minor #5748 Updated the link to netbeans plugins page (cyberguroo) -* minor #5750 Test all const are in uppercase (SpacePossum) -* minor #5752 NoNullPropertyInitializationFixer - fix static properties as well (HypeMC) -* minor #5756 Fix rule sets descriptions (kubawerlos) -* minor #5761 Fix links in custom rules documentation (julienfalque) -* minor #5777 DX: update PHPStan (kubawerlos) -* minor #5789 DX: update PHPStan (kubawerlos) -* minor #5808 Update PHPStan to 0.12.92 (kubawerlos) -* minor #5824 Deprecate v2 (keradus) -* minor #5825 DX: update checkbashisms to v2.21.3 (keradus) -* minor #5826 SCA: check both composer files (keradus) -* minor #5827 ClassAttributesSeparationFixer - Add `trait_import` support (SpacePossum) - -Changelog for v2.19.0 ---------------------- - -* feature #4238 TrailingCommaInMultilineFixer - introduction (kubawerlos) -* feature #4592 PhpdocToPropertyTypeFixer - introduction (julienfalque) -* feature #5390 feature #4024 added a `list-files` command (clxmstaab, keradus) -* feature #5635 Add list-sets command (keradus) -* feature #5674 UX: Display deprecations to end-user (keradus) -* minor #5601 Always stop when "PHP_CS_FIXER_FUTURE_MODE" is used (kubawerlos) -* minor #5607 DX: new config filename (keradus) -* minor #5613 DX: UtilsTest - add missing teardown (keradus) -* minor #5631 DX: config deduplication (keradus) -* minor #5633 fix typos (staabm) -* minor #5642 Deprecate parameter of Token::toJson() (keradus) -* minor #5672 DX: do not test deprecated fixer (kubawerlos) - -Changelog for v2.18.7 ---------------------- - -* bug #5593 SingleLineThrowFixer - fix handling anonymous classes (kubawerlos) -* bug #5654 SingleLineThrowFixer - fix for match expression (kubawerlos) -* bug #5660 TypeAlternationTransformer - fix for "array" type in type alternation (kubawerlos) -* bug #5665 NullableTypeDeclarationForDefaultNullValueFixer - fix for nullable with attribute (kubawerlos) -* bug #5670 PhpUnitNamespacedFixer - do not try to fix constant (kubawerlos) -* bug #5671 PhpdocToParamTypeFixer - do not change function call (kubawerlos) -* bug #5673 GroupImportFixer - Fix failing case (julienfalque) -* minor #4591 Refactor conversion of PHPDoc to type declarations (julienfalque, keradus) -* minor #5611 DX: use method expectDeprecation from Symfony Bridge instead of annotation (kubawerlos) -* minor #5658 DX: use constants in tests for Fixer configuration (keradus) -* minor #5661 DX: remove PHPStan exceptions for "tests" from phpstan.neon (kubawerlos) -* minor #5662 Change wording from "merge" to "intersect" (jschaedl) -* minor #5663 DX: do not abuse "inheritdoc" tag (kubawerlos) -* minor #5664 DX: code grooming (keradus) - -Changelog for v2.18.6 ---------------------- - -* bug #5586 Add support for nullsafe object operator ("?->") (kubawerlos) -* bug #5597 Tokens - fix for checking block edges (kubawerlos) -* bug #5604 Custom annotations @type changed into @var (Leprechaunz) -* bug #5606 DoctrineAnnotationBracesFixer false positive (Leprechaunz) -* bug #5610 BracesFixer - fix braces of match expression (Leprechaunz) -* bug #5615 GroupImportFixer severely broken (Leprechaunz) -* bug #5617 ClassAttributesSeparationFixer - fix for using visibility for class elements (kubawerlos) -* bug #5618 GroupImportFixer - fix removal of import type when mixing multiple types (Leprechaunz) -* bug #5622 Exclude Doctrine documents from final fixer (ossinkine) -* bug #5630 PhpdocTypesOrderFixer - handle complex keys (Leprechaunz) -* minor #5554 DX: use tmp file in sys_temp_dir for integration tests (keradus) -* minor #5564 DX: make integration tests matching entries in FixerFactoryTest (kubawerlos) -* minor #5603 DX: DocumentationGenerator - no need to re-configure Differ (keradus) -* minor #5612 DX: use ::class whenever possible (kubawerlos) -* minor #5619 DX: allow XDebugHandler v2 (keradus) -* minor #5623 DX: when displaying app version, don't put extra space if there is no CODENAME available (keradus) -* minor #5626 DX: update PHPStan and way of ignoring flickering PHPStan exception (keradus) -* minor #5629 DX: fix CiIntegrationTest (keradus) -* minor #5636 DX: remove 'create' method in internal classes (keradus) -* minor #5637 DX: do not calculate bitmap via helper anymore (keradus) -* minor #5639 Move fix reports (classes and schemas) (keradus) -* minor #5640 DX: use constants for PHPUnit version (keradus) -* minor #5646 Cleanup YodaStyleFixerTest (kubawerlos) - -Changelog for v2.18.5 ---------------------- - -* bug #5561 NoMixedEchoPrintFixer: fix for conditions without curly brackets (kubawerlos) -* bug #5563 Priority fix: SingleSpaceAfterConstructFixer must run before BracesFixer (kubawerlos) -* bug #5567 Fix order of BracesFixer and ClassDefinitionFixer (Daeroni) -* bug #5596 NullableTypeTransformer - fix for attributes (kubawerlos, jrmajor) -* bug #5598 GroupImportFixer - fix breaking code when fixing root classes (Leprechaunz) -* minor #5571 DX: add test to make sure SingleSpaceAfterConstructFixer runs before FunctionDeclarationFixer (kubawerlos) -* minor #5577 Extend priority test for "class_definition" vs "braces" (kubawerlos) -* minor #5585 DX: make doc examples prettier (kubawerlos) -* minor #5590 Docs: HeaderCommentFixer - document example how to remove header comment (keradus) -* minor #5602 DX: regenerate docs (keradus) - -Changelog for v2.18.4 ---------------------- - -* bug #4085 Priority: AlignMultilineComment should run before every PhpdocFixer (dmvdbrugge) -* bug #5421 PsrAutoloadingFixer - Fix PSR autoloading outside configured directory (kelunik, keradus) -* bug #5464 NativeFunctionInvocationFixer - PHP 8 attributes (HypeMC, keradus) -* bug #5548 NullableTypeDeclarationForDefaultNullValueFixer - fix handling promoted properties (jrmajor, keradus) -* bug #5550 TypeAlternationTransformer - fix for typed static properties (kubawerlos) -* bug #5551 ClassAttributesSeparationFixer - fix for properties with type alternation (kubawerlos, keradus) -* bug #5552 DX: test relation between function_declaration and method_argument_space (keradus) -* minor #5540 DX: RuleSet - convert null handling to soft-warning (keradus) -* minor #5545 DX: update checkbashisms (keradus) - -Changelog for v2.18.3 ---------------------- - -* bug #5484 NullableTypeDeclarationForDefaultNullValueFixer - handle mixed pseudotype (keradus) -* minor #5470 Disable CI fail-fast (mvorisek) -* minor #5491 Support php8 static return type for NoSuperfluousPhpdocTagsFixer (tigitz) -* minor #5494 BinaryOperatorSpacesFixer - extend examples (keradus) -* minor #5499 DX: add TODOs for PHP requirements cleanup (keradus) -* minor #5500 DX: Test that Transformers are adding only CustomTokens that they define and nothing else (keradus) -* minor #5507 Fix quoting in exception message (gquemener) -* minor #5514 DX: PHP 7.0 integration test - solve TODO for random_api_migration usage (keradus) -* minor #5515 DX: do not override getConfigurationDefinition (keradus) -* minor #5516 DX: AbstractDoctrineAnnotationFixer - no need for import aliases (keradus) -* minor #5518 DX: minor typing and validation fixes (keradus) -* minor #5522 Token - add handling json_encode crash (keradus) -* minor #5523 DX: EregToPregFixer - fix sorting (keradus) -* minor #5528 DX: code cleanup (keradus) - -Changelog for v2.18.2 ---------------------- - -* bug #5466 Fix runtime check of PHP version (keradus) -* minor #4250 POC Tokens::insertSlices (keradus) - -Changelog for v2.18.1 ---------------------- - -* bug #5447 switch_case_semicolon_to_colon should skip match/default statements (derrabus) -* bug #5453 SingleSpaceAfterConstructFixer - better handling of closing parenthesis and brace (keradus) -* bug #5454 NullableTypeDeclarationForDefaultNullValueFixer - support property promotion via constructor (keradus) -* bug #5455 PhpdocToCommentFixer - add support for attributes (keradus) -* bug #5462 NullableTypeDeclarationForDefaultNullValueFixer - support union types (keradus) -* minor #5444 Fix PHP version number in PHP54MigrationSet description (jdreesen, keradus) -* minor #5445 DX: update usage of old TraversableContains in tests (keradus) -* minor #5456 DX: Fix CiIntegrationTest (keradus) -* minor #5457 CI: fix params order (keradus) -* minor #5458 CI: fix migration workflow (keradus) -* minor #5459 DX: cleanup PHP Migration rulesets (keradus) - -Changelog for v2.18.0 ---------------------- - -* feature #4943 Add PSR12 ruleset (julienfalque, keradus) -* feature #5426 Update Symfony ruleset (keradus) -* feature #5428 Add/Change PHP.MigrationSet to update array/list syntax to short one (keradus) -* minor #5441 Allow execution under PHP 8 (keradus) - -Changelog for v2.17.5 ---------------------- - -* bug #5447 switch_case_semicolon_to_colon should skip match/default statements (derrabus) -* bug #5453 SingleSpaceAfterConstructFixer - better handling of closing parenthesis and brace (keradus) -* bug #5454 NullableTypeDeclarationForDefaultNullValueFixer - support property promotion via constructor (keradus) -* bug #5455 PhpdocToCommentFixer - add support for attributes (keradus) -* bug #5462 NullableTypeDeclarationForDefaultNullValueFixer - support union types (keradus) -* minor #5445 DX: update usage of old TraversableContains in tests (keradus) -* minor #5456 DX: Fix CiIntegrationTest (keradus) -* minor #5457 CI: fix params order (keradus) -* minor #5459 DX: cleanup PHP Migration rulesets (keradus) - -Changelog for v2.17.4 ---------------------- - -* bug #5379 PhpUnitMethodCasingFixer - Do not modify class name (localheinz) -* bug #5404 NullableTypeTransformer - constructor property promotion support (Wirone) -* bug #5433 PhpUnitTestCaseStaticMethodCallsFixer - fix for abstract static method (kubawerlos) -* minor #5234 DX: Add Docker dev setup (julienfalque, keradus) -* minor #5391 PhpdocOrderByValueFixer - Add additional annotations to sort (localheinz) -* minor #5392 PhpdocScalarFixer - Fix description (localheinz) -* minor #5397 NoExtraBlankLinesFixer - PHP8 throw support (SpacePossum) -* minor #5399 Add PHP8 integration test (keradus) -* minor #5405 TypeAlternationTransformer - add support for PHP8 (SpacePossum) -* minor #5406 SingleSpaceAfterConstructFixer - Attributes, comments and PHPDoc support (SpacePossum) -* minor #5407 TokensAnalyzer::getClassyElements - return trait imports (SpacePossum) -* minor #5410 minors (SpacePossum) -* minor #5411 bump year in LICENSE file (SpacePossum) -* minor #5414 TypeAlternationTransformer - T_FN support (SpacePossum) -* minor #5415 Forbid execution under PHP 8.0.0 (keradus) -* minor #5416 Drop Travis CI (keradus) -* minor #5419 CI: separate SCA checks to dedicated jobs (keradus) -* minor #5420 DX: unblock PHPUnit 9.5 (keradus) -* minor #5423 DX: PHPUnit - disable verbose by default (keradus) -* minor #5425 Cleanup 3.0 todos (keradus) -* minor #5427 Plan changing defaults for array_syntax and list_syntax in 3.0 release (keradus) -* minor #5429 DX: Drop speedtrap PHPUnit listener (keradus) -* minor #5432 Don't allow unserializing classes with a destructor (jderusse) -* minor #5435 DX: PHPUnit - groom configuration of time limits (keradus) -* minor #5439 VisibilityRequiredFixer - support type alternation for properties (keradus) -* minor #5442 DX: FunctionsAnalyzerTest - add missing 7.0 requirement (keradus) - -Changelog for v2.17.3 ---------------------- - -* bug #5384 PsrAutoloadingFixer - do not remove directory structure from the Class name (kubawerlos, keradus) -* bug #5385 SingleLineCommentStyleFixer- run before NoUselessReturnFixer (kubawerlos) -* bug #5387 SingleSpaceAfterConstructFixer - do not touch multi line implements (SpacePossum) -* minor #5329 DX: collect coverage with Github Actions (kubawerlos) -* minor #5380 PhpdocOrderByValueFixer - Allow sorting of throws annotations by value (localheinz, keradus) -* minor #5383 DX: fail PHPUnit tests on warning (kubawerlos) -* minor #5386 DX: remove incorrect priority relations (kubawerlos) - -Changelog for v2.17.2 ---------------------- - -* bug #5345 CleanNamespaceFixer - preserve traling comments (SpacePossum) -* bug #5348 PsrAutoloadingFixer - fix for class without namespace (kubawerlos) -* bug #5362 SingleSpaceAfterConstructFixer: Do not adjust whitespace before multiple multi-line extends (localheinz, SpacePossum) -* minor #5314 Enable testing with PHPUnit 9.x (sanmai) -* minor #5319 Clean ups (SpacePossum) -* minor #5338 clean ups (SpacePossum) -* minor #5339 NoEmptyStatementFixer - fix more cases (SpacePossum) -* minor #5340 NamedArgumentTransformer - Introduction (SpacePossum) -* minor #5344 Update docs: do not use deprecated create method (SpacePossum) -* minor #5353 Fix typo in issue template (stof) -* minor #5355 OrderedTraitsFixer - mark as risky (SpacePossum) -* minor #5356 RuleSet description fixes (SpacePossum) -* minor #5359 Add application version to "fix" out put when verbosity flag is set (SpacePossum) -* minor #5360 DX: clean up detectIndent methods (kubawerlos) -* minor #5363 Added missing self return type to ConfigInterface::registerCustomFixers() (vudaltsov) -* minor #5366 PhpUnitDedicateAssertInternalTypeFixer - recover target option (keradus) -* minor #5368 DX: PHPUnit 9 compatibility for 2.17 (keradus) -* minor #5370 DX: update PHPUnit usage to use external Prophecy trait and solve warning (keradus) -* minor #5371 Update documentation about PHP_CS_FIXER_IGNORE_ENV (SanderSander, keradus) -* minor #5373 DX: MagicMethodCasingFixerTest - fix test case description (keradus) -* minor #5374 DX: PhpUnitDedicateAssertInternalTypeFixer - add code sample for non-default config (keradus) - -Changelog for v2.17.1 ---------------------- - -* bug #5325 NoBreakCommentFixer - better throw handling (SpacePossum) -* bug #5327 StaticLambdaFixer - fix for arrow function used in class with $this (kubawerlos, SpacePossum) -* bug #5332 Fix file missing for php8 (jderusse) -* bug #5333 Fix file missing for php8 (jderusse) -* minor #5328 Fixed deprecation message version (GrahamCampbell) -* minor #5330 DX: cleanup Github Actions configs (kubawerlos) - -Changelog for v2.17.0 ---------------------- - -* bug #4752 SimpleLambdaCallFixer - bug fixes (SpacePossum) -* bug #4794 TernaryToElvisOperatorFixer - fix open tag with echo (SpacePossum) -* bug #5084 Fix for variables within string interpolation in lambda_not_used_import (GrahamCampbell) -* bug #5094 SwitchContinueToBreakFixer - do not support alternative syntax (SpacePossum) -* feature #2619 PSR-5 @inheritDoc support (julienfalque) -* feature #3253 Add SimplifiedIfReturnFixer (Slamdunk, SpacePossum) -* feature #4005 GroupImportFixer - introduction (greeflas) -* feature #4012 BracesFixer - add "allow_single_line_anonymous_class_with_empty_body" option (kubawerlos) -* feature #4021 OperatorLinebreakFixer - Introduction (kubawerlos, SpacePossum) -* feature #4259 PsrAutoloadingFixer - introduction (kubawerlos) -* feature #4375 extend ruleset "@PHP73Migration" (gharlan) -* feature #4435 SingleSpaceAfterConstructFixer - Introduction (localheinz) -* feature #4493 Add echo_tag_syntax rule (mlocati, kubawerlos) -* feature #4544 SimpleLambdaCallFixer - introduction (keradus) -* feature #4569 PhpdocOrderByValueFixer - Introduction (localheinz) -* feature #4590 SwitchContinueToBreakFixer - Introduction (SpacePossum) -* feature #4679 NativeConstantInvocationFixer - add "strict" flag (kubawerlos) -* feature #4701 OrderedTraitsFixer - introduction (julienfalque) -* feature #4704 LambdaNotUsedImportFixer - introduction (SpacePossum) -* feature #4740 NoAliasLanguageConstructCallFixer - introduction (SpacePossum) -* feature #4741 TernaryToElvisOperatorFixer - introduction (SpacePossum) -* feature #4778 UseArrowFunctionsFixer - introduction (gharlan) -* feature #4790 ArrayPushFixer - introduction (SpacePossum) -* feature #4800 NoUnneededFinalMethodFixer - Add "private_methods" option (SpacePossum) -* feature #4831 BlankLineBeforeStatementFixer - add yield from (SpacePossum) -* feature #4832 NoUnneededControlParenthesesFixer - add yield from (SpacePossum) -* feature #4863 NoTrailingWhitespaceInStringFixer - introduction (gharlan) -* feature #4875 ClassAttributesSeparationFixer - add option for no new lines between properties (adri, ruudk) -* feature #4880 HeredocIndentationFixer - config option for indentation level (gharlan) -* feature #4908 PhpUnitExpectationFixer - update for Phpunit 8.4 (ktomk) -* feature #4942 OrderedClassElementsFixer - added support for abstract method sorting (carlalexander, SpacePossum) -* feature #4947 NativeConstantInvocation - Add "PHP_INT_SIZE" to SF rule set (kubawerlos) -* feature #4953 Add support for custom differ (paulhenri-l, SpacePossum) -* feature #5264 CleanNamespaceFixer - Introduction (SpacePossum) -* feature #5280 NoUselessSprintfFixer - Introduction (SpacePossum) -* minor #4634 Make all options snake_case (kubawerlos) -* minor #4667 PhpUnitOrderedCoversFixer - stop using deprecated fixer (keradus) -* minor #4673 FinalStaticAccessFixer - deprecate (julienfalque) -* minor #4762 Rename simple_lambda_call to regular_callable_call (julienfalque) -* minor #4782 Update RuleSets (SpacePossum) -* minor #4802 Master cleanup (SpacePossum) -* minor #4828 Deprecate Config::create() (DocFX) -* minor #4872 Update RuleSet SF and PHP-CS-Fixer with new config for `no_extra_blan… (SpacePossum) -* minor #4900 Move "no_trailing_whitespace_in_string" to SF ruleset. (SpacePossum) -* minor #4903 Docs: extend regular_callable_call rule docs (keradus, SpacePossum) -* minor #4910 Add use_arrow_functions rule to PHP74Migration:risky set (keradus) -* minor #5025 PhpUnitDedicateAssertInternalTypeFixer - deprecate "target" option (kubawerlos) -* minor #5037 FinalInternalClassFixer- Rename option (SpacePossum) -* minor #5093 LambdaNotUsedImportFixer - add heredoc test (SpacePossum) -* minor #5163 Fix CS (SpacePossum) -* minor #5169 PHP8 care package master (SpacePossum) -* minor #5186 Fix tests (SpacePossum) -* minor #5192 GotoLabelAnalyzer - introduction (SpacePossum) -* minor #5230 Fix: Reference (localheinz) -* minor #5240 PHP8 - Allow trailing comma in parameter list support (SpacePossum) -* minor #5244 Fix 2.17 build (keradus) -* minor #5251 PHP8 - match support (SpacePossum) -* minor #5252 Update RuleSets (SpacePossum) -* minor #5278 PHP8 constructor property promotion support (SpacePossum) -* minor #5284 PHP8 - Attribute support (SpacePossum) -* minor #5323 NoUselessSprintfFixer - Fix test on PHP5.6 (SpacePossum) -* minor #5326 DX: relax composer requirements to not block installation under PHP v8, support for PHP v8 is not yet ready (keradus) - - -Changelog for v2.16.10 ----------------------- - -* minor #5314 Enable testing with PHPUnit 9.x (sanmai) -* minor #5338 clean ups (SpacePossum) -* minor #5339 NoEmptyStatementFixer - fix more cases (SpacePossum) -* minor #5340 NamedArgumentTransformer - Introduction (SpacePossum) -* minor #5344 Update docs: do not use deprecated create method (SpacePossum) -* minor #5356 RuleSet description fixes (SpacePossum) -* minor #5360 DX: clean up detectIndent methods (kubawerlos) -* minor #5370 DX: update PHPUnit usage to use external Prophecy trait and solve warning (keradus) -* minor #5373 DX: MagicMethodCasingFixerTest - fix test case description (keradus) -* minor #5374 DX: PhpUnitDedicateAssertInternalTypeFixer - add code sample for non-default config (keradus) - -Changelog for v2.16.9 ---------------------- - -* bug #5095 Annotation - fix for Windows line endings (SpacePossum) -* bug #5221 NoSuperfluousPhpdocTagsFixer - fix for single line PHPDoc (kubawerlos) -* bug #5225 TernaryOperatorSpacesFixer - fix for alternative control structures (kubawerlos) -* bug #5235 ArrayIndentationFixer - fix for nested arrays (kubawerlos) -* bug #5248 NoBreakCommentFixer - fix throw detect (SpacePossum) -* bug #5250 SwitchAnalyzer - fix for semicolon after case/default (kubawerlos) -* bug #5253 IO - fix cache info message (SpacePossum) -* bug #5273 Fix PHPDoc line span fixer when property has array typehint (ossinkine) -* bug #5274 TernaryToNullCoalescingFixer - concat precedence fix (SpacePossum) -* feature #5216 Add RuleSets to docs (SpacePossum) -* minor #5226 Applied CS fixes from 2.17-dev (GrahamCampbell) -* minor #5229 Fixed incorrect phpdoc (GrahamCampbell) -* minor #5231 CS: unify styling with younger branches (keradus) -* minor #5232 PHP8 - throw expression support (SpacePossum) -* minor #5233 DX: simplify check_file_permissions.sh (kubawerlos) -* minor #5236 Improve handling of unavailable code samples (julienfalque, keradus) -* minor #5239 PHP8 - Allow trailing comma in parameter list support (SpacePossum) -* minor #5254 PHP8 - mixed type support (SpacePossum) -* minor #5255 Tests: do not skip documentation test (keradus) -* minor #5256 Docs: phpdoc_to_return_type - add new example in docs (keradus) -* minor #5261 Do not update Composer twice (sanmai) -* minor #5263 PHP8 support (SpacePossum) -* minor #5266 PhpUnitTestCaseStaticMethodCallsFixer - PHPUnit 9.x support (sanmai) -* minor #5267 Improve InstallViaComposerTest (sanmai) -* minor #5268 Add GitHub Workflows CI, including testing on PHP 8 and on macOS/Windows/Ubuntu (sanmai) -* minor #5269 Prep work to migrate to PHPUnit 9.x (sanmai, keradus) -* minor #5275 remove not supported verbose options (SpacePossum) -* minor #5276 PHP8 - add NoUnreachableDefaultArgumentValueFixer to risky set (SpacePossum) -* minor #5277 PHP8 - Constructor Property Promotion support (SpacePossum) -* minor #5292 Disable blank issue template and expose community chat (keradus) -* minor #5293 Add documentation to "yoda_style" sniff to convert Yoda style to non-Yoda style (Luc45) -* minor #5295 Run static code analysis off GitHub Actions (sanmai) -* minor #5298 Add yamllint workflow, validates .yaml files (sanmai) -* minor #5302 SingleLineCommentStyleFixer - do not fix possible attributes (PHP8) (SpacePossum) -* minor #5303 Drop CircleCI and AppVeyor (keradus) -* minor #5304 DX: rename TravisTest, as we no longer test only Travis there (keradus) -* minor #5305 Groom GitHub CI and move some checks from TravisCI to GitHub CI (keradus) -* minor #5308 Only run yamllint when a YAML file is changed (julienfalque, keradus) -* minor #5309 CICD: create yamllint config file (keradus) -* minor #5311 OrderedClassElementsFixer - PHPUnit Bridge support (ktomk) -* minor #5316 PHP8 - Attribute support (SpacePossum) -* minor #5321 DX: little code grooming (keradus) - -Changelog for v2.16.8 ---------------------- - -* bug #5325 NoBreakCommentFixer - better throw handling (SpacePossum) -* bug #5327 StaticLambdaFixer - fix for arrow function used in class with $this (kubawerlos, SpacePossum) -* bug #5333 Fix file missing for php8 (jderusse) -* minor #5328 Fixed deprecation message version (GrahamCampbell) -* minor #5330 DX: cleanup Github Actions configs (kubawerlos) - -Changelog for v2.16.5 ---------------------- - -* bug #4378 PhpUnitNoExpectationAnnotationFixer - annotation in single line doc comment (kubawerlos) -* bug #4936 HeaderCommentFixer - Fix unexpected removal of regular comments (julienfalque) -* bug #5006 PhpdocToParamTypeFixer - fix for breaking PHP syntax for type having reserved name (kubawerlos) -* bug #5016 NoSuperfluousPhpdocTagsFixer - fix for @return with @inheritDoc in description (kubawerlos) -* bug #5017 PhpdocTrimConsecutiveBlankLineSeparationFixer - must run after AlignMultilineCommentFixer (kubawerlos) -* bug #5032 SingleLineAfterImportsFixer - fix for line after import (and before another import) already added using CRLF (kubawerlos) -* bug #5033 VoidReturnFixer - must run after NoSuperfluousPhpdocTagsFixer (kubawerlos) -* bug #5038 HelpCommandTest - toString nested array (SpacePossum) -* bug #5040 LinebreakAfterOpeningTagFixer - do not change code if linebreak already present (kubawerlos) -* bug #5044 StandardizeIncrementFixer - fix handling static properties (kubawerlos) -* bug #5045 BacktickToShellExecFixer - add priority relation to NativeFunctionInvocationFixer and SingleQuoteFixer (kubawerlos) -* bug #5054 PhpdocTypesFixer - fix for multidimensional array (kubawerlos) -* bug #5065 TernaryOperatorSpacesFixer - fix for discovering ":" correctly (kubawerlos) -* bug #5068 Fixed php-cs-fixer crashes on input file syntax error (GrahamCampbell) -* bug #5087 NoAlternativeSyntaxFixer - add support for switch and declare (SpacePossum) -* bug #5092 PhpdocToParamTypeFixer - remove not used option (SpacePossum) -* bug #5105 ClassKeywordRemoveFixer - fix for fully qualified class (kubawerlos) -* bug #5113 TernaryOperatorSpacesFixer - handle goto labels (SpacePossum) -* bug #5124 Fix TernaryToNullCoalescingFixer when dealing with object properties (HypeMC) -* bug #5137 DoctrineAnnotationSpacesFixer - fix for typed properties (kubawerlos) -* bug #5180 Always lint test cases with the stricter process linter (GrahamCampbell) -* bug #5190 PhpUnit*Fixers - Only fix in unit test class scope (SpacePossum) -* bug #5195 YodaStyle - statements in braces should be treated as variables in strict … (SpacePossum) -* bug #5220 NoUnneededFinalMethodFixer - do not fix private constructors (SpacePossum) -* feature #3475 Rework documentation (julienfalque, SpacePossum) -* feature #5166 PHP8 (SpacePossum) -* minor #4878 ArrayIndentationFixer - refactor (julienfalque) -* minor #5031 CI: skip_cleanup: true (keradus) -* minor #5035 PhpdocToParamTypeFixer - Rename attribute (SpacePossum) -* minor #5048 Allow composer/semver ^2.0 and ^3.0 (thomasvargiu) -* minor #5050 DX: moving integration test for braces, indentation_type and no_break_comment into right place (kubawerlos) -* minor #5051 DX: move all tests from AutoReview\FixerTest to Test\AbstractFixerTestCase (kubawerlos) -* minor #5053 DX: cleanup FunctionTypehintSpaceFixer (kubawerlos) -* minor #5056 DX: add missing priority test for indentation_type and phpdoc_indent (kubawerlos) -* minor #5077 DX: add missing priority test between NoUnsetCastFixer and BinaryOperatorSpacesFixer (kubawerlos) -* minor #5083 Update composer.json to prevent issue #5030 (mvorisek) -* minor #5088 NoBreakCommentFixer - NoUselessElseFixer - priority test (SpacePossum) -* minor #5100 Fixed invalid PHP 5.6 syntax (GrahamCampbell) -* minor #5106 Symfony's finder already ignores vcs and dot files by default (GrahamCampbell) -* minor #5112 DX: check file permissions (kubawerlos, SpacePossum) -* minor #5122 Show runtime PHP version (kubawerlos) -* minor #5132 Do not allow assignments in if statements (SpacePossum) -* minor #5133 RuleSetTest - Early return for boolean and detect more defaults (SpacePossum) -* minor #5139 revert some unneeded exclusions (SpacePossum) -* minor #5148 Upgrade Xcode (kubawerlos) -* minor #5149 NoUnsetOnPropertyFixer - risky description tweaks (SpacePossum) -* minor #5161 minors (SpacePossum) -* minor #5170 Fix test on PHP8 (SpacePossum) -* minor #5172 Remove accidentally inserted newlines (GrahamCampbell) -* minor #5173 Fix PHP8 RuleSet inherit (SpacePossum) -* minor #5174 Corrected linting error messages (GrahamCampbell) -* minor #5177 PHP8 (SpacePossum) -* minor #5178 Fix tests (SpacePossum) -* minor #5184 [FinalStaticAccessFixer] Handle new static() in final class (localheinz) -* minor #5188 DX: Update sibling debs to version supporting PHP8/PHPUnit9 (keradus) -* minor #5189 Create temporary linting file in system temp dir (keradus) -* minor #5191 MethodArgumentSpaceFixer - support use/import of anonymous functions. (undefinedor) -* minor #5193 DX: add AbstractPhpUnitFixer (kubawerlos) -* minor #5204 DX: cleanup NullableTypeTransformerTest (kubawerlos) -* minor #5207 Add © for logo (keradus) -* minor #5208 DX: cleanup php-cs-fixer entry file (keradus) -* minor #5210 CICD - temporarily disable problematic test (keradus) -* minor #5211 CICD: fix file permissions (keradus) -* minor #5213 DX: move report schemas to dedicated dir (keradus) -* minor #5214 CICD: fix file permissions (keradus) -* minor #5215 CICD: update checkbashisms (keradus) -* minor #5217 CICD: use Composer v2 and drop hirak/prestissimo plugin (keradus) -* minor #5218 DX: .gitignore - add .phpunit.result.cache (keradus) -* minor #5222 Upgrade Xcode (kubawerlos) -* minor #5223 Docs: regenerate docs on 2.16 line (keradus) - -Changelog for v2.16.4 ---------------------- - -* bug #3893 Fix handling /** and */ on the same line as the first and/or last annotation (dmvdbrugge) -* bug #4919 PhpUnitTestAnnotationFixer - fix function starting with "test" and having lowercase letter after (kubawerlos) -* bug #4929 YodaStyleFixer - handling equals empty array (kubawerlos) -* bug #4934 YodaStyleFixer - fix for conditions weird are (kubawerlos) -* bug #4958 OrderedImportsFixer - fix for trailing comma in group (kubawerlos) -* bug #4959 BlankLineBeforeStatementFixer - handle comment case (SpacePossum) -* bug #4962 MethodArgumentSpaceFixer - must run after MethodChainingIndentationFixer (kubawerlos) -* bug #4963 PhpdocToReturnTypeFixer - fix for breaking PHP syntax for type having reserved name (kubawerlos, Slamdunk) -* bug #4978 ArrayIndentationFixer - must run after MethodArgumentSpaceFixer (kubawerlos) -* bug #4994 FinalInternalClassFixer - must run before ProtectedToPrivateFixer (kubawerlos) -* bug #4996 NoEmptyCommentFixer - handle multiline comments (kubawerlos) -* bug #4999 BlankLineBeforeStatementFixer - better comment handling (SpacePossum) -* bug #5009 NoEmptyCommentFixer - better handle comments sequence (kubawerlos) -* bug #5010 SimplifiedNullReturnFixer - must run before VoidReturnFixer (kubawerlos) -* bug #5011 SingleClassElementPerStatementFixer - must run before ClassAttributesSeparationFixer (kubawerlos) -* bug #5012 StrictParamFixer - must run before NativeFunctionInvocationFixer (kubawerlos) -* bug #5014 PhpdocToParamTypeFixer - fix for void as param (kubawerlos) -* bug #5018 PhpdocScalarFixer - fix for comment with Windows line endings (kubawerlos) -* bug #5029 SingleLineAfterImportsFixer - fix for line after import already added using CRLF (kubawerlos) -* minor #4904 Increase PHPStan level to 8 with strict rules (julienfalque) -* minor #4920 Enhancement: Use DocBlock itself to make it multi-line (localheinz) -* minor #4930 DX: ensure PhpUnitNamespacedFixer handles all classes (kubawerlos) -* minor #4931 DX: add test to ensure each target version in PhpUnitTargetVersion has its set in RuleSet (kubawerlos) -* minor #4932 DX: Travis CI config - fix warnings and infos (kubawerlos) -* minor #4940 Reject empty path (julienfalque) -* minor #4944 Fix grammar (julienfalque) -* minor #4946 Allow "const" option on PHP <7.1 (julienfalque) -* minor #4948 Added describe command to readme (david, 8ctopus) -* minor #4949 Fixed build readme on Windows fails if using Git Bash (Mintty) (8ctopus) -* minor #4954 Config - Trim path (julienfalque) -* minor #4957 DX: Check trailing spaces in project files only (ktomk) -* minor #4961 Assert all project source files are monolithic. (SpacePossum) -* minor #4964 Fix PHPStan baseline (julienfalque) -* minor #4965 Fix PHPStan baseline (julienfalque) -* minor #4973 DX: test "isRisky" method in fixer tests, not as auto review (kubawerlos) -* minor #4974 Minor: Fix typo (ktomk) -* minor #4975 Revert PHPStan level to 5 (julienfalque) -* minor #4976 Add instructions for PHPStan (julienfalque) -* minor #4980 Introduce new issue templates (julienfalque) -* minor #4981 Prevent error in CTTest::testConstants (for PHP8) (guilliamxavier) -* minor #4982 Remove PHIVE (kubawerlos) -* minor #4985 Fix tests with Symfony 5.1 (julienfalque) -* minor #4987 PhpdocAnnotationWithoutDotFixer - handle unicode characters using mb_* (SpacePossum) -* minor #5008 Enhancement: Social justification applied (gbyrka-fingo) -* minor #5023 Fix issue templates (kubawerlos) -* minor #5024 DX: add missing non-default code samples (kubawerlos) - -Changelog for v2.16.3 ---------------------- - -* bug #4915 Fix handling property PHPDocs with unsupported type (julienfalque) -* minor #4916 Fix AppVeyor build (julienfalque) -* minor #4917 CircleCI - Bump xcode to 11.4 (GrahamCampbell) -* minor #4918 DX: do not fix ".phpt" files by default (kubawerlos) - -Changelog for v2.16.2 ---------------------- - -* bug #3820 Braces - (re)indenting comment issues (SpacePossum) -* bug #3911 PhpdocVarWithoutNameFixer - fix for properties only (dmvdbrugge) -* bug #4601 ClassKeywordRemoveFixer - Fix for namespace (yassine-ah, kubawerlos) -* bug #4630 FullyQualifiedStrictTypesFixer - Ignore partial class names which look like FQCNs (localheinz, SpacePossum) -* bug #4661 ExplicitStringVariableFixer - variables pair if one is already explicit (kubawerlos) -* bug #4675 NonPrintableCharacterFixer - fix for backslash and quotes when changing to escape sequences (kubawerlos) -* bug #4678 TokensAnalyzer::isConstantInvocation - fix for importing multiple classes with single "use" (kubawerlos) -* bug #4682 Fix handling array type declaration in properties (julienfalque) -* bug #4685 Improve Symfony 5 compatibility (keradus) -* bug #4688 TokensAnalyzer::isConstantInvocation - Fix detection for fully qualified return type (julienfalque) -* bug #4689 DeclareStrictTypesFixer - fix for "strict_types" set to "0" (kubawerlos) -* bug #4690 PhpdocVarAnnotationCorrectOrderFixer - fix for multiline `@var` without type (kubawerlos) -* bug #4710 SingleTraitInsertPerStatement - fix formatting for multiline "use" (kubawerlos) -* bug #4711 Ensure that files from "tests" directory in release are autoloaded (kubawerlos) -* bug #4749 TokensAnalyze::isUnaryPredecessorOperator fix for CT::T_ARRAY_INDEX_C… (SpacePossum) -* bug #4759 Add more priority cases (SpacePossum) -* bug #4761 NoSuperfluousElseifFixer - handle single line (SpacePossum) -* bug #4783 NoSuperfluousPhpdocTagsFixer - fix for really big PHPDoc (kubawerlos, mvorisek) -* bug #4787 NoUnneededFinalMethodFixer - Mark as risky (SpacePossum) -* bug #4795 OrderedClassElementsFixer - Fix (SpacePossum) -* bug #4801 GlobalNamespaceImportFixer - fix docblock handling (gharlan) -* bug #4804 TokensAnalyzer::isUnarySuccessorOperator fix for array curly braces (SpacePossum) -* bug #4807 IncrementStyleFixer - handle after ")" (SpacePossum) -* bug #4808 Modernize types casting fixer array curly (SpacePossum) -* bug #4809 Fix "braces" and "method_argument_space" priority (julienfalque) -* bug #4813 BracesFixer - fix invalid code generation on alternative syntax (SpacePossum) -* bug #4822 fix 2 bugs in phpdoc_line_span (lmichelin) -* bug #4823 ReturnAssignmentFixer - repeat fix (SpacePossum) -* bug #4824 NoUnusedImportsFixer - SingleLineAfterImportsFixer - fix priority (SpacePossum) -* bug #4825 GlobalNamespaceImportFixer - do not import global into global (SpacePossum) -* bug #4829 YodaStyleFixer - fix precedence for T_MOD_EQUAL and T_COALESCE_EQUAL (SpacePossum) -* bug #4830 TernaryToNullCoalescingFixer - handle yield from (SpacePossum) -* bug #4835 Remove duplicate "function_to_constant" from RuleSet (SpacePossum) -* bug #4840 LineEndingFixer - T_CLOSE_TAG support, StringLineEndingFixer - T_INLI… (SpacePossum) -* bug #4846 FunctionsAnalyzer - better isGlobalFunctionCall detection (SpacePossum) -* bug #4852 Priority issues (SpacePossum) -* bug #4870 HeaderCommentFixer - do not remove class docs (gharlan) -* bug #4871 NoExtraBlankLinesFixer - handle cases on same line (SpacePossum) -* bug #4895 Fix conflict between header_comment and declare_strict_types (BackEndTea, julienfalque) -* bug #4911 PhpdocSeparationFixer - fix regression with lack of next line (keradus) -* feature #4742 FunctionToConstantFixer - get_class($this) support (SpacePossum) -* minor #4377 CommentsAnalyzer - fix for declare before header comment (kubawerlos) -* minor #4636 DX: do not check for PHPDBG when collecting coverage (kubawerlos) -* minor #4644 Docs: add info about "-vv..." (voku) -* minor #4691 Run Travis CI on stable PHP 7.4 (kubawerlos) -* minor #4693 Increase Travis CI Git clone depth (julienfalque) -* minor #4699 LineEndingFixer - handle "\r\r\n" (kubawerlos) -* minor #4703 NoSuperfluousPhpdocTagsFixer,PhpdocAddMissingParamAnnotationFixer - p… (SpacePossum) -* minor #4707 Fix typos (TysonAndre) -* minor #4712 NoBlankLinesAfterPhpdocFixer — Do not strip newline between docblock and use statements (mollierobbert) -* minor #4715 Enhancement: Install ergebnis/composer-normalize via Phive (localheinz) -* minor #4722 Fix Circle CI build (julienfalque) -* minor #4724 DX: Simplify installing PCOV (kubawerlos) -* minor #4736 NoUnusedImportsFixer - do not match variable name as import (SpacePossum) -* minor #4746 NoSuperfluousPhpdocTagsFixer - Remove for typed properties (PHP 7.4) (ruudk) -* minor #4753 Do not apply any text/.git filters to fixtures (mvorisek) -* minor #4757 Test $expected is used before $input (SpacePossum) -* minor #4758 Autoreview the PHPDoc of *Fixer::getPriority based on the priority map (SpacePossum) -* minor #4765 Add test on some return types (SpacePossum) -* minor #4766 Remove false test skip (SpacePossum) -* minor #4767 Remove useless priority comments (kubawerlos) -* minor #4769 DX: add missing priority tests (kubawerlos) -* minor #4772 NoUnneededFinalMethodFixer - update description (kubawerlos) -* minor #4774 DX: simplify Utils::camelCaseToUnderscore (kubawerlos) -* minor #4781 NoUnneededCurlyBracesFixer - handle namespaces (SpacePossum) -* minor #4784 Travis CI - Use multiple keyservers (ktomk) -* minor #4785 Improve static analysis (enumag) -* minor #4788 Configurable fixers code sample (SpacePossum) -* minor #4791 Increase PHPStan level to 3 (julienfalque) -* minor #4797 clean ups (SpacePossum) -* minor #4803 FinalClassFixer - Doctrine\ORM\Mapping as ORM alias should not be required (localheinz) -* minor #4839 2.15 - clean ups (SpacePossum) -* minor #4842 ReturnAssignmentFixer - Support more cases (julienfalque) -* minor #4843 NoSuperfluousPhpdocTagsFixer - fix typo in option description (OndraM) -* minor #4844 Same requirements for descriptions (SpacePossum) -* minor #4849 Increase PHPStan level to 5 (julienfalque) -* minor #4850 Fix phpstan (SpacePossum) -* minor #4857 Fixed the unit tests (GrahamCampbell) -* minor #4865 Use latest xcode image (GrahamCampbell) -* minor #4892 CombineNestedDirnameFixer - Add space after comma (julienfalque) -* minor #4894 DX: PhpdocToParamTypeFixer - improve typing (keradus) -* minor #4898 FixerTest - yield the data in AutoReview (Nyholm) -* minor #4899 Fix exception message format for fabbot.io (SpacePossum) -* minor #4905 Support composer v2 installed.json files (GrahamCampbell) -* minor #4906 CI: use Composer stable release for AppVeyor (kubawerlos) -* minor #4909 DX: HeaderCommentFixer - use non-aliased version of option name in code (keradus) -* minor #4912 CI: Fix AppVeyor integration (keradus) - -Changelog for v2.16.1 ---------------------- - -* bug #4476 FunctionsAnalyzer - add "isTheSameClassCall" for correct verifying of function calls (kubawerlos) -* bug #4605 PhpdocToParamTypeFixer - cover more cases (keradus, julienfalque) -* bug #4626 FinalPublicMethodForAbstractClassFixer - Do not attempt to mark abstract public methods as final (localheinz) -* bug #4632 NullableTypeDeclarationForDefaultNullValueFixer - fix for not lowercase "null" (kubawerlos) -* bug #4638 Ensure compatibility with PHP 7.4 (julienfalque) -* bug #4641 Add typed properties test to VisibilityRequiredFixerTest (GawainLynch, julienfalque) -* bug #4654 ArrayIndentationFixer - Fix array indentation for multiline values (julienfalque) -* bug #4660 TokensAnalyzer::isConstantInvocation - fix for extending multiple interfaces (kubawerlos) -* bug #4668 TokensAnalyzer::isConstantInvocation - fix for interface method return type (kubawerlos) -* minor #4608 Allow Symfony 5 components (l-vo) -* minor #4622 Disallow PHP 7.4 failures on Travis CI (julienfalque) -* minor #4623 README - Mark up as code (localheinz) -* minor #4637 PHP 7.4 integration test (GawainLynch, julienfalque) -* minor #4643 DX: Update .gitattributes and move ci-integration.sh to root of the project (kubawerlos, keradus) -* minor #4645 Check PHP extensions on runtime (kubawerlos) -* minor #4655 Improve docs - README (mvorisek) -* minor #4662 DX: generate headers in README.rst (kubawerlos) -* minor #4669 Enable execution under PHP 7.4 (keradus) -* minor #4670 TravisTest - rewrite tests to allow last supported by tool PHP version to be snapshot (keradus) -* minor #4671 TravisTest - rewrite tests to allow last supported by tool PHP version to be snapshot (keradus) - -Changelog for v2.16.0 ---------------------- - -* feature #3810 PhpdocLineSpanFixer - Introduction (BackEndTea) -* feature #3928 Add FinalPublicMethodForAbstractClassFixer (Slamdunk) -* feature #4000 FinalStaticAccessFixer - Introduction (ntzm) -* feature #4275 Issue #4274: Let lowercase_constants directive to be configurable. (drupol) -* feature #4355 GlobalNamespaceImportFixer - Introduction (gharlan) -* feature #4358 SelfStaticAccessorFixer - Introduction (SpacePossum) -* feature #4385 CommentToPhpdocFixer - allow to ignore tags (kubawerlos) -* feature #4401 Add NullableTypeDeclarationForDefaultNullValueFixer (HypeMC) -* feature #4452 Add SingleLineThrowFixer (kubawerlos) -* feature #4500 NoSuperfluousPhpdocTags - Add remove_inheritdoc option (julienfalque) -* feature #4505 NoSuperfluousPhpdocTagsFixer - allow params that aren't on the signature (azjezz) -* feature #4531 PhpdocAlignFixer - add "property-read" and "property-write" to allowed tags (kubawerlos) -* feature #4583 Phpdoc to param type fixer rebase (jg-development) -* minor #4033 Raise deprecation warnings on usage of deprecated aliases (ntzm) -* minor #4423 DX: update branch alias (keradus) -* minor #4537 SelfStaticAccessor - extend itests (keradus) -* minor #4607 Configure no_superfluous_phpdoc_tags for Symfony (keradus) -* minor #4618 DX: fix usage of deprecated options (0x450x6c) -* minor #4619 Fix PHP 7.3 strict mode warnings (keradus) -* minor #4621 Add single_line_throw to Symfony ruleset (keradus) - -Changelog for v2.15.10 ----------------------- - -* bug #5095 Annotation - fix for Windows line endings (SpacePossum) -* bug #5221 NoSuperfluousPhpdocTagsFixer - fix for single line PHPDoc (kubawerlos) -* bug #5225 TernaryOperatorSpacesFixer - fix for alternative control structures (kubawerlos) -* bug #5235 ArrayIndentationFixer - fix for nested arrays (kubawerlos) -* bug #5248 NoBreakCommentFixer - fix throw detect (SpacePossum) -* bug #5250 SwitchAnalyzer - fix for semicolon after case/default (kubawerlos) -* bug #5253 IO - fix cache info message (SpacePossum) -* bug #5274 TernaryToNullCoalescingFixer - concat precedence fix (SpacePossum) -* feature #5216 Add RuleSets to docs (SpacePossum) -* minor #5226 Applied CS fixes from 2.17-dev (GrahamCampbell) -* minor #5229 Fixed incorrect phpdoc (GrahamCampbell) -* minor #5231 CS: unify styling with younger branches (keradus) -* minor #5232 PHP8 - throw expression support (SpacePossum) -* minor #5233 DX: simplify check_file_permissions.sh (kubawerlos) -* minor #5236 Improve handling of unavailable code samples (julienfalque, keradus) -* minor #5239 PHP8 - Allow trailing comma in parameter list support (SpacePossum) -* minor #5254 PHP8 - mixed type support (SpacePossum) -* minor #5255 Tests: do not skip documentation test (keradus) -* minor #5261 Do not update Composer twice (sanmai) -* minor #5263 PHP8 support (SpacePossum) -* minor #5266 PhpUnitTestCaseStaticMethodCallsFixer - PHPUnit 9.x support (sanmai) -* minor #5267 Improve InstallViaComposerTest (sanmai) -* minor #5276 PHP8 - add NoUnreachableDefaultArgumentValueFixer to risky set (SpacePossum) - -Changelog for v2.15.9 ---------------------- - -* bug #4378 PhpUnitNoExpectationAnnotationFixer - annotation in single line doc comment (kubawerlos) -* bug #4936 HeaderCommentFixer - Fix unexpected removal of regular comments (julienfalque) -* bug #5017 PhpdocTrimConsecutiveBlankLineSeparationFixer - must run after AlignMultilineCommentFixer (kubawerlos) -* bug #5033 VoidReturnFixer - must run after NoSuperfluousPhpdocTagsFixer (kubawerlos) -* bug #5038 HelpCommandTest - toString nested array (SpacePossum) -* bug #5040 LinebreakAfterOpeningTagFixer - do not change code if linebreak already present (kubawerlos) -* bug #5044 StandardizeIncrementFixer - fix handling static properties (kubawerlos) -* bug #5045 BacktickToShellExecFixer - add priority relation to NativeFunctionInvocationFixer and SingleQuoteFixer (kubawerlos) -* bug #5054 PhpdocTypesFixer - fix for multidimensional array (kubawerlos) -* bug #5065 TernaryOperatorSpacesFixer - fix for discovering ":" correctly (kubawerlos) -* bug #5068 Fixed php-cs-fixer crashes on input file syntax error (GrahamCampbell) -* bug #5087 NoAlternativeSyntaxFixer - add support for switch and declare (SpacePossum) -* bug #5105 ClassKeywordRemoveFixer - fix for fully qualified class (kubawerlos) -* bug #5113 TernaryOperatorSpacesFixer - handle goto labels (SpacePossum) -* bug #5124 Fix TernaryToNullCoalescingFixer when dealing with object properties (HypeMC) -* bug #5137 DoctrineAnnotationSpacesFixer - fix for typed properties (kubawerlos) -* bug #5180 Always lint test cases with the stricter process linter (GrahamCampbell) -* bug #5190 PhpUnit*Fixers - Only fix in unit test class scope (SpacePossum) -* bug #5195 YodaStyle - statements in braces should be treated as variables in strict … (SpacePossum) -* bug #5220 NoUnneededFinalMethodFixer - do not fix private constructors (SpacePossum) -* feature #3475 Rework documentation (julienfalque, SpacePossum) -* feature #5166 PHP8 (SpacePossum) -* minor #4878 ArrayIndentationFixer - refactor (julienfalque) -* minor #5031 CI: skip_cleanup: true (keradus) -* minor #5048 Allow composer/semver ^2.0 and ^3.0 (thomasvargiu) -* minor #5050 DX: moving integration test for braces, indentation_type and no_break_comment into right place (kubawerlos) -* minor #5051 DX: move all tests from AutoReview\FixerTest to Test\AbstractFixerTestCase (kubawerlos) -* minor #5053 DX: cleanup FunctionTypehintSpaceFixer (kubawerlos) -* minor #5056 DX: add missing priority test for indentation_type and phpdoc_indent (kubawerlos) -* minor #5077 DX: add missing priority test between NoUnsetCastFixer and BinaryOperatorSpacesFixer (kubawerlos) -* minor #5083 Update composer.json to prevent issue #5030 (mvorisek) -* minor #5088 NoBreakCommentFixer - NoUselessElseFixer - priority test (SpacePossum) -* minor #5100 Fixed invalid PHP 5.6 syntax (GrahamCampbell) -* minor #5106 Symfony's finder already ignores vcs and dot files by default (GrahamCampbell) -* minor #5112 DX: check file permissions (kubawerlos, SpacePossum) -* minor #5122 Show runtime PHP version (kubawerlos) -* minor #5132 Do not allow assignments in if statements (SpacePossum) -* minor #5133 RuleSetTest - Early return for boolean and detect more defaults (SpacePossum) -* minor #5139 revert some unneeded exclusions (SpacePossum) -* minor #5148 Upgrade Xcode (kubawerlos) -* minor #5149 NoUnsetOnPropertyFixer - risky description tweaks (SpacePossum) -* minor #5161 minors (SpacePossum) -* minor #5172 Remove accidentally inserted newlines (GrahamCampbell) -* minor #5173 Fix PHP8 RuleSet inherit (SpacePossum) -* minor #5174 Corrected linting error messages (GrahamCampbell) -* minor #5177 PHP8 (SpacePossum) -* minor #5188 DX: Update sibling debs to version supporting PHP8/PHPUnit9 (keradus) -* minor #5189 Create temporary linting file in system temp dir (keradus) -* minor #5191 MethodArgumentSpaceFixer - support use/import of anonymous functions. (undefinedor) -* minor #5193 DX: add AbstractPhpUnitFixer (kubawerlos) -* minor #5204 DX: cleanup NullableTypeTransformerTest (kubawerlos) -* minor #5207 Add © for logo (keradus) -* minor #5208 DX: cleanup php-cs-fixer entry file (keradus) -* minor #5210 CICD - temporarily disable problematic test (keradus) -* minor #5211 CICD: fix file permissions (keradus) -* minor #5213 DX: move report schemas to dedicated dir (keradus) -* minor #5214 CICD: fix file permissions (keradus) -* minor #5215 CICD: update checkbashisms (keradus) -* minor #5217 CICD: use Composer v2 and drop hirak/prestissimo plugin (keradus) -* minor #5218 DX: .gitignore - add .phpunit.result.cache (keradus) -* minor #5222 Upgrade Xcode (kubawerlos) - -Changelog for v2.15.8 ---------------------- - -* bug #3893 Fix handling /** and */ on the same line as the first and/or last annotation (dmvdbrugge) -* bug #4919 PhpUnitTestAnnotationFixer - fix function starting with "test" and having lowercase letter after (kubawerlos) -* bug #4929 YodaStyleFixer - handling equals empty array (kubawerlos) -* bug #4934 YodaStyleFixer - fix for conditions weird are (kubawerlos) -* bug #4958 OrderedImportsFixer - fix for trailing comma in group (kubawerlos) -* bug #4959 BlankLineBeforeStatementFixer - handle comment case (SpacePossum) -* bug #4962 MethodArgumentSpaceFixer - must run after MethodChainingIndentationFixer (kubawerlos) -* bug #4963 PhpdocToReturnTypeFixer - fix for breaking PHP syntax for type having reserved name (kubawerlos, Slamdunk) -* bug #4978 ArrayIndentationFixer - must run after MethodArgumentSpaceFixer (kubawerlos) -* bug #4994 FinalInternalClassFixer - must run before ProtectedToPrivateFixer (kubawerlos) -* bug #4996 NoEmptyCommentFixer - handle multiline comments (kubawerlos) -* bug #4999 BlankLineBeforeStatementFixer - better comment handling (SpacePossum) -* bug #5009 NoEmptyCommentFixer - better handle comments sequence (kubawerlos) -* bug #5010 SimplifiedNullReturnFixer - must run before VoidReturnFixer (kubawerlos) -* bug #5011 SingleClassElementPerStatementFixer - must run before ClassAttributesSeparationFixer (kubawerlos) -* bug #5012 StrictParamFixer - must run before NativeFunctionInvocationFixer (kubawerlos) -* bug #5029 SingleLineAfterImportsFixer - fix for line after import already added using CRLF (kubawerlos) -* minor #4904 Increase PHPStan level to 8 with strict rules (julienfalque) -* minor #4930 DX: ensure PhpUnitNamespacedFixer handles all classes (kubawerlos) -* minor #4931 DX: add test to ensure each target version in PhpUnitTargetVersion has its set in RuleSet (kubawerlos) -* minor #4932 DX: Travis CI config - fix warnings and infos (kubawerlos) -* minor #4940 Reject empty path (julienfalque) -* minor #4944 Fix grammar (julienfalque) -* minor #4946 Allow "const" option on PHP <7.1 (julienfalque) -* minor #4948 Added describe command to readme (david, 8ctopus) -* minor #4949 Fixed build readme on Windows fails if using Git Bash (Mintty) (8ctopus) -* minor #4954 Config - Trim path (julienfalque) -* minor #4957 DX: Check trailing spaces in project files only (ktomk) -* minor #4961 Assert all project source files are monolithic. (SpacePossum) -* minor #4964 Fix PHPStan baseline (julienfalque) -* minor #4973 DX: test "isRisky" method in fixer tests, not as auto review (kubawerlos) -* minor #4974 Minor: Fix typo (ktomk) -* minor #4975 Revert PHPStan level to 5 (julienfalque) -* minor #4976 Add instructions for PHPStan (julienfalque) -* minor #4980 Introduce new issue templates (julienfalque) -* minor #4981 Prevent error in CTTest::testConstants (for PHP8) (guilliamxavier) -* minor #4982 Remove PHIVE (kubawerlos) -* minor #4985 Fix tests with Symfony 5.1 (julienfalque) -* minor #4987 PhpdocAnnotationWithoutDotFixer - handle unicode characters using mb_* (SpacePossum) -* minor #5008 Enhancement: Social justification applied (gbyrka-fingo) -* minor #5023 Fix issue templates (kubawerlos) -* minor #5024 DX: add missing non-default code samples (kubawerlos) - -Changelog for v2.15.7 ---------------------- - -* bug #4915 Fix handling property PHPDocs with unsupported type (julienfalque) -* minor #4916 Fix AppVeyor build (julienfalque) -* minor #4917 CircleCI - Bump xcode to 11.4 (GrahamCampbell) -* minor #4918 DX: do not fix ".phpt" files by default (kubawerlos) - -Changelog for v2.15.6 ---------------------- - -* bug #3820 Braces - (re)indenting comment issues (SpacePossum) -* bug #3911 PhpdocVarWithoutNameFixer - fix for properties only (dmvdbrugge) -* bug #4601 ClassKeywordRemoveFixer - Fix for namespace (yassine-ah, kubawerlos) -* bug #4630 FullyQualifiedStrictTypesFixer - Ignore partial class names which look like FQCNs (localheinz, SpacePossum) -* bug #4661 ExplicitStringVariableFixer - variables pair if one is already explicit (kubawerlos) -* bug #4675 NonPrintableCharacterFixer - fix for backslash and quotes when changing to escape sequences (kubawerlos) -* bug #4678 TokensAnalyzer::isConstantInvocation - fix for importing multiple classes with single "use" (kubawerlos) -* bug #4682 Fix handling array type declaration in properties (julienfalque) -* bug #4685 Improve Symfony 5 compatibility (keradus) -* bug #4688 TokensAnalyzer::isConstantInvocation - Fix detection for fully qualified return type (julienfalque) -* bug #4689 DeclareStrictTypesFixer - fix for "strict_types" set to "0" (kubawerlos) -* bug #4690 PhpdocVarAnnotationCorrectOrderFixer - fix for multiline `@var` without type (kubawerlos) -* bug #4710 SingleTraitInsertPerStatement - fix formatting for multiline "use" (kubawerlos) -* bug #4711 Ensure that files from "tests" directory in release are autoloaded (kubawerlos) -* bug #4749 TokensAnalyze::isUnaryPredecessorOperator fix for CT::T_ARRAY_INDEX_C… (SpacePossum) -* bug #4759 Add more priority cases (SpacePossum) -* bug #4761 NoSuperfluousElseifFixer - handle single line (SpacePossum) -* bug #4783 NoSuperfluousPhpdocTagsFixer - fix for really big PHPDoc (kubawerlos, mvorisek) -* bug #4787 NoUnneededFinalMethodFixer - Mark as risky (SpacePossum) -* bug #4795 OrderedClassElementsFixer - Fix (SpacePossum) -* bug #4804 TokensAnalyzer::isUnarySuccessorOperator fix for array curly braces (SpacePossum) -* bug #4807 IncrementStyleFixer - handle after ")" (SpacePossum) -* bug #4808 Modernize types casting fixer array curly (SpacePossum) -* bug #4809 Fix "braces" and "method_argument_space" priority (julienfalque) -* bug #4813 BracesFixer - fix invalid code generation on alternative syntax (SpacePossum) -* bug #4823 ReturnAssignmentFixer - repeat fix (SpacePossum) -* bug #4824 NoUnusedImportsFixer - SingleLineAfterImportsFixer - fix priority (SpacePossum) -* bug #4829 YodaStyleFixer - fix precedence for T_MOD_EQUAL and T_COALESCE_EQUAL (SpacePossum) -* bug #4830 TernaryToNullCoalescingFixer - handle yield from (SpacePossum) -* bug #4835 Remove duplicate "function_to_constant" from RuleSet (SpacePossum) -* bug #4840 LineEndingFixer - T_CLOSE_TAG support, StringLineEndingFixer - T_INLI… (SpacePossum) -* bug #4846 FunctionsAnalyzer - better isGlobalFunctionCall detection (SpacePossum) -* bug #4852 Priority issues (SpacePossum) -* bug #4870 HeaderCommentFixer - do not remove class docs (gharlan) -* bug #4871 NoExtraBlankLinesFixer - handle cases on same line (SpacePossum) -* bug #4895 Fix conflict between header_comment and declare_strict_types (BackEndTea, julienfalque) -* bug #4911 PhpdocSeparationFixer - fix regression with lack of next line (keradus) -* feature #4742 FunctionToConstantFixer - get_class($this) support (SpacePossum) -* minor #4377 CommentsAnalyzer - fix for declare before header comment (kubawerlos) -* minor #4636 DX: do not check for PHPDBG when collecting coverage (kubawerlos) -* minor #4644 Docs: add info about "-vv..." (voku) -* minor #4691 Run Travis CI on stable PHP 7.4 (kubawerlos) -* minor #4693 Increase Travis CI Git clone depth (julienfalque) -* minor #4699 LineEndingFixer - handle "\r\r\n" (kubawerlos) -* minor #4703 NoSuperfluousPhpdocTagsFixer,PhpdocAddMissingParamAnnotationFixer - p… (SpacePossum) -* minor #4707 Fix typos (TysonAndre) -* minor #4712 NoBlankLinesAfterPhpdocFixer — Do not strip newline between docblock and use statements (mollierobbert) -* minor #4715 Enhancement: Install ergebnis/composer-normalize via Phive (localheinz) -* minor #4722 Fix Circle CI build (julienfalque) -* minor #4724 DX: Simplify installing PCOV (kubawerlos) -* minor #4736 NoUnusedImportsFixer - do not match variable name as import (SpacePossum) -* minor #4746 NoSuperfluousPhpdocTagsFixer - Remove for typed properties (PHP 7.4) (ruudk) -* minor #4753 Do not apply any text/.git filters to fixtures (mvorisek) -* minor #4757 Test $expected is used before $input (SpacePossum) -* minor #4758 Autoreview the PHPDoc of *Fixer::getPriority based on the priority map (SpacePossum) -* minor #4765 Add test on some return types (SpacePossum) -* minor #4766 Remove false test skip (SpacePossum) -* minor #4767 Remove useless priority comments (kubawerlos) -* minor #4769 DX: add missing priority tests (kubawerlos) -* minor #4772 NoUnneededFinalMethodFixer - update description (kubawerlos) -* minor #4774 DX: simplify Utils::camelCaseToUnderscore (kubawerlos) -* minor #4781 NoUnneededCurlyBracesFixer - handle namespaces (SpacePossum) -* minor #4784 Travis CI - Use multiple keyservers (ktomk) -* minor #4785 Improve static analysis (enumag) -* minor #4788 Configurable fixers code sample (SpacePossum) -* minor #4791 Increase PHPStan level to 3 (julienfalque) -* minor #4797 clean ups (SpacePossum) -* minor #4803 FinalClassFixer - Doctrine\ORM\Mapping as ORM alias should not be required (localheinz) -* minor #4839 2.15 - clean ups (SpacePossum) -* minor #4842 ReturnAssignmentFixer - Support more cases (julienfalque) -* minor #4844 Same requirements for descriptions (SpacePossum) -* minor #4849 Increase PHPStan level to 5 (julienfalque) -* minor #4857 Fixed the unit tests (GrahamCampbell) -* minor #4865 Use latest xcode image (GrahamCampbell) -* minor #4892 CombineNestedDirnameFixer - Add space after comma (julienfalque) -* minor #4898 FixerTest - yield the data in AutoReview (Nyholm) -* minor #4899 Fix exception message format for fabbot.io (SpacePossum) -* minor #4905 Support composer v2 installed.json files (GrahamCampbell) -* minor #4906 CI: use Composer stable release for AppVeyor (kubawerlos) -* minor #4909 DX: HeaderCommentFixer - use non-aliased version of option name in code (keradus) -* minor #4912 CI: Fix AppVeyor integration (keradus) - -Changelog for v2.15.5 ---------------------- - -* bug #4476 FunctionsAnalyzer - add "isTheSameClassCall" for correct verifying of function calls (kubawerlos) -* bug #4641 Add typed properties test to VisibilityRequiredFixerTest (GawainLynch, julienfalque) -* bug #4654 ArrayIndentationFixer - Fix array indentation for multiline values (julienfalque) -* bug #4660 TokensAnalyzer::isConstantInvocation - fix for extending multiple interfaces (kubawerlos) -* bug #4668 TokensAnalyzer::isConstantInvocation - fix for interface method return type (kubawerlos) -* minor #4608 Allow Symfony 5 components (l-vo) -* minor #4622 Disallow PHP 7.4 failures on Travis CI (julienfalque) -* minor #4637 PHP 7.4 integration test (GawainLynch, julienfalque) -* minor #4643 DX: Update .gitattributes and move ci-integration.sh to root of the project (kubawerlos, keradus) -* minor #4645 Check PHP extensions on runtime (kubawerlos) -* minor #4655 Improve docs - README (mvorisek) -* minor #4662 DX: generate headers in README.rst (kubawerlos) -* minor #4669 Enable execution under PHP 7.4 (keradus) -* minor #4671 TravisTest - rewrite tests to allow last supported by tool PHP version to be snapshot (keradus) - -Changelog for v2.15.4 ---------------------- - -* bug #4183 IndentationTypeFixer - fix handling 2 spaces indent (kubawerlos) -* bug #4406 NoSuperfluousElseifFixer - fix invalid escape sequence in character class (remicollet, SpacePossum) -* bug #4416 NoUnusedImports - Fix imports detected as used in namespaces (julienfalque, SpacePossum) -* bug #4518 PhpUnitNoExpectationAnnotationFixer - fix handling expect empty exception message (ktomk) -* bug #4548 HeredocIndentationFixer - remove whitespace in empty lines (gharlan) -* bug #4556 ClassKeywordRemoveFixer - fix for self,static and parent keywords (kubawerlos) -* bug #4572 TokensAnalyzer - handle nested anonymous classes (SpacePossum) -* bug #4573 CombineConsecutiveIssetsFixer - fix stop based on precedence (SpacePossum) -* bug #4577 Fix command exit code on lint error after fixing fix. (SpacePossum) -* bug #4581 FunctionsAnalyzer: fix for comment in type (kubawerlos) -* bug #4586 BracesFixer - handle dynamic static method call (SpacePossum) -* bug #4594 Braces - fix both single line comment styles (SpacePossum) -* bug #4609 PhpdocTypesOrderFixer - Prevent unexpected default value change (laurent35240) -* minor #4458 Add PHPStan (julienfalque) -* minor #4479 IncludeFixer - remove braces when the statement is wrapped in block (kubawerlos) -* minor #4490 Allow running if installed as project specific (ticktackk) -* minor #4517 Verify PCRE pattern before use (ktomk) -* minor #4521 Remove superfluous leading backslash, closes 4520 (ktomk) -* minor #4532 DX: ensure data providers are used (kubawerlos) -* minor #4534 Redo PHP7.4 - Add "str_split" => "mb_str_split" mapping (keradus, Slamdunk) -* minor #4536 DX: use PHIVE for dev tools (keradus) -* minor #4538 Docs: update Cookbook (keradus) -* minor #4541 Enhancement: Use default name property to configure command names (localheinz) -* minor #4546 DX: removing unnecessary variable initialization (kubawerlos) -* minor #4549 DX: use ::class whenever possible (keradus, kubawerlos) -* minor #4550 DX: travis_retry for dev-tools install (ktomk, keradus) -* minor #4559 Allow 7.4snapshot to fail due to a bug on it (kubawerlos) -* minor #4563 GitlabReporter - fix report output (mjanser) -* minor #4564 Move readme-update command to Section 3 (iwasherefirst2) -* minor #4566 Update symfony ruleset (gharlan) -* minor #4570 Command::execute() should always return an integer (derrabus) -* minor #4580 Add suport for true/false return type hints. (SpacePossum) -* minor #4584 Increase PHPStan level to 1 (julienfalque) -* minor #4585 Fix deprecation notices (julienfalque) -* minor #4587 Output details - Explain why a file was skipped (SpacePossum) -* minor #4588 Fix STDIN test when path is one level deep (julienfalque) -* minor #4589 PhpdocToReturnType - Add support for Foo[][] (SpacePossum) -* minor #4593 Ensure compatibility with PHP 7.4 typed properties (julienfalque) -* minor #4595 Import cannot be used after `::` so can be removed (SpacePossum) -* minor #4596 Ensure compatibility with PHP 7.4 numeric literal separator (julienfalque) -* minor #4597 Fix PHP 7.4 deprecation notices (julienfalque) -* minor #4600 Ensure compatibility with PHP 7.4 arrow functions (julienfalque) -* minor #4602 Ensure compatibility with PHP 7.4 spread operator in array expression (julienfalque) -* minor #4603 Ensure compatibility with PHP 7.4 null coalescing assignment operator (julienfalque) -* minor #4606 Configure no_superfluous_phpdoc_tags for Symfony (keradus) -* minor #4610 Travis CI - Update known files list (julienfalque) -* minor #4615 Remove workaround for dev-tools install reg. Phive (ktomk) - -Changelog for v2.15.3 ---------------------- - -* bug #4533 Revert PHP7.4 - Add "str_split" => "mb_str_split" mapping (keradus) -* minor #4264 DX: AutoReview - ensure Travis handle all needed PHP versions (keradus) -* minor #4524 MethodArgumentSpaceFixerTest - make explicit configuration to prevent fail on configuration change (keradus) - -Changelog for v2.15.2 ---------------------- - -* bug #4132 BlankLineAfterNamespaceFixer - do not remove indent, handle comments (kubawerlos) -* bug #4384 MethodArgumentSpaceFixer - fix for on_multiline:ensure_fully_multiline with trailing comma in function call (kubawerlos) -* bug #4404 FileLintingIterator - fix current value on end/invalid (SpacePossum) -* bug #4421 FunctionTypehintSpaceFixer - Ensure single space between type declaration and parameter (localheinz) -* bug #4436 MethodArgumentSpaceFixer - handle misplaced ) (keradus) -* bug #4439 NoLeadingImportSlashFixer - Add space if needed (SpacePossum) -* bug #4440 SimpleToComplexStringVariableFixer - Fix $ bug (dmvdbrugge) -* bug #4453 Fix preg_match error on 7.4snapshot (kubawerlos) -* bug #4461 IsNullFixer - fix null coalescing operator handling (linniksa) -* bug #4467 ToolInfo - fix access to reference without checking existence (black-silence) -* bug #4472 Fix non-static closure unbinding this on PHP 7.4 (kelunik) -* minor #3726 Use Box 3 to build the PHAR (theofidry, keradus) -* minor #4412 PHP 7.4 - Tests for support (SpacePossum) -* minor #4431 DX: test that default config is not passed in RuleSet (kubawerlos) -* minor #4433 DX: test to ensure @PHPUnitMigration rule sets are correctly defined (kubawerlos) -* minor #4445 DX: static call of markTestSkippedOrFail (kubawerlos) -* minor #4463 Add apostrophe to possessive "team's" (ChandlerSwift) -* minor #4471 ReadmeCommandTest - use CommandTester (kubawerlos) -* minor #4477 DX: control names of public methods in test's classes (kubawerlos) -* minor #4483 NewWithBracesFixer - Fix object operator and curly brace open cases (SpacePossum) -* minor #4484 fix typos in README (Sven Ludwig) -* minor #4494 DX: Fix shell script syntax in order to fix Travis builds (drupol) -* minor #4516 DX: Lock binary SCA tools versions (keradus) - -Changelog for v2.15.1 ---------------------- - -* bug #4418 PhpUnitNamespacedFixer - properly translate classes which do not follow translation pattern (ktomk) -* bug #4419 PhpUnitTestCaseStaticMethodCallsFixer - skip anonymous classes and lambda (SpacePossum) -* bug #4420 MethodArgumentSpaceFixer - PHP7.3 trailing commas in function calls (SpacePossum) -* minor #4345 Travis: PHP 7.4 isn't allowed to fail anymore (Slamdunk) -* minor #4403 LowercaseStaticReferenceFixer - Fix invalid PHP version in example (HypeMC) -* minor #4424 DX: cleanup of composer.json - no need for branch-alias (keradus) -* minor #4425 DX: assertions are static, adjust custom assertions (keradus) -* minor #4426 DX: handle deprecations of symfony/event-dispatcher:4.3 (keradus) -* minor #4427 DX: stop using reserved T_FN in code samples (keradus) -* minor #4428 DX: update dev-tools (keradus) -* minor #4429 DX: MethodArgumentSpaceFixerTest - fix hidden merge conflict (keradus) - -Changelog for v2.15.0 ---------------------- - -* feature #3927 Add FinalClassFixer (Slamdunk) -* feature #3939 Add PhpUnitSizeClassFixer (Jefersson Nathan) -* feature #3942 SimpleToComplexStringVariableFixer - Introduction (dmvdbrugge, SpacePossum) -* feature #4113 OrderedInterfacesFixer - Introduction (dmvdbrugge) -* feature #4121 SingleTraitInsertPerStatementFixer - Introduction (SpacePossum) -* feature #4126 NativeFunctionTypeDeclarationCasingFixer - Introduction (SpacePossum) -* feature #4167 PhpUnitMockShortWillReturnFixer - Introduction (michadam-pearson) -* feature #4191 [7.3] NoWhitespaceBeforeCommaInArrayFixer - fix comma after heredoc-end (gharlan) -* feature #4288 Add Gitlab Reporter (hco) -* feature #4328 Add PhpUnitDedicateAssertInternalTypeFixer (Slamdunk) -* feature #4341 [7.3] TrailingCommaInMultilineArrayFixer - fix comma after heredoc-end (gharlan) -* feature #4342 [7.3] MethodArgumentSpaceFixer - fix comma after heredoc-end (gharlan) -* minor #4112 NoSuperfluousPhpdocTagsFixer - Add missing code sample, groom tests (keradus, SpacePossum) -* minor #4360 Add gitlab as output format in the README/help doc. (SpacePossum) -* minor #4386 Add PhpUnitMockShortWillReturnFixer to @Symfony:risky rule set (kubawerlos) -* minor #4398 New ruleset "@PHP73Migration" (gharlan) -* minor #4399 Fix 2.15 line (keradus) - -Changelog for v2.14.6 ---------------------- - -* bug #4533 Revert PHP7.4 - Add "str_split" => "mb_str_split" mapping (keradus) -* minor #4264 DX: AutoReview - ensure Travis handle all needed PHP versions (keradus) -* minor #4524 MethodArgumentSpaceFixerTest - make explicit configuration to prevent fail on configuration change (keradus) - -Changelog for v2.14.5 ---------------------- - -* bug #4132 BlankLineAfterNamespaceFixer - do not remove indent, handle comments (kubawerlos) -* bug #4384 MethodArgumentSpaceFixer - fix for on_multiline:ensure_fully_multiline with trailing comma in function call (kubawerlos) -* bug #4404 FileLintingIterator - fix current value on end/invalid (SpacePossum) -* bug #4421 FunctionTypehintSpaceFixer - Ensure single space between type declaration and parameter (localheinz) -* bug #4436 MethodArgumentSpaceFixer - handle misplaced ) (keradus) -* bug #4439 NoLeadingImportSlashFixer - Add space if needed (SpacePossum) -* bug #4453 Fix preg_match error on 7.4snapshot (kubawerlos) -* bug #4461 IsNullFixer - fix null coalescing operator handling (linniksa) -* bug #4467 ToolInfo - fix access to reference without checking existence (black-silence) -* bug #4472 Fix non-static closure unbinding this on PHP 7.4 (kelunik) -* minor #3726 Use Box 3 to build the PHAR (theofidry, keradus) -* minor #4412 PHP 7.4 - Tests for support (SpacePossum) -* minor #4431 DX: test that default config is not passed in RuleSet (kubawerlos) -* minor #4433 DX: test to ensure @PHPUnitMigration rule sets are correctly defined (kubawerlos) -* minor #4445 DX: static call of markTestSkippedOrFail (kubawerlos) -* minor #4463 Add apostrophe to possessive "team's" (ChandlerSwift) -* minor #4471 ReadmeCommandTest - use CommandTester (kubawerlos) -* minor #4477 DX: control names of public methods in test's classes (kubawerlos) -* minor #4483 NewWithBracesFixer - Fix object operator and curly brace open cases (SpacePossum) -* minor #4484 fix typos in README (Sven Ludwig) -* minor #4494 DX: Fix shell script syntax in order to fix Travis builds (drupol) -* minor #4516 DX: Lock binary SCA tools versions (keradus) - -Changelog for v2.14.4 ---------------------- - -* bug #4418 PhpUnitNamespacedFixer - properly translate classes which do not follow translation pattern (ktomk) -* bug #4419 PhpUnitTestCaseStaticMethodCallsFixer - skip anonymous classes and lambda (SpacePossum) -* bug #4420 MethodArgumentSpaceFixer - PHP7.3 trailing commas in function calls (SpacePossum) -* minor #4345 Travis: PHP 7.4 isn't allowed to fail anymore (Slamdunk) -* minor #4403 LowercaseStaticReferenceFixer - Fix invalid PHP version in example (HypeMC) -* minor #4425 DX: assertions are static, adjust custom assertions (keradus) -* minor #4426 DX: handle deprecations of symfony/event-dispatcher:4.3 (keradus) -* minor #4427 DX: stop using reserved T_FN in code samples (keradus) -* minor #4428 DX: update dev-tools (keradus) - -Changelog for v2.14.3 ---------------------- - -* bug #4298 NoTrailingWhitespaceInCommentFixer - fix for non-Unix line separators (kubawerlos) -* bug #4303 FullyQualifiedStrictTypesFixer - Fix the short type detection when a question mark (nullable) is prefixing it. (drupol) -* bug #4313 SelfAccessorFixer - fix for part qualified class name (kubawerlos, SpacePossum) -* bug #4314 PhpUnitTestCaseStaticMethodCallsFixer - fix for having property with name as method to update (kubawerlos, SpacePossum) -* bug #4316 NoUnsetCastFixer - Test for higher-precedence operators (SpacePossum) -* bug #4327 TokensAnalyzer - add concat operator to list of binary operators (SpacePossum) -* bug #4335 Cache - add indent and line ending to cache signature (dmvdbrugge) -* bug #4344 VoidReturnFixer - handle yield from (SpacePossum) -* bug #4346 BracesFixer - Do not pull close tag onto same line as a comment (SpacePossum) -* bug #4350 StrictParamFixer - Don't detect functions in use statements (bolmstedt) -* bug #4357 Fix short list syntax detection. (SpacePossum) -* bug #4365 Fix output escaping of diff for text format when line is not changed (SpacePossum) -* bug #4370 PhpUnitConstructFixer - Fix handle different casing (SpacePossum) -* bug #4379 ExplicitStringVariableFixer - add test case for variable as an array key (kubawerlos, Slamdunk) -* feature #4337 PhpUnitTestCaseStaticMethodCallsFixer - prepare for PHPUnit 8 (kubawerlos) -* minor #3799 DX: php_unit_test_case_static_method_calls - use default config (keradus) -* minor #4103 NoExtraBlankLinesFixer - fix candidate detection (SpacePossum) -* minor #4245 LineEndingFixer - BracesFixer - Priority (dmvdbrugge) -* minor #4325 Use lowercase mikey179/vfsStream in composer.json (lolli42) -* minor #4336 Collect coverage with PCOV (kubawerlos) -* minor #4338 Fix wording (kmvan, kubawerlos) -* minor #4339 Change BracesFixer to avoid indenting PHP inline braces (alecgeatches) -* minor #4340 Travis: build against 7.4snapshot instead of nightly (Slamdunk) -* minor #4351 code grooming (SpacePossum) -* minor #4353 Add more priority tests (SpacePossum) -* minor #4364 DX: MethodChainingIndentationFixer - remove unneccesary loop (Sijun Zhu) -* minor #4366 Unset the auxillary variable $a (GrahamCampbell) -* minor #4368 Fixed TypeShortNameResolverTest::testResolver (GrahamCampbell) -* minor #4380 PHP7.4 - Add "str_split" => "mb_str_split" mapping. (SpacePossum) -* minor #4381 PHP7.4 - Add support for magic methods (un)serialize. (SpacePossum) -* minor #4393 DX: add missing explicit return types (kubawerlos) - -Changelog for v2.14.2 ---------------------- - -* minor #4306 DX: Drop HHVM conflict on Composer level to help Composer with HHVM compatibility, we still prevent HHVM on runtime (keradus) - -Changelog for v2.14.1 ---------------------- - -* bug #4240 ModernizeTypesCastingFixer - fix for operators with higher precedence (kubawerlos) -* bug #4254 PhpUnitDedicateAssertFixer - fix for count with additional operations (kubawerlos) -* bug #4260 Psr0Fixer and Psr4Fixer - fix for multiple classes in file with anonymous class (kubawerlos) -* bug #4262 FixCommand - fix help (keradus) -* bug #4276 MethodChainingIndentationFixer, ArrayIndentationFixer - Fix priority issue (dmvdbrugge) -* bug #4280 MethodArgumentSpaceFixer - Fix method argument alignment (Billz95) -* bug #4286 IncrementStyleFixer - fix for static statement (kubawerlos) -* bug #4291 ArrayIndentationFixer - Fix indentation after trailing spaces (julienfalque, keradus) -* bug #4292 NoSuperfluousPhpdocTagsFixer - Make null only type not considered superfluous (julienfalque) -* minor #4204 DX: Tokens - do not unregister/register found tokens when collection is not changing (kubawerlos) -* minor #4235 DX: more specific @param types (kubawerlos) -* minor #4263 DX: AppVeyor - bump PHP version (keradus) -* minor #4293 Add official support for PHP 7.3 (keradus) -* minor #4295 DX: MethodArgumentSpaceFixerTest - fix edge case for handling different line ending when only expected code is provided (keradus) -* minor #4296 DX: cleanup testing with fixer config (keradus) -* minor #4299 NativeFunctionInvocationFixer - add array_key_exists (deguif, keradus) -* minor #4300 DX: cleanup testing with fixer config (keradus) - -Changelog for v2.14.0 ---------------------- - -* bug #4220 NativeFunctionInvocationFixer - namespaced strict to remove backslash (kubawerlos) -* feature #3881 Add PhpdocVarAnnotationCorrectOrderFixer (kubawerlos) -* feature #3915 Add HeredocIndentationFixer (gharlan) -* feature #4002 NoSuperfluousPhpdocTagsFixer - Allow `mixed` in superfluous PHPDoc by configuration (MortalFlesh) -* feature #4030 Add get_required_files and user_error aliases (ntzm) -* feature #4043 NativeFunctionInvocationFixer - add option to remove redundant backslashes (kubawerlos) -* feature #4102 Add NoUnsetCastFixer (SpacePossum) -* minor #4025 Add phpdoc_types_order rule to Symfony's ruleset (carusogabriel) -* minor #4213 [7.3] PHP7.3 integration tests (SpacePossum) -* minor #4233 Add official support for PHP 7.3 (keradus) - -Changelog for v2.13.3 ---------------------- - -* bug #4216 Psr4Fixer - fix for multiple classy elements in file (keradus, kubawerlos) -* bug #4217 Psr0Fixer - class with anonymous class (kubawerlos) -* bug #4219 NativeFunctionCasingFixer - handle T_RETURN_REF (kubawerlos) -* bug #4224 FunctionToConstantFixer - handle T_RETURN_REF (SpacePossum) -* bug #4229 IsNullFixer - fix parenthesis not closed (guilliamxavier) -* minor #4193 [7.3] CombineNestedDirnameFixer - support PHP 7.3 (kubawerlos) -* minor #4198 [7.3] PowToExponentiationFixer - adding to PHP7.3 integration test (kubawerlos) -* minor #4199 [7.3] MethodChainingIndentationFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4200 [7.3] ModernizeTypesCastingFixer - support PHP 7.3 (kubawerlos) -* minor #4201 [7.3] MultilineWhitespaceBeforeSemicolonsFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4202 [7.3] ErrorSuppressionFixer - support PHP 7.3 (kubawerlos) -* minor #4205 DX: PhpdocAlignFixer - refactor to use DocBlock (kubawerlos) -* minor #4206 DX: enable multiline_whitespace_before_semicolons (keradus) -* minor #4207 [7.3] RandomApiMigrationFixerTest - tests for 7.3 (SpacePossum) -* minor #4208 [7.3] NativeFunctionCasingFixerTest - tests for 7.3 (SpacePossum) -* minor #4209 [7.3] PhpUnitStrictFixerTest - tests for 7.3 (SpacePossum) -* minor #4210 [7.3] PhpUnitConstructFixer - add test for PHP 7.3 (kubawerlos) -* minor #4211 [7.3] PhpUnitDedicateAssertFixer - support PHP 7.3 (kubawerlos) -* minor #4214 [7.3] NoUnsetOnPropertyFixerTest - tests for 7.3 (SpacePossum) -* minor #4222 [7.3] PhpUnitExpectationFixer - support PHP 7.3 (kubawerlos) -* minor #4223 [7.3] PhpUnitMockFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4230 [7.3] IsNullFixer - fix trailing comma (guilliamxavier) -* minor #4232 DX: remove Utils::splitLines (kubawerlos) -* minor #4234 [7.3] Test that "LITERAL instanceof X" is valid (guilliamxavier) - -Changelog for v2.13.2 ---------------------- - -* bug #3968 SelfAccessorFixer - support FQCN (kubawerlos) -* bug #3974 Psr4Fixer - class with anonymous class (kubawerlos) -* bug #3987 Run HeaderCommentFixer after NoBlankLinesAfterPhpdocFixer (StanAngeloff) -* bug #4009 TypeAlternationTransformer - Fix pipes in function call with constants being classified incorrectly (ntzm, SpacePossum) -* bug #4022 NoUnsetOnPropertyFixer - refactor and bugfixes (kubawerlos) -* bug #4036 ExplicitStringVariableFixer - fixes for backticks and for 2 variables next to each other (kubawerlos, Slamdunk) -* bug #4038 CommentToPhpdocFixer - handling nested PHPDoc (kubawerlos) -* bug #4064 Ignore invalid mode strings, add option to remove the "b" flag. (SpacePossum) -* bug #4071 DX: do not insert Token when calling removeLeadingWhitespace/removeTrailingWhitespace from Tokens (kubawerlos) -* bug #4073 IsNullFixer - fix function detection (kubawerlos) -* bug #4074 FileFilterIterator - do not filter out files that need fixing (SpacePossum) -* bug #4076 EregToPregFixer - fix function detection (kubawerlos) -* bug #4084 MethodChainingIndentation - fix priority with Braces (dmvdbrugge) -* bug #4099 HeaderCommentFixer - throw exception on invalid header configuration (SpacePossum) -* bug #4100 PhpdocAddMissingParamAnnotationFixer - Handle variable number of arguments and pass by reference cases (SpacePossum) -* bug #4101 ReturnAssignmentFixer - do not touch invalid code (SpacePossum) -* bug #4104 Change transformers order, fixing untransformed T_USE (dmvdbrugge) -* bug #4107 Preg::split - fix for non-UTF8 subject (ostrolucky, kubawerlos) -* bug #4109 NoBlankLines*: fix removing lines consisting only of spaces (kubawerlos, keradus) -* bug #4114 VisibilityRequiredFixer - don't remove comments (kubawerlos) -* bug #4116 OrderedImportsFixer - fix sorting without any grouping (SpacePossum) -* bug #4119 PhpUnitNoExpectationAnnotationFixer - fix extracting content from annotation (kubawerlos) -* bug #4127 LowercaseConstantsFixer - Fix case with properties using constants as their name (srathbone) -* bug #4134 [7.3] SquareBraceTransformer - nested array destructuring not handled correctly (SpacePossum) -* bug #4153 PhpUnitFqcnAnnotationFixer - handle only PhpUnit classes (kubawerlos) -* bug #4169 DirConstantFixer - Fixes for PHP7.3 syntax (SpacePossum) -* bug #4181 MultilineCommentOpeningClosingFixer - fix handling empty comment (kubawerlos) -* bug #4186 Tokens - fix removal of leading/trailing whitespace with empty token in collection (kubawerlos) -* minor #3436 Add a handful of integration tests (BackEndTea) -* minor #3774 PhpUnitTestClassRequiresCoversFixer - Remove unneeded loop and use phpunit indicator class (BackEndTea, SpacePossum) -* minor #3778 DX: Throw an exception if FileReader::read fails (ntzm) -* minor #3916 New ruleset "@PhpCsFixer" (gharlan) -* minor #4007 Fixes cookbook for fixers (greeflas) -* minor #4031 Correct FixerOptionBuilder::getOption return type (ntzm) -* minor #4046 Token - Added fast isset() path to token->equals() (staabm) -* minor #4047 Token - inline $other->getPrototype() to speedup equals() (staabm, keradus) -* minor #4048 Tokens - inlined extractTokenKind() call on the hot path (staabm) -* minor #4069 DX: Add dev-tools directory to gitattributes as export-ignore (alexmanno) -* minor #4070 Docs: Add link to a VS Code extension in readme (jakebathman) -* minor #4077 DX: cleanup - NoAliasFunctionsFixer - use FunctionsAnalyzer (kubawerlos) -* minor #4088 Add Travis test with strict types (kubawerlos) -* minor #4091 Adjust misleading sentence in CONTRIBUTING.md (ostrolucky) -* minor #4092 UseTransformer - simplify/optimize (SpacePossum) -* minor #4095 DX: Use ::class (keradus) -* minor #4096 DX: fixing typo (kubawerlos) -* minor #4097 DX: namespace casing (kubawerlos) -* minor #4110 Enhancement: Update localheinz/composer-normalize (localheinz) -* minor #4115 Changes for upcoming Travis' infra migration (sergeyklay) -* minor #4122 DX: AppVeyor - Update Composer download link (SpacePossum) -* minor #4128 DX: cleanup - AbstractFunctionReferenceFixer - use FunctionsAnalyzer (SpacePossum, kubawerlos) -* minor #4129 Fix: Symfony 4.2 deprecations (kubawerlos) -* minor #4139 DX: Fix CircleCI (kubawerlos) -* minor #4142 [7.3] NoAliasFunctionsFixer - mbregex_encoding' => 'mb_regex_encoding (SpacePossum) -* minor #4143 PhpUnitTestCaseStaticMethodCallsFixer - Add PHPUnit 7.5 new assertions (Slamdunk) -* minor #4149 [7.3] ArgumentsAnalyzer - PHP7.3 support (SpacePossum) -* minor #4161 DX: CI - show packages installed via Composer (keradus) -* minor #4162 DX: Drop symfony/lts (keradus) -* minor #4166 DX: do not use AbstractFunctionReferenceFixer when no need to (kubawerlos) -* minor #4168 DX: FopenFlagsFixer - remove useless proxy method (SpacePossum) -* minor #4171 Fix CircleCI cache (kubawerlos) -* minor #4173 [7.3] PowToExponentiationFixer - add support for PHP7.3 (SpacePossum) -* minor #4175 Fixing typo (kubawerlos) -* minor #4177 CI: Check that tag is matching version of PHP CS Fixer during deployment (keradus) -* minor #4180 Fixing typo (kubawerlos) -* minor #4182 DX: update php-cs-fixer file style (kubawerlos) -* minor #4185 [7.3] ImplodeCallFixer - add tests for PHP7.3 (kubawerlos) -* minor #4187 [7.3] IsNullFixer - support PHP 7.3 (kubawerlos) -* minor #4188 DX: cleanup (keradus) -* minor #4189 Travis - add PHP 7.3 job (keradus) -* minor #4190 Travis CI - fix config (kubawerlos) -* minor #4192 [7.3] MagicMethodCasingFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4194 [7.3] NativeFunctionInvocationFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4195 [7.3] SetTypeToCastFixer - support PHP 7.3 (kubawerlos) -* minor #4196 Update website (keradus) -* minor #4197 [7.3] StrictParamFixer - support PHP 7.3 (kubawerlos) - -Changelog for v2.13.1 ---------------------- - -* bug #3977 NoSuperfluousPhpdocTagsFixer - Fix handling of description with variable (julienfalque) -* bug #4027 PhpdocAnnotationWithoutDotFixer - add failing cases (keradus) -* bug #4028 PhpdocNoEmptyReturnFixer - handle single line PHPDoc (kubawerlos) -* bug #4034 PhpUnitTestCaseIndicator - handle anonymous class (kubawerlos) -* bug #4037 NativeFunctionInvocationFixer - fix function detection (kubawerlos) -* feature #4019 PhpdocTypesFixer - allow for configuration (keradus) -* minor #3980 Clarifies allow-risky usage (josephzidell) -* minor #4016 Bump console component due to it's bug (keradus) -* minor #4023 Enhancement: Update localheinz/composer-normalize (localheinz) -* minor #4049 use parent::offset*() methods when moving items around in insertAt() (staabm) - -Changelog for v2.13.0 ---------------------- - -* feature #3739 Add MagicMethodCasingFixer (SpacePossum) -* feature #3812 Add FopenFlagOrderFixer & FopenFlagsFixer (SpacePossum) -* feature #3826 Add CombineNestedDirnameFixer (gharlan) -* feature #3833 BinaryOperatorSpacesFixer - Add "no space" fix strategy (SpacePossum) -* feature #3841 NoAliasFunctionsFixer - add opt in option for ext-mbstring aliasses (SpacePossum) -* feature #3876 NativeConstantInvocationFixer - add the scope option (stof, keradus) -* feature #3886 Add PhpUnitMethodCasingFixer (Slamdunk) -* feature #3907 Add ImplodeCallFixer (kubawerlos) -* feature #3914 NoUnreachableDefaultArgumentValueFixer - remove `null` for nullable typehints (gharlan, keradus) -* minor #3813 PhpUnitDedicateAssertFixer - fix "sizeOf" same as "count". (SpacePossum) -* minor #3873 Add the native_function_invocation fixer in the Symfony:risky ruleset (stof) -* minor #3979 DX: enable php_unit_method_casing (keradus) - -Changelog for v2.12.12 ----------------------- - -* bug #4533 Revert PHP7.4 - Add "str_split" => "mb_str_split" mapping (keradus) -* minor #4264 DX: AutoReview - ensure Travis handle all needed PHP versions (keradus) -* minor #4524 MethodArgumentSpaceFixerTest - make explicit configuration to prevent fail on configuration change (keradus) - -Changelog for v2.12.11 ----------------------- - -* bug #4132 BlankLineAfterNamespaceFixer - do not remove indent, handle comments (kubawerlos) -* bug #4384 MethodArgumentSpaceFixer - fix for on_multiline:ensure_fully_multiline with trailing comma in function call (kubawerlos) -* bug #4404 FileLintingIterator - fix current value on end/invalid (SpacePossum) -* bug #4421 FunctionTypehintSpaceFixer - Ensure single space between type declaration and parameter (localheinz) -* bug #4436 MethodArgumentSpaceFixer - handle misplaced ) (keradus) -* bug #4439 NoLeadingImportSlashFixer - Add space if needed (SpacePossum) -* bug #4453 Fix preg_match error on 7.4snapshot (kubawerlos) -* bug #4461 IsNullFixer - fix null coalescing operator handling (linniksa) -* bug #4467 ToolInfo - fix access to reference without checking existence (black-silence) -* bug #4472 Fix non-static closure unbinding this on PHP 7.4 (kelunik) -* minor #3726 Use Box 3 to build the PHAR (theofidry, keradus) -* minor #4412 PHP 7.4 - Tests for support (SpacePossum) -* minor #4431 DX: test that default config is not passed in RuleSet (kubawerlos) -* minor #4433 DX: test to ensure @PHPUnitMigration rule sets are correctly defined (kubawerlos) -* minor #4445 DX: static call of markTestSkippedOrFail (kubawerlos) -* minor #4463 Add apostrophe to possessive "team's" (ChandlerSwift) -* minor #4471 ReadmeCommandTest - use CommandTester (kubawerlos) -* minor #4477 DX: control names of public methods in test's classes (kubawerlos) -* minor #4483 NewWithBracesFixer - Fix object operator and curly brace open cases (SpacePossum) -* minor #4484 fix typos in README (Sven Ludwig) -* minor #4494 DX: Fix shell script syntax in order to fix Travis builds (drupol) -* minor #4516 DX: Lock binary SCA tools versions (keradus) - -Changelog for v2.12.10 ----------------------- - -* bug #4418 PhpUnitNamespacedFixer - properly translate classes which do not follow translation pattern (ktomk) -* bug #4419 PhpUnitTestCaseStaticMethodCallsFixer - skip anonymous classes and lambda (SpacePossum) -* bug #4420 MethodArgumentSpaceFixer - PHP7.3 trailing commas in function calls (SpacePossum) -* minor #4345 Travis: PHP 7.4 isn't allowed to fail anymore (Slamdunk) -* minor #4403 LowercaseStaticReferenceFixer - Fix invalid PHP version in example (HypeMC) -* minor #4425 DX: assertions are static, adjust custom assertions (keradus) -* minor #4426 DX: handle deprecations of symfony/event-dispatcher:4.3 (keradus) -* minor #4427 DX: stop using reserved T_FN in code samples (keradus) - -Changelog for v2.12.9 ---------------------- - -* bug #4298 NoTrailingWhitespaceInCommentFixer - fix for non-Unix line separators (kubawerlos) -* bug #4303 FullyQualifiedStrictTypesFixer - Fix the short type detection when a question mark (nullable) is prefixing it. (drupol) -* bug #4313 SelfAccessorFixer - fix for part qualified class name (kubawerlos, SpacePossum) -* bug #4314 PhpUnitTestCaseStaticMethodCallsFixer - fix for having property with name as method to update (kubawerlos, SpacePossum) -* bug #4327 TokensAnalyzer - add concat operator to list of binary operators (SpacePossum) -* bug #4335 Cache - add indent and line ending to cache signature (dmvdbrugge) -* bug #4344 VoidReturnFixer - handle yield from (SpacePossum) -* bug #4346 BracesFixer - Do not pull close tag onto same line as a comment (SpacePossum) -* bug #4350 StrictParamFixer - Don't detect functions in use statements (bolmstedt) -* bug #4357 Fix short list syntax detection. (SpacePossum) -* bug #4365 Fix output escaping of diff for text format when line is not changed (SpacePossum) -* bug #4370 PhpUnitConstructFixer - Fix handle different casing (SpacePossum) -* bug #4379 ExplicitStringVariableFixer - add test case for variable as an array key (kubawerlos, Slamdunk) -* feature #4337 PhpUnitTestCaseStaticMethodCallsFixer - prepare for PHPUnit 8 (kubawerlos) -* minor #3799 DX: php_unit_test_case_static_method_calls - use default config (keradus) -* minor #4103 NoExtraBlankLinesFixer - fix candidate detection (SpacePossum) -* minor #4245 LineEndingFixer - BracesFixer - Priority (dmvdbrugge) -* minor #4325 Use lowercase mikey179/vfsStream in composer.json (lolli42) -* minor #4336 Collect coverage with PCOV (kubawerlos) -* minor #4338 Fix wording (kmvan, kubawerlos) -* minor #4339 Change BracesFixer to avoid indenting PHP inline braces (alecgeatches) -* minor #4340 Travis: build against 7.4snapshot instead of nightly (Slamdunk) -* minor #4351 code grooming (SpacePossum) -* minor #4353 Add more priority tests (SpacePossum) -* minor #4364 DX: MethodChainingIndentationFixer - remove unneccesary loop (Sijun Zhu) -* minor #4366 Unset the auxillary variable $a (GrahamCampbell) -* minor #4368 Fixed TypeShortNameResolverTest::testResolver (GrahamCampbell) -* minor #4380 PHP7.4 - Add "str_split" => "mb_str_split" mapping. (SpacePossum) -* minor #4393 DX: add missing explicit return types (kubawerlos) - -Changelog for v2.12.8 ---------------------- - -* minor #4306 DX: Drop HHVM conflict on Composer level to help Composer with HHVM compatibility, we still prevent HHVM on runtime (keradus) - -Changelog for v2.12.7 ---------------------- - -* bug #4240 ModernizeTypesCastingFixer - fix for operators with higher precedence (kubawerlos) -* bug #4254 PhpUnitDedicateAssertFixer - fix for count with additional operations (kubawerlos) -* bug #4260 Psr0Fixer and Psr4Fixer - fix for multiple classes in file with anonymous class (kubawerlos) -* bug #4262 FixCommand - fix help (keradus) -* bug #4276 MethodChainingIndentationFixer, ArrayIndentationFixer - Fix priority issue (dmvdbrugge) -* bug #4280 MethodArgumentSpaceFixer - Fix method argument alignment (Billz95) -* bug #4286 IncrementStyleFixer - fix for static statement (kubawerlos) -* bug #4291 ArrayIndentationFixer - Fix indentation after trailing spaces (julienfalque, keradus) -* bug #4292 NoSuperfluousPhpdocTagsFixer - Make null only type not considered superfluous (julienfalque) -* minor #4204 DX: Tokens - do not unregister/register found tokens when collection is not changing (kubawerlos) -* minor #4235 DX: more specific @param types (kubawerlos) -* minor #4263 DX: AppVeyor - bump PHP version (keradus) -* minor #4293 Add official support for PHP 7.3 (keradus) -* minor #4295 DX: MethodArgumentSpaceFixerTest - fix edge case for handling different line ending when only expected code is provided (keradus) -* minor #4296 DX: cleanup testing with fixer config (keradus) -* minor #4299 NativeFunctionInvocationFixer - add array_key_exists (deguif, keradus) - -Changelog for v2.12.6 ---------------------- - -* bug #4216 Psr4Fixer - fix for multiple classy elements in file (keradus, kubawerlos) -* bug #4217 Psr0Fixer - class with anonymous class (kubawerlos) -* bug #4219 NativeFunctionCasingFixer - handle T_RETURN_REF (kubawerlos) -* bug #4224 FunctionToConstantFixer - handle T_RETURN_REF (SpacePossum) -* bug #4229 IsNullFixer - fix parenthesis not closed (guilliamxavier) -* minor #4198 [7.3] PowToExponentiationFixer - adding to PHP7.3 integration test (kubawerlos) -* minor #4199 [7.3] MethodChainingIndentationFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4200 [7.3] ModernizeTypesCastingFixer - support PHP 7.3 (kubawerlos) -* minor #4201 [7.3] MultilineWhitespaceBeforeSemicolonsFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4202 [7.3] ErrorSuppressionFixer - support PHP 7.3 (kubawerlos) -* minor #4205 DX: PhpdocAlignFixer - refactor to use DocBlock (kubawerlos) -* minor #4206 DX: enable multiline_whitespace_before_semicolons (keradus) -* minor #4207 [7.3] RandomApiMigrationFixerTest - tests for 7.3 (SpacePossum) -* minor #4208 [7.3] NativeFunctionCasingFixerTest - tests for 7.3 (SpacePossum) -* minor #4209 [7.3] PhpUnitStrictFixerTest - tests for 7.3 (SpacePossum) -* minor #4210 [7.3] PhpUnitConstructFixer - add test for PHP 7.3 (kubawerlos) -* minor #4211 [7.3] PhpUnitDedicateAssertFixer - support PHP 7.3 (kubawerlos) -* minor #4214 [7.3] NoUnsetOnPropertyFixerTest - tests for 7.3 (SpacePossum) -* minor #4222 [7.3] PhpUnitExpectationFixer - support PHP 7.3 (kubawerlos) -* minor #4223 [7.3] PhpUnitMockFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4230 [7.3] IsNullFixer - fix trailing comma (guilliamxavier) -* minor #4232 DX: remove Utils::splitLines (kubawerlos) -* minor #4234 [7.3] Test that "LITERAL instanceof X" is valid (guilliamxavier) - -Changelog for v2.12.5 ---------------------- - -* bug #3968 SelfAccessorFixer - support FQCN (kubawerlos) -* bug #3974 Psr4Fixer - class with anonymous class (kubawerlos) -* bug #3987 Run HeaderCommentFixer after NoBlankLinesAfterPhpdocFixer (StanAngeloff) -* bug #4009 TypeAlternationTransformer - Fix pipes in function call with constants being classified incorrectly (ntzm, SpacePossum) -* bug #4022 NoUnsetOnPropertyFixer - refactor and bugfixes (kubawerlos) -* bug #4036 ExplicitStringVariableFixer - fixes for backticks and for 2 variables next to each other (kubawerlos, Slamdunk) -* bug #4038 CommentToPhpdocFixer - handling nested PHPDoc (kubawerlos) -* bug #4071 DX: do not insert Token when calling removeLeadingWhitespace/removeTrailingWhitespace from Tokens (kubawerlos) -* bug #4073 IsNullFixer - fix function detection (kubawerlos) -* bug #4074 FileFilterIterator - do not filter out files that need fixing (SpacePossum) -* bug #4076 EregToPregFixer - fix function detection (kubawerlos) -* bug #4084 MethodChainingIndentation - fix priority with Braces (dmvdbrugge) -* bug #4099 HeaderCommentFixer - throw exception on invalid header configuration (SpacePossum) -* bug #4100 PhpdocAddMissingParamAnnotationFixer - Handle variable number of arguments and pass by reference cases (SpacePossum) -* bug #4101 ReturnAssignmentFixer - do not touch invalid code (SpacePossum) -* bug #4104 Change transformers order, fixing untransformed T_USE (dmvdbrugge) -* bug #4107 Preg::split - fix for non-UTF8 subject (ostrolucky, kubawerlos) -* bug #4109 NoBlankLines*: fix removing lines consisting only of spaces (kubawerlos, keradus) -* bug #4114 VisibilityRequiredFixer - don't remove comments (kubawerlos) -* bug #4116 OrderedImportsFixer - fix sorting without any grouping (SpacePossum) -* bug #4119 PhpUnitNoExpectationAnnotationFixer - fix extracting content from annotation (kubawerlos) -* bug #4127 LowercaseConstantsFixer - Fix case with properties using constants as their name (srathbone) -* bug #4134 [7.3] SquareBraceTransformer - nested array destructuring not handled correctly (SpacePossum) -* bug #4153 PhpUnitFqcnAnnotationFixer - handle only PhpUnit classes (kubawerlos) -* bug #4169 DirConstantFixer - Fixes for PHP7.3 syntax (SpacePossum) -* bug #4181 MultilineCommentOpeningClosingFixer - fix handling empty comment (kubawerlos) -* bug #4186 Tokens - fix removal of leading/trailing whitespace with empty token in collection (kubawerlos) -* minor #3436 Add a handful of integration tests (BackEndTea) -* minor #3774 PhpUnitTestClassRequiresCoversFixer - Remove unneeded loop and use phpunit indicator class (BackEndTea, SpacePossum) -* minor #3778 DX: Throw an exception if FileReader::read fails (ntzm) -* minor #3916 New ruleset "@PhpCsFixer" (gharlan) -* minor #4007 Fixes cookbook for fixers (greeflas) -* minor #4031 Correct FixerOptionBuilder::getOption return type (ntzm) -* minor #4046 Token - Added fast isset() path to token->equals() (staabm) -* minor #4047 Token - inline $other->getPrototype() to speedup equals() (staabm, keradus) -* minor #4048 Tokens - inlined extractTokenKind() call on the hot path (staabm) -* minor #4069 DX: Add dev-tools directory to gitattributes as export-ignore (alexmanno) -* minor #4070 Docs: Add link to a VS Code extension in readme (jakebathman) -* minor #4077 DX: cleanup - NoAliasFunctionsFixer - use FunctionsAnalyzer (kubawerlos) -* minor #4088 Add Travis test with strict types (kubawerlos) -* minor #4091 Adjust misleading sentence in CONTRIBUTING.md (ostrolucky) -* minor #4092 UseTransformer - simplify/optimize (SpacePossum) -* minor #4095 DX: Use ::class (keradus) -* minor #4097 DX: namespace casing (kubawerlos) -* minor #4110 Enhancement: Update localheinz/composer-normalize (localheinz) -* minor #4115 Changes for upcoming Travis' infra migration (sergeyklay) -* minor #4122 DX: AppVeyor - Update Composer download link (SpacePossum) -* minor #4128 DX: cleanup - AbstractFunctionReferenceFixer - use FunctionsAnalyzer (SpacePossum, kubawerlos) -* minor #4129 Fix: Symfony 4.2 deprecations (kubawerlos) -* minor #4139 DX: Fix CircleCI (kubawerlos) -* minor #4143 PhpUnitTestCaseStaticMethodCallsFixer - Add PHPUnit 7.5 new assertions (Slamdunk) -* minor #4149 [7.3] ArgumentsAnalyzer - PHP7.3 support (SpacePossum) -* minor #4161 DX: CI - show packages installed via Composer (keradus) -* minor #4162 DX: Drop symfony/lts (keradus) -* minor #4166 DX: do not use AbstractFunctionReferenceFixer when no need to (kubawerlos) -* minor #4171 Fix CircleCI cache (kubawerlos) -* minor #4173 [7.3] PowToExponentiationFixer - add support for PHP7.3 (SpacePossum) -* minor #4175 Fixing typo (kubawerlos) -* minor #4177 CI: Check that tag is matching version of PHP CS Fixer during deployment (keradus) -* minor #4182 DX: update php-cs-fixer file style (kubawerlos) -* minor #4187 [7.3] IsNullFixer - support PHP 7.3 (kubawerlos) -* minor #4188 DX: cleanup (keradus) -* minor #4189 Travis - add PHP 7.3 job (keradus) -* minor #4190 Travis CI - fix config (kubawerlos) -* minor #4194 [7.3] NativeFunctionInvocationFixer - add tests for PHP 7.3 (kubawerlos) -* minor #4195 [7.3] SetTypeToCastFixer - support PHP 7.3 (kubawerlos) -* minor #4196 Update website (keradus) -* minor #4197 [7.3] StrictParamFixer - support PHP 7.3 (kubawerlos) - -Changelog for v2.12.4 ---------------------- - -* bug #3977 NoSuperfluousPhpdocTagsFixer - Fix handling of description with variable (julienfalque) -* bug #4027 PhpdocAnnotationWithoutDotFixer - add failing cases (keradus) -* bug #4028 PhpdocNoEmptyReturnFixer - handle single line PHPDoc (kubawerlos) -* bug #4034 PhpUnitTestCaseIndicator - handle anonymous class (kubawerlos) -* bug #4037 NativeFunctionInvocationFixer - fix function detection (kubawerlos) -* feature #4019 PhpdocTypesFixer - allow for configuration (keradus) -* minor #3980 Clarifies allow-risky usage (josephzidell) -* minor #4016 Bump console component due to it's bug (keradus) -* minor #4023 Enhancement: Update localheinz/composer-normalize (localheinz) -* minor #4049 use parent::offset*() methods when moving items around in insertAt() (staabm) - -Changelog for v2.12.3 ---------------------- - -* bug #3867 PhpdocAnnotationWithoutDotFixer - Handle trailing whitespaces (kubawerlos) -* bug #3884 NoSuperfluousPhpdocTagsFixer - handle null in every position (dmvdbrugge, julienfalque) -* bug #3885 AlignMultilineCommentFixer - ArrayIndentationFixer - Priority (dmvdbrugge) -* bug #3887 ArrayIndentFixer - Don't indent empty lines (dmvdbrugge) -* bug #3888 NoExtraBlankLinesFixer - remove blank lines after open tag (kubawerlos) -* bug #3890 StrictParamFixer - make it case-insensitive (kubawerlos) -* bug #3895 FunctionsAnalyzer - false positive for constant and function definition (kubawerlos) -* bug #3908 StrictParamFixer - fix edge case (kubawerlos) -* bug #3910 FunctionsAnalyzer - fix isGlobalFunctionCall (gharlan) -* bug #3912 FullyQualifiedStrictTypesFixer - NoSuperfluousPhpdocTagsFixer - adjust priority (dmvdbrugge) -* bug #3913 TokensAnalyzer - fix isConstantInvocation (gharlan, keradus) -* bug #3921 TypeAnalysis - Fix iterable not being detected as a reserved type (ntzm) -* bug #3924 FullyQualifiedStrictTypesFixer - space bug (dmvdbrugge) -* bug #3937 LowercaseStaticReferenceFixer - Fix "Parent" word in namespace (kubawerlos) -* bug #3944 ExplicitStringVariableFixer - fix array handling (gharlan) -* bug #3951 NoSuperfluousPhpdocTagsFixer - do not call strtolower with null (SpacePossum) -* bug #3954 NoSuperfluousPhpdocTagsFixer - Index invalid or out of range (kubawerlos) -* bug #3957 NoTrailingWhitespaceFixer - trim space after opening tag (kubawerlos) -* minor #3798 DX: enable native_function_invocation (keradus) -* minor #3882 PhpdocAnnotationWithoutDotFixer - Handle empty line in comment (kubawerlos) -* minor #3889 DX: Cleanup - remove unused variables (kubawerlos, SpacePossum) -* minor #3891 PhpdocNoEmptyReturnFixer - account for null[] (dmvdbrugge) -* minor #3892 PhpdocNoEmptyReturnFixer - fix docs (keradus) -* minor #3897 DX: FunctionsAnalyzer - simplifying return expression (kubawerlos) -* minor #3903 DX: cleanup - remove special treatment for PHP <5.6 (kubawerlos) -* minor #3905 DX: Upgrade composer-require-checker to stable version (keradus) -* minor #3919 Simplify single uses of Token::isGivenKind (ntzm) -* minor #3920 Docs: Fix typo (ntzm) -* minor #3940 DX: fix phpdoc parameter type (malukenho) -* minor #3948 DX: cleanup - remove redundant @param annotations (kubawerlos) -* minor #3950 Circle CI v2 yml (siad007) -* minor #3952 DX: AbstractFixerTestCase - drop testing method already provided by trait (keradus) -* minor #3973 Bump xdebug-handler (keradus) - -Changelog for v2.12.2 ---------------------- - -* bug #3823 NativeConstantInvocationFixer - better constant detection (gharlan, SpacePossum, keradus) -* bug #3832 "yield from" as keyword (SpacePossum) -* bug #3835 Fix priority between PHPDoc return type fixers (julienfalque, keradus) -* bug #3839 MethodArgumentSpaceFixer - add empty line incorrectly (SpacePossum) -* bug #3866 SpaceAfterSemicolonFixer - loop over all tokens (SpacePossum) -* minor #3817 Update integrations tests (SpacePossum) -* minor #3829 Fix typos in changelog (mnabialek) -* minor #3848 Add install/update instructions for PHIVE to the README (SpacePossum) -* minor #3877 NamespacesAnalyzer - Optimize performance (stof) -* minor #3878 NativeFunctionInvocationFixer - use the NamespacesAnalyzer to remove duplicated code (stof) - -Changelog for v2.12.1 ---------------------- - -* bug #3808 LowercaseStaticReferenceFixer - Fix constants handling (kubawerlos, keradus) -* bug #3815 NoSuperfluousPhpdocTagsFixer - support array/callable type hints (gharlan) -* minor #3824 DX: Support PHPUnit 7.2 (keradus) -* minor #3825 UX: Provide full diff for code samples (keradus) - -Changelog for v2.12.0 ---------------------- - -* feature #2577 Add LogicalOperatorsFixer (hkdobrev, keradus) -* feature #3060 Add ErrorSuppressionFixer (kubawerlos) -* feature #3127 Add NativeConstantInvocationFixer (Slamdunk, keradus) -* feature #3223 NativeFunctionInvocationFixer - add namespace scope and include sets (SpacePossum) -* feature #3453 PhpdocAlignFixer - add align option (robert.ahmerov) -* feature #3476 Add PhpUnitTestCaseStaticMethodCallsFixer (Slamdunk, keradus) -* feature #3524 MethodArgumentSpaceFixer - Add ensure_single_line option (julienfalque, keradus) -* feature #3534 MultilineWhitespaceBeforeSemicolonsFixer - support static calls (ntzm) -* feature #3585 Add ReturnAssignmentFixer (SpacePossum, keradus) -* feature #3640 Add PhpdocToReturnTypeFixer (Slamdunk, keradus) -* feature #3691 Add PhpdocTrimAfterDescriptionFixer (nobuf, keradus) -* feature #3698 YodaStyleFixer - Add always_move_variable option (julienfalque, SpacePossum) -* feature #3709 Add SetTypeToCastFixer (SpacePossum) -* feature #3724 BlankLineBeforeStatementFixer - Add case and default as options (dmvdbrugge) -* feature #3734 Add NoSuperfluousPhpdocTagsFixer (julienfalque) -* feature #3735 Add LowercaseStaticReferenceFixer (kubawerlos, SpacePossum) -* feature #3737 Add NoUnsetOnPropertyFixer (BackEndTea, SpacePossum) -* feature #3745 Add PhpUnitInternalClassFixer (BackEndTea, SpacePossum, keradus) -* feature #3766 Add NoBinaryStringFixer (ntzm, SpacePossum, keradus) -* feature #3780 ShortScalarCastFixer - Change binary cast to string cast as well (ntzm) -* feature #3785 PhpUnitDedicateAssertFixer - fix to assertCount too (SpacePossum) -* feature #3802 Convert PhpdocTrimAfterDescriptionFixer into PhpdocTrimConsecutiveBlankLineSeparationFixer (keradus) -* minor #3738 ReturnAssignmentFixer description update (kubawerlos) -* minor #3761 Application: when run with FUTURE_MODE, error_reporting(-1) is done in entry file instead (keradus) -* minor #3772 DX: use PhpUnitTestCaseIndicator->isPhpUnitClass to discover PHPUnit classes (keradus) -* minor #3783 CI: Split COLLECT_COVERAGE job (keradus) -* minor #3789 DX: ProjectCodeTest.testThatDataProvidersAreCorrectlyNamed - performance optimization (keradus) -* minor #3791 DX: Fix collecting code coverage (keradus) -* minor #3792 DX: Upgrade DX deps (keradus) -* minor #3797 DX: ProjectCodeTest - shall not depends on xdebug/phpdbg anymore (keradus, SpacePossum) -* minor #3800 Symfony:risky ruleset: include set_type_to_cast rule (keradus) -* minor #3801 NativeFunctionInvocationFixer - fix buggy config validation (keradus, SpacePossum) - -Changelog for v2.11.2 ---------------------- - -* bug #3233 PhpdocAlignFixer - Fix linebreak inconsistency (SpacePossum, keradus) -* bug #3445 Rewrite NoUnusedImportsFixer (kubawerlos, julienfalque) -* bug #3528 MethodChainingIndentationFixer - nested params bugfix (Slamdunk) -* bug #3547 MultilineWhitespaceBeforeSemicolonsFixer - chained call for a return fix (egircys, keradus) -* bug #3597 DeclareStrictTypesFixer - fix bug of removing line (kubawerlos, keradus) -* bug #3605 DoctrineAnnotationIndentationFixer - Fix indentation with mixed lines (julienfalque) -* bug #3606 PhpdocToCommentFixer - allow multiple ( (SpacePossum) -* bug #3614 Refactor PhpdocToCommentFixer - extract checking to CommentsAnalyzer (kubawerlos) -* bug #3668 Rewrite NoUnusedImportsFixer (kubawerlos, julienfalque) -* bug #3670 PhpdocTypesOrderFixer - Fix ordering of nested generics (julienfalque) -* bug #3671 ArrayIndentationFixer - Fix indentation in HTML (julienfalque) -* bug #3673 PhpdocScalarFixer - Add "types" option (julienfalque, keradus) -* bug #3674 YodaStyleFixer - Fix variable detection for multidimensional arrays (julienfalque, SpacePossum) -* bug #3684 PhpUnitStrictFixer - Do not fix if not correct # of arguments are used (SpacePossum) -* bug #3708 EspaceImplicitBackslashesFixer - Fix escaping multiple backslashes (julienfalque) -* bug #3715 SingleImportPerStatementFixer - Fix handling whitespace before opening brace (julienfalque) -* bug #3731 PhpdocIndentFixer - crash fix (SpacePossum) -* bug #3755 YodaStyleFixer - handle space between var name and index (SpacePossum) -* bug #3765 Fix binary-prefixed double-quoted strings to single quotes (ntzm) -* bug #3770 Handle binary flags in heredoc_to_nowdoc (ntzm) -* bug #3776 ExplicitStringVariableFixer - handle binary strings (ntzm) -* bug #3777 EscapeImplicitBackslashesFixer - handle binary strings (ntzm) -* bug #3790 ProcessLinter - don't execute external process without timeout! It can freeze! (keradus) -* minor #3188 AppVeyor - add PHP 7.x (keradus, julienfalque) -* minor #3451 Update findPHPUnit functions (BackEndTea, SpacePossum, keradus) -* minor #3548 Make shell scripts POSIX-compatible (EvgenyOrekhov, keradus) -* minor #3568 New Autoreview: Correct option casing (ntzm) -* minor #3578 Add interface for deprecated options (julienfalque, keradus) -* minor #3590 Use XdebugHandler to avoid perormance penalty (AJenbo, keradus) -* minor #3607 PhpdocVarWithoutNameFixer - update sample with @ type (SpacePossum) -* minor #3617 Tests stability patches (Tom Klingenberg, keradus) -* minor #3622 Docs: Update descriptions (localheinz) -* minor #3627 Fix tests execution under phpdbg (keradus) -* minor #3629 ProjectFixerConfigurationTest - test rules are sorted (SpacePossum) -* minor #3639 DX: use benefits of symfony/force-lowest (keradus) -* minor #3641 Update check_trailing_spaces script with upstream (keradus) -* minor #3646 Extract SameStringsConstraint and XmlMatchesXsdConstraint (keradus) -* minor #3647 DX: Add CachingLinter for tests (keradus) -* minor #3649 Update check_trailing_spaces script with upstream (keradus) -* minor #3652 CiIntegrationTest - run tests with POSIX sh, not Bash (keradus) -* minor #3656 DX: Clean ups (SpacePossum) -* minor #3657 update phpunitgoodpractices/traits (SpacePossum, keradus) -* minor #3658 DX: Clean ups (SpacePossum) -* minor #3660 Fix do not rely on order of fixing in CiIntegrationTest (kubawerlos) -* minor #3661 Fix: covers annotation for NoAlternativeSyntaxFixerTest (kubawerlos) -* minor #3662 DX: Add Smoke/InstallViaComposerTest (keradus) -* minor #3663 DX: During deployment, run all smoke tests and don't allow to skip phar-related ones (keradus) -* minor #3665 CircleCI fix (kubawerlos) -* minor #3666 Use "set -eu" in shell scripts (EvgenyOrekhov) -* minor #3669 Document possible values for subset options (julienfalque, keradus) -* minor #3672 Remove SameStringsConstraint and XmlMatchesXsdConstraint (keradus) -* minor #3676 RunnerTest - workaround for failing Symfony v2.8.37 (kubawerlos) -* minor #3680 DX: Tokens - removeLeadingWhitespace and removeTrailingWhitespace must act in same way (SpacePossum) -* minor #3686 README.rst - Format all code-like strings in fixer descriptions (ntzm, keradus) -* minor #3692 DX: Optimize tests (julienfalque) -* minor #3700 README.rst - Format all code-like strings in fixer description (ntzm) -* minor #3701 Use correct casing for "PHPDoc" (ntzm) -* minor #3703 DX: InstallViaComposerTest - groom naming (keradus) -* minor #3704 DX: Tokens - fix naming (keradus) -* minor #3706 Update homebrew installation instructions (ntzm) -* minor #3713 Use HTTPS whenever possible (fabpot) -* minor #3723 Extend tests coverage (ntzm) -* minor #3733 Disable Composer optimized autoloader by default (julienfalque) -* minor #3748 PhpUnitStrictFixer - extend risky note (jnvsor) -* minor #3749 Make sure PHPUnit is cased correctly in fixers descriptions (kubawerlos) -* minor #3768 Improve deprecation messages (julienfalque, SpacePossum) -* minor #3773 AbstractFixerWithAliasedOptionsTestCase - don't export (keradus) -* minor #3775 Add tests for binary strings in string_line_ending (ntzm) -* minor #3779 Misc fixes (ntzm, keradus) -* minor #3796 DX: StdinTest - do not assume name of folder, into which project was cloned (keradus) -* minor #3803 NoEmptyPhpdocFixer/PhpdocAddMissingParamAnnotationFixer - missing priority test (SpacePossum, keradus) -* minor #3804 Cleanup: remove useless constructor comment (kubawerlos) -* minor #3805 Cleanup: add missing @param type (kubawerlos, keradus) - -Changelog for v2.11.1 ---------------------- - -* bug #3626 ArrayIndentationFixer: priority bug with BinaryOperatorSpacesFixer and MethodChainingIndentationFixer (Slamdunk) -* bug #3632 DateTimeImmutableFixer bug with adding tokens while iterating over them (kubawerlos) -* minor #3478 PhpUnitDedicateAssertFixer: handle static calls (Slamdunk) -* minor #3618 DateTimeImmutableFixer - grooming (keradus) - -Changelog for v2.11.0 ---------------------- - -* feature #3135 Add ArrayIndentationFixer (julienfalque) -* feature #3235 Implement StandardizeIncrementFixer (ntzm, SpacePossum) -* feature #3260 Add DateTimeImmutableFixer (kubawerlos) -* feature #3276 Transform Fully Qualified parameters and return types to short version (veewee, keradus) -* feature #3299 SingleQuoteFixer - fix single quote char (Slamdunk) -* feature #3340 Verbose LintingException after fixing (Slamdunk) -* feature #3423 FunctionToConstantFixer - add fix "get_called_class" option (SpacePossum) -* feature #3434 Add PhpUnitSetUpTearDownVisibilityFixer (BackEndTea, SpacePossum) -* feature #3442 Add CommentToPhpdocFixer (kubawerlos, keradus) -* feature #3448 OrderedClassElementsFixer - added sortAlgorithm option (meridius) -* feature #3454 Add StringLineEndingFixer (iluuu1994, SpacePossum, keradus, julienfalque) -* feature #3477 PhpUnitStrictFixer: handle static calls (Slamdunk) -* feature #3479 PhpUnitConstructFixer: handle static calls (Slamdunk) -* feature #3507 Add PhpUnitOrderedCoversFixer (Slamdunk) -* feature #3545 Add the 'none' sort algorithm to OrderedImportsFixer (EvgenyOrekhov) -* feature #3588 Add NoAlternativeSyntaxFixer (eddmash, keradus) -* minor #3414 DescribeCommand: add fixer class when verbose (Slamdunk) -* minor #3432 ConfigurationDefinitionFixerInterface - fix deprecation notice (keradus) -* minor #3527 Deprecate last param of Tokens::findBlockEnd (ntzm, keradus) -* minor #3539 Update UnifiedDiffOutputBuilder from gecko-packages/gecko-diff-output-builder usage after it was incorporated into sebastian/diff (keradus) -* minor #3549 DescribeCommand - use our Differ wrapper class, not external one directly (keradus) -* minor #3592 Support PHPUnit 7 (keradus) -* minor #3619 Travis - extend additional files list (keradus) - -Changelog for v2.10.5 ---------------------- - -* bug #3344 Fix method chaining indentation in HTML (julienfalque) -* bug #3594 ElseifFixer - Bug with alternative syntax (kubawerlos) -* bug #3600 StrictParamFixer - Fix issue when functions are imported (ntzm, keradus) -* minor #3589 FixerFactoryTest - add missing test (SpacePossum, keradus) -* minor #3610 make phar extension optional (Tom Klingenberg, keradus) -* minor #3612 Travis - allow for hhvm failures (keradus) -* minor #3615 Detect fabbot.io (julienfalque, keradus) -* minor #3616 FixerFactoryTest - Don't rely on autovivification (keradus) -* minor #3621 FixerFactoryTest - apply CS (keradus) - -Changelog for v2.10.4 ---------------------- - -* bug #3446 Add PregWrapper (kubawerlos) -* bug #3464 IncludeFixer - fix incorrect order of fixing (kubawerlos, SpacePossum) -* bug #3496 Bug in Tokens::removeLeadingWhitespace (kubawerlos, SpacePossum, keradus) -* bug #3557 AbstractDoctrineAnnotationFixer: edge case bugfix (Slamdunk) -* bug #3574 GeneralPhpdocAnnotationRemoveFixer - remove PHPDoc if no content is left (SpacePossum) -* minor #3563 DX add missing covers annotations (keradus) -* minor #3564 Use ::class keyword when possible (keradus) -* minor #3565 Use EventDispatcherInterface instead of EventDispatcher when possible (keradus) -* minor #3566 Update PHPUnitGoodPractices\Traits (keradus) -* minor #3572 DX: allow for more phpunit-speedtrap versions to support more PHPUnit versions (keradus) -* minor #3576 Fix Doctrine Annotation test cases merging (julienfalque) -* minor #3577 DoctrineAnnotationArrayAssignmentFixer - Add test case (julienfalque) - -Changelog for v2.10.3 ---------------------- - -* bug #3504 NoBlankLinesAfterPhpdocFixer - allow blank line before declare statement (julienfalque) -* bug #3522 Remove LOCK_EX (SpacePossum) -* bug #3560 SelfAccessorFixer is risky (Slamdunk) -* minor #3435 Add tests for general_phpdoc_annotation_remove (BackEndTea) -* minor #3484 Create Tokens::findBlockStart (ntzm) -* minor #3512 Add missing array typehints (ntzm) -* minor #3513 Making AppVeyor happy (kubawerlos) -* minor #3516 Use null|type instead of ?type in PHPDocs (ntzm) -* minor #3518 FixerFactoryTest - Test each priority test file is listed as test (SpacePossum) -* minor #3519 Fix typo (SpacePossum) -* minor #3520 Fix typos: ran vs. run (SpacePossum) -* minor #3521 Use HTTPS (carusogabriel) -* minor #3526 Remove gecko dependency (SpacePossum, keradus, julienfalque) -* minor #3531 Backport PHPMD to LTS version to ease maintainability (keradus) -* minor #3532 Implement Tokens::findOppositeBlockEdge (ntzm) -* minor #3533 DX: SCA - drop src/Resources exclusion (keradus) -* minor #3538 Don't use third parameter of Tokens::findBlockStart (ntzm) -* minor #3542 Enhancement: Run composer-normalize on Travis CI (localheinz, keradus) -* minor #3550 AutoReview\FixerFactoryTest - fix missing priority test, mark not fully valid test as incomplete (keradus) -* minor #3555 DX: composer.json - drop branch-alias, branch is already following the version (keradus) -* minor #3556 DX: Add AutoReview/ComposerTest (keradus) -* minor #3559 Don't expose new files under Test namespace (keradus) -* minor #3561 PHPUnit5 - add in place missing compat layer for PHPUnit6 (keradus) - -Changelog for v2.10.2 ---------------------- - -* bug #3502 Fix missing file in export (keradus) - -Changelog for v2.10.1 ---------------------- - -* bug #3265 YodaFixer - fix problems of block statements followed by ternary statements (weareoutman, keradus, SpacePossum) -* bug #3367 NoUnusedImportsFixer - fix comment handling (SpacePossum, keradus) -* bug #3438 PhpUnitTestAnnotationFixer: Do not prepend with test if method is test() (localheinz, SpacePossum) -* bug #3455 NoEmptyCommentFixer - comment block detection for line ending different than LF (kubawerlos, SpacePossum) -* bug #3458 SilencedDeprecationErrorFixer - fix edge cases (kubawerlos) -* bug #3466 no_whitespace_in_blank_line and no_blank_lines_after_phpdoc fixers bug (kubawerlos, keradus) -* bug #3472 YodaStyleFixer - do not un-Yoda if right side is assignment (SpacePossum, keradus) -* bug #3492 PhpdocScalarFixer - Add callback pesudo-type to callable type (carusogabriel) -* minor #3354 Added missing types to the PhpdocTypesFixer (GrahamCampbell) -* minor #3406 Fix for escaping in README (kubawerlos) -* minor #3430 Fix integration test (SpacePossum) -* minor #3431 Add missing tests (SpacePossum) -* minor #3440 Add a handful of integration tests (BackEndTea) -* minor #3443 ConfigurableFixerInterface - not deprecated but TODO (SpacePossum) -* minor #3444 IntegrationTest - ensure tests in priority dir are priority tests indeed (keradus) -* minor #3494 Add missing PHPDoc param type (ntzm) -* minor #3495 Swap @var type and element (ntzm) -* minor #3498 NoUnusedImportsFixer - fix deprecation (keradus) - -Changelog for v2.10.0 ---------------------- - -* feature #3290 Add PhpdocOpeningClosingFixer (Slamdunk, keradus) -* feature #3327 Add MultilineWhitespaceBeforeSemicolonsFixer (egircys, keradus) -* feature #3351 PhuUnit: migrate getMock to createPartialMock when arguments count is 2 (Slamdunk) -* feature #3362 Add BacktickToShellExecFixer (Slamdunk) -* minor #3285 PHPUnit - use protective traits (keradus) -* minor #3329 ConfigurationResolver - detect deprecated fixers (keradus, SpacePossum) -* minor #3343 Tokens - improve block end lookup (keradus) -* minor #3360 Adjust Symfony ruleset (keradus) -* minor #3361 no_extra_consecutive_blank_lines - rename to no_extra_blank_lines (with BC layer) (keradus) -* minor #3363 progress-type - name main option value 'dots' (keradus) -* minor #3404 Deprecate "use_yoda_style" in IsNullFixer (kubawerlos, keradus) -* minor #3418 ConfigurableFixerInterface, ConfigurationDefinitionFixerInterface - update deprecations (keradus) -* minor #3419 Dont use deprecated fixer in itest (keradus) - -Changelog for v2.9.3 --------------------- - -* bug #3502 Fix missing file in export (keradus) - -Changelog for v2.9.2 --------------------- - -* bug #3265 YodaFixer - fix problems of block statements followed by ternary statements (weareoutman, keradus, SpacePossum) -* bug #3367 NoUnusedImportsFixer - fix comment handling (SpacePossum, keradus) -* bug #3438 PhpUnitTestAnnotationFixer: Do not prepend with test if method is test() (localheinz, SpacePossum) -* bug #3455 NoEmptyCommentFixer - comment block detection for line ending different than LF (kubawerlos, SpacePossum) -* bug #3458 SilencedDeprecationErrorFixer - fix edge cases (kubawerlos) -* bug #3466 no_whitespace_in_blank_line and no_blank_lines_after_phpdoc fixers bug (kubawerlos, keradus) -* bug #3472 YodaStyleFixer - do not un-Yoda if right side is assignment (SpacePossum, keradus) -* minor #3354 Added missing types to the PhpdocTypesFixer (GrahamCampbell) -* minor #3406 Fix for escaping in README (kubawerlos) -* minor #3430 Fix integration test (SpacePossum) -* minor #3431 Add missing tests (SpacePossum) -* minor #3440 Add a handful of integration tests (BackEndTea) -* minor #3444 IntegrationTest - ensure tests in priority dir are priority tests indeed (keradus) -* minor #3494 Add missing PHPDoc param type (ntzm) -* minor #3495 Swap @var type and element (ntzm) -* minor #3498 NoUnusedImportsFixer - fix deprecation (keradus) - -Changelog for v2.9.1 --------------------- - -* bug #3298 DiffConsoleFormatter - fix output escaping. (SpacePossum) -* bug #3312 PhpUnitTestAnnotationFixer: Only remove prefix if it really is a prefix (localheinz) -* bug #3318 SingleLineCommentStyleFixer - fix closing tag inside comment causes an error (kubawerlos) -* bug #3334 ExplicitStringVariableFixer: handle parsed array and object (Slamdunk) -* bug #3337 BracesFixer: nowdoc bug on template files (Slamdunk) -* bug #3349 Fix stdin handling and add tests for it (keradus) -* bug #3350 PhpUnitNoExpectationAnnotationFixer - fix handling of multiline expectedExceptionMessage annotation (Slamdunk) -* bug #3352 FunctionToConstantFixer - bugfix for get_class with leading backslash (kubawerlos) -* bug #3359 BracesFixer - handle comment for content outside of given block (keradus) -* bug #3371 IsNullFixer must be run before YodaStyleFixer (kubawerlos) -* bug #3373 PhpdocAlignFixer - Fix removing of everything after @ when there is a space after the @ (ntzm) -* bug #3415 FileFilterIterator - input checks and utests (SpacePossum, keradus) -* bug #3420 SingleLineCommentStyleFixer - fix 'strpos() expects parameter 1 to be string, boolean given' (keradus, SpacePossum) -* bug #3428 Fix archive analysing (keradus) -* bug #3429 Fix archive analysing (keradus) -* minor #3137 PHPUnit - use common base class (keradus) -* minor #3311 FinalInternalClassFixer - fix typo (localheinz) -* minor #3328 Remove duplicated space in exceptions (keradus) -* minor #3342 PhpUnitDedicateAssertFixer - Remove unexistent method is_boolean (carusogabriel) -* minor #3345 StdinFileInfo - fix __toString (keradus) -* minor #3346 StdinFileInfo - drop getContents (keradus) -* minor #3347 DX: reapply newest CS (keradus) -* minor #3365 COOKBOOK-FIXERS.md - update to provide definition instead of description (keradus) -* minor #3370 AbstractFixer - FQCN in in exceptions (Slamdunk) -* minor #3372 ProjectCodeTest - fix comment (keradus) -* minor #3393 Method call typos (Slamdunk, keradus) -* minor #3402 Always provide delimiter to `preg_quote` calls (ntzm) -* minor #3403 Remove unused import (ntzm) -* minor #3405 Fix `fopen` mode (ntzm) -* minor #3407 CombineConsecutiveIssetsFixer - Improve description (kubawerlos) -* minor #3408 Improving fixers descriptions (kubawerlos) -* minor #3409 move itests from misc to priority (keradus) -* minor #3411 Better type hinting for AbstractFixerTestCase::$fixer (kubawerlos) -* minor #3412 Convert `strtolower` inside `strpos` to just `stripos` (ntzm) -* minor #3421 DX: Use ::class (keradus) -* minor #3424 AbstractFixerTest: fix expectException arguments (Slamdunk, keradus) -* minor #3425 FixerFactoryTest - test that priority pair fixers have itest (keradus, SpacePossum) -* minor #3427 ConfigurationResolver: fix @return annotation (Slamdunk) - -Changelog for v2.9.0 --------------------- - -* feature #3063 Method chaining indentation fixer (boliev, julienfalque) -* feature #3076 Add ExplicitStringVariableFixer (Slamdunk, keradus) -* feature #3098 MethodSeparationFixer - add class elements separation options (SpacePossum, keradus) -* feature #3155 Add EscapeImplicitBackslashesFixer (Slamdunk) -* feature #3164 Add ExplicitIndirectVariableFixer (Slamdunk, keradus) -* feature #3183 FinalInternalClassFixer introduction (keradus, SpacePossum) -* feature #3187 StaticLambdaFixer - introduction (SpacePossum, keradus) -* feature #3209 PhpdocAlignFixer - Make @method alignable (ntzm) -* feature #3275 Add PhpUnitTestAnnotationFixer (BackEndTea, keradus) - -Changelog for v2.8.4 --------------------- - -* bug #3281 SelfAccessorFixer - stop modifying traits (kubawerlos) -* minor #3195 Add self-update command test (julienfalque) -* minor #3287 FileCacheManagerTest - drop duplicated line (keradus) -* minor #3292 PHPUnit - set memory limit (veewee) -* minor #3306 Token - better input validation (keradus) -* minor #3310 Upgrade PHP Coveralls (keradus) - -Changelog for v2.8.3 --------------------- - -* bug #3173 SimplifiedNullReturnFixer - handle nullable return types (Slamdunk) -* bug #3268 PhpUnitNoExpectationAnnotationFixer - add case with backslashes (keradus, Slamdunk) -* bug #3272 PhpdocTrimFixer - unicode support (SpacePossum) - -Changelog for v2.8.2 --------------------- - -* bug #3225 PhpdocTrimFixer - Fix handling of lines without leading asterisk (julienfalque) -* bug #3241 NoExtraConsecutiveBlankLinesFixer - do not crash on ^M LF only (SpacePossum) -* bug #3242 PhpUnitNoExpectationAnnotationFixer - fix ' handling (keradus) -* bug #3243 PhpUnitExpectationFixer - don't create ->expectExceptionMessage(null) (keradus) -* bug #3244 PhpUnitNoExpectationAnnotationFixer - expectation extracted from annotation shall be separated from rest of code with one blank line (keradus) -* bug #3259 PhpUnitNamespacedFixer - fix isCandidate to not rely on class declaration (keradus) -* bug #3261 PhpUnitNamespacedFixer - properly fix next usage of already fixed class (keradus) -* bug #3262 ToolInfo - support installation by branch as well (keradus) -* bug #3263 NoBreakCommentFixer - Fix handling comment text with PCRE characters (julienfalque) -* bug #3266 PhpUnitConstructFixer - multiple asserts bug (kubawerlos) -* minor #3239 Improve contributing guide and issue template (julienfalque) -* minor #3246 Make ToolInfo methods non-static (julienfalque) -* minor #3249 PhpUnitNoExpectationAnnotationFixerTest - fix hidden conflict (keradus) -* minor #3250 Travis: fail early, spare resources, save the Earth (Slamdunk, keradus) -* minor #3251 Create Title for config file docs section (IanEdington) -* minor #3254 AutoReview/FixerFactoryTest::testFixersPriority: verbose assertion message (Slamdunk) -* minor #3255 IntegrationTest: output exception stack trace (Slamdunk) -* minor #3257 README.rst - Fixed bullet list formatting (moebrowne) - -Changelog for v2.8.1 --------------------- - -* bug #3199 TokensAnalyzer - getClassyElements (SpacePossum) -* bug #3208 BracesFixer - Fix for instantiation in control structures (julienfalque, SpacePossum) -* bug #3215 BinaryOperatorSpacesFixer - Fix spaces around multiple exception catching (|) (ntzm) -* bug #3216 AbstractLinesBeforeNamespaceFixer - add min. and max. option, not only single target count (SpacePossum) -* bug #3217 TokenizerLinter - fix lack of linting when code is cached (SpacePossum, keradus) -* minor #3200 Skip slow test when Xdebug is loaded (julienfalque) -* minor #3211 Use udiff format in CI (julienfalque) -* minor #3212 Handle rulesets unknown to fabbot.io (julienfalque) -* minor #3219 Normalise references to GitHub in docs (ntzm) -* minor #3226 Remove unused imports (ntzm) -* minor #3231 Fix typos (ntzm) -* minor #3234 Simplify Cache\Signature::equals (ntzm) -* minor #3237 UnconfigurableFixer - use only LF (keradus) -* minor #3238 AbstractFixerTest - fix @cover annotation (keradus) - -Changelog for v2.8.0 --------------------- - -* feature #3065 Add IncrementStyleFixer (kubawerlos) -* feature #3119 Feature checkstyle reporter (K-Phoen) -* feature #3162 Add udiff as diff format (SpacePossum, keradus) -* feature #3170 Add CompactNullableTypehintFixer (jfcherng) -* feature #3189 Add PHP_CS_FIXER_FUTURE_MODE env (keradus) -* feature #3201 Add PHPUnit Migration rulesets and fixers (keradus) -* minor #3149 AbstractProxyFixer - Support multiple proxied fixers (julienfalque) -* minor #3160 Add DeprecatedFixerInterface (kubawerlos) -* minor #3185 IndentationTypeFixerTest - clean up (SpacePossum, keradus) -* minor #3198 Cleanup: add test that there is no deprecated fixer in rule set (kubawerlos) - -Changelog for v2.7.5 --------------------- - -* bug #3225 PhpdocTrimFixer - Fix handling of lines without leading asterisk (julienfalque) -* bug #3241 NoExtraConsecutiveBlankLinesFixer - do not crash on ^M LF only (SpacePossum) -* bug #3262 ToolInfo - support installation by branch as well (keradus) -* bug #3263 NoBreakCommentFixer - Fix handling comment text with PCRE characters (julienfalque) -* bug #3266 PhpUnitConstructFixer - multiple asserts bug (kubawerlos) -* minor #3239 Improve contributing guide and issue template (julienfalque) -* minor #3246 Make ToolInfo methods non-static (julienfalque) -* minor #3250 Travis: fail early, spare resources, save the Earth (Slamdunk, keradus) -* minor #3251 Create Title for config file docs section (IanEdington) -* minor #3254 AutoReview/FixerFactoryTest::testFixersPriority: verbose assertion message (Slamdunk) -* minor #3255 IntegrationTest: output exception stack trace (Slamdunk) - -Changelog for v2.7.4 --------------------- - -* bug #3199 TokensAnalyzer - getClassyElements (SpacePossum) -* bug #3208 BracesFixer - Fix for instantiation in control structures (julienfalque, SpacePossum) -* bug #3215 BinaryOperatorSpacesFixer - Fix spaces around multiple exception catching (|) (ntzm) -* bug #3216 AbstractLinesBeforeNamespaceFixer - add min. and max. option, not only single target count (SpacePossum) -* bug #3217 TokenizerLinter - fix lack of linting when code is cached (SpacePossum, keradus) -* minor #3200 Skip slow test when Xdebug is loaded (julienfalque) -* minor #3219 Normalise references to GitHub in docs (ntzm) -* minor #3226 Remove unused imports (ntzm) -* minor #3231 Fix typos (ntzm) -* minor #3234 Simplify Cache\Signature::equals (ntzm) -* minor #3237 UnconfigurableFixer - use only LF (keradus) -* minor #3238 AbstractFixerTest - fix @cover annotation (keradus) - -Changelog for v2.7.3 --------------------- - -* bug #3114 SelfAccessorFixer - Fix type declarations replacement (julienfalque) - -Changelog for v2.7.2 --------------------- - -* bug #3062 BraceClassInstantiationTransformer - Fix instantiation inside method call braces case (julienfalque, keradus) -* bug #3083 SingleBlankLineBeforeNamespaceFixer - Fix handling namespace right after opening tag (mlocati) -* bug #3109 SwitchCaseSemicolonToColonFixer - Fix bug with nested constructs (SpacePossum) -* bug #3117 Multibyte character in array key makes alignment incorect (kubawerlos) -* bug #3123 Cache - File permissions (SpacePossum) -* bug #3138 NoHomoglyphNamesFixer - fix crash on non-ascii but not mapped either (SpacePossum) -* bug #3172 IndentationTypeFixer - do not touch whitespace that is not indentation (SpacePossum) -* bug #3176 NoMultilineWhitespaceBeforeSemicolonsFixer - SpaceAfterSemicolonFixer - priority fix (SpacePossum) -* bug #3193 TokensAnalyzer::getClassyElements - sort result before returning (SpacePossum) -* bug #3196 SelfUpdateCommand - fix exit status when can't determine newest version (julienfalque) -* minor #3107 ConfigurationResolver - improve error message when rule is not found (SpacePossum) -* minor #3113 Add WordMatcher (keradus) -* minor #3128 README: remove deprecated rule from CLI examples (chteuchteu) -* minor #3133 Unify Reporter tests (keradus) -* minor #3134 Allow Symfony 4 (keradus, garak) -* minor #3136 PHPUnit - call hooks from parent class as well (keradus) -* minor #3141 Unify description of deprecated fixer (kubawerlos) -* minor #3144 PhpUnitDedicateAssertFixer - Sort map and array by function name (localheinz) -* minor #3145 misc - Typo (localheinz) -* minor #3150 Fix CircleCI (julienfalque) -* minor #3151 Update gitattributes to ignore next file (keradus) -* minor #3156 Update php-coveralls (keradus) -* minor #3166 README - add link to new gitter channel. (SpacePossum) -* minor #3174 Update UPGRADE.md (vitek-rostislav) -* minor #3180 Fix usage of static variables (kubawerlos) -* minor #3182 Add support for PHPUnit 6, drop PHPUnit 4 (keradus) -* minor #3184 Code grooming - sort content of arrays (keradus) -* minor #3191 Travis - add nightly build to allow_failures due to Travis issues (keradus) -* minor #3197 DX groom CS (keradus) - -Changelog for v2.7.1 --------------------- - -* bug #3115 NoUnneededFinalMethodFixer - fix edge case (Slamdunk) - -Changelog for v2.7.0 --------------------- - -* feature #2573 BinaryOperatorSpaces reworked (SpacePossum, keradus) -* feature #3073 SpaceAfterSemicolonFixer - Add option to remove space in empty for expressions (julienfalque) -* feature #3089 NoAliasFunctionsFixer - add imap aliases (Slamdunk) -* feature #3093 NoUnneededFinalMethodFixer - Remove final keyword from private methods (localheinz, keradus) -* minor #3068 Symfony:risky ruleset - add no_homoglyph_names (keradus) -* minor #3074 [IO] Replace Diff with fork version (SpacePossum) - -Changelog for v2.6.1 --------------------- - -* bug #3052 Fix false positive warning about paths overridden by provided as command arguments (kubawerlos) -* bug #3053 CombineConsecutiveIssetsFixer - fix priority (SpacePossum) -* bug #3058 IsNullFixer - fix whitespace handling (roukmoute) -* bug #3069 MethodArgumentSpaceFixer - new test case (keradus) -* bug #3072 IsNullFixer - fix non_yoda_style edge case (keradus) -* bug #3088 Drop dedicated Phar stub (keradus) -* bug #3100 NativeFunctionInvocationFixer - Fix test if previous token is already namespace separator (SpacePossum) -* bug #3104 DoctrineAnnotationIndentationFixer - Fix str_repeat() error (julienfalque) -* minor #3038 Support PHP 7.2 (SpacePossum, keradus) -* minor #3064 Fix couple of typos (KKSzymanowski) -* minor #3070 YodaStyleFixer - Clarify configuration parameters (SteveJobzniak) -* minor #3078 ConfigurationResolver - hide context while including config file (keradus) -* minor #3080 Direct function call instead of by string (kubawerlos) -* minor #3085 CiIntegrationTest - skip when no git is available (keradus) -* minor #3087 phar-stub.php - allow PHP 7.2 (keradus) -* minor #3092 .travis.yml - fix matrix for PHP 7.1 (keradus) -* minor #3094 NoUnneededFinalMethodFixer - Add test cases (julienfalque) -* minor #3111 DoctrineAnnotationIndentationFixer - Restore test case (julienfalque) - -Changelog for v2.6.0 --------------------- - -* bug #3039 YodaStyleFixer - Fix echo case (SpacePossum, keradus) -* feature #2446 Add YodaStyleFixer (SpacePossum) -* feature #2940 Add NoHomoglyphNamesFixer (mcfedr, keradus) -* feature #3012 Add CombineConsecutiveIssetsFixer (SpacePossum) -* minor #3037 Update SF rule set (SpacePossum) - -Changelog for v2.5.1 --------------------- - -* bug #3002 Bugfix braces (mnabialek) -* bug #3010 Fix handling of Github releases (julienfalque, keradus) -* bug #3015 Fix exception arguments (julienfalque) -* bug #3016 Verify phar file (keradus) -* bug #3021 Risky rules cleanup (kubawerlos) -* bug #3023 RandomApiMigrationFixer - "rand();" to "random_int(0, getrandmax());" fixing (SpacePossum) -* bug #3024 ConfigurationResolver - Handle empty "rules" value (SpacePossum, keradus) -* bug #3031 IndentationTypeFixer - fix handling tabs in indented comments (keradus) -* minor #2999 Notice when paths from config file are overridden by command arguments (julienfalque, keradus) -* minor #3007 Add PHP 7.2 to Travis build matrix (Jean85) -* minor #3009 CiIntegrationTest - run local (SpacePossum) -* minor #3013 Adjust phpunit configuration (localheinz) -* minor #3017 Fix: Risky tests (localheinz) -* minor #3018 Fix: Make sure that data providers are named correctly (localheinz, keradus) -* minor #3032 .php_cs.dist - handling UnexpectedValueException (keradus) -* minor #3033 Use ::class (keradus) -* minor #3034 Follow newest CS (keradus) -* minor #3036 Drop not existing Standalone group from PHPUnit configuration and duplicated internal tags (keradus) -* minor #3042 Update gitter address (keradus) - -Changelog for v2.5.0 --------------------- - -* feature #2770 DoctrineAnnotationSpaces - split assignments options (julienfalque) -* feature #2843 Add estimating-max progress output type (julienfalque) -* feature #2885 Add NoSuperfluousElseifFixer (julienfalque) -* feature #2929 Add NoUnneededCurlyBracesFixer (SpacePossum) -* feature #2944 FunctionToConstantFixer - handle get_class() -> __CLASS__ as well (SpacePossum) -* feature #2953 BlankLineBeforeStatementFixer - Add more statements (localheinz, keradus) -* feature #2972 Add NoUnneededFinalMethodFixer (Slamdunk, keradus) -* feature #2992 Add Doctrine Annotation ruleset (julienfalque) -* minor #2926 Token::getNameForId (SpacePossum) - -Changelog for v2.4.2 --------------------- - -* bug #3002 Bugfix braces (mnabialek) -* bug #3010 Fix handling of Github releases (julienfalque, keradus) -* bug #3015 Fix exception arguments (julienfalque) -* bug #3016 Verify phar file (keradus) -* bug #3021 Risky rules cleanup (kubawerlos) -* bug #3023 RandomApiMigrationFixer - "rand();" to "random_int(0, getrandmax());" fixing (SpacePossum) -* bug #3024 ConfigurationResolver - Handle empty "rules" value (SpacePossum, keradus) -* bug #3031 IndentationTypeFixer - fix handling tabs in indented comments (keradus) -* minor #2999 Notice when paths from config file are overridden by command arguments (julienfalque, keradus) -* minor #3007 Add PHP 7.2 to Travis build matrix (Jean85) -* minor #3009 CiIntegrationTest - run local (SpacePossum) -* minor #3013 Adjust phpunit configuration (localheinz) -* minor #3017 Fix: Risky tests (localheinz) -* minor #3018 Fix: Make sure that data providers are named correctly (localheinz, keradus) -* minor #3032 .php_cs.dist - handling UnexpectedValueException (keradus) -* minor #3033 Use ::class (keradus) -* minor #3034 Follow newest CS (keradus) -* minor #3036 Drop not existing Standalone group from PHPUnit configuration and duplicated internal tags (keradus) -* minor #3042 Update gitter address (keradus) - -Changelog for v2.4.1 --------------------- - -* bug #2925 Improve CI integration suggestion (julienfalque) -* bug #2928 TokensAnalyzer::getClassyElements - Anonymous class support (SpacePossum) -* bug #2931 Psr0Fixer, Psr4Fixer - ignore "new class" syntax (dg, keradus) -* bug #2934 Config - fix handling rule without value (keradus, SpacePossum) -* bug #2939 NoUnusedImportsFixer - Fix extra blank line (julienfalque) -* bug #2941 PHP 7.2 - Group imports with trailing comma support (SpacePossum, julienfalque) -* bug #2954 NoBreakCommentFixer - Disable case sensitivity (julienfalque) -* bug #2959 MethodArgumentSpaceFixer - Skip body of fixed function (greg0ire) -* bug #2984 AlignMultilineCommentFixer - handle uni code (SpacePossum) -* bug #2987 Fix incorrect indentation of comments in `braces` fixer (rob006) -* minor #2924 Add missing Token deprecations (julienfalque) -* minor #2927 WhiteSpaceConfig - update message copy and more strict tests (SpacePossum, keradus) -* minor #2930 Trigger website build (keradus) -* minor #2932 Integrate CircleCI (keradus, aidantwoods) -* minor #2933 ProcessLinterTest - Ensure Windows test only runs on Windows, add a Mac test execution (aidantwoods) -* minor #2935 special handling of fabbot.io service if it's using too old PHP CS Fixer version (keradus) -* minor #2937 Travis: execute 5.3 job on precise (keradus) -* minor #2938 Tests fix configuration of project (SpacePossum, keradus) -* minor #2943 FunctionToConstantFixer - test with diff. arguments than fixable (SpacePossum) -* minor #2945 BlankLineBeforeStatementFixerTest - Fix covered class (julienfalque) -* minor #2946 Detect extra old installations (keradus) -* minor #2947 Test suggested CI integration (keradus) -* minor #2951 AccessibleObject - remove most of usage (keradus) -* minor #2952 BlankLineBeforeStatementFixer - Reference fixer instead of test class (localheinz) -* minor #2955 Travis - stop using old TASK_SCA residue (keradus) -* minor #2968 AssertTokensTrait - don't use AccessibleObject (keradus) -* minor #2969 Shrink down AccessibleObject usage (keradus) -* minor #2982 TrailingCommaInMultilineArrayFixer - simplify isMultilineArray condition (TomasVotruba) -* minor #2989 CiIntegrationTest - fix min supported PHP versions (keradus) - -Changelog for v2.4.0 --------------------- - -* bug #2880 NoBreakCommentFixer - fix edge case (julienfalque) -* bug #2900 VoidReturnFixer - handle functions containing anonymous functions/classes (bendavies, keradus) -* bug #2902 Fix test classes constructor (julienfalque) -* feature #2384 Add BlankLineBeforeStatementFixer (localheinz, keradus, SpacePossum) -* feature #2440 MethodArgumentSpaceFixer - add ensure_fully_multiline option (greg0ire) -* feature #2649 PhpdocAlignFixer - make fixer configurable (ntzm) -* feature #2664 Add DoctrineAnnotationArrayAssignmentFixer (julienfalque) -* feature #2667 Add NoBreakCommentFixer (julienfalque) -* feature #2684 BracesFixer - new options for braces position after control structures and anonymous constructs (aidantwoods, keradus) -* feature #2701 NoExtraConsecutiveBlankLinesFixer - Add more configuration options related to switch statements (SpacePossum) -* feature #2740 Add VoidReturnFixer (mrmark) -* feature #2765 DoctrineAnnotationIndentationFixer - add option to indent mixed lines (julienfalque) -* feature #2815 NonPrintableCharacterFixer - Add option to replace with escape sequences (julienfalque, keradus) -* feature #2822 Add NoNullPropertyInitializationFixer (ntzm, julienfalque, SpacePossum) -* feature #2825 Add PhpdocTypesOrderFixer (julienfalque, keradus) -* feature #2856 CastSpacesFixer - add space option (kubawerlos, keradus) -* feature #2857 Add AlignMultilineCommentFixer (Slamdunk, keradus) -* feature #2866 Add SingleLineCommentStyleFixer, deprecate HashToSlashCommentFixer (Slamdunk, keradus) -* minor #2773 Travis - use stages (keradus) -* minor #2794 Drop HHVM support (keradus, julienfalque) -* minor #2801 ProjectCodeTest - Fix typo in deprecation message (SpacePossum) -* minor #2818 Token become immutable, performance optimizations (keradus) -* minor #2877 Fix PHPMD report (julienfalque) -* minor #2894 NonPrintableCharacterFixer - fix handling required PHP version on PHPUnit 4.x (keradus) -* minor #2921 InvalidForEnvFixerConfigurationException - fix handling in tests on 2.4 line (keradus) - -Changelog for v2.3.3 --------------------- - -* bug #2807 NoUselessElseFixer - Fix detection of conditional block (SpacePossum) -* bug #2809 Phar release - fix readme generation (SpacePossum, keradus) -* bug #2827 MethodArgumentSpaceFixer - Always remove trailing spaces (julienfalque) -* bug #2835 SelfAcessorFixer - class property fix (mnabialek) -* bug #2848 PhpdocIndentFixer - fix edge case with inline phpdoc (keradus) -* bug #2849 BracesFixer - Fix indentation issues with comments (julienfalque) -* bug #2851 Tokens - ensureWhitespaceAtIndex (GrahamCampbell, SpacePossum) -* bug #2854 NoLeadingImportSlashFixer - Removing leading slash from import even when in global space (kubawerlos) -* bug #2858 Support generic types (keradus) -* bug #2869 Fix handling required configuration (keradus) -* bug #2881 NoUnusedImportsFixer - Bug when trying to insert empty token (GrahamCampbell, keradus) -* bug #2882 DocBlock\Annotation - Fix parsing of collections with multiple key types (julienfalque) -* bug #2886 NoSpacesInsideParenthesisFixer - Do not remove whitespace if next token is comment (SpacePossum) -* bug #2888 SingleImportPerStatementFixer - Add support for function and const (SpacePossum) -* bug #2901 Add missing files to archive files (keradus) -* bug #2914 HeredocToNowdocFixer - works with CRLF line ending (dg) -* bug #2920 RuleSet - Update deprecated configuration of fixers (SpacePossum, keradus) -* minor #1531 Update docs for few generic types (keradus) -* minor #2793 COOKBOOK-FIXERS.md - update to current version, fix links (keradus) -* minor #2812 ProcessLinter - compatibility with Symfony 3.3 (keradus) -* minor #2816 Tokenizer - better docs and validation (keradus) -* minor #2817 Tokenizer - use future-compatible interface (keradus) -* minor #2819 Fix benchmark (keradus) -* minor #2820 MagicConstantCasingFixer - Remove defined check (SpacePossum) -* minor #2823 Tokenizer - use future-compatible interface (keradus) -* minor #2824 code grooming (keradus) -* minor #2826 Exceptions - provide utests (localheinz) -* minor #2828 Enhancement: Reference phpunit.xsd from phpunit.xml.dist (localheinz) -* minor #2830 Differs - add tests (localheinz) -* minor #2832 Fix: Use all the columns (localheinz) -* minor #2833 Doctrine\Annotation\Token - provide utests (localheinz) -* minor #2839 Use PHP 7.2 polyfill instead of xml one (keradus) -* minor #2842 Move null to first position in PHPDoc types (julienfalque) -* minor #2850 ReadmeCommandTest - Prevent diff output (julienfalque) -* minor #2859 Fixed typo and dead code removal (GrahamCampbell) -* minor #2863 FileSpecificCodeSample - add tests (localheinz) -* minor #2864 WhitespacesAwareFixerInterface clean up (Slamdunk) -* minor #2865 AutoReview\FixerTest - test configuration samples (SpacePossum, keradus) -* minor #2867 VersionSpecification - Fix copy-paste typo (SpacePossum) -* minor #2870 Tokens - ensureWhitespaceAtIndex - Clear tokens before compare. (SpacePossum) -* minor #2874 LineTest - fix typo (keradus) -* minor #2875 HelpCommand - recursive layout fix (SpacePossum) -* minor #2883 DescribeCommand - Show which sample uses the default configuration (SpacePossum) -* minor #2887 Housekeeping - Strict whitespace checks (SpacePossum) -* minor #2895 ProjectCodeTest - check that classes in no-tests exception exist (keradus) -* minor #2896 Move testing related classes from src to tests (keradus) -* minor #2904 Reapply CS (keradus) -* minor #2910 PhpdocAnnotationWithoutDotFixer - Restrict lowercasing (oschwald) -* minor #2913 Tests - tweaks (SpacePossum, keradus) -* minor #2916 FixerFactory - drop return in sortFixers(), never used (TomasVotruba) - -Changelog for v2.3.2 --------------------- - -* bug #2682 DoctrineAnnotationIndentationFixer - fix handling nested annotations (edhgoose, julienfalque) -* bug #2700 Fix Doctrine Annotation end detection (julienfalque) -* bug #2715 OrderedImportsFixer - handle indented groups (pilgerone) -* bug #2732 HeaderCommentFixer - fix handling blank lines (s7b4) -* bug #2745 Fix Doctrine Annotation newlines (julienfalque) -* bug #2752 FixCommand - fix typo in warning message (mnapoli) -* bug #2757 GeckoPHPUnit is not dev dependency (keradus) -* bug #2759 Update gitattributes (SpacePossum) -* bug #2763 Fix describe command with PSR-0 fixer (julienfalque) -* bug #2768 Tokens::ensureWhitespaceAtIndex - clean up comment check, add check for T_OPEN (SpacePossum) -* bug #2783 Tokens::ensureWhitespaceAtIndex - Fix handling line endings (SpacePossum) -* minor #2304 DX: use PHPMD (keradus) -* minor #2663 Use colors for keywords in commands output (julienfalque, keradus) -* minor #2706 Update README (SpacePossum) -* minor #2714 README.rst - fix wrong value in example (mleko) -* minor #2718 Remove old Symfony exception message expectation (julienfalque) -* minor #2721 Update phpstorm article link to a fresh blog post (valeryan) -* minor #2725 Use method chaining for configuration definitions (julienfalque) -* minor #2727 PHPUnit - use speedtrap (keradus) -* minor #2728 SelfUpdateCommand - verify that it's possible to replace current file (keradus) -* minor #2729 DescribeCommand - add decorated output test (julienfalque) -* minor #2731 BracesFixer - properly pass config in utest dataProvider (keradus) -* minor #2738 Upgrade tests to use new, namespaced PHPUnit TestCase class (keradus) -* minor #2742 Code cleanup (GrahamCampbell, keradus) -* minor #2743 Fixing example and description for GeneralPhpdocAnnotationRemoveFixer (kubawerlos) -* minor #2744 AbstractDoctrineAnnotationFixerTestCase - split fixers test cases (julienfalque) -* minor #2755 Fix compatibility with PHPUnit 5.4.x (keradus) -* minor #2758 Readme - improve CI integration guidelines (keradus) -* minor #2769 Psr0Fixer - remove duplicated example (julienfalque) -* minor #2774 AssertTokens Trait (keradus) -* minor #2775 NoExtraConsecutiveBlankLinesFixer - remove duplicate code sample. (SpacePossum) -* minor #2778 AutoReview - watch that code samples are unique (keradus) -* minor #2787 Add warnings about missing dom ext and require json ext (keradus) -* minor #2792 Use composer-require-checker (keradus) -* minor #2796 Update .gitattributes (SpacePossum) -* minor #2797 Update .gitattributes (SpacePossum) -* minor #2800 PhpdocTypesFixerTest - Fix typo in covers annotation (SpacePossum) - -Changelog for v2.3.1 --------------------- - -Port of v2.2.3. - -* bug #2724 Revert #2554 Add short diff. output format (keradus) - -Changelog for v2.3.0 --------------------- - -* feature #2450 Add ListSyntaxFixer (SpacePossum) -* feature #2708 Add PhpUnitTestClassRequiresCoversFixer (keradus) -* minor #2568 Require PHP 5.6+ (keradus) -* minor #2672 Bump symfony/* deps (keradus) - -Changelog for v2.2.20 ---------------------- - -* bug #3233 PhpdocAlignFixer - Fix linebreak inconsistency (SpacePossum, keradus) -* bug #3445 Rewrite NoUnusedImportsFixer (kubawerlos, julienfalque) -* bug #3597 DeclareStrictTypesFixer - fix bug of removing line (kubawerlos, keradus) -* bug #3605 DoctrineAnnotationIndentationFixer - Fix indentation with mixed lines (julienfalque) -* bug #3606 PhpdocToCommentFixer - allow multiple ( (SpacePossum) -* bug #3684 PhpUnitStrictFixer - Do not fix if not correct # of arguments are used (SpacePossum) -* bug #3715 SingleImportPerStatementFixer - Fix handling whitespace before opening brace (julienfalque) -* bug #3731 PhpdocIndentFixer - crash fix (SpacePossum) -* bug #3765 Fix binary-prefixed double-quoted strings to single quotes (ntzm) -* bug #3770 Handle binary flags in heredoc_to_nowdoc (ntzm) -* bug #3790 ProcessLinter - don't execute external process without timeout! It can freeze! (keradus) -* minor #3548 Make shell scripts POSIX-compatible (EvgenyOrekhov, keradus) -* minor #3568 New Autoreview: Correct option casing (ntzm) -* minor #3590 Use XdebugHandler to avoid performance penalty (AJenbo, keradus) -* minor #3607 PhpdocVarWithoutNameFixer - update sample with @ type (SpacePossum) -* minor #3617 Tests stability patches (Tom Klingenberg, keradus) -* minor #3627 Fix tests execution under phpdbg (keradus) -* minor #3629 ProjectFixerConfigurationTest - test rules are sorted (SpacePossum) -* minor #3639 DX: use benefits of symfony/force-lowest (keradus) -* minor #3641 Update check_trailing_spaces script with upstream (keradus) -* minor #3646 Extract SameStringsConstraint and XmlMatchesXsdConstraint (keradus) -* minor #3647 DX: Add CachingLinter for tests (keradus) -* minor #3649 Update check_trailing_spaces script with upstream (keradus) -* minor #3652 CiIntegrationTest - run tests with POSIX sh, not Bash (keradus) -* minor #3656 DX: Clean ups (SpacePossum) -* minor #3660 Fix do not rely on order of fixing in CiIntegrationTest (kubawerlos) -* minor #3662 DX: Add Smoke/InstallViaComposerTest (keradus) -* minor #3663 DX: During deployment, run all smoke tests and don't allow to skip phar-related ones (keradus) -* minor #3665 CircleCI fix (kubawerlos) -* minor #3666 Use "set -eu" in shell scripts (EvgenyOrekhov) -* minor #3669 Document possible values for subset options (julienfalque, keradus) -* minor #3676 RunnerTest - workaround for failing Symfony v2.8.37 (kubawerlos) -* minor #3680 DX: Tokens - removeLeadingWhitespace and removeTrailingWhitespace must act in same way (SpacePossum) -* minor #3686 README.rst - Format all code-like strings in fixer descriptions (ntzm, keradus) -* minor #3692 DX: Optimize tests (julienfalque) -* minor #3701 Use correct casing for "PHPDoc" (ntzm) -* minor #3703 DX: InstallViaComposerTets - groom naming (keradus) -* minor #3704 DX: Tokens - fix naming (keradus) -* minor #3706 Update homebrew installation instructions (ntzm) -* minor #3713 Use HTTPS whenever possible (fabpot) -* minor #3723 Extend tests coverage (ntzm) -* minor #3733 Disable Composer optimized autoloader by default (julienfalque) -* minor #3748 PhpUnitStrictFixer - extend risky note (jnvsor) -* minor #3749 Make sure PHPUnit is cased correctly in fixers descriptions (kubawerlos) -* minor #3773 AbstractFixerWithAliasedOptionsTestCase - don't export (keradus) -* minor #3796 DX: StdinTest - do not assume name of folder, into which project was cloned (keradus) -* minor #3803 NoEmptyPhpdocFixer/PhpdocAddMissingParamAnnotationFixer - missing priority test (SpacePossum, keradus) -* minor #3804 Cleanup: remove useless constructor comment (kubawerlos) - -Changelog for v2.2.19 ---------------------- - -* bug #3594 ElseifFixer - Bug with alternative syntax (kubawerlos) -* bug #3600 StrictParamFixer - Fix issue when functions are imported (ntzm, keradus) -* minor #3589 FixerFactoryTest - add missing test (SpacePossum, keradus) -* minor #3610 make phar extension optional (Tom Klingenberg, keradus) -* minor #3612 Travis - allow for hhvm failures (keradus) -* minor #3615 Detect fabbot.io (julienfalque, keradus) -* minor #3616 FixerFactoryTest - Don't rely on autovivification (keradus) - -Changelog for v2.2.18 ---------------------- - -* bug #3446 Add PregWrapper (kubawerlos) -* bug #3464 IncludeFixer - fix incorrect order of fixing (kubawerlos, SpacePossum) -* bug #3496 Bug in Tokens::removeLeadingWhitespace (kubawerlos, SpacePossum, keradus) -* bug #3557 AbstractDoctrineAnnotationFixer: edge case bugfix (Slamdunk) -* bug #3574 GeneralPhpdocAnnotationRemoveFixer - remove PHPDoc if no content is left (SpacePossum) -* minor #3563 DX add missing covers annotations (keradus) -* minor #3565 Use EventDispatcherInterface instead of EventDispatcher when possible (keradus) -* minor #3572 DX: allow for more phpunit-speedtrap versions to support more PHPUnit versions (keradus) -* minor #3576 Fix Doctrine Annotation test cases merging (julienfalque) - -Changelog for v2.2.17 ---------------------- - -* bug #3504 NoBlankLinesAfterPhpdocFixer - allow blank line before declare statement (julienfalque) -* bug #3522 Remove LOCK_EX (SpacePossum) -* bug #3560 SelfAccessorFixer is risky (Slamdunk) -* minor #3435 Add tests for general_phpdoc_annotation_remove (BackEndTea) -* minor #3484 Create Tokens::findBlockStart (ntzm) -* minor #3512 Add missing array typehints (ntzm) -* minor #3516 Use null|type instead of ?type in PHPDocs (ntzm) -* minor #3518 FixerFactoryTest - Test each priority test file is listed as test (SpacePossum) -* minor #3520 Fix typos: ran vs. run (SpacePossum) -* minor #3521 Use HTTPS (carusogabriel) -* minor #3526 Remove gecko dependency (SpacePossum, keradus, julienfalque) -* minor #3531 Backport PHPMD to LTS version to ease maintainability (keradus) -* minor #3532 Implement Tokens::findOppositeBlockEdge (ntzm) -* minor #3533 DX: SCA - drop src/Resources exclusion (keradus) -* minor #3538 Don't use third parameter of Tokens::findBlockStart (ntzm) -* minor #3542 Enhancement: Run composer-normalize on Travis CI (localheinz, keradus) -* minor #3555 DX: composer.json - drop branch-alias, branch is already following the version (keradus) -* minor #3556 DX: Add AutoReview/ComposerTest (keradus) -* minor #3559 Don't expose new files under Test namespace (keradus) - -Changelog for v2.2.16 ---------------------- - -* bug #3502 Fix missing file in export (keradus) - -Changelog for v2.2.15 ---------------------- - -* bug #3367 NoUnusedImportsFixer - fix comment handling (SpacePossum, keradus) -* bug #3455 NoEmptyCommentFixer - comment block detection for line ending different than LF (kubawerlos, SpacePossum) -* bug #3458 SilencedDeprecationErrorFixer - fix edge cases (kubawerlos) -* bug #3466 no_whitespace_in_blank_line and no_blank_lines_after_phpdoc fixers bug (kubawerlos, keradus) -* minor #3354 Added missing types to the PhpdocTypesFixer (GrahamCampbell) -* minor #3406 Fix for escaping in README (kubawerlos) -* minor #3431 Add missing tests (SpacePossum) -* minor #3440 Add a handful of integration tests (BackEndTea) -* minor #3444 IntegrationTest - ensure tests in priority dir are priority tests indeed (keradus) -* minor #3494 Add missing PHPDoc param type (ntzm) -* minor #3495 Swap @var type and element (ntzm) -* minor #3498 NoUnusedImportsFixer - fix deprecation (keradus) - -Changelog for v2.2.14 ---------------------- - -* bug #3298 DiffConsoleFormatter - fix output escaping. (SpacePossum) -* bug #3337 BracesFixer: nowdoc bug on template files (Slamdunk) -* bug #3349 Fix stdin handling and add tests for it (keradus) -* bug #3359 BracesFixer - handle comment for content outside of given block (keradus) -* bug #3415 FileFilterIterator - input checks and utests (SpacePossum, keradus) -* bug #3429 Fix archive analysing (keradus) -* minor #3137 PHPUnit - use common base class (keradus) -* minor #3342 PhpUnitDedicateAssertFixer - Remove unexistent method is_boolean (carusogabriel) -* minor #3345 StdinFileInfo - fix `__toString` (keradus) -* minor #3346 StdinFileInfo - drop getContents (keradus) -* minor #3347 DX: reapply newest CS (keradus) -* minor #3365 COOKBOOK-FIXERS.md - update to provide definition instead of description (keradus) -* minor #3370 AbstractFixer - FQCN in in exceptions (Slamdunk) -* minor #3372 ProjectCodeTest - fix comment (keradus) -* minor #3402 Always provide delimiter to `preg_quote` calls (ntzm) -* minor #3403 Remove unused import (ntzm) -* minor #3405 Fix `fopen` mode (ntzm) -* minor #3408 Improving fixers descriptions (kubawerlos) -* minor #3409 move itests from misc to priority (keradus) -* minor #3411 Better type hinting for AbstractFixerTestCase::$fixer (kubawerlos) -* minor #3412 Convert `strtolower` inside `strpos` to just `stripos` (ntzm) -* minor #3425 FixerFactoryTest - test that priority pair fixers have itest (keradus, SpacePossum) -* minor #3427 ConfigurationResolver: fix @return annotation (Slamdunk) - -Changelog for v2.2.13 ---------------------- - -* bug #3281 SelfAccessorFixer - stop modifying traits (kubawerlos) -* minor #3195 Add self-update command test (julienfalque) -* minor #3292 PHPUnit - set memory limit (veewee) -* minor #3306 Token - better input validation (keradus) - -Changelog for v2.2.12 ---------------------- - -* bug #3173 SimplifiedNullReturnFixer - handle nullable return types (Slamdunk) -* bug #3272 PhpdocTrimFixer - unicode support (SpacePossum) - -Changelog for v2.2.11 ---------------------- - -* bug #3225 PhpdocTrimFixer - Fix handling of lines without leading asterisk (julienfalque) -* bug #3262 ToolInfo - support installation by branch as well (keradus) -* bug #3266 PhpUnitConstructFixer - multiple asserts bug (kubawerlos) -* minor #3239 Improve contributing guide and issue template (julienfalque) -* minor #3246 Make ToolInfo methods non-static (julienfalque) -* minor #3250 Travis: fail early, spare resources, save the Earth (Slamdunk, keradus) -* minor #3251 Create Title for config file docs section (IanEdington) -* minor #3254 AutoReview/FixerFactoryTest::testFixersPriority: verbose assertion message (Slamdunk) - -Changelog for v2.2.10 ---------------------- - -* bug #3199 TokensAnalyzer - getClassyElements (SpacePossum) -* bug #3208 BracesFixer - Fix for instantiation in control structures (julienfalque, SpacePossum) -* bug #3215 BinaryOperatorSpacesFixer - Fix spaces around multiple exception catching (|) (ntzm) -* bug #3216 AbstractLinesBeforeNamespaceFixer - add min. and max. option, not only single target count (SpacePossum) -* bug #3217 TokenizerLinter - fix lack of linting when code is cached (SpacePossum, keradus) -* minor #3200 Skip slow test when Xdebug is loaded (julienfalque) -* minor #3219 Normalise references to GitHub in docs (ntzm) -* minor #3226 Remove unused imports (ntzm) -* minor #3231 Fix typos (ntzm) -* minor #3234 Simplify Cache\Signature::equals (ntzm) -* minor #3237 UnconfigurableFixer - use only LF (keradus) -* minor #3238 AbstractFixerTest - fix @cover annotation (keradus) - -Changelog for v2.2.9 --------------------- - -* bug #3062 BraceClassInstantiationTransformer - Fix instantiation inside method call braces case (julienfalque, keradus) -* bug #3083 SingleBlankLineBeforeNamespaceFixer - Fix handling namespace right after opening tag (mlocati) -* bug #3109 SwitchCaseSemicolonToColonFixer - Fix bug with nested constructs (SpacePossum) -* bug #3123 Cache - File permissions (SpacePossum) -* bug #3172 IndentationTypeFixer - do not touch whitespace that is not indentation (SpacePossum) -* bug #3176 NoMultilineWhitespaceBeforeSemicolonsFixer - SpaceAfterSemicolonFixer - priority fix (SpacePossum) -* bug #3193 TokensAnalyzer::getClassyElements - sort result before returning (SpacePossum) -* bug #3196 SelfUpdateCommand - fix exit status when can't determine newest version (julienfalque) -* minor #3107 ConfigurationResolver - improve error message when rule is not found (SpacePossum) -* minor #3113 Add WordMatcher (keradus) -* minor #3133 Unify Reporter tests (keradus) -* minor #3134 Allow Symfony 4 (keradus, garak) -* minor #3136 PHPUnit - call hooks from parent class as well (keradus) -* minor #3145 misc - Typo (localheinz) -* minor #3150 Fix CircleCI (julienfalque) -* minor #3151 Update gitattributes to ignore next file (keradus) -* minor #3156 Update php-coveralls (keradus) -* minor #3166 README - add link to new gitter channel. (SpacePossum) -* minor #3174 Update UPGRADE.md (vitek-rostislav) -* minor #3180 Fix usage of static variables (kubawerlos) -* minor #3184 Code grooming - sort content of arrays (keradus) -* minor #3191 Travis - add nightly build to allow_failures due to Travis issues (keradus) -* minor #3197 DX groom CS (keradus) - -Changelog for v2.2.8 --------------------- - -* bug #3052 Fix false positive warning about paths overridden by provided as command arguments (kubawerlos) -* bug #3058 IsNullFixer - fix whitespace handling (roukmoute) -* bug #3072 IsNullFixer - fix non_yoda_style edge case (keradus) -* bug #3088 Drop dedicated Phar stub (keradus) -* bug #3100 NativeFunctionInvocationFixer - Fix test if previous token is already namespace separator (SpacePossum) -* bug #3104 DoctrineAnnotationIndentationFixer - Fix str_repeat() error (julienfalque) -* minor #3038 Support PHP 7.2 (SpacePossum, keradus) -* minor #3064 Fix couple of typos (KKSzymanowski) -* minor #3078 ConfigurationResolver - hide context while including config file (keradus) -* minor #3080 Direct function call instead of by string (kubawerlos) -* minor #3085 CiIntegrationTest - skip when no git is available (keradus) -* minor #3087 phar-stub.php - allow PHP 7.2 (keradus) - -Changelog for v2.2.7 --------------------- - -* bug #3002 Bugfix braces (mnabialek) -* bug #3010 Fix handling of Github releases (julienfalque, keradus) -* bug #3015 Fix exception arguments (julienfalque) -* bug #3016 Verify phar file (keradus) -* bug #3021 Risky rules cleanup (kubawerlos) -* bug #3023 RandomApiMigrationFixer - "rand();" to "random_int(0, getrandmax());" fixing (SpacePossum) -* bug #3024 ConfigurationResolver - Handle empty "rules" value (SpacePossum, keradus) -* bug #3031 IndentationTypeFixer - fix handling tabs in indented comments (keradus) -* minor #2999 Notice when paths from config file are overridden by command arguments (julienfalque, keradus) -* minor #3007 Add PHP 7.2 to Travis build matrix (Jean85) -* minor #3009 CiIntegrationTest - run local (SpacePossum) -* minor #3013 Adjust phpunit configuration (localheinz) -* minor #3017 Fix: Risky tests (localheinz) -* minor #3018 Fix: Make sure that data providers are named correctly (localheinz, keradus) -* minor #3032 .php_cs.dist - handling UnexpectedValueException (keradus) -* minor #3034 Follow newest CS (keradus) -* minor #3036 Drop not existing Standalone group from PHPUnit configuration and duplicated internal tags (keradus) -* minor #3042 Update gitter address (keradus) - -Changelog for v2.2.6 --------------------- - -* bug #2925 Improve CI integration suggestion (julienfalque) -* bug #2928 TokensAnalyzer::getClassyElements - Anonymous class support (SpacePossum) -* bug #2931 Psr0Fixer, Psr4Fixer - ignore "new class" syntax (dg, keradus) -* bug #2934 Config - fix handling rule without value (keradus, SpacePossum) -* bug #2939 NoUnusedImportsFixer - Fix extra blank line (julienfalque) -* bug #2941 PHP 7.2 - Group imports with trailing comma support (SpacePossum, julienfalque) -* bug #2987 Fix incorrect indentation of comments in `braces` fixer (rob006) -* minor #2927 WhiteSpaceConfig - update message copy and more strict tests (SpacePossum, keradus) -* minor #2930 Trigger website build (keradus) -* minor #2932 Integrate CircleCI (keradus, aidantwoods) -* minor #2933 ProcessLinterTest - Ensure Windows test only runs on Windows, add a Mac test execution (aidantwoods) -* minor #2935 special handling of fabbot.io service if it's using too old PHP CS Fixer version (keradus) -* minor #2937 Travis: execute 5.3 job on precise (keradus) -* minor #2938 Tests fix configuration of project (SpacePossum, keradus) -* minor #2943 FunctionToConstantFixer - test with diff. arguments than fixable (SpacePossum) -* minor #2946 Detect extra old installations (keradus) -* minor #2947 Test suggested CI integration (keradus) -* minor #2951 AccessibleObject - remove most of usage (keradus) -* minor #2969 Shrink down AccessibleObject usage (keradus) -* minor #2982 TrailingCommaInMultilineArrayFixer - simplify isMultilineArray condition (TomasVotruba) - -Changelog for v2.2.5 --------------------- - -* bug #2807 NoUselessElseFixer - Fix detection of conditional block (SpacePossum) -* bug #2809 Phar release - fix readme generation (SpacePossum, keradus) -* bug #2827 MethodArgumentSpaceFixer - Always remove trailing spaces (julienfalque) -* bug #2835 SelfAcessorFixer - class property fix (mnabialek) -* bug #2848 PhpdocIndentFixer - fix edge case with inline phpdoc (keradus) -* bug #2849 BracesFixer - Fix indentation issues with comments (julienfalque) -* bug #2851 Tokens - ensureWhitespaceAtIndex (GrahamCampbell, SpacePossum) -* bug #2854 NoLeadingImportSlashFixer - Removing leading slash from import even when in global space (kubawerlos) -* bug #2858 Support generic types (keradus) -* bug #2869 Fix handling required configuration (keradus) -* bug #2881 NoUnusedImportsFixer - Bug when trying to insert empty token (GrahamCampbell, keradus) -* bug #2882 DocBlock\Annotation - Fix parsing of collections with multiple key types (julienfalque) -* bug #2886 NoSpacesInsideParenthesisFixer - Do not remove whitespace if next token is comment (SpacePossum) -* bug #2888 SingleImportPerStatementFixer - Add support for function and const (SpacePossum) -* bug #2901 Add missing files to archive files (keradus) -* bug #2914 HeredocToNowdocFixer - works with CRLF line ending (dg) -* bug #2920 RuleSet - Update deprecated configuration of fixers (SpacePossum, keradus) -* minor #1531 Update docs for few generic types (keradus) -* minor #2793 COOKBOOK-FIXERS.md - update to current version, fix links (keradus) -* minor #2812 ProcessLinter - compatibility with Symfony 3.3 (keradus) -* minor #2816 Tokenizer - better docs and validation (keradus) -* minor #2817 Tokenizer - use future-compatible interface (keradus) -* minor #2819 Fix benchmark (keradus) -* minor #2824 code grooming (keradus) -* minor #2826 Exceptions - provide utests (localheinz) -* minor #2828 Enhancement: Reference phpunit.xsd from phpunit.xml.dist (localheinz) -* minor #2830 Differs - add tests (localheinz) -* minor #2832 Fix: Use all the columns (localheinz) -* minor #2833 Doctrine\Annotation\Token - provide utests (localheinz) -* minor #2839 Use PHP 7.2 polyfill instead of xml one (keradus) -* minor #2842 Move null to first position in PHPDoc types (julienfalque) -* minor #2850 ReadmeCommandTest - Prevent diff output (julienfalque) -* minor #2859 Fixed typo and dead code removal (GrahamCampbell) -* minor #2863 FileSpecificCodeSample - add tests (localheinz) -* minor #2864 WhitespacesAwareFixerInterface clean up (Slamdunk) -* minor #2865 AutoReview\FixerTest - test configuration samples (SpacePossum, keradus) -* minor #2867 VersionSpecification - Fix copy-paste typo (SpacePossum) -* minor #2874 LineTest - fix typo (keradus) -* minor #2875 HelpCommand - recursive layout fix (SpacePossum) -* minor #2883 DescribeCommand - Show which sample uses the default configuration (SpacePossum) -* minor #2887 Housekeeping - Strict whitespace checks (SpacePossum) -* minor #2895 ProjectCodeTest - check that classes in no-tests exception exist (keradus) -* minor #2896 Move testing related classes from src to tests (keradus) -* minor #2904 Reapply CS (keradus) -* minor #2910 PhpdocAnnotationWithoutDotFixer - Restrict lowercasing (oschwald) -* minor #2913 Tests - tweaks (SpacePossum, keradus) -* minor #2916 FixerFactory - drop return in sortFixers(), never used (TomasVotruba) - -Changelog for v2.2.4 --------------------- - -* bug #2682 DoctrineAnnotationIndentationFixer - fix handling nested annotations (edhgoose, julienfalque) -* bug #2700 Fix Doctrine Annotation end detection (julienfalque) -* bug #2715 OrderedImportsFixer - handle indented groups (pilgerone) -* bug #2732 HeaderCommentFixer - fix handling blank lines (s7b4) -* bug #2745 Fix Doctrine Annotation newlines (julienfalque) -* bug #2752 FixCommand - fix typo in warning message (mnapoli) -* bug #2757 GeckoPHPUnit is not dev dependency (keradus) -* bug #2759 Update gitattributes (SpacePossum) -* bug #2763 Fix describe command with PSR-0 fixer (julienfalque) -* bug #2768 Tokens::ensureWhitespaceAtIndex - clean up comment check, add check for T_OPEN (SpacePossum) -* bug #2783 Tokens::ensureWhitespaceAtIndex - Fix handling line endings (SpacePossum) -* minor #2663 Use colors for keywords in commands output (julienfalque, keradus) -* minor #2706 Update README (SpacePossum) -* minor #2714 README.rst - fix wrong value in example (mleko) -* minor #2721 Update phpstorm article link to a fresh blog post (valeryan) -* minor #2727 PHPUnit - use speedtrap (keradus) -* minor #2728 SelfUpdateCommand - verify that it's possible to replace current file (keradus) -* minor #2729 DescribeCommand - add decorated output test (julienfalque) -* minor #2731 BracesFixer - properly pass config in utest dataProvider (keradus) -* minor #2738 Upgrade tests to use new, namespaced PHPUnit TestCase class (keradus) -* minor #2743 Fixing example and description for GeneralPhpdocAnnotationRemoveFixer (kubawerlos) -* minor #2744 AbstractDoctrineAnnotationFixerTestCase - split fixers test cases (julienfalque) -* minor #2755 Fix compatibility with PHPUnit 5.4.x (keradus) -* minor #2758 Readme - improve CI integration guidelines (keradus) -* minor #2769 Psr0Fixer - remove duplicated example (julienfalque) -* minor #2775 NoExtraConsecutiveBlankLinesFixer - remove duplicate code sample. (SpacePossum) -* minor #2778 AutoReview - watch that code samples are unique (keradus) -* minor #2787 Add warnings about missing dom ext and require json ext (keradus) -* minor #2792 Use composer-require-checker (keradus) -* minor #2796 Update .gitattributes (SpacePossum) -* minor #2800 PhpdocTypesFixerTest - Fix typo in covers annotation (SpacePossum) - -Changelog for v2.2.3 --------------------- - -* bug #2724 Revert #2554 Add short diff. output format (keradus) - -Changelog for v2.2.2 --------------------- - -Warning, this release breaks BC due to introduction of: -* minor #2554 Add short diff. output format (SpacePossum, keradus) -That PR was reverted in v2.2.3, which should be used instead of v2.2.2. - -* bug #2545 RuleSet - change resolvement (SpacePossum) -* bug #2686 Commands readme and describe - fix rare casing when not displaying some possible options of configuration (keradus) -* bug #2711 FixCommand - fix diff optional value handling (keradus) -* minor #2688 AppVeyor - Remove github oauth (keradus) -* minor #2703 Clean ups - No mixed annotations (SpacePossum) -* minor #2704 Create PHP70Migration:risky ruleset (keradus) -* minor #2707 Deprecate other than "yes" or "no" for input options (SpacePossum) -* minor #2709 code grooming (keradus) -* minor #2710 Travis - run more rules on TASK_SCA (keradus) - -Changelog for v2.2.1 --------------------- - -* bug #2621 Tokenizer - fix edge cases with empty code, registered found tokens and code hash (SpacePossum, keradus) -* bug #2674 SemicolonAfterInstructionFixer - Fix case where block ends with an opening curly brace (ntzm) -* bug #2675 ProcessOutputTest - update tests to pass on newest Symfony components under Windows (keradus) -* minor #2651 Fix UPGRADE.md table syntax so it works in GitHub (ntzm, keradus) -* minor #2665 Travis - Improve trailing spaces detection (julienfalque) -* minor #2666 TransformersTest - move test to auto-review group (keradus) -* minor #2668 add covers annotation (keradus) -* minor #2669 TokensTest - grooming (SpacePossum) -* minor #2670 AbstractFixer: use applyFix instead of fix (Slamdunk) -* minor #2677 README: Correct progressbar option support (Laurens St�tzel) - -Changelog for v2.2.0 --------------------- - -* bug #2640 NoExtraConsecutiveBlankLinesFixer - Fix single indent characters not working (ntzm) -* feature #2220 Doctrine annotation fixers (julienfalque) -* feature #2431 MethodArgumentSpaceFixer: allow to retain multiple spaces after comma (Slamdunk) -* feature #2459 BracesFixer - Add option for keeping opening brackets on the same line (jtojnar, SpacePossum) -* feature #2486 Add FunctionToConstantFixer (SpacePossum, keradus) -* feature #2505 FunctionDeclarationFixer - Make space after anonymous function configurable (jtojnar, keradus) -* feature #2509 FullOpeningTagFixer - Ensure opening PHP tag is lowercase (jtojnar) -* feature #2532 FixCommand - add stop-on-violation option (keradus) -* feature #2591 Improve process output (julienfalque) -* feature #2603 Add InvisibleSymbols Fixer (ivan1986, keradus) -* feature #2642 Add MagicConstantCasingFixer (ntzm) -* feature #2657 PhpdocToCommentFixer - Allow phpdoc for language constructs (ceeram, SpacePossum) -* minor #2500 Configuration resolver (julienfalque, SpacePossum, keradus) -* minor #2566 Show more details on errors and exceptions. (SpacePossum, julienfalque) -* minor #2597 HHVM - bump required version to 3.18 (keradus) -* minor #2606 FixCommand - fix missing comment close tag (keradus) -* minor #2623 OrderedClassElementsFixer - remove dead code (SpacePossum) -* minor #2625 Update Symfony and Symfony:risky rulesets (keradus) -* minor #2626 TernaryToNullCoalescingFixer - adjust ruleset membership and description (keradus) -* minor #2635 ProjectCodeTest - watch that all classes have dedicated tests (keradus) -* minor #2647 DescribeCommandTest - remove deprecated code usage (julienfalque) -* minor #2648 Move non-code covering tests to AutoReview subnamespace (keradus) -* minor #2652 NoSpacesAroundOffsetFixerTest - fix deprecation (keradus) -* minor #2656 Code grooming (keradus) -* minor #2659 Travis - speed up preparation for phar building (keradus) -* minor #2660 Fixed typo in suggest for ext-mbstring (pascal-hofmann) -* minor #2661 NonPrintableCharacterFixer - include into Symfony:risky ruleset (keradus) - -Changelog for v2.1.3 --------------------- - -* bug #2358 Cache - Deal with signature encoding (keradus, GrahamCampbell) -* bug #2475 Add shorthand array destructing support (SpacePossum, keradus) -* bug #2595 NoUnusedImportsFixer - Fix import usage detection with properties (julienfalque) -* bug #2605 PhpdocAddMissingParamAnnotationFixer, PhpdocOrderFixer - fix priority issue (SpacePossum) -* bug #2607 Fixers - better comments handling (SpacePossum) -* bug #2612 BracesFixer - Fix early bracket close for do-while loop inside an if without brackets (felixgomez) -* bug #2614 Ensure that '*Fixer::fix()' won't crash when running on non-candidate collection (keradus) -* bug #2630 HeaderCommentFixer - Fix trailing whitespace not removed after AliasFunctionsFixer (kalessil) -* feature #1275 Added PhpdocInlineTagFixer (SpacePossum, keradus) -* feature #1292 Added MethodSeparationFixer (SpacePossum) -* feature #1383 Introduce rules and sets (keradus) -* feature #1416 Mark fixers as risky (keradus) -* feature #1440 Made AbstractFixerTestCase and AbstractIntegrationTestCase public (keradus) -* feature #1489 Added Psr4Fixer (GrahamCampbell) -* feature #1497 ExtraEmptyLinesFixer - allow to remove empty blank lines after configured tags (SpacePossum) -* feature #1529 Added PhpdocPropertyFixer, refactored Tag and Annotation (GrahamCampbell) -* feature #1628 Added OrderedClassElementsFixer (gharlan) -* feature #1742 path argument is used to create an intersection with existing finder (keradus, gharlan) -* feature #1779 Added GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocAnnotationRenameFixer (keradus) -* feature #1811 Added NoSpacesInsideOfssetFixer (phansys) -* feature #1819 Added DirConstantFixer, ModernizeTypesCastingFixer, RandomApiMigrationFixer (kalessil, SpacePossum, keradus) -* feature #1825 Added junit format (ekho) -* feature #1862 FixerFactory - Do not allow conflicting fixers (SpacePossum) -* feature #1888 Cache refactoring, better cache handling in dry-run mode (localheinz) -* feature #1889 Added SingleClassElementPerStatementFixer (phansys, SpacePossum) -* feature #1903 FixCommand - allow to pass multiple path argument (keradus) -* feature #1913 Introduce path-mode CLI option (keradus) -* feature #1949 Added DeclareStrictTypesFixer, introduce options for HeaderCommentFixer (Seldaek, SpacePossum, keradus) -* feature #1955 Introduce CT_ARRAY_INDEX_CURLY_BRACE_OPEN and CT_ARRAY_INDEX_CURLY_BRACE_CLOSE (keradus) -* feature #1958 Added NormalizeIndexBraceFixer (keradus) -* feature #2069 Add semicolon after instruction fixer (SpacePossum) -* feature #2089 Add `no_spaces_around_offset` fixer (phansys) -* feature #2179 BinaryOperatorSpacesFixer - add (un)align configuration options (SpacePossum) -* feature #2192 Add PowToExponentiationFixer (SpacePossum, keradus) -* feature #2207 Added ReturnTypeDeclarationFixer (keradus) -* feature #2213 VisibilityRequiredFixer - Add support for class const visibility added in PHP7.1. (SpacePossum) -* feature #2221 Add support for user-defined whitespaces (keradus) -* feature #2244 Config cleanup (keradus, SpacePossum) -* feature #2247 PhpdocAnnotationWithoutDotFixer - support more cases (keradus) -* feature #2289 Add PhpdocAddMissingParamAnnotationFixer (keradus) -* feature #2331 Add DescribeCommand (keradus, SpacePossum) -* feature #2332 New colours of diff on console (keradus) -* feature #829 add support for .php_cs.dist file (keradus) -* feature #998 MethodArgumentSpaceFixer - enhance, now only one space after comma (trilopin, keradus) -* minor #1007 Simplify Transformers (keradus) -* minor #1050 Make Config's setDir() fluent like the rest of methods (gonzaloserrano) -* minor #1062 Added NamespaceOperatorTransformer (gharlan) -* minor #1078 Exit status should be 0 if there are no errors (gharlan) -* minor #1101 CS: fix project itself (localheinz) -* minor #1102 Enhancement: List errors occurred before, during and after fixing (localheinz) -* minor #1105 Token::isStructureAlternativeEnd - remove unused method (keradus) -* minor #1106 readme grooming (SpacePossum, keradus) -* minor #1115 Fixer - simplify flow (keradus) -* minor #1118 Process output refactor (SpacePossum) -* minor #1132 Linter - public methods should be first (keradus) -* minor #1134 Token::isWhitespace - simplify interface (keradus) -* minor #1140 FixerInterface - check if fixer should be applied by isCandidate method (keradus) -* minor #1146 Linter - detect executable (keradus) -* minor #1156 deleted old ConfigurationResolver class (keradus) -* minor #1160 Grammar fix to README (Falkirks) -* minor #1174 DefaultFinder - boost performance by not filtering when files array is empty (keradus) -* minor #1179 Exit with non-zero if invalid files were detected prior to fixing (localheinz) -* minor #1186 Finder - do not search for .xml and .yml files (keradus) -* minor #1206 BracesFixer::getClassyTokens - remove duplicated method (keradus) -* minor #1222 Made fixers final (GrahamCampbell) -* minor #1229 Tokens - Fix PHPDoc (SpacePossum) -* minor #1241 More details on exceptions. (SpacePossum) -* minor #1263 Made internal classes final (GrahamCampbell) -* minor #1272 Readme - Add spaces around PHP-CS-Fixer headers (Soullivaneuh) -* minor #1283 Error - Fixed type phpdoc (GrahamCampbell) -* minor #1284 Token - Fix PHPDoc (SpacePossum) -* minor #1314 Added missing internal annotations (keradus) -* minor #1329 Psr0Fixer - move to contrib level (gharlan) -* minor #1340 Clean ups (SpacePossum) -* minor #1341 Linter - throw exception when write fails (SpacePossum) -* minor #1348 Linter - Prefer error output when throwing a linting exception (GrahamCampbell) -* minor #1350 Add "phpt" as a valid extension (henriquemoody) -* minor #1376 Add time and memory to XML report (junichi11) -* minor #1387 Made all test classes final (keradus) -* minor #1388 Made all tests internal (keradus) -* minor #1390 Added ProjectCodeTest that tests if all classes inside tests are internal and final or abstract (keradus) -* minor #1391 Fixer::getLevelAsString is no longer static (keradus) -* minor #1392 Add report to XML report as the root node (junichi11) -* minor #1394 Stop mixing level from config file and fixers from CLI arg when one of fixers has dash (keradus) -* minor #1426 MethodSeparationFixer - Fix spacing around comments (SpacePossum, keradus) -* minor #1432 Fixer check on factory (Soullivaneuh) -* minor #1434 Add Test\AccessibleObject class (keradus) -* minor #1442 FixerFactory - disallow to register multiple fixers with same name (keradus) -* minor #1477 rename PhpdocShortDescriptionFixer into PhpdocSummaryFixer (keradus) -* minor #1481 Fix running the tests (keradus) -* minor #1482 move AbstractTransformerTestBase class outside Tests dir (keradus) -* minor #1530 Added missing internal annotation (GrahamCampbell) -* minor #1534 Clean ups (SpacePossum) -* minor #1536 Typo fix (fabpot) -* minor #1555 Fixed indentation in composer.json (GrahamCampbell) -* minor #1558 [2.0] Cleanup the tags property in the abstract phpdoc types fixer (GrahamCampbell) -* minor #1567 PrintToEchoFixer - add to symfony rule set (gharlan) -* minor #1607 performance improvement (gharlan) -* minor #1621 Switch to PSR-4 (keradus) -* minor #1631 Configuration exceptions exception cases on master. (SpacePossum) -* minor #1646 Remove non-default Config/Finder classes (keradus) -* minor #1648 Fixer - avoid extra calls to getFileRelativePathname (GrahamCampbell) -* minor #1649 Consider the php version when caching (GrahamCampbell) -* minor #1652 Rename namespace "Symfony\CS" to "PhpCsFixer" (gharlan) -* minor #1666 new Runner, ProcessOutputInterface, DifferInterface and ResultInterface (keradus) -* minor #1674 Config - add addCustomFixers method (PedroTroller) -* minor #1677 Enhance tests (keradus) -* minor #1695 Rename Fixers (keradus) -* minor #1702 Upgrade guide (keradus) -* minor #1707 ExtraEmptyLinesFixer - fix configure docs (keradus) -* minor #1712 NoExtraConsecutiveBlankLinesFixer - Remove blankline after curly brace open (SpacePossum) -* minor #1718 CLI: rename --config-file argument (keradus) -* minor #1722 Renamed not_operators_with_space to not_operator_with_space (GrahamCampbell) -* minor #1728 PhpdocNoSimplifiedNullReturnFixer - rename back to PhpdocNoEmptyReturnFixer (keradus) -* minor #1729 Renamed whitespacy_lines to no_whitespace_in_blank_lines (GrahamCampbell) -* minor #1731 FixCommand - value for config option is required (keradus) -* minor #1732 move fixer classes from level subdirs to thematic subdirs (gharlan, keradus) -* minor #1733 ConfigurationResolver - look for .php_cs file in cwd as well (keradus) -* minor #1737 RuleSet/FixerFactory - sort arrays content (keradus) -* minor #1751 FixerInterface::configure - method should always override configuration, not patch it (keradus) -* minor #1752 Remove unused code (keradus) -* minor #1756 Finder - clean up code (keradus) -* minor #1757 Psr0Fixer - change way of configuring the fixer (keradus) -* minor #1762 Remove ConfigInterface::getDir, ConfigInterface::setDir, Finder::setDir and whole FinderInterface (keradus) -* minor #1764 Remove ConfigAwareInterface (keradus) -* minor #1780 AbstractFixer - throw error on configuring non-configurable Fixer (keradus) -* minor #1782 rename fixers (gharlan) -* minor #1815 NoSpacesInsideParenthesisFixer - simplify implementation (keradus) -* minor #1821 Ensure that PhpUnitDedicateAssertFixer runs after NoAliasFunctionsFixer, clean up NoEmptyCommentFixer (SpacePossum) -* minor #1824 Reporting extracted to separate classes (ekho, keradus, SpacePossum) -* minor #1826 Fixer - remove measuring fixing time per file (keradus) -* minor #1843 FileFilterIterator - add missing import (GrahamCampbell) -* minor #1845 FileCacheManager - Allow linting to determine the cache state too (GrahamCampbell) -* minor #1846 FileFilterIterator - Corrected an iterator typehint (GrahamCampbell) -* minor #1848 DocBlock - Remove some old unused phpdoc tags (GrahamCampbell) -* minor #1856 NoDuplicateSemicolonsFixer - Remove overcomplete fixer (SpacePossum) -* minor #1861 Fix: Ofsset should be Offset (localheinz) -* minor #1867 Print non-report output to stdErr (SpacePossum, keradus) -* minor #1873 Enhancement: Show path to cache file if it exists (localheinz) -* minor #1875 renamed Composer package (fabpot) -* minor #1882 Runner - Handle throwables too (GrahamCampbell) -* minor #1886 PhpdocScalarFixer - Fix lowercase str to string too (GrahamCampbell) -* minor #1940 README.rst - update CI example (keradus) -* minor #1947 SCA, CS, add more tests (SpacePossum, keradus) -* minor #1954 tests - stop using deprecated method (sebastianbergmann) -* minor #1962 TextDiffTest - tests should not produce cache file (keradus) -* minor #1973 Introduce fast PHP7 based linter (keradus) -* minor #1999 Runner - No need to determine relative file name twice (localheinz) -* minor #2002 FileCacheManagerTest - Adjust name of test and variable (localheinz) -* minor #2010 NoExtraConsecutiveBlankLinesFixer - SF rule set, add 'extra' (SpacePossum) -* minor #2013 no_whitespace_in_blank_lines -> no_whitespace_in_blank_line (SpacePossum) -* minor #2024 AbstractFixerTestCase - check if there is no duplicated Token instance inside Tokens collection (keradus) -* minor #2031 COOKBOOK-FIXERS.md - update calling doTest method (keradus) -* minor #2032 code grooming (keradus) -* minor #2068 Code grooming (keradus) -* minor #2073 DeclareStrictTypesFixer - Remove fix CS fix logic from fixer. (SpacePossum) -* minor #2088 TokenizerLintingResult - expose line number of parsing error (keradus) -* minor #2093 Tokens - add block type BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE (SpacePossum) -* minor #2095 Transformers - add required PHP version (keradus) -* minor #2096 Introduce CT for PHP7 (keradus) -* minor #2119 Create @Symfony:risky ruleset (keradus) -* minor #2163 ClassKeywordRemoveFixerTest - Fix tests (SpacePossum) -* minor #2180 FixCommand - don't refer to renamed rules (keradus) -* minor #2181 Disallow to disable linter (keradus) -* minor #2194 semicolon_after_instruction,no_unneeded_control_parentheses prio issue (SpacePossum) -* minor #2199 make fixers less risky (SpacePossum) -* minor #2206 Add PHP70Migration ruleset (keradus) -* minor #2217 SelfUpdateCommand - Print version of update fixer (SpacePossum) -* minor #2223 update integration test format (keradus) -* minor #2227 Stop polluting global namespace with CT (keradus) -* minor #2237 DX: extend integration tests for PSR2 and Symfony rulesets (keradus) -* minor #2240 Make some objects immutable (keradus) -* minor #2251 ProtectedToPrivateFixer - fix priority, fix comments with new fixer names (SpacePossum) -* minor #2252 ClassDefinitionFixer - Set configuration of the fixer in the RuleSet of SF. (SpacePossum) -* minor #2257 extend Symfony_whitespaces itest (keradus) -* minor #2258 README.rst - indicate configurable rules (keradus) -* minor #2267 RuleSet - validate set (keradus) -* minor #2268 Use strict parameters for PHP functions (keradus) -* minor #2273 fixed typo (fabpot) -* minor #2274 ShortArraySyntaxFixer/LongArraySyntaxFixer - Merge conflicting fixers (SpacePossum) -* minor #2275 Clean ups (SpacePossum) -* minor #2278 Concat*Fixer - unify concat fixers (SpacePossum, keradus) -* minor #2279 Use Prophecy (keradus) -* minor #2284 Code grooming (SpacePossum) -* minor #2285 IntegrationCase is now aware about RuleSet but not Fixers (keradus, SpacePossum) -* minor #2286 Phpdoc*Fixer - unify rename fixers (SpacePossum, keradus) -* minor #2288 FixerInterface::configure(null) reset fixer to use default configuration (keradus) -* minor #2291 Make fixers ready to use directly after creation (keradus) -* minor #2295 Code grooming (keradus) -* minor #2296 ProjectCodeTest - make test part of regular testsuite, not standalone one (keradus) -* minor #2298 ConfigurationResolver - grooming (SpacePossum) -* minor #2300 Simplify rule set (SpacePossum, keradus) -* minor #2306 DeclareStrictTypesFixer - do not move tokens (SpacePossum) -* minor #2312 RuleSet - sort rules (localheinz) -* minor #2313 DX: provide doctyping for tests (keradus) -* minor #2317 Add utests (keradus) -* minor #2318 *TestCase - Reduce visibility of setUp() (localheinz) -* minor #2319 Code grooming (keradus) -* minor #2322 DX: use whitemessy aware assertion (keradus) -* minor #2324 Echo|Print*Fixer - unify printing fixers (SpacePossum, keradus) -* minor #2337 Normalize rule naming (keradus) -* minor #2338 Drop hacks for unsupported HHVM (keradus) -* minor #2339 Add some Fixer descriptions (SpacePossum, keradus) -* minor #2343 PowToExponentiationFixer - allow to run on 5.6.0 as well (keradus) -* minor #767 Add @internal tag (keradus) -* minor #807 Tokens::isMethodNameIsMagic - remove unused method (keradus) -* minor #809 Split Tokens into Tokens and TokensAnalyzer (keradus) -* minor #844 Renamed phpdoc_params to phpdoc_align (GrahamCampbell) -* minor #854 Change default level to PSR2 (keradus) -* minor #873 Config - using cache by default (keradus) -* minor #902 change FixerInterface (keradus) -* minor #911 remove Token::$line (keradus) -* minor #914 All Transformer classes should be named with Transformer as suffix (keradus) -* minor #915 add UseTransformer (keradus) -* minor #916 add ArraySquareBraceTransformer (keradus) -* minor #917 clean up Transformer tests (keradus) -* minor #919 CurlyBraceTransformer - one transformer to handle all curly braces transformations (keradus) -* minor #928 remove Token::getLine (keradus) -* minor #929 add WhitespacyCommentTransformer (keradus) -* minor #937 fix docs/typehinting in few classes (keradus) -* minor #958 FileCacheManager - remove code for BC support (keradus) -* minor #979 Improve Tokens::clearEmptyTokens performance (keradus) -* minor #981 Tokens - code grooming (keradus) -* minor #988 Fixers - no need to search for tokens of given kind in extra loop (keradus) -* minor #989 No need for loop in Token::equals (keradus) - -Changelog for v1.13.3 ---------------------- - -* minor #3042 Update gitter address (keradus) - -Changelog for v1.13.2 ---------------------- - -* minor #2946 Detect extra old installations (keradus) - -Changelog for v1.13.1 ---------------------- - -* minor #2342 Application - adjust test to not depend on symfony/console version (keradus) -* minor #2344 AppVeyor: enforce PHP version (keradus) - -Changelog for v1.13.0 ---------------------- - -* bug #2303 ClassDefinitionFixer - Anonymous classes fixing (SpacePossum) -* feature #2208 Added fixer for PHPUnit's @expectedException annotation (ro0NL) -* feature #2249 Added ProtectedToPrivateFixer (Slamdunk, SpacePossum) -* feature #2264 SelfUpdateCommand - Do not update to next major version by default (SpacePossum) -* feature #2328 ClassDefinitionFixer - Anonymous classes format by PSR12 (SpacePossum) -* feature #2333 PhpUnitFqcnAnnotationFixer - support more annotations (keradus) -* minor #2256 EmptyReturnFixer - it's now risky fixer due to null vs void (keradus) -* minor #2281 Add issue template (SpacePossum) -* minor #2307 Update .editorconfig (SpacePossum) -* minor #2310 CI: update AppVeyor to use newest PHP, silence the composer (keradus) -* minor #2315 Token - Deprecate getLine() (SpacePossum) -* minor #2320 Clear up status code on 1.x (SpacePossum) - -Changelog for v1.12.4 ---------------------- - -* bug #2235 OrderedImportsFixer - PHP 7 group imports support (SpacePossum) -* minor #2276 Tokens cleanup (keradus) -* minor #2277 Remove trailing spaces (keradus) -* minor #2294 Improve Travis configuration (keradus) -* minor #2297 Use phpdbg instead of xdebug (keradus) -* minor #2299 Travis: proper xdebug disabling (keradus) -* minor #2301 Travis: update platform adjusting (keradus) - -Changelog for v1.12.3 ---------------------- - -* bug #2155 ClassDefinitionFixer - overhaul (SpacePossum) -* bug #2187 MultipleUseFixer - Fix handling comments (SpacePossum) -* bug #2209 LinefeedFixer - Fix in a safe way (SpacePossum) -* bug #2228 NoEmptyLinesAfterPhpdocs, SingleBlankLineBeforeNamespace - Fix priority (SpacePossum) -* bug #2230 FunctionDeclarationFixer - Fix T_USE case (SpacePossum) -* bug #2232 Add a test for style of varaible decalration : var (daiglej) -* bug #2246 Fix itest requirements (keradus) -* minor #2238 .gitattributes - specified line endings (keradus) -* minor #2239 IntegrationCase - no longer internal (keradus) - -Changelog for v1.12.2 ---------------------- - -* bug #2191 PhpdocToCommentFixer - fix false positive for docblock of variable (keradus) -* bug #2193 UnneededControlParenthesesFixer - Fix more return cases. (SpacePossum) -* bug #2198 FileCacheManager - fix exception message and undefined property (j0k3r) -* minor #2170 Add dollar sign prefix for consistency (bcremer) -* minor #2190 .travis.yml - improve Travis speed for tags (keradus) -* minor #2196 PhpdocTypesFixer - support iterable type (GrahamCampbell) -* minor #2197 Update cookbook and readme (g105b, SpacePossum) -* minor #2203 README.rst - change formatting (ro0NL) -* minor #2204 FixCommand - clean unused var (keradus) -* minor #2205 Add integration test for iterable type (keradus) - -Changelog for v1.12.1 ---------------------- - -* bug #2144 Remove temporary files not deleted by destructor on failure (adawolfa) -* bug #2150 SelfUpdateCommand: resolve symlink (julienfalque) -* bug #2162 Fix issue where an exception is thrown if the cache file exists but is empty. (ikari7789) -* bug #2164 OperatorsSpacesFixer - Do not unalign double arrow and equals operators (SpacePossum) -* bug #2167 Rewrite file removal (keradus) -* minor #2152 Code cleanup (keradus) -* minor #2154 ShutdownFileRemoval - Fixed file header (GrahamCampbell) - -Changelog for v1.12.0 ---------------------- - -* feature #1493 Added MethodArgumentDefaultValueFixer (lmanzke) -* feature #1495 BracesFixer - added support for declare (EspadaV8) -* feature #1518 Added ClassDefinitionFixer (SpacePossum) -* feature #1543 [PSR-2] Switch case space fixer (Soullivaneuh) -* feature #1577 Added SpacesAfterSemicolonFixer (SpacePossum) -* feature #1580 Added HeredocToNowdocFixer (gharlan) -* feature #1581 UnneededControlParenthesesFixer - add "break" and "continue" support (gharlan) -* feature #1610 HashToSlashCommentFixer - Add (SpacePossum) -* feature #1613 ScalarCastFixer - LowerCaseCastFixer - Add (SpacePossum) -* feature #1659 NativeFunctionCasingFixer - Add (SpacePossum) -* feature #1661 SwitchCaseSemicolonToColonFixer - Add (SpacePossum) -* feature #1662 Added CombineConsecutiveUnsetsFixer (SpacePossum) -* feature #1671 Added NoEmptyStatementFixer (SpacePossum) -* feature #1705 Added NoUselessReturnFixer (SpacePossum, keradus) -* feature #1735 Added NoTrailingWhitespaceInCommentFixer (keradus) -* feature #1750 Add PhpdocSingleLineVarSpacingFixer (SpacePossum) -* feature #1765 Added NoEmptyPhpdocFixer (SpacePossum) -* feature #1773 Add NoUselessElseFixer (gharlan, SpacePossum) -* feature #1786 Added NoEmptyCommentFixer (SpacePossum) -* feature #1792 Add PhpUnitDedicateAssertFixer. (SpacePossum) -* feature #1894 BracesFixer - correctly fix indents of anonymous functions/classes (gharlan) -* feature #1985 Added ClassKeywordRemoveFixer (Soullivaneuh) -* feature #2020 Added PhpdocAnnotationWithoutDotFixer (keradus) -* feature #2067 Added DeclareEqualNormalizeFixer (keradus) -* feature #2078 Added SilencedDeprecationErrorFixer (HeahDude) -* feature #2082 Added MbStrFunctionsFixer (Slamdunk) -* bug #1657 SwitchCaseSpaceFixer - Fix spacing between 'case' and semicolon (SpacePossum) -* bug #1684 SpacesAfterSemicolonFixer - fix loops handling (SpacePossum, keradus) -* bug #1700 Fixer - resolve import conflict (keradus) -* bug #1836 NoUselessReturnFixer - Do not remove return if last statement in short if statement (SpacePossum) -* bug #1879 HeredocToNowdocFixer - Handle space in heredoc token (SpacePossum) -* bug #1896 FixCommand - Fix escaping of diff output (SpacePossum) -* bug #2034 IncludeFixer - fix support for close tag (SpacePossum) -* bug #2040 PhpdocAnnotationWithoutDotFixer - fix crash on odd character (keradus) -* bug #2041 DefaultFinder should implement FinderInterface (keradus) -* bug #2050 PhpdocAnnotationWithoutDotFixer - handle ellipsis (keradus) -* bug #2051 NativeFunctionCasingFixer - call to constructor with default NS of class with name matching native function name fix (SpacePossum) -* minor #1538 Added possibility to lint tests (gharlan) -* minor #1569 Add sample to get a specific version of the fixer (Soullivaneuh) -* minor #1571 Enhance integration tests (keradus) -* minor #1578 Code grooming (keradus) -* minor #1583 Travis - update matrix (keradus) -* minor #1585 Code grooming - Improve utests code coverage (SpacePossum) -* minor #1586 Add configuration exception classes and exit codes (SpacePossum) -* minor #1594 Fix invalid PHP code samples in utests (SpacePossum) -* minor #1597 MethodArgumentDefaultValueFixer - refactoring and fix closures with "use" clause (gharlan) -* minor #1600 Added more integration tests (SpacePossum, keradus) -* minor #1605 integration tests - swap EXPECT and INPUT (optional INPUT) (gharlan) -* minor #1608 Travis - change matrix order for faster results (gharlan) -* minor #1609 CONTRIBUTING.md - Don't rebase always on master (SpacePossum) -* minor #1616 IncludeFixer - fix and test more cases (SpacePossum) -* minor #1622 AbstractIntegratationTest - fix linting test cases (gharlan) -* minor #1624 fix invalid code in test cases (gharlan) -* minor #1625 Travis - switch to trusty (keradus) -* minor #1627 FixCommand - fix output (keradus) -* minor #1630 Pass along the exception code. (SpacePossum) -* minor #1632 Php Inspections (EA Extended): SCA for 1.12 (kalessil) -* minor #1633 Fix CS for project itself (keradus) -* minor #1634 Backport some minor changes from 2.x line (keradus) -* minor #1637 update PHP Coveralls (keradus) -* minor #1639 Revert "Travis - set dist to trusty" (keradus) -* minor #1641 AppVeyor/Travis - use GITHUB_OAUTH_TOKEN (keradus) -* minor #1642 AppVeyor - install dev deps as well (keradus) -* minor #1647 Deprecate non-default Configs and Finders (keradus) -* minor #1654 Split output to stderr and stdout (SpacePossum) -* minor #1660 update phpunit version (gharlan) -* minor #1663 DuplicateSemicolonFixer - Remove duplicate semicolons even if there are comments between those (SpacePossum) -* minor #1664 IncludeFixer - Add missing test case (SpacePossum) -* minor #1668 Code grooming (keradus) -* minor #1669 NativeFunctionCasingFixer - move to Symfony level (keradus) -* minor #1670 Backport Finder and Config classes from 2.x line (keradus) -* minor #1682 ElseifFixer - handle comments (SpacePossum) -* minor #1689 AbstractIntegrationTest - no need for single-char group and docs grooming (keradus) -* minor #1690 Integration tests - allow to not check priority, introduce IntegrationCase (keradus) -* minor #1701 Fixer - Renamed import alias (GrahamCampbell) -* minor #1708 Update composer.json requirements (keradus) -* minor #1734 Travis: Turn on linting (keradus) -* minor #1736 Integration tests - don't check priority for tests using short_tag fixer (keradus) -* minor #1739 NoTrailingWhitespaceInCommentFixer - move to PSR2 level (keradus) -* minor #1763 Deprecate ConfigInterface::getDir, ConfigInterface::setDir, Finder::setDir (keradus) -* minor #1777 NoTrailingWhitespaceInCommentFixer - fix parent class (keradus) -* minor #1816 PhpUnitDedicateAssertFixer - configuration is not required anymore (keradus) -* minor #1849 DocBlock - The category tag should be together with package (GrahamCampbell) -* minor #1870 Update README.rst (glensc) -* minor #1880 FixCommand - fix stdErr detection (SpacePossum) -* minor #1881 NoEmptyStatementFixer - handle anonymous classes correctly (gharlan) -* minor #1906 .php_cs - use no_useless_else rule (keradus) -* minor #1915 NoEmptyComment - move to Symfony level (SpacePossum) -* minor #1917 BracesFixer - fixed comment handling (gharlan) -* minor #1919 EmptyReturnFixer - move fixer outside of Symfony level (keradus) -* minor #2036 OrderedUseFixer - adjust tests (keradus) -* minor #2056 Travis - run nightly PHP (keradus) -* minor #2061 UnusedUseFixer and LineAfterNamespace - add new integration test (keradus) -* minor #2097 Add lambda tests for 7.0 and 7.1 (SpacePossum) -* minor #2111 .travis.yml - rename PHP 7.1 env (keradus) -* minor #2112 Fix 1.12 line (keradus) -* minor #2118 SilencedDeprecationErrorFixer - adjust level (keradus) -* minor #2132 composer.json - rename package name (keradus) -* minor #2133 Apply ordered_class_elements rule (keradus) -* minor #2138 composer.json - disallow to run on PHP 7.2+ (keradus) - -Changelog for v1.11.8 ---------------------- - -* bug #2143 ReadmeCommand - fix running command on phar file (keradus) -* minor #2129 Add .gitattributes to remove unneeded files (Slamdunk) -* minor #2141 Move phar building to PHP 5.6 job as newest box.phar is no longer working on 5.3 (keradus) - -Changelog for v1.11.7 ---------------------- - -* bug #2108 ShortArraySyntaxFixer, TernarySpacesFixer, UnalignEqualsFixer - fix priority bug (SpacePossum) -* bug #2092 ConcatWithoutSpacesFixer, OperatorsSpacesFixer - fix too many spaces, fix incorrect fixing of lines with comments (SpacePossum) - -Changelog for v1.11.6 ---------------------- - -* bug #2086 Braces - fix bug with comment in method prototype (keradus) -* bug #2077 SingleLineAfterImportsFixer - Do not remove lines between use cases (SpacePossum) -* bug #2079 TernarySpacesFixer - Remove multiple spaces (SpacePossum) -* bug #2087 Fixer - handle PHP7 Errors as well (keradus) -* bug #2072 LowercaseKeywordsFixer - handle CT_CLASS_CONSTANT (tgabi333) -* bug #2066 LineAfterNamespaceFixer - Handle close tag (SpacePossum) -* bug #2057 LineAfterNamespaceFixer - adding too much extra lines where namespace is last statement (keradus) -* bug #2059 OperatorsSpacesFixer - handle declare statement (keradus) -* bug #2060 UnusedUseFixer - fix handling whitespaces around removed import (keradus) -* minor #2071 ShortEchoTagFixer - allow to run tests on PHP 5.3 (keradus) - -Changelog for v1.11.5 ---------------------- - -* bug #2012 Properly build phar file for lowest supported PHP version (keradus) -* bug #2037 BracesFixer - add support for anonymous classes (keradus) -* bug #1989 Add support for PHP 7 namespaces (SpacePossum) -* bug #2019 Fixing newlines added after curly brace string index access (jaydiablo) -* bug #1840 [Bug] BracesFixer - Do add a line before close tag (SpacePossum) -* bug #1994 EchoToPrintFixer - Fix T_OPEN_TAG_WITH_ECHO on hhvm (keradus) -* bug #1970 Tokens - handle semi-reserved PHP 7 keywords (keradus) -* minor #2017 PHP7 integration tests (keradus) -* minor #1465 Bump supported HHVM version, improve ShortEchoTagFixer on HHVM (keradus) -* minor #1995 Rely on own phpunit, not one from CI service (keradus) - -Changelog for v1.11.4 ---------------------- - -* bug #1956 SelfUpdateCommand - don't update to non-stable version (keradus) -* bug #1963 Fix not wanted unneeded_control_parentheses fixer for clone (Soullivaneuh) -* bug #1960 Fix invalid test cases (keradus) -* bug #1939 BracesFixer - fix handling comment around control token (keradus) -* minor #1927 NewWithBracesFixer - remove invalid testcase (keradus) - -Changelog for v1.11.3 ---------------------- - -* bug #1868 NewWithBracesFixer - fix handling more neighbor tokens (keradus) -* bug #1893 BracesFixer - handle comments inside lambda function prototype (keradus) -* bug #1806 SelfAccessorFixer - skip anonymous classes (gharlan) -* bug #1813 BlanklineAfterOpenTagFixer, NoBlankLinesBeforeNamespaceFixer - fix priority (SpacePossum) -* minor #1807 Tokens - simplify isLambda() (gharlan) - -Changelog for v1.11.2 ---------------------- - -* bug #1776 EofEndingFixer - new line on end line comment is allowed (Slamdunk) -* bug #1775 FileCacheManager - ignore corrupted serialized data (keradus) -* bug #1769 FunctionDeclarationFixer - fix more cases (keradus) -* bug #1747 Fixer - Fix ordering of fixer when both level and custom fixers are used (SpacePossum) -* bug #1744 Fixer - fix rare situation when file was visited twice (keradus) -* bug #1710 LowercaseConstantFixer - Fix comment cases. (SpacePossum) -* bug #1711 FunctioncallSpaceFixer - do not touch function declarations. (SpacePossum) -* minor #1798 LintManager - meaningful tempnam (Slamdunk) -* minor #1759 UniqueFileIterator - performance improvement (GrahamCampbell) -* minor #1745 appveyor - fix build (keradus) - -Changelog for v1.11.1 ---------------------- - -* bug #1680 NewWithBracesFixer - End tags (SpacePossum) -* bug #1685 EmptyReturnFixer - Make independent of LowercaseConstantsFixer (SpacePossum) -* bug #1640 IntegrationTest - fix directory separator (keradus) -* bug #1595 ShortTagFixer - fix priority (keradus) -* bug #1576 SpacesBeforeSemicolonFixer - do not remove space before semicolon if that space is after a semicolon (SpacePossum) -* bug #1570 UnneededControlParenthesesFixer - fix test samples (keradus) -* minor #1653 Update license year (gharlan) - -Changelog for v1.11 -------------------- - -* feature #1550 Added UnneededControlParenthesesFixer (Soullivaneuh, keradus) -* feature #1532 Added ShortBoolCastFixer (SpacePossum) -* feature #1523 Added EchoToPrintFixer and PrintToEchoFixer (Soullivaneuh) -* feature #1552 Warn when running with xdebug extension (SpacePossum) -* feature #1484 Added ArrayElementNoSpaceBeforeCommaFixer and ArrayElementWhiteSpaceAfterCommaFixer (amarczuk) -* feature #1449 PhpUnitConstructFixer - Fix more use cases (SpacePossum) -* feature #1382 Added PhpdocTypesFixer (GrahamCampbell) -* feature #1384 Add integration tests (SpacePossum) -* feature #1349 Added FunctionTypehintSpaceFixer (keradus) -* minor #1562 Fix invalid PHP code samples in utests (SpacePossum) -* minor #1560 Fixed project name in xdebug warning (gharlan) -* minor #1545 Fix invalid PHP code samples in utests (SpacePossum) -* minor #1554 Alphabetically sort entries in .gitignore (GrahamCampbell) -* minor #1527 Refactor the way types work on annotations (GrahamCampbell) -* minor #1546 Update coding guide in cookbook (keradus) -* minor #1526 Support more annotations when fixing types in phpdoc (GrahamCampbell) -* minor #1535 clean ups (SpacePossum) -* minor #1510 Added Symfony 3.0 support (Ener-Getick) -* minor #1520 Code grooming (keradus) -* minor #1515 Support property, property-read and property-write tags (GrahamCampbell) -* minor #1488 Added more inline phpdoc tests (GrahamCampbell) -* minor #1496 Add docblock to AbstractFixerTestBase::makeTest (lmanzke) -* minor #1467 PhpdocShortDescriptionFixer - add support for Japanese sentence-ending characters (fritz-c) -* minor #1453 remove calling array_keys in foreach loops (keradus) -* minor #1448 Code grooming (keradus) -* minor #1437 Added import fixers integration test (GrahamCampbell) -* minor #1433 phpunit.xml.dist - disable gc (keradus) -* minor #1427 Change arounded to surrounded in README.rst (36degrees) -* minor #1420 AlignDoubleArrowFixer, AlignEqualsFixer - add integration tests (keradus) -* minor #1423 appveyor.yml - do not cache C:\tools, its internal forAppVeyor (keradus) -* minor #1400 appveyor.yml - add file (keradus) -* minor #1396 AbstractPhpdocTypesFixer - instance method should be called on instance (keradus) -* minor #1395 code grooming (keradus) -* minor #1393 boost .travis.yml file (keradus) -* minor #1372 Don't allow PHP 7 to fail (GrahamCampbell) -* minor #1332 PhpUnitConstructFixer - fix more functions (keradus) -* minor #1339 CONTRIBUTING.md - add link to PSR-5 (keradus) -* minor #1346 Core grooming (SpacePossum) -* minor #1328 Tokens: added typehint for Iterator elements (gharlan) - -Changelog for v1.10.3 ---------------------- - -* bug #1559 WhitespacyLinesFixer - fix bug cases (SpacePossum, keradus) -* bug #1541 Psr0Fixer - Ignore filenames that are a reserved keyword or predefined constant (SpacePossum) -* bug #1537 Psr0Fixer - ignore file without name or with name started by digit (keradus) -* bug #1516 FixCommand - fix wrong message for dry-run (SpacePossum) -* bug #1486 ExtraEmptyLinesFixer - Remove extra lines after comment lines too (SpacePossum) -* bug #1503 Psr0Fixer - fix case with comments lying around (GrahamCampbell) -* bug #1474 PhpdocToCommentFixer - fix not properly fixing for block right after namespace (GrahamCampbell) -* bug #1478 BracesFixer - do not remove empty lines after class opening (keradus) -* bug #1468 Add missing ConfigInterface::getHideProgress() (Eugene Leonovich, rybakit) -* bug #1466 Fix bad indent on align double arrow fixer (Soullivaneuh, keradus) -* bug #1479 Tokens - fix detection of short array (keradus) - -Changelog for v1.10.2 ---------------------- - -* bug #1461 PhpUnitConstructFixer - fix case when first argument is an expression (keradus) -* bug #1460 AlignDoubleArrowFixer - fix handling of nested arrays (Soullivaneuh, keradus) - -Changelog for v1.10.1 ---------------------- - -* bug #1424 Fixed the import fixer priorities (GrahamCampbell) -* bug #1444 OrderedUseFixer - fix next case (keradus) -* bug #1441 BracesFixer - fix next case (keradus) -* bug #1422 AlignDoubleArrowFixer - fix handling of nested array (SpacePossum) -* bug #1425 PhpdocInlineTagFixerTest - fix case when met inalid PHPDoc (keradus) -* bug #1419 AlignDoubleArrowFixer, AlignEqualsFixer - fix priorities (keradus) -* bug #1415 BlanklineAfterOpenTagFixer - Do not add a line break if there is one already. (SpacePossum) -* bug #1410 PhpdocIndentFixer - Fix for open tag (SpacePossum) -* bug #1401 PhpdocVarWithoutNameFixer - Fixed the var without name fixer for inline docs (keradus, GrahamCampbell) -* bug #1369 Fix not well-formed XML output (junichi11) -* bug #1356 Psr0Fixer - disallow run on StdinFileInfo (keradus) - -Changelog for v1.10 -------------------- - -* feature #1306 Added LogicalNotOperatorsWithSuccessorSpaceFixer (phansys) -* feature #1286 Added PhpUnitConstructFixer (keradus) -* feature #1316 Added PhpdocInlineTagFixer (SpacePossum, keradus) -* feature #1303 Added LogicalNotOperatorsWithSpacesFixer (phansys) -* feature #1279 Added PhpUnitStrictFixer (keradus) -* feature #1267 SingleQuoteFixer fix more use cases (SpacePossum) -* minor #1319 PhpUnitConstructFixer - fix performance and add to local .php_cs (keradus) -* minor #1280 Fix non-utf characters in docs (keradus) -* minor #1274 Cookbook - No change auto-test note (Soullivaneuh) - -Changelog for v1.9.3 --------------------- - -* bug #1327 DocBlock\Tag - keep the case of tags (GrahamCampbell) - -Changelog for v1.9.2 --------------------- - -* bug #1313 AlignDoubleArrowFixer - fix aligning after UTF8 chars (keradus) -* bug #1296 PhpdocScalarFixer - fix property annotation too (GrahamCampbell) -* bug #1299 WhitespacyLinesFixer - spaces on next valid line must not be fixed (Slamdunk) - -Changelog for v1.9.1 --------------------- - -* bug #1288 TrimArraySpacesFixer - fix moving first comment (keradus) -* bug #1287 PhpdocParamsFixer - now works on any indentation level (keradus) -* bug #1278 Travis - fix PHP7 build (keradus) -* bug #1277 WhitespacyLinesFixer - stop changing non-whitespacy tokens (SpacePossum, SamBurns-awin, keradus) -* bug #1224 TrailingSpacesFixer - stop changing non-whitespacy tokens (SpacePossum, SamBurns-awin, keradus) -* bug #1266 FunctionCallSpaceFixer - better detection of function call (funivan) -* bug #1255 make sure some phpdoc fixers are run in right order (SpacePossum) - -Changelog for v1.9 ------------------- - -* feature #1097 Added ShortEchoTagFixer (vinkla) -* minor #1238 Fixed error handler to respect current error_reporting (JanJakes) -* minor #1234 Add class to exception message, use sprintf for exceptions (SpacePossum) -* minor #1210 set custom error handler for application run (keradus) -* minor #1214 Tokens::isMonolithicPhp - enhance performance (keradus) -* minor #1207 Update code documentation (keradus) -* minor #1202 Update IDE tool urls (keradus) -* minor #1195 PreIncrementFixer - move to Symfony level (gharlan) - -Changelog for v1.8.1 --------------------- - -* bug #1193 EofEndingFixer - do not add an empty line at EOF if the PHP tags have been closed (SpacePossum) -* bug #1209 PhpdocParamsFixer - fix corrupting following custom annotation (keradus) -* bug #1205 BracesFixer - fix missing indentation fixes for class level (keradus) -* bug #1204 Tag - fix treating complex tag as simple PhpDoc tag (keradus) -* bug #1198 Tokens - fixed unary/binary operator check for type-hinted reference arguments (gharlan) -* bug #1201 Php4ConstructorFixer - fix invalid handling of subnamespaces (gharlan) -* minor #1221 Add more tests (SpacePossum) -* minor #1216 Tokens - Add unit test for array detection (SpacePossum) - -Changelog for v1.8 ------------------- - -* feature #1168 Added UnalignEqualsFixer (keradus) -* feature #1167 Added UnalignDoubleArrowFixer (keradus) -* bug #1169 ToolInfo - Fix way to find script dir (sp-ian-monge) -* minor #1181 composer.json - Update description (SpacePossum) -* minor #1180 create Tokens::overrideAt method (keradus) - -Changelog for v1.7.1 --------------------- - -* bug #1165 BracesFixer - fix bug when comment is a first statement in control structure without braces (keradus) - -Changelog for v1.7 ------------------- - -* feature #1113 Added PreIncrementFixer (gharlan) -* feature #1144 Added PhpdocNoAccessFixer (GrahamCampbell) -* feature #1116 Added SelfAccessorFixer (gharlan) -* feature #1064 OperatorsSpacesFixer enhancements (gharlan) -* bug #1151 Prevent token collection corruption by fixers (stof, keradus) -* bug #1152 LintManager - fix handling of temporary file (keradus) -* bug #1139 NamespaceNoLeadingWhitespaceFixer - remove need for ctype extension (keradus) -* bug #1117 Tokens - fix iterator used with foreach by reference (keradus) -* minor #1148 code grooming (keradus) -* minor #1142 We are actually PSR-4, not PSR-0 (GrahamCampbell) -* minor #1131 Phpdocs and typos (SpacePossum) -* minor #1069 state min HHVM version (keradus) -* minor #1129 [DX] Help developers choose the right branch (SpacePossum) -* minor #1138 PhpClosingTagFixer - simplify flow, no need for loop (keradus) -* minor #1123 Reference mismatches fixed, SCA (kalessil) -* minor #1109 SingleQuoteFixer - made fixer more accurate (gharlan) -* minor #1110 code grooming (kalessil) - -Changelog for v1.6.2 --------------------- - -* bug #1149 UnusedUseFixer - must be run before LineAfterNamespaceFixer, fix token collection corruption (keradus) -* minor #1145 AbstractLinesBeforeNamespaceFixer - fix docs for fixLinesBeforeNamespace (GrahamCampbell) - -Changelog for v1.6.1 --------------------- - -* bug #1108 UnusedUseFixer - fix false positive when name is used as part of another namespace (gharlan) -* bug #1114 Fixed PhpdocParamsFixer with malformed doc block (gharlan) -* minor #1135 PhpdocTrimFixer - fix doc typo (localheinz) -* minor #1093 Travis - test lowest dependencies (boekkooi) - -Changelog for v1.6 ------------------- - -* feature #1089 Added NewlineAfterOpenTagFixer and BlanklineAfterOpenTagFixer (ceeram, keradus) -* feature #1090 Added TrimArraySpacesFixer (jaredh159, keradus) -* feature #1058 Added SingleQuoteFixer (gharlan) -* feature #1059 Added LongArraySyntaxFixer (gharlan) -* feature #1037 Added PhpdocScalarFixer (GrahamCampbell, keradus) -* feature #1028 Add ListCommasFixer (keradus) -* bug #1047 Utils::camelCaseToUnderscore - fix regexp (odin-delrio) -* minor #1073 ShortTagFixer enhancement (gharlan) -* minor #1079 Use LongArraySyntaxFixer for this repo (gharlan) -* minor #1070 Tokens::isMonolithicPhp - remove unused T_CLOSE_TAG search (keradus) -* minor #1049 OrderedUseFixer - grooming (keradus) - -Changelog for v1.5.2 --------------------- - -* bug #1025 Fixer - ignore symlinks (kix) -* bug #1071 Psr0Fixer - fix bug for fixing file with long extension like .class.php (keradus) -* bug #1080 ShortTagFixer - fix false positive (gharlan) -* bug #1066 Php4ConstructorFixer - fix causing infinite recursion (mbeccati) -* bug #1056 VisibilityFixer - fix T_VAR with multiple props (localheinz, keradus) -* bug #1065 Php4ConstructorFixer - fix detection of a PHP4 parent constructor variant (mbeccati) -* bug #1060 Tokens::isShortArray: tests and bugfixes (gharlan) -* bug #1057 unused_use: fix false positive when name is only used as variable name (gharlan) - -Changelog for v1.5.1 --------------------- - -* bug #1054 VisibilityFixer - fix var with array value assigned (localheinz, keradus) -* bug #1048 MultilineArrayTrailingCommaFixer, SingleArrayNoTrailingCommaFixer - using heredoc inside array not cousing to treat it as multiline array (keradus) -* bug #1043 PhpdocToCommentFixer - also check other control structures, besides foreach (ceeram) -* bug #1045 OrderedUseFixer - fix namespace order for trailing digits (rusitschka) -* bug #1035 PhpdocToCommentFixer - Add static as valid keyword for structural element (ceeram) -* bug #1020 BracesFixer - fix missing braces for nested if elseif else (malengrin) -* minor #1036 Added php7 to travis build (fonsecas72) -* minor #1026 Fix typo in ShortArraySyntaxFixer (tommygnr) -* minor #1024 code grooming (keradus) - -Changelog for v1.5 ------------------- - -* feature #887 Added More Phpdoc Fixers (GrahamCampbell, keradus) -* feature #1002 Add HeaderCommentFixer (ajgarlag) -* feature #974 Add EregToPregFixer (mbeccati) -* feature #970 Added Php4ConstructorFixer (mbeccati) -* feature #997 Add PhpdocToCommentFixer (ceeram, keradus) -* feature #932 Add NoBlankLinesAfterClassOpeningFixer (ceeram) -* feature #879 Add SingleBlankLineBeforeNamespaceFixer and NoBlankLinesBeforeNamespaceFixer (GrahamCampbell) -* feature #860 Add single_line_after_imports fixer (ceeram) -* minor #1014 Fixed a few file headers (GrahamCampbell) -* minor #1011 Fix HHVM as it works different than PHP (keradus) -* minor #1010 Fix invalid UTF-8 char in docs (ajgarlag) -* minor #1003 Fix header comment in php files (ajgarlag) -* minor #1005 Add Utils::calculateBitmask method (keradus) -* minor #973 Add Tokens::findSequence (mbeccati) -* minor #991 Longer explanation of how to use blacklist (bmitch, networkscraper) -* minor #972 Add case sensitive option to the tokenizer (mbeccati) -* minor #986 Add benchmark script (dericofilho) -* minor #985 Fix typo in COOKBOOK-FIXERS.md (mattleff) -* minor #978 Token - fix docs (keradus) -* minor #957 Fix Fixers methods order (GrahamCampbell) -* minor #944 Enable caching of composer downloads on Travis (stof) -* minor #941 EncodingFixer - enhance tests (keradus) -* minor #938 Psr0Fixer - remove unneded assignment (keradus) -* minor #936 FixerTest - test description consistency (keradus) -* minor #933 NoEmptyLinesAfterPhpdocsFixer - remove unneeded code, clarify description (ceeram) -* minor #934 StdinFileInfo::getFilename - Replace phpdoc with normal comment and add back empty line before return (ceeram) -* minor #927 Exclude the resources folder from coverage reports (GrahamCampbell) -* minor #926 Update Token::isGivenKind phpdoc (GrahamCampbell) -* minor #925 Improved AbstractFixerTestBase (GrahamCampbell) -* minor #922 AbstractFixerTestBase::makeTest - test if input is different than expected (keradus) -* minor #904 Refactoring Utils (GrahamCampbell) -* minor #901 Improved Readme Formatting (GrahamCampbell) -* minor #898 Tokens::getImportUseIndexes - simplify function (keradus) -* minor #897 phpunit.xml.dist - split testsuite (keradus) - -Changelog for v1.4.2 --------------------- - -* bug #994 Fix detecting of short arrays (keradus) -* bug #995 DuplicateSemicolonFixer - ignore duplicated semicolons inside T_FOR (keradus) - -Changelog for v1.4.1 --------------------- - -* bug #990 MultilineArrayTrailingCommaFixer - fix case with short array on return (keradus) -* bug #975 NoEmptyLinesAfterPhpdocsFixer - fix only when documentation documents sth (keradus) -* bug #976 PhpdocIndentFixer - fix error when there is a comment between docblock and next meaningful token (keradus, ceeram) - -Changelog for v1.4 ------------------- - -* feature #841 PhpdocParamsFixer: added aligning var/type annotations (GrahamCampbell) -* bug #965 Fix detection of lambda function that returns a reference (keradus) -* bug #962 PhpdocIndentFixer - fix bug when documentation is on the end of braces block (keradus) -* bug #961 Fixer - fix handling of empty file (keradus) -* bug #960 IncludeFixer - fix bug when include is part of condition statement (keradus) -* bug #954 AlignDoubleArrowFixer - fix new buggy case (keradus) -* bug #955 ParenthesisFixer - fix case with list call with trailing comma (keradus) -* bug #950 Tokens::isLambda - fix detection near comments (keradus) -* bug #951 Tokens::getImportUseIndexes - fix detection near comments (keradus) -* bug #949 Tokens::isShortArray - fix detection near comments (keradus) -* bug #948 NewWithBracesFixer - fix case with multidimensional array (keradus) -* bug #945 Skip files containing __halt_compiler() on PHP 5.3 (stof) -* bug #946 BracesFixer - fix typo in exception name (keradus) -* bug #940 Tokens::setCode - apply missing transformation (keradus) -* bug #908 BracesFixer - fix invalide inserting brace for control structure without brace and lambda inside of it (keradus) -* bug #903 NoEmptyLinesAfterPhpdocsFixer - fix bug with Windows style lines (GrahamCampbell) -* bug #895 [PSR-2] Preserve blank line after control structure opening brace (marcaube) -* bug #892 Fixed the double arrow multiline whitespace fixer (GrahamCampbell) -* bug #874 BracesFixer - fix bug of removing empty lines after class' opening { (ceeram) -* bug #868 BracesFixer - fix missing braces when statement is not followed by ; (keradus) -* bug #861 Updated PhpdocParamsFixer not to change line endings (keradus, GrahamCampbell) -* bug #837 FixCommand - stop corrupting xml/json format (keradus) -* bug #846 Made phpdoc_params run after phpdoc_indent (GrahamCampbell) -* bug #834 Correctly handle tab indentation (ceeram) -* bug #822 PhpdocIndentFixer - Ignore inline docblocks (ceeram) -* bug #813 MultilineArrayTrailingCommaFixer - do not move array end to new line (keradus) -* bug #817 LowercaseConstantsFixer - ignore class' constants TRUE/FALSE/NULL (keradus) -* bug #821 JoinFunctionFixer - stop changing declaration method name (ceeram) -* minor #963 State the minimum version of PHPUnit in CONTRIBUTING.md (SpacePossum) -* minor #943 Improve the cookbook to use relative links (stof) -* minor #921 Add changelog file (keradus) -* minor #909 BracesFixerTest - no \n line in \r\n test (keradus) -* minor #864 Added NoEmptyLinesAfterPhpdocsFixer (GrahamCampbell) -* minor #871 Added missing author (GrahamCampbell) -* minor #852 Fixed the coveralls version constraint (GrahamCampbell) -* minor #863 Tweaked testRetainsNewLineCharacters (GrahamCampbell) -* minor #849 Removed old alias (GrahamCampbell) -* minor #843 integer should be int (GrahamCampbell) -* minor #830 Remove whitespace before opening tag (ceeram) -* minor #835 code grooming (keradus) -* minor #828 PhpdocIndentFixerTest - code grooming (keradus) -* minor #827 UnusedUseFixer - code grooming (keradus) -* minor #825 improve code coverage (keradus) -* minor #810 improve code coverage (keradus) -* minor #811 ShortArraySyntaxFixer - remove not needed if statement (keradus) - -Changelog for v1.3 ------------------- - -* feature #790 Add docblock indent fixer (ceeram) -* feature #771 Add JoinFunctionFixer (keradus) -* bug #798 Add DynamicVarBrace Transformer for properly handling ${$foo} syntax (keradus) -* bug #796 LowercaseConstantsFixer - rewrite to handle new test cases (keradus) -* bug #789 T_CASE is not succeeded by parentheses (dericofilho) -* minor #814 Minor improvements to the phpdoc_params fixer (GrahamCampbell) -* minor #815 Minor fixes (GrahamCampbell) -* minor #782 Cookbook on how to make a new fixer (dericofilho) -* minor #806 Fix Tokens::detectBlockType call (keradus) -* minor #758 travis - disable sudo (keradus) -* minor #808 Tokens - remove commented code (keradus) -* minor #802 Address Sensiolabs Insight's warning of code cloning. (dericofilho) -* minor #803 README.rst - fix \` into \`\` (keradus) - -Changelog for v1.2 ------------------- - -* feature #706 Remove lead slash (dericofilho) -* feature #740 Add EmptyReturnFixer (GrahamCampbell) -* bug #775 PhpClosingTagFixer - fix case with T_OPEN_TAG_WITH_ECHO (keradus) -* bug #756 Fix broken cases for AlignDoubleArrowFixer (dericofilho) -* bug #763 MethodArgumentSpaceFixer - fix receiving data in list context with omitted values (keradus) -* bug #759 Fix Tokens::isArrayMultiLine (stof, keradus) -* bug #754 LowercaseKeywordsFixer - __HALT_COMPILER must not be lowercased (keradus) -* bug #753 Fix for double arrow misalignment in deeply nested arrays. (dericofilho) -* bug #752 OrderedUseFixer should be case-insensitive (rusitschka) -* minor #779 Fixed a docblock type (GrahamCampbell) -* minor #765 Typehinting in FileCacheManager, remove unused variable in Tokens (keradus) -* minor #764 SelfUpdateCommand - get local version only if remote version was successfully obtained (keradus) -* minor #761 aling => (keradus) -* minor #757 Some minor code simplify and extra test (keradus) -* minor #713 Download php-cs-fixer.phar without sudo (michaelsauter) -* minor #742 Various Minor Improvements (GrahamCampbell) - -Changelog for v1.1 ------------------- - -* feature #749 remove the --no-progress option (replaced by the standard -v) (fabpot, keradus) -* feature #728 AlignDoubleArrowFixer - standardize whitespace after => (keradus) -* feature #647 Add DoubleArrowMultilineWhitespacesFixer (dericofilho, keradus) -* bug #746 SpacesBeforeSemicolonFixerTest - fix bug with semicolon after comment (keradus) -* bug #741 Fix caching when composer is installed in custom path (cmodijk) -* bug #725 DuplicateSemicolonFixer - fix clearing whitespace after duplicated semicolon (keradus) -* bug #730 Cache busting when fixers list changes (Seldaek) -* bug #722 Fix lint for STDIN-files (ossinkine) -* bug #715 TrailingSpacesFixer - fix bug with french UTF-8 chars (keradus) -* bug #718 Fix package name for composer cache (Seldaek) -* bug #711 correct vendor name (keradus) -* minor #745 Show progress by default and allow to disable it (keradus) -* minor #731 Add a way to disable all default filters and really provide a whitelist (Seldaek) -* minor #737 Extract tool info into new class, self-update command works now only for PHAR version (keradus) -* minor #739 fix fabbot issues (keradus) -* minor #726 update CONTRIBUTING.md for installing dependencies (keradus) -* minor #736 Fix fabbot issues (GrahamCampbell) -* minor #727 Fixed typos (pborreli) -* minor #719 Add update instructions for composer and caching docs (Seldaek) - -Changelog for v1.0 ------------------- - -First stable release. diff --git a/old_vendor/friendsofphp/php-cs-fixer/CONTRIBUTING.md b/old_vendor/friendsofphp/php-cs-fixer/CONTRIBUTING.md deleted file mode 100644 index 1b255018..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/CONTRIBUTING.md +++ /dev/null @@ -1,104 +0,0 @@ -# Contributions Are Welcome! - -If you need any help, don't hesitate to ask the community on [Gitter](https://gitter.im/PHP-CS-Fixer/Lobby). - -## Quick Guide - -### Fixer - -A *fixer* is a class that tries to fix one code style issue (a ``Fixer`` class -must implement ``FixerInterface``). - -### Config - -A *config* knows about the code style rules and the files and directories that -must be scanned by the tool when run in the directory of your project. It is -useful for projects that follow a well-known directory structures (like for -Symfony projects for instance). - -### How-To - -* [Fork](https://help.github.com/articles/fork-a-repo/) the repo. -* [Checkout](https://git-scm.com/docs/git-checkout) the branch you want to make changes on: - * If you are fixing a bug or typo, improving tests or for any small tweak: the lowest branch where the changes can be applied. Once your Pull Request is accepted, the changes will get merged up to highest branches. - * `master` in other cases (new feature, deprecation, or backwards compatibility breaking changes). Note that most of the time, `master` represents the next minor release of PHP CS Fixer, so Pull Requests that break backwards compatibility might be postponed. -* Install dependencies: `composer install`. -* Create a new branch, e.g. `feature-foo` or `bugfix-bar`. -* Make changes. -* If you are adding functionality or fixing a bug - add a test! Prefer adding new test cases over modifying existing ones. -* Make sure there is no wrong file permissions in the repository: `./dev-tools/check_file_permissions.sh`. -* Make sure there is no trailing spaces in the code: `./dev-tools/check_trailing_spaces.sh`. -* Update documentation: `php dev-tools/doc.php`. This requires the highest version of PHP supported by PHP CS Fixer. If it is not installed on your system, you can run it in a Docker container instead: `docker run -it --rm --user="$(id -u):$(id -g)" -w="/app" --volume="$(pwd):/app" php:7.4-cli php dev-tools/doc.php`. -* Install dev tools: `dev-tools/install.sh` -* Run static analysis using PHPStan: `php -d memory_limit=256M dev-tools/vendor/bin/phpstan analyse` -* Check if tests pass: `vendor/bin/phpunit`. -* Fix project itself: `php php-cs-fixer fix`. - -## Working With Docker - -This project provides a Docker setup that allows working on it using any of the supported PHP versions. - -To use it, you first need to install: - - * [Docker](https://docs.docker.com/get-docker/) - * [Docker Compose](https://docs.docker.com/compose/install/) - -Make sure the versions installed support [Compose file format 3.8](https://docs.docker.com/compose/compose-file/). - -Next, copy [`docker-compose.override.yaml.dist`](./docker-compose.override.yaml.dist) to `docker-compose.override.yaml` -and edit it to your needs. The relevant parameters that might require some tweaking have comments to help you. - -You can then build the images: - -```console -docker-compose build --parallel -``` - -Now you can run commands needed to work on the project. For example, say you want to run PHPUnit tests on PHP 7.4: - -```console -docker-compose run php-7.4 vendor/bin/phpunit -``` - -Sometimes it can be more convenient to have a shell inside the container: - -```console -docker-compose run php-7.4 sh -/app vendor/bin/phpunit -``` - -The images come with an [`xdebug` script](github.com/julienfalque/xdebug/) that allows running any PHP command with -Xdebug enabled to help debug problems. - -```console -docker-compose run php-7.4 xdebug vendor/bin/phpunit -``` - -If you're using PhpStorm, you need to create a [server](https://www.jetbrains.com/help/phpstorm/servers.html) with a -name that matches the `PHP_IDE_CONFIG` environment variable defined in the Docker Compose configuration files, which is -`php-cs-fixer` by default. - -All images use port 9003 for debug connections. - -## Opening a [Pull Request](https://help.github.com/articles/about-pull-requests/) - -You can do some things to increase the chance that your Pull Request is accepted the first time: - -* Submit one Pull Request per fix or feature. -* If your changes are not up to date, [rebase](https://git-scm.com/docs/git-rebase) your branch onto the parent branch. -* Follow the conventions used in the project. -* Remember about tests and documentation. -* Don't bump version. - -## Making New Fixers - -There is a [cookbook](doc/cookbook_fixers.rst) with basic instructions on how to build a new fixer. Consider reading it -before opening a PR. - -## Project's Standards - -* [PSR-1: Basic Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) -* [PSR-2: Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) -* [PSR-4: Autoloading Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md) -* [PSR-5: PHPDoc (draft)](https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md) -* [Symfony Coding Standards](https://symfony.com/doc/current/contributing/code/standards.html) diff --git a/old_vendor/friendsofphp/php-cs-fixer/LICENSE b/old_vendor/friendsofphp/php-cs-fixer/LICENSE deleted file mode 100644 index d75d64a5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2022 Fabien Potencier, Dariusz Rumiński - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/old_vendor/friendsofphp/php-cs-fixer/README.md b/old_vendor/friendsofphp/php-cs-fixer/README.md deleted file mode 100644 index 35d5153d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/README.md +++ /dev/null @@ -1,75 +0,0 @@ -

- - PHP CS Fixer logo - -

- -PHP Coding Standards Fixer -========================== - -The PHP Coding Standards Fixer (PHP CS Fixer) tool fixes your code to follow standards; -whether you want to follow PHP coding standards as defined in the PSR-1, PSR-2, etc., -or other community driven ones like the Symfony one. -You can **also** define your (team's) style through configuration. - -It can modernize your code (like converting the ``pow`` function to the ``**`` operator on PHP 5.6) -and (micro) optimize it. - -If you are already using a linter to identify coding standards problems in your -code, you know that fixing them by hand is tedious, especially on large -projects. This tool does not only detect them, but also fixes them for you. - -## Documentation - -### Installation - -The recommended way to install PHP CS Fixer is to use [Composer](https://getcomposer.org/download/) -in a dedicated `composer.json` file in your project, for example in the -`tools/php-cs-fixer` directory: - -```console -mkdir --parents tools/php-cs-fixer -composer require --working-dir=tools/php-cs-fixer friendsofphp/php-cs-fixer -``` - -For more details and other installation methods, see -[installation instructions](./doc/installation.rst). - -### Usage - -Assuming you installed PHP CS Fixer as instructed above, you can run the -following command to fix the files PHP files in the `src` directory: - -```console -tools/php-cs-fixer/vendor/bin/php-cs-fixer fix src -``` - -See [usage](./doc/usage.rst), list of [built-in rules](./doc/rules/index.rst), list of [rule sets](./doc/ruleSets/index.rst) -and [configuration file](./doc/config.rst) documentation for more details. - -If you need to apply code styles that are not supported by the tool, you can -[create custom rules](./doc/custom_rules.rst). - -## Editor Integration - -Dedicated plugins exist for: - -* [Atom](https://github.com/Glavin001/atom-beautify) -* [NetBeans](https://plugins.netbeans.apache.org/catalogue/?id=36) -* [PhpStorm](https://www.jetbrains.com/help/phpstorm/using-php-cs-fixer.html) -* [Sublime Text](https://github.com/benmatselby/sublime-phpcs) -* [Vim](https://github.com/stephpy/vim-php-cs-fixer) -* [VS Code](https://github.com/junstyle/vscode-php-cs-fixer) - -## Community - -The PHP CS Fixer is maintained on GitHub at https://github.com/PHP-CS-Fixer/PHP-CS-Fixer. -Bug reports and ideas about new features are welcome there. - -You can reach us at https://gitter.im/PHP-CS-Fixer/Lobby about the project, -configuration, possible improvements, ideas and questions, please visit us! - -## Contribute - -The tool comes with quite a few built-in fixers, but everyone is more than -welcome to [contribute](CONTRIBUTING.md) more of them. diff --git a/old_vendor/friendsofphp/php-cs-fixer/UPGRADE-v3.md b/old_vendor/friendsofphp/php-cs-fixer/UPGRADE-v3.md deleted file mode 100644 index 00e0a9c5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/UPGRADE-v3.md +++ /dev/null @@ -1,167 +0,0 @@ -UPGRADE GUIDE FROM 2.x to 3.0 -============================= - -This is guide for upgrade from version 2.x to 3.0 for using the CLI tool. - -*Before following this guide, install [v2.19](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/tag/v2.19.0) and run in verbose mode (`php-cs-fixer fix -v`) or in future mode (`PHP_CS_FIXER_FUTURE_MODE=1 php-cs-fixer fix`) to identify deprecations and fix them first.* - -Rename of files ---------------- - -| 2.x | 3.0 | Description | -| ---------------- | ------------------------ | -------------------------------------- | -| `.php_cs` | `.php-cs-fixer.php` | Configuration file (local) | -| `.php_cs.dist` | `.php-cs-fixer.dist.php` | Configuration file (to be distributed) | -| `.php_cs.cache` | `.php-cs-fixer.cache` | Cache file | - -CLI options ------------ - -| 2.x | 3.0 | Description | Note | -| ---------------- | --------------- | ----------------------------------------------- | -------------------------------------- | -| --diff-format | | Type of differ | Option was removed, all diffs are now | -| | | | `udiff` | -| --show-progress | --show-progress | Type of progress indicator | Allowed values were modified: | -| | | | `run-in` and `estimating` was removed, | -| | | | `estimating-max` was renamed to `dots` | -| --rules | --rules | Default value changed from @PSR2 to @PSR12 | | -| --config --rules | | | No longer allowed to pass both | - -Changes to rules ----------------- - -### Renamed rules - -Old name | New name | Note --------- | -------- | ---- -`blank_line_before_return` | `blank_line_before_statement` | use configuration `['statements' => ['return']]` -`final_static_access` | `self_static_accessor` | -`hash_to_slash_comment` | `single_line_comment_style` | use configuration `['comment_types' => ['hash']]` -`lowercase_constants` | `constant_case` | use configuration `['case' => 'lower']` -`method_separation` | `class_attributes_separation` | use configuration `['elements' => ['method']]` -`no_extra_consecutive_blank_lines` | `no_extra_blank_lines` | -`no_multiline_whitespace_before_semicolons` | `multiline_whitespace_before_semicolons` | -`no_short_echo_tag` | `echo_tag_syntax` | use configuration `['format' => 'long']` -`php_unit_ordered_covers` | `phpdoc_order_by_value` | use configuration `['annotations' => [ 'covers' ]]` -`phpdoc_inline_tag` | `general_phpdoc_tag_rename`, `phpdoc_inline_tag_normalizer` and `phpdoc_tag_type` | -`pre_increment` | `increment_style` | use configuration `['style' => 'pre']` -`psr0` | `psr_autoloading` | use configuration `['dir' => x ]` -`psr4` | `psr_autoloading` | -`silenced_deprecation_error` | `error_suppression` | -`trailing_comma_in_multiline_array` | `trailing_comma_in_multiline` | use configuration `['elements' => ['arrays']]` - -### Removed rootless configuration - -Rule | Root option | Note ------------------------------------- | -------------- | ---- -`general_phpdoc_annotation_remove` | `annotations` -`no_extra_consecutive_blank_lines` | `tokens` -`no_spaces_around_offset` | `positions` -`no_unneeded_control_parentheses` | `statements` -`ordered_class_elements` | `order` -`php_unit_construct` | `assertions` -`php_unit_dedicate_assert` | `target` | root option works differently than rootless configuration -`php_unit_strict` | `assertions` -`phpdoc_no_alias_tag` | `replacements` -`phpdoc_return_self_reference` | `replacements` -`random_api_migration` | `replacements` -`single_class_element_per_statement` | `elements` -`visibility_required` | `elements` - -### Changed options - -Rule | Option | Change ----- | ------ | ------ -`binary_operator_spaces` | `align_double_arrow` | option was removed, use `operators` instead -`binary_operator_spaces` | `align_equals` | option was removed use `operators` instead -`blank_line_before_statement` | `statements: die` | option `die` was removed from `statements`, use `exit` instead -`class_attributes_separation` | `elements` | option does no longer accept flat array as a value, use map instead -`class_definition` | `multiLineExtendsEachSingleLine` | option was renamed to `multi_line_extends_each_single_line` -`class_definition` | `singleItemSingleLine` | option was renamed to `single_item_single_line` -`class_definition` | `singleLine` | option was renamed to `single_line` -`doctrine_annotation_spaces` | `around_argument_assignments` | option was removed, use `before_argument_assignments` and `after_argument_assignments` instead -`doctrine_annotation_spaces` | `around_array_assignments` | option was removed, use `after_array_assignments_colon`, `after_array_assignments_equals`, `before_array_assignments_colon` and `before_array_assignments_equals` instead -`final_internal_class` | `annotation-black-list` | option was renamed, use `annotation_exclude` -`final_internal_class` | `annotation-white-list` | option was renamed, use `annotation_include` -`final_internal_class` | `consider-absent-docblock-as-internal-class` | option was renamed, use `consider_absent_docblock_as_internal_class` -`header_comment` | `commentType` | option was renamed to `comment_type` -`is_null` | `use_yoda_style` | option was removed, use `yoda_style` rule instead -`no_extra_consecutive_blank_lines` | `tokens` | one of possible values, `useTrait`, was renamed to `use_trait` -`ordered_class_elements` | `sortAlgorithm` | option was renamed, use `sort_algorithm` instead -`ordered_imports` | `importsOrder` | option was renamed, use `imports_order` -`ordered_imports` | `sortAlgorithm` | option was renamed, use `sort_algorithm` -`php_unit_dedicate_assert` | `functions` | option was removed, use `target` instead -`php_unit_test_annotation` | `case` | option was removed, use `php_unit_method_casing` rule instead - -### Changed default values of options - -Rule | Option | Old value | New value ----- | ---- | ---- | ---- -`array_syntax` | `syntax` | `'long'` | `'short'` -`function_to_constant` | `functions` | `['get_class', 'php_sapi_name', 'phpversion', 'pi']` | `['get_called_class', 'get_class', 'php_sapi_name', 'phpversion', 'pi']` -`list_syntax` | `syntax` | `'long'` | `'short'` -`method_argument_space` | `on_multiline` | `'ignore'` | `'ensure_fully_multiline'` -`native_constant_invocation` | `strict` | `false` | `true` -`native_function_casing` | `include` | `'@internal'` | `'@compiler_optimized'` -`native_function_invocation` | `include` | `'@internal'` | `'@compiler_optimized'` -`native_function_invocation` | `strict` | `false` | `true` -`non_printable_character` | `use_escape_sequences_in_strings` | `false` | `true` (when running on PHP 7.0 and up) -`php_unit_dedicate_assert` | `target` | `'5.0'` | `'newest'` -`phpdoc_align` | `tags` | `['param', 'return', 'throws', 'type', 'var']` | `['method', 'param', 'property', 'return', 'throws', 'type', 'var']` -`phpdoc_scalar` | `types` | `['boolean', 'double', 'integer', 'real', 'str']` | `['boolean', 'callback', 'double', 'integer', 'real', 'str']` - -### Removed rule sets - -Rule set | Note --------- | ---- -`@PHP56Migration` | was empty - -### Rule behavior changes - -- `no_unused_imports` now runs all files defined in the configuration (used to exclude some hardcoded directories) - -### Various - -- `udiff` output now includes the file name in the output (if applicable) - -Code BC changes -=============== - -### Removed; various - -- class `AbstractAlignFixerHelper` has been removed -- class `AccessibleObject` has been removed -- class `AlignDoubleArrowFixerHelper` has been removed -- class `AlignEqualsFixerHelper` has been removed -- class `FixerConfigurationResolverRootless` has been removed -- `HeaderCommentFixer` deprecated properties have been removed -- `MethodArgumentSpaceFixer` deprecated methods have been removed -- `NoMixedEchoPrintFixer` the property `$defaultConfig` has been removed -- class `Tokens`, the following methods has been removed: - - `current()` - - `key()` - - `next()` - - `rewind()` - - `valid()` -- namespace `PhpCsFixer\Test\` and each class in it has been removed, as it served pure development purpose and should not be part of production code - reach out to community if you are willing to help building dev package - -### Interface changes - -- `ConfigurableFixerInterface` has been updated -- `ConfigurationDefinitionFixerInterface` has been removed in favor of the updated `ConfigurableFixerInterface` -- `DefinedFixerInterface` has been removed, related methods are now part of the updated `FixerInterface` interface -- `DifferInterface` has been updated -- `FixerInterface` interface has been updated -- `PhpCsFixer\RuleSetInterface` has been removed in favor of `\PhpCsFixer\RuleSet\RuleSetInterface` - -### BC breaks; various - -- class `Token` is now `final` -- class `Tokens` is now `final` -- method `create` of class `Config` has been removed, [use the constructor](./doc/config.rst) -- method `create` of class `RuleSet` has been removed, [use the constructor](./doc/custom_rules.rst) - -### BC breaks; common internal classes - -- method `getClassyElements` of class `TokensAnalyzer` parameter `$returnTraitsImports` has been removed; now always returns trait import information -- method `getSetDefinitionNames` of class `RuleSet` has been removed, use `RuleSets::getSetDefinitionNames()` diff --git a/old_vendor/friendsofphp/php-cs-fixer/ci-integration.sh b/old_vendor/friendsofphp/php-cs-fixer/ci-integration.sh deleted file mode 100644 index 2521e249..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/ci-integration.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -IFS=' -' -CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "${COMMIT_RANGE}") -if ! echo "${CHANGED_FILES}" | grep -qE "^(\\.php-cs-fixer(\\.dist)?\\.php|composer\\.lock)$"; then EXTRA_ARGS=$(printf -- '--path-mode=intersection\n--\n%s' "${CHANGED_FILES}"); else EXTRA_ARGS=''; fi -vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --dry-run --stop-on-violation --using-cache=no ${EXTRA_ARGS} diff --git a/old_vendor/friendsofphp/php-cs-fixer/composer.json b/old_vendor/friendsofphp/php-cs-fixer/composer.json deleted file mode 100644 index 218dc43c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/composer.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "friendsofphp/php-cs-fixer", - "description": "A tool to automatically fix PHP code style", - "license": "MIT", - "type": "application", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "require": { - "php": "^7.4 || ^8.0", - "ext-json": "*", - "ext-tokenizer": "*", - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "PhpCsFixer\\Tests\\": "tests/" - } - }, - "bin": [ - "php-cs-fixer" - ], - "config": { - "allow-plugins": { - "ergebnis/composer-normalize": true - }, - "sort-packages": true - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/feature-or-bug.rst b/old_vendor/friendsofphp/php-cs-fixer/feature-or-bug.rst deleted file mode 100644 index e5959422..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/feature-or-bug.rst +++ /dev/null @@ -1,24 +0,0 @@ -========================== -Is it a feature or a bug ? -========================== - -Sometimes it's a bit tricky to define if given change proposal or change request is adding new feature or fixing existing issue. This document is providing more clarity about categorisation we use. - -Bug ---- - -Example of bugs: - -- crash during application or rule execution -- wrong changes are applied during "fixing codebase" process -- issue with generated report - -Feature -------- - -Example of features: - -- introduction of new rule -- enhancement of existing rule to cover more cases (for example adding support for newly introduced PHP syntax) -- introduction of new ruleset -- update of existing ruleset (for example adjusting it to match newest style of given community or adding newly implemented rule that was supposed to be followed by style of given community, yet not implemented as a rule before) diff --git a/old_vendor/friendsofphp/php-cs-fixer/logo.md b/old_vendor/friendsofphp/php-cs-fixer/logo.md deleted file mode 100644 index c5f7b399..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/logo.md +++ /dev/null @@ -1,3 +0,0 @@ -The logo is © 2010-2022 Sensio Labs. - -Original resolution can be found at https://github.com/PHP-CS-Fixer/logo . diff --git a/old_vendor/friendsofphp/php-cs-fixer/logo.png b/old_vendor/friendsofphp/php-cs-fixer/logo.png deleted file mode 100644 index 0ee90a821322b4bbb293cb466fd717f8a2ef44df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18627 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 - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED); - -set_error_handler(static function ($severity, $message, $file, $line) { - if ($severity & error_reporting()) { - throw new ErrorException($message, 0, $severity, $file, $line); - } -}); - -// check environment requirements -(function () { - if (\PHP_VERSION_ID === 80000) { - fwrite(STDERR, "PHP CS Fixer is not able run on PHP 8.0.0 due to bug in PHP tokenizer (https://bugs.php.net/bug.php?id=80462).\n"); - fwrite(STDERR, "Update PHP version to unblock execution.\n"); - - exit(1); - } - - if (\PHP_VERSION_ID < 70400 || \PHP_VERSION_ID >= 80200) { - fwrite(STDERR, "PHP needs to be a minimum version of PHP 7.4.0 and maximum version of PHP 8.1.*.\n"); - fwrite(STDERR, 'Current PHP version: '.PHP_VERSION.".\n"); - - if (getenv('PHP_CS_FIXER_IGNORE_ENV')) { - fwrite(STDERR, "Ignoring environment requirements because `PHP_CS_FIXER_IGNORE_ENV` is set. Execution may be unstable.\n"); - } else { - fwrite(STDERR, "To ignore this requirement please set `PHP_CS_FIXER_IGNORE_ENV`.\n"); - fwrite(STDERR, "If you use PHP version higher than supported, you may experience code modified in a wrong way.\n"); - fwrite(STDERR, "Please report such cases at https://github.com/PHP-CS-Fixer/PHP-CS-Fixer .\n"); - - exit(1); - } - } - - foreach (['json', 'tokenizer'] as $extension) { - if (!extension_loaded($extension)) { - fwrite(STDERR, sprintf("PHP extension ext-%s is missing from your system. Install or enable it.\n", $extension)); - - if (getenv('PHP_CS_FIXER_IGNORE_ENV')) { - fwrite(STDERR, "Ignoring environment requirements because `PHP_CS_FIXER_IGNORE_ENV` is set. Execution may be unstable.\n"); - } else { - exit(1); - } - } - } -})(); - -// load dependencies -(function () { - $require = true; - if (class_exists('Phar')) { - // Maybe this file is used as phar-stub? Let's try! - try { - Phar::mapPhar('php-cs-fixer.phar'); - - require_once 'phar://php-cs-fixer.phar/vendor/autoload.php'; - $require = false; - } catch (PharException $e) { - } - } - - if ($require) { - // OK, it's not, let give Composer autoloader a try! - $possibleFiles = [__DIR__.'/../../autoload.php', __DIR__.'/../autoload.php', __DIR__.'/vendor/autoload.php']; - $file = null; - foreach ($possibleFiles as $possibleFile) { - if (file_exists($possibleFile)) { - $file = $possibleFile; - - break; - } - } - - if (null === $file) { - throw new RuntimeException('Unable to locate autoload.php file.'); - } - - require_once $file; - } -})(); - -use Composer\XdebugHandler\XdebugHandler; -use PhpCsFixer\Console\Application; - -// Restart if xdebug is loaded, unless the environment variable PHP_CS_FIXER_ALLOW_XDEBUG is set. -$xdebug = new XdebugHandler('PHP_CS_FIXER'); -$xdebug->check(); -unset($xdebug); - -$application = new Application(); -$application->run(); - -__HALT_COMPILER(); diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php deleted file mode 100644 index e55e184d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php +++ /dev/null @@ -1,238 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Doctrine\Annotation\Tokens as DoctrineAnnotationTokens; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @internal - */ -abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private array $classyElements; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // fetch indices one time, this is safe as we never add or remove a token during fixing - $analyzer = new TokensAnalyzer($tokens); - $this->classyElements = $analyzer->getClassyElements(); - - /** @var Token $docCommentToken */ - foreach ($tokens->findGivenKind(T_DOC_COMMENT) as $index => $docCommentToken) { - if (!$this->nextElementAcceptsDoctrineAnnotations($tokens, $index)) { - continue; - } - - $doctrineAnnotationTokens = DoctrineAnnotationTokens::createFromDocComment( - $docCommentToken, - $this->configuration['ignored_tags'] - ); - - $this->fixAnnotations($doctrineAnnotationTokens); - $tokens[$index] = new Token([T_DOC_COMMENT, $doctrineAnnotationTokens->getCode()]); - } - } - - /** - * Fixes Doctrine annotations from the given PHPDoc style comment. - */ - abstract protected function fixAnnotations(DoctrineAnnotationTokens $doctrineAnnotationTokens): void; - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('ignored_tags', 'List of tags that must not be treated as Doctrine Annotations.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $values): bool { - foreach ($values as $value) { - if (!\is_string($value)) { - return false; - } - } - - return true; - }]) - ->setDefault([ - // PHPDocumentor 1 - 'abstract', - 'access', - 'code', - 'deprec', - 'encode', - 'exception', - 'final', - 'ingroup', - 'inheritdoc', - 'inheritDoc', - 'magic', - 'name', - 'toc', - 'tutorial', - 'private', - 'static', - 'staticvar', - 'staticVar', - 'throw', - - // PHPDocumentor 2 - 'api', - 'author', - 'category', - 'copyright', - 'deprecated', - 'example', - 'filesource', - 'global', - 'ignore', - 'internal', - 'license', - 'link', - 'method', - 'package', - 'param', - 'property', - 'property-read', - 'property-write', - 'return', - 'see', - 'since', - 'source', - 'subpackage', - 'throws', - 'todo', - 'TODO', - 'usedBy', - 'uses', - 'var', - 'version', - - // PHPUnit - 'after', - 'afterClass', - 'backupGlobals', - 'backupStaticAttributes', - 'before', - 'beforeClass', - 'codeCoverageIgnore', - 'codeCoverageIgnoreStart', - 'codeCoverageIgnoreEnd', - 'covers', - 'coversDefaultClass', - 'coversNothing', - 'dataProvider', - 'depends', - 'expectedException', - 'expectedExceptionCode', - 'expectedExceptionMessage', - 'expectedExceptionMessageRegExp', - 'group', - 'large', - 'medium', - 'preserveGlobalState', - 'requires', - 'runTestsInSeparateProcesses', - 'runInSeparateProcess', - 'small', - 'test', - 'testdox', - 'ticket', - 'uses', - - // PHPCheckStyle - 'SuppressWarnings', - - // PHPStorm - 'noinspection', - - // PEAR - 'package_version', - - // PlantUML - 'enduml', - 'startuml', - - // Psalm - 'psalm', - - // PHPStan - 'phpstan', - 'template', - - // other - 'fix', - 'FIXME', - 'fixme', - 'override', - ]) - ->getOption(), - ]); - } - - private function nextElementAcceptsDoctrineAnnotations(Tokens $tokens, int $index): bool - { - do { - $index = $tokens->getNextMeaningfulToken($index); - - if (null === $index) { - return false; - } - } while ($tokens[$index]->isGivenKind([T_ABSTRACT, T_FINAL])); - - if ($tokens[$index]->isGivenKind(T_CLASS)) { - return true; - } - - $modifierKinds = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_FINAL, T_ABSTRACT, T_NS_SEPARATOR, T_STRING, CT::T_NULLABLE_TYPE]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $modifierKinds[] = T_READONLY; - } - - while ($tokens[$index]->isGivenKind($modifierKinds)) { - $index = $tokens->getNextMeaningfulToken($index); - } - - if (!isset($this->classyElements[$index])) { - return false; - } - - return $tokens[$this->classyElements[$index]['classIndex']]->isGivenKind(T_CLASS); // interface, enums and traits cannot have doctrine annotations - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php deleted file mode 100644 index cdb46059..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php +++ /dev/null @@ -1,206 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\ConfigurationException\InvalidForEnvFixerConfigurationException; -use PhpCsFixer\ConfigurationException\RequiredFixerConfigurationException; -use PhpCsFixer\Console\Application; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\InvalidOptionsForEnvException; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\ExceptionInterface; -use Symfony\Component\OptionsResolver\Exception\MissingOptionsException; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -abstract class AbstractFixer implements FixerInterface -{ - /** - * @var null|array - */ - protected $configuration; - - /** - * @var WhitespacesFixerConfig - */ - protected $whitespacesConfig; - - /** - * @var null|FixerConfigurationResolverInterface - */ - private $configurationDefinition; - - public function __construct() - { - if ($this instanceof ConfigurableFixerInterface) { - try { - $this->configure([]); - } catch (RequiredFixerConfigurationException $e) { - // ignore - } - } - - if ($this instanceof WhitespacesAwareFixerInterface) { - $this->whitespacesConfig = $this->getDefaultWhitespacesFixerConfig(); - } - } - - final public function fix(\SplFileInfo $file, Tokens $tokens): void - { - if ($this instanceof ConfigurableFixerInterface && null === $this->configuration) { - throw new RequiredFixerConfigurationException($this->getName(), 'Configuration is required.'); - } - - if (0 < $tokens->count() && $this->isCandidate($tokens) && $this->supports($file)) { - $this->applyFix($file, $tokens); - } - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return false; - } - - /** - * {@inheritdoc} - */ - public function getName(): string - { - $nameParts = explode('\\', static::class); - $name = substr(end($nameParts), 0, -\strlen('Fixer')); - - return Utils::camelCaseToUnderscore($name); - } - - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function supports(\SplFileInfo $file): bool - { - return true; - } - - /** - * @param array $configuration - */ - public function configure(array $configuration): void - { - if (!$this instanceof ConfigurableFixerInterface) { - throw new \LogicException('Cannot configure using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".'); - } - - foreach ($this->getConfigurationDefinition()->getOptions() as $option) { - if (!$option instanceof DeprecatedFixerOption) { - continue; - } - - $name = $option->getName(); - if (\array_key_exists($name, $configuration)) { - Utils::triggerDeprecation(new \InvalidArgumentException(sprintf( - 'Option "%s" for rule "%s" is deprecated and will be removed in version %d.0. %s', - $name, - $this->getName(), - Application::getMajorVersion() + 1, - str_replace('`', '"', $option->getDeprecationMessage()) - ))); - } - } - - try { - $this->configuration = $this->getConfigurationDefinition()->resolve($configuration); - } catch (MissingOptionsException $exception) { - throw new RequiredFixerConfigurationException( - $this->getName(), - sprintf('Missing required configuration: %s', $exception->getMessage()), - $exception - ); - } catch (InvalidOptionsForEnvException $exception) { - throw new InvalidForEnvFixerConfigurationException( - $this->getName(), - sprintf('Invalid configuration for env: %s', $exception->getMessage()), - $exception - ); - } catch (ExceptionInterface $exception) { - throw new InvalidFixerConfigurationException( - $this->getName(), - sprintf('Invalid configuration: %s', $exception->getMessage()), - $exception - ); - } - } - - public function getConfigurationDefinition(): FixerConfigurationResolverInterface - { - if (!$this instanceof ConfigurableFixerInterface) { - throw new \LogicException(sprintf('Cannot get configuration definition using Abstract parent, child "%s" not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".', static::class)); - } - - if (null === $this->configurationDefinition) { - $this->configurationDefinition = $this->createConfigurationDefinition(); - } - - return $this->configurationDefinition; - } - - public function setWhitespacesConfig(WhitespacesFixerConfig $config): void - { - if (!$this instanceof WhitespacesAwareFixerInterface) { - throw new \LogicException('Cannot run method for class not implementing "PhpCsFixer\Fixer\WhitespacesAwareFixerInterface".'); - } - - $this->whitespacesConfig = $config; - } - - abstract protected function applyFix(\SplFileInfo $file, Tokens $tokens): void; - - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - if (!$this instanceof ConfigurableFixerInterface) { - throw new \LogicException('Cannot create configuration definition using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".'); - } - - throw new \LogicException('Not implemented.'); - } - - private function getDefaultWhitespacesFixerConfig(): WhitespacesFixerConfig - { - static $defaultWhitespacesFixerConfig = null; - - if (null === $defaultWhitespacesFixerConfig) { - $defaultWhitespacesFixerConfig = new WhitespacesFixerConfig(' ', "\n"); - } - - return $defaultWhitespacesFixerConfig; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php deleted file mode 100644 index e9d7a120..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFopenFlagFixer.php +++ /dev/null @@ -1,122 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -abstract class AbstractFopenFlagFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAllTokenKindsFound([T_STRING, T_CONSTANT_ENCAPSED_STRING]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - $index = 0; - $end = $tokens->count() - 1; - while (true) { - $candidate = $this->find('fopen', $tokens, $index, $end); - - if (null === $candidate) { - break; - } - - $index = $candidate[1]; // proceed to '(' of `fopen` - - // fetch arguments - $arguments = $argumentsAnalyzer->getArguments( - $tokens, - $index, - $candidate[2] - ); - - $argumentsCount = \count($arguments); // argument count sanity check - - if ($argumentsCount < 2 || $argumentsCount > 4) { - continue; - } - - $argumentStartIndex = array_keys($arguments)[1]; // get second argument index - - $this->fixFopenFlagToken( - $tokens, - $argumentStartIndex, - $arguments[$argumentStartIndex] - ); - } - } - - abstract protected function fixFopenFlagToken(Tokens $tokens, int $argumentStartIndex, int $argumentEndIndex): void; - - protected function isValidModeString(string $mode): bool - { - $modeLength = \strlen($mode); - if ($modeLength < 1 || $modeLength > 13) { // 13 === length 'r+w+a+x+c+etb' - return false; - } - - $validFlags = [ - 'a' => true, - 'b' => true, - 'c' => true, - 'e' => true, - 'r' => true, - 't' => true, - 'w' => true, - 'x' => true, - ]; - - if (!isset($validFlags[$mode[0]])) { - return false; - } - - unset($validFlags[$mode[0]]); - - for ($i = 1; $i < $modeLength; ++$i) { - if (isset($validFlags[$mode[$i]])) { - unset($validFlags[$mode[$i]]); - - continue; - } - - if ('+' !== $mode[$i] - || ( - 'a' !== $mode[$i - 1] // 'a+','c+','r+','w+','x+' - && 'c' !== $mode[$i - 1] - && 'r' !== $mode[$i - 1] - && 'w' !== $mode[$i - 1] - && 'x' !== $mode[$i - 1] - ) - ) { - return false; - } - } - - return true; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php deleted file mode 100644 index 350b87cf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php +++ /dev/null @@ -1,80 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - * - * @author Vladimir Reznichenko - */ -abstract class AbstractFunctionReferenceFixer extends AbstractFixer -{ - /** - * @var null|FunctionsAnalyzer - */ - private $functionsAnalyzer; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * Looks up Tokens sequence for suitable candidates and delivers boundaries information, - * which can be supplied by other methods in this abstract class. - * - * @return null|int[] returns $functionName, $openParenthesis, $closeParenthesis packed into array - */ - protected function find(string $functionNameToSearch, Tokens $tokens, int $start = 0, ?int $end = null): ?array - { - if (null === $this->functionsAnalyzer) { - $this->functionsAnalyzer = new FunctionsAnalyzer(); - } - - // make interface consistent with findSequence - $end ??= $tokens->count(); - - // find raw sequence which we can analyse for context - $candidateSequence = [[T_STRING, $functionNameToSearch], '(']; - $matches = $tokens->findSequence($candidateSequence, $start, $end, false); - - if (null === $matches) { - return null; // not found, simply return without further attempts - } - - // translate results for humans - [$functionName, $openParenthesis] = array_keys($matches); - - if (!$this->functionsAnalyzer->isGlobalFunctionCall($tokens, $functionName)) { - return $this->find($functionNameToSearch, $tokens, $openParenthesis, $end); - } - - return [$functionName, $openParenthesis, $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesis)]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php deleted file mode 100644 index f574b970..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractLinesBeforeNamespaceFixer.php +++ /dev/null @@ -1,120 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * This abstract fixer is responsible for ensuring that a certain number of - * lines prefix a namespace declaration. - * - * @author Graham Campbell - * - * @internal - */ -abstract class AbstractLinesBeforeNamespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * Make sure # of line breaks prefixing namespace is within given range. - * - * @param int $expectedMin min. # of line breaks - * @param int $expectedMax max. # of line breaks - */ - protected function fixLinesBeforeNamespace(Tokens $tokens, int $index, int $expectedMin, int $expectedMax): void - { - // Let's determine the total numbers of new lines before the namespace - // and the opening token - $openingTokenIndex = null; - $precedingNewlines = 0; - $newlineInOpening = false; - $openingToken = null; - - for ($i = 1; $i <= 2; ++$i) { - if (isset($tokens[$index - $i])) { - $token = $tokens[$index - $i]; - - if ($token->isGivenKind(T_OPEN_TAG)) { - $openingToken = $token; - $openingTokenIndex = $index - $i; - $newlineInOpening = str_contains($token->getContent(), "\n"); - - if ($newlineInOpening) { - ++$precedingNewlines; - } - - break; - } - - if (false === $token->isGivenKind(T_WHITESPACE)) { - break; - } - - $precedingNewlines += substr_count($token->getContent(), "\n"); - } - } - - if ($precedingNewlines >= $expectedMin && $precedingNewlines <= $expectedMax) { - return; - } - - $previousIndex = $index - 1; - $previous = $tokens[$previousIndex]; - - if (0 === $expectedMax) { - // Remove all the previous new lines - if ($previous->isWhitespace()) { - $tokens->clearAt($previousIndex); - } - - // Remove new lines in opening token - if ($newlineInOpening) { - $tokens[$openingTokenIndex] = new Token([T_OPEN_TAG, rtrim($openingToken->getContent()).' ']); - } - - return; - } - - $lineEnding = $this->whitespacesConfig->getLineEnding(); - $newlinesForWhitespaceToken = $expectedMax; - - if (null !== $openingToken) { - // Use the configured line ending for the PHP opening tag - $content = rtrim($openingToken->getContent()); - $newContent = $content.$lineEnding; - $tokens[$openingTokenIndex] = new Token([T_OPEN_TAG, $newContent]); - --$newlinesForWhitespaceToken; - } - - if (0 === $newlinesForWhitespaceToken) { - // We have all the needed new lines in the opening tag - if ($previous->isWhitespace()) { - // Let's remove the previous token containing extra new lines - $tokens->clearAt($previousIndex); - } - - return; - } - - if ($previous->isWhitespace()) { - // Fix the previous whitespace token - $tokens[$previousIndex] = new Token([T_WHITESPACE, str_repeat($lineEnding, $newlinesForWhitespaceToken).substr($previous->getContent(), strrpos($previous->getContent(), "\n") + 1)]); - } else { - // Add a new whitespace token - $tokens->insertAt($index, new Token([T_WHITESPACE, str_repeat($lineEnding, $newlinesForWhitespaceToken)])); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php deleted file mode 100644 index 96f6bb09..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractNoUselessElseFixer.php +++ /dev/null @@ -1,207 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Tokenizer\Tokens; - -abstract class AbstractNoUselessElseFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // should be run before NoWhitespaceInBlankLineFixer, NoExtraBlankLinesFixer, BracesFixer and after NoEmptyStatementFixer. - return 39; - } - - protected function isSuperfluousElse(Tokens $tokens, int $index): bool - { - $previousBlockStart = $index; - - do { - // Check if all 'if', 'else if ' and 'elseif' blocks above this 'else' always end, - // if so this 'else' is overcomplete. - [$previousBlockStart, $previousBlockEnd] = $this->getPreviousBlock($tokens, $previousBlockStart); - - // short 'if' detection - $previous = $previousBlockEnd; - if ($tokens[$previous]->equals('}')) { - $previous = $tokens->getPrevMeaningfulToken($previous); - } - - if ( - !$tokens[$previous]->equals(';') // 'if' block doesn't end with semicolon, keep 'else' - || $tokens[$tokens->getPrevMeaningfulToken($previous)]->equals('{') // empty 'if' block, keep 'else' - ) { - return false; - } - - $candidateIndex = $tokens->getPrevTokenOfKind( - $previous, - [ - ';', - [T_BREAK], - [T_CLOSE_TAG], - [T_CONTINUE], - [T_EXIT], - [T_GOTO], - [T_IF], - [T_RETURN], - [T_THROW], - ] - ); - - if (null === $candidateIndex || $tokens[$candidateIndex]->equalsAny([';', [T_CLOSE_TAG], [T_IF]])) { - return false; - } - - if ($tokens[$candidateIndex]->isGivenKind(T_THROW)) { - $previousIndex = $tokens->getPrevMeaningfulToken($candidateIndex); - - if (!$tokens[$previousIndex]->equalsAny([';', '{'])) { - return false; - } - } - - if ($this->isInConditional($tokens, $candidateIndex, $previousBlockStart) - || $this->isInConditionWithoutBraces($tokens, $candidateIndex, $previousBlockStart) - ) { - return false; - } - - // implicit continue, i.e. delete candidate - } while (!$tokens[$previousBlockStart]->isGivenKind(T_IF)); - - return true; - } - - /** - * Return the first and last token index of the previous block. - * - * [0] First is either T_IF, T_ELSE or T_ELSEIF - * [1] Last is either '}' or ';' / T_CLOSE_TAG for short notation blocks - * - * @param int $index T_IF, T_ELSE, T_ELSEIF - * - * @return int[] - */ - private function getPreviousBlock(Tokens $tokens, int $index): array - { - $close = $previous = $tokens->getPrevMeaningfulToken($index); - // short 'if' detection - if ($tokens[$close]->equals('}')) { - $previous = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $close); - } - - $open = $tokens->getPrevTokenOfKind($previous, [[T_IF], [T_ELSE], [T_ELSEIF]]); - if ($tokens[$open]->isGivenKind(T_IF)) { - $elseCandidate = $tokens->getPrevMeaningfulToken($open); - if ($tokens[$elseCandidate]->isGivenKind(T_ELSE)) { - $open = $elseCandidate; - } - } - - return [$open, $close]; - } - - /** - * @param int $index Index of the token to check - * @param int $lowerLimitIndex Lower limit index. Since the token to check will always be in a conditional we must stop checking at this index - */ - private function isInConditional(Tokens $tokens, int $index, int $lowerLimitIndex): bool - { - $candidateIndex = $tokens->getPrevTokenOfKind($index, [')', ';', ':']); - if ($tokens[$candidateIndex]->equals(':')) { - return true; - } - - if (!$tokens[$candidateIndex]->equals(')')) { - return false; // token is ';' or close tag - } - - // token is always ')' here. - // If it is part of the condition the token is always in, return false. - // If it is not it is a nested condition so return true - $open = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $candidateIndex); - - return $tokens->getPrevMeaningfulToken($open) > $lowerLimitIndex; - } - - /** - * For internal use only, as it is not perfect. - * - * Returns if the token at given index is part of an if/elseif/else statement - * without {}. Assumes not passing the last `;`/close tag of the statement, not - * out of range index, etc. - * - * @param int $index Index of the token to check - */ - private function isInConditionWithoutBraces(Tokens $tokens, int $index, int $lowerLimitIndex): bool - { - do { - if ($tokens[$index]->isComment() || $tokens[$index]->isWhitespace()) { - $index = $tokens->getPrevMeaningfulToken($index); - } - - $token = $tokens[$index]; - if ($token->isGivenKind([T_IF, T_ELSEIF, T_ELSE])) { - return true; - } - - if ($token->equals(';')) { - return false; - } - - if ($token->equals('{')) { - $index = $tokens->getPrevMeaningfulToken($index); - - // OK if belongs to: for, do, while, foreach - // Not OK if belongs to: if, else, elseif - if ($tokens[$index]->isGivenKind(T_DO)) { - --$index; - - continue; - } - - if (!$tokens[$index]->equals(')')) { - return false; // like `else {` - } - - $index = $tokens->findBlockStart( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $index - ); - - $index = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$index]->isGivenKind([T_IF, T_ELSEIF])) { - return false; - } - } elseif ($token->equals(')')) { - $type = Tokens::detectBlockType($token); - $index = $tokens->findBlockStart( - $type['type'], - $index - ); - - $index = $tokens->getPrevMeaningfulToken($index); - } else { - --$index; - } - } while ($index > $lowerLimitIndex); - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php deleted file mode 100644 index cefecb5f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php +++ /dev/null @@ -1,225 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const CLASS_REGEX = '/^\\\\?[a-zA-Z_\\x7f-\\xff](?:\\\\?[a-zA-Z0-9_\\x7f-\\xff]+)*$/'; - - /** - * @var array - */ - private array $versionSpecificTypes = [ - 'void' => 70100, - 'iterable' => 70100, - 'object' => 70200, - 'mixed' => 80000, - ]; - - /** - * @var array - */ - private array $scalarTypes = [ - 'bool' => true, - 'float' => true, - 'int' => true, - 'string' => true, - ]; - - /** - * @var array - */ - private static array $syntaxValidationCache = []; - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - abstract protected function isSkippedType(string $type): bool; - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('scalar_types', 'Fix also scalar types; may have unexpected behaviour due to PHP bad type coercion system.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * @param int $index The index of the function token - */ - protected function findFunctionDocComment(Tokens $tokens, int $index): ?int - { - do { - $index = $tokens->getPrevNonWhitespace($index); - } while ($tokens[$index]->isGivenKind([ - T_COMMENT, - T_ABSTRACT, - T_FINAL, - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_STATIC, - ])); - - if ($tokens[$index]->isGivenKind(T_DOC_COMMENT)) { - return $index; - } - - return null; - } - - /** - * @return Annotation[] - */ - protected function getAnnotationsFromDocComment(string $name, Tokens $tokens, int $docCommentIndex): array - { - $namespacesAnalyzer = new NamespacesAnalyzer(); - $namespace = $namespacesAnalyzer->getNamespaceAt($tokens, $docCommentIndex); - - $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); - $namespaceUses = $namespaceUsesAnalyzer->getDeclarationsInNamespace($tokens, $namespace); - - $doc = new DocBlock( - $tokens[$docCommentIndex]->getContent(), - $namespace, - $namespaceUses - ); - - return $doc->getAnnotationsOfType($name); - } - - /** - * @return Token[] - */ - protected function createTypeDeclarationTokens(string $type, bool $isNullable): array - { - static $specialTypes = [ - 'array' => [CT::T_ARRAY_TYPEHINT, 'array'], - 'callable' => [T_CALLABLE, 'callable'], - 'static' => [T_STATIC, 'static'], - ]; - - $newTokens = []; - - if (true === $isNullable && 'mixed' !== $type) { - $newTokens[] = new Token([CT::T_NULLABLE_TYPE, '?']); - } - - if (isset($specialTypes[$type])) { - $newTokens[] = new Token($specialTypes[$type]); - } else { - $typeUnqualified = ltrim($type, '\\'); - - if (isset($this->scalarTypes[$typeUnqualified]) || isset($this->versionSpecificTypes[$typeUnqualified])) { - // 'scalar's, 'void', 'iterable' and 'object' must be unqualified - $newTokens[] = new Token([T_STRING, $typeUnqualified]); - } else { - foreach (explode('\\', $type) as $nsIndex => $value) { - if (0 === $nsIndex && '' === $value) { - continue; - } - - if (0 < $nsIndex) { - $newTokens[] = new Token([T_NS_SEPARATOR, '\\']); - } - - $newTokens[] = new Token([T_STRING, $value]); - } - } - } - - return $newTokens; - } - - /** - * @return null|array{string, bool} - */ - protected function getCommonTypeFromAnnotation(Annotation $annotation, bool $isReturnType): ?array - { - $typesExpression = $annotation->getTypeExpression(); - - $commonType = $typesExpression->getCommonType(); - $isNullable = $typesExpression->allowsNull(); - - if (null === $commonType) { - return null; - } - - if ($isNullable && 'void' === $commonType) { - return null; - } - - if ('static' === $commonType && (!$isReturnType || \PHP_VERSION_ID < 80000)) { - $commonType = 'self'; - } - - if ($this->isSkippedType($commonType)) { - return null; - } - - if (isset($this->versionSpecificTypes[$commonType]) && \PHP_VERSION_ID < $this->versionSpecificTypes[$commonType]) { - return null; - } - - if (isset($this->scalarTypes[$commonType])) { - if (false === $this->configuration['scalar_types']) { - return null; - } - } elseif (1 !== Preg::match(self::CLASS_REGEX, $commonType)) { - return null; - } - - return [$commonType, $isNullable]; - } - - final protected function isValidSyntax(string $code): bool - { - if (!isset(self::$syntaxValidationCache[$code])) { - try { - Tokens::fromCode($code); - self::$syntaxValidationCache[$code] = true; - } catch (\ParseError $e) { - self::$syntaxValidationCache[$code] = false; - } - } - - return self::$syntaxValidationCache[$code]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php deleted file mode 100644 index 153987a0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php +++ /dev/null @@ -1,128 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * This abstract fixer provides a base for fixers to fix types in PHPDoc. - * - * @author Graham Campbell - * - * @internal - */ -abstract class AbstractPhpdocTypesFixer extends AbstractFixer -{ - /** - * The annotation tags search inside. - * - * @var string[] - */ - protected array $tags; - - /** - * {@inheritdoc} - */ - public function __construct() - { - parent::__construct(); - - $this->tags = Annotation::getTagsWithTypes(); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $annotations = $doc->getAnnotationsOfType($this->tags); - - if (0 === \count($annotations)) { - continue; - } - - foreach ($annotations as $annotation) { - $this->fixTypes($annotation); - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - /** - * Actually normalize the given type. - */ - abstract protected function normalize(string $type): string; - - /** - * Fix the types at the given line. - * - * We must be super careful not to modify parts of words. - * - * This will be nicely handled behind the scenes for us by the annotation class. - */ - private function fixTypes(Annotation $annotation): void - { - $types = $annotation->getTypes(); - - $new = $this->normalizeTypes($types); - - if ($types !== $new) { - $annotation->setTypes($new); - } - } - - /** - * @param string[] $types - * - * @return string[] - */ - private function normalizeTypes(array $types): array - { - foreach ($types as $index => $type) { - $types[$index] = $this->normalizeType($type); - } - - return $types; - } - - /** - * Prepare the type and normalize it. - */ - private function normalizeType(string $type): string - { - return str_ends_with($type, '[]') - ? $this->normalizeType(substr($type, 0, -2)).'[]' - : $this->normalize($type) - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php deleted file mode 100644 index 97a86d1d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/AbstractProxyFixer.php +++ /dev/null @@ -1,124 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -abstract class AbstractProxyFixer extends AbstractFixer -{ - /** - * @var array - */ - protected array $proxyFixers = []; - - public function __construct() - { - foreach (Utils::sortFixers($this->createProxyFixers()) as $proxyFixer) { - $this->proxyFixers[$proxyFixer->getName()] = $proxyFixer; - } - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - foreach ($this->proxyFixers as $fixer) { - if ($fixer->isCandidate($tokens)) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - foreach ($this->proxyFixers as $fixer) { - if ($fixer->isRisky()) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - if (\count($this->proxyFixers) > 1) { - throw new \LogicException('You need to override this method to provide the priority of combined fixers.'); - } - - return reset($this->proxyFixers)->getPriority(); - } - - /** - * {@inheritdoc} - */ - public function supports(\SplFileInfo $file): bool - { - foreach ($this->proxyFixers as $fixer) { - if ($fixer->supports($file)) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function setWhitespacesConfig(WhitespacesFixerConfig $config): void - { - parent::setWhitespacesConfig($config); - - foreach ($this->proxyFixers as $fixer) { - if ($fixer instanceof WhitespacesAwareFixerInterface) { - $fixer->setWhitespacesConfig($config); - } - } - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($this->proxyFixers as $fixer) { - $fixer->fix($file, $tokens); - } - } - - /** - * @return FixerInterface[] - */ - abstract protected function createProxyFixers(): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php deleted file mode 100644 index 8793630b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php +++ /dev/null @@ -1,137 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -final class Cache implements CacheInterface -{ - private SignatureInterface $signature; - - /** - * @var array - */ - private array $hashes = []; - - public function __construct(SignatureInterface $signature) - { - $this->signature = $signature; - } - - public function getSignature(): SignatureInterface - { - return $this->signature; - } - - public function has(string $file): bool - { - return \array_key_exists($file, $this->hashes); - } - - public function get(string $file): ?string - { - if (!$this->has($file)) { - return null; - } - - return $this->hashes[$file]; - } - - public function set(string $file, string $hash): void - { - $this->hashes[$file] = $hash; - } - - public function clear(string $file): void - { - unset($this->hashes[$file]); - } - - public function toJson(): string - { - $json = json_encode([ - 'php' => $this->getSignature()->getPhpVersion(), - 'version' => $this->getSignature()->getFixerVersion(), - 'indent' => $this->getSignature()->getIndent(), - 'lineEnding' => $this->getSignature()->getLineEnding(), - 'rules' => $this->getSignature()->getRules(), - 'hashes' => $this->hashes, - ]); - - if (JSON_ERROR_NONE !== json_last_error()) { - throw new \UnexpectedValueException(sprintf( - 'Cannot encode cache signature to JSON, error: "%s". If you have non-UTF8 chars in your signature, like in license for `header_comment`, consider enabling `ext-mbstring` or install `symfony/polyfill-mbstring`.', - json_last_error_msg() - )); - } - - return $json; - } - - /** - * @throws \InvalidArgumentException - */ - public static function fromJson(string $json): self - { - $data = json_decode($json, true); - - if (null === $data && JSON_ERROR_NONE !== json_last_error()) { - throw new \InvalidArgumentException(sprintf( - 'Value needs to be a valid JSON string, got "%s", error: "%s".', - $json, - json_last_error_msg() - )); - } - - $requiredKeys = [ - 'php', - 'version', - 'indent', - 'lineEnding', - 'rules', - 'hashes', - ]; - - $missingKeys = array_diff_key(array_flip($requiredKeys), $data); - - if (\count($missingKeys) > 0) { - throw new \InvalidArgumentException(sprintf( - 'JSON data is missing keys "%s"', - implode('", "', $missingKeys) - )); - } - - $signature = new Signature( - $data['php'], - $data['version'], - $data['indent'], - $data['lineEnding'], - $data['rules'] - ); - - $cache = new self($signature); - - $cache->hashes = array_map(function ($v): string { - // before v3.11.1 the hashes were crc32 encoded and saved as integers - // @TODO: remove the to string cast/array_map in v4.0 - return \is_int($v) ? (string) $v : $v; - }, $data['hashes']); - - return $cache; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php deleted file mode 100644 index 29ab7197..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheInterface.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -interface CacheInterface -{ - public function getSignature(): SignatureInterface; - - public function has(string $file): bool; - - public function get(string $file): ?string; - - public function set(string $file, string $hash): void; - - public function clear(string $file): void; - - public function toJson(): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php deleted file mode 100644 index 4e82d0c9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/CacheManagerInterface.php +++ /dev/null @@ -1,27 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -interface CacheManagerInterface -{ - public function needFixing(string $file, string $fileContent): bool; - - public function setFile(string $file, string $fileContent): void; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php deleted file mode 100644 index 90882af0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php +++ /dev/null @@ -1,52 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class Directory implements DirectoryInterface -{ - private string $directoryName; - - public function __construct(string $directoryName) - { - $this->directoryName = $directoryName; - } - - /** - * {@inheritdoc} - */ - public function getRelativePathTo(string $file): string - { - $file = $this->normalizePath($file); - - if ( - '' === $this->directoryName - || 0 !== stripos($file, $this->directoryName.\DIRECTORY_SEPARATOR) - ) { - return $file; - } - - return substr($file, \strlen($this->directoryName) + 1); - } - - private function normalizePath(string $path): string - { - return str_replace(['\\', '/'], \DIRECTORY_SEPARATOR, $path); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php deleted file mode 100644 index 2fdce86a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/DirectoryInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Dariusz Rumiński - */ -interface DirectoryInterface -{ - public function getRelativePathTo(string $file): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php deleted file mode 100644 index d17afb8c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php +++ /dev/null @@ -1,129 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * Class supports caching information about state of fixing files. - * - * Cache is supported only for phar version and version installed via composer. - * - * File will be processed by PHP CS Fixer only if any of the following conditions is fulfilled: - * - cache is corrupt - * - fixer version changed - * - rules changed - * - file is new - * - file changed - * - * @author Dariusz Rumiński - * - * @internal - */ -final class FileCacheManager implements CacheManagerInterface -{ - private FileHandlerInterface $handler; - - private SignatureInterface $signature; - - private bool $isDryRun; - - private DirectoryInterface $cacheDirectory; - - /** - * @var CacheInterface - */ - private $cache; - - public function __construct( - FileHandlerInterface $handler, - SignatureInterface $signature, - bool $isDryRun = false, - ?DirectoryInterface $cacheDirectory = null - ) { - $this->handler = $handler; - $this->signature = $signature; - $this->isDryRun = $isDryRun; - $this->cacheDirectory = $cacheDirectory ?? new Directory(''); - - $this->readCache(); - } - - public function __destruct() - { - $this->writeCache(); - } - - /** - * This class is not intended to be serialized, - * and cannot be deserialized (see __wakeup method). - */ - public function __sleep(): array - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - /** - * Disable the deserialization of the class to prevent attacker executing - * code by leveraging the __destruct method. - * - * @see https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection - */ - public function __wakeup(): void - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } - - public function needFixing(string $file, string $fileContent): bool - { - $file = $this->cacheDirectory->getRelativePathTo($file); - - return !$this->cache->has($file) || $this->cache->get($file) !== $this->calcHash($fileContent); - } - - public function setFile(string $file, string $fileContent): void - { - $file = $this->cacheDirectory->getRelativePathTo($file); - - $hash = $this->calcHash($fileContent); - - if ($this->isDryRun && $this->cache->has($file) && $this->cache->get($file) !== $hash) { - $this->cache->clear($file); - - return; - } - - $this->cache->set($file, $hash); - } - - private function readCache(): void - { - $cache = $this->handler->read(); - - if (null === $cache || !$this->signature->equals($cache->getSignature())) { - $cache = new Cache($this->signature); - } - - $this->cache = $cache; - } - - private function writeCache(): void - { - $this->handler->write($this->cache); - } - - private function calcHash(string $content): string - { - return md5($content); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php deleted file mode 100644 index 059e6b42..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php +++ /dev/null @@ -1,106 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -use Symfony\Component\Filesystem\Exception\IOException; - -/** - * @author Andreas Möller - * - * @internal - */ -final class FileHandler implements FileHandlerInterface -{ - private string $file; - - public function __construct(string $file) - { - $this->file = $file; - } - - public function getFile(): string - { - return $this->file; - } - - public function read(): ?CacheInterface - { - if (!file_exists($this->file)) { - return null; - } - - $content = file_get_contents($this->file); - - try { - $cache = Cache::fromJson($content); - } catch (\InvalidArgumentException $exception) { - return null; - } - - return $cache; - } - - public function write(CacheInterface $cache): void - { - $content = $cache->toJson(); - - if (file_exists($this->file)) { - if (is_dir($this->file)) { - throw new IOException( - sprintf('Cannot write cache file "%s" as the location exists as directory.', realpath($this->file)), - 0, - null, - $this->file - ); - } - - if (!is_writable($this->file)) { - throw new IOException( - sprintf('Cannot write to file "%s" as it is not writable.', realpath($this->file)), - 0, - null, - $this->file - ); - } - } else { - $dir = \dirname($this->file); - - if (!is_dir($dir)) { - throw new IOException( - sprintf('Directory of cache file "%s" does not exists.', $this->file), - 0, - null, - $this->file - ); - } - - @touch($this->file); - @chmod($this->file, 0666); - } - - $bytesWritten = @file_put_contents($this->file, $content); - - if (false === $bytesWritten) { - $error = error_get_last(); - - throw new IOException( - sprintf('Failed to write file "%s", "%s".', $this->file, $error['message'] ?? 'no reason available'), - 0, - null, - $this->file - ); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php deleted file mode 100644 index 464b04cf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandlerInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -interface FileHandlerInterface -{ - public function getFile(): string; - - public function read(): ?CacheInterface; - - public function write(CacheInterface $cache): void; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php deleted file mode 100644 index 63094804..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/NullCacheManager.php +++ /dev/null @@ -1,32 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -final class NullCacheManager implements CacheManagerInterface -{ - public function needFixing(string $file, string $fileContent): bool - { - return true; - } - - public function setFile(string $file, string $fileContent): void - { - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php deleted file mode 100644 index 48c96289..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php +++ /dev/null @@ -1,98 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -final class Signature implements SignatureInterface -{ - private string $phpVersion; - - private string $fixerVersion; - - private string $indent; - - private string $lineEnding; - - /** - * @var array|bool> - */ - private array $rules; - - /** - * @param array|bool> $rules - */ - public function __construct(string $phpVersion, string $fixerVersion, string $indent, string $lineEnding, array $rules) - { - $this->phpVersion = $phpVersion; - $this->fixerVersion = $fixerVersion; - $this->indent = $indent; - $this->lineEnding = $lineEnding; - $this->rules = self::makeJsonEncodable($rules); - } - - public function getPhpVersion(): string - { - return $this->phpVersion; - } - - public function getFixerVersion(): string - { - return $this->fixerVersion; - } - - public function getIndent(): string - { - return $this->indent; - } - - public function getLineEnding(): string - { - return $this->lineEnding; - } - - public function getRules(): array - { - return $this->rules; - } - - public function equals(SignatureInterface $signature): bool - { - return $this->phpVersion === $signature->getPhpVersion() - && $this->fixerVersion === $signature->getFixerVersion() - && $this->indent === $signature->getIndent() - && $this->lineEnding === $signature->getLineEnding() - && $this->rules === $signature->getRules(); - } - - /** - * @param array|bool> $data - * - * @return array|bool> - */ - private static function makeJsonEncodable(array $data): array - { - array_walk_recursive($data, static function (&$item): void { - if (\is_string($item) && !mb_detect_encoding($item, 'utf-8', true)) { - $item = base64_encode($item); - } - }); - - return $data; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php deleted file mode 100644 index cc952141..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Cache/SignatureInterface.php +++ /dev/null @@ -1,38 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Cache; - -/** - * @author Andreas Möller - * - * @internal - */ -interface SignatureInterface -{ - public function getPhpVersion(): string; - - public function getFixerVersion(): string; - - public function getIndent(): string; - - public function getLineEnding(): string; - - /** - * @return array|bool> - */ - public function getRules(): array; - - public function equals(self $signature): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Config.php b/old_vendor/friendsofphp/php-cs-fixer/src/Config.php deleted file mode 100644 index 856f88b7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Config.php +++ /dev/null @@ -1,285 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Fixer\FixerInterface; - -/** - * @author Fabien Potencier - * @author Katsuhiro Ogawa - * @author Dariusz Rumiński - */ -class Config implements ConfigInterface -{ - private string $cacheFile = '.php-cs-fixer.cache'; - - /** - * @var FixerInterface[] - */ - private array $customFixers = []; - - /** - * @var null|iterable<\SplFileInfo> - */ - private ?iterable $finder = null; - - private string $format = 'txt'; - - private bool $hideProgress = false; - - private string $indent = ' '; - - private bool $isRiskyAllowed = false; - - private string $lineEnding = "\n"; - - private string $name; - - /** - * @var null|string - */ - private $phpExecutable; - - /** - * @TODO: 4.0 - update to @PER - * - * @var array|bool> - */ - private array $rules = ['@PSR12' => true]; - - private bool $usingCache = true; - - public function __construct(string $name = 'default') - { - $this->name = $name; - } - - /** - * {@inheritdoc} - */ - public function getCacheFile(): string - { - return $this->cacheFile; - } - - /** - * {@inheritdoc} - */ - public function getCustomFixers(): array - { - return $this->customFixers; - } - - /** - * @return Finder - */ - public function getFinder(): iterable - { - if (null === $this->finder) { - $this->finder = new Finder(); - } - - return $this->finder; - } - - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return $this->format; - } - - /** - * {@inheritdoc} - */ - public function getHideProgress(): bool - { - return $this->hideProgress; - } - - /** - * {@inheritdoc} - */ - public function getIndent(): string - { - return $this->indent; - } - - /** - * {@inheritdoc} - */ - public function getLineEnding(): string - { - return $this->lineEnding; - } - - /** - * {@inheritdoc} - */ - public function getName(): string - { - return $this->name; - } - - /** - * {@inheritdoc} - */ - public function getPhpExecutable(): ?string - { - return $this->phpExecutable; - } - - /** - * {@inheritdoc} - */ - public function getRiskyAllowed(): bool - { - return $this->isRiskyAllowed; - } - - /** - * {@inheritdoc} - */ - public function getRules(): array - { - return $this->rules; - } - - /** - * {@inheritdoc} - */ - public function getUsingCache(): bool - { - return $this->usingCache; - } - - /** - * {@inheritdoc} - */ - public function registerCustomFixers(iterable $fixers): ConfigInterface - { - foreach ($fixers as $fixer) { - $this->addCustomFixer($fixer); - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setCacheFile(string $cacheFile): ConfigInterface - { - $this->cacheFile = $cacheFile; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setFinder(iterable $finder): ConfigInterface - { - $this->finder = $finder; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setFormat(string $format): ConfigInterface - { - $this->format = $format; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setHideProgress(bool $hideProgress): ConfigInterface - { - $this->hideProgress = $hideProgress; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setIndent(string $indent): ConfigInterface - { - $this->indent = $indent; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setLineEnding(string $lineEnding): ConfigInterface - { - $this->lineEnding = $lineEnding; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setPhpExecutable(?string $phpExecutable): ConfigInterface - { - $this->phpExecutable = $phpExecutable; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setRiskyAllowed(bool $isRiskyAllowed): ConfigInterface - { - $this->isRiskyAllowed = $isRiskyAllowed; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setRules(array $rules): ConfigInterface - { - $this->rules = $rules; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setUsingCache(bool $usingCache): ConfigInterface - { - $this->usingCache = $usingCache; - - return $this; - } - - private function addCustomFixer(FixerInterface $fixer): void - { - $this->customFixers[] = $fixer; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php deleted file mode 100644 index b46b191b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php +++ /dev/null @@ -1,140 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Fixer\FixerInterface; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -interface ConfigInterface -{ - /** - * Returns the path to the cache file. - * - * @return null|string Returns null if not using cache - */ - public function getCacheFile(): ?string; - - /** - * Returns the custom fixers to use. - * - * @return FixerInterface[] - */ - public function getCustomFixers(): array; - - /** - * Returns files to scan. - * - * @return iterable<\SplFileInfo> - */ - public function getFinder(): iterable; - - public function getFormat(): string; - - /** - * Returns true if progress should be hidden. - */ - public function getHideProgress(): bool; - - public function getIndent(): string; - - public function getLineEnding(): string; - - /** - * Returns the name of the configuration. - * - * The name must be all lowercase and without any spaces. - * - * @return string The name of the configuration - */ - public function getName(): string; - - /** - * Get configured PHP executable, if any. - */ - public function getPhpExecutable(): ?string; - - /** - * Check if it is allowed to run risky fixers. - */ - public function getRiskyAllowed(): bool; - - /** - * Get rules. - * - * Keys of array are names of fixers/sets, values are true/false. - * - * @return array|bool> - */ - public function getRules(): array; - - /** - * Returns true if caching should be enabled. - */ - public function getUsingCache(): bool; - - /** - * Adds a suite of custom fixers. - * - * Name of custom fixer should follow `VendorName/rule_name` convention. - * - * @param FixerInterface[]|iterable|\Traversable $fixers - */ - public function registerCustomFixers(iterable $fixers): self; - - /** - * Sets the path to the cache file. - */ - public function setCacheFile(string $cacheFile): self; - - /** - * @param iterable<\SplFileInfo> $finder - */ - public function setFinder(iterable $finder): self; - - public function setFormat(string $format): self; - - public function setHideProgress(bool $hideProgress): self; - - public function setIndent(string $indent): self; - - public function setLineEnding(string $lineEnding): self; - - /** - * Set PHP executable. - */ - public function setPhpExecutable(?string $phpExecutable): self; - - /** - * Set if it is allowed to run risky fixers. - */ - public function setRiskyAllowed(bool $isRiskyAllowed): self; - - /** - * Set rules. - * - * Keys of array are names of fixers or sets. - * Value for set must be bool (turn it on or off). - * Value for fixer may be bool (turn it on or off) or array of configuration - * (turn it on and contains configuration for FixerInterface::configure method). - * - * @param array|bool> $rules - */ - public function setRules(array $rules): self; - - public function setUsingCache(bool $usingCache): self; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php b/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php deleted file mode 100644 index 87babf8f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidConfigurationException.php +++ /dev/null @@ -1,36 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\ConfigurationException; - -use PhpCsFixer\Console\Command\FixCommandExitStatusCalculator; - -/** - * Exceptions of this type are thrown on misconfiguration of the Fixer. - * - * @internal - * - * @final Only internal extending this class is supported - */ -class InvalidConfigurationException extends \InvalidArgumentException -{ - public function __construct(string $message, ?int $code = null, ?\Throwable $previous = null) - { - parent::__construct( - $message, - $code ?? FixCommandExitStatusCalculator::EXIT_STATUS_FLAG_HAS_INVALID_CONFIG, - $previous - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php b/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php deleted file mode 100644 index 140385c3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php +++ /dev/null @@ -1,45 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\ConfigurationException; - -use PhpCsFixer\Console\Command\FixCommandExitStatusCalculator; - -/** - * Exception thrown by Fixers on misconfiguration. - * - * @internal - * - * @final Only internal extending this class is supported - */ -class InvalidFixerConfigurationException extends InvalidConfigurationException -{ - private string $fixerName; - - public function __construct(string $fixerName, string $message, ?\Throwable $previous = null) - { - parent::__construct( - sprintf('[%s] %s', $fixerName, $message), - FixCommandExitStatusCalculator::EXIT_STATUS_FLAG_HAS_INVALID_FIXER_CONFIG, - $previous - ); - - $this->fixerName = $fixerName; - } - - public function getFixerName(): string - { - return $this->fixerName; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php b/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php deleted file mode 100644 index 6e4dcd4b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.php +++ /dev/null @@ -1,24 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\ConfigurationException; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class InvalidForEnvFixerConfigurationException extends InvalidFixerConfigurationException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php b/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php deleted file mode 100644 index d229cda3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/RequiredFixerConfigurationException.php +++ /dev/null @@ -1,24 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\ConfigurationException; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class RequiredFixerConfigurationException extends InvalidFixerConfigurationException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Application.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Application.php deleted file mode 100644 index ff86414f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Application.php +++ /dev/null @@ -1,142 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console; - -use PhpCsFixer\Console\Command\DescribeCommand; -use PhpCsFixer\Console\Command\FixCommand; -use PhpCsFixer\Console\Command\HelpCommand; -use PhpCsFixer\Console\Command\ListFilesCommand; -use PhpCsFixer\Console\Command\ListSetsCommand; -use PhpCsFixer\Console\Command\SelfUpdateCommand; -use PhpCsFixer\Console\SelfUpdate\GithubClient; -use PhpCsFixer\Console\SelfUpdate\NewVersionChecker; -use PhpCsFixer\PharChecker; -use PhpCsFixer\ToolInfo; -use PhpCsFixer\Utils; -use Symfony\Component\Console\Application as BaseApplication; -use Symfony\Component\Console\Command\ListCommand; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - * - * @internal - */ -final class Application extends BaseApplication -{ - public const VERSION = '3.13.0'; - public const VERSION_CODENAME = 'Oliva'; - - private ToolInfo $toolInfo; - - public function __construct() - { - parent::__construct('PHP CS Fixer', self::VERSION); - - $this->toolInfo = new ToolInfo(); - - // in alphabetical order - $this->add(new DescribeCommand()); - $this->add(new FixCommand($this->toolInfo)); - $this->add(new ListFilesCommand($this->toolInfo)); - $this->add(new ListSetsCommand()); - $this->add(new SelfUpdateCommand( - new NewVersionChecker(new GithubClient()), - $this->toolInfo, - new PharChecker() - )); - } - - public static function getMajorVersion(): int - { - return (int) explode('.', self::VERSION)[0]; - } - - /** - * {@inheritdoc} - */ - public function doRun(InputInterface $input, OutputInterface $output): int - { - $stdErr = $output instanceof ConsoleOutputInterface - ? $output->getErrorOutput() - : ($input->hasParameterOption('--format', true) && 'txt' !== $input->getParameterOption('--format', null, true) ? null : $output) - ; - - if (null !== $stdErr) { - $warningsDetector = new WarningsDetector($this->toolInfo); - $warningsDetector->detectOldVendor(); - $warningsDetector->detectOldMajor(); - $warnings = $warningsDetector->getWarnings(); - - if (\count($warnings) > 0) { - foreach ($warnings as $warning) { - $stdErr->writeln(sprintf($stdErr->isDecorated() ? '%s' : '%s', $warning)); - } - $stdErr->writeln(''); - } - } - - $result = parent::doRun($input, $output); - - if ( - null !== $stdErr - && $output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE - ) { - $triggeredDeprecations = Utils::getTriggeredDeprecations(); - - if (\count($triggeredDeprecations) > 0) { - $stdErr->writeln(''); - $stdErr->writeln($stdErr->isDecorated() ? 'Detected deprecations in use:' : 'Detected deprecations in use:'); - foreach ($triggeredDeprecations as $deprecation) { - $stdErr->writeln(sprintf('- %s', $deprecation)); - } - } - } - - return $result; - } - - /** - * {@inheritdoc} - */ - public function getLongVersion(): string - { - $commit = '@git-commit@'; - $versionCommit = ''; - - if ('@'.'git-commit@' !== $commit) { /** @phpstan-ignore-line as `$commit` is replaced during phar building */ - $versionCommit = substr($commit, 0, 7); - } - - return implode('', [ - parent::getLongVersion(), - $versionCommit ? sprintf(' (%s)', $versionCommit) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.` - self::VERSION_CODENAME ? sprintf(' %s', self::VERSION_CODENAME) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.` - ' by Fabien Potencier and Dariusz Ruminski.', - "\nPHP runtime: ".PHP_VERSION.'', - ]); - } - - /** - * {@inheritdoc} - */ - protected function getDefaultCommands(): array - { - return [new HelpCommand(), new ListCommand()]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php deleted file mode 100644 index 3410794b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php +++ /dev/null @@ -1,428 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\Differ\DiffConsoleFormatter; -use PhpCsFixer\Differ\FullDiffer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\FixerConfiguration\AliasedFixerOption; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption; -use PhpCsFixer\FixerDefinition\CodeSampleInterface; -use PhpCsFixer\FixerDefinition\FileSpecificCodeSampleInterface; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSampleInterface; -use PhpCsFixer\FixerFactory; -use PhpCsFixer\Preg; -use PhpCsFixer\RuleSet\RuleSets; -use PhpCsFixer\StdinFileInfo; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Utils; -use PhpCsFixer\WordMatcher; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Formatter\OutputFormatter; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -#[AsCommand(name: 'describe')] -final class DescribeCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'describe'; - - /** - * @var string[] - */ - private $setNames; - - private FixerFactory $fixerFactory; - - /** - * @var array - */ - private $fixers; - - public function __construct(?FixerFactory $fixerFactory = null) - { - parent::__construct(); - - if (null === $fixerFactory) { - $fixerFactory = new FixerFactory(); - $fixerFactory->registerBuiltInFixers(); - } - - $this->fixerFactory = $fixerFactory; - } - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setDefinition( - [ - new InputArgument('name', InputArgument::REQUIRED, 'Name of rule / set.'), - ] - ) - ->setDescription('Describe rule / ruleset.') - ; - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output): int - { - if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity() && $output instanceof ConsoleOutputInterface) { - $stdErr = $output->getErrorOutput(); - $stdErr->writeln($this->getApplication()->getLongVersion()); - } - - $name = $input->getArgument('name'); - - try { - if (str_starts_with($name, '@')) { - $this->describeSet($output, $name); - - return 0; - } - - $this->describeRule($output, $name); - } catch (DescribeNameNotFoundException $e) { - $matcher = new WordMatcher( - 'set' === $e->getType() ? $this->getSetNames() : array_keys($this->getFixers()) - ); - - $alternative = $matcher->match($name); - - $this->describeList($output, $e->getType()); - - throw new \InvalidArgumentException(sprintf( - '%s "%s" not found.%s', - ucfirst($e->getType()), - $name, - null === $alternative ? '' : ' Did you mean "'.$alternative.'"?' - )); - } - - return 0; - } - - private function describeRule(OutputInterface $output, string $name): void - { - $fixers = $this->getFixers(); - - if (!isset($fixers[$name])) { - throw new DescribeNameNotFoundException($name, 'rule'); - } - - /** @var FixerInterface $fixer */ - $fixer = $fixers[$name]; - - $definition = $fixer->getDefinition(); - - $summary = $definition->getSummary(); - - if ($fixer instanceof DeprecatedFixerInterface) { - $successors = $fixer->getSuccessorsNames(); - $message = [] === $successors - ? 'will be removed on next major version' - : sprintf('use %s instead', Utils::naturalLanguageJoinWithBackticks($successors)); - $message = Preg::replace('/(`.+?`)/', '$1', $message); - $summary .= sprintf(' DEPRECATED: %s.', $message); - } - - $output->writeln(sprintf('Description of %s rule.', $name)); - - if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { - $output->writeln(sprintf('Fixer class: %s.', \get_class($fixer))); - } - - $output->writeln($summary); - - $description = $definition->getDescription(); - - if (null !== $description) { - $output->writeln($description); - } - - $output->writeln(''); - - if ($fixer->isRisky()) { - $output->writeln('Fixer applying this rule is risky.'); - - $riskyDescription = $definition->getRiskyDescription(); - - if (null !== $riskyDescription) { - $output->writeln($riskyDescription); - } - - $output->writeln(''); - } - - if ($fixer instanceof ConfigurableFixerInterface) { - $configurationDefinition = $fixer->getConfigurationDefinition(); - $options = $configurationDefinition->getOptions(); - - $output->writeln(sprintf('Fixer is configurable using following option%s:', 1 === \count($options) ? '' : 's')); - - foreach ($options as $option) { - $line = '* '.OutputFormatter::escape($option->getName()).''; - $allowed = HelpCommand::getDisplayableAllowedValues($option); - - if (null === $allowed) { - $allowed = array_map( - static fn (string $type): string => ''.$type.'', - $option->getAllowedTypes(), - ); - } else { - $allowed = array_map(static function ($value): string { - return $value instanceof AllowedValueSubset - ? 'a subset of '.HelpCommand::toString($value->getAllowedValues()).'' - : ''.HelpCommand::toString($value).''; - }, $allowed); - } - - $line .= ' ('.implode(', ', $allowed).')'; - - $description = Preg::replace('/(`.+?`)/', '$1', OutputFormatter::escape($option->getDescription())); - $line .= ': '.lcfirst(Preg::replace('/\.$/', '', $description)).'; '; - - if ($option->hasDefault()) { - $line .= sprintf( - 'defaults to %s', - HelpCommand::toString($option->getDefault()) - ); - } else { - $line .= 'required'; - } - - if ($option instanceof DeprecatedFixerOption) { - $line .= '. DEPRECATED: '.Preg::replace( - '/(`.+?`)/', - '$1', - OutputFormatter::escape(lcfirst($option->getDeprecationMessage())) - ); - } - - if ($option instanceof AliasedFixerOption) { - $line .= '; DEPRECATED alias: '.$option->getAlias().''; - } - - $output->writeln($line); - } - - $output->writeln(''); - } - - /** @var CodeSampleInterface[] $codeSamples */ - $codeSamples = array_filter($definition->getCodeSamples(), static function (CodeSampleInterface $codeSample): bool { - if ($codeSample instanceof VersionSpecificCodeSampleInterface) { - return $codeSample->isSuitableFor(\PHP_VERSION_ID); - } - - return true; - }); - - if (0 === \count($codeSamples)) { - $output->writeln([ - 'Fixing examples cannot be demonstrated on the current PHP version.', - '', - ]); - } else { - $output->writeln('Fixing examples:'); - - $differ = new FullDiffer(); - $diffFormatter = new DiffConsoleFormatter( - $output->isDecorated(), - sprintf( - ' ---------- begin diff ----------%s%%s%s ----------- end diff -----------', - PHP_EOL, - PHP_EOL - ) - ); - - foreach ($codeSamples as $index => $codeSample) { - $old = $codeSample->getCode(); - $tokens = Tokens::fromCode($old); - - $configuration = $codeSample->getConfiguration(); - - if ($fixer instanceof ConfigurableFixerInterface) { - $fixer->configure($configuration ?? []); - } - - $file = $codeSample instanceof FileSpecificCodeSampleInterface - ? $codeSample->getSplFileInfo() - : new StdinFileInfo(); - - $fixer->fix($file, $tokens); - - $diff = $differ->diff($old, $tokens->generateCode()); - - if ($fixer instanceof ConfigurableFixerInterface) { - if (null === $configuration) { - $output->writeln(sprintf(' * Example #%d. Fixing with the default configuration.', $index + 1)); - } else { - $output->writeln(sprintf(' * Example #%d. Fixing with configuration: %s.', $index + 1, HelpCommand::toString($codeSample->getConfiguration()))); - } - } else { - $output->writeln(sprintf(' * Example #%d.', $index + 1)); - } - - $output->writeln([$diffFormatter->format($diff, ' %s'), '']); - } - } - } - - private function describeSet(OutputInterface $output, string $name): void - { - if (!\in_array($name, $this->getSetNames(), true)) { - throw new DescribeNameNotFoundException($name, 'set'); - } - - $ruleSetDefinitions = RuleSets::getSetDefinitions(); - $fixers = $this->getFixers(); - - $output->writeln(sprintf('Description of the %s set.', $ruleSetDefinitions[$name]->getName())); - $output->writeln($this->replaceRstLinks($ruleSetDefinitions[$name]->getDescription())); - - if ($ruleSetDefinitions[$name]->isRisky()) { - $output->writeln('This set contains risky rules.'); - } - - $output->writeln(''); - - $help = ''; - - foreach ($ruleSetDefinitions[$name]->getRules() as $rule => $config) { - if (str_starts_with($rule, '@')) { - $set = $ruleSetDefinitions[$rule]; - $help .= sprintf( - " * %s%s\n | %s\n\n", - $rule, - $set->isRisky() ? ' risky' : '', - $this->replaceRstLinks($set->getDescription()) - ); - - continue; - } - - /** @var FixerInterface $fixer */ - $fixer = $fixers[$rule]; - - $definition = $fixer->getDefinition(); - $help .= sprintf( - " * %s%s\n | %s\n%s\n", - $rule, - $fixer->isRisky() ? ' risky' : '', - $definition->getSummary(), - true !== $config ? sprintf(" | Configuration: %s\n", HelpCommand::toString($config)) : '' - ); - } - - $output->write($help); - } - - /** - * @return array - */ - private function getFixers(): array - { - if (null !== $this->fixers) { - return $this->fixers; - } - - $fixers = []; - - foreach ($this->fixerFactory->getFixers() as $fixer) { - $fixers[$fixer->getName()] = $fixer; - } - - $this->fixers = $fixers; - ksort($this->fixers); - - return $this->fixers; - } - - /** - * @return string[] - */ - private function getSetNames(): array - { - if (null !== $this->setNames) { - return $this->setNames; - } - - $this->setNames = RuleSets::getSetDefinitionNames(); - - return $this->setNames; - } - - /** - * @param string $type 'rule'|'set' - */ - private function describeList(OutputInterface $output, string $type): void - { - if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE) { - $describe = [ - 'sets' => $this->getSetNames(), - 'rules' => $this->getFixers(), - ]; - } elseif ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { - $describe = 'set' === $type ? ['sets' => $this->getSetNames()] : ['rules' => $this->getFixers()]; - } else { - return; - } - - /** @var string[] $items */ - foreach ($describe as $list => $items) { - $output->writeln(sprintf('Defined %s:', $list)); - - foreach ($items as $name => $item) { - $output->writeln(sprintf('* %s', \is_string($name) ? $name : $item)); - } - } - } - - private function replaceRstLinks(string $content): string - { - return Preg::replaceCallback( - '/(`[^<]+<[^>]+>`_)/', - static function (array $matches) { - return Preg::replaceCallback( - '/`(.*)<(.*)>`_/', - static function (array $matches): string { - return $matches[1].'('.$matches[2].')'; - }, - $matches[1] - ); - }, - $content - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php deleted file mode 100644 index 27f5bcfc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeNameNotFoundException.php +++ /dev/null @@ -1,46 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -/** - * @internal - */ -final class DescribeNameNotFoundException extends \InvalidArgumentException -{ - private string $name; - - /** - * 'rule'|'set'. - */ - private string $type; - - public function __construct(string $name, string $type) - { - $this->name = $name; - $this->type = $type; - - parent::__construct(); - } - - public function getName(): string - { - return $this->name; - } - - public function getType(): string - { - return $this->type; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php deleted file mode 100644 index 95a7f57b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php +++ /dev/null @@ -1,128 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\Documentation\DocumentationLocator; -use PhpCsFixer\Documentation\FixerDocumentGenerator; -use PhpCsFixer\Documentation\ListDocumentGenerator; -use PhpCsFixer\Documentation\RuleSetDocumentationGenerator; -use PhpCsFixer\FixerFactory; -use PhpCsFixer\RuleSet\RuleSets; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Filesystem\Filesystem; -use Symfony\Component\Finder\Finder; -use Symfony\Component\Finder\SplFileInfo; - -/** - * @internal - */ -#[AsCommand(name: 'documentation')] -final class DocumentationCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'documentation'; - - protected function configure(): void - { - $this - ->setAliases(['doc']) - ->setDescription('Dumps the documentation of the project into its "/doc" directory.') - ; - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $filesystem = new Filesystem(); - $locator = new DocumentationLocator(); - - $fixerFactory = new FixerFactory(); - $fixerFactory->registerBuiltInFixers(); - $fixers = $fixerFactory->getFixers(); - - $setDefinitions = RuleSets::getSetDefinitions(); - - $fixerDocumentGenerator = new FixerDocumentGenerator($locator); - $ruleSetDocumentationGenerator = new RuleSetDocumentationGenerator($locator); - $listDocumentGenerator = new ListDocumentGenerator($locator); - - // Array of existing fixer docs. - // We first override existing files, and then we will delete files that are no longer needed. - // We cannot remove all files first, as generation of docs is re-using existing docs to extract code-samples for - // VersionSpecificCodeSample under incompatible PHP version. - $docForFixerRelativePaths = []; - - foreach ($fixers as $fixer) { - $docForFixerRelativePaths[] = $locator->getFixerDocumentationFileRelativePath($fixer); - $filesystem->dumpFile( - $locator->getFixerDocumentationFilePath($fixer), - $fixerDocumentGenerator->generateFixerDocumentation($fixer) - ); - } - - /** @var SplFileInfo $file */ - foreach ( - (new Finder())->files() - ->in($locator->getFixersDocumentationDirectoryPath()) - ->notPath($docForFixerRelativePaths) as $file - ) { - $filesystem->remove($file->getPathname()); - } - - // Fixer doc. index - - $filesystem->dumpFile( - $locator->getFixersDocumentationIndexFilePath(), - $fixerDocumentGenerator->generateFixersDocumentationIndex($fixers) - ); - - // RuleSet docs. - - /** @var SplFileInfo $file */ - foreach ((new Finder())->files()->in($locator->getRuleSetsDocumentationDirectoryPath()) as $file) { - $filesystem->remove($file->getPathname()); - } - - $paths = []; - - foreach ($setDefinitions as $name => $definition) { - $path = $locator->getRuleSetsDocumentationFilePath($name); - $paths[$name] = $path; - $filesystem->dumpFile($path, $ruleSetDocumentationGenerator->generateRuleSetsDocumentation($definition, $fixers)); - } - - // RuleSet doc. index - - $filesystem->dumpFile( - $locator->getRuleSetsDocumentationIndexFilePath(), - $ruleSetDocumentationGenerator->generateRuleSetsDocumentationIndex($paths) - ); - - // List file / Appendix - - $filesystem->dumpFile( - $locator->getListingFilePath(), - $listDocumentGenerator->generateListingDocumentation($fixers) - ); - - $output->writeln('Docs updated.'); - - return 0; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php deleted file mode 100644 index 5180af75..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php +++ /dev/null @@ -1,360 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\Config; -use PhpCsFixer\ConfigInterface; -use PhpCsFixer\ConfigurationException\InvalidConfigurationException; -use PhpCsFixer\Console\ConfigurationResolver; -use PhpCsFixer\Console\Output\ErrorOutput; -use PhpCsFixer\Console\Output\NullOutput; -use PhpCsFixer\Console\Output\ProcessOutput; -use PhpCsFixer\Console\Report\FixReport\ReportSummary; -use PhpCsFixer\Error\ErrorsManager; -use PhpCsFixer\Runner\Runner; -use PhpCsFixer\ToolInfoInterface; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Terminal; -use Symfony\Component\EventDispatcher\EventDispatcher; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Stopwatch\Stopwatch; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - * - * @internal - */ -#[AsCommand(name: 'fix')] -final class FixCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'fix'; - - private EventDispatcherInterface $eventDispatcher; - - private ErrorsManager $errorsManager; - - private Stopwatch $stopwatch; - - private ConfigInterface $defaultConfig; - - private ToolInfoInterface $toolInfo; - - public function __construct(ToolInfoInterface $toolInfo) - { - parent::__construct(); - - $this->eventDispatcher = new EventDispatcher(); - $this->errorsManager = new ErrorsManager(); - $this->stopwatch = new Stopwatch(); - $this->defaultConfig = new Config(); - $this->toolInfo = $toolInfo; - } - - /** - * {@inheritdoc} - * - * Override here to only generate the help copy when used. - */ - public function getHelp(): string - { - return <<<'EOF' -The %command.name% command tries to fix as much coding standards -problems as possible on a given file or files in a given directory and its subdirectories: - - $ php %command.full_name% /path/to/dir - $ php %command.full_name% /path/to/file - -By default --path-mode is set to `override`, which means, that if you specify the path to a file or a directory via -command arguments, then the paths provided to a `Finder` in config file will be ignored. You can use --path-mode=intersection -to merge paths from the config file and from the argument: - - $ php %command.full_name% --path-mode=intersection /path/to/dir - -The --format option for the output format. Supported formats are `txt` (default one), `json`, `xml`, `checkstyle`, `junit` and `gitlab`. - -NOTE: the output for the following formats are generated in accordance with schemas - -* `checkstyle` follows the common `"checkstyle" XML schema `_ -* `json` follows the `own JSON schema `_ -* `junit` follows the `JUnit XML schema from Jenkins `_ -* `xml` follows the `own XML schema `_ - -The --quiet Do not output any message. - -The --verbose option will show the applied rules. When using the `txt` format it will also display progress notifications. - -NOTE: if there is an error like "errors reported during linting after fixing", you can use this to be even more verbose for debugging purpose - -* `-v`: verbose -* `-vv`: very verbose -* `-vvv`: debug - -The --rules option limits the rules to apply to the -project: - -EOF. /* @TODO: 4.0 - change to @PER */ <<<'EOF' - - $ php %command.full_name% /path/to/project --rules=@PSR12 - -By default the PSR-12 rules are used. - -The --rules option lets you choose the exact rules to -apply (the rule names must be separated by a comma): - - $ php %command.full_name% /path/to/dir --rules=line_ending,full_opening_tag,indentation_type - -You can also exclude the rules you don't want by placing a dash in front of the rule name, if this is more convenient, -using -name_of_fixer: - - $ php %command.full_name% /path/to/dir --rules=-full_opening_tag,-indentation_type - -When using combinations of exact and exclude rules, applying exact rules along with above excluded results: - - $ php %command.full_name% /path/to/project --rules=@Symfony,-@PSR1,-blank_line_before_statement,strict_comparison - -Complete configuration for rules can be supplied using a `json` formatted string. - - $ php %command.full_name% /path/to/project --rules='{"concat_space": {"spacing": "none"}}' - -The --dry-run flag will run the fixer without making changes to your files. - -The --diff flag can be used to let the fixer output all the changes it makes. - -The --allow-risky option (pass `yes` or `no`) allows you to set whether risky rules may run. Default value is taken from config file. -A rule is considered risky if it could change code behaviour. By default no risky rules are run. - -The --stop-on-violation flag stops the execution upon first file that needs to be fixed. - -The --show-progress option allows you to choose the way process progress is rendered: - -* none: disables progress output; -* dots: multiline progress output with number of files and percentage on each line. - -If the option is not provided, it defaults to dots unless a config file that disables output is used, in which case it defaults to none. This option has no effect if the verbosity of the command is less than verbose. - - $ php %command.full_name% --verbose --show-progress=dots - -By using --using-cache option with `yes` or `no` you can set if the caching -mechanism should be used. - -The command can also read from standard input, in which case it won't -automatically fix anything: - - $ cat foo.php | php %command.full_name% --diff - - -Finally, if you don't need BC kept on CLI level, you might use `PHP_CS_FIXER_FUTURE_MODE` to start using options that -would be default in next MAJOR release and to forbid using deprecated configuration: - - $ PHP_CS_FIXER_FUTURE_MODE=1 php %command.full_name% -v --diff - -Exit code ---------- - -Exit code of the fix command is built using following bit flags: - -* 0 - OK. -* 1 - General error (or PHP minimal requirement not matched). -* 4 - Some files have invalid syntax (only in dry-run mode). -* 8 - Some files need fixing (only in dry-run mode). -* 16 - Configuration error of the application. -* 32 - Configuration error of a Fixer. -* 64 - Exception raised within the application. - -EOF - ; - } - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setDefinition( - [ - new InputArgument('path', InputArgument::IS_ARRAY, 'The path.'), - new InputOption('path-mode', '', InputOption::VALUE_REQUIRED, 'Specify path mode (can be override or intersection).', ConfigurationResolver::PATH_MODE_OVERRIDE), - new InputOption('allow-risky', '', InputOption::VALUE_REQUIRED, 'Are risky fixers allowed (can be yes or no).'), - new InputOption('config', '', InputOption::VALUE_REQUIRED, 'The path to a .php-cs-fixer.php file.'), - new InputOption('dry-run', '', InputOption::VALUE_NONE, 'Only shows which files would have been modified.'), - new InputOption('rules', '', InputOption::VALUE_REQUIRED, 'The rules.'), - new InputOption('using-cache', '', InputOption::VALUE_REQUIRED, 'Does cache should be used (can be yes or no).'), - new InputOption('cache-file', '', InputOption::VALUE_REQUIRED, 'The path to the cache file.'), - new InputOption('diff', '', InputOption::VALUE_NONE, 'Also produce diff for each file.'), - new InputOption('format', '', InputOption::VALUE_REQUIRED, 'To output results in other formats.'), - new InputOption('stop-on-violation', '', InputOption::VALUE_NONE, 'Stop execution on first violation.'), - new InputOption('show-progress', '', InputOption::VALUE_REQUIRED, 'Type of progress indicator (none, dots).'), - ] - ) - ->setDescription('Fixes a directory or a file.') - ; - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output): int - { - $verbosity = $output->getVerbosity(); - - $passedConfig = $input->getOption('config'); - $passedRules = $input->getOption('rules'); - - if (null !== $passedConfig && null !== $passedRules) { - throw new InvalidConfigurationException('Passing both `--config` and `--rules` options is not allowed.'); - } - - $resolver = new ConfigurationResolver( - $this->defaultConfig, - [ - 'allow-risky' => $input->getOption('allow-risky'), - 'config' => $passedConfig, - 'dry-run' => $input->getOption('dry-run'), - 'rules' => $passedRules, - 'path' => $input->getArgument('path'), - 'path-mode' => $input->getOption('path-mode'), - 'using-cache' => $input->getOption('using-cache'), - 'cache-file' => $input->getOption('cache-file'), - 'format' => $input->getOption('format'), - 'diff' => $input->getOption('diff'), - 'stop-on-violation' => $input->getOption('stop-on-violation'), - 'verbosity' => $verbosity, - 'show-progress' => $input->getOption('show-progress'), - ], - getcwd(), - $this->toolInfo - ); - - $reporter = $resolver->getReporter(); - - $stdErr = $output instanceof ConsoleOutputInterface - ? $output->getErrorOutput() - : ('txt' === $reporter->getFormat() ? $output : null) - ; - - if (null !== $stdErr) { - if (OutputInterface::VERBOSITY_VERBOSE <= $verbosity) { - $stdErr->writeln($this->getApplication()->getLongVersion()); - } - - $configFile = $resolver->getConfigFile(); - $stdErr->writeln(sprintf('Loaded config %s%s.', $resolver->getConfig()->getName(), null === $configFile ? '' : ' from "'.$configFile.'"')); - - if ($resolver->getUsingCache()) { - $cacheFile = $resolver->getCacheFile(); - - if (is_file($cacheFile)) { - $stdErr->writeln(sprintf('Using cache file "%s".', $cacheFile)); - } - } - } - - $progressType = $resolver->getProgress(); - $finder = $resolver->getFinder(); - - if (null !== $stdErr && $resolver->configFinderIsOverridden()) { - $stdErr->writeln( - sprintf($stdErr->isDecorated() ? '%s' : '%s', 'Paths from configuration file have been overridden by paths provided as command arguments.') - ); - } - - if ('none' === $progressType || null === $stdErr) { - $progressOutput = new NullOutput(); - } else { - $finder = new \ArrayIterator(iterator_to_array($finder)); - $progressOutput = new ProcessOutput( - $stdErr, - $this->eventDispatcher, - (new Terminal())->getWidth(), - \count($finder) - ); - } - - $runner = new Runner( - $finder, - $resolver->getFixers(), - $resolver->getDiffer(), - 'none' !== $progressType ? $this->eventDispatcher : null, - $this->errorsManager, - $resolver->getLinter(), - $resolver->isDryRun(), - $resolver->getCacheManager(), - $resolver->getDirectory(), - $resolver->shouldStopOnViolation() - ); - - $this->stopwatch->start('fixFiles'); - $changed = $runner->fix(); - $this->stopwatch->stop('fixFiles'); - - $progressOutput->printLegend(); - - $fixEvent = $this->stopwatch->getEvent('fixFiles'); - - $reportSummary = new ReportSummary( - $changed, - $fixEvent->getDuration(), - $fixEvent->getMemory(), - OutputInterface::VERBOSITY_VERBOSE <= $verbosity, - $resolver->isDryRun(), - $output->isDecorated() - ); - - $output->isDecorated() - ? $output->write($reporter->generate($reportSummary)) - : $output->write($reporter->generate($reportSummary), false, OutputInterface::OUTPUT_RAW) - ; - - $invalidErrors = $this->errorsManager->getInvalidErrors(); - $exceptionErrors = $this->errorsManager->getExceptionErrors(); - $lintErrors = $this->errorsManager->getLintErrors(); - - if (null !== $stdErr) { - $errorOutput = new ErrorOutput($stdErr); - - if (\count($invalidErrors) > 0) { - $errorOutput->listErrors('linting before fixing', $invalidErrors); - } - - if (\count($exceptionErrors) > 0) { - $errorOutput->listErrors('fixing', $exceptionErrors); - } - - if (\count($lintErrors) > 0) { - $errorOutput->listErrors('linting after fixing', $lintErrors); - } - } - - $exitStatusCalculator = new FixCommandExitStatusCalculator(); - - return $exitStatusCalculator->calculate( - $resolver->isDryRun(), - \count($changed) > 0, - \count($invalidErrors) > 0, - \count($exceptionErrors) > 0, - \count($lintErrors) > 0 - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php deleted file mode 100644 index 727dfff5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommandExitStatusCalculator.php +++ /dev/null @@ -1,51 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class FixCommandExitStatusCalculator -{ - // Exit status 1 is reserved for environment constraints not matched. - public const EXIT_STATUS_FLAG_HAS_INVALID_FILES = 4; - public const EXIT_STATUS_FLAG_HAS_CHANGED_FILES = 8; - public const EXIT_STATUS_FLAG_HAS_INVALID_CONFIG = 16; - public const EXIT_STATUS_FLAG_HAS_INVALID_FIXER_CONFIG = 32; - public const EXIT_STATUS_FLAG_EXCEPTION_IN_APP = 64; - - public function calculate(bool $isDryRun, bool $hasChangedFiles, bool $hasInvalidErrors, bool $hasExceptionErrors, bool $hasLintErrorsAfterFixing): int - { - $exitStatus = 0; - - if ($isDryRun) { - if ($hasChangedFiles) { - $exitStatus |= self::EXIT_STATUS_FLAG_HAS_CHANGED_FILES; - } - - if ($hasInvalidErrors) { - $exitStatus |= self::EXIT_STATUS_FLAG_HAS_INVALID_FILES; - } - } - - if ($hasExceptionErrors || $hasLintErrorsAfterFixing) { - $exitStatus |= self::EXIT_STATUS_FLAG_EXCEPTION_IN_APP; - } - - return $exitStatus; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php deleted file mode 100644 index 632d235f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php +++ /dev/null @@ -1,131 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerOptionInterface; -use PhpCsFixer\Preg; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\HelpCommand as BaseHelpCommand; -use Symfony\Component\Console\Formatter\OutputFormatterStyle; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - * - * @internal - */ -#[AsCommand(name: 'help')] -final class HelpCommand extends BaseHelpCommand -{ - /** - * @var string - */ - protected static $defaultName = 'help'; - - /** - * @param mixed $value - */ - public static function toString($value): string - { - return \is_array($value) - ? static::arrayToString($value) - : static::scalarToString($value) - ; - } - - /** - * Returns the allowed values of the given option that can be converted to a string. - * - * @return null|list - */ - public static function getDisplayableAllowedValues(FixerOptionInterface $option): ?array - { - $allowed = $option->getAllowedValues(); - - if (null !== $allowed) { - $allowed = array_filter($allowed, static function ($value): bool { - return !$value instanceof \Closure; - }); - - usort($allowed, static function ($valueA, $valueB): int { - if ($valueA instanceof AllowedValueSubset) { - return -1; - } - - if ($valueB instanceof AllowedValueSubset) { - return 1; - } - - return strcasecmp( - self::toString($valueA), - self::toString($valueB) - ); - }); - - if (0 === \count($allowed)) { - $allowed = null; - } - } - - return $allowed; - } - - /** - * {@inheritdoc} - */ - protected function initialize(InputInterface $input, OutputInterface $output): void - { - $output->getFormatter()->setStyle('url', new OutputFormatterStyle('blue')); - } - - /** - * @param mixed $value - */ - private static function scalarToString($value): string - { - $str = var_export($value, true); - - return Preg::replace('/\bNULL\b/', 'null', $str); - } - - /** - * @param array $value - */ - private static function arrayToString(array $value): string - { - if (0 === \count($value)) { - return '[]'; - } - - $isHash = !array_is_list($value); - $str = '['; - - foreach ($value as $k => $v) { - if ($isHash) { - $str .= static::scalarToString($k).' => '; - } - - $str .= \is_array($v) - ? static::arrayToString($v).', ' - : static::scalarToString($v).', ' - ; - } - - return substr($str, 0, -2).']'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php deleted file mode 100644 index b92dae77..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php +++ /dev/null @@ -1,96 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\Config; -use PhpCsFixer\ConfigInterface; -use PhpCsFixer\Console\ConfigurationResolver; -use PhpCsFixer\ToolInfoInterface; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Markus Staab - * - * @internal - */ -#[AsCommand(name: 'list-files')] -final class ListFilesCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'list-files'; - - private ConfigInterface $defaultConfig; - - private ToolInfoInterface $toolInfo; - - public function __construct(ToolInfoInterface $toolInfo) - { - parent::__construct(); - - $this->defaultConfig = new Config(); - $this->toolInfo = $toolInfo; - } - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setDefinition( - [ - new InputOption('config', '', InputOption::VALUE_REQUIRED, 'The path to a .php-cs-fixer.php file.'), - ] - ) - ->setDescription('List all files being fixed by the given config.') - ; - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $passedConfig = $input->getOption('config'); - $cwd = getcwd(); - - $resolver = new ConfigurationResolver( - $this->defaultConfig, - [ - 'config' => $passedConfig, - ], - $cwd, - $this->toolInfo - ); - - $finder = $resolver->getFinder(); - - /** @var \SplFileInfo $file */ - foreach ($finder as $file) { - if ($file->isFile()) { - $relativePath = str_replace($cwd, '.', $file->getRealPath()); - // unify directory separators across operating system - $relativePath = str_replace('/', \DIRECTORY_SEPARATOR, $relativePath); - - $output->writeln(escapeshellarg($relativePath)); - } - } - - return 0; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php deleted file mode 100644 index a48cdeb1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php +++ /dev/null @@ -1,93 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\ConfigurationException\InvalidConfigurationException; -use PhpCsFixer\Console\Report\ListSetsReport\ReporterFactory; -use PhpCsFixer\Console\Report\ListSetsReport\ReporterInterface; -use PhpCsFixer\Console\Report\ListSetsReport\ReportSummary; -use PhpCsFixer\Console\Report\ListSetsReport\TextReporter; -use PhpCsFixer\RuleSet\RuleSets; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Formatter\OutputFormatter; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -#[AsCommand(name: 'list-sets')] -final class ListSetsCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'list-sets'; - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setDefinition( - [ - new InputOption('format', '', InputOption::VALUE_REQUIRED, 'To output results in other formats.', (new TextReporter())->getFormat()), - ] - ) - ->setDescription('List all available RuleSets.') - ; - } - - protected function execute(InputInterface $input, OutputInterface $output) - { - $reporter = $this->resolveReporterWithFactory( - $input->getOption('format'), - new ReporterFactory() - ); - - $reportSummary = new ReportSummary( - array_values(RuleSets::getSetDefinitions()) - ); - - $report = $reporter->generate($reportSummary); - - $output->isDecorated() - ? $output->write(OutputFormatter::escape($report)) - : $output->write($report, false, OutputInterface::OUTPUT_RAW) - ; - - return 0; - } - - private function resolveReporterWithFactory(string $format, ReporterFactory $factory): ReporterInterface - { - try { - $factory->registerBuiltInReporters(); - $reporter = $factory->getReporter($format); - } catch (\UnexpectedValueException $e) { - $formats = $factory->getFormats(); - sort($formats); - - throw new InvalidConfigurationException(sprintf('The format "%s" is not defined, supported are "%s".', $format, implode('", "', $formats))); - } - - return $reporter; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php deleted file mode 100644 index 947cd5b5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php +++ /dev/null @@ -1,180 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Command; - -use PhpCsFixer\Console\SelfUpdate\NewVersionCheckerInterface; -use PhpCsFixer\PharCheckerInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\ToolInfoInterface; -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Igor Wiedler - * @author Stephane PY - * @author Grégoire Pineau - * @author Dariusz Rumiński - * - * @internal - */ -#[AsCommand(name: 'self-update')] -final class SelfUpdateCommand extends Command -{ - /** - * @var string - */ - protected static $defaultName = 'self-update'; - - private NewVersionCheckerInterface $versionChecker; - - private ToolInfoInterface $toolInfo; - - private PharCheckerInterface $pharChecker; - - public function __construct( - NewVersionCheckerInterface $versionChecker, - ToolInfoInterface $toolInfo, - PharCheckerInterface $pharChecker - ) { - parent::__construct(); - - $this->versionChecker = $versionChecker; - $this->toolInfo = $toolInfo; - $this->pharChecker = $pharChecker; - } - - /** - * {@inheritdoc} - */ - protected function configure(): void - { - $this - ->setAliases(['selfupdate']) - ->setDefinition( - [ - new InputOption('--force', '-f', InputOption::VALUE_NONE, 'Force update to next major version if available.'), - ] - ) - ->setDescription('Update php-cs-fixer.phar to the latest stable version.') - ->setHelp( - <<<'EOT' -The %command.name% command replace your php-cs-fixer.phar by the -latest version released on: -https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases - -$ php php-cs-fixer.phar %command.name% - -EOT - ) - ; - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output): int - { - if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity() && $output instanceof ConsoleOutputInterface) { - $stdErr = $output->getErrorOutput(); - $stdErr->writeln($this->getApplication()->getLongVersion()); - } - - if (!$this->toolInfo->isInstalledAsPhar()) { - $output->writeln('Self-update is available only for PHAR version.'); - - return 1; - } - - $currentVersion = $this->getApplication()->getVersion(); - Preg::match('/^v?(?\d+)\./', $currentVersion, $matches); - $currentMajor = (int) $matches['major']; - - try { - $latestVersion = $this->versionChecker->getLatestVersion(); - $latestVersionOfCurrentMajor = $this->versionChecker->getLatestVersionOfMajor($currentMajor); - } catch (\Exception $exception) { - $output->writeln(sprintf( - 'Unable to determine newest version: %s', - $exception->getMessage() - )); - - return 1; - } - - if (1 !== $this->versionChecker->compareVersions($latestVersion, $currentVersion)) { - $output->writeln('PHP CS Fixer is already up-to-date.'); - - return 0; - } - - $remoteTag = $latestVersion; - - if ( - 0 !== $this->versionChecker->compareVersions($latestVersionOfCurrentMajor, $latestVersion) - && true !== $input->getOption('force') - ) { - $output->writeln(sprintf('A new major version of PHP CS Fixer is available (%s)', $latestVersion)); - $output->writeln(sprintf('Before upgrading please read https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/%s/UPGRADE-v%s.md', $latestVersion, $currentMajor + 1)); - $output->writeln('If you are ready to upgrade run this command with -f'); - $output->writeln('Checking for new minor/patch version...'); - - if (1 !== $this->versionChecker->compareVersions($latestVersionOfCurrentMajor, $currentVersion)) { - $output->writeln('No minor update for PHP CS Fixer.'); - - return 0; - } - - $remoteTag = $latestVersionOfCurrentMajor; - } - - $localFilename = realpath($_SERVER['argv'][0]) ?: $_SERVER['argv'][0]; - - if (!is_writable($localFilename)) { - $output->writeln(sprintf('No permission to update "%s" file.', $localFilename)); - - return 1; - } - - $tempFilename = \dirname($localFilename).'/'.basename($localFilename, '.phar').'-tmp.phar'; - $remoteFilename = $this->toolInfo->getPharDownloadUri($remoteTag); - - if (false === @copy($remoteFilename, $tempFilename)) { - $output->writeln(sprintf('Unable to download new version %s from the server.', $remoteTag)); - - return 1; - } - - chmod($tempFilename, 0777 & ~umask()); - - $pharInvalidityReason = $this->pharChecker->checkFileValidity($tempFilename); - if (null !== $pharInvalidityReason) { - unlink($tempFilename); - $output->writeln(sprintf('The download of %s is corrupt (%s).', $remoteTag, $pharInvalidityReason)); - $output->writeln('Please re-run the "self-update" command to try again.'); - - return 1; - } - - rename($tempFilename, $localFilename); - - $output->writeln(sprintf('PHP CS Fixer updated (%s -> %s)', $currentVersion, $remoteTag)); - - return 0; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php deleted file mode 100644 index 5494fda1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php +++ /dev/null @@ -1,961 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console; - -use PhpCsFixer\Cache\CacheManagerInterface; -use PhpCsFixer\Cache\Directory; -use PhpCsFixer\Cache\DirectoryInterface; -use PhpCsFixer\Cache\FileCacheManager; -use PhpCsFixer\Cache\FileHandler; -use PhpCsFixer\Cache\NullCacheManager; -use PhpCsFixer\Cache\Signature; -use PhpCsFixer\ConfigInterface; -use PhpCsFixer\ConfigurationException\InvalidConfigurationException; -use PhpCsFixer\Console\Command\HelpCommand; -use PhpCsFixer\Console\Report\FixReport\ReporterFactory; -use PhpCsFixer\Console\Report\FixReport\ReporterInterface; -use PhpCsFixer\Differ\DifferInterface; -use PhpCsFixer\Differ\NullDiffer; -use PhpCsFixer\Differ\UnifiedDiffer; -use PhpCsFixer\Finder; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\FixerFactory; -use PhpCsFixer\Linter\Linter; -use PhpCsFixer\Linter\LinterInterface; -use PhpCsFixer\RuleSet\RuleSet; -use PhpCsFixer\RuleSet\RuleSetInterface; -use PhpCsFixer\StdinFileInfo; -use PhpCsFixer\ToolInfoInterface; -use PhpCsFixer\Utils; -use PhpCsFixer\WhitespacesFixerConfig; -use PhpCsFixer\WordMatcher; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Filesystem\Filesystem; -use Symfony\Component\Finder\Finder as SymfonyFinder; - -/** - * The resolver that resolves configuration to use by command line options and config. - * - * @author Fabien Potencier - * @author Katsuhiro Ogawa - * @author Dariusz Rumiński - * - * @internal - */ -final class ConfigurationResolver -{ - public const PATH_MODE_OVERRIDE = 'override'; - public const PATH_MODE_INTERSECTION = 'intersection'; - - /** - * @var null|bool - */ - private $allowRisky; - - /** - * @var null|ConfigInterface - */ - private $config; - - /** - * @var null|string - */ - private $configFile; - - private string $cwd; - - private ConfigInterface $defaultConfig; - - /** - * @var null|ReporterInterface - */ - private $reporter; - - /** - * @var null|bool - */ - private $isStdIn; - - /** - * @var null|bool - */ - private $isDryRun; - - /** - * @var null|FixerInterface[] - */ - private $fixers; - - /** - * @var null|bool - */ - private $configFinderIsOverridden; - - private ToolInfoInterface $toolInfo; - - /** - * @var array - */ - private array $options = [ - 'allow-risky' => null, - 'cache-file' => null, - 'config' => null, - 'diff' => null, - 'dry-run' => null, - 'format' => null, - 'path' => [], - 'path-mode' => self::PATH_MODE_OVERRIDE, - 'rules' => null, - 'show-progress' => null, - 'stop-on-violation' => null, - 'using-cache' => null, - 'verbosity' => null, - ]; - - /** - * @var null|string - */ - private $cacheFile; - - /** - * @var null|CacheManagerInterface - */ - private $cacheManager; - - /** - * @var null|DifferInterface - */ - private $differ; - - /** - * @var null|Directory - */ - private $directory; - - /** - * @var null|iterable<\SplFileInfo> - */ - private ?iterable $finder = null; - - private ?string $format = null; - - /** - * @var null|Linter - */ - private $linter; - - /** - * @var null|list - */ - private ?array $path = null; - - /** - * @var null|string - */ - private $progress; - - /** - * @var null|RuleSet - */ - private $ruleSet; - - /** - * @var null|bool - */ - private $usingCache; - - /** - * @var FixerFactory - */ - private $fixerFactory; - - /** - * @param array $options - */ - public function __construct( - ConfigInterface $config, - array $options, - string $cwd, - ToolInfoInterface $toolInfo - ) { - $this->defaultConfig = $config; - $this->cwd = $cwd; - $this->toolInfo = $toolInfo; - - foreach ($options as $name => $value) { - $this->setOption($name, $value); - } - } - - public function getCacheFile(): ?string - { - if (!$this->getUsingCache()) { - return null; - } - - if (null === $this->cacheFile) { - if (null === $this->options['cache-file']) { - $this->cacheFile = $this->getConfig()->getCacheFile(); - } else { - $this->cacheFile = $this->options['cache-file']; - } - } - - return $this->cacheFile; - } - - public function getCacheManager(): CacheManagerInterface - { - if (null === $this->cacheManager) { - $cacheFile = $this->getCacheFile(); - - if (null === $cacheFile) { - $this->cacheManager = new NullCacheManager(); - } else { - $this->cacheManager = new FileCacheManager( - new FileHandler($cacheFile), - new Signature( - PHP_VERSION, - $this->toolInfo->getVersion(), - $this->getConfig()->getIndent(), - $this->getConfig()->getLineEnding(), - $this->getRules() - ), - $this->isDryRun(), - $this->getDirectory() - ); - } - } - - return $this->cacheManager; - } - - public function getConfig(): ConfigInterface - { - if (null === $this->config) { - foreach ($this->computeConfigFiles() as $configFile) { - if (!file_exists($configFile)) { - continue; - } - - $configFileBasename = basename($configFile); - $deprecatedConfigs = [ - '.php_cs' => '.php-cs-fixer.php', - '.php_cs.dist' => '.php-cs-fixer.dist.php', - ]; - - if (isset($deprecatedConfigs[$configFileBasename])) { - throw new InvalidConfigurationException("Configuration file `{$configFileBasename}` is outdated, rename to `{$deprecatedConfigs[$configFileBasename]}`."); - } - - $this->config = self::separatedContextLessInclude($configFile); - $this->configFile = $configFile; - - break; - } - - if (null === $this->config) { - $this->config = $this->defaultConfig; - } - } - - return $this->config; - } - - public function getConfigFile(): ?string - { - if (null === $this->configFile) { - $this->getConfig(); - } - - return $this->configFile; - } - - public function getDiffer(): DifferInterface - { - if (null === $this->differ) { - if ($this->options['diff']) { - $this->differ = new UnifiedDiffer(); - } else { - $this->differ = new NullDiffer(); - } - } - - return $this->differ; - } - - public function getDirectory(): DirectoryInterface - { - if (null === $this->directory) { - $path = $this->getCacheFile(); - if (null === $path) { - $absolutePath = $this->cwd; - } else { - $filesystem = new Filesystem(); - - $absolutePath = $filesystem->isAbsolutePath($path) - ? $path - : $this->cwd.\DIRECTORY_SEPARATOR.$path; - } - - $this->directory = new Directory(\dirname($absolutePath)); - } - - return $this->directory; - } - - /** - * @return FixerInterface[] An array of FixerInterface - */ - public function getFixers(): array - { - if (null === $this->fixers) { - $this->fixers = $this->createFixerFactory() - ->useRuleSet($this->getRuleSet()) - ->setWhitespacesConfig(new WhitespacesFixerConfig($this->config->getIndent(), $this->config->getLineEnding())) - ->getFixers() - ; - - if (false === $this->getRiskyAllowed()) { - $riskyFixers = array_map( - static function (FixerInterface $fixer): string { - return $fixer->getName(); - }, - array_filter( - $this->fixers, - static function (FixerInterface $fixer): bool { - return $fixer->isRisky(); - } - ) - ); - - if (\count($riskyFixers) > 0) { - throw new InvalidConfigurationException(sprintf('The rules contain risky fixers ("%s"), but they are not allowed to run. Perhaps you forget to use --allow-risky=yes option?', implode('", "', $riskyFixers))); - } - } - } - - return $this->fixers; - } - - public function getLinter(): LinterInterface - { - if (null === $this->linter) { - $this->linter = new Linter(); - } - - return $this->linter; - } - - /** - * Returns path. - * - * @return string[] - */ - public function getPath(): array - { - if (null === $this->path) { - $filesystem = new Filesystem(); - $cwd = $this->cwd; - - if (1 === \count($this->options['path']) && '-' === $this->options['path'][0]) { - $this->path = $this->options['path']; - } else { - $this->path = array_map( - static function (string $rawPath) use ($cwd, $filesystem): string { - $path = trim($rawPath); - - if ('' === $path) { - throw new InvalidConfigurationException("Invalid path: \"{$rawPath}\"."); - } - - $absolutePath = $filesystem->isAbsolutePath($path) - ? $path - : $cwd.\DIRECTORY_SEPARATOR.$path; - - if (!file_exists($absolutePath)) { - throw new InvalidConfigurationException(sprintf( - 'The path "%s" is not readable.', - $path - )); - } - - return $absolutePath; - }, - $this->options['path'] - ); - } - } - - return $this->path; - } - - /** - * @throws InvalidConfigurationException - */ - public function getProgress(): string - { - if (null === $this->progress) { - if (OutputInterface::VERBOSITY_VERBOSE <= $this->options['verbosity'] && 'txt' === $this->getFormat()) { - $progressType = $this->options['show-progress']; - $progressTypes = ['none', 'dots']; - - if (null === $progressType) { - $progressType = $this->getConfig()->getHideProgress() ? 'none' : 'dots'; - } elseif (!\in_array($progressType, $progressTypes, true)) { - throw new InvalidConfigurationException(sprintf( - 'The progress type "%s" is not defined, supported are "%s".', - $progressType, - implode('", "', $progressTypes) - )); - } - - $this->progress = $progressType; - } else { - $this->progress = 'none'; - } - } - - return $this->progress; - } - - public function getReporter(): ReporterInterface - { - if (null === $this->reporter) { - $reporterFactory = new ReporterFactory(); - $reporterFactory->registerBuiltInReporters(); - - $format = $this->getFormat(); - - try { - $this->reporter = $reporterFactory->getReporter($format); - } catch (\UnexpectedValueException $e) { - $formats = $reporterFactory->getFormats(); - sort($formats); - - throw new InvalidConfigurationException(sprintf('The format "%s" is not defined, supported are "%s".', $format, implode('", "', $formats))); - } - } - - return $this->reporter; - } - - public function getRiskyAllowed(): bool - { - if (null === $this->allowRisky) { - if (null === $this->options['allow-risky']) { - $this->allowRisky = $this->getConfig()->getRiskyAllowed(); - } else { - $this->allowRisky = $this->resolveOptionBooleanValue('allow-risky'); - } - } - - return $this->allowRisky; - } - - /** - * Returns rules. - * - * @return array|bool> - */ - public function getRules(): array - { - return $this->getRuleSet()->getRules(); - } - - public function getUsingCache(): bool - { - if (null === $this->usingCache) { - if (null === $this->options['using-cache']) { - $this->usingCache = $this->getConfig()->getUsingCache(); - } else { - $this->usingCache = $this->resolveOptionBooleanValue('using-cache'); - } - } - - $this->usingCache = $this->usingCache && ($this->toolInfo->isInstalledAsPhar() || $this->toolInfo->isInstalledByComposer()); - - return $this->usingCache; - } - - /** - * @return iterable<\SplFileInfo> - */ - public function getFinder(): iterable - { - if (null === $this->finder) { - $this->finder = $this->resolveFinder(); - } - - return $this->finder; - } - - /** - * Returns dry-run flag. - */ - public function isDryRun(): bool - { - if (null === $this->isDryRun) { - if ($this->isStdIn()) { - // Can't write to STDIN - $this->isDryRun = true; - } else { - $this->isDryRun = $this->options['dry-run']; - } - } - - return $this->isDryRun; - } - - public function shouldStopOnViolation(): bool - { - return $this->options['stop-on-violation']; - } - - public function configFinderIsOverridden(): bool - { - if (null === $this->configFinderIsOverridden) { - $this->resolveFinder(); - } - - return $this->configFinderIsOverridden; - } - - /** - * Compute file candidates for config file. - * - * @return string[] - */ - private function computeConfigFiles(): array - { - $configFile = $this->options['config']; - - if (null !== $configFile) { - if (false === file_exists($configFile) || false === is_readable($configFile)) { - throw new InvalidConfigurationException(sprintf('Cannot read config file "%s".', $configFile)); - } - - return [$configFile]; - } - - $path = $this->getPath(); - - if ($this->isStdIn() || 0 === \count($path)) { - $configDir = $this->cwd; - } elseif (1 < \count($path)) { - throw new InvalidConfigurationException('For multiple paths config parameter is required.'); - } elseif (!is_file($path[0])) { - $configDir = $path[0]; - } else { - $dirName = pathinfo($path[0], PATHINFO_DIRNAME); - $configDir = $dirName ?: $path[0]; - } - - $candidates = [ - $configDir.\DIRECTORY_SEPARATOR.'.php-cs-fixer.php', - $configDir.\DIRECTORY_SEPARATOR.'.php-cs-fixer.dist.php', - $configDir.\DIRECTORY_SEPARATOR.'.php_cs', // old v2 config, present here only to throw nice error message later - $configDir.\DIRECTORY_SEPARATOR.'.php_cs.dist', // old v2 config, present here only to throw nice error message later - ]; - - if ($configDir !== $this->cwd) { - $candidates[] = $this->cwd.\DIRECTORY_SEPARATOR.'.php-cs-fixer.php'; - $candidates[] = $this->cwd.\DIRECTORY_SEPARATOR.'.php-cs-fixer.dist.php'; - $candidates[] = $this->cwd.\DIRECTORY_SEPARATOR.'.php_cs'; // old v2 config, present here only to throw nice error message later - $candidates[] = $this->cwd.\DIRECTORY_SEPARATOR.'.php_cs.dist'; // old v2 config, present here only to throw nice error message later - } - - return $candidates; - } - - private function createFixerFactory(): FixerFactory - { - if (null === $this->fixerFactory) { - $fixerFactory = new FixerFactory(); - $fixerFactory->registerBuiltInFixers(); - $fixerFactory->registerCustomFixers($this->getConfig()->getCustomFixers()); - - $this->fixerFactory = $fixerFactory; - } - - return $this->fixerFactory; - } - - private function getFormat(): string - { - if (null === $this->format) { - $this->format = $this->options['format'] ?? $this->getConfig()->getFormat(); - } - - return $this->format; - } - - private function getRuleSet(): RuleSetInterface - { - if (null === $this->ruleSet) { - $rules = $this->parseRules(); - $this->validateRules($rules); - - $this->ruleSet = new RuleSet($rules); - } - - return $this->ruleSet; - } - - private function isStdIn(): bool - { - if (null === $this->isStdIn) { - $this->isStdIn = 1 === \count($this->options['path']) && '-' === $this->options['path'][0]; - } - - return $this->isStdIn; - } - - /** - * @template T - * - * @param iterable $iterable - * - * @return \Traversable - */ - private function iterableToTraversable(iterable $iterable): \Traversable - { - return \is_array($iterable) ? new \ArrayIterator($iterable) : $iterable; - } - - /** - * @return array - */ - private function parseRules(): array - { - if (null === $this->options['rules']) { - return $this->getConfig()->getRules(); - } - - $rules = trim($this->options['rules']); - if ('' === $rules) { - throw new InvalidConfigurationException('Empty rules value is not allowed.'); - } - - if (str_starts_with($rules, '{')) { - $rules = json_decode($rules, true); - - if (JSON_ERROR_NONE !== json_last_error()) { - throw new InvalidConfigurationException(sprintf('Invalid JSON rules input: "%s".', json_last_error_msg())); - } - - return $rules; - } - - $rules = []; - - foreach (explode(',', $this->options['rules']) as $rule) { - $rule = trim($rule); - - if ('' === $rule) { - throw new InvalidConfigurationException('Empty rule name is not allowed.'); - } - - if (str_starts_with($rule, '-')) { - $rules[substr($rule, 1)] = false; - } else { - $rules[$rule] = true; - } - } - - return $rules; - } - - /** - * @param array $rules - * - * @throws InvalidConfigurationException - */ - private function validateRules(array $rules): void - { - /** - * Create a ruleset that contains all configured rules, even when they originally have been disabled. - * - * @see RuleSet::resolveSet() - */ - $ruleSet = []; - - foreach ($rules as $key => $value) { - if (\is_int($key)) { - throw new InvalidConfigurationException(sprintf('Missing value for "%s" rule/set.', $value)); - } - - $ruleSet[$key] = true; - } - - $ruleSet = new RuleSet($ruleSet); - - $configuredFixers = array_keys($ruleSet->getRules()); - - $fixers = $this->createFixerFactory()->getFixers(); - - $availableFixers = array_map(static fn (FixerInterface $fixer): string => $fixer->getName(), $fixers); - - $unknownFixers = array_diff($configuredFixers, $availableFixers); - - if (\count($unknownFixers) > 0) { - $renamedRules = [ - 'blank_line_before_return' => [ - 'new_name' => 'blank_line_before_statement', - 'config' => ['statements' => ['return']], - ], - 'final_static_access' => [ - 'new_name' => 'self_static_accessor', - ], - 'hash_to_slash_comment' => [ - 'new_name' => 'single_line_comment_style', - 'config' => ['comment_types' => ['hash']], - ], - 'lowercase_constants' => [ - 'new_name' => 'constant_case', - 'config' => ['case' => 'lower'], - ], - 'no_extra_consecutive_blank_lines' => [ - 'new_name' => 'no_extra_blank_lines', - ], - 'no_multiline_whitespace_before_semicolons' => [ - 'new_name' => 'multiline_whitespace_before_semicolons', - ], - 'no_short_echo_tag' => [ - 'new_name' => 'echo_tag_syntax', - 'config' => ['format' => 'long'], - ], - 'php_unit_ordered_covers' => [ - 'new_name' => 'phpdoc_order_by_value', - 'config' => ['annotations' => ['covers']], - ], - 'phpdoc_inline_tag' => [ - 'new_name' => 'general_phpdoc_tag_rename, phpdoc_inline_tag_normalizer and phpdoc_tag_type', - ], - 'pre_increment' => [ - 'new_name' => 'increment_style', - 'config' => ['style' => 'pre'], - ], - 'psr0' => [ - 'new_name' => 'psr_autoloading', - 'config' => ['dir' => 'x'], - ], - 'psr4' => [ - 'new_name' => 'psr_autoloading', - ], - 'silenced_deprecation_error' => [ - 'new_name' => 'error_suppression', - ], - 'trailing_comma_in_multiline_array' => [ - 'new_name' => 'trailing_comma_in_multiline', - 'config' => ['elements' => ['arrays']], - ], - ]; - - $message = 'The rules contain unknown fixers: '; - $hasOldRule = false; - - foreach ($unknownFixers as $unknownFixer) { - if (isset($renamedRules[$unknownFixer])) { // Check if present as old renamed rule - $hasOldRule = true; - $message .= sprintf( - '"%s" is renamed (did you mean "%s"?%s), ', - $unknownFixer, - $renamedRules[$unknownFixer]['new_name'], - isset($renamedRules[$unknownFixer]['config']) ? ' (note: use configuration "'.HelpCommand::toString($renamedRules[$unknownFixer]['config']).'")' : '' - ); - } else { // Go to normal matcher if it is not a renamed rule - $matcher = new WordMatcher($availableFixers); - $alternative = $matcher->match($unknownFixer); - $message .= sprintf( - '"%s"%s, ', - $unknownFixer, - null === $alternative ? '' : ' (did you mean "'.$alternative.'"?)' - ); - } - } - - $message = substr($message, 0, -2).'.'; - - if ($hasOldRule) { - $message .= "\nFor more info about updating see: https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/v3.0.0/UPGRADE-v3.md#renamed-ruless."; - } - - throw new InvalidConfigurationException($message); - } - - foreach ($fixers as $fixer) { - $fixerName = $fixer->getName(); - if (isset($rules[$fixerName]) && $fixer instanceof DeprecatedFixerInterface) { - $successors = $fixer->getSuccessorsNames(); - $messageEnd = [] === $successors - ? sprintf(' and will be removed in version %d.0.', Application::getMajorVersion() + 1) - : sprintf('. Use %s instead.', str_replace('`', '"', Utils::naturalLanguageJoinWithBackticks($successors))); - - Utils::triggerDeprecation(new \RuntimeException("Rule \"{$fixerName}\" is deprecated{$messageEnd}")); - } - } - } - - /** - * Apply path on config instance. - * - * @return iterable<\SplFileInfo> - */ - private function resolveFinder(): iterable - { - $this->configFinderIsOverridden = false; - - if ($this->isStdIn()) { - return new \ArrayIterator([new StdinFileInfo()]); - } - - $modes = [self::PATH_MODE_OVERRIDE, self::PATH_MODE_INTERSECTION]; - - if (!\in_array( - $this->options['path-mode'], - $modes, - true - )) { - throw new InvalidConfigurationException(sprintf( - 'The path-mode "%s" is not defined, supported are "%s".', - $this->options['path-mode'], - implode('", "', $modes) - )); - } - - $isIntersectionPathMode = self::PATH_MODE_INTERSECTION === $this->options['path-mode']; - - $paths = array_filter(array_map( - static function (string $path) { - return realpath($path); - }, - $this->getPath() - )); - - if (0 === \count($paths)) { - if ($isIntersectionPathMode) { - return new \ArrayIterator([]); - } - - return $this->iterableToTraversable($this->getConfig()->getFinder()); - } - - $pathsByType = [ - 'file' => [], - 'dir' => [], - ]; - - foreach ($paths as $path) { - if (is_file($path)) { - $pathsByType['file'][] = $path; - } else { - $pathsByType['dir'][] = $path.\DIRECTORY_SEPARATOR; - } - } - - $nestedFinder = null; - $currentFinder = $this->iterableToTraversable($this->getConfig()->getFinder()); - - try { - $nestedFinder = $currentFinder instanceof \IteratorAggregate ? $currentFinder->getIterator() : $currentFinder; - } catch (\Exception $e) { - } - - if ($isIntersectionPathMode) { - if (null === $nestedFinder) { - throw new InvalidConfigurationException( - 'Cannot create intersection with not-fully defined Finder in configuration file.' - ); - } - - return new \CallbackFilterIterator( - new \IteratorIterator($nestedFinder), - static function (\SplFileInfo $current) use ($pathsByType): bool { - $currentRealPath = $current->getRealPath(); - - if (\in_array($currentRealPath, $pathsByType['file'], true)) { - return true; - } - - foreach ($pathsByType['dir'] as $path) { - if (str_starts_with($currentRealPath, $path)) { - return true; - } - } - - return false; - } - ); - } - - if (null !== $this->getConfigFile() && null !== $nestedFinder) { - $this->configFinderIsOverridden = true; - } - - if ($currentFinder instanceof SymfonyFinder && null === $nestedFinder) { - // finder from configuration Symfony finder and it is not fully defined, we may fulfill it - return $currentFinder->in($pathsByType['dir'])->append($pathsByType['file']); - } - - return Finder::create()->in($pathsByType['dir'])->append($pathsByType['file']); - } - - /** - * Set option that will be resolved. - * - * @param mixed $value - */ - private function setOption(string $name, $value): void - { - if (!\array_key_exists($name, $this->options)) { - throw new InvalidConfigurationException(sprintf('Unknown option name: "%s".', $name)); - } - - $this->options[$name] = $value; - } - - private function resolveOptionBooleanValue(string $optionName): bool - { - $value = $this->options[$optionName]; - - if (!\is_string($value)) { - throw new InvalidConfigurationException(sprintf('Expected boolean or string value for option "%s".', $optionName)); - } - - if ('yes' === $value) { - return true; - } - - if ('no' === $value) { - return false; - } - - throw new InvalidConfigurationException(sprintf('Expected "yes" or "no" for option "%s", got "%s".', $optionName, $value)); - } - - private static function separatedContextLessInclude(string $path): ConfigInterface - { - $config = include $path; - - // verify that the config has an instance of Config - if (!$config instanceof ConfigInterface) { - throw new InvalidConfigurationException(sprintf('The config file: "%s" does not return a "PhpCsFixer\ConfigInterface" instance. Got: "%s".', $path, \is_object($config) ? \get_class($config) : \gettype($config))); - } - - return $config; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php deleted file mode 100644 index 7f4e258a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php +++ /dev/null @@ -1,156 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Output; - -use PhpCsFixer\Differ\DiffConsoleFormatter; -use PhpCsFixer\Error\Error; -use PhpCsFixer\Linter\LintingException; -use Symfony\Component\Console\Formatter\OutputFormatter; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @internal - */ -final class ErrorOutput -{ - private OutputInterface $output; - - /** - * @var bool - */ - private $isDecorated; - - public function __construct(OutputInterface $output) - { - $this->output = $output; - $this->isDecorated = $output->isDecorated(); - } - - /** - * @param Error[] $errors - */ - public function listErrors(string $process, array $errors): void - { - $this->output->writeln(['', sprintf( - 'Files that were not fixed due to errors reported during %s:', - $process - )]); - - $showDetails = $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE; - $showTrace = $this->output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG; - foreach ($errors as $i => $error) { - $this->output->writeln(sprintf('%4d) %s', $i + 1, $error->getFilePath())); - $e = $error->getSource(); - if (!$showDetails || null === $e) { - continue; - } - - $class = sprintf('[%s]', \get_class($e)); - $message = $e->getMessage(); - $code = $e->getCode(); - if (0 !== $code) { - $message .= " ({$code})"; - } - - $length = max(\strlen($class), \strlen($message)); - $lines = [ - '', - $class, - $message, - '', - ]; - - $this->output->writeln(''); - - foreach ($lines as $line) { - if (\strlen($line) < $length) { - $line .= str_repeat(' ', $length - \strlen($line)); - } - - $this->output->writeln(sprintf(' %s ', $this->prepareOutput($line))); - } - - if ($showTrace && !$e instanceof LintingException) { // stack trace of lint exception is of no interest - $this->output->writeln(''); - $stackTrace = $e->getTrace(); - foreach ($stackTrace as $trace) { - if (isset($trace['class']) && \Symfony\Component\Console\Command\Command::class === $trace['class'] && 'run' === $trace['function']) { - $this->output->writeln(' [ ... ]'); - - break; - } - - $this->outputTrace($trace); - } - } - - if (Error::TYPE_LINT === $error->getType() && 0 < \count($error->getAppliedFixers())) { - $this->output->writeln(''); - $this->output->writeln(sprintf(' Applied fixers: %s', implode(', ', $error->getAppliedFixers()))); - - $diff = $error->getDiff(); - if (!empty($diff)) { - $diffFormatter = new DiffConsoleFormatter( - $this->isDecorated, - sprintf( - ' ---------- begin diff ----------%s%%s%s ----------- end diff -----------', - PHP_EOL, - PHP_EOL - ) - ); - - $this->output->writeln($diffFormatter->format($diff)); - } - } - } - } - - /** - * @param array{ - * function?: string, - * line?: int, - * file?: string, - * class?: class-string, - * type?: '::'|'->', - * args?: mixed[], - * object?: object, - * } $trace - */ - private function outputTrace(array $trace): void - { - if (isset($trace['class'], $trace['type'], $trace['function'])) { - $this->output->writeln(sprintf( - ' %s%s%s()', - $this->prepareOutput($trace['class']), - $this->prepareOutput($trace['type']), - $this->prepareOutput($trace['function']) - )); - } elseif (isset($trace['function'])) { - $this->output->writeln(sprintf(' %s()', $this->prepareOutput($trace['function']))); - } - - if (isset($trace['file'])) { - $this->output->writeln(sprintf(' in %s at line %d', $this->prepareOutput($trace['file']), $trace['line'])); - } - } - - private function prepareOutput(string $string): string - { - return $this->isDecorated - ? OutputFormatter::escape($string) - : $string - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php deleted file mode 100644 index 38b6999e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/NullOutput.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Output; - -/** - * @internal - */ -final class NullOutput implements ProcessOutputInterface -{ - public function printLegend(): void - { - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php deleted file mode 100644 index 6d504b8e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutput.php +++ /dev/null @@ -1,133 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Output; - -use PhpCsFixer\FixerFileProcessedEvent; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; - -/** - * Output writer to show the process of a FixCommand. - * - * @internal - */ -final class ProcessOutput implements ProcessOutputInterface -{ - /** - * File statuses map. - * - * @var array - */ - private static array $eventStatusMap = [ - FixerFileProcessedEvent::STATUS_NO_CHANGES => ['symbol' => '.', 'format' => '%s', 'description' => 'no changes'], - FixerFileProcessedEvent::STATUS_FIXED => ['symbol' => 'F', 'format' => '%s', 'description' => 'fixed'], - FixerFileProcessedEvent::STATUS_SKIPPED => ['symbol' => 'S', 'format' => '%s', 'description' => 'skipped (cached or empty file)'], - FixerFileProcessedEvent::STATUS_INVALID => ['symbol' => 'I', 'format' => '%s', 'description' => 'invalid file syntax (file ignored)'], - FixerFileProcessedEvent::STATUS_EXCEPTION => ['symbol' => 'E', 'format' => '%s', 'description' => 'error'], - FixerFileProcessedEvent::STATUS_LINT => ['symbol' => 'E', 'format' => '%s', 'description' => 'error'], - ]; - - private OutputInterface $output; - - private EventDispatcherInterface $eventDispatcher; - - private int $files; - - private int $processedFiles = 0; - - /** - * @var int - */ - private $symbolsPerLine; - - public function __construct(OutputInterface $output, EventDispatcherInterface $dispatcher, int $width, int $nbFiles) - { - $this->output = $output; - $this->eventDispatcher = $dispatcher; - $this->eventDispatcher->addListener(FixerFileProcessedEvent::NAME, [$this, 'onFixerFileProcessed']); - $this->files = $nbFiles; - - // max number of characters per line - // - total length x 2 (e.g. " 1 / 123" => 6 digits and padding spaces) - // - 11 (extra spaces, parentheses and percentage characters, e.g. " x / x (100%)") - $this->symbolsPerLine = max(1, $width - \strlen((string) $this->files) * 2 - 11); - } - - public function __destruct() - { - $this->eventDispatcher->removeListener(FixerFileProcessedEvent::NAME, [$this, 'onFixerFileProcessed']); - } - - /** - * This class is not intended to be serialized, - * and cannot be deserialized (see __wakeup method). - */ - public function __sleep(): array - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - /** - * Disable the deserialization of the class to prevent attacker executing - * code by leveraging the __destruct method. - * - * @see https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection - */ - public function __wakeup(): void - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } - - public function onFixerFileProcessed(FixerFileProcessedEvent $event): void - { - $status = self::$eventStatusMap[$event->getStatus()]; - $this->output->write($this->output->isDecorated() ? sprintf($status['format'], $status['symbol']) : $status['symbol']); - - ++$this->processedFiles; - - $symbolsOnCurrentLine = $this->processedFiles % $this->symbolsPerLine; - $isLast = $this->processedFiles === $this->files; - - if (0 === $symbolsOnCurrentLine || $isLast) { - $this->output->write(sprintf( - '%s %'.\strlen((string) $this->files).'d / %d (%3d%%)', - $isLast && 0 !== $symbolsOnCurrentLine ? str_repeat(' ', $this->symbolsPerLine - $symbolsOnCurrentLine) : '', - $this->processedFiles, - $this->files, - round($this->processedFiles / $this->files * 100) - )); - - if (!$isLast) { - $this->output->writeln(''); - } - } - } - - public function printLegend(): void - { - $symbols = []; - - foreach (self::$eventStatusMap as $status) { - $symbol = $status['symbol']; - if ('' === $symbol || isset($symbols[$symbol])) { - continue; - } - - $symbols[$symbol] = sprintf('%s-%s', $this->output->isDecorated() ? sprintf($status['format'], $symbol) : $symbol, $status['description']); - } - - $this->output->write(sprintf("\nLegend: %s\n", implode(', ', $symbols))); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php deleted file mode 100644 index 80726c38..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Output/ProcessOutputInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Output; - -/** - * @internal - */ -interface ProcessOutputInterface -{ - public function printLegend(): void; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php deleted file mode 100644 index c283b238..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php +++ /dev/null @@ -1,71 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * @author Kévin Gomez - * - * @internal - */ -final class CheckstyleReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'checkstyle'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - if (!\extension_loaded('dom')) { - throw new \RuntimeException('Cannot generate report! `ext-dom` is not available!'); - } - - $dom = new \DOMDocument('1.0', 'UTF-8'); - $checkstyles = $dom->appendChild($dom->createElement('checkstyle')); - - foreach ($reportSummary->getChanged() as $filePath => $fixResult) { - /** @var \DOMElement $file */ - $file = $checkstyles->appendChild($dom->createElement('file')); - $file->setAttribute('name', $filePath); - - foreach ($fixResult['appliedFixers'] as $appliedFixer) { - $error = $this->createError($dom, $appliedFixer); - $file->appendChild($error); - } - } - - $dom->formatOutput = true; - - return $reportSummary->isDecoratedOutput() ? OutputFormatter::escape($dom->saveXML()) : $dom->saveXML(); - } - - private function createError(\DOMDocument $dom, string $appliedFixer): \DOMElement - { - $error = $dom->createElement('error'); - $error->setAttribute('severity', 'warning'); - $error->setAttribute('source', 'PHP-CS-Fixer.'.$appliedFixer); - $error->setAttribute('message', 'Found violation(s) of type: '.$appliedFixer); - - return $error; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php deleted file mode 100644 index 974d66d1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * Generates a report according to gitlabs subset of codeclimate json files. - * - * @see https://github.com/codeclimate/platform/blob/master/spec/analyzers/SPEC.md#data-types - * - * @author Hans-Christian Otto - * - * @internal - */ -final class GitlabReporter implements ReporterInterface -{ - public function getFormat(): string - { - return 'gitlab'; - } - - /** - * Process changed files array. Returns generated report. - */ - public function generate(ReportSummary $reportSummary): string - { - $report = []; - foreach ($reportSummary->getChanged() as $fileName => $change) { - foreach ($change['appliedFixers'] as $fixerName) { - $report[] = [ - 'description' => $fixerName, - 'fingerprint' => md5($fileName.$fixerName), - 'severity' => 'minor', - 'location' => [ - 'path' => $fileName, - 'lines' => [ - 'begin' => 0, // line numbers are required in the format, but not available to reports - ], - ], - ]; - } - } - - $jsonString = json_encode($report); - - return $reportSummary->isDecoratedOutput() ? OutputFormatter::escape($jsonString) : $jsonString; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php deleted file mode 100644 index 4e170e4b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php +++ /dev/null @@ -1,67 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class JsonReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'json'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - $jsonFiles = []; - - foreach ($reportSummary->getChanged() as $file => $fixResult) { - $jsonFile = ['name' => $file]; - - if ($reportSummary->shouldAddAppliedFixers()) { - $jsonFile['appliedFixers'] = $fixResult['appliedFixers']; - } - - if ('' !== $fixResult['diff']) { - $jsonFile['diff'] = $fixResult['diff']; - } - - $jsonFiles[] = $jsonFile; - } - - $json = [ - 'files' => $jsonFiles, - 'time' => [ - 'total' => round($reportSummary->getTime() / 1000, 3), - ], - 'memory' => round($reportSummary->getMemory() / 1024 / 1024, 3), - ]; - - $json = json_encode($json); - - return $reportSummary->isDecoratedOutput() ? OutputFormatter::escape($json) : $json; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php deleted file mode 100644 index 9cf9c6df..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php +++ /dev/null @@ -1,141 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use PhpCsFixer\Preg; -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class JunitReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'junit'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - if (!\extension_loaded('dom')) { - throw new \RuntimeException('Cannot generate report! `ext-dom` is not available!'); - } - - $dom = new \DOMDocument('1.0', 'UTF-8'); - $testsuites = $dom->appendChild($dom->createElement('testsuites')); - - /** @var \DomElement $testsuite */ - $testsuite = $testsuites->appendChild($dom->createElement('testsuite')); - $testsuite->setAttribute('name', 'PHP CS Fixer'); - - if (\count($reportSummary->getChanged()) > 0) { - $this->createFailedTestCases($dom, $testsuite, $reportSummary); - } else { - $this->createSuccessTestCase($dom, $testsuite); - } - - if ($reportSummary->getTime() > 0) { - $testsuite->setAttribute( - 'time', - sprintf( - '%.3f', - $reportSummary->getTime() / 1000 - ) - ); - } - - $dom->formatOutput = true; - - return $reportSummary->isDecoratedOutput() ? OutputFormatter::escape($dom->saveXML()) : $dom->saveXML(); - } - - private function createSuccessTestCase(\DOMDocument $dom, \DOMElement $testsuite): void - { - $testcase = $dom->createElement('testcase'); - $testcase->setAttribute('name', 'All OK'); - $testcase->setAttribute('assertions', '1'); - - $testsuite->appendChild($testcase); - $testsuite->setAttribute('tests', '1'); - $testsuite->setAttribute('assertions', '1'); - $testsuite->setAttribute('failures', '0'); - $testsuite->setAttribute('errors', '0'); - } - - private function createFailedTestCases(\DOMDocument $dom, \DOMElement $testsuite, ReportSummary $reportSummary): void - { - $assertionsCount = 0; - foreach ($reportSummary->getChanged() as $file => $fixResult) { - $testcase = $this->createFailedTestCase( - $dom, - $file, - $fixResult, - $reportSummary->shouldAddAppliedFixers() - ); - $testsuite->appendChild($testcase); - $assertionsCount += (int) $testcase->getAttribute('assertions'); - } - - $testsuite->setAttribute('tests', (string) \count($reportSummary->getChanged())); - $testsuite->setAttribute('assertions', (string) $assertionsCount); - $testsuite->setAttribute('failures', (string) $assertionsCount); - $testsuite->setAttribute('errors', '0'); - } - - /** - * @param array{appliedFixers: list, diff: string} $fixResult - */ - private function createFailedTestCase(\DOMDocument $dom, string $file, array $fixResult, bool $shouldAddAppliedFixers): \DOMElement - { - $appliedFixersCount = \count($fixResult['appliedFixers']); - - $testName = str_replace('.', '_DOT_', Preg::replace('@\.'.pathinfo($file, PATHINFO_EXTENSION).'$@', '', $file)); - - $testcase = $dom->createElement('testcase'); - $testcase->setAttribute('name', $testName); - $testcase->setAttribute('file', $file); - $testcase->setAttribute('assertions', (string) $appliedFixersCount); - - $failure = $dom->createElement('failure'); - $failure->setAttribute('type', 'code_style'); - $testcase->appendChild($failure); - - if ($shouldAddAppliedFixers) { - $failureContent = "applied fixers:\n---------------\n"; - - foreach ($fixResult['appliedFixers'] as $appliedFixer) { - $failureContent .= "* {$appliedFixer}\n"; - } - } else { - $failureContent = "Wrong code style\n"; - } - - if ('' !== $fixResult['diff']) { - $failureContent .= "\nDiff:\n---------------\n\n".$fixResult['diff']; - } - - $failure->appendChild($dom->createCDATASection(trim($failureContent))); - - return $testcase; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php deleted file mode 100644 index 851d4cb3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php +++ /dev/null @@ -1,92 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class ReportSummary -{ - /** - * @var array, diff: string}> - */ - private array $changed; - - private int $time; - - private int $memory; - - private bool $addAppliedFixers; - - private bool $isDryRun; - - private bool $isDecoratedOutput; - - /** - * @param array, diff: string}> $changed - * @param int $time duration in milliseconds - * @param int $memory memory usage in bytes - */ - public function __construct( - array $changed, - int $time, - int $memory, - bool $addAppliedFixers, - bool $isDryRun, - bool $isDecoratedOutput - ) { - $this->changed = $changed; - $this->time = $time; - $this->memory = $memory; - $this->addAppliedFixers = $addAppliedFixers; - $this->isDryRun = $isDryRun; - $this->isDecoratedOutput = $isDecoratedOutput; - } - - public function isDecoratedOutput(): bool - { - return $this->isDecoratedOutput; - } - - public function isDryRun(): bool - { - return $this->isDryRun; - } - - /** - * @return array, diff: string}> - */ - public function getChanged(): array - { - return $this->changed; - } - - public function getMemory(): int - { - return $this->memory; - } - - public function getTime(): int - { - return $this->time; - } - - public function shouldAddAppliedFixers(): bool - { - return $this->addAppliedFixers; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php deleted file mode 100644 index d091f441..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php +++ /dev/null @@ -1,92 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use Symfony\Component\Finder\Finder as SymfonyFinder; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class ReporterFactory -{ - /** - * @var array - */ - private array $reporters = []; - - public function registerBuiltInReporters(): self - { - /** @var null|list $builtInReporters */ - static $builtInReporters; - - if (null === $builtInReporters) { - $builtInReporters = []; - - foreach (SymfonyFinder::create()->files()->name('*Reporter.php')->in(__DIR__) as $file) { - $relativeNamespace = $file->getRelativePath(); - $builtInReporters[] = sprintf( - '%s\\%s%s', - __NAMESPACE__, - $relativeNamespace ? $relativeNamespace.'\\' : '', - $file->getBasename('.php') - ); - } - } - - foreach ($builtInReporters as $reporterClass) { - $this->registerReporter(new $reporterClass()); - } - - return $this; - } - - /** - * @return $this - */ - public function registerReporter(ReporterInterface $reporter): self - { - $format = $reporter->getFormat(); - - if (isset($this->reporters[$format])) { - throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is already registered.', $format)); - } - - $this->reporters[$format] = $reporter; - - return $this; - } - - /** - * @return list - */ - public function getFormats(): array - { - $formats = array_keys($this->reporters); - sort($formats); - - return $formats; - } - - public function getReporter(string $format): ReporterInterface - { - if (!isset($this->reporters[$format])) { - throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is not registered.', $format)); - } - - return $this->reporters[$format]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php deleted file mode 100644 index 44fab560..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -/** - * @author Boris Gorbylev - * - * @internal - */ -interface ReporterInterface -{ - public function getFormat(): string; - - /** - * Process changed files array. Returns generated report. - */ - public function generate(ReportSummary $reportSummary): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php deleted file mode 100644 index 35b479a9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php +++ /dev/null @@ -1,99 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use PhpCsFixer\Differ\DiffConsoleFormatter; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class TextReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'txt'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - $output = ''; - - $i = 0; - foreach ($reportSummary->getChanged() as $file => $fixResult) { - ++$i; - $output .= sprintf('%4d) %s', $i, $file); - - if ($reportSummary->shouldAddAppliedFixers()) { - $output .= $this->getAppliedFixers( - $reportSummary->isDecoratedOutput(), - $fixResult['appliedFixers'], - ); - } - - $output .= $this->getDiff($reportSummary->isDecoratedOutput(), $fixResult['diff']); - $output .= PHP_EOL; - } - - return $output.$this->getFooter($reportSummary->getTime(), $reportSummary->getMemory(), $reportSummary->isDryRun()); - } - - /** - * @param list $appliedFixers - */ - private function getAppliedFixers(bool $isDecoratedOutput, array $appliedFixers): string - { - return sprintf( - $isDecoratedOutput ? ' (%s)' : ' (%s)', - implode(', ', $appliedFixers) - ); - } - - private function getDiff(bool $isDecoratedOutput, string $diff): string - { - if ('' === $diff) { - return ''; - } - - $diffFormatter = new DiffConsoleFormatter($isDecoratedOutput, sprintf( - ' ---------- begin diff ----------%s%%s%s ----------- end diff -----------', - PHP_EOL, - PHP_EOL - )); - - return PHP_EOL.$diffFormatter->format($diff).PHP_EOL; - } - - private function getFooter(int $time, int $memory, bool $isDryRun): string - { - if (0 === $time || 0 === $memory) { - return ''; - } - - return PHP_EOL.sprintf( - '%s all files in %.3f seconds, %.3f MB memory used'.PHP_EOL, - $isDryRun ? 'Checked' : 'Fixed', - $time / 1000, - $memory / 1024 / 1024 - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php deleted file mode 100644 index d487a189..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php +++ /dev/null @@ -1,129 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\FixReport; - -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class XmlReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'xml'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - if (!\extension_loaded('dom')) { - throw new \RuntimeException('Cannot generate report! `ext-dom` is not available!'); - } - - $dom = new \DOMDocument('1.0', 'UTF-8'); - // new nodes should be added to this or existing children - $root = $dom->createElement('report'); - $dom->appendChild($root); - - $filesXML = $dom->createElement('files'); - $root->appendChild($filesXML); - - $i = 1; - foreach ($reportSummary->getChanged() as $file => $fixResult) { - $fileXML = $dom->createElement('file'); - $fileXML->setAttribute('id', (string) $i++); - $fileXML->setAttribute('name', $file); - $filesXML->appendChild($fileXML); - - if ($reportSummary->shouldAddAppliedFixers()) { - $fileXML->appendChild( - $this->createAppliedFixersElement($dom, $fixResult['appliedFixers']), - ); - } - - if ('' !== $fixResult['diff']) { - $fileXML->appendChild($this->createDiffElement($dom, $fixResult['diff'])); - } - } - - if (0 !== $reportSummary->getTime()) { - $root->appendChild($this->createTimeElement($reportSummary->getTime(), $dom)); - } - - if (0 !== $reportSummary->getMemory()) { - $root->appendChild($this->createMemoryElement($reportSummary->getMemory(), $dom)); - } - - $dom->formatOutput = true; - - return $reportSummary->isDecoratedOutput() ? OutputFormatter::escape($dom->saveXML()) : $dom->saveXML(); - } - - /** - * @param list $appliedFixers - */ - private function createAppliedFixersElement(\DOMDocument $dom, array $appliedFixers): \DOMElement - { - $appliedFixersXML = $dom->createElement('applied_fixers'); - - foreach ($appliedFixers as $appliedFixer) { - $appliedFixerXML = $dom->createElement('applied_fixer'); - $appliedFixerXML->setAttribute('name', $appliedFixer); - $appliedFixersXML->appendChild($appliedFixerXML); - } - - return $appliedFixersXML; - } - - private function createDiffElement(\DOMDocument $dom, string $diff): \DOMElement - { - $diffXML = $dom->createElement('diff'); - $diffXML->appendChild($dom->createCDATASection($diff)); - - return $diffXML; - } - - private function createTimeElement(float $time, \DOMDocument $dom): \DOMElement - { - $time = round($time / 1000, 3); - - $timeXML = $dom->createElement('time'); - $timeXML->setAttribute('unit', 's'); - $timeTotalXML = $dom->createElement('total'); - $timeTotalXML->setAttribute('value', (string) $time); - $timeXML->appendChild($timeTotalXML); - - return $timeXML; - } - - private function createMemoryElement(float $memory, \DOMDocument $dom): \DOMElement - { - $memory = round($memory / 1024 / 1024, 3); - - $memoryXML = $dom->createElement('memory'); - $memoryXML->setAttribute('value', (string) $memory); - $memoryXML->setAttribute('unit', 'MB'); - - return $memoryXML; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php deleted file mode 100644 index 20469397..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php +++ /dev/null @@ -1,58 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\ListSetsReport; - -use PhpCsFixer\RuleSet\RuleSetDescriptionInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class JsonReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'json'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - $sets = $reportSummary->getSets(); - - usort($sets, static function (RuleSetDescriptionInterface $a, RuleSetDescriptionInterface $b): int { - return strcmp($a->getName(), $b->getName()); - }); - - $json = ['sets' => []]; - - foreach ($sets as $set) { - $setName = $set->getName(); - $json['sets'][$setName] = [ - 'description' => $set->getDescription(), - 'isRisky' => $set->isRisky(), - 'name' => $setName, - ]; - } - - return json_encode($json, JSON_PRETTY_PRINT); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php deleted file mode 100644 index c7d66e71..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php +++ /dev/null @@ -1,46 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\ListSetsReport; - -use PhpCsFixer\RuleSet\RuleSetDescriptionInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class ReportSummary -{ - /** - * @var list - */ - private array $sets; - - /** - * @param list $sets - */ - public function __construct(array $sets) - { - $this->sets = $sets; - } - - /** - * @return list - */ - public function getSets(): array - { - return $this->sets; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php deleted file mode 100644 index cbbb7f4e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php +++ /dev/null @@ -1,89 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\ListSetsReport; - -use Symfony\Component\Finder\Finder as SymfonyFinder; - -/** - * @author Boris Gorbylev - * - * @internal - */ -final class ReporterFactory -{ - /** - * @var array - */ - private array $reporters = []; - - public function registerBuiltInReporters(): self - { - /** @var null|list $builtInReporters */ - static $builtInReporters; - - if (null === $builtInReporters) { - $builtInReporters = []; - - foreach (SymfonyFinder::create()->files()->name('*Reporter.php')->in(__DIR__) as $file) { - $relativeNamespace = $file->getRelativePath(); - $builtInReporters[] = sprintf( - '%s\\%s%s', - __NAMESPACE__, - $relativeNamespace ? $relativeNamespace.'\\' : '', - $file->getBasename('.php') - ); - } - } - - foreach ($builtInReporters as $reporterClass) { - $this->registerReporter(new $reporterClass()); - } - - return $this; - } - - public function registerReporter(ReporterInterface $reporter): self - { - $format = $reporter->getFormat(); - - if (isset($this->reporters[$format])) { - throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is already registered.', $format)); - } - - $this->reporters[$format] = $reporter; - - return $this; - } - - /** - * @return list - */ - public function getFormats(): array - { - $formats = array_keys($this->reporters); - sort($formats); - - return $formats; - } - - public function getReporter(string $format): ReporterInterface - { - if (!isset($this->reporters[$format])) { - throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is not registered.', $format)); - } - - return $this->reporters[$format]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php deleted file mode 100644 index 4a03f330..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\ListSetsReport; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -interface ReporterInterface -{ - public function getFormat(): string; - - /** - * Process changed files array. Returns generated report. - */ - public function generate(ReportSummary $reportSummary): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php deleted file mode 100644 index 0caddef5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php +++ /dev/null @@ -1,57 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\Report\ListSetsReport; - -use PhpCsFixer\RuleSet\RuleSetDescriptionInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class TextReporter implements ReporterInterface -{ - /** - * {@inheritdoc} - */ - public function getFormat(): string - { - return 'txt'; - } - - /** - * {@inheritdoc} - */ - public function generate(ReportSummary $reportSummary): string - { - $sets = $reportSummary->getSets(); - - usort($sets, static function (RuleSetDescriptionInterface $a, RuleSetDescriptionInterface $b): int { - return strcmp($a->getName(), $b->getName()); - }); - - $output = ''; - - foreach ($sets as $i => $set) { - $output .= sprintf('%2d) %s', $i + 1, $set->getName()).PHP_EOL.' '.$set->getDescription().PHP_EOL; - - if ($set->isRisky()) { - $output .= ' Set contains risky rules.'.PHP_EOL; - } - } - - return $output; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php deleted file mode 100644 index 26d669ac..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php +++ /dev/null @@ -1,54 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\SelfUpdate; - -/** - * @internal - */ -final class GithubClient implements GithubClientInterface -{ - /** - * {@inheritdoc} - */ - public function getTags(): array - { - $url = 'https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/tags'; - - $result = @file_get_contents( - $url, - false, - stream_context_create([ - 'http' => [ - 'header' => 'User-Agent: PHP-CS-Fixer/PHP-CS-Fixer', - ], - ]) - ); - - if (false === $result) { - throw new \RuntimeException(sprintf('Failed to load tags at "%s".', $url)); - } - - $result = json_decode($result, true); - if (JSON_ERROR_NONE !== json_last_error()) { - throw new \RuntimeException(sprintf( - 'Failed to read response from "%s" as JSON: %s.', - $url, - json_last_error_msg() - )); - } - - return $result; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php deleted file mode 100644 index 38178a22..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClientInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\SelfUpdate; - -/** - * @internal - */ -interface GithubClientInterface -{ - /** - * @return list - */ - public function getTags(): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php deleted file mode 100644 index 54ec34dd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php +++ /dev/null @@ -1,110 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\SelfUpdate; - -use Composer\Semver\Comparator; -use Composer\Semver\Semver; -use Composer\Semver\VersionParser; - -/** - * @internal - */ -final class NewVersionChecker implements NewVersionCheckerInterface -{ - private GithubClientInterface $githubClient; - - private VersionParser $versionParser; - - /** - * @var null|string[] - */ - private $availableVersions; - - public function __construct(GithubClientInterface $githubClient) - { - $this->githubClient = $githubClient; - $this->versionParser = new VersionParser(); - } - - /** - * {@inheritdoc} - */ - public function getLatestVersion(): string - { - $this->retrieveAvailableVersions(); - - return $this->availableVersions[0]; - } - - /** - * {@inheritdoc} - */ - public function getLatestVersionOfMajor(int $majorVersion): ?string - { - $this->retrieveAvailableVersions(); - - $semverConstraint = '^'.$majorVersion; - - foreach ($this->availableVersions as $availableVersion) { - if (Semver::satisfies($availableVersion, $semverConstraint)) { - return $availableVersion; - } - } - - return null; - } - - /** - * {@inheritdoc} - */ - public function compareVersions(string $versionA, string $versionB): int - { - $versionA = $this->versionParser->normalize($versionA); - $versionB = $this->versionParser->normalize($versionB); - - if (Comparator::lessThan($versionA, $versionB)) { - return -1; - } - - if (Comparator::greaterThan($versionA, $versionB)) { - return 1; - } - - return 0; - } - - private function retrieveAvailableVersions(): void - { - if (null !== $this->availableVersions) { - return; - } - - foreach ($this->githubClient->getTags() as $tag) { - $version = $tag['name']; - - try { - $this->versionParser->normalize($version); - - if ('stable' === VersionParser::parseStability($version)) { - $this->availableVersions[] = $version; - } - } catch (\UnexpectedValueException $exception) { - // not a valid version tag - } - } - - $this->availableVersions = Semver::rsort($this->availableVersions); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php deleted file mode 100644 index c63b2a20..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionCheckerInterface.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console\SelfUpdate; - -/** - * @internal - */ -interface NewVersionCheckerInterface -{ - /** - * Returns the tag of the latest version. - */ - public function getLatestVersion(): string; - - /** - * Returns the tag of the latest minor/patch version of the given major version. - */ - public function getLatestVersionOfMajor(int $majorVersion): ?string; - - /** - * Returns -1, 0, or 1 if the first version is respectively less than, - * equal to, or greater than the second. - */ - public function compareVersions(string $versionA, string $versionB): int; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php b/old_vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php deleted file mode 100644 index dac182b8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php +++ /dev/null @@ -1,76 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Console; - -use PhpCsFixer\ToolInfo; -use PhpCsFixer\ToolInfoInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class WarningsDetector -{ - private ToolInfoInterface $toolInfo; - - /** - * @var string[] - */ - private array $warnings = []; - - public function __construct(ToolInfoInterface $toolInfo) - { - $this->toolInfo = $toolInfo; - } - - public function detectOldMajor(): void - { - // @TODO 3.99 to be activated with new MAJOR release 4.0 - // $currentMajorVersion = \intval(explode('.', Application::VERSION)[0], 10); - // $nextMajorVersion = $currentMajorVersion + 1; - // $this->warnings[] = "You are running PHP CS Fixer v{$currentMajorVersion}, which is not maintained anymore. Please update to v{$nextMajorVersion}."; - // $this->warnings[] = "You may find an UPGRADE guide at https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/v{$nextMajorVersion}.0.0/UPGRADE-v{$nextMajorVersion}.md ."; - } - - public function detectOldVendor(): void - { - if ($this->toolInfo->isInstalledByComposer()) { - $details = $this->toolInfo->getComposerInstallationDetails(); - if (ToolInfo::COMPOSER_LEGACY_PACKAGE_NAME === $details['name']) { - $this->warnings[] = sprintf( - 'You are running PHP CS Fixer installed with old vendor `%s`. Please update to `%s`.', - ToolInfo::COMPOSER_LEGACY_PACKAGE_NAME, - ToolInfo::COMPOSER_PACKAGE_NAME - ); - } - } - } - - /** - * @return string[] - */ - public function getWarnings(): array - { - if (0 === \count($this->warnings)) { - return []; - } - - return array_unique(array_merge( - $this->warnings, - ['If you need help while solving warnings, ask at https://gitter.im/PHP-CS-Fixer, we will help you!'] - )); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php deleted file mode 100644 index f52ed44a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Differ; - -use PhpCsFixer\Preg; -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class DiffConsoleFormatter -{ - private bool $isDecoratedOutput; - - private string $template; - - public function __construct(bool $isDecoratedOutput, string $template = '%s') - { - $this->isDecoratedOutput = $isDecoratedOutput; - $this->template = $template; - } - - public function format(string $diff, string $lineTemplate = '%s'): string - { - $isDecorated = $this->isDecoratedOutput; - - $template = $isDecorated - ? $this->template - : Preg::replace('/<[^<>]+>/', '', $this->template) - ; - - return sprintf( - $template, - implode( - PHP_EOL, - array_map( - static function (string $line) use ($isDecorated, $lineTemplate): string { - if ($isDecorated) { - $count = 0; - $line = Preg::replaceCallback( - '/^([+\-@].*)/', - static function (array $matches): string { - if ('+' === $matches[0][0]) { - $colour = 'green'; - } elseif ('-' === $matches[0][0]) { - $colour = 'red'; - } else { - $colour = 'cyan'; - } - - return sprintf('%s', $colour, OutputFormatter::escape($matches[0]), $colour); - }, - $line, - 1, - $count - ); - - if (0 === $count) { - $line = OutputFormatter::escape($line); - } - } - - return sprintf($lineTemplate, $line); - }, - Preg::split('#\R#u', $diff) - ) - ) - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php deleted file mode 100644 index a66f165c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/DifferInterface.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Differ; - -/** - * @author Dariusz Rumiński - */ -interface DifferInterface -{ - /** - * Create diff. - */ - public function diff(string $old, string $new, ?\SplFileInfo $file = null): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php deleted file mode 100644 index 4509ea99..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php +++ /dev/null @@ -1,47 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Differ; - -use SebastianBergmann\Diff\Differ; -use SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class FullDiffer implements DifferInterface -{ - private Differ $differ; - - public function __construct() - { - $this->differ = new Differ(new StrictUnifiedDiffOutputBuilder([ - 'collapseRanges' => false, - 'commonLineThreshold' => 100, - 'contextLines' => 100, - 'fromFile' => 'Original', - 'toFile' => 'New', - ])); - } - - /** - * {@inheritdoc} - */ - public function diff(string $old, string $new, ?\SplFileInfo $file = null): string - { - return $this->differ->diff($old, $new); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php deleted file mode 100644 index 8ef968ee..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/NullDiffer.php +++ /dev/null @@ -1,29 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Differ; - -/** - * @author Dariusz Rumiński - */ -final class NullDiffer implements DifferInterface -{ - /** - * {@inheritdoc} - */ - public function diff(string $old, string $new, ?\SplFileInfo $file = null): string - { - return ''; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php deleted file mode 100644 index ad668608..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Differ/UnifiedDiffer.php +++ /dev/null @@ -1,50 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Differ; - -use PhpCsFixer\Preg; -use SebastianBergmann\Diff\Differ; -use SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder; - -final class UnifiedDiffer implements DifferInterface -{ - /** - * {@inheritdoc} - */ - public function diff(string $old, string $new, ?\SplFileInfo $file = null): string - { - if (null === $file) { - $options = [ - 'fromFile' => 'Original', - 'toFile' => 'New', - ]; - } else { - $filePath = $file->getRealPath(); - - if (1 === Preg::match('/\s/', $filePath)) { - $filePath = '"'.$filePath.'"'; - } - - $options = [ - 'fromFile' => $filePath, - 'toFile' => $filePath, - ]; - } - - $differ = new Differ(new StrictUnifiedDiffOutputBuilder($options)); - - return $differ->diff($old, $new); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php deleted file mode 100644 index 629f04c7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php +++ /dev/null @@ -1,306 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; - -/** - * This represents an entire annotation from a docblock. - * - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class Annotation -{ - /** - * All the annotation tag names with types. - * - * @var string[] - */ - private static array $tags = [ - 'method', - 'param', - 'property', - 'property-read', - 'property-write', - 'return', - 'throws', - 'type', - 'var', - ]; - - /** - * The lines that make up the annotation. - * - * @var Line[] - */ - private array $lines; - - /** - * The position of the first line of the annotation in the docblock. - * - * @var int - */ - private $start; - - /** - * The position of the last line of the annotation in the docblock. - * - * @var int - */ - private $end; - - /** - * The associated tag. - * - * @var null|Tag - */ - private $tag; - - /** - * Lazy loaded, cached types content. - * - * @var null|string - */ - private $typesContent; - - /** - * The cached types. - * - * @var null|string[] - */ - private $types; - - /** - * @var null|NamespaceAnalysis - */ - private $namespace; - - /** - * @var NamespaceUseAnalysis[] - */ - private array $namespaceUses; - - /** - * Create a new line instance. - * - * @param Line[] $lines - * @param null|NamespaceAnalysis $namespace - * @param NamespaceUseAnalysis[] $namespaceUses - */ - public function __construct(array $lines, $namespace = null, array $namespaceUses = []) - { - $this->lines = array_values($lines); - $this->namespace = $namespace; - $this->namespaceUses = $namespaceUses; - - $keys = array_keys($lines); - - $this->start = $keys[0]; - $this->end = end($keys); - } - - /** - * Get the string representation of object. - */ - public function __toString(): string - { - return $this->getContent(); - } - - /** - * Get all the annotation tag names with types. - * - * @return string[] - */ - public static function getTagsWithTypes(): array - { - return self::$tags; - } - - /** - * Get the start position of this annotation. - */ - public function getStart(): int - { - return $this->start; - } - - /** - * Get the end position of this annotation. - */ - public function getEnd(): int - { - return $this->end; - } - - /** - * Get the associated tag. - */ - public function getTag(): Tag - { - if (null === $this->tag) { - $this->tag = new Tag($this->lines[0]); - } - - return $this->tag; - } - - /** - * @internal - */ - public function getTypeExpression(): TypeExpression - { - return new TypeExpression($this->getTypesContent(), $this->namespace, $this->namespaceUses); - } - - /** - * @return null|string - * - * @internal - */ - public function getVariableName() - { - $type = preg_quote($this->getTypesContent(), '/'); - $regex = "/@{$this->tag->getName()}\\s+({$type}\\s*)?(&\\s*)?(\\.{3}\\s*)?(?\\$.+?)(?:[\\s*]|$)/"; - - if (Preg::match($regex, $this->lines[0]->getContent(), $matches)) { - return $matches['variable']; - } - - return null; - } - - /** - * Get the types associated with this annotation. - * - * @return string[] - */ - public function getTypes(): array - { - if (null === $this->types) { - $this->types = $this->getTypeExpression()->getTypes(); - } - - return $this->types; - } - - /** - * Set the types associated with this annotation. - * - * @param string[] $types - */ - public function setTypes(array $types): void - { - $pattern = '/'.preg_quote($this->getTypesContent(), '/').'/'; - - $this->lines[0]->setContent(Preg::replace($pattern, implode($this->getTypeExpression()->getTypesGlue(), $types), $this->lines[0]->getContent(), 1)); - - $this->clearCache(); - } - - /** - * Get the normalized types associated with this annotation, so they can easily be compared. - * - * @return string[] - */ - public function getNormalizedTypes(): array - { - $normalized = array_map(static function (string $type): string { - return strtolower($type); - }, $this->getTypes()); - - sort($normalized); - - return $normalized; - } - - /** - * Remove this annotation by removing all its lines. - */ - public function remove(): void - { - foreach ($this->lines as $line) { - if ($line->isTheStart() && $line->isTheEnd()) { - // Single line doc block, remove entirely - $line->remove(); - } elseif ($line->isTheStart()) { - // Multi line doc block, but start is on the same line as the first annotation, keep only the start - $content = Preg::replace('#(\s*/\*\*).*#', '$1', $line->getContent()); - - $line->setContent($content); - } elseif ($line->isTheEnd()) { - // Multi line doc block, but end is on the same line as the last annotation, keep only the end - $content = Preg::replace('#(\s*)\S.*(\*/.*)#', '$1$2', $line->getContent()); - - $line->setContent($content); - } else { - // Multi line doc block, neither start nor end on this line, can be removed safely - $line->remove(); - } - } - - $this->clearCache(); - } - - /** - * Get the annotation content. - */ - public function getContent(): string - { - return implode('', $this->lines); - } - - public function supportTypes(): bool - { - return \in_array($this->getTag()->getName(), self::$tags, true); - } - - /** - * Get the current types content. - * - * Be careful modifying the underlying line as that won't flush the cache. - */ - private function getTypesContent(): string - { - if (null === $this->typesContent) { - $name = $this->getTag()->getName(); - - if (!$this->supportTypes()) { - throw new \RuntimeException('This tag does not support types.'); - } - - $matchingResult = Preg::match( - '{^(?:\s*\*|/\*\*)\s*@'.$name.'\s+'.TypeExpression::REGEX_TYPES.'(?:(?:[*\h\v]|\&[\.\$]).*)?\r?$}isx', - $this->lines[0]->getContent(), - $matches - ); - - $this->typesContent = 1 === $matchingResult - ? $matches['types'] - : ''; - } - - return $this->typesContent; - } - - private function clearCache(): void - { - $this->types = null; - $this->typesContent = null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php deleted file mode 100644 index 5a0b2f40..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php +++ /dev/null @@ -1,252 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; - -/** - * This class represents a docblock. - * - * It internally splits it up into "lines" that we can manipulate. - * - * @author Graham Campbell - */ -final class DocBlock -{ - /** - * @var list - */ - private array $lines = []; - - /** - * @var null|list - */ - private ?array $annotations = null; - - private ?NamespaceAnalysis $namespace; - - /** - * @var list - */ - private array $namespaceUses; - - /** - * @param list $namespaceUses - */ - public function __construct(string $content, ?NamespaceAnalysis $namespace = null, array $namespaceUses = []) - { - foreach (Preg::split('/([^\n\r]+\R*)/', $content, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $line) { - $this->lines[] = new Line($line); - } - - $this->namespace = $namespace; - $this->namespaceUses = $namespaceUses; - } - - public function __toString(): string - { - return $this->getContent(); - } - - /** - * Get this docblock's lines. - * - * @return list - */ - public function getLines(): array - { - return $this->lines; - } - - /** - * Get a single line. - */ - public function getLine(int $pos): ?Line - { - return $this->lines[$pos] ?? null; - } - - /** - * Get this docblock's annotations. - * - * @return list - */ - public function getAnnotations(): array - { - if (null !== $this->annotations) { - return $this->annotations; - } - - $this->annotations = []; - $total = \count($this->lines); - - for ($index = 0; $index < $total; ++$index) { - if ($this->lines[$index]->containsATag()) { - // get all the lines that make up the annotation - $lines = \array_slice($this->lines, $index, $this->findAnnotationLength($index), true); - $annotation = new Annotation($lines, $this->namespace, $this->namespaceUses); - // move the index to the end of the annotation to avoid - // checking it again because we know the lines inside the - // current annotation cannot be part of another annotation - $index = $annotation->getEnd(); - // add the current annotation to the list of annotations - $this->annotations[] = $annotation; - } - } - - return $this->annotations; - } - - public function isMultiLine(): bool - { - return 1 !== \count($this->lines); - } - - /** - * Take a one line doc block, and turn it into a multi line doc block. - */ - public function makeMultiLine(string $indent, string $lineEnd): void - { - if ($this->isMultiLine()) { - return; - } - - $lineContent = $this->getSingleLineDocBlockEntry($this->lines[0]); - - if ('' === $lineContent) { - $this->lines = [ - new Line('/**'.$lineEnd), - new Line($indent.' *'.$lineEnd), - new Line($indent.' */'), - ]; - - return; - } - - $this->lines = [ - new Line('/**'.$lineEnd), - new Line($indent.' * '.$lineContent.$lineEnd), - new Line($indent.' */'), - ]; - } - - public function makeSingleLine(): void - { - if (!$this->isMultiLine()) { - return; - } - - $usefulLines = array_filter( - $this->lines, - static function (Line $line): bool { - return $line->containsUsefulContent(); - } - ); - - if (1 < \count($usefulLines)) { - return; - } - - $lineContent = ''; - if (\count($usefulLines) > 0) { - $lineContent = $this->getSingleLineDocBlockEntry(array_shift($usefulLines)); - } - - $this->lines = [new Line('/** '.$lineContent.' */')]; - } - - public function getAnnotation(int $pos): ?Annotation - { - $annotations = $this->getAnnotations(); - - return $annotations[$pos] ?? null; - } - - /** - * Get specific types of annotations only. - * - * @param list|string $types - * - * @return list - */ - public function getAnnotationsOfType($types): array - { - $typesToSearchFor = (array) $types; - - $annotations = []; - - foreach ($this->getAnnotations() as $annotation) { - $tagName = $annotation->getTag()->getName(); - if (\in_array($tagName, $typesToSearchFor, true)) { - $annotations[] = $annotation; - } - } - - return $annotations; - } - - /** - * Get the actual content of this docblock. - */ - public function getContent(): string - { - return implode('', $this->lines); - } - - private function findAnnotationLength(int $start): int - { - $index = $start; - - while ($line = $this->getLine(++$index)) { - if ($line->containsATag()) { - // we've 100% reached the end of the description if we get here - break; - } - - if (!$line->containsUsefulContent()) { - // if next line is also non-useful, or contains a tag, then we're done here - $next = $this->getLine($index + 1); - if (null === $next || !$next->containsUsefulContent() || $next->containsATag()) { - break; - } - // otherwise, continue, the annotation must have contained a blank line in its description - } - } - - return $index - $start; - } - - private function getSingleLineDocBlockEntry(Line $line): string - { - $lineString = $line->getContent(); - - if ('' === $lineString) { - return $lineString; - } - - $lineString = str_replace('*/', '', $lineString); - $lineString = trim($lineString); - - if (str_starts_with($lineString, '/**')) { - $lineString = substr($lineString, 3); - } elseif (str_starts_with($lineString, '*')) { - $lineString = substr($lineString, 1); - } - - return trim($lineString); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Line.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Line.php deleted file mode 100644 index 0db50e82..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Line.php +++ /dev/null @@ -1,128 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -use PhpCsFixer\Preg; - -/** - * This represents a line of a docblock. - * - * @author Graham Campbell - */ -final class Line -{ - /** - * The content of this line. - */ - private string $content; - - /** - * Create a new line instance. - */ - public function __construct(string $content) - { - $this->content = $content; - } - - /** - * Get the string representation of object. - */ - public function __toString(): string - { - return $this->content; - } - - /** - * Get the content of this line. - */ - public function getContent(): string - { - return $this->content; - } - - /** - * Does this line contain useful content? - * - * If the line contains text or tags, then this is true. - */ - public function containsUsefulContent(): bool - { - return 0 !== Preg::match('/\\*\s*\S+/', $this->content) && '' !== trim(str_replace(['/', '*'], ' ', $this->content)); - } - - /** - * Does the line contain a tag? - * - * If this is true, then it must be the first line of an annotation. - */ - public function containsATag(): bool - { - return 0 !== Preg::match('/\\*\s*@/', $this->content); - } - - /** - * Is the line the start of a docblock? - */ - public function isTheStart(): bool - { - return str_contains($this->content, '/**'); - } - - /** - * Is the line the end of a docblock? - */ - public function isTheEnd(): bool - { - return str_contains($this->content, '*/'); - } - - /** - * Set the content of this line. - */ - public function setContent(string $content): void - { - $this->content = $content; - } - - /** - * Remove this line by clearing its contents. - * - * Note that this method technically brakes the internal state of the - * docblock, but is useful when we need to retain the indices of lines - * during the execution of an algorithm. - */ - public function remove(): void - { - $this->content = ''; - } - - /** - * Append a blank docblock line to this line's contents. - * - * Note that this method technically brakes the internal state of the - * docblock, but is useful when we need to retain the indices of lines - * during the execution of an algorithm. - */ - public function addBlank(): void - { - $matched = Preg::match('/^(\h*\*)[^\r\n]*(\r?\n)$/', $this->content, $matches); - - if (1 !== $matched) { - return; - } - - $this->content .= $matches[1].$matches[2]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php deleted file mode 100644 index dbd9e5da..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -/** - * This class represents a short description (aka summary) of a docblock. - * - * @internal - */ -final class ShortDescription -{ - /** - * The docblock containing the short description. - */ - private DocBlock $doc; - - public function __construct(DocBlock $doc) - { - $this->doc = $doc; - } - - /** - * Get the line index of the line containing the end of the short - * description, if present. - */ - public function getEnd(): ?int - { - $reachedContent = false; - - foreach ($this->doc->getLines() as $index => $line) { - // we went past a description, then hit a tag or blank line, so - // the last line of the description must be the one before this one - if ($reachedContent && ($line->containsATag() || !$line->containsUsefulContent())) { - return $index - 1; - } - - // no short description was found - if ($line->containsATag()) { - return null; - } - - // we've reached content, but need to check the next lines too - // in case the short description is multi-line - if ($line->containsUsefulContent()) { - $reachedContent = true; - } - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php deleted file mode 100644 index 6206718d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/Tag.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -use PhpCsFixer\Preg; - -/** - * This represents a tag, as defined by the proposed PSR PHPDoc standard. - * - * @author Graham Campbell - * @author Jakub Kwaśniewski - */ -final class Tag -{ - /** - * All the tags defined by the proposed PSR PHPDoc standard. - */ - public const PSR_STANDARD_TAGS = [ - 'api', 'author', 'category', 'copyright', 'deprecated', 'example', - 'global', 'internal', 'license', 'link', 'method', 'package', 'param', - 'property', 'property-read', 'property-write', 'return', 'see', - 'since', 'subpackage', 'throws', 'todo', 'uses', 'var', 'version', - ]; - - /** - * The line containing the tag. - */ - private Line $line; - - /** - * The cached tag name. - */ - private ?string $name = null; - - /** - * Create a new tag instance. - */ - public function __construct(Line $line) - { - $this->line = $line; - } - - /** - * Get the tag name. - * - * This may be "param", or "return", etc. - */ - public function getName(): string - { - if (null === $this->name) { - Preg::matchAll('/@[a-zA-Z0-9_-]+(?=\s|$)/', $this->line->getContent(), $matches); - - if (isset($matches[0][0])) { - $this->name = ltrim($matches[0][0], '@'); - } else { - $this->name = 'other'; - } - } - - return $this->name; - } - - /** - * Set the tag name. - * - * This will also be persisted to the upstream line and annotation. - */ - public function setName(string $name): void - { - $current = $this->getName(); - - if ('other' === $current) { - throw new \RuntimeException('Cannot set name on unknown tag.'); - } - - $this->line->setContent(Preg::replace("/@{$current}/", "@{$name}", $this->line->getContent(), 1)); - - $this->name = $name; - } - - /** - * Is the tag a known tag? - * - * This is defined by if it exists in the proposed PSR PHPDoc standard. - */ - public function valid(): bool - { - return \in_array($this->getName(), self::PSR_STANDARD_TAGS, true); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php deleted file mode 100644 index 14d2fc1a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php +++ /dev/null @@ -1,60 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -/** - * This class is responsible for comparing tags to see if they should be kept - * together, or kept apart. - * - * @author Graham Campbell - * @author Jakub Kwaśniewski - */ -final class TagComparator -{ - /** - * Groups of tags that should be allowed to immediately follow each other. - * - * @internal - */ - public const DEFAULT_GROUPS = [ - ['deprecated', 'link', 'see', 'since'], - ['author', 'copyright', 'license'], - ['category', 'package', 'subpackage'], - ['property', 'property-read', 'property-write'], - ]; - - /** - * Should the given tags be kept together, or kept apart? - * - * @param string[][] $groups - */ - public static function shouldBeTogether(Tag $first, Tag $second, array $groups = self::DEFAULT_GROUPS): bool - { - $firstName = $first->getName(); - $secondName = $second->getName(); - - if ($firstName === $secondName) { - return true; - } - - foreach ($groups as $group) { - if (\in_array($firstName, $group, true) && \in_array($secondName, $group, true)) { - return true; - } - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php b/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php deleted file mode 100644 index 603c0109..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php +++ /dev/null @@ -1,465 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\DocBlock; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Utils; - -/** - * @internal - */ -final class TypeExpression -{ - /** - * Regex to match any types, shall be used with `x` modifier. - * - * @internal - */ - public const REGEX_TYPES = ' - (? # several types separated by `|` or `&` - (? # single type - (?\??) - (?: - (? - (?array\h*\{) - (? - (? - \h*[^?:\h]+\h*\??\h*:\h*(?&types) - ) - (?:\h*,(?&object_like_array_key))* - ) - \h*\} - ) - | - (? # callable syntax, e.g. `callable(string): bool` - (?(?:callable|Closure)\h*\(\h*) - (? - (?&types) - (?: - \h*,\h* - (?&types) - )* - )? - \h*\) - (?: - \h*\:\h* - (?(?&types)) - )? - ) - | - (? # generic syntax, e.g.: `array` - (? - (?&name)+ - \h*<\h* - ) - (? - (?&types) - (?: - \h*,\h* - (?&types) - )* - ) - \h*> - ) - | - (? # class constants with optional wildcard, e.g.: `Foo::*`, `Foo::CONST_A`, `FOO::CONST_*` - (?&name)::(\*|\w+\*?) - ) - | - (? # array expression, e.g.: `string[]`, `string[][]` - (?&name)(\[\])+ - ) - | - (? # single constant value (case insensitive), e.g.: 1, `\'a\'` - (?i) - null | true | false - | -?(?:\d+(?:\.\d*)?|\.\d+) # all sorts of numbers with or without minus, e.g.: 1, 1.1, 1., .1, -1 - | \'[^\']+?\' | "[^"]+?" - | [@$]?(?:this | self | static) - (?-i) - ) - | - (? # single type, e.g.: `null`, `int`, `\Foo\Bar` - [\\\\\w-]++ - ) - ) - ) - (?: - \h*(?[|&])\h* - (?&type) - )* - ) - '; - - private string $value; - - private bool $isUnionType = false; - - /** - * @var list - */ - private array $innerTypeExpressions = []; - - private string $typesGlue = '|'; - - private ?NamespaceAnalysis $namespace; - - /** - * @var NamespaceUseAnalysis[] - */ - private array $namespaceUses; - - /** - * @param NamespaceUseAnalysis[] $namespaceUses - */ - public function __construct(string $value, ?NamespaceAnalysis $namespace, array $namespaceUses) - { - $this->value = $value; - $this->namespace = $namespace; - $this->namespaceUses = $namespaceUses; - - $this->parse(); - } - - public function toString(): string - { - return $this->value; - } - - /** - * @return string[] - */ - public function getTypes(): array - { - if ($this->isUnionType) { - return array_map( - static fn (array $type) => $type['expression']->toString(), - $this->innerTypeExpressions, - ); - } - - return [$this->value]; - } - - /** - * @param callable(self $a, self $b): int $compareCallback - */ - public function sortTypes(callable $compareCallback): void - { - foreach (array_reverse($this->innerTypeExpressions) as [ - 'start_index' => $startIndex, - 'expression' => $inner, - ]) { - $initialValueLength = \strlen($inner->toString()); - - $inner->sortTypes($compareCallback); - - $this->value = substr_replace( - $this->value, - $inner->toString(), - $startIndex, - $initialValueLength - ); - } - - if ($this->isUnionType) { - $this->innerTypeExpressions = Utils::stableSort( - $this->innerTypeExpressions, - static fn (array $type): self => $type['expression'], - $compareCallback, - ); - - $this->value = implode($this->getTypesGlue(), $this->getTypes()); - } - } - - public function getTypesGlue(): string - { - return $this->typesGlue; - } - - public function getCommonType(): ?string - { - $aliases = $this->getAliases(); - - $mainType = null; - - foreach ($this->getTypes() as $type) { - if ('null' === $type) { - continue; - } - - if (isset($aliases[$type])) { - $type = $aliases[$type]; - } elseif (1 === Preg::match('/\[\]$/', $type)) { - $type = 'array'; - } elseif (1 === Preg::match('/^(.+?)getParentType($type, $mainType); - - if (null === $mainType) { - return null; - } - } - - return $mainType; - } - - public function allowsNull(): bool - { - foreach ($this->getTypes() as $type) { - if (\in_array($type, ['null', 'mixed'], true)) { - return true; - } - } - - return false; - } - - private function parse(): void - { - $value = $this->value; - - Preg::match( - '{^'.self::REGEX_TYPES.'$}x', - $value, - $matches - ); - - if ([] === $matches) { - return; - } - - $this->typesGlue = $matches['glue'] ?? $this->typesGlue; - - $index = '' !== $matches['nullable'] ? 1 : 0; - - if ($matches['type'] !== $matches['types']) { - $this->isUnionType = true; - - while (true) { - $innerType = $matches['type']; - - $newValue = Preg::replace( - '/^'.preg_quote($innerType, '/').'(\h*[|&]\h*)?/', - '', - $value - ); - - $this->innerTypeExpressions[] = [ - 'start_index' => $index, - 'expression' => $this->inner($innerType), - ]; - - if ('' === $newValue) { - return; - } - - $index += \strlen($value) - \strlen($newValue); - $value = $newValue; - - Preg::match( - '{^'.self::REGEX_TYPES.'$}x', - $value, - $matches - ); - } - } - - if ('' !== ($matches['generic'] ?? '')) { - $this->parseCommaSeparatedInnerTypes( - $index + \strlen($matches['generic_start']), - $matches['generic_types'] - ); - - return; - } - - if ('' !== ($matches['callable'] ?? '')) { - $this->parseCommaSeparatedInnerTypes( - $index + \strlen($matches['callable_start']), - $matches['callable_arguments'] ?? '' - ); - - $return = $matches['callable_return'] ?? null; - if (null !== $return) { - $this->innerTypeExpressions[] = [ - 'start_index' => \strlen($this->value) - \strlen($matches['callable_return']), - 'expression' => $this->inner($matches['callable_return']), - ]; - } - - return; - } - - if ('' !== ($matches['object_like_array'] ?? '')) { - $this->parseObjectLikeArrayKeys( - $index + \strlen($matches['object_like_array_start']), - $matches['object_like_array_keys'] - ); - } - } - - private function parseCommaSeparatedInnerTypes(int $startIndex, string $value): void - { - while ('' !== $value) { - Preg::match( - '{^'.self::REGEX_TYPES.'\h*(?:,|$)}x', - $value, - $matches - ); - - $this->innerTypeExpressions[] = [ - 'start_index' => $startIndex, - 'expression' => $this->inner($matches['types']), - ]; - - $newValue = Preg::replace( - '/^'.preg_quote($matches['types'], '/').'(\h*\,\h*)?/', - '', - $value - ); - - $startIndex += \strlen($value) - \strlen($newValue); - $value = $newValue; - } - } - - private function parseObjectLikeArrayKeys(int $startIndex, string $value): void - { - while ('' !== $value) { - Preg::match( - '{(?<_start>^.+?:\h*)'.self::REGEX_TYPES.'\h*(?:,|$)}x', - $value, - $matches - ); - - $this->innerTypeExpressions[] = [ - 'start_index' => $startIndex + \strlen($matches['_start']), - 'expression' => $this->inner($matches['types']), - ]; - - $newValue = Preg::replace( - '/^.+?:\h*'.preg_quote($matches['types'], '/').'(\h*\,\h*)?/', - '', - $value - ); - - $startIndex += \strlen($value) - \strlen($newValue); - $value = $newValue; - } - } - - private function inner(string $value): self - { - return new self($value, $this->namespace, $this->namespaceUses); - } - - private function getParentType(string $type1, string $type2): ?string - { - $types = [ - $this->normalize($type1), - $this->normalize($type2), - ]; - natcasesort($types); - $types = implode('|', $types); - - $parents = [ - 'array|Traversable' => 'iterable', - 'array|iterable' => 'iterable', - 'iterable|Traversable' => 'iterable', - 'self|static' => 'self', - ]; - - return $parents[$types] ?? null; - } - - private function normalize(string $type): string - { - $aliases = $this->getAliases(); - - if (isset($aliases[$type])) { - return $aliases[$type]; - } - - if (\in_array($type, [ - 'array', - 'bool', - 'callable', - 'float', - 'int', - 'iterable', - 'mixed', - 'never', - 'null', - 'object', - 'resource', - 'string', - 'void', - ], true)) { - return $type; - } - - if (1 === Preg::match('/\[\]$/', $type)) { - return 'array'; - } - - if (1 === Preg::match('/^(.+?)namespaceUses as $namespaceUse) { - if ($namespaceUse->getShortName() === $type) { - return $namespaceUse->getFullName(); - } - } - - if (null === $this->namespace || $this->namespace->isGlobalNamespace()) { - return $type; - } - - return "{$this->namespace->getFullName()}\\{$type}"; - } - - /** - * @return array - */ - private function getAliases(): array - { - return [ - 'boolean' => 'bool', - 'callback' => 'callable', - 'double' => 'float', - 'false' => 'bool', - 'integer' => 'int', - 'real' => 'float', - 'true' => 'bool', - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php b/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php deleted file mode 100644 index 4e5a4a5d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.php +++ /dev/null @@ -1,81 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Doctrine\Annotation; - -use Doctrine\Common\Annotations\DocLexer; - -/** - * A Doctrine annotation token. - * - * @internal - */ -final class Token -{ - private int $type; - - private string $content; - - /** - * @param int $type The type - * @param string $content The content - */ - public function __construct(int $type = DocLexer::T_NONE, string $content = '') - { - $this->type = $type; - $this->content = $content; - } - - public function getType(): int - { - return $this->type; - } - - public function setType(int $type): void - { - $this->type = $type; - } - - public function getContent(): string - { - return $this->content; - } - - public function setContent(string $content): void - { - $this->content = $content; - } - - /** - * Returns whether the token type is one of the given types. - * - * @param int|int[] $types - */ - public function isType($types): bool - { - if (!\is_array($types)) { - $types = [$types]; - } - - return \in_array($this->getType(), $types, true); - } - - /** - * Overrides the content with an empty string. - */ - public function clear(): void - { - $this->setContent(''); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php b/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php deleted file mode 100644 index d1e7ad8b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php +++ /dev/null @@ -1,302 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Doctrine\Annotation; - -use Doctrine\Common\Annotations\DocLexer; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token as PhpToken; - -/** - * A list of Doctrine annotation tokens. - * - * @internal - * - * @extends \SplFixedArray - */ -final class Tokens extends \SplFixedArray -{ - /** - * @param string[] $ignoredTags - * - * @throws \InvalidArgumentException - */ - public static function createFromDocComment(PhpToken $input, array $ignoredTags = []): self - { - if (!$input->isGivenKind(T_DOC_COMMENT)) { - throw new \InvalidArgumentException('Input must be a T_DOC_COMMENT token.'); - } - - $tokens = []; - - $content = $input->getContent(); - $ignoredTextPosition = 0; - $currentPosition = 0; - $token = null; - while (false !== $nextAtPosition = strpos($content, '@', $currentPosition)) { - if (0 !== $nextAtPosition && !Preg::match('/\s/', $content[$nextAtPosition - 1])) { - $currentPosition = $nextAtPosition + 1; - - continue; - } - - $lexer = new DocLexer(); - $lexer->setInput(substr($content, $nextAtPosition)); - - $scannedTokens = []; - $index = 0; - $nbScannedTokensToUse = 0; - $nbScopes = 0; - while (null !== $token = $lexer->peek()) { - if (0 === $index && DocLexer::T_AT !== $token['type']) { - break; - } - - if (1 === $index) { - if (DocLexer::T_IDENTIFIER !== $token['type'] || \in_array($token['value'], $ignoredTags, true)) { - break; - } - - $nbScannedTokensToUse = 2; - } - - if ($index >= 2 && 0 === $nbScopes && !\in_array($token['type'], [DocLexer::T_NONE, DocLexer::T_OPEN_PARENTHESIS], true)) { - break; - } - - $scannedTokens[] = $token; - - if (DocLexer::T_OPEN_PARENTHESIS === $token['type']) { - ++$nbScopes; - } elseif (DocLexer::T_CLOSE_PARENTHESIS === $token['type']) { - if (0 === --$nbScopes) { - $nbScannedTokensToUse = \count($scannedTokens); - - break; - } - } - - ++$index; - } - - if (0 !== $nbScopes) { - break; - } - - if (0 !== $nbScannedTokensToUse) { - $ignoredTextLength = $nextAtPosition - $ignoredTextPosition; - if (0 !== $ignoredTextLength) { - $tokens[] = new Token(DocLexer::T_NONE, substr($content, $ignoredTextPosition, $ignoredTextLength)); - } - - $lastTokenEndIndex = 0; - foreach (\array_slice($scannedTokens, 0, $nbScannedTokensToUse) as $token) { - if (DocLexer::T_STRING === $token['type']) { - $token['value'] = '"'.str_replace('"', '""', $token['value']).'"'; - } - - $missingTextLength = $token['position'] - $lastTokenEndIndex; - if ($missingTextLength > 0) { - $tokens[] = new Token(DocLexer::T_NONE, substr( - $content, - $nextAtPosition + $lastTokenEndIndex, - $missingTextLength - )); - } - - $tokens[] = new Token($token['type'], $token['value']); - $lastTokenEndIndex = $token['position'] + \strlen($token['value']); - } - - $currentPosition = $ignoredTextPosition = $nextAtPosition + $token['position'] + \strlen($token['value']); - } else { - $currentPosition = $nextAtPosition + 1; - } - } - - if ($ignoredTextPosition < \strlen($content)) { - $tokens[] = new Token(DocLexer::T_NONE, substr($content, $ignoredTextPosition)); - } - - return self::fromArray($tokens); - } - - /** - * Create token collection from array. - * - * @param Token[] $array the array to import - * @param ?bool $saveIndices save the numeric indices used in the original array, default is yes - */ - public static function fromArray($array, $saveIndices = null): self - { - $tokens = new self(\count($array)); - - if (null === $saveIndices || $saveIndices) { - foreach ($array as $key => $val) { - $tokens[$key] = $val; - } - } else { - $index = 0; - - foreach ($array as $val) { - $tokens[$index++] = $val; - } - } - - return $tokens; - } - - /** - * Returns the index of the closest next token that is neither a comment nor a whitespace token. - */ - public function getNextMeaningfulToken(int $index): ?int - { - return $this->getMeaningfulTokenSibling($index, 1); - } - - /** - * Returns the index of the closest previous token that is neither a comment nor a whitespace token. - */ - public function getPreviousMeaningfulToken(int $index): ?int - { - return $this->getMeaningfulTokenSibling($index, -1); - } - - /** - * Returns the index of the last token that is part of the annotation at the given index. - */ - public function getAnnotationEnd(int $index): ?int - { - $currentIndex = null; - - if (isset($this[$index + 2])) { - if ($this[$index + 2]->isType(DocLexer::T_OPEN_PARENTHESIS)) { - $currentIndex = $index + 2; - } elseif ( - isset($this[$index + 3]) - && $this[$index + 2]->isType(DocLexer::T_NONE) - && $this[$index + 3]->isType(DocLexer::T_OPEN_PARENTHESIS) - && Preg::match('/^(\R\s*\*\s*)*\s*$/', $this[$index + 2]->getContent()) - ) { - $currentIndex = $index + 3; - } - } - - if (null !== $currentIndex) { - $level = 0; - for ($max = \count($this); $currentIndex < $max; ++$currentIndex) { - if ($this[$currentIndex]->isType(DocLexer::T_OPEN_PARENTHESIS)) { - ++$level; - } elseif ($this[$currentIndex]->isType(DocLexer::T_CLOSE_PARENTHESIS)) { - --$level; - } - - if (0 === $level) { - return $currentIndex; - } - } - - return null; - } - - return $index + 1; - } - - /** - * Returns the code from the tokens. - */ - public function getCode(): string - { - $code = ''; - foreach ($this as $token) { - $code .= $token->getContent(); - } - - return $code; - } - - /** - * Inserts a token at the given index. - */ - public function insertAt(int $index, Token $token): void - { - $this->setSize($this->getSize() + 1); - - for ($i = $this->getSize() - 1; $i > $index; --$i) { - $this[$i] = $this[$i - 1] ?? new Token(); - } - - $this[$index] = $token; - } - - public function offsetSet($index, $token): void - { - // @phpstan-ignore-next-line as we type checking here - if (null === $token) { - throw new \InvalidArgumentException('Token must be an instance of PhpCsFixer\\Doctrine\\Annotation\\Token, "null" given.'); - } - - if (!$token instanceof Token) { - $type = \gettype($token); - - if ('object' === $type) { - $type = \get_class($token); - } - - throw new \InvalidArgumentException(sprintf('Token must be an instance of PhpCsFixer\\Doctrine\\Annotation\\Token, "%s" given.', $type)); - } - - parent::offsetSet($index, $token); - } - - /** - * {@inheritdoc} - * - * @throws \OutOfBoundsException - */ - public function offsetUnset($index): void - { - if (!isset($this[$index])) { - throw new \OutOfBoundsException(sprintf('Index "%s" is invalid or does not exist.', $index)); - } - - $max = \count($this) - 1; - while ($index < $max) { - // @phpstan-ignore-next-line Next index always exists. - $this[$index] = $this[$index + 1]; - ++$index; - } - - parent::offsetUnset($index); - - $this->setSize($max); - } - - private function getMeaningfulTokenSibling(int $index, int $direction): ?int - { - while (true) { - $index += $direction; - - if (!$this->offsetExists($index)) { - break; - } - - if (!$this[$index]->isType(DocLexer::T_NONE)) { - return $index; - } - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php deleted file mode 100644 index 73544963..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php +++ /dev/null @@ -1,82 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Documentation; - -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Utils; - -/** - * @internal - */ -final class DocumentationLocator -{ - private string $path; - - public function __construct() - { - $this->path = \dirname(__DIR__, 2).'/doc'; - } - - public function getFixersDocumentationDirectoryPath(): string - { - return $this->path.'/rules'; - } - - public function getFixersDocumentationIndexFilePath(): string - { - return $this->getFixersDocumentationDirectoryPath().'/index.rst'; - } - - public function getFixerDocumentationFilePath(FixerInterface $fixer): string - { - return $this->getFixersDocumentationDirectoryPath().'/'.Preg::replaceCallback( - '/^.*\\\\(.+)\\\\(.+)Fixer$/', - static function (array $matches): string { - return Utils::camelCaseToUnderscore($matches[1]).'/'.Utils::camelCaseToUnderscore($matches[2]); - }, - \get_class($fixer) - ).'.rst'; - } - - public function getFixerDocumentationFileRelativePath(FixerInterface $fixer): string - { - return Preg::replace( - '#^'.preg_quote($this->getFixersDocumentationDirectoryPath(), '#').'/#', - '', - $this->getFixerDocumentationFilePath($fixer) - ); - } - - public function getRuleSetsDocumentationDirectoryPath(): string - { - return $this->path.'/ruleSets'; - } - - public function getRuleSetsDocumentationIndexFilePath(): string - { - return $this->getRuleSetsDocumentationDirectoryPath().'/index.rst'; - } - - public function getRuleSetsDocumentationFilePath(string $name): string - { - return $this->getRuleSetsDocumentationDirectoryPath().'/'.str_replace(':risky', 'Risky', ucfirst(substr($name, 1))).'.rst'; - } - - public function getListingFilePath(): string - { - return $this->path.'/list.rst'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php deleted file mode 100644 index 82c78052..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php +++ /dev/null @@ -1,368 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Documentation; - -use PhpCsFixer\Console\Command\HelpCommand; -use PhpCsFixer\Differ\FullDiffer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\FixerConfiguration\AliasedFixerOption; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\DeprecatedFixerOptionInterface; -use PhpCsFixer\FixerDefinition\CodeSampleInterface; -use PhpCsFixer\FixerDefinition\FileSpecificCodeSampleInterface; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSampleInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\RuleSet\RuleSet; -use PhpCsFixer\RuleSet\RuleSets; -use PhpCsFixer\StdinFileInfo; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Utils; - -/** - * @internal - */ -final class FixerDocumentGenerator -{ - private DocumentationLocator $locator; - - private FullDiffer $differ; - - public function __construct(DocumentationLocator $locator) - { - $this->locator = $locator; - $this->differ = new FullDiffer(); - } - - public function generateFixerDocumentation(FixerInterface $fixer): string - { - $name = $fixer->getName(); - $title = "Rule ``{$name}``"; - $titleLine = str_repeat('=', \strlen($title)); - $doc = "{$titleLine}\n{$title}\n{$titleLine}"; - - $definition = $fixer->getDefinition(); - $doc .= "\n\n".RstUtils::toRst($definition->getSummary()); - - $description = $definition->getDescription(); - - if (null !== $description) { - $description = RstUtils::toRst($description); - $doc .= <<getSuccessorsNames(); - - if (0 !== \count($alternatives)) { - $deprecationDescription .= RstUtils::toRst(sprintf( - "\n\nYou should use %s instead.", - Utils::naturalLanguageJoinWithBackticks($alternatives) - ), 0); - } - } - - $riskyDescription = ''; - $riskyDescriptionRaw = $definition->getRiskyDescription(); - - if (null !== $riskyDescriptionRaw) { - $riskyDescriptionRaw = RstUtils::toRst($riskyDescriptionRaw, 0); - $riskyDescription = <<getConfigurationDefinition(); - - foreach ($configurationDefinition->getOptions() as $option) { - $optionInfo = "``{$option->getName()}``"; - $optionInfo .= "\n".str_repeat('~', \strlen($optionInfo)); - - if ($option instanceof DeprecatedFixerOptionInterface) { - $deprecationMessage = RstUtils::toRst($option->getDeprecationMessage()); - $optionInfo .= "\n\n.. warning:: This option is deprecated and will be removed on next major version. {$deprecationMessage}"; - } - - $optionInfo .= "\n\n".RstUtils::toRst($option->getDescription()); - - if ($option instanceof AliasedFixerOption) { - $optionInfo .= "\n\n.. note:: The previous name of this option was ``{$option->getAlias()}`` but it is now deprecated and will be removed on next major version."; - } - - $allowed = HelpCommand::getDisplayableAllowedValues($option); - - if (null === $allowed) { - $allowedKind = 'Allowed types'; - $allowed = array_map( - static fn ($value): string => '``'.$value.'``', - $option->getAllowedTypes(), - ); - } else { - $allowedKind = 'Allowed values'; - $allowed = array_map(static function ($value): string { - return $value instanceof AllowedValueSubset - ? 'a subset of ``'.HelpCommand::toString($value->getAllowedValues()).'``' - : '``'.HelpCommand::toString($value).'``'; - }, $allowed); - } - - $allowed = implode(', ', $allowed); - $optionInfo .= "\n\n{$allowedKind}: {$allowed}"; - - if ($option->hasDefault()) { - $default = HelpCommand::toString($option->getDefault()); - $optionInfo .= "\n\nDefault value: ``{$default}``"; - } else { - $optionInfo .= "\n\nThis option is required."; - } - - $doc .= "\n\n{$optionInfo}"; - } - } - - $samples = $definition->getCodeSamples(); - - if (0 !== \count($samples)) { - $doc .= <<<'RST' - - -Examples --------- -RST; - - foreach ($samples as $index => $sample) { - $title = sprintf('Example #%d', $index + 1); - $titleLine = str_repeat('~', \strlen($title)); - $doc .= "\n\n{$title}\n{$titleLine}"; - - if ($fixer instanceof ConfigurableFixerInterface) { - if (null === $sample->getConfiguration()) { - $doc .= "\n\n*Default* configuration."; - } else { - $doc .= sprintf( - "\n\nWith configuration: ``%s``.", - HelpCommand::toString($sample->getConfiguration()) - ); - } - } - - $doc .= "\n".$this->generateSampleDiff($fixer, $sample, $index + 1, $name); - } - } - - $ruleSetConfigs = []; - - foreach (RuleSets::getSetDefinitionNames() as $set) { - $ruleSet = new RuleSet([$set => true]); - - if ($ruleSet->hasRule($name)) { - $ruleSetConfigs[$set] = $ruleSet->getRuleConfiguration($name); - } - } - - if ([] !== $ruleSetConfigs) { - $plural = 1 !== \count($ruleSetConfigs) ? 's' : ''; - $doc .= << $config) { - $ruleSetPath = $this->locator->getRuleSetsDocumentationFilePath($set); - $ruleSetPath = substr($ruleSetPath, strrpos($ruleSetPath, '/')); - - $doc .= <<`_ rule set will enable the ``{$name}`` rule -RST; - - if (null !== $config) { - $doc .= " with the config below:\n\n ``".HelpCommand::toString($config).'``'; - } elseif ($fixer instanceof ConfigurableFixerInterface) { - $doc .= ' with the default config.'; - } else { - $doc .= '.'; - } - } - } - - return "{$doc}\n"; - } - - /** - * @param FixerInterface[] $fixers - */ - public function generateFixersDocumentationIndex(array $fixers): string - { - $overrideGroups = [ - 'PhpUnit' => 'PHPUnit', - 'PhpTag' => 'PHP Tag', - 'Phpdoc' => 'PHPDoc', - ]; - - usort($fixers, static function (FixerInterface $a, FixerInterface $b): int { - return strcmp(\get_class($a), \get_class($b)); - }); - - $documentation = <<<'RST' -======================= -List of Available Rules -======================= -RST; - - $currentGroup = null; - - foreach ($fixers as $fixer) { - $namespace = Preg::replace('/^.*\\\\(.+)\\\\.+Fixer$/', '$1', \get_class($fixer)); - $group = $overrideGroups[$namespace] ?? Preg::replace('/(?<=[[:lower:]])(?=[[:upper:]])/', ' ', $namespace); - - if ($group !== $currentGroup) { - $underline = str_repeat('-', \strlen($group)); - $documentation .= "\n\n{$group}\n{$underline}\n"; - - $currentGroup = $group; - } - - $path = './'.$this->locator->getFixerDocumentationFileRelativePath($fixer); - - $attributes = []; - - if ($fixer instanceof DeprecatedFixerInterface) { - $attributes[] = 'deprecated'; - } - - if ($fixer->isRisky()) { - $attributes[] = 'risky'; - } - - $attributes = 0 === \count($attributes) - ? '' - : ' *('.implode(', ', $attributes).')*' - ; - - $summary = str_replace('`', '``', $fixer->getDefinition()->getSummary()); - - $documentation .= <<getName()} <{$path}>`_{$attributes} - - {$summary} -RST; - } - - return "{$documentation}\n"; - } - - private function generateSampleDiff(FixerInterface $fixer, CodeSampleInterface $sample, int $sampleNumber, string $ruleName): string - { - if ($sample instanceof VersionSpecificCodeSampleInterface && !$sample->isSuitableFor(\PHP_VERSION_ID)) { - $existingFile = @file_get_contents($this->locator->getFixerDocumentationFilePath($fixer)); - - if (false !== $existingFile) { - Preg::match("/\\RExample #{$sampleNumber}\\R.+?(?\\R\\.\\. code-block:: diff\\R\\R.*?)\\R(?:\\R\\S|$)/s", $existingFile, $matches); - - if (isset($matches['diff'])) { - return $matches['diff']; - } - } - - $error = <<getCode(); - - $tokens = Tokens::fromCode($old); - $file = $sample instanceof FileSpecificCodeSampleInterface - ? $sample->getSplFileInfo() - : new StdinFileInfo() - ; - - if ($fixer instanceof ConfigurableFixerInterface) { - $fixer->configure($sample->getConfiguration() ?? []); - } - - $fixer->fix($file, $tokens); - - $diff = $this->differ->diff($old, $tokens->generateCode()); - $diff = Preg::replace('/@@[ \+\-\d,]+@@\n/', '', $diff); - $diff = Preg::replace('/\r/', '^M', $diff); - $diff = Preg::replace('/^ $/m', '', $diff); - $diff = Preg::replace('/\n$/', '', $diff); - $diff = RstUtils::indent($diff, 3); - - return << - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Documentation; - -use PhpCsFixer\Console\Command\HelpCommand; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\FixerConfiguration\AliasedFixerOption; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\DeprecatedFixerOptionInterface; -use PhpCsFixer\RuleSet\RuleSet; -use PhpCsFixer\RuleSet\RuleSets; -use PhpCsFixer\Utils; - -/** - * @internal - */ -final class ListDocumentGenerator -{ - private DocumentationLocator $locator; - - public function __construct(DocumentationLocator $locator) - { - $this->locator = $locator; - } - - /** - * @param FixerInterface[] $fixers - */ - public function generateListingDocumentation(array $fixers): string - { - usort( - $fixers, - static function (FixerInterface $fixer1, FixerInterface $fixer2): int { - return strnatcasecmp($fixer1->getName(), $fixer2->getName()); - } - ); - - $documentation = <<<'RST' -======================= -List of Available Rules -======================= - -RST; - foreach ($fixers as $fixer) { - $name = $fixer->getName(); - $definition = $fixer->getDefinition(); - $path = './rules/'.$this->locator->getFixerDocumentationFileRelativePath($fixer); - - $documentation .= "\n- `{$name} <{$path}>`_\n"; - $documentation .= "\n ".str_replace('`', '``', $definition->getSummary())."\n"; - - $description = $definition->getDescription(); - - if (null !== $description) { - $documentation .= "\n ".RstUtils::toRst($description, 3)."\n"; - } - - if ($fixer instanceof DeprecatedFixerInterface) { - $documentation .= "\n *warning deprecated*"; - $alternatives = $fixer->getSuccessorsNames(); - - if (0 !== \count($alternatives)) { - $documentation .= RstUtils::toRst(sprintf( - ' Use %s instead.', - Utils::naturalLanguageJoinWithBackticks($alternatives) - ), 3); - } - - $documentation .= "\n"; - } - - if ($fixer->isRisky()) { - $documentation .= "\n *warning risky* ".RstUtils::toRst($definition->getRiskyDescription(), 3)."\n"; - } - - if ($fixer instanceof ConfigurableFixerInterface) { - $documentation .= "\n Configuration options:\n"; - $configurationDefinition = $fixer->getConfigurationDefinition(); - - foreach ($configurationDefinition->getOptions() as $option) { - $documentation .= "\n - | ``{$option->getName()}``"; - $documentation .= "\n | {$option->getDescription()}"; - - if ($option instanceof DeprecatedFixerOptionInterface) { - $deprecationMessage = RstUtils::toRst($option->getDeprecationMessage(), 3); - $documentation .= "\n | warning:: This option is deprecated and will be removed on next major version. {$deprecationMessage}"; - } - - if ($option instanceof AliasedFixerOption) { - $documentation .= "\n | note:: The previous name of this option was ``{$option->getAlias()}`` but it is now deprecated and will be removed on next major version."; - } - - $allowed = HelpCommand::getDisplayableAllowedValues($option); - - if (null === $allowed) { - $allowedKind = 'Allowed types'; - $allowed = array_map( - static fn ($value): string => '``'.$value.'``', - $option->getAllowedTypes(), - ); - } else { - $allowedKind = 'Allowed values'; - $allowed = array_map(static function ($value): string { - return $value instanceof AllowedValueSubset - ? 'a subset of ``'.HelpCommand::toString($value->getAllowedValues()).'``' - : '``'.HelpCommand::toString($value).'``'; - }, $allowed); - } - - $allowed = implode(', ', $allowed); - $documentation .= "\n | {$allowedKind}: {$allowed}"; - - if ($option->hasDefault()) { - $default = HelpCommand::toString($option->getDefault()); - $documentation .= "\n | Default value: ``{$default}``"; - } else { - $documentation .= "\n | This option is required."; - } - } - - $documentation .= "\n\n"; - } - - $ruleSetConfigs = []; - - foreach (RuleSets::getSetDefinitionNames() as $set) { - $ruleSet = new RuleSet([$set => true]); - - if ($ruleSet->hasRule($name)) { - $ruleSetConfigs[$set] = $ruleSet->getRuleConfiguration($name); - } - } - - if ([] !== $ruleSetConfigs) { - $plural = 1 !== \count($ruleSetConfigs) ? 's' : ''; - - $documentation .= "\n Part of rule set{$plural} "; - - foreach ($ruleSetConfigs as $set => $config) { - $ruleSetPath = $this->locator->getRuleSetsDocumentationFilePath($set); - $ruleSetPath = substr($ruleSetPath, strrpos($ruleSetPath, '/')); - - $documentation .= "`{$set} <./ruleSets{$ruleSetPath}>`_ "; - } - - $documentation = rtrim($documentation)."\n"; - } - - $reflectionObject = new \ReflectionObject($fixer); - $className = str_replace('\\', '\\\\', $reflectionObject->getName()); - $fileName = $reflectionObject->getFileName(); - $fileName = str_replace('\\', '/', $fileName); - $fileName = substr($fileName, strrpos($fileName, '/src/Fixer/') + 1); - $fileName = "`Source {$className} <./../{$fileName}>`_"; - $documentation .= "\n ".$fileName; - } - - return $documentation."\n"; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php b/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php deleted file mode 100644 index b7b5c51c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Documentation/RstUtils.php +++ /dev/null @@ -1,40 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Documentation; - -use PhpCsFixer\Preg; - -/** - * @internal - */ -final class RstUtils -{ - private function __construct() - { - // cannot create instance of util. class - } - - public static function toRst(string $string, int $indent = 0): string - { - $string = wordwrap(Preg::replace('/(? - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Documentation; - -use PhpCsFixer\Console\Command\HelpCommand; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\RuleSet\RuleSetDescriptionInterface; - -/** - * @internal - */ -final class RuleSetDocumentationGenerator -{ - private DocumentationLocator $locator; - - public function __construct(DocumentationLocator $locator) - { - $this->locator = $locator; - } - - /** - * @param FixerInterface[] $fixers - */ - public function generateRuleSetsDocumentation(RuleSetDescriptionInterface $definition, array $fixers): string - { - $fixerNames = []; - - foreach ($fixers as $fixer) { - $fixerNames[$fixer->getName()] = $fixer; - } - - $title = "Rule set ``{$definition->getName()}``"; - $titleLine = str_repeat('=', \strlen($title)); - $doc = "{$titleLine}\n{$title}\n{$titleLine}\n\n".$definition->getDescription(); - - if ($definition->isRisky()) { - $doc .= ' This set contains rules that are risky.'; - } - - $doc .= "\n\n"; - - $rules = $definition->getRules(); - - if (\count($rules) < 1) { - $doc .= 'This is an empty set.'; - } else { - $doc .= "Rules\n-----\n"; - - foreach ($rules as $rule => $config) { - if (str_starts_with($rule, '@')) { - $ruleSetPath = $this->locator->getRuleSetsDocumentationFilePath($rule); - $ruleSetPath = substr($ruleSetPath, strrpos($ruleSetPath, '/')); - - $doc .= "\n- `{$rule} <.{$ruleSetPath}>`_"; - } else { - $path = Preg::replace( - '#^'.preg_quote($this->locator->getFixersDocumentationDirectoryPath(), '#').'/#', - './../rules/', - $this->locator->getFixerDocumentationFilePath($fixerNames[$rule]) - ); - - $doc .= "\n- `{$rule} <{$path}>`_"; - } - - if (!\is_bool($config)) { - $doc .= "\n config:\n ``".HelpCommand::toString($config).'``'; - } - } - } - - return $doc."\n"; - } - - /** - * @param array $setDefinitions - */ - public function generateRuleSetsDocumentationIndex(array $setDefinitions): string - { - $documentation = <<<'RST' -=========================== -List of Available Rule sets -=========================== -RST; - foreach ($setDefinitions as $name => $path) { - $path = substr($path, strrpos($path, '/')); - $documentation .= "\n- `{$name} <.{$path}>`_"; - } - - return $documentation."\n"; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Error/Error.php b/old_vendor/friendsofphp/php-cs-fixer/src/Error/Error.php deleted file mode 100644 index 1f14ed9f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Error/Error.php +++ /dev/null @@ -1,93 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Error; - -/** - * An abstraction for errors that can occur before and during fixing. - * - * @author Andreas Möller - * - * @internal - */ -final class Error -{ - /** - * Error which has occurred in linting phase, before applying any fixers. - */ - public const TYPE_INVALID = 1; - - /** - * Error which has occurred during fixing phase. - */ - public const TYPE_EXCEPTION = 2; - - /** - * Error which has occurred in linting phase, after applying any fixers. - */ - public const TYPE_LINT = 3; - - private int $type; - - private string $filePath; - - private ?\Throwable $source; - - /** - * @var list - */ - private array $appliedFixers; - - private ?string $diff; - - /** - * @param list $appliedFixers - */ - public function __construct(int $type, string $filePath, ?\Throwable $source = null, array $appliedFixers = [], ?string $diff = null) - { - $this->type = $type; - $this->filePath = $filePath; - $this->source = $source; - $this->appliedFixers = $appliedFixers; - $this->diff = $diff; - } - - public function getFilePath(): string - { - return $this->filePath; - } - - public function getSource(): ?\Throwable - { - return $this->source; - } - - public function getType(): int - { - return $this->type; - } - - /** - * @return list - */ - public function getAppliedFixers(): array - { - return $this->appliedFixers; - } - - public function getDiff(): ?string - { - return $this->diff; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php b/old_vendor/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php deleted file mode 100644 index 01006673..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Error/ErrorsManager.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Error; - -/** - * Manager of errors that occur during fixing. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ErrorsManager -{ - /** - * @var Error[] - */ - private array $errors = []; - - /** - * Returns errors reported during linting before fixing. - * - * @return Error[] - */ - public function getInvalidErrors(): array - { - return array_filter($this->errors, static function (Error $error): bool { - return Error::TYPE_INVALID === $error->getType(); - }); - } - - /** - * Returns errors reported during fixing. - * - * @return Error[] - */ - public function getExceptionErrors(): array - { - return array_filter($this->errors, static function (Error $error): bool { - return Error::TYPE_EXCEPTION === $error->getType(); - }); - } - - /** - * Returns errors reported during linting after fixing. - * - * @return Error[] - */ - public function getLintErrors(): array - { - return array_filter($this->errors, static function (Error $error): bool { - return Error::TYPE_LINT === $error->getType(); - }); - } - - /** - * Returns true if no errors were reported. - */ - public function isEmpty(): bool - { - return empty($this->errors); - } - - public function report(Error $error): void - { - $this->errors[] = $error; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FileReader.php b/old_vendor/friendsofphp/php-cs-fixer/src/FileReader.php deleted file mode 100644 index d71f5f76..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FileReader.php +++ /dev/null @@ -1,73 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * File reader that unify access to regular file and stdin-alike file. - * - * Regular file could be read multiple times with `file_get_contents`, but file provided on stdin cannot. - * Consecutive try will provide empty content for stdin-alike file. - * This reader unifies access to them. - * - * @internal - */ -final class FileReader -{ - /** - * @var null|string - */ - private $stdinContent; - - public static function createSingleton(): self - { - static $instance = null; - - if (!$instance) { - $instance = new self(); - } - - return $instance; - } - - public function read(string $filePath): string - { - if ('php://stdin' === $filePath) { - if (null === $this->stdinContent) { - $this->stdinContent = $this->readRaw($filePath); - } - - return $this->stdinContent; - } - - return $this->readRaw($filePath); - } - - private function readRaw(string $realPath): string - { - $content = @file_get_contents($realPath); - - if (false === $content) { - $error = error_get_last(); - - throw new \RuntimeException(sprintf( - 'Failed to read content from "%s".%s', - $realPath, - $error ? ' '.$error['message'] : '' - )); - } - - return $content; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FileRemoval.php b/old_vendor/friendsofphp/php-cs-fixer/src/FileRemoval.php deleted file mode 100644 index dce4d924..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FileRemoval.php +++ /dev/null @@ -1,100 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * Handles files removal with possibility to remove them on shutdown. - * - * @author Adam Klvač - * @author Dariusz Rumiński - * - * @internal - */ -final class FileRemoval -{ - /** - * List of observed files to be removed. - * - * @var array - */ - private array $files = []; - - public function __construct() - { - register_shutdown_function([$this, 'clean']); - } - - public function __destruct() - { - $this->clean(); - } - - /** - * This class is not intended to be serialized, - * and cannot be deserialized (see __wakeup method). - */ - public function __sleep(): array - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - /** - * Disable the deserialization of the class to prevent attacker executing - * code by leveraging the __destruct method. - * - * @see https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection - */ - public function __wakeup(): void - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } - - /** - * Adds a file to be removed. - */ - public function observe(string $path): void - { - $this->files[$path] = true; - } - - /** - * Removes a file from shutdown removal. - */ - public function delete(string $path): void - { - if (isset($this->files[$path])) { - unset($this->files[$path]); - } - - $this->unlink($path); - } - - /** - * Removes attached files. - */ - public function clean(): void - { - foreach ($this->files as $file => $value) { - $this->unlink($file); - } - - $this->files = []; - } - - private function unlink(string $path): void - { - @unlink($path); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Finder.php b/old_vendor/friendsofphp/php-cs-fixer/src/Finder.php deleted file mode 100644 index 419354ef..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Finder.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use Symfony\Component\Finder\Finder as BaseFinder; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -class Finder extends BaseFinder -{ - public function __construct() - { - parent::__construct(); - - $this - ->files() - ->name('/\.php$/') - ->exclude('vendor') - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php deleted file mode 100644 index 3a2db980..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php +++ /dev/null @@ -1,58 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Tokenizer\Tokens; - -abstract class AbstractIncrementOperatorFixer extends AbstractFixer -{ - final protected function findStart(Tokens $tokens, int $index): int - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - $token = $tokens[$index]; - - $blockType = Tokens::detectBlockType($token); - if (null !== $blockType && !$blockType['isStart']) { - $index = $tokens->findBlockStart($blockType['type'], $index); - $token = $tokens[$index]; - } - } while (!$token->equalsAny(['$', [T_VARIABLE]])); - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - - if ($prevToken->equals('$')) { - return $this->findStart($tokens, $index); - } - - if ($prevToken->isObjectOperator()) { - return $this->findStart($tokens, $prevIndex); - } - - if ($prevToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)) { - $prevPrevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - if (!$tokens[$prevPrevIndex]->isGivenKind([T_STATIC, T_STRING])) { - return $this->findStart($tokens, $prevIndex); - } - - $index = $tokens->getTokenNotOfKindsSibling($prevIndex, -1, [T_NS_SEPARATOR, T_STATIC, T_STRING]); - $index = $tokens->getNextMeaningfulToken($index); - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php deleted file mode 100644 index 42a92a7e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php +++ /dev/null @@ -1,58 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Indicator\PhpUnitTestCaseIndicator; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -abstract class AbstractPhpUnitFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - final public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAllTokenKindsFound([T_CLASS, T_STRING]); - } - - final protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $phpUnitTestCaseIndicator = new PhpUnitTestCaseIndicator(); - - foreach ($phpUnitTestCaseIndicator->findPhpUnitClasses($tokens) as $indices) { - $this->applyPhpUnitClassFix($tokens, $indices[0], $indices[1]); - } - } - - abstract protected function applyPhpUnitClassFix(Tokens $tokens, int $startIndex, int $endIndex): void; - - final protected function getDocBlockIndex(Tokens $tokens, int $index): int - { - do { - $index = $tokens->getPrevNonWhitespace($index); - } while ($tokens[$index]->isGivenKind([T_PUBLIC, T_PROTECTED, T_PRIVATE, T_FINAL, T_ABSTRACT, T_COMMENT])); - - return $index; - } - - final protected function isPHPDoc(Tokens $tokens, int $index): bool - { - return $tokens[$index]->isGivenKind(T_DOC_COMMENT); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php deleted file mode 100644 index 9f4c05d4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.php +++ /dev/null @@ -1,216 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ArrayPushFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts simple usages of `array_push($x, $y);` to `$x[] = $y;`.', - [new CodeSample("isTokenKindFound(T_STRING) && $tokens->count() > 7; - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - for ($index = $tokens->count() - 7; $index > 0; --$index) { - if (!$tokens[$index]->equals([T_STRING, 'array_push'], false)) { - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; // redeclare/override - } - - // meaningful before must be `getPrevMeaningfulToken($index); - $namespaceSeparatorIndex = null; - - if ($tokens[$index]->isGivenKind(T_NS_SEPARATOR)) { - $namespaceSeparatorIndex = $index; - $index = $tokens->getPrevMeaningfulToken($index); - } - - if (!$tokens[$index]->equalsAny([';', '{', '}', ')', [T_OPEN_TAG]])) { - continue; - } - - // figure out where the arguments list opens - - $openBraceIndex = $tokens->getNextMeaningfulToken($callIndex); - $blockType = Tokens::detectBlockType($tokens[$openBraceIndex]); - - if (null === $blockType || Tokens::BLOCK_TYPE_PARENTHESIS_BRACE !== $blockType['type']) { - continue; - } - - // figure out where the arguments list closes - - $closeBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openBraceIndex); - - // meaningful after `)` must be `;`, `? >` or nothing - - $afterCloseBraceIndex = $tokens->getNextMeaningfulToken($closeBraceIndex); - - if (null !== $afterCloseBraceIndex && !$tokens[$afterCloseBraceIndex]->equalsAny([';', [T_CLOSE_TAG]])) { - continue; - } - - // must have 2 arguments - - // first argument must be a variable (with possibly array indexing etc.), - // after that nothing meaningful should be there till the next `,` or `)` - // if `)` than we cannot fix it (it is a single argument call) - - $firstArgumentStop = $this->getFirstArgumentEnd($tokens, $openBraceIndex); - $firstArgumentStop = $tokens->getNextMeaningfulToken($firstArgumentStop); - - if (!$tokens[$firstArgumentStop]->equals(',')) { - return; - } - - // second argument can be about anything but ellipsis, we must make sure there is not - // a third argument (or more) passed to `array_push` - - $secondArgumentStart = $tokens->getNextMeaningfulToken($firstArgumentStop); - $secondArgumentStop = $this->getSecondArgumentEnd($tokens, $secondArgumentStart, $closeBraceIndex); - - if (null === $secondArgumentStop) { - continue; - } - - // candidate is valid, replace tokens - - $tokens->clearTokenAndMergeSurroundingWhitespace($closeBraceIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($firstArgumentStop); - $tokens->insertAt( - $firstArgumentStop, - [ - new Token('['), - new Token(']'), - new Token([T_WHITESPACE, ' ']), - new Token('='), - ] - ); - $tokens->clearTokenAndMergeSurroundingWhitespace($openBraceIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($callIndex); - - if (null !== $namespaceSeparatorIndex) { - $tokens->clearTokenAndMergeSurroundingWhitespace($namespaceSeparatorIndex); - } - } - } - - private function getFirstArgumentEnd(Tokens $tokens, int $index): int - { - $nextIndex = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$nextIndex]; - - while ($nextToken->equalsAny([ - '$', - '[', - '(', - [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN], - [CT::T_DYNAMIC_PROP_BRACE_OPEN], - [CT::T_DYNAMIC_VAR_BRACE_OPEN], - [CT::T_NAMESPACE_OPERATOR], - [T_NS_SEPARATOR], - [T_STATIC], - [T_STRING], - [T_VARIABLE], - ])) { - $blockType = Tokens::detectBlockType($nextToken); - - if (null !== $blockType) { - $nextIndex = $tokens->findBlockEnd($blockType['type'], $nextIndex); - } - - $index = $nextIndex; - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - $nextToken = $tokens[$nextIndex]; - } - - if ($nextToken->isGivenKind(T_OBJECT_OPERATOR)) { - return $this->getFirstArgumentEnd($tokens, $nextIndex); - } - - if ($nextToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)) { - return $this->getFirstArgumentEnd($tokens, $tokens->getNextMeaningfulToken($nextIndex)); - } - - return $index; - } - - /** - * @param int $endIndex boundary, i.e. tokens index of `)` - */ - private function getSecondArgumentEnd(Tokens $tokens, int $index, int $endIndex): ?int - { - if ($tokens[$index]->isGivenKind(T_ELLIPSIS)) { - return null; - } - - for (; $index <= $endIndex; ++$index) { - $blockType = Tokens::detectBlockType($tokens[$index]); - - while (null !== $blockType && $blockType['isStart']) { - $index = $tokens->findBlockEnd($blockType['type'], $index); - $index = $tokens->getNextMeaningfulToken($index); - $blockType = Tokens::detectBlockType($tokens[$index]); - } - - if ($tokens[$index]->equals(',') || $tokens[$index]->isGivenKind([T_YIELD, T_YIELD_FROM, T_LOGICAL_AND, T_LOGICAL_OR, T_LOGICAL_XOR])) { - return null; - } - } - - return $endIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php deleted file mode 100644 index eca32ba6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php +++ /dev/null @@ -1,159 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class BacktickToShellExecFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('`'); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts backtick operators to `shell_exec` calls.', - [ - new CodeSample( - <<<'EOT' -call()}`; - -EOT - ), - ], - 'Conversion is done only when it is non risky, so when special chars like single-quotes, double-quotes and backticks are not used inside the command.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before EscapeImplicitBackslashesFixer, ExplicitStringVariableFixer, NativeFunctionInvocationFixer, SingleQuoteFixer. - */ - public function getPriority(): int - { - return 17; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $backtickStarted = false; - $backtickTokens = []; - for ($index = $tokens->count() - 1; $index > 0; --$index) { - $token = $tokens[$index]; - - if (!$token->equals('`')) { - if ($backtickStarted) { - $backtickTokens[$index] = $token; - } - - continue; - } - - $backtickTokens[$index] = $token; - - if ($backtickStarted) { - $this->fixBackticks($tokens, $backtickTokens); - $backtickTokens = []; - } - - $backtickStarted = !$backtickStarted; - } - } - - /** - * Override backtick code with corresponding double-quoted string. - * - * @param array $backtickTokens - */ - private function fixBackticks(Tokens $tokens, array $backtickTokens): void - { - // Track indices for final override - ksort($backtickTokens); - $openingBacktickIndex = key($backtickTokens); - end($backtickTokens); - $closingBacktickIndex = key($backtickTokens); - - // Strip enclosing backticks - array_shift($backtickTokens); - array_pop($backtickTokens); - - // Double-quoted strings are parsed differently if they contain - // variables or not, so we need to build the new token array accordingly - $count = \count($backtickTokens); - - $newTokens = [ - new Token([T_STRING, 'shell_exec']), - new Token('('), - ]; - - if (1 !== $count) { - $newTokens[] = new Token('"'); - } - - foreach ($backtickTokens as $token) { - if (!$token->isGivenKind(T_ENCAPSED_AND_WHITESPACE)) { - $newTokens[] = $token; - - continue; - } - - $content = $token->getContent(); - // Escaping special chars depends on the context: too tricky - if (Preg::match('/[`"\']/u', $content)) { - return; - } - - $kind = T_ENCAPSED_AND_WHITESPACE; - - if (1 === $count) { - $content = '"'.$content.'"'; - $kind = T_CONSTANT_ENCAPSED_STRING; - } - - $newTokens[] = new Token([$kind, $content]); - } - - if (1 !== $count) { - $newTokens[] = new Token('"'); - } - - $newTokens[] = new Token(')'); - - $tokens->overrideRange($openingBacktickIndex, $closingBacktickIndex, $newTokens); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php deleted file mode 100644 index 7058032b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php +++ /dev/null @@ -1,205 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\PregException; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Matteo Beccati - */ -final class EregToPregFixer extends AbstractFixer -{ - /** - * @var list> the list of the ext/ereg function names, their preg equivalent and the preg modifier(s), if any - * all condensed in an array of arrays - */ - private static array $functions = [ - ['ereg', 'preg_match', ''], - ['eregi', 'preg_match', 'i'], - ['ereg_replace', 'preg_replace', ''], - ['eregi_replace', 'preg_replace', 'i'], - ['split', 'preg_split', ''], - ['spliti', 'preg_split', 'i'], - ]; - - /** - * @var list the list of preg delimiters, in order of preference - */ - private static array $delimiters = ['/', '#', '!']; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace deprecated `ereg` regular expression functions with `preg`.', - [new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $end = $tokens->count() - 1; - $functionsAnalyzer = new FunctionsAnalyzer(); - - foreach (self::$functions as $map) { - // the sequence is the function name, followed by "(" and a quoted string - $seq = [[T_STRING, $map[0]], '(', [T_CONSTANT_ENCAPSED_STRING]]; - $currIndex = 0; - - while (true) { - $match = $tokens->findSequence($seq, $currIndex, $end, false); - - // did we find a match? - if (null === $match) { - break; - } - - // findSequence also returns the tokens, but we're only interested in the indices, i.e.: - // 0 => function name, - // 1 => bracket "(" - // 2 => quoted string passed as 1st parameter - $match = array_keys($match); - - // advance tokenizer cursor - $currIndex = $match[2]; - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $match[0])) { - continue; - } - - // ensure the first parameter is just a string (e.g. has nothing appended) - $next = $tokens->getNextMeaningfulToken($match[2]); - - if (null === $next || !$tokens[$next]->equalsAny([',', ')'])) { - continue; - } - - // convert to PCRE - $regexTokenContent = $tokens[$match[2]]->getContent(); - - if ('b' === $regexTokenContent[0] || 'B' === $regexTokenContent[0]) { - $quote = $regexTokenContent[1]; - $prefix = $regexTokenContent[0]; - $string = substr($regexTokenContent, 2, -1); - } else { - $quote = $regexTokenContent[0]; - $prefix = ''; - $string = substr($regexTokenContent, 1, -1); - } - - $delim = $this->getBestDelimiter($string); - $preg = $delim.addcslashes($string, $delim).$delim.'D'.$map[2]; - - // check if the preg is valid - if (!$this->checkPreg($preg)) { - continue; - } - - // modify function and argument - $tokens[$match[0]] = new Token([T_STRING, $map[1]]); - $tokens[$match[2]] = new Token([T_CONSTANT_ENCAPSED_STRING, $prefix.$quote.$preg.$quote]); - } - } - } - - /** - * Check the validity of a PCRE. - * - * @param string $pattern the regular expression - */ - private function checkPreg(string $pattern): bool - { - try { - Preg::match($pattern, ''); - - return true; - } catch (PregException $e) { - return false; - } - } - - /** - * Get the delimiter that would require the least escaping in a regular expression. - * - * @param string $pattern the regular expression - * - * @return string the preg delimiter - */ - private function getBestDelimiter(string $pattern): string - { - // try to find something that's not used - $delimiters = []; - - foreach (self::$delimiters as $k => $d) { - if (!str_contains($pattern, $d)) { - return $d; - } - - $delimiters[$d] = [substr_count($pattern, $d), $k]; - } - - // return the least used delimiter, using the position in the list as a tiebreaker - uasort($delimiters, static function (array $a, array $b): int { - if ($a[0] === $b[0]) { - return $a[1] <=> $b[1]; - } - - return $a[0] <=> $b[0]; - }); - - return key($delimiters); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php deleted file mode 100644 index 514352aa..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php +++ /dev/null @@ -1,139 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class MbStrFunctionsFixer extends AbstractFunctionReferenceFixer -{ - /** - * list of the string-related function names and their mb_ equivalent. - * - * @var array< - * string, - * array{ - * alternativeName: string, - * argumentCount: list, - * }, - * > - */ - private static array $functionsMap = [ - 'str_split' => ['alternativeName' => 'mb_str_split', 'argumentCount' => [1, 2, 3]], - 'stripos' => ['alternativeName' => 'mb_stripos', 'argumentCount' => [2, 3]], - 'stristr' => ['alternativeName' => 'mb_stristr', 'argumentCount' => [2, 3]], - 'strlen' => ['alternativeName' => 'mb_strlen', 'argumentCount' => [1]], - 'strpos' => ['alternativeName' => 'mb_strpos', 'argumentCount' => [2, 3]], - 'strrchr' => ['alternativeName' => 'mb_strrchr', 'argumentCount' => [2]], - 'strripos' => ['alternativeName' => 'mb_strripos', 'argumentCount' => [2, 3]], - 'strrpos' => ['alternativeName' => 'mb_strrpos', 'argumentCount' => [2, 3]], - 'strstr' => ['alternativeName' => 'mb_strstr', 'argumentCount' => [2, 3]], - 'strtolower' => ['alternativeName' => 'mb_strtolower', 'argumentCount' => [1]], - 'strtoupper' => ['alternativeName' => 'mb_strtoupper', 'argumentCount' => [1]], - 'substr' => ['alternativeName' => 'mb_substr', 'argumentCount' => [2, 3]], - 'substr_count' => ['alternativeName' => 'mb_substr_count', 'argumentCount' => [2, 3, 4]], - ]; - - /** - * @var array< - * string, - * array{ - * alternativeName: string, - * argumentCount: list, - * }, - * > - */ - private array $functions; - - public function __construct() - { - parent::__construct(); - - $this->functions = array_filter( - self::$functionsMap, - static function (array $mapping): bool { - return (new \ReflectionFunction($mapping['alternativeName']))->isInternal(); - } - ); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace non multibyte-safe functions with corresponding mb function.', - [ - new CodeSample( - 'functions as $functionIdentity => $functionReplacement) { - $currIndex = 0; - do { - // try getting function reference and translate boundaries for humans - $boundaries = $this->find($functionIdentity, $tokens, $currIndex, $tokens->count() - 1); - if (null === $boundaries) { - // next function search, as current one not found - continue 2; - } - - [$functionName, $openParenthesis, $closeParenthesis] = $boundaries; - $count = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis); - if (!\in_array($count, $functionReplacement['argumentCount'], true)) { - continue 2; - } - - // analysing cursor shift, so nested calls could be processed - $currIndex = $openParenthesis; - - $tokens[$functionName] = new Token([T_STRING, $functionReplacement['alternativeName']]); - } while (null !== $currIndex); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php deleted file mode 100644 index 178de8cc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php +++ /dev/null @@ -1,233 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Alexander M. Turek - */ -final class ModernizeStrposFixer extends AbstractFixer -{ - private const REPLACEMENTS = [ - [ - 'operator' => [T_IS_IDENTICAL, '==='], - 'operand' => [T_LNUMBER, '0'], - 'replacement' => [T_STRING, 'str_starts_with'], - 'negate' => false, - ], - [ - 'operator' => [T_IS_NOT_IDENTICAL, '!=='], - 'operand' => [T_LNUMBER, '0'], - 'replacement' => [T_STRING, 'str_starts_with'], - 'negate' => true, - ], - [ - 'operator' => [T_IS_NOT_IDENTICAL, '!=='], - 'operand' => [T_STRING, 'false'], - 'replacement' => [T_STRING, 'str_contains'], - 'negate' => false, - ], - [ - 'operator' => [T_IS_IDENTICAL, '==='], - 'operand' => [T_STRING, 'false'], - 'replacement' => [T_STRING, 'str_contains'], - 'negate' => true, - ], - ]; - - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace `strpos()` calls with `str_starts_with()` or `str_contains()` if possible.', - [ - new CodeSample( - 'isTokenKindFound(T_STRING) && $tokens->isAnyTokenKindsFound([T_IS_IDENTICAL, T_IS_NOT_IDENTICAL]); - } - - public function isRisky(): bool - { - return true; - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - for ($index = \count($tokens) - 1; $index > 0; --$index) { - // find candidate function call - if (!$tokens[$index]->equals([T_STRING, 'strpos'], false) || !$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - // assert called with 2 arguments - $openIndex = $tokens->getNextMeaningfulToken($index); - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - $arguments = $argumentsAnalyzer->getArguments($tokens, $openIndex, $closeIndex); - - if (2 !== \count($arguments)) { - continue; - } - - // check if part condition and fix if needed - $compareTokens = $this->getCompareTokens($tokens, $index, -1); // look behind - - if (null === $compareTokens) { - $compareTokens = $this->getCompareTokens($tokens, $closeIndex, 1); // look ahead - } - - if (null !== $compareTokens) { - $this->fixCall($tokens, $index, $compareTokens); - } - } - } - - /** - * @param array{operator_index: int, operand_index: int} $operatorIndices - */ - private function fixCall(Tokens $tokens, int $functionIndex, array $operatorIndices): void - { - foreach (self::REPLACEMENTS as $replacement) { - if (!$tokens[$operatorIndices['operator_index']]->equals($replacement['operator'])) { - continue; - } - - if (!$tokens[$operatorIndices['operand_index']]->equals($replacement['operand'], false)) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($operatorIndices['operator_index']); - $tokens->clearTokenAndMergeSurroundingWhitespace($operatorIndices['operand_index']); - $tokens->clearTokenAndMergeSurroundingWhitespace($functionIndex); - - if ($replacement['negate']) { - $negateInsertIndex = $functionIndex; - - $prevFunctionIndex = $tokens->getPrevMeaningfulToken($functionIndex); - if ($tokens[$prevFunctionIndex]->isGivenKind(T_NS_SEPARATOR)) { - $negateInsertIndex = $prevFunctionIndex; - } - - $tokens->insertAt($negateInsertIndex, new Token('!')); - ++$functionIndex; - } - - $tokens->insertAt($functionIndex, new Token($replacement['replacement'])); - - break; - } - } - - /** - * @param -1|1 $direction - * - * @return null|array{operator_index: int, operand_index: int} - */ - private function getCompareTokens(Tokens $tokens, int $offsetIndex, int $direction): ?array - { - $operatorIndex = $tokens->getMeaningfulTokenSibling($offsetIndex, $direction); - - if (null !== $operatorIndex && $tokens[$operatorIndex]->isGivenKind(T_NS_SEPARATOR)) { - $operatorIndex = $tokens->getMeaningfulTokenSibling($operatorIndex, $direction); - } - - if (null === $operatorIndex || !$tokens[$operatorIndex]->isGivenKind([T_IS_IDENTICAL, T_IS_NOT_IDENTICAL])) { - return null; - } - - $operandIndex = $tokens->getMeaningfulTokenSibling($operatorIndex, $direction); - - if (null === $operandIndex) { - return null; - } - - $operand = $tokens[$operandIndex]; - - if (!$operand->equals([T_LNUMBER, '0']) && !$operand->equals([T_STRING, 'false'], false)) { - return null; - } - - $precedenceTokenIndex = $tokens->getMeaningfulTokenSibling($operandIndex, $direction); - - if (null !== $precedenceTokenIndex && $this->isOfHigherPrecedence($tokens[$precedenceTokenIndex])) { - return null; - } - - return ['operator_index' => $operatorIndex, 'operand_index' => $operandIndex]; - } - - private function isOfHigherPrecedence(Token $token): bool - { - static $operatorsKinds = [ - T_DEC, // -- - T_INC, // ++ - T_INSTANCEOF, // instanceof - T_IS_GREATER_OR_EQUAL, // >= - T_IS_SMALLER_OR_EQUAL, // <= - T_POW, // ** - T_SL, // << - T_SR, // >> - ]; - - static $operatorsPerContent = [ - '!', - '%', - '*', - '+', - '-', - '.', - '/', - '<', - '>', - '~', - ]; - - return $token->isGivenKind($operatorsKinds) || $token->equalsAny($operatorsPerContent); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php deleted file mode 100644 index bf6fb579..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php +++ /dev/null @@ -1,335 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Vladimir Reznichenko - * @author Dariusz Rumiński - */ -final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const SETS = [ - '@internal' => [ - 'diskfreespace' => 'disk_free_space', - - 'dns_check_record' => 'checkdnsrr', - 'dns_get_mx' => 'getmxrr', - - 'session_commit' => 'session_write_close', - - 'stream_register_wrapper' => 'stream_wrapper_register', - 'set_file_buffer' => 'stream_set_write_buffer', - 'socket_set_blocking' => 'stream_set_blocking', - 'socket_get_status' => 'stream_get_meta_data', - 'socket_set_timeout' => 'stream_set_timeout', - 'socket_getopt' => 'socket_get_option', - 'socket_setopt' => 'socket_set_option', - - 'chop' => 'rtrim', - 'close' => 'closedir', - 'doubleval' => 'floatval', - 'fputs' => 'fwrite', - 'get_required_files' => 'get_included_files', - 'ini_alter' => 'ini_set', - 'is_double' => 'is_float', - 'is_integer' => 'is_int', - 'is_long' => 'is_int', - 'is_real' => 'is_float', - 'is_writeable' => 'is_writable', - 'join' => 'implode', - 'key_exists' => 'array_key_exists', - 'magic_quotes_runtime' => 'set_magic_quotes_runtime', - 'pos' => 'current', - 'show_source' => 'highlight_file', - 'sizeof' => 'count', - 'strchr' => 'strstr', - 'user_error' => 'trigger_error', - ], - - '@IMAP' => [ - 'imap_create' => 'imap_createmailbox', - 'imap_fetchtext' => 'imap_body', - 'imap_header' => 'imap_headerinfo', - 'imap_listmailbox' => 'imap_list', - 'imap_listsubscribed' => 'imap_lsub', - 'imap_rename' => 'imap_renamemailbox', - 'imap_scan' => 'imap_listscan', - 'imap_scanmailbox' => 'imap_listscan', - ], - - '@ldap' => [ - 'ldap_close' => 'ldap_unbind', - 'ldap_modify' => 'ldap_mod_replace', - ], - - '@mysqli' => [ - 'mysqli_execute' => 'mysqli_stmt_execute', - 'mysqli_set_opt' => 'mysqli_options', - 'mysqli_escape_string' => 'mysqli_real_escape_string', - ], - - '@pg' => [ - 'pg_exec' => 'pg_query', - ], - - '@oci' => [ - 'oci_free_cursor' => 'oci_free_statement', - ], - - '@odbc' => [ - 'odbc_do' => 'odbc_exec', - 'odbc_field_precision' => 'odbc_field_len', - ], - - '@mbreg' => [ - 'mbereg' => 'mb_ereg', - 'mbereg_match' => 'mb_ereg_match', - 'mbereg_replace' => 'mb_ereg_replace', - 'mbereg_search' => 'mb_ereg_search', - 'mbereg_search_getpos' => 'mb_ereg_search_getpos', - 'mbereg_search_getregs' => 'mb_ereg_search_getregs', - 'mbereg_search_init' => 'mb_ereg_search_init', - 'mbereg_search_pos' => 'mb_ereg_search_pos', - 'mbereg_search_regs' => 'mb_ereg_search_regs', - 'mbereg_search_setpos' => 'mb_ereg_search_setpos', - 'mberegi' => 'mb_eregi', - 'mberegi_replace' => 'mb_eregi_replace', - 'mbregex_encoding' => 'mb_regex_encoding', - 'mbsplit' => 'mb_split', - ], - - '@openssl' => [ - 'openssl_get_publickey' => 'openssl_pkey_get_public', - 'openssl_get_privatekey' => 'openssl_pkey_get_private', - ], - - '@sodium' => [ - 'sodium_crypto_scalarmult_base' => 'sodium_crypto_box_publickey_from_secretkey', - ], - - '@exif' => [ - 'read_exif_data' => 'exif_read_data', - ], - - '@ftp' => [ - 'ftp_quit' => 'ftp_close', - ], - - '@posix' => [ - 'posix_errno' => 'posix_get_last_error', - ], - - '@pcntl' => [ - 'pcntl_errno' => 'pcntl_get_last_error', - ], - - '@time' => [ - 'mktime' => ['time', 0], - 'gmmktime' => ['time', 0], - ], - ]; - - /** - * @var array|string> stores alias (key) - master (value) functions mapping - */ - private array $aliases = []; - - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->aliases = []; - - foreach ($this->configuration['sets'] as $set) { - if ('@all' === $set) { - $this->aliases = array_merge(...array_values(self::SETS)); - - break; - } - - $this->aliases = array_merge($this->aliases, self::SETS[$set]); - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Master functions shall be used instead of aliases.', - [ - new CodeSample( - ' ['@mbreg']] - ), - ], - null, - 'Risky when any of the alias functions are overridden.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before ImplodeCallFixer, PhpUnitDedicateAssertFixer. - */ - public function getPriority(): int - { - return 40; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - /** @var Token $token */ - foreach ($tokens->findGivenKind(T_STRING) as $index => $token) { - // check mapping hit - $tokenContent = strtolower($token->getContent()); - - if (!isset($this->aliases[$tokenContent])) { - continue; - } - - // skip expressions without parameters list - $openParenthesis = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$openParenthesis]->equals('(')) { - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - if (\is_array($this->aliases[$tokenContent])) { - [$alias, $numberOfArguments] = $this->aliases[$tokenContent]; - - $count = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesis)); - - if ($numberOfArguments !== $count) { - continue; - } - } else { - $alias = $this->aliases[$tokenContent]; - } - - $tokens[$index] = new Token([T_STRING, $alias]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $sets = [ - '@all' => 'all listed sets', - '@internal' => 'native functions', - '@exif' => 'EXIF functions', - '@ftp' => 'FTP functions', - '@IMAP' => 'IMAP functions', - '@ldap' => 'LDAP functions', - '@mbreg' => 'from `ext-mbstring`', - '@mysqli' => 'mysqli functions', - '@oci' => 'oci functions', - '@odbc' => 'odbc functions', - '@openssl' => 'openssl functions', - '@pcntl' => 'PCNTL functions', - '@pg' => 'pg functions', - '@posix' => 'POSIX functions', - '@snmp' => 'SNMP functions', // @TODO Remove on next major 4.0 as this set is now empty - '@sodium' => 'libsodium functions', - '@time' => 'time functions', - ]; - - $list = "List of sets to fix. Defined sets are:\n\n"; - - foreach ($sets as $set => $description) { - $list .= sprintf("* `%s` (%s)\n", $set, $description); - } - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('sets', $list)) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(array_keys($sets))]) - ->setDefault(['@internal', '@IMAP', '@pg']) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php deleted file mode 100644 index 357fa228..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasLanguageConstructCallFixer.php +++ /dev/null @@ -1,68 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoAliasLanguageConstructCallFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Master language constructs shall be used instead of aliases.', - [ - new CodeSample( - 'isTokenKindFound(T_EXIT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_EXIT)) { - continue; - } - - if ('exit' === strtolower($token->getContent())) { - continue; - } - - $tokens[$index] = new Token([T_EXIT, 'exit']); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php deleted file mode 100644 index 46782415..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php +++ /dev/null @@ -1,154 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Sullivan Senechal - */ -final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var string - */ - private $callBack; - - /** - * @var int T_ECHO or T_PRINT - */ - private $candidateTokenType; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if ('echo' === $this->configuration['use']) { - $this->candidateTokenType = T_PRINT; - $this->callBack = 'fixPrintToEcho'; - } else { - $this->candidateTokenType = T_ECHO; - $this->callBack = 'fixEchoToPrint'; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Either language construct `print` or `echo` should be used.', - [ - new CodeSample(" 'print']), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after EchoTagSyntaxFixer. - */ - public function getPriority(): int - { - return -10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound($this->candidateTokenType); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $callBack = $this->callBack; - foreach ($tokens as $index => $token) { - if ($token->isGivenKind($this->candidateTokenType)) { - $this->{$callBack}($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('use', 'The desired language construct.')) - ->setAllowedValues(['print', 'echo']) - ->setDefault('echo') - ->getOption(), - ]); - } - - private function fixEchoToPrint(Tokens $tokens, int $index): void - { - $nextTokenIndex = $tokens->getNextMeaningfulToken($index); - $endTokenIndex = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - $canBeConverted = true; - - for ($i = $nextTokenIndex; $i < $endTokenIndex; ++$i) { - if ($tokens[$i]->equalsAny(['(', [CT::T_ARRAY_SQUARE_BRACE_OPEN]])) { - $blockType = Tokens::detectBlockType($tokens[$i]); - $i = $tokens->findBlockEnd($blockType['type'], $i); - } - - if ($tokens[$i]->equals(',')) { - $canBeConverted = false; - - break; - } - } - - if (false === $canBeConverted) { - return; - } - - $tokens[$index] = new Token([T_PRINT, 'print']); - } - - private function fixPrintToEcho(Tokens $tokens, int $index): void - { - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if (!$prevToken->equalsAny([';', '{', '}', ')', [T_OPEN_TAG], [T_ELSE]])) { - return; - } - - $tokens[$index] = new Token([T_ECHO, 'echo']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php deleted file mode 100644 index 30386770..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/PowToExponentiationFixer.php +++ /dev/null @@ -1,230 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class PowToExponentiationFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - // minimal candidate to fix is seven tokens: pow(x,y); - return $tokens->count() > 7 && $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts `pow` to the `**` operator.', - [ - new CodeSample( - "findPowCalls($tokens); - $argumentsAnalyzer = new ArgumentsAnalyzer(); - $numberOfTokensAdded = 0; - $previousCloseParenthesisIndex = \count($tokens); - - foreach (array_reverse($candidates) as $candidate) { - // if in the previous iteration(s) tokens were added to the collection and this is done within the tokens - // indices of the current candidate than the index of the close ')' of the candidate has moved and so - // the index needs to be updated - if ($previousCloseParenthesisIndex < $candidate[2]) { - $previousCloseParenthesisIndex = $candidate[2]; - $candidate[2] += $numberOfTokensAdded; - } else { - $previousCloseParenthesisIndex = $candidate[2]; - $numberOfTokensAdded = 0; - } - - $arguments = $argumentsAnalyzer->getArguments($tokens, $candidate[1], $candidate[2]); - - if (2 !== \count($arguments)) { - continue; - } - - for ($i = $candidate[1]; $i < $candidate[2]; ++$i) { - if ($tokens[$i]->isGivenKind(T_ELLIPSIS)) { - continue 2; - } - } - - $numberOfTokensAdded += $this->fixPowToExponentiation( - $tokens, - $candidate[0], // functionNameIndex, - $candidate[1], // openParenthesisIndex, - $candidate[2], // closeParenthesisIndex, - $arguments - ); - } - } - - /** - * @return array - */ - private function findPowCalls(Tokens $tokens): array - { - $candidates = []; - - // Minimal candidate to fix is seven tokens: pow(x,y); - $end = \count($tokens) - 6; - - // First possible location is after the open token: 1 - for ($i = 1; $i < $end; ++$i) { - $candidate = $this->find('pow', $tokens, $i, $end); - - if (null === $candidate) { - break; - } - - $i = $candidate[1]; // proceed to openParenthesisIndex - $candidates[] = $candidate; - } - - return $candidates; - } - - /** - * @param array $arguments - * - * @return int number of tokens added to the collection - */ - private function fixPowToExponentiation(Tokens $tokens, int $functionNameIndex, int $openParenthesisIndex, int $closeParenthesisIndex, array $arguments): int - { - // find the argument separator ',' directly after the last token of the first argument; - // replace it with T_POW '**' - $tokens[$tokens->getNextTokenOfKind(reset($arguments), [','])] = new Token([T_POW, '**']); - - // clean up the function call tokens prt. I - $tokens->clearAt($closeParenthesisIndex); - $previousIndex = $tokens->getPrevMeaningfulToken($closeParenthesisIndex); - - if ($tokens[$previousIndex]->equals(',')) { - $tokens->clearAt($previousIndex); // trailing ',' in function call (PHP 7.3) - } - - $added = 0; - - // check if the arguments need to be wrapped in parentheses - foreach (array_reverse($arguments, true) as $argumentStartIndex => $argumentEndIndex) { - if ($this->isParenthesisNeeded($tokens, $argumentStartIndex, $argumentEndIndex)) { - $tokens->insertAt($argumentEndIndex + 1, new Token(')')); - $tokens->insertAt($argumentStartIndex, new Token('(')); - $added += 2; - } - } - - // clean up the function call tokens prt. II - $tokens->clearAt($openParenthesisIndex); - $tokens->clearAt($functionNameIndex); - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($functionNameIndex); - - if ($tokens[$prevMeaningfulTokenIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearAt($prevMeaningfulTokenIndex); - } - - return $added; - } - - private function isParenthesisNeeded(Tokens $tokens, int $argumentStartIndex, int $argumentEndIndex): bool - { - static $allowedKinds = null; - - if (null === $allowedKinds) { - $allowedKinds = $this->getAllowedKinds(); - } - - for ($i = $argumentStartIndex; $i <= $argumentEndIndex; ++$i) { - if ($tokens[$i]->isGivenKind($allowedKinds) || $tokens->isEmptyAt($i)) { - continue; - } - - $blockType = Tokens::detectBlockType($tokens[$i]); - - if (null !== $blockType) { - $i = $tokens->findBlockEnd($blockType['type'], $i); - - continue; - } - - if ($tokens[$i]->equals('$')) { - $i = $tokens->getNextMeaningfulToken($i); - if ($tokens[$i]->isGivenKind(CT::T_DYNAMIC_VAR_BRACE_OPEN)) { - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_DYNAMIC_VAR_BRACE, $i); - - continue; - } - } - - if ($tokens[$i]->equals('+') && $tokens->getPrevMeaningfulToken($i) < $argumentStartIndex) { - continue; - } - - return true; - } - - return false; - } - - /** - * @return int[] - */ - private function getAllowedKinds(): array - { - return array_merge( - [ - T_DNUMBER, T_LNUMBER, T_VARIABLE, T_STRING, T_CONSTANT_ENCAPSED_STRING, T_DOUBLE_CAST, - T_INT_CAST, T_INC, T_DEC, T_NS_SEPARATOR, T_WHITESPACE, T_DOUBLE_COLON, T_LINE, T_COMMENT, T_DOC_COMMENT, - CT::T_NAMESPACE_OPERATOR, - ], - Token::getObjectOperatorKinds() - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php deleted file mode 100644 index b72aad7f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php +++ /dev/null @@ -1,170 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Vladimir Reznichenko - */ -final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer implements ConfigurableFixerInterface -{ - /** - * @var array> - */ - private static array $argumentCounts = [ - 'getrandmax' => [0], - 'mt_rand' => [1, 2], - 'rand' => [0, 2], - 'srand' => [0, 1], - 'random_int' => [0, 2], - ]; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - foreach ($this->configuration['replacements'] as $functionName => $replacement) { - $this->configuration['replacements'][$functionName] = [ - 'alternativeName' => $replacement, - 'argumentCount' => self::$argumentCounts[$functionName], - ]; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replaces `rand`, `srand`, `getrandmax` functions calls with their `mt_*` analogs or `random_int`.', - [ - new CodeSample(" ['getrandmax' => 'mt_getrandmax']] - ), - new CodeSample( - " ['rand' => 'random_int']] - ), - ], - null, - 'Risky when the configured functions are overridden. Or when relying on the seed based generating of the numbers.' - ); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - foreach ($this->configuration['replacements'] as $functionIdentity => $functionReplacement) { - if ($functionIdentity === $functionReplacement['alternativeName']) { - continue; - } - - $currIndex = 0; - - do { - // try getting function reference and translate boundaries for humans - $boundaries = $this->find($functionIdentity, $tokens, $currIndex, $tokens->count() - 1); - - if (null === $boundaries) { - // next function search, as current one not found - continue 2; - } - - [$functionName, $openParenthesis, $closeParenthesis] = $boundaries; - $count = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis); - - if (!\in_array($count, $functionReplacement['argumentCount'], true)) { - continue 2; - } - - // analysing cursor shift, so nested calls could be processed - $currIndex = $openParenthesis; - $tokens[$functionName] = new Token([T_STRING, $functionReplacement['alternativeName']]); - - if (0 === $count && 'random_int' === $functionReplacement['alternativeName']) { - $tokens->insertAt($currIndex + 1, [ - new Token([T_LNUMBER, '0']), - new Token(','), - new Token([T_WHITESPACE, ' ']), - new Token([T_STRING, 'getrandmax']), - new Token('('), - new Token(')'), - ]); - - $currIndex += 6; - } - } while (null !== $currIndex); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('replacements', 'Mapping between replaced functions with the new ones.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $value): bool { - foreach ($value as $functionName => $replacement) { - if (!\array_key_exists($functionName, self::$argumentCounts)) { - throw new InvalidOptionsException(sprintf( - 'Function "%s" is not handled by the fixer.', - $functionName - )); - } - - if (!\is_string($replacement)) { - throw new InvalidOptionsException(sprintf( - 'Replacement for function "%s" must be a string, "%s" given.', - $functionName, - get_debug_type($replacement) - )); - } - } - - return true; - }]) - ->setDefault([ - 'getrandmax' => 'mt_getrandmax', - 'rand' => 'mt_rand', // @TODO change to `random_int` as default on 4.0 - 'srand' => 'mt_srand', - ]) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php deleted file mode 100644 index 0aa88d62..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php +++ /dev/null @@ -1,249 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Alias; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SetTypeToCastFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Cast shall be used, not `settype`.', - [ - new CodeSample( - 'isAllTokenKindsFound([T_CONSTANT_ENCAPSED_STRING, T_STRING, T_VARIABLE]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $map = [ - 'array' => [T_ARRAY_CAST, '(array)'], - 'bool' => [T_BOOL_CAST, '(bool)'], - 'boolean' => [T_BOOL_CAST, '(bool)'], - 'double' => [T_DOUBLE_CAST, '(float)'], - 'float' => [T_DOUBLE_CAST, '(float)'], - 'int' => [T_INT_CAST, '(int)'], - 'integer' => [T_INT_CAST, '(int)'], - 'object' => [T_OBJECT_CAST, '(object)'], - 'string' => [T_STRING_CAST, '(string)'], - // note: `'null' is dealt with later on - ]; - - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - foreach (array_reverse($this->findSettypeCalls($tokens)) as $candidate) { - $functionNameIndex = $candidate[0]; - - $arguments = $argumentsAnalyzer->getArguments($tokens, $candidate[1], $candidate[2]); - if (2 !== \count($arguments)) { - continue; // function must be overridden or used incorrectly - } - - $prev = $tokens->getPrevMeaningfulToken($functionNameIndex); - - if (!$tokens[$prev]->equalsAny([';', '{', '}', [T_OPEN_TAG]])) { - continue; // return value of the function is used - } - - reset($arguments); - - // --- Test first argument -------------------- - - $firstArgumentStart = key($arguments); - if ($tokens[$firstArgumentStart]->isComment() || $tokens[$firstArgumentStart]->isWhitespace()) { - $firstArgumentStart = $tokens->getNextMeaningfulToken($firstArgumentStart); - } - - if (!$tokens[$firstArgumentStart]->isGivenKind(T_VARIABLE)) { - continue; // settype only works with variables pass by reference, function must be overridden - } - - $commaIndex = $tokens->getNextMeaningfulToken($firstArgumentStart); - - if (null === $commaIndex || !$tokens[$commaIndex]->equals(',')) { - continue; // first argument is complex statement; function must be overridden - } - - // --- Test second argument ------------------- - - next($arguments); - $secondArgumentStart = key($arguments); - $secondArgumentEnd = $arguments[$secondArgumentStart]; - - if ($tokens[$secondArgumentStart]->isComment() || $tokens[$secondArgumentStart]->isWhitespace()) { - $secondArgumentStart = $tokens->getNextMeaningfulToken($secondArgumentStart); - } - - if ( - !$tokens[$secondArgumentStart]->isGivenKind(T_CONSTANT_ENCAPSED_STRING) - || $tokens->getNextMeaningfulToken($secondArgumentStart) < $secondArgumentEnd - ) { - continue; // second argument is of the wrong type or is a (complex) statement of some sort (function is overridden) - } - - // --- Test type ------------------------------ - - $type = strtolower(trim($tokens[$secondArgumentStart]->getContent(), '"\'"')); - - if ('null' !== $type && !isset($map[$type])) { - continue; // we don't know how to map - } - - // --- Fixing --------------------------------- - - $argumentToken = $tokens[$firstArgumentStart]; - - $this->removeSettypeCall( - $tokens, - $functionNameIndex, - $candidate[1], - $firstArgumentStart, - $commaIndex, - $secondArgumentStart, - $candidate[2] - ); - - if ('null' === $type) { - $this->fixSettypeNullCall($tokens, $functionNameIndex, $argumentToken); - } else { - $this->fixSettypeCall($tokens, $functionNameIndex, $argumentToken, new Token($map[$type])); - } - } - } - - /** - * @return list> - */ - private function findSettypeCalls(Tokens $tokens): array - { - $candidates = []; - - $end = \count($tokens); - for ($i = 1; $i < $end; ++$i) { - $candidate = $this->find('settype', $tokens, $i, $end); - if (null === $candidate) { - break; - } - - $i = $candidate[1]; // proceed to openParenthesisIndex - $candidates[] = $candidate; - } - - return $candidates; - } - - private function removeSettypeCall( - Tokens $tokens, - int $functionNameIndex, - int $openParenthesisIndex, - int $firstArgumentStart, - int $commaIndex, - int $secondArgumentStart, - int $closeParenthesisIndex - ): void { - $tokens->clearTokenAndMergeSurroundingWhitespace($closeParenthesisIndex); - $prevIndex = $tokens->getPrevMeaningfulToken($closeParenthesisIndex); - if ($tokens[$prevIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - } - $tokens->clearTokenAndMergeSurroundingWhitespace($secondArgumentStart); - $tokens->clearTokenAndMergeSurroundingWhitespace($commaIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($firstArgumentStart); - $tokens->clearTokenAndMergeSurroundingWhitespace($openParenthesisIndex); - $tokens->clearAt($functionNameIndex); // we'll be inserting here so no need to merge the space tokens - $tokens->clearEmptyTokens(); - } - - private function fixSettypeCall( - Tokens $tokens, - int $functionNameIndex, - Token $argumentToken, - Token $castToken - ): void { - $tokens->insertAt( - $functionNameIndex, - [ - clone $argumentToken, - new Token([T_WHITESPACE, ' ']), - new Token('='), - new Token([T_WHITESPACE, ' ']), - $castToken, - new Token([T_WHITESPACE, ' ']), - clone $argumentToken, - ] - ); - - $tokens->removeTrailingWhitespace($functionNameIndex + 6); // 6 = number of inserted tokens -1 for offset correction - } - - private function fixSettypeNullCall( - Tokens $tokens, - int $functionNameIndex, - Token $argumentToken - ): void { - $tokens->insertAt( - $functionNameIndex, - [ - clone $argumentToken, - new Token([T_WHITESPACE, ' ']), - new Token('='), - new Token([T_WHITESPACE, ' ']), - new Token([T_STRING, 'null']), - ] - ); - - $tokens->removeTrailingWhitespace($functionNameIndex + 4); // 4 = number of inserted tokens -1 for offset correction - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php deleted file mode 100644 index c878a023..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php +++ /dev/null @@ -1,151 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - * @author Sebastiaan Stok - * @author Dariusz Rumiński - */ -final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var null|int - */ - private $candidateTokenKind; - - /** - * @var null|string - */ - private $fixCallback; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->resolveCandidateTokenKind(); - $this->resolveFixCallback(); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHP arrays should be declared using the configured syntax.', - [ - new CodeSample( - " 'long'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BinaryOperatorSpacesFixer, TernaryOperatorSpacesFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound($this->candidateTokenKind); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $callback = $this->fixCallback; - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - if ($tokens[$index]->isGivenKind($this->candidateTokenKind)) { - $this->{$callback}($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('syntax', 'Whether to use the `long` or `short` array syntax.')) - ->setAllowedValues(['long', 'short']) - ->setDefault('short') - ->getOption(), - ]); - } - - private function fixToLongArraySyntax(Tokens $tokens, int $index): void - { - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index); - - $tokens[$index] = new Token('('); - $tokens[$closeIndex] = new Token(')'); - - $tokens->insertAt($index, new Token([T_ARRAY, 'array'])); - } - - private function fixToShortArraySyntax(Tokens $tokens, int $index): void - { - $openIndex = $tokens->getNextTokenOfKind($index, ['(']); - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - - $tokens[$openIndex] = new Token([CT::T_ARRAY_SQUARE_BRACE_OPEN, '[']); - $tokens[$closeIndex] = new Token([CT::T_ARRAY_SQUARE_BRACE_CLOSE, ']']); - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - private function resolveFixCallback(): void - { - $this->fixCallback = sprintf('fixTo%sArraySyntax', ucfirst($this->configuration['syntax'])); - } - - private function resolveCandidateTokenKind(): void - { - $this->candidateTokenKind = 'long' === $this->configuration['syntax'] ? CT::T_ARRAY_SQUARE_BRACE_OPEN : T_ARRAY; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php deleted file mode 100644 index f9583cbf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoMultilineWhitespaceAroundDoubleArrowFixer.php +++ /dev/null @@ -1,89 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Carlos Cirello - * @author Dariusz Rumiński - * @author Graham Campbell - */ -final class NoMultilineWhitespaceAroundDoubleArrowFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Operator `=>` should not be surrounded by multi-line whitespaces.', - [new CodeSample(" 2);\n")] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BinaryOperatorSpacesFixer, MethodArgumentSpaceFixer, TrailingCommaInMultilineFixer. - */ - public function getPriority(): int - { - return 31; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOUBLE_ARROW); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOUBLE_ARROW)) { - continue; - } - - if (!$tokens[$index - 2]->isComment() || str_starts_with($tokens[$index - 2]->getContent(), '/*')) { - $this->fixWhitespace($tokens, $index - 1); - } - - // do not move anything about if there is a comment following the whitespace - if (!$tokens[$index + 2]->isComment()) { - $this->fixWhitespace($tokens, $index + 1); - } - } - } - - private function fixWhitespace(Tokens $tokens, int $index): void - { - $token = $tokens[$index]; - - if ($token->isWhitespace() && !$token->isWhitespace(" \t")) { - $tokens[$index] = new Token([T_WHITESPACE, rtrim($token->getContent()).' ']); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php deleted file mode 100644 index 6ced6ca3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\Fixer\Basic\NoTrailingCommaInSinglelineFixer; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @deprecated - * - * @author Dariusz Rumiński - * @author Sebastiaan Stok - */ -final class NoTrailingCommaInSinglelineArrayFixer extends AbstractProxyFixer implements DeprecatedFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHP single-line arrays should not have trailing comma.', - [new CodeSample("proxyFixers); - } - - /** - * {@inheritdoc} - */ - protected function createProxyFixers(): array - { - $fixer = new NoTrailingCommaInSinglelineFixer(); - $fixer->configure(['elements' => ['array']]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php deleted file mode 100644 index 53bce75b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php +++ /dev/null @@ -1,155 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Adam Marczuk - */ -final class NoWhitespaceBeforeCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'In array declaration, there MUST NOT be a whitespace before each comma.', - [ - new CodeSample(" true] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - $this->fixSpacing($index, $tokens); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('after_heredoc', 'Whether the whitespace between heredoc end and comma should be removed.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * Method to fix spacing in array declaration. - */ - private function fixSpacing(int $index, Tokens $tokens): void - { - if ($tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $startIndex = $index; - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $startIndex); - } else { - $startIndex = $tokens->getNextTokenOfKind($index, ['(']); - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); - } - - for ($i = $endIndex - 1; $i > $startIndex; --$i) { - $i = $this->skipNonArrayElements($i, $tokens); - $currentToken = $tokens[$i]; - $prevIndex = $tokens->getPrevNonWhitespace($i - 1); - - if ( - $currentToken->equals(',') && !$tokens[$prevIndex]->isComment() - && (true === $this->configuration['after_heredoc'] || !$tokens[$prevIndex]->isGivenKind(T_END_HEREDOC)) - ) { - $tokens->removeLeadingWhitespace($i); - } - } - } - - /** - * Method to move index over the non-array elements like function calls or function declarations. - */ - private function skipNonArrayElements(int $index, Tokens $tokens): int - { - if ($tokens[$index]->equals('}')) { - return $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } - - if ($tokens[$index]->equals(')')) { - $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $startIndex = $tokens->getPrevMeaningfulToken($startIndex); - if (!$tokens[$startIndex]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - return $startIndex; - } - } - - if ($tokens[$index]->equals(',') && $this->commaIsPartOfImplementsList($index, $tokens)) { - --$index; - } - - return $index; - } - - private function commaIsPartOfImplementsList(int $index, Tokens $tokens): bool - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - - $current = $tokens[$index]; - } while ($current->isGivenKind(T_STRING) || $current->equals(',')); - - return $current->isGivenKind(T_IMPLEMENTS); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php deleted file mode 100644 index f4d76525..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php +++ /dev/null @@ -1,62 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class NormalizeIndexBraceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Array index should always be written by using square braces.', - [new CodeSample("isTokenKindFound(CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if ($token->isGivenKind(CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN)) { - $tokens[$index] = new Token('['); - } elseif ($token->isGivenKind(CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE)) { - $tokens[$index] = new Token(']'); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php deleted file mode 100644 index d2e19bfb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.php +++ /dev/null @@ -1,104 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Jared Henderson - */ -final class TrimArraySpacesFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Arrays should be formatted like function/method arguments, without leading or trailing single line space.', - [new CodeSample("isAnyTokenKindsFound([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 0, $c = $tokens->count(); $index < $c; ++$index) { - if ($tokens[$index]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - self::fixArray($tokens, $index); - } - } - } - - /** - * Method to trim leading/trailing whitespace within single line arrays. - */ - private static function fixArray(Tokens $tokens, int $index): void - { - $startIndex = $index; - - if ($tokens[$startIndex]->isGivenKind(T_ARRAY)) { - $startIndex = $tokens->getNextMeaningfulToken($startIndex); - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); - } else { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $startIndex); - } - - $nextIndex = $startIndex + 1; - $nextToken = $tokens[$nextIndex]; - $nextNonWhitespaceIndex = $tokens->getNextNonWhitespace($startIndex); - $nextNonWhitespaceToken = $tokens[$nextNonWhitespaceIndex]; - $tokenAfterNextNonWhitespaceToken = $tokens[$nextNonWhitespaceIndex + 1]; - - $prevIndex = $endIndex - 1; - $prevToken = $tokens[$prevIndex]; - $prevNonWhitespaceIndex = $tokens->getPrevNonWhitespace($endIndex); - $prevNonWhitespaceToken = $tokens[$prevNonWhitespaceIndex]; - - if ( - $nextToken->isWhitespace(" \t") - && ( - !$nextNonWhitespaceToken->isComment() - || $nextNonWhitespaceIndex === $prevNonWhitespaceIndex - || $tokenAfterNextNonWhitespaceToken->isWhitespace(" \t") - || str_starts_with($nextNonWhitespaceToken->getContent(), '/*') - ) - ) { - $tokens->clearAt($nextIndex); - } - - if ( - $prevToken->isWhitespace(" \t") - && !$prevNonWhitespaceToken->equals(',') - ) { - $tokens->clearAt($prevIndex); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php deleted file mode 100644 index 8e299b15..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php +++ /dev/null @@ -1,149 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ArrayNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Adam Marczuk - */ -final class WhitespaceAfterCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'In array declaration, there MUST be a whitespace after each comma.', - [ - new CodeSample(" true]), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN]); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('ensure_single_space', 'If there are only horizontal whitespaces after the comma then ensure it is a single space.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensToInsert = []; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - continue; - } - - if ($tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $startIndex = $index; - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $startIndex); - } else { - $startIndex = $tokens->getNextTokenOfKind($index, ['(']); - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); - } - - for ($i = $endIndex - 1; $i > $startIndex; --$i) { - $i = $this->skipNonArrayElements($i, $tokens); - if (!$tokens[$i]->equals(',')) { - continue; - } - if (!$tokens[$i + 1]->isWhitespace()) { - $tokensToInsert[$i + 1] = new Token([T_WHITESPACE, ' ']); - } elseif ( - $this->configuration['ensure_single_space'] - && ' ' !== $tokens[$i + 1]->getContent() - && 1 === Preg::match('/^\h+$/', $tokens[$i + 1]->getContent()) - && (!$tokens[$i + 2]->isComment() || 1 === Preg::match('/^\h+$/', $tokens[$i + 3]->getContent())) - ) { - $tokens[$i + 1] = new Token([T_WHITESPACE, ' ']); - } - } - } - - if ([] !== $tokensToInsert) { - $tokens->insertSlices($tokensToInsert); - } - } - - /** - * Method to move index over the non-array elements like function calls or function declarations. - * - * @return int New index - */ - private function skipNonArrayElements(int $index, Tokens $tokens): int - { - if ($tokens[$index]->equals('}')) { - return $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } - - if ($tokens[$index]->equals(')')) { - $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $startIndex = $tokens->getPrevMeaningfulToken($startIndex); - if (!$tokens[$startIndex]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - return $startIndex; - } - } - - if ($tokens[$index]->equals(',') && $this->commaIsPartOfImplementsList($index, $tokens)) { - --$index; - } - - return $index; - } - - private function commaIsPartOfImplementsList(int $index, Tokens $tokens): bool - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - - $current = $tokens[$index]; - } while ($current->isGivenKind(T_STRING) || $current->equals(',')); - - return $current->isGivenKind(T_IMPLEMENTS); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php deleted file mode 100644 index 3cc5a11d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php +++ /dev/null @@ -1,267 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\ControlStructure\ControlStructureBracesFixer; -use PhpCsFixer\Fixer\ControlStructure\ControlStructureContinuationPositionFixer; -use PhpCsFixer\Fixer\LanguageConstruct\DeclareParenthesesFixer; -use PhpCsFixer\Fixer\LanguageConstruct\SingleSpaceAfterConstructFixer; -use PhpCsFixer\Fixer\Whitespace\NoExtraBlankLinesFixer; -use PhpCsFixer\Fixer\Whitespace\StatementIndentationFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶4.1, ¶4.4, ¶5. - * - * @author Dariusz Rumiński - */ -final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const LINE_NEXT = 'next'; - - /** - * @internal - */ - public const LINE_SAME = 'same'; - - /** - * @var null|CurlyBracesPositionFixer - */ - private $curlyBracesPositionFixer; - - /** - * @var null|ControlStructureContinuationPositionFixer - */ - private $controlStructureContinuationPositionFixer; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The body of each structure MUST be enclosed by braces. Braces should be properly placed. Body of braces should be properly indented.', - [ - new CodeSample( - '= 0; }; -$negative = function ($item) { - return $item < 0; }; -', - ['allow_single_line_closure' => true] - ), - new CodeSample( - ' self::LINE_SAME] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before HeredocIndentationFixer. - * Must run after ClassAttributesSeparationFixer, ClassDefinitionFixer, EmptyLoopBodyFixer, NoAlternativeSyntaxFixer, NoEmptyStatementFixer, NoUselessElseFixer, SingleLineThrowFixer, SingleSpaceAfterConstructFixer, SingleTraitInsertPerStatementFixer. - */ - public function getPriority(): int - { - return 35; - } - - public function configure(array $configuration = null): void - { - parent::configure($configuration); - - $this->getCurlyBracesPositionFixer()->configure([ - 'control_structures_opening_brace' => $this->translatePositionOption($this->configuration['position_after_control_structures']), - 'functions_opening_brace' => $this->translatePositionOption($this->configuration['position_after_functions_and_oop_constructs']), - 'anonymous_functions_opening_brace' => $this->translatePositionOption($this->configuration['position_after_anonymous_constructs']), - 'classes_opening_brace' => $this->translatePositionOption($this->configuration['position_after_functions_and_oop_constructs']), - 'anonymous_classes_opening_brace' => $this->translatePositionOption($this->configuration['position_after_anonymous_constructs']), - 'allow_single_line_empty_anonymous_classes' => $this->configuration['allow_single_line_anonymous_class_with_empty_body'], - 'allow_single_line_anonymous_functions' => $this->configuration['allow_single_line_closure'], - ]); - - $this->getControlStructureContinuationPositionFixer()->configure([ - 'position' => self::LINE_NEXT === $this->configuration['position_after_control_structures'] - ? ControlStructureContinuationPositionFixer::NEXT_LINE - : ControlStructureContinuationPositionFixer::SAME_LINE, - ]); - - $this->configuration = $configuration; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind(CT::T_USE_LAMBDA)) { - $tokens->ensureWhitespaceAtIndex($index - 1, 1, ' '); - } - } - - parent::applyFix($file, $tokens); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('allow_single_line_anonymous_class_with_empty_body', 'Whether single line anonymous class with empty body notation should be allowed.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('allow_single_line_closure', 'Whether single line lambda notation should be allowed.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('position_after_functions_and_oop_constructs', 'whether the opening brace should be placed on "next" or "same" line after classy constructs (non-anonymous classes, interfaces, traits, methods and non-lambda functions).')) - ->setAllowedValues([self::LINE_NEXT, self::LINE_SAME]) - ->setDefault(self::LINE_NEXT) - ->getOption(), - (new FixerOptionBuilder('position_after_control_structures', 'whether the opening brace should be placed on "next" or "same" line after control structures.')) - ->setAllowedValues([self::LINE_NEXT, self::LINE_SAME]) - ->setDefault(self::LINE_SAME) - ->getOption(), - (new FixerOptionBuilder('position_after_anonymous_constructs', 'whether the opening brace should be placed on "next" or "same" line after anonymous constructs (anonymous classes and lambda functions).')) - ->setAllowedValues([self::LINE_NEXT, self::LINE_SAME]) - ->setDefault(self::LINE_SAME) - ->getOption(), - ]); - } - - protected function createProxyFixers(): array - { - $singleSpaceAfterConstructFixer = new SingleSpaceAfterConstructFixer(); - $singleSpaceAfterConstructFixer->configure([ - 'constructs' => ['elseif', 'for', 'foreach', 'if', 'match', 'while', 'use_lambda'], - ]); - - $noExtraBlankLinesFixer = new NoExtraBlankLinesFixer(); - $noExtraBlankLinesFixer->configure([ - 'tokens' => ['curly_brace_block'], - ]); - - return [ - $singleSpaceAfterConstructFixer, - new ControlStructureBracesFixer(), - $noExtraBlankLinesFixer, - $this->getCurlyBracesPositionFixer(), - $this->getControlStructureContinuationPositionFixer(), - new DeclareParenthesesFixer(), - new NoMultipleStatementsPerLineFixer(), - new StatementIndentationFixer(true), - ]; - } - - private function getCurlyBracesPositionFixer(): CurlyBracesPositionFixer - { - if (null === $this->curlyBracesPositionFixer) { - $this->curlyBracesPositionFixer = new CurlyBracesPositionFixer(); - } - - return $this->curlyBracesPositionFixer; - } - - private function getControlStructureContinuationPositionFixer(): ControlStructureContinuationPositionFixer - { - if (null === $this->controlStructureContinuationPositionFixer) { - $this->controlStructureContinuationPositionFixer = new ControlStructureContinuationPositionFixer(); - } - - return $this->controlStructureContinuationPositionFixer; - } - - private function translatePositionOption(string $option): string - { - return self::LINE_NEXT === $option - ? CurlyBracesPositionFixer::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END - : CurlyBracesPositionFixer::SAME_LINE - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php deleted file mode 100644 index 128c23c4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php +++ /dev/null @@ -1,429 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\Indentation; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class CurlyBracesPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - use Indentation; - - /** - * @internal - */ - public const NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END = 'next_line_unless_newline_at_signature_end'; - - /** - * @internal - */ - public const SAME_LINE = 'same_line'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Curly braces must be placed as configured.', - [ - new CodeSample( - ' self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END] - ), - new CodeSample( - ' self::SAME_LINE] - ), - new CodeSample( - ' self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END] - ), - new CodeSample( - ' self::SAME_LINE] - ), - new VersionSpecificCodeSample( - ' self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END] - ), - new VersionSpecificCodeSample( - ' true] - ), - new CodeSample( - ' true] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('{'); - } - - /** - * {@inheritdoc} - * - * Must run after ControlStructureBracesFixer. - */ - public function getPriority(): int - { - return parent::getPriority(); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $classyTokens = Token::getClassyTokenKinds(); - $controlStructureTokens = [T_DECLARE, T_DO, T_ELSE, T_ELSEIF, T_FINALLY, T_FOR, T_FOREACH, T_IF, T_WHILE, T_TRY, T_CATCH, T_SWITCH]; - // @TODO: drop condition when PHP 8.0+ is required - if (\defined('T_MATCH')) { - $controlStructureTokens[] = T_MATCH; - } - - $tokensAnalyzer = new TokensAnalyzer($tokens); - - $allowSingleLineUntil = null; - - foreach ($tokens as $index => $token) { - $allowSingleLine = false; - $allowSingleLineIfEmpty = false; - - if ($token->isGivenKind($classyTokens)) { - $openBraceIndex = $tokens->getNextTokenOfKind($index, ['{']); - - if ($tokensAnalyzer->isAnonymousClass($index)) { - $allowSingleLineIfEmpty = $this->configuration['allow_single_line_empty_anonymous_classes']; - $positionOption = 'anonymous_classes_opening_brace'; - } else { - $positionOption = 'classes_opening_brace'; - } - } elseif ($token->isGivenKind(T_FUNCTION)) { - $openBraceIndex = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($tokens[$openBraceIndex]->equals(';')) { - continue; - } - - if ($tokensAnalyzer->isLambda($index)) { - $allowSingleLine = $this->configuration['allow_single_line_anonymous_functions']; - $positionOption = 'anonymous_functions_opening_brace'; - } else { - $positionOption = 'functions_opening_brace'; - } - } elseif ($token->isGivenKind($controlStructureTokens)) { - $parenthesisEndIndex = $this->findParenthesisEnd($tokens, $index); - $openBraceIndex = $tokens->getNextMeaningfulToken($parenthesisEndIndex); - - if (!$tokens[$openBraceIndex]->equals('{')) { - continue; - } - - $positionOption = 'control_structures_opening_brace'; - } else { - continue; - } - - $closeBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $openBraceIndex); - - $addNewlinesInsideBraces = true; - if ($allowSingleLine || $allowSingleLineIfEmpty || $index < $allowSingleLineUntil) { - $addNewlinesInsideBraces = false; - - for ($indexInsideBraces = $openBraceIndex + 1; $indexInsideBraces < $closeBraceIndex; ++$indexInsideBraces) { - $tokenInsideBraces = $tokens[$indexInsideBraces]; - - if ( - ($allowSingleLineIfEmpty && !$tokenInsideBraces->isWhitespace() && !$tokenInsideBraces->isComment()) - || ($tokenInsideBraces->isWhitespace() && 1 === Preg::match('/\R/', $tokenInsideBraces->getContent())) - ) { - $addNewlinesInsideBraces = true; - - break; - } - } - - if (!$addNewlinesInsideBraces && null === $allowSingleLineUntil) { - $allowSingleLineUntil = $closeBraceIndex; - } - } - - if ( - $addNewlinesInsideBraces - && !$this->isFollowedByNewLine($tokens, $openBraceIndex) - && !$this->hasCommentOnSameLine($tokens, $openBraceIndex) - && !$tokens[$tokens->getNextMeaningfulToken($openBraceIndex)]->isGivenKind(T_CLOSE_TAG) - ) { - $whitespace = $this->whitespacesConfig->getLineEnding().$this->getLineIndentation($tokens, $openBraceIndex); - if ($tokens->ensureWhitespaceAtIndex($openBraceIndex + 1, 0, $whitespace)) { - ++$closeBraceIndex; - } - } - - $whitespace = ' '; - if (self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END === $this->configuration[$positionOption]) { - $whitespace = $this->whitespacesConfig->getLineEnding().$this->getLineIndentation($tokens, $index); - - $previousTokenIndex = $openBraceIndex; - do { - $previousTokenIndex = $tokens->getPrevMeaningfulToken($previousTokenIndex); - } while ($tokens[$previousTokenIndex]->isGivenKind([CT::T_TYPE_COLON, CT::T_NULLABLE_TYPE, T_STRING, T_NS_SEPARATOR, CT::T_ARRAY_TYPEHINT, T_STATIC, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION])); - - if ($tokens[$previousTokenIndex]->equals(')')) { - if ($tokens[--$previousTokenIndex]->isComment()) { - --$previousTokenIndex; - } - if ( - $tokens[$previousTokenIndex]->isWhitespace() - && 1 === Preg::match('/\R/', $tokens[$previousTokenIndex]->getContent()) - ) { - $whitespace = ' '; - } - } - } - - $moveBraceToIndex = null; - - if (' ' === $whitespace) { - $previousMeaningfulIndex = $tokens->getPrevMeaningfulToken($openBraceIndex); - for ($indexBeforeOpenBrace = $openBraceIndex - 1; $indexBeforeOpenBrace > $previousMeaningfulIndex; --$indexBeforeOpenBrace) { - if (!$tokens[$indexBeforeOpenBrace]->isComment()) { - continue; - } - - $tokenBeforeOpenBrace = $tokens[--$indexBeforeOpenBrace]; - if ($tokenBeforeOpenBrace->isWhitespace()) { - $moveBraceToIndex = $indexBeforeOpenBrace; - } elseif ($indexBeforeOpenBrace === $previousMeaningfulIndex) { - $moveBraceToIndex = $previousMeaningfulIndex + 1; - } - } - } elseif (!$tokens[$openBraceIndex - 1]->isWhitespace() || !Preg::match('/\R/', $tokens[$openBraceIndex - 1]->getContent())) { - for ($indexAfterOpenBrace = $openBraceIndex + 1; $indexAfterOpenBrace < $closeBraceIndex; ++$indexAfterOpenBrace) { - if ($tokens[$indexAfterOpenBrace]->isWhitespace() && Preg::match('/\R/', $tokens[$indexAfterOpenBrace]->getContent())) { - break; - } - - if ($tokens[$indexAfterOpenBrace]->isComment() && !str_starts_with($tokens[$indexAfterOpenBrace]->getContent(), '/*')) { - $moveBraceToIndex = $indexAfterOpenBrace + 1; - } - } - } - - if (null !== $moveBraceToIndex) { - /** @var Token $movedToken */ - $movedToken = clone $tokens[$openBraceIndex]; - - $delta = $openBraceIndex < $moveBraceToIndex ? 1 : -1; - - if ($tokens[$openBraceIndex + $delta]->isWhitespace()) { - if (-1 === $delta && Preg::match('/\R/', $tokens[$openBraceIndex - 1]->getContent())) { - $content = Preg::replace('/^(\h*?\R)?\h*/', '', $tokens[$openBraceIndex + 1]->getContent()); - if ('' !== $content) { - $tokens[$openBraceIndex + 1] = new Token([T_WHITESPACE, $content]); - } else { - $tokens->clearAt($openBraceIndex + 1); - } - } else { - $tokens->clearAt($openBraceIndex - 1); - } - } - - for (; $openBraceIndex !== $moveBraceToIndex; $openBraceIndex += $delta) { - /** @var Token $siblingToken */ - $siblingToken = $tokens[$openBraceIndex + $delta]; - $tokens[$openBraceIndex] = $siblingToken; - } - - $tokens[$openBraceIndex] = $movedToken; - - $openBraceIndex = $moveBraceToIndex; - } - - if ($tokens->ensureWhitespaceAtIndex($openBraceIndex - 1, 1, $whitespace)) { - ++$closeBraceIndex; - if (null !== $allowSingleLineUntil) { - ++$allowSingleLineUntil; - } - } - - if ( - !$addNewlinesInsideBraces - || $tokens[$tokens->getPrevMeaningfulToken($closeBraceIndex)]->isGivenKind(T_OPEN_TAG) - ) { - continue; - } - - for ($prevIndex = $closeBraceIndex - 1; $tokens->isEmptyAt($prevIndex); --$prevIndex); - - $prevToken = $tokens[$prevIndex]; - if ($prevToken->isWhitespace() && 1 === Preg::match('/\R/', $prevToken->getContent())) { - continue; - } - - $whitespace = $this->whitespacesConfig->getLineEnding().$this->getLineIndentation($tokens, $openBraceIndex); - $tokens->ensureWhitespaceAtIndex($prevIndex, 1, $whitespace); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('control_structures_opening_brace', 'the position of the opening brace of control structures body.')) - ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE]) - ->setDefault(self::SAME_LINE) - ->getOption(), - (new FixerOptionBuilder('functions_opening_brace', 'the position of the opening brace of functions body.')) - ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE]) - ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END) - ->getOption(), - (new FixerOptionBuilder('anonymous_functions_opening_brace', 'the position of the opening brace of anonymous functions body.')) - ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE]) - ->setDefault(self::SAME_LINE) - ->getOption(), - (new FixerOptionBuilder('classes_opening_brace', 'the position of the opening brace of classes body.')) - ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE]) - ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END) - ->getOption(), - (new FixerOptionBuilder('anonymous_classes_opening_brace', 'the position of the opening brace of anonymous classes body.')) - ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE]) - ->setDefault(self::SAME_LINE) - ->getOption(), - (new FixerOptionBuilder('allow_single_line_empty_anonymous_classes', 'allow anonymous classes to have opening and closing braces on the same line.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('allow_single_line_anonymous_functions', 'allow anonymous functions to have opening and closing braces on the same line.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int - { - $nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex); - $nextToken = $tokens[$nextIndex]; - - // return if next token is not opening parenthesis - if (!$nextToken->equals('(')) { - return $structureTokenIndex; - } - - return $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $nextIndex); - } - - private function isFollowedByNewLine(Tokens $tokens, int $index): bool - { - for (++$index, $max = \count($tokens) - 1; $index < $max; ++$index) { - $token = $tokens[$index]; - if (!$token->isComment()) { - return $token->isWhitespace() && 1 === Preg::match('/\R/', $token->getContent()); - } - } - - return false; - } - - private function hasCommentOnSameLine(Tokens $tokens, int $index): bool - { - $token = $tokens[$index + 1]; - - if ($token->isWhitespace() && 1 !== Preg::match('/\R/', $token->getContent())) { - $token = $tokens[$index + 2]; - } - - return $token->isComment(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php deleted file mode 100644 index f3145832..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/EncodingFixer.php +++ /dev/null @@ -1,92 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR1 ¶2.2. - * - * @author Dariusz Rumiński - */ -final class EncodingFixer extends AbstractFixer -{ - private string $BOM; - - public function __construct() - { - parent::__construct(); - - $this->BOM = pack('CCC', 0xEF, 0xBB, 0xBF); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHP code MUST use only UTF-8 without BOM (remove BOM).', - [ - new CodeSample( - $this->BOM.'getContent(); - - if (0 === strncmp($content, $this->BOM, 3)) { - $newContent = substr($content, 3); - - if ('' === $newContent) { - $tokens->clearAt(0); - } else { - $tokens[0] = new Token([$tokens[0]->getId(), $newContent]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php deleted file mode 100644 index d7ed993c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php +++ /dev/null @@ -1,109 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\Indentation; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.3 Lines: There must not be more than one statement per line. - */ -final class NoMultipleStatementsPerLineFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - use Indentation; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must not be more than one statement per line.', - [new CodeSample("isTokenKindFound(';'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 1, $max = \count($tokens) - 1; $index < $max; ++$index) { - if ($tokens[$index]->isGivenKind(T_FOR)) { - $index = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $tokens->getNextTokenOfKind($index, ['(']) - ); - - continue; - } - - if (!$tokens[$index]->equals(';')) { - continue; - } - - for ($nextIndex = $index + 1; $nextIndex < $max; ++$nextIndex) { - $token = $tokens[$nextIndex]; - - if ($token->isWhitespace() || $token->isComment()) { - if (1 === Preg::match('/\R/', $token->getContent())) { - break; - } - - continue; - } - - if (!$token->equalsAny(['}', [T_CLOSE_TAG], [T_ENDIF], [T_ENDFOR], [T_ENDSWITCH], [T_ENDWHILE], [T_ENDFOREACH]])) { - $whitespaceIndex = $index; - do { - $token = $tokens[++$whitespaceIndex]; - } while ($token->isComment()); - - $newline = $this->whitespacesConfig->getLineEnding().$this->getLineIndentation($tokens, $index); - - if ($tokens->ensureWhitespaceAtIndex($whitespaceIndex, 0, $newline)) { - ++$max; - } - } - - break; - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php deleted file mode 100644 index 05aa4f46..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php +++ /dev/null @@ -1,163 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'If a list of values separated by a comma is contained on a single line, then the last item MUST NOT have a trailing comma.', - [ - new CodeSample(" ['array_destructuring']]), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return - $tokens->isTokenKindFound(',') - && $tokens->isAnyTokenKindsFound([')', CT::T_ARRAY_SQUARE_BRACE_CLOSE, CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, CT::T_GROUP_IMPORT_BRACE_CLOSE]) - ; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $elements = ['arguments', 'array_destructuring', 'array', 'group_import']; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('elements', 'Which elements to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($elements)]) - ->setDefault($elements) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->equals(')') && !$tokens[$index]->isGivenKind([CT::T_ARRAY_SQUARE_BRACE_CLOSE, CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, CT::T_GROUP_IMPORT_BRACE_CLOSE])) { - continue; - } - - $commaIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$commaIndex]->equals(',')) { - continue; - } - - $block = Tokens::detectBlockType($tokens[$index]); - $blockOpenIndex = $tokens->findBlockStart($block['type'], $index); - - if ($tokens->isPartialCodeMultiline($blockOpenIndex, $index)) { - continue; - } - - if (!$this->shouldBeCleared($tokens, $blockOpenIndex)) { - continue; - } - - do { - $tokens->clearTokenAndMergeSurroundingWhitespace($commaIndex); - $commaIndex = $tokens->getPrevMeaningfulToken($commaIndex); - } while ($tokens[$commaIndex]->equals(',')); - - $tokens->removeTrailingWhitespace($commaIndex); - } - } - - private function shouldBeCleared(Tokens $tokens, int $openIndex): bool - { - /** @var string[] $elements */ - $elements = $this->configuration['elements']; - - if ($tokens[$openIndex]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - return \in_array('array', $elements, true); - } - - if ($tokens[$openIndex]->isGivenKind(CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN)) { - return \in_array('array_destructuring', $elements, true); - } - - if ($tokens[$openIndex]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) { - return \in_array('group_import', $elements, true); - } - - if (!$tokens[$openIndex]->equals('(')) { - return false; - } - - $beforeOpen = $tokens->getPrevMeaningfulToken($openIndex); - - if ($tokens[$beforeOpen]->isGivenKind(T_ARRAY)) { - return \in_array('array', $elements, true); - } - - if ($tokens[$beforeOpen]->isGivenKind(T_LIST)) { - return \in_array('array_destructuring', $elements, true); - } - - if ($tokens[$beforeOpen]->isGivenKind([T_UNSET, T_ISSET, T_VARIABLE, T_CLASS])) { - return \in_array('arguments', $elements, true); - } - - if ($tokens[$beforeOpen]->isGivenKind(T_STRING)) { - return !AttributeAnalyzer::isAttribute($tokens, $beforeOpen) && \in_array('arguments', $elements, true); - } - - if ($tokens[$beforeOpen]->equalsAny([')', ']', [CT::T_DYNAMIC_VAR_BRACE_CLOSE], [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE]])) { - $block = Tokens::detectBlockType($tokens[$beforeOpen]); - - return - ( - Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_DYNAMIC_VAR_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_PARENTHESIS_BRACE === $block['type'] - ) && \in_array('arguments', $elements, true) - ; - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php deleted file mode 100644 index 953e709c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php +++ /dev/null @@ -1,193 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Removes Zero-width space (ZWSP), Non-breaking space (NBSP) and other invisible unicode symbols. - * - * @author Ivan Boprzenkov - */ -final class NonPrintableCharacterFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private array $symbolsReplace; - - /** - * @var int[] - */ - private static array $tokens = [ - T_STRING_VARNAME, - T_INLINE_HTML, - T_VARIABLE, - T_COMMENT, - T_ENCAPSED_AND_WHITESPACE, - T_CONSTANT_ENCAPSED_STRING, - T_DOC_COMMENT, - ]; - - public function __construct() - { - parent::__construct(); - - $this->symbolsReplace = [ - pack('H*', 'e2808b') => ['', '200b'], // ZWSP U+200B - pack('H*', 'e28087') => [' ', '2007'], // FIGURE SPACE U+2007 - pack('H*', 'e280af') => [' ', '202f'], // NBSP U+202F - pack('H*', 'e281a0') => ['', '2060'], // WORD JOINER U+2060 - pack('H*', 'c2a0') => [' ', 'a0'], // NO-BREAK SPACE U+A0 - ]; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove Zero-width space (ZWSP), Non-breaking space (NBSP) and other invisible unicode symbols.', - [ - new CodeSample( - ' false] - ), - ], - null, - 'Risky when strings contain intended invisible characters.' - ); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(self::$tokens); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('use_escape_sequences_in_strings', 'Whether characters should be replaced with escape sequences in strings.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $replacements = []; - $escapeSequences = []; - - foreach ($this->symbolsReplace as $character => [$replacement, $codepoint]) { - $replacements[$character] = $replacement; - $escapeSequences[$character] = '\u{'.$codepoint.'}'; - } - - foreach ($tokens as $index => $token) { - $content = $token->getContent(); - - if ( - $this->configuration['use_escape_sequences_in_strings'] - && $token->isGivenKind([T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE]) - ) { - if (!Preg::match('/'.implode('|', array_keys($escapeSequences)).'/', $content)) { - continue; - } - - $previousToken = $tokens[$index - 1]; - $stringTypeChanged = false; - $swapQuotes = false; - - if ($previousToken->isGivenKind(T_START_HEREDOC)) { - $previousTokenContent = $previousToken->getContent(); - - if (str_contains($previousTokenContent, '\'')) { - $tokens[$index - 1] = new Token([T_START_HEREDOC, str_replace('\'', '', $previousTokenContent)]); - $stringTypeChanged = true; - } - } elseif (str_starts_with($content, "'")) { - $stringTypeChanged = true; - $swapQuotes = true; - } - - if ($swapQuotes) { - $content = str_replace("\\'", "'", $content); - } - - if ($stringTypeChanged) { - $content = Preg::replace('/(\\\\{1,2})/', '\\\\\\\\', $content); - $content = str_replace('$', '\$', $content); - } - - if ($swapQuotes) { - $content = str_replace('"', '\"', $content); - $content = Preg::replace('/^\'(.*)\'$/s', '"$1"', $content); - } - - $tokens[$index] = new Token([$token->getId(), strtr($content, $escapeSequences)]); - - continue; - } - - if ($token->isGivenKind(self::$tokens)) { - $newContent = strtr($content, $replacements); - - // variable name cannot contain space - if ($token->isGivenKind([T_STRING_VARNAME, T_VARIABLE]) && str_contains($newContent, ' ')) { - continue; - } - - // multiline comment must have "*/" only at the end - if ($token->isGivenKind([T_COMMENT, T_DOC_COMMENT]) && str_starts_with($newContent, '/*') && strpos($newContent, '*/') !== \strlen($newContent) - 2) { - continue; - } - - $tokens[$index] = new Token([$token->getId(), $newContent]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php deleted file mode 100644 index 1e6755f3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/OctalNotationFixer.php +++ /dev/null @@ -1,74 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class OctalNotationFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Literal octal must be in `0o` notation.', - [ - new VersionSpecificCodeSample( - "= 80100 && $tokens->isTokenKindFound(T_LNUMBER); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_LNUMBER)) { - continue; - } - - $content = $token->getContent(); - - if (1 !== Preg::match('#^0\d+$#', $content)) { - continue; - } - - $tokens[$index] = 1 === Preg::match('#^0+$#', $content) - ? new Token([T_LNUMBER, '0']) - : new Token([T_LNUMBER, '0o'.substr($content, 1)]) - ; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php deleted file mode 100644 index a62ba3d4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php +++ /dev/null @@ -1,298 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Basic; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\FileSpecificCodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\StdinFileInfo; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Jordi Boggiano - * @author Dariusz Rumiński - * @author Bram Gotink - * @author Graham Campbell - * @author Kuba Werłos - */ -final class PsrAutoloadingFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Classes must be in a path that matches their namespace, be at least one namespace deep and the class name should match the file name.', - [ - new FileSpecificCodeSample( - ' './src'] - ), - ], - null, - 'This fixer may change your class name, which will break the code that depends on the old name.' - ); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if (null !== $this->configuration['dir']) { - $realpath = realpath($this->configuration['dir']); - - if (false === $realpath) { - throw new \InvalidArgumentException(sprintf('Failed to resolve configured directory "%s".', $this->configuration['dir'])); - } - - $this->configuration['dir'] = $realpath; - } - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - return -10; - } - - /** - * {@inheritdoc} - */ - public function supports(\SplFileInfo $file): bool - { - if ($file instanceof StdinFileInfo) { - return false; - } - - if ( - // ignore file with extension other than php - ('php' !== $file->getExtension()) - // ignore file with name that cannot be a class name - || 0 === Preg::match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $file->getBasename('.php')) - ) { - return false; - } - - try { - $tokens = Tokens::fromCode(sprintf('getBasename('.php'))); - - if ($tokens[3]->isKeyword() || $tokens[3]->isMagicConstant()) { - // name cannot be a class name - detected by PHP 5.x - return false; - } - } catch (\ParseError $e) { - // name cannot be a class name - detected by PHP 7.x - return false; - } - - // ignore stubs/fixtures, since they typically contain invalid files for various reasons - return !Preg::match('{[/\\\\](stub|fixture)s?[/\\\\]}i', $file->getRealPath()); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('dir', 'If provided, the directory where the project code is placed.')) - ->setAllowedTypes(['null', 'string']) - ->setDefault(null) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokenAnalyzer = new TokensAnalyzer($tokens); - - if (null !== $this->configuration['dir'] && !str_starts_with($file->getRealPath(), $this->configuration['dir'])) { - return; - } - - $namespace = null; - $namespaceStartIndex = null; - $namespaceEndIndex = null; - - $classyName = null; - $classyIndex = null; - - foreach ($tokens as $index => $token) { - if ($token->isGivenKind(T_NAMESPACE)) { - if (null !== $namespace) { - return; - } - - $namespaceStartIndex = $tokens->getNextMeaningfulToken($index); - $namespaceEndIndex = $tokens->getNextTokenOfKind($namespaceStartIndex, [';']); - $namespace = trim($tokens->generatePartialCode($namespaceStartIndex, $namespaceEndIndex - 1)); - } elseif ($token->isClassy()) { - if ($tokenAnalyzer->isAnonymousClass($index)) { - continue; - } - - if (null !== $classyName) { - return; - } - - $classyIndex = $tokens->getNextMeaningfulToken($index); - $classyName = $tokens[$classyIndex]->getContent(); - } - } - - if (null === $classyName) { - return; - } - - $expectedClassyName = $this->calculateClassyName($file, $namespace, $classyName); - - if ($classyName !== $expectedClassyName) { - $tokens[$classyIndex] = new Token([T_STRING, $expectedClassyName]); - } - - if (null === $this->configuration['dir'] || null === $namespace) { - return; - } - - if (!is_dir($this->configuration['dir'])) { - return; - } - - $configuredDir = realpath($this->configuration['dir']); - $fileDir = \dirname($file->getRealPath()); - - if (\strlen($configuredDir) >= \strlen($fileDir)) { - return; - } - - $newNamespace = substr(str_replace('/', '\\', $fileDir), \strlen($configuredDir) + 1); - $originalNamespace = substr($namespace, -\strlen($newNamespace)); - - if ($originalNamespace !== $newNamespace && strtolower($originalNamespace) === strtolower($newNamespace)) { - $tokens->clearRange($namespaceStartIndex, $namespaceEndIndex); - $namespace = substr($namespace, 0, -\strlen($newNamespace)).$newNamespace; - - $newNamespace = Tokens::fromCode('clearRange(0, 2); - $newNamespace->clearEmptyTokens(); - - $tokens->insertAt($namespaceStartIndex, $newNamespace); - } - } - - private function calculateClassyName(\SplFileInfo $file, ?string $namespace, string $currentName): string - { - $name = $file->getBasename('.php'); - $maxNamespace = $this->calculateMaxNamespace($file, $namespace); - - if (null !== $this->configuration['dir']) { - return ('' !== $maxNamespace ? (str_replace('\\', '_', $maxNamespace).'_') : '').$name; - } - - $namespaceParts = array_reverse(explode('\\', $maxNamespace)); - - foreach ($namespaceParts as $namespacePart) { - $nameCandidate = sprintf('%s_%s', $namespacePart, $name); - - if (strtolower($nameCandidate) !== strtolower(substr($currentName, -\strlen($nameCandidate)))) { - break; - } - - $name = $nameCandidate; - } - - return $name; - } - - private function calculateMaxNamespace(\SplFileInfo $file, ?string $namespace): string - { - if (null === $this->configuration['dir']) { - $root = \dirname($file->getRealPath()); - - while ($root !== \dirname($root)) { - $root = \dirname($root); - } - } else { - $root = realpath($this->configuration['dir']); - } - - $namespaceAccordingToFileLocation = trim(str_replace(\DIRECTORY_SEPARATOR, '\\', substr(\dirname($file->getRealPath()), \strlen($root))), '\\'); - - if (null === $namespace) { - return $namespaceAccordingToFileLocation; - } - - $namespaceAccordingToFileLocationPartsReversed = array_reverse(explode('\\', $namespaceAccordingToFileLocation)); - $namespacePartsReversed = array_reverse(explode('\\', $namespace)); - - foreach ($namespacePartsReversed as $key => $namespaceParte) { - if (!isset($namespaceAccordingToFileLocationPartsReversed[$key])) { - break; - } - - if (strtolower($namespaceParte) !== strtolower($namespaceAccordingToFileLocationPartsReversed[$key])) { - break; - } - - unset($namespaceAccordingToFileLocationPartsReversed[$key]); - } - - return implode('\\', array_reverse($namespaceAccordingToFileLocationPartsReversed)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php deleted file mode 100644 index 8243617f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.php +++ /dev/null @@ -1,175 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ClassReferenceNameCasingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'When referencing an internal class it must be written using the correct casing.', - [ - new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $namespacesAnalyzer = new NamespacesAnalyzer(); - $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); - $classNames = $this->getClassNames(); - - foreach ($namespacesAnalyzer->getDeclarations($tokens) as $namespace) { - $uses = []; - - foreach ($namespaceUsesAnalyzer->getDeclarationsInNamespace($tokens, $namespace) as $use) { - $uses[strtolower($use->getShortName())] = true; - } - - foreach ($this->getClassReference($tokens, $namespace) as $reference) { - $currentContent = $tokens[$reference]->getContent(); - $lowerCurrentContent = strtolower($currentContent); - - if (isset($classNames[$lowerCurrentContent]) && $currentContent !== $classNames[$lowerCurrentContent] && !isset($uses[$lowerCurrentContent])) { - $tokens[$reference] = new Token([T_STRING, $classNames[$lowerCurrentContent]]); - } - } - } - } - - private function getClassReference(Tokens $tokens, NamespaceAnalysis $namespace): \Generator - { - static $notBeforeKinds; - static $blockKinds; - - if (null === $notBeforeKinds) { - $notBeforeKinds = [ - CT::T_USE_TRAIT, - T_AS, - T_CASE, // PHP 8.1 trait enum-case - T_CLASS, - T_CONST, - T_DOUBLE_ARROW, - T_DOUBLE_COLON, - T_FUNCTION, - T_INTERFACE, - T_OBJECT_OPERATOR, - T_TRAIT, - ]; - - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - $notBeforeKinds[] = T_ENUM; - } - } - - if (null === $blockKinds) { - $blockKinds = ['before' => [','], 'after' => [',']]; - - foreach (Tokens::getBlockEdgeDefinitions() as $definition) { - $blockKinds['before'][] = $definition['start']; - $blockKinds['after'][] = $definition['end']; - } - } - - $namespaceIsGlobal = $namespace->isGlobalNamespace(); - - for ($index = $namespace->getScopeStartIndex(); $index < $namespace->getScopeEndIndex(); ++$index) { - if (!$tokens[$index]->isGivenKind(T_STRING)) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextIndex]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $nextIndex = $tokens->getNextMeaningfulToken($index); - - $isNamespaceSeparator = $tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR); - - if (!$isNamespaceSeparator && !$namespaceIsGlobal) { - continue; - } - - if ($isNamespaceSeparator) { - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - - if ($tokens[$prevIndex]->isGivenKind(T_STRING)) { - continue; - } - } elseif ($tokens[$prevIndex]->isGivenKind($notBeforeKinds)) { - continue; - } - - if ($tokens[$prevIndex]->equalsAny($blockKinds['before']) && $tokens[$nextIndex]->equalsAny($blockKinds['after'])) { - continue; - } - - if (!$tokens[$prevIndex]->isGivenKind(T_NEW) && $tokens[$nextIndex]->equalsAny(['(', ';', [T_CLOSE_TAG]])) { - continue; - } - - yield $index; - } - } - - /** - * @return array - */ - private function getClassNames(): array - { - static $classes = null; - - if (null === $classes) { - $classes = []; - - foreach (get_declared_classes() as $class) { - if ((new \ReflectionClass($class))->isInternal()) { - $classes[strtolower($class)] = $class; - } - } - } - - return $classes; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php deleted file mode 100644 index b4fa37e0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php +++ /dev/null @@ -1,176 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for constants case. - * - * @author Pol Dellaiera - */ -final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * Hold the function that will be used to convert the constants. - * - * @var callable - */ - private $fixFunction; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if ('lower' === $this->configuration['case']) { - $this->fixFunction = static function (string $content): string { - return strtolower($content); - }; - } - - if ('upper' === $this->configuration['case']) { - $this->fixFunction = static function (string $content): string { - return strtoupper($content); - }; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The PHP constants `true`, `false`, and `null` MUST be written using the correct casing.', - [ - new CodeSample(" 'upper']), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('case', 'Whether to use the `upper` or `lower` case syntax.')) - ->setAllowedValues(['upper', 'lower']) - ->setDefault('lower') - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $fixFunction = $this->fixFunction; - - foreach ($tokens as $index => $token) { - if (!$token->isNativeConstant()) { - continue; - } - - if ( - $this->isNeighbourAccepted($tokens, $tokens->getPrevMeaningfulToken($index)) - && $this->isNeighbourAccepted($tokens, $tokens->getNextMeaningfulToken($index)) - && !$this->isEnumCaseName($tokens, $index) - ) { - $tokens[$index] = new Token([$token->getId(), $fixFunction($token->getContent())]); - } - } - } - - private function isNeighbourAccepted(Tokens $tokens, int $index): bool - { - static $forbiddenTokens = null; - - if (null === $forbiddenTokens) { - $forbiddenTokens = array_merge( - [ - T_AS, - T_CLASS, - T_CONST, - T_EXTENDS, - T_IMPLEMENTS, - T_INSTANCEOF, - T_INSTEADOF, - T_INTERFACE, - T_NEW, - T_NS_SEPARATOR, - T_PAAMAYIM_NEKUDOTAYIM, - T_TRAIT, - T_USE, - CT::T_USE_TRAIT, - CT::T_USE_LAMBDA, - ], - Token::getObjectOperatorKinds() - ); - } - - $token = $tokens[$index]; - - if ($token->equalsAny(['{', '}'])) { - return false; - } - - return !$token->isGivenKind($forbiddenTokens); - } - - private function isEnumCaseName(Tokens $tokens, int $index): bool - { - if (!\defined('T_ENUM') || !$tokens->isTokenKindFound(T_ENUM)) { // @TODO: drop condition when PHP 8.1+ is required - return false; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if (null === $prevIndex || !$tokens[$prevIndex]->isGivenKind(T_CASE)) { - return false; - } - - if (!$tokens->isTokenKindFound(T_SWITCH)) { - return true; - } - - $prevIndex = $tokens->getPrevTokenOfKind($prevIndex, [[T_ENUM], [T_SWITCH]]); - - return null !== $prevIndex && $tokens[$prevIndex]->isGivenKind(T_ENUM); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php deleted file mode 100644 index 5d262ffe..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php +++ /dev/null @@ -1,69 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class IntegerLiteralCaseFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Integer literals must be in correct case.', - [ - new CodeSample( - "isTokenKindFound(T_LNUMBER); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_LNUMBER)) { - continue; - } - - $content = $token->getContent(); - - if (1 !== Preg::match('#^0[bxoBXO][0-9a-fA-F]+$#', $content)) { - continue; - } - - $newContent = '0'.strtolower($content[1]).strtoupper(substr($content, 2)); - - if ($content === $newContent) { - continue; - } - - $tokens[$index] = new Token([T_LNUMBER, $newContent]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php deleted file mode 100644 index 304b10aa..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php +++ /dev/null @@ -1,81 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.5. - * - * @author Dariusz Rumiński - */ -final class LowercaseKeywordsFixer extends AbstractFixer -{ - /** - * @var int[] - */ - private static array $excludedTokens = [T_HALT_COMPILER]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHP keywords MUST be in lower case.', - [ - new CodeSample( - 'isAnyTokenKindsFound(Token::getKeywords()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if ($token->isKeyword() && !$token->isGivenKind(self::$excludedTokens)) { - $tokens[$index] = new Token([$token->getId(), strtolower($token->getContent())]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php deleted file mode 100644 index 770e66a1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseStaticReferenceFixer.php +++ /dev/null @@ -1,106 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class LowercaseStaticReferenceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Class static references `self`, `static` and `parent` MUST be in lower case.', - [ - new CodeSample('isAnyTokenKindsFound([T_STATIC, T_STRING]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->equalsAny([[T_STRING, 'self'], [T_STATIC, 'static'], [T_STRING, 'parent']], false)) { - continue; - } - - $newContent = strtolower($token->getContent()); - if ($token->getContent() === $newContent) { - continue; // case is already correct - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prevIndex]->isGivenKind([T_CONST, T_DOUBLE_COLON, T_FUNCTION, T_NAMESPACE, T_NS_SEPARATOR]) || $tokens[$prevIndex]->isObjectOperator()) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - if ($tokens[$nextIndex]->isGivenKind([T_FUNCTION, T_NS_SEPARATOR, T_PRIVATE, T_PROTECTED, T_PUBLIC, T_STRING, CT::T_NULLABLE_TYPE])) { - continue; - } - - if ('static' === $newContent && $tokens[$nextIndex]->isGivenKind(T_VARIABLE)) { - continue; - } - - $tokens[$index] = new Token([$token->getId(), $newContent]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php deleted file mode 100644 index 3cfae9bf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicConstantCasingFixer.php +++ /dev/null @@ -1,101 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author ntzm - */ -final class MagicConstantCasingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Magic constants should be referred to using the correct casing.', - [new CodeSample("isAnyTokenKindsFound($this->getMagicConstantTokens()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $magicConstants = $this->getMagicConstants(); - $magicConstantTokens = $this->getMagicConstantTokens(); - - foreach ($tokens as $index => $token) { - if ($token->isGivenKind($magicConstantTokens)) { - $tokens[$index] = new Token([$token->getId(), $magicConstants[$token->getId()]]); - } - } - } - - /** - * @return array - */ - private function getMagicConstants(): array - { - static $magicConstants = null; - - if (null === $magicConstants) { - $magicConstants = [ - T_LINE => '__LINE__', - T_FILE => '__FILE__', - T_DIR => '__DIR__', - T_FUNC_C => '__FUNCTION__', - T_CLASS_C => '__CLASS__', - T_METHOD_C => '__METHOD__', - T_NS_C => '__NAMESPACE__', - CT::T_CLASS_CONSTANT => 'class', - T_TRAIT_C => '__TRAIT__', - ]; - } - - return $magicConstants; - } - - /** - * @return array - */ - private function getMagicConstantTokens(): array - { - static $magicConstantTokens = null; - - if (null === $magicConstantTokens) { - $magicConstantTokens = array_keys($this->getMagicConstants()); - } - - return $magicConstantTokens; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php deleted file mode 100644 index 9179845f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php +++ /dev/null @@ -1,206 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class MagicMethodCasingFixer extends AbstractFixer -{ - /** - * @var array - */ - private static array $magicNames = [ - '__call' => '__call', - '__callstatic' => '__callStatic', - '__clone' => '__clone', - '__construct' => '__construct', - '__debuginfo' => '__debugInfo', - '__destruct' => '__destruct', - '__get' => '__get', - '__invoke' => '__invoke', - '__isset' => '__isset', - '__serialize' => '__serialize', - '__set' => '__set', - '__set_state' => '__set_state', - '__sleep' => '__sleep', - '__tostring' => '__toString', - '__unserialize' => '__unserialize', - '__unset' => '__unset', - '__wakeup' => '__wakeup', - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Magic method definitions and calls must be using the correct casing.', - [ - new CodeSample( - '__INVOKE(1); -' - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING) && $tokens->isAnyTokenKindsFound(array_merge([T_FUNCTION, T_DOUBLE_COLON], Token::getObjectOperatorKinds())); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $inClass = 0; - $tokenCount = \count($tokens); - - for ($index = 1; $index < $tokenCount - 2; ++$index) { - if (0 === $inClass && $tokens[$index]->isClassy()) { - $inClass = 1; - $index = $tokens->getNextTokenOfKind($index, ['{']); - - continue; - } - - if (0 !== $inClass) { - if ($tokens[$index]->equals('{')) { - ++$inClass; - - continue; - } - - if ($tokens[$index]->equals('}')) { - --$inClass; - - continue; - } - } - - if (!$tokens[$index]->isGivenKind(T_STRING)) { - continue; // wrong type - } - - $content = $tokens[$index]->getContent(); - - if (!str_starts_with($content, '__')) { - continue; // cheap look ahead - } - - $name = strtolower($content); - - if (!$this->isMagicMethodName($name)) { - continue; // method name is not one of the magic ones we can fix - } - - $nameInCorrectCasing = $this->getMagicMethodNameInCorrectCasing($name); - if ($nameInCorrectCasing === $content) { - continue; // method name is already in the correct casing, no fix needed - } - - if ($this->isFunctionSignature($tokens, $index)) { - if (0 !== $inClass) { - // this is a method definition we want to fix - $this->setTokenToCorrectCasing($tokens, $index, $nameInCorrectCasing); - } - - continue; - } - - if ($this->isMethodCall($tokens, $index)) { - $this->setTokenToCorrectCasing($tokens, $index, $nameInCorrectCasing); - - continue; - } - - if ( - ('__callstatic' === $name || '__set_state' === $name) - && $this->isStaticMethodCall($tokens, $index) - ) { - $this->setTokenToCorrectCasing($tokens, $index, $nameInCorrectCasing); - } - } - } - - private function isFunctionSignature(Tokens $tokens, int $index): bool - { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$prevIndex]->isGivenKind(T_FUNCTION)) { - return false; // not a method signature - } - - return $tokens[$tokens->getNextMeaningfulToken($index)]->equals('('); - } - - private function isMethodCall(Tokens $tokens, int $index): bool - { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$prevIndex]->isObjectOperator()) { - return false; // not a "simple" method call - } - - return $tokens[$tokens->getNextMeaningfulToken($index)]->equals('('); - } - - private function isStaticMethodCall(Tokens $tokens, int $index): bool - { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$prevIndex]->isGivenKind(T_DOUBLE_COLON)) { - return false; // not a "simple" static method call - } - - return $tokens[$tokens->getNextMeaningfulToken($index)]->equals('('); - } - - private function isMagicMethodName(string $name): bool - { - return isset(self::$magicNames[$name]); - } - - /** - * @param string $name name of a magic method - */ - private function getMagicMethodNameInCorrectCasing(string $name): string - { - return self::$magicNames[$name]; - } - - private function setTokenToCorrectCasing(Tokens $tokens, int $index, string $nameInCorrectCasing): void - { - $tokens[$index] = new Token([T_STRING, $nameInCorrectCasing]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php deleted file mode 100644 index cf0f68da..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionCasingFixer.php +++ /dev/null @@ -1,98 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NativeFunctionCasingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Function defined by PHP should be called using the correct casing.', - [new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - static $nativeFunctionNames = null; - - if (null === $nativeFunctionNames) { - $nativeFunctionNames = $this->getNativeFunctionNames(); - } - - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - // test if we are at a function all - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - // test if the function call is to a native PHP function - $lower = strtolower($tokens[$index]->getContent()); - if (!\array_key_exists($lower, $nativeFunctionNames)) { - continue; - } - - $tokens[$index] = new Token([T_STRING, $nativeFunctionNames[$lower]]); - } - } - - /** - * @return array - */ - private function getNativeFunctionNames(): array - { - $allFunctions = get_defined_functions(); - $functions = []; - foreach ($allFunctions['internal'] as $function) { - $functions[strtolower($function)] = $function; - } - - return $functions; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php deleted file mode 100644 index 900d01f1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php +++ /dev/null @@ -1,169 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Casing; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NativeFunctionTypeDeclarationCasingFixer extends AbstractFixer -{ - /** - * https://secure.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration. - * - * self PHP 5.0 - * array PHP 5.1 - * callable PHP 5.4 - * bool PHP 7.0 - * float PHP 7.0 - * int PHP 7.0 - * string PHP 7.0 - * iterable PHP 7.1 - * void PHP 7.1 - * object PHP 7.2 - * static PHP 8.0 (return type only) - * mixed PHP 8.0 - * false PHP 8.0 (union return type only) - * null PHP 8.0 (union return type only) - * never PHP 8.1 (return type only) - * true PHP 8.2 (standalone type: https://wiki.php.net/rfc/true-type) - * false PHP 8.2 (standalone type: https://wiki.php.net/rfc/null-false-standalone-types) - * null PHP 8.2 (standalone type: https://wiki.php.net/rfc/null-false-standalone-types) - * - * @var array - */ - private array $hints; - - private FunctionsAnalyzer $functionsAnalyzer; - - public function __construct() - { - parent::__construct(); - - $this->hints = [ - 'array' => true, - 'bool' => true, - 'callable' => true, - 'float' => true, - 'int' => true, - 'iterable' => true, - 'object' => true, - 'self' => true, - 'string' => true, - 'void' => true, - ]; - - if (\PHP_VERSION_ID >= 80000) { - $this->hints['false'] = true; - $this->hints['mixed'] = true; - $this->hints['null'] = true; - $this->hints['static'] = true; - } - - if (\PHP_VERSION_ID >= 80100) { - $this->hints['never'] = true; - } - - if (\PHP_VERSION_ID >= 80200) { - $this->hints['true'] = true; - } - - $this->functionsAnalyzer = new FunctionsAnalyzer(); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Native type hints for functions should use the correct case.', - [ - new CodeSample("isAllTokenKindsFound([T_FUNCTION, T_STRING]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $this->fixFunctionReturnType($tokens, $index); - $this->fixFunctionArgumentTypes($tokens, $index); - } - } - } - - private function fixFunctionArgumentTypes(Tokens $tokens, int $index): void - { - foreach ($this->functionsAnalyzer->getFunctionArguments($tokens, $index) as $argument) { - $this->fixArgumentType($tokens, $argument->getTypeAnalysis()); - } - } - - private function fixFunctionReturnType(Tokens $tokens, int $index): void - { - $this->fixArgumentType($tokens, $this->functionsAnalyzer->getFunctionReturnType($tokens, $index)); - } - - private function fixArgumentType(Tokens $tokens, ?TypeAnalysis $type = null): void - { - if (null === $type) { - return; - } - - for ($index = $type->getStartIndex(); $index <= $type->getEndIndex(); ++$index) { - if ($tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - $lowerCasedName = strtolower($tokens[$index]->getContent()); - - if (!isset($this->hints[$lowerCasedName])) { - continue; - } - - $tokens[$index] = new Token([$tokens[$index]->getId(), $lowerCasedName]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php deleted file mode 100644 index 5310960a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php +++ /dev/null @@ -1,130 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class CastSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const INSIDE_CAST_SPACE_REPLACE_MAP = [ - ' ' => '', - "\t" => '', - "\n" => '', - "\r" => '', - "\0" => '', - "\x0B" => '', - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'A single space or none should be between cast and variable.', - [ - new CodeSample( - " 'single'] - ), - new CodeSample( - " 'none'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after NoShortBoolCastFixer. - */ - public function getPriority(): int - { - return -10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getCastTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isCast()) { - continue; - } - - $tokens[$index] = new Token([ - $token->getId(), - strtr($token->getContent(), self::INSIDE_CAST_SPACE_REPLACE_MAP), - ]); - - if ('single' === $this->configuration['space']) { - // force single whitespace after cast token: - if ($tokens[$index + 1]->isWhitespace(" \t")) { - // - if next token is whitespaces that contains only spaces and tabs - override next token with single space - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } elseif (!$tokens[$index + 1]->isWhitespace()) { - // - if next token is not whitespaces that contains spaces, tabs and new lines - append single space to current token - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - - continue; - } - - // force no whitespace after cast token: - if ($tokens[$index + 1]->isWhitespace()) { - $tokens->clearAt($index + 1); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('space', 'spacing to apply between cast and variable.')) - ->setAllowedValues(['none', 'single']) - ->setDefault('single') - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php deleted file mode 100644 index f0e30ce2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/LowercaseCastFixer.php +++ /dev/null @@ -1,95 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class LowercaseCastFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Cast should be written in lower case.', - [ - new VersionSpecificCodeSample( - 'isAnyTokenKindsFound(Token::getCastTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - if (!$tokens[$index]->isCast()) { - continue; - } - - $tokens[$index] = new Token([$tokens[$index]->getId(), strtolower($tokens[$index]->getContent())]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php deleted file mode 100644 index 7d13051f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php +++ /dev/null @@ -1,160 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Vladimir Reznichenko - */ -final class ModernizeTypesCastingFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replaces `intval`, `floatval`, `doubleval`, `strval` and `boolval` function calls with according type casting operator.', - [ - new CodeSample( - ' [T_INT_CAST, '(int)'], - 'floatval' => [T_DOUBLE_CAST, '(float)'], - 'doubleval' => [T_DOUBLE_CAST, '(float)'], - 'strval' => [T_STRING_CAST, '(string)'], - 'boolval' => [T_BOOL_CAST, '(bool)'], - ]; - - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - foreach ($replacement as $functionIdentity => $newToken) { - $currIndex = 0; - - do { - // try getting function reference and translate boundaries for humans - $boundaries = $this->find($functionIdentity, $tokens, $currIndex, $tokens->count() - 1); - - if (null === $boundaries) { - // next function search, as current one not found - continue 2; - } - - [$functionName, $openParenthesis, $closeParenthesis] = $boundaries; - - // analysing cursor shift - $currIndex = $openParenthesis; - - // indicator that the function is overridden - if (1 !== $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis)) { - continue; - } - - $paramContentEnd = $closeParenthesis; - $commaCandidate = $tokens->getPrevMeaningfulToken($paramContentEnd); - - if ($tokens[$commaCandidate]->equals(',')) { - $tokens->removeTrailingWhitespace($commaCandidate); - $tokens->clearAt($commaCandidate); - $paramContentEnd = $commaCandidate; - } - - // check if something complex passed as an argument and preserve parentheses then - $countParamTokens = 0; - - for ($paramContentIndex = $openParenthesis + 1; $paramContentIndex < $paramContentEnd; ++$paramContentIndex) { - // not a space, means some sensible token - if (!$tokens[$paramContentIndex]->isGivenKind(T_WHITESPACE)) { - ++$countParamTokens; - } - } - - $preserveParentheses = $countParamTokens > 1; - - $afterCloseParenthesisIndex = $tokens->getNextMeaningfulToken($closeParenthesis); - $afterCloseParenthesisToken = $tokens[$afterCloseParenthesisIndex]; - $wrapInParentheses = $afterCloseParenthesisToken->equalsAny(['[', '{']) || $afterCloseParenthesisToken->isGivenKind(T_POW); - - // analyse namespace specification (root one or none) and decide what to do - $prevTokenIndex = $tokens->getPrevMeaningfulToken($functionName); - - if ($tokens[$prevTokenIndex]->isGivenKind(T_NS_SEPARATOR)) { - // get rid of root namespace when it used - $tokens->removeTrailingWhitespace($prevTokenIndex); - $tokens->clearAt($prevTokenIndex); - } - - // perform transformation - $replacementSequence = [ - new Token($newToken), - new Token([T_WHITESPACE, ' ']), - ]; - - if ($wrapInParentheses) { - array_unshift($replacementSequence, new Token('(')); - } - - if (!$preserveParentheses) { - // closing parenthesis removed with leading spaces - $tokens->removeLeadingWhitespace($closeParenthesis); - $tokens->clearAt($closeParenthesis); - - // opening parenthesis removed with trailing spaces - $tokens->removeLeadingWhitespace($openParenthesis); - $tokens->removeTrailingWhitespace($openParenthesis); - $tokens->clearAt($openParenthesis); - } else { - // we'll need to provide a space after a casting operator - $tokens->removeTrailingWhitespace($functionName); - } - - if ($wrapInParentheses) { - $tokens->insertAt($closeParenthesis, new Token(')')); - } - - $tokens->overrideRange($functionName, $functionName, $replacementSequence); - - // nested transformations support - $currIndex = $functionName; - } while (null !== $currIndex); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php deleted file mode 100644 index d802d495..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoShortBoolCastFixer.php +++ /dev/null @@ -1,97 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoShortBoolCastFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - * - * Must run before CastSpacesFixer. - */ - public function getPriority(): int - { - return -9; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Short cast `bool` using double exclamation mark should not be used.', - [new CodeSample("isTokenKindFound('!'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index > 1; --$index) { - if ($tokens[$index]->equals('!')) { - $index = $this->fixShortCast($tokens, $index); - } - } - } - - private function fixShortCast(Tokens $tokens, int $index): int - { - for ($i = $index - 1; $i > 1; --$i) { - if ($tokens[$i]->equals('!')) { - $this->fixShortCastToBoolCast($tokens, $i, $index); - - break; - } - - if (!$tokens[$i]->isComment() && !$tokens[$i]->isWhitespace()) { - break; - } - } - - return $i; - } - - private function fixShortCastToBoolCast(Tokens $tokens, int $start, int $end): void - { - for (; $start <= $end; ++$start) { - if ( - !$tokens[$start]->isComment() - && !($tokens[$start]->isWhitespace() && $tokens[$start - 1]->isComment()) - ) { - $tokens->clearAt($start); - } - } - - $tokens->insertAt($start, new Token([T_BOOL_CAST, '(bool)'])); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php deleted file mode 100644 index c75f8ba4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/NoUnsetCastFixer.php +++ /dev/null @@ -1,97 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUnsetCastFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Variables must be set `null` instead of using `(unset)` casting.', - [new CodeSample("isTokenKindFound(T_UNSET_CAST); - } - - /** - * {@inheritdoc} - * - * Must run before BinaryOperatorSpacesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind(T_UNSET_CAST)) { - $this->fixUnsetCast($tokens, $index); - } - } - } - - private function fixUnsetCast(Tokens $tokens, int $index): void - { - $assignmentIndex = $tokens->getPrevMeaningfulToken($index); - if (null === $assignmentIndex || !$tokens[$assignmentIndex]->equals('=')) { - return; - } - - $varIndex = $tokens->getNextMeaningfulToken($index); - if (null === $varIndex || !$tokens[$varIndex]->isGivenKind(T_VARIABLE)) { - return; - } - - $afterVar = $tokens->getNextMeaningfulToken($varIndex); - if (null === $afterVar || !$tokens[$afterVar]->equalsAny([';', [T_CLOSE_TAG]])) { - return; - } - - $nextIsWhiteSpace = $tokens[$assignmentIndex + 1]->isWhitespace(); - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - $tokens->clearTokenAndMergeSurroundingWhitespace($varIndex); - - ++$assignmentIndex; - if (!$nextIsWhiteSpace) { - $tokens->insertAt($assignmentIndex, new Token([T_WHITESPACE, ' '])); - } - - ++$assignmentIndex; - $tokens->insertAt($assignmentIndex, new Token([T_STRING, 'null'])); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php deleted file mode 100644 index 983effde..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ShortScalarCastFixer.php +++ /dev/null @@ -1,86 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\CastNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ShortScalarCastFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Cast `(boolean)` and `(integer)` should be written as `(bool)` and `(int)`, `(double)` and `(real)` as `(float)`, `(binary)` as `(string)`.', - [ - new VersionSpecificCodeSample( - "isAnyTokenKindsFound(Token::getCastTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $castMap = [ - 'boolean' => 'bool', - 'integer' => 'int', - 'double' => 'float', - 'real' => 'float', - 'binary' => 'string', - ]; - - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - if (!$tokens[$index]->isCast()) { - continue; - } - - $castFrom = trim(substr($tokens[$index]->getContent(), 1, -1)); - $castFromLowered = strtolower($castFrom); - - if (!\array_key_exists($castFromLowered, $castMap)) { - continue; - } - - $tokens[$index] = new Token([ - $tokens[$index]->getId(), - str_replace($castFrom, $castMap[$castFromLowered], $tokens[$index]->getContent()), - ]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php deleted file mode 100644 index 609e3628..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php +++ /dev/null @@ -1,578 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * Make sure there is one blank line above and below class elements. - * - * The exception is when an element is the first or last item in a 'classy'. - */ -final class ClassAttributesSeparationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const SPACING_NONE = 'none'; - - /** - * @internal - */ - public const SPACING_ONE = 'one'; - - private const SPACING_ONLY_IF_META = 'only_if_meta'; - - /** - * @var array - */ - private array $classElementTypes = []; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->classElementTypes = []; // reset previous configuration - - foreach ($this->configuration['elements'] as $elementType => $spacing) { - $this->classElementTypes[$elementType] = $spacing; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Class, trait and interface elements must be separated with one or none blank line.', - [ - new CodeSample( - ' ['property' => self::SPACING_ONE]] - ), - new CodeSample( - ' ['const' => self::SPACING_ONE]] - ), - new CodeSample( - ' ['const' => self::SPACING_ONLY_IF_META]] - ), - new VersionSpecificCodeSample( - ' ['property' => self::SPACING_ONLY_IF_META]] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer, IndentationTypeFixer, NoExtraBlankLinesFixer, StatementIndentationFixer. - * Must run after OrderedClassElementsFixer, SingleClassElementPerStatementFixer, VisibilityRequiredFixer. - */ - public function getPriority(): int - { - return 55; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($this->getElementsByClass($tokens) as $class) { - $elements = $class['elements']; - $elementCount = \count($elements); - - if (0 === $elementCount) { - continue; - } - - if (isset($this->classElementTypes[$elements[0]['type']])) { - $this->fixSpaceBelowClassElement($tokens, $class); - $this->fixSpaceAboveClassElement($tokens, $class, 0); - } - - for ($index = 1; $index < $elementCount; ++$index) { - if (isset($this->classElementTypes[$elements[$index]['type']])) { - $this->fixSpaceAboveClassElement($tokens, $class, $index); - } - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('elements', 'Dictionary of `const|method|property|trait_import|case` => `none|one|only_if_meta` values.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $option): bool { - foreach ($option as $type => $spacing) { - $supportedTypes = ['const', 'method', 'property', 'trait_import', 'case']; - - if (!\in_array($type, $supportedTypes, true)) { - throw new InvalidOptionsException( - sprintf( - 'Unexpected element type, expected any of "%s", got "%s".', - implode('", "', $supportedTypes), - \gettype($type).'#'.$type - ) - ); - } - - $supportedSpacings = [self::SPACING_NONE, self::SPACING_ONE, self::SPACING_ONLY_IF_META]; - - if (!\in_array($spacing, $supportedSpacings, true)) { - throw new InvalidOptionsException( - sprintf( - 'Unexpected spacing for element type "%s", expected any of "%s", got "%s".', - $spacing, - implode('", "', $supportedSpacings), - \is_object($spacing) ? \get_class($spacing) : (null === $spacing ? 'null' : \gettype($spacing).'#'.$spacing) - ) - ); - } - } - - return true; - }]) - ->setDefault([ - 'const' => self::SPACING_ONE, - 'method' => self::SPACING_ONE, - 'property' => self::SPACING_ONE, - 'trait_import' => self::SPACING_NONE, - 'case' => self::SPACING_NONE, - ]) - ->getOption(), - ]); - } - - /** - * Fix spacing above an element of a class, interface or trait. - * - * Deals with comments, PHPDocs and spaces above the element with respect to the position of the - * element within the class, interface or trait. - */ - private function fixSpaceAboveClassElement(Tokens $tokens, array $class, int $elementIndex): void - { - $element = $class['elements'][$elementIndex]; - $elementAboveEnd = isset($class['elements'][$elementIndex + 1]) ? $class['elements'][$elementIndex + 1]['end'] : 0; - $nonWhiteAbove = $tokens->getPrevNonWhitespace($element['start']); - - // element is directly after class open brace - if ($nonWhiteAbove === $class['open']) { - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], 1); - - return; - } - - // deal with comments above an element - if ($tokens[$nonWhiteAbove]->isGivenKind(T_COMMENT)) { - // check if the comment belongs to the previous element - if ($elementAboveEnd === $nonWhiteAbove) { - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], $this->determineRequiredLineCount($tokens, $class, $elementIndex)); - - return; - } - - // more than one line break, always bring it back to 2 line breaks between the element start and what is above it - if ($tokens[$nonWhiteAbove + 1]->isWhitespace() && substr_count($tokens[$nonWhiteAbove + 1]->getContent(), "\n") > 1) { - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], 2); - - return; - } - - // there are 2 cases: - if ( - 1 === $element['start'] - $nonWhiteAbove - || $tokens[$nonWhiteAbove - 1]->isWhitespace() && substr_count($tokens[$nonWhiteAbove - 1]->getContent(), "\n") > 0 - || $tokens[$nonWhiteAbove + 1]->isWhitespace() && substr_count($tokens[$nonWhiteAbove + 1]->getContent(), "\n") > 0 - ) { - // 1. The comment is meant for the element (although not a PHPDoc), - // make sure there is one line break between the element and the comment... - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], 1); - // ... and make sure there is blank line above the comment (with the exception when it is directly after a class opening) - $nonWhiteAbove = $this->findCommentBlockStart($tokens, $nonWhiteAbove, $elementAboveEnd); - $nonWhiteAboveComment = $tokens->getPrevNonWhitespace($nonWhiteAbove); - - $this->correctLineBreaks($tokens, $nonWhiteAboveComment, $nonWhiteAbove, $nonWhiteAboveComment === $class['open'] ? 1 : 2); - } else { - // 2. The comment belongs to the code above the element, - // make sure there is a blank line above the element (i.e. 2 line breaks) - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], 2); - } - - return; - } - - // deal with element with a PHPDoc/attribute above it - if ($tokens[$nonWhiteAbove]->isGivenKind([T_DOC_COMMENT, CT::T_ATTRIBUTE_CLOSE])) { - // there should be one linebreak between the element and the attribute above it - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], 1); - - // make sure there is blank line above the comment (with the exception when it is directly after a class opening) - $nonWhiteAbove = $this->findCommentBlockStart($tokens, $nonWhiteAbove, $elementAboveEnd); - $nonWhiteAboveComment = $tokens->getPrevNonWhitespace($nonWhiteAbove); - - $this->correctLineBreaks($tokens, $nonWhiteAboveComment, $nonWhiteAbove, $nonWhiteAboveComment === $class['open'] ? 1 : 2); - - return; - } - - $this->correctLineBreaks($tokens, $nonWhiteAbove, $element['start'], $this->determineRequiredLineCount($tokens, $class, $elementIndex)); - } - - private function determineRequiredLineCount(Tokens $tokens, array $class, int $elementIndex): int - { - $type = $class['elements'][$elementIndex]['type']; - $spacing = $this->classElementTypes[$type]; - - if (self::SPACING_ONE === $spacing) { - return 2; - } - - if (self::SPACING_NONE === $spacing) { - if (!isset($class['elements'][$elementIndex + 1])) { - return 1; - } - - $aboveElement = $class['elements'][$elementIndex + 1]; - - if ($aboveElement['type'] !== $type) { - return 2; - } - - $aboveElementDocCandidateIndex = $tokens->getPrevNonWhitespace($aboveElement['start']); - - return $tokens[$aboveElementDocCandidateIndex]->isGivenKind([T_DOC_COMMENT, CT::T_ATTRIBUTE_CLOSE]) ? 2 : 1; - } - - if (self::SPACING_ONLY_IF_META === $spacing) { - $aboveElementDocCandidateIndex = $tokens->getPrevNonWhitespace($class['elements'][$elementIndex]['start']); - - return $tokens[$aboveElementDocCandidateIndex]->isGivenKind([T_DOC_COMMENT, CT::T_ATTRIBUTE_CLOSE]) ? 2 : 1; - } - - throw new \RuntimeException(sprintf('Unknown spacing "%s".', $spacing)); - } - - private function fixSpaceBelowClassElement(Tokens $tokens, array $class): void - { - $element = $class['elements'][0]; - - // if this is last element fix; fix to the class end `}` here if appropriate - if ($class['close'] === $tokens->getNextNonWhitespace($element['end'])) { - $this->correctLineBreaks($tokens, $element['end'], $class['close'], 1); - } - } - - private function correctLineBreaks(Tokens $tokens, int $startIndex, int $endIndex, int $reqLineCount): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - ++$startIndex; - $numbOfWhiteTokens = $endIndex - $startIndex; - - if (0 === $numbOfWhiteTokens) { - $tokens->insertAt($startIndex, new Token([T_WHITESPACE, str_repeat($lineEnding, $reqLineCount)])); - - return; - } - - $lineBreakCount = $this->getLineBreakCount($tokens, $startIndex, $endIndex); - - if ($reqLineCount === $lineBreakCount) { - return; - } - - if ($lineBreakCount < $reqLineCount) { - $tokens[$startIndex] = new Token([ - T_WHITESPACE, - str_repeat($lineEnding, $reqLineCount - $lineBreakCount).$tokens[$startIndex]->getContent(), - ]); - - return; - } - - // $lineCount = > $reqLineCount : check the one Token case first since this one will be true most of the time - if (1 === $numbOfWhiteTokens) { - $tokens[$startIndex] = new Token([ - T_WHITESPACE, - Preg::replace('/\r\n|\n/', '', $tokens[$startIndex]->getContent(), $lineBreakCount - $reqLineCount), - ]); - - return; - } - - // $numbOfWhiteTokens = > 1 - $toReplaceCount = $lineBreakCount - $reqLineCount; - - for ($i = $startIndex; $i < $endIndex && $toReplaceCount > 0; ++$i) { - $tokenLineCount = substr_count($tokens[$i]->getContent(), "\n"); - - if ($tokenLineCount > 0) { - $tokens[$i] = new Token([ - T_WHITESPACE, - Preg::replace('/\r\n|\n/', '', $tokens[$i]->getContent(), min($toReplaceCount, $tokenLineCount)), - ]); - $toReplaceCount -= $tokenLineCount; - } - } - } - - private function getLineBreakCount(Tokens $tokens, int $startIndex, int $endIndex): int - { - $lineCount = 0; - - for ($i = $startIndex; $i < $endIndex; ++$i) { - $lineCount += substr_count($tokens[$i]->getContent(), "\n"); - } - - return $lineCount; - } - - private function findCommentBlockStart(Tokens $tokens, int $start, int $elementAboveEnd): int - { - for ($i = $start; $i > $elementAboveEnd; --$i) { - if ($tokens[$i]->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - $start = $i = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ATTRIBUTE, $i); - - continue; - } - - if ($tokens[$i]->isComment()) { - $start = $i; - - continue; - } - - if (!$tokens[$i]->isWhitespace() || $this->getLineBreakCount($tokens, $i, $i + 1) > 1) { - break; - } - } - - return $start; - } - - private function getElementsByClass(Tokens $tokens): \Generator - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $class = $classIndex = false; - $elements = $tokensAnalyzer->getClassyElements(); - - for (end($elements);; prev($elements)) { - $index = key($elements); - - if (null === $index) { - break; - } - - $element = current($elements); - $element['index'] = $index; - - if ($element['classIndex'] !== $classIndex) { - if (false !== $class) { - yield $class; - } - - $classIndex = $element['classIndex']; - $classOpen = $tokens->getNextTokenOfKind($classIndex, ['{']); - $classEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classOpen); - $class = [ - 'index' => $classIndex, - 'open' => $classOpen, - 'close' => $classEnd, - 'elements' => [], - ]; - } - - unset($element['classIndex']); - $element['start'] = $this->getFirstTokenIndexOfClassElement($tokens, $class, $element); - $element['end'] = $this->getLastTokenIndexOfClassElement($tokens, $class, $element, $tokensAnalyzer); - - $class['elements'][] = $element; // reset the key by design - } - - if (false !== $class) { - yield $class; - } - } - - private function getFirstTokenIndexOfClassElement(Tokens $tokens, array $class, array $element): int - { - $modifierTypes = [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_ABSTRACT, T_FINAL, T_STATIC, T_STRING, T_NS_SEPARATOR, T_VAR, CT::T_NULLABLE_TYPE, CT::T_ARRAY_TYPEHINT, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $modifierTypes[] = T_READONLY; - } - - $firstElementAttributeIndex = $element['index']; - - do { - $nonWhiteAbove = $tokens->getPrevMeaningfulToken($firstElementAttributeIndex); - - if (null !== $nonWhiteAbove && $tokens[$nonWhiteAbove]->isGivenKind($modifierTypes)) { - $firstElementAttributeIndex = $nonWhiteAbove; - } else { - break; - } - } while ($firstElementAttributeIndex > $class['open']); - - return $firstElementAttributeIndex; - } - - // including trailing single line comments if belonging to the class element - private function getLastTokenIndexOfClassElement(Tokens $tokens, array $class, array $element, TokensAnalyzer $tokensAnalyzer): int - { - // find last token of the element - if ('method' === $element['type'] && !$tokens[$class['index']]->isGivenKind(T_INTERFACE)) { - $attributes = $tokensAnalyzer->getMethodAttributes($element['index']); - - if (true === $attributes['abstract']) { - $elementEndIndex = $tokens->getNextTokenOfKind($element['index'], [';']); - } else { - $elementEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $tokens->getNextTokenOfKind($element['index'], ['{'])); - } - } elseif ('trait_import' === $element['type']) { - $elementEndIndex = $element['index']; - - do { - $elementEndIndex = $tokens->getNextMeaningfulToken($elementEndIndex); - } while ($tokens[$elementEndIndex]->isGivenKind([T_STRING, T_NS_SEPARATOR]) || $tokens[$elementEndIndex]->equals(',')); - - if (!$tokens[$elementEndIndex]->equals(';')) { - $elementEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $tokens->getNextTokenOfKind($element['index'], ['{'])); - } - } else { // 'const', 'property', enum-'case', or 'method' of an interface - $elementEndIndex = $tokens->getNextTokenOfKind($element['index'], [';']); - } - - $singleLineElement = true; - - for ($i = $element['index'] + 1; $i < $elementEndIndex; ++$i) { - if (str_contains($tokens[$i]->getContent(), "\n")) { - $singleLineElement = false; - - break; - } - } - - if ($singleLineElement) { - while (true) { - $nextToken = $tokens[$elementEndIndex + 1]; - - if (($nextToken->isComment() || $nextToken->isWhitespace()) && !str_contains($nextToken->getContent(), "\n")) { - ++$elementEndIndex; - } else { - break; - } - } - - if ($tokens[$elementEndIndex]->isWhitespace()) { - $elementEndIndex = $tokens->getPrevNonWhitespace($elementEndIndex); - } - } - - return $elementEndIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php deleted file mode 100644 index 45fcb6bc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassDefinitionFixer.php +++ /dev/null @@ -1,460 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * Fixer for part of the rules defined in PSR2 ¶4.1 Extends and Implements and PSR12 ¶8. Anonymous Classes. - */ -final class ClassDefinitionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Whitespace around the keywords of a class, trait, enum or interfaces definition should be one space.', - [ - new CodeSample( - ' true] - ), - new CodeSample( - ' true] - ), - new CodeSample( - ' true] - ), - new CodeSample( - ' true] - ), - new CodeSample( - " true] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer. - * Must run after NewWithBracesFixer. - */ - public function getPriority(): int - { - return 36; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // -4, one for count to index, 3 because min. of tokens for a classy location. - for ($index = $tokens->getSize() - 4; $index > 0; --$index) { - if ($tokens[$index]->isClassy()) { - $this->fixClassyDefinition($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('multi_line_extends_each_single_line', 'Whether definitions should be multiline.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('single_item_single_line', 'Whether definitions should be single line when including a single item.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('single_line', 'Whether definitions should be single line.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('space_before_parenthesis', 'Whether there should be a single space after the parenthesis of anonymous class (PSR12) or not.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('inline_constructor_arguments', 'Whether constructor argument list in anonymous classes should be single line.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * @param int $classyIndex Class definition token start index - */ - private function fixClassyDefinition(Tokens $tokens, int $classyIndex): void - { - $classDefInfo = $this->getClassyDefinitionInfo($tokens, $classyIndex); - - // PSR2 4.1 Lists of implements MAY be split across multiple lines, where each subsequent line is indented once. - // When doing so, the first item in the list MUST be on the next line, and there MUST be only one interface per line. - - if (false !== $classDefInfo['implements']) { - $classDefInfo['implements'] = $this->fixClassyDefinitionImplements( - $tokens, - $classDefInfo['open'], - $classDefInfo['implements'] - ); - } - - if (false !== $classDefInfo['extends']) { - $classDefInfo['extends'] = $this->fixClassyDefinitionExtends( - $tokens, - false === $classDefInfo['implements'] ? $classDefInfo['open'] : $classDefInfo['implements']['start'], - $classDefInfo['extends'] - ); - } - - // PSR2: class definition open curly brace must go on a new line. - // PSR12: anonymous class curly brace on same line if not multi line implements. - - $classDefInfo['open'] = $this->fixClassyDefinitionOpenSpacing($tokens, $classDefInfo); - - if ($classDefInfo['implements']) { - $end = $classDefInfo['implements']['start']; - } elseif ($classDefInfo['extends']) { - $end = $classDefInfo['extends']['start']; - } else { - $end = $tokens->getPrevNonWhitespace($classDefInfo['open']); - } - - if ($classDefInfo['anonymousClass'] && !$this->configuration['inline_constructor_arguments']) { - if (!$tokens[$end]->equals(')')) { // anonymous class with `extends` and/or `implements` - $start = $tokens->getPrevMeaningfulToken($end); - $this->makeClassyDefinitionSingleLine($tokens, $start, $end); - $end = $start; - } - - if ($tokens[$end]->equals(')')) { // skip constructor arguments of anonymous class - $end = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $end); - } - } - - // 4.1 The extends and implements keywords MUST be declared on the same line as the class name. - $this->makeClassyDefinitionSingleLine($tokens, $classDefInfo['start'], $end); - } - - private function fixClassyDefinitionExtends(Tokens $tokens, int $classOpenIndex, array $classExtendsInfo): array - { - $endIndex = $tokens->getPrevNonWhitespace($classOpenIndex); - - if (true === $this->configuration['single_line'] || false === $classExtendsInfo['multiLine']) { - $this->makeClassyDefinitionSingleLine($tokens, $classExtendsInfo['start'], $endIndex); - $classExtendsInfo['multiLine'] = false; - } elseif (true === $this->configuration['single_item_single_line'] && 1 === $classExtendsInfo['numberOfExtends']) { - $this->makeClassyDefinitionSingleLine($tokens, $classExtendsInfo['start'], $endIndex); - $classExtendsInfo['multiLine'] = false; - } elseif (true === $this->configuration['multi_line_extends_each_single_line'] && $classExtendsInfo['multiLine']) { - $this->makeClassyInheritancePartMultiLine($tokens, $classExtendsInfo['start'], $endIndex); - $classExtendsInfo['multiLine'] = true; - } - - return $classExtendsInfo; - } - - private function fixClassyDefinitionImplements(Tokens $tokens, int $classOpenIndex, array $classImplementsInfo): array - { - $endIndex = $tokens->getPrevNonWhitespace($classOpenIndex); - - if (true === $this->configuration['single_line'] || false === $classImplementsInfo['multiLine']) { - $this->makeClassyDefinitionSingleLine($tokens, $classImplementsInfo['start'], $endIndex); - $classImplementsInfo['multiLine'] = false; - } elseif (true === $this->configuration['single_item_single_line'] && 1 === $classImplementsInfo['numberOfImplements']) { - $this->makeClassyDefinitionSingleLine($tokens, $classImplementsInfo['start'], $endIndex); - $classImplementsInfo['multiLine'] = false; - } else { - $this->makeClassyInheritancePartMultiLine($tokens, $classImplementsInfo['start'], $endIndex); - $classImplementsInfo['multiLine'] = true; - } - - return $classImplementsInfo; - } - - private function fixClassyDefinitionOpenSpacing(Tokens $tokens, array $classDefInfo): int - { - if ($classDefInfo['anonymousClass']) { - if (false !== $classDefInfo['implements']) { - $spacing = $classDefInfo['implements']['multiLine'] ? $this->whitespacesConfig->getLineEnding() : ' '; - } elseif (false !== $classDefInfo['extends']) { - $spacing = $classDefInfo['extends']['multiLine'] ? $this->whitespacesConfig->getLineEnding() : ' '; - } else { - $spacing = ' '; - } - } else { - $spacing = $this->whitespacesConfig->getLineEnding(); - } - - $openIndex = $tokens->getNextTokenOfKind($classDefInfo['classy'], ['{']); - - if (' ' !== $spacing && str_contains($tokens[$openIndex - 1]->getContent(), "\n")) { - return $openIndex; - } - - if ($tokens[$openIndex - 1]->isWhitespace()) { - if (' ' !== $spacing || !$tokens[$tokens->getPrevNonWhitespace($openIndex - 1)]->isComment()) { - $tokens[$openIndex - 1] = new Token([T_WHITESPACE, $spacing]); - } - - return $openIndex; - } - - $tokens->insertAt($openIndex, new Token([T_WHITESPACE, $spacing])); - - return $openIndex + 1; - } - - /** - * @return array{ - * start: int, - * classy: int, - * open: int, - * extends: false|array{start: int, numberOfExtends: int, multiLine: bool}, - * implements: false|array{start: int, numberOfImplements: int, multiLine: bool}, - * anonymousClass: bool, - * } - */ - private function getClassyDefinitionInfo(Tokens $tokens, int $classyIndex): array - { - $openIndex = $tokens->getNextTokenOfKind($classyIndex, ['{']); - $extends = false; - $implements = false; - $anonymousClass = false; - - if (!$tokens[$classyIndex]->isGivenKind(T_TRAIT)) { - $extends = $tokens->findGivenKind(T_EXTENDS, $classyIndex, $openIndex); - $extends = \count($extends) ? $this->getClassyInheritanceInfo($tokens, key($extends), 'numberOfExtends') : false; - - if (!$tokens[$classyIndex]->isGivenKind(T_INTERFACE)) { - $implements = $tokens->findGivenKind(T_IMPLEMENTS, $classyIndex, $openIndex); - $implements = \count($implements) ? $this->getClassyInheritanceInfo($tokens, key($implements), 'numberOfImplements') : false; - $tokensAnalyzer = new TokensAnalyzer($tokens); - $anonymousClass = $tokensAnalyzer->isAnonymousClass($classyIndex); - } - } - - if ($anonymousClass) { - $startIndex = $tokens->getPrevMeaningfulToken($classyIndex); // go to "new" for anonymous class - } else { - $prev = $tokens->getPrevMeaningfulToken($classyIndex); - $startIndex = $tokens[$prev]->isGivenKind([T_FINAL, T_ABSTRACT]) ? $prev : $classyIndex; - } - - return [ - 'start' => $startIndex, - 'classy' => $classyIndex, - 'open' => $openIndex, - 'extends' => $extends, - 'implements' => $implements, - 'anonymousClass' => $anonymousClass, - ]; - } - - private function getClassyInheritanceInfo(Tokens $tokens, int $startIndex, string $label): array - { - $implementsInfo = ['start' => $startIndex, $label => 1, 'multiLine' => false]; - ++$startIndex; - $endIndex = $tokens->getNextTokenOfKind($startIndex, ['{', [T_IMPLEMENTS], [T_EXTENDS]]); - $endIndex = $tokens[$endIndex]->equals('{') ? $tokens->getPrevNonWhitespace($endIndex) : $endIndex; - - for ($i = $startIndex; $i < $endIndex; ++$i) { - if ($tokens[$i]->equals(',')) { - ++$implementsInfo[$label]; - - continue; - } - - if (!$implementsInfo['multiLine'] && str_contains($tokens[$i]->getContent(), "\n")) { - $implementsInfo['multiLine'] = true; - } - } - - return $implementsInfo; - } - - private function makeClassyDefinitionSingleLine(Tokens $tokens, int $startIndex, int $endIndex): void - { - for ($i = $endIndex; $i >= $startIndex; --$i) { - if ($tokens[$i]->isWhitespace()) { - if ($tokens[$i - 1]->isComment() || $tokens[$i + 1]->isComment()) { - $content = $tokens[$i - 1]->getContent(); - - if (!('#' === $content || str_starts_with($content, '//'))) { - $content = $tokens[$i + 1]->getContent(); - - if (!('#' === $content || str_starts_with($content, '//'))) { - $tokens[$i] = new Token([T_WHITESPACE, ' ']); - } - } - - continue; - } - - if ($tokens[$i - 1]->isGivenKind(T_CLASS) && $tokens[$i + 1]->equals('(')) { - if (true === $this->configuration['space_before_parenthesis']) { - $tokens[$i] = new Token([T_WHITESPACE, ' ']); - } else { - $tokens->clearAt($i); - } - - continue; - } - - if (!$tokens[$i - 1]->equals(',') && $tokens[$i + 1]->equalsAny([',', ')']) || $tokens[$i - 1]->equals('(')) { - $tokens->clearAt($i); - - continue; - } - - $tokens[$i] = new Token([T_WHITESPACE, ' ']); - - continue; - } - - if ($tokens[$i]->equals(',') && !$tokens[$i + 1]->isWhitespace()) { - $tokens->insertAt($i + 1, new Token([T_WHITESPACE, ' '])); - - continue; - } - - if (true === $this->configuration['space_before_parenthesis'] && $tokens[$i]->isGivenKind(T_CLASS) && !$tokens[$i + 1]->isWhitespace()) { - $tokens->insertAt($i + 1, new Token([T_WHITESPACE, ' '])); - - continue; - } - - if (!$tokens[$i]->isComment()) { - continue; - } - - if (!$tokens[$i + 1]->isWhitespace() && !$tokens[$i + 1]->isComment() && !str_contains($tokens[$i]->getContent(), "\n")) { - $tokens->insertAt($i + 1, new Token([T_WHITESPACE, ' '])); - } - - if (!$tokens[$i - 1]->isWhitespace() && !$tokens[$i - 1]->isComment()) { - $tokens->insertAt($i, new Token([T_WHITESPACE, ' '])); - } - } - } - - private function makeClassyInheritancePartMultiLine(Tokens $tokens, int $startIndex, int $endIndex): void - { - for ($i = $endIndex; $i > $startIndex; --$i) { - $previousInterfaceImplementingIndex = $tokens->getPrevTokenOfKind($i, [',', [T_IMPLEMENTS], [T_EXTENDS]]); - $breakAtIndex = $tokens->getNextMeaningfulToken($previousInterfaceImplementingIndex); - - // make the part of a ',' or 'implements' single line - $this->makeClassyDefinitionSingleLine( - $tokens, - $breakAtIndex, - $i - ); - - // make sure the part is on its own line - $isOnOwnLine = false; - - for ($j = $breakAtIndex; $j > $previousInterfaceImplementingIndex; --$j) { - if (str_contains($tokens[$j]->getContent(), "\n")) { - $isOnOwnLine = true; - - break; - } - } - - if (!$isOnOwnLine) { - if ($tokens[$breakAtIndex - 1]->isWhitespace()) { - $tokens[$breakAtIndex - 1] = new Token([ - T_WHITESPACE, - $this->whitespacesConfig->getLineEnding().$this->whitespacesConfig->getIndent(), - ]); - } else { - $tokens->insertAt($breakAtIndex, new Token([T_WHITESPACE, $this->whitespacesConfig->getLineEnding().$this->whitespacesConfig->getIndent()])); - } - } - - $i = $previousInterfaceImplementingIndex + 1; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php deleted file mode 100644 index 5372ca76..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalClassFixer.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @author Filippo Tessarotto - */ -final class FinalClassFixer extends AbstractProxyFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'All classes must be final, except abstract ones and Doctrine entities.', - [ - new CodeSample( - 'configure([ - 'annotation_include' => [], - 'consider_absent_docblock_as_internal_class' => true, - ]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php deleted file mode 100644 index 8dfc65e5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalInternalClassFixer.php +++ /dev/null @@ -1,223 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Options; - -/** - * @author Dariusz Rumiński - */ -final class FinalInternalClassFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $intersect = array_intersect_assoc( - $this->configuration['annotation_include'], - $this->configuration['annotation_exclude'] - ); - - if (\count($intersect) > 0) { - throw new InvalidFixerConfigurationException($this->getName(), sprintf('Annotation cannot be used in both the include and exclude list, got duplicates: "%s".', implode('", "', array_keys($intersect)))); - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Internal classes should be `final`.', - [ - new CodeSample(" ['@Custom'], - 'annotation_exclude' => ['@not-fix'], - ] - ), - ], - null, - 'Changing classes to `final` might cause code execution to break.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before ProtectedToPrivateFixer, SelfStaticAccessorFixer. - * Must run after PhpUnitInternalClassFixer. - */ - public function getPriority(): int - { - return 67; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_CLASS); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - if (!$tokens[$index]->isGivenKind(T_CLASS) || $tokensAnalyzer->isAnonymousClass($index) || !$this->isClassCandidate($tokens, $index)) { - continue; - } - - // make class final - $tokens->insertAt( - $index, - [ - new Token([T_FINAL, 'final']), - new Token([T_WHITESPACE, ' ']), - ] - ); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $annotationsAsserts = [static function (array $values): bool { - foreach ($values as $value) { - if (!\is_string($value) || '' === $value) { - return false; - } - } - - return true; - }]; - - $annotationsNormalizer = static function (Options $options, array $value): array { - $newValue = []; - foreach ($value as $key) { - if ('@' === $key[0]) { - $key = substr($key, 1); - } - - $newValue[strtolower($key)] = true; - } - - return $newValue; - }; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('annotation_include', 'Class level annotations tags that must be set in order to fix the class. (case insensitive)')) - ->setAllowedTypes(['array']) - ->setAllowedValues($annotationsAsserts) - ->setDefault(['@internal']) - ->setNormalizer($annotationsNormalizer) - ->getOption(), - (new FixerOptionBuilder('annotation_exclude', 'Class level annotations tags that must be omitted to fix the class, even if all of the white list ones are used as well. (case insensitive)')) - ->setAllowedTypes(['array']) - ->setAllowedValues($annotationsAsserts) - ->setDefault([ - '@final', - '@Entity', - '@ORM\Entity', - '@ORM\Mapping\Entity', - '@Mapping\Entity', - '@Document', - '@ODM\Document', - ]) - ->setNormalizer($annotationsNormalizer) - ->getOption(), - (new FixerOptionBuilder('consider_absent_docblock_as_internal_class', 'Should classes without any DocBlock be fixed to final?')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * @param int $index T_CLASS index - */ - private function isClassCandidate(Tokens $tokens, int $index): bool - { - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind([T_ABSTRACT, T_FINAL])) { - return false; // ignore class; it is abstract or already final - } - - $docToken = $tokens[$tokens->getPrevNonWhitespace($index)]; - - if (!$docToken->isGivenKind(T_DOC_COMMENT)) { - return $this->configuration['consider_absent_docblock_as_internal_class']; - } - - $doc = new DocBlock($docToken->getContent()); - $tags = []; - - foreach ($doc->getAnnotations() as $annotation) { - if (1 !== Preg::match('/@\S+(?=\s|$)/', $annotation->getContent(), $matches)) { - continue; - } - $tag = strtolower(substr(array_shift($matches), 1)); - foreach ($this->configuration['annotation_exclude'] as $tagStart => $true) { - if (str_starts_with($tag, $tagStart)) { - return false; // ignore class: class-level PHPDoc contains tag that has been excluded through configuration - } - } - - $tags[$tag] = true; - } - - foreach ($this->configuration['annotation_include'] as $tag => $true) { - if (!isset($tags[$tag])) { - return false; // ignore class: class-level PHPDoc does not contain all tags that has been included through configuration - } - } - - return true; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php deleted file mode 100644 index 05dc97bb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/FinalPublicMethodForAbstractClassFixer.php +++ /dev/null @@ -1,172 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class FinalPublicMethodForAbstractClassFixer extends AbstractFixer -{ - /** - * @var array - */ - private array $magicMethods = [ - '__construct' => true, - '__destruct' => true, - '__call' => true, - '__callstatic' => true, - '__get' => true, - '__set' => true, - '__isset' => true, - '__unset' => true, - '__sleep' => true, - '__wakeup' => true, - '__tostring' => true, - '__invoke' => true, - '__set_state' => true, - '__clone' => true, - '__debuginfo' => true, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'All `public` methods of `abstract` classes should be `final`.', - [ - new CodeSample( - 'isAllTokenKindsFound([T_CLASS, T_ABSTRACT, T_PUBLIC, T_FUNCTION]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $classes = array_keys($tokens->findGivenKind(T_CLASS)); - - while ($classIndex = array_pop($classes)) { - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classIndex)]; - if (!$prevToken->isGivenKind(T_ABSTRACT)) { - continue; - } - - $classOpen = $tokens->getNextTokenOfKind($classIndex, ['{']); - $classClose = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classOpen); - - $this->fixClass($tokens, $classOpen, $classClose); - } - } - - private function fixClass(Tokens $tokens, int $classOpenIndex, int $classCloseIndex): void - { - for ($index = $classCloseIndex - 1; $index > $classOpenIndex; --$index) { - // skip method contents - if ($tokens[$index]->equals('}')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - // skip non public methods - if (!$tokens[$index]->isGivenKind(T_PUBLIC)) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$nextIndex]; - - if ($nextToken->isGivenKind(T_STATIC)) { - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - $nextToken = $tokens[$nextIndex]; - } - - // skip uses, attributes, constants etc - if (!$nextToken->isGivenKind(T_FUNCTION)) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - $nextToken = $tokens[$nextIndex]; - - // skip magic methods - if (isset($this->magicMethods[strtolower($nextToken->getContent())])) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - - if ($prevToken->isGivenKind(T_STATIC)) { - $index = $prevIndex; - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - } - - // skip abstract or already final methods - if ($prevToken->isGivenKind([T_ABSTRACT, T_FINAL])) { - $index = $prevIndex; - - continue; - } - - $tokens->insertAt( - $index, - [ - new Token([T_FINAL, 'final']), - new Token([T_WHITESPACE, ' ']), - ] - ); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php deleted file mode 100644 index 868cfd64..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoBlankLinesAfterClassOpeningFixer.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Ceeram - */ -final class NoBlankLinesAfterClassOpeningFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should be no empty lines after class opening brace.', - [ - new CodeSample( - ' $token) { - if (!$token->isClassy()) { - continue; - } - - $startBraceIndex = $tokens->getNextTokenOfKind($index, ['{']); - if (!$tokens[$startBraceIndex + 1]->isWhitespace()) { - continue; - } - - $this->fixWhitespace($tokens, $startBraceIndex + 1); - } - } - - /** - * Cleanup a whitespace token. - */ - private function fixWhitespace(Tokens $tokens, int $index): void - { - $content = $tokens[$index]->getContent(); - // if there is more than one new line in the whitespace, then we need to fix it - if (substr_count($content, "\n") > 1) { - // the final bit of the whitespace must be the next statement's indentation - $tokens[$index] = new Token([T_WHITESPACE, $this->whitespacesConfig->getLineEnding().substr($content, strrpos($content, "\n") + 1)]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php deleted file mode 100644 index 76f71cff..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoNullPropertyInitializationFixer.php +++ /dev/null @@ -1,150 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author ntzm - */ -final class NoNullPropertyInitializationFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Properties MUST not be explicitly initialized with `null` except when they have a type declaration (PHP 7.4).', - [ - new CodeSample( - 'isAnyTokenKindsFound([T_CLASS, T_TRAIT]) && $tokens->isAnyTokenKindsFound([T_PUBLIC, T_PROTECTED, T_PRIVATE, T_VAR, T_STATIC]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $inClass = []; - $classLevel = 0; - - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - if ($tokens[$index]->isGivenKind([T_CLASS, T_TRAIT])) { // Enums and interfaces do not have properties - ++$classLevel; - $inClass[$classLevel] = 1; - - $index = $tokens->getNextTokenOfKind($index, ['{']); - - continue; - } - - if (0 === $classLevel) { - continue; - } - - if ($tokens[$index]->equals('{')) { - ++$inClass[$classLevel]; - - continue; - } - - if ($tokens[$index]->equals('}')) { - --$inClass[$classLevel]; - - if (0 === $inClass[$classLevel]) { - unset($inClass[$classLevel]); - --$classLevel; - } - - continue; - } - - // Ensure we are in a class but not in a method in case there are static variables defined - if (1 !== $inClass[$classLevel]) { - continue; - } - - if (!$tokens[$index]->isGivenKind([T_PUBLIC, T_PROTECTED, T_PRIVATE, T_VAR, T_STATIC])) { - continue; - } - - while (true) { - $varTokenIndex = $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(T_STATIC)) { - $varTokenIndex = $index = $tokens->getNextMeaningfulToken($index); - } - - if (!$tokens[$index]->isGivenKind(T_VARIABLE)) { - break; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->equals('=')) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(T_NS_SEPARATOR)) { - $index = $tokens->getNextMeaningfulToken($index); - } - - if ($tokens[$index]->equals([T_STRING, 'null'], false)) { - for ($i = $varTokenIndex + 1; $i <= $index; ++$i) { - if ( - !($tokens[$i]->isWhitespace() && str_contains($tokens[$i]->getContent(), "\n")) - && !$tokens[$i]->isComment() - ) { - $tokens->clearAt($i); - } - } - } - - ++$index; - } - - if (!$tokens[$index]->equals(',')) { - break; - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php deleted file mode 100644 index f74dd69e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoPhp4ConstructorFixer.php +++ /dev/null @@ -1,419 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Matteo Beccati - */ -final class NoPhp4ConstructorFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Convert PHP4-style constructors to `__construct`.', - [ - new CodeSample('isTokenKindFound(T_CLASS); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $classes = array_keys($tokens->findGivenKind(T_CLASS)); - $numClasses = \count($classes); - - for ($i = 0; $i < $numClasses; ++$i) { - $index = $classes[$i]; - - // is it an anonymous class definition? - if ($tokensAnalyzer->isAnonymousClass($index)) { - continue; - } - - // is it inside a namespace? - $nspIndex = $tokens->getPrevTokenOfKind($index, [[T_NAMESPACE, 'namespace']]); - - if (null !== $nspIndex) { - $nspIndex = $tokens->getNextMeaningfulToken($nspIndex); - - // make sure it's not the global namespace, as PHP4 constructors are allowed in there - if (!$tokens[$nspIndex]->equals('{')) { - // unless it's the global namespace, the index currently points to the name - $nspIndex = $tokens->getNextTokenOfKind($nspIndex, [';', '{']); - - if ($tokens[$nspIndex]->equals(';')) { - // the class is inside a (non-block) namespace, no PHP4-code should be in there - break; - } - - // the index points to the { of a block-namespace - $nspEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $nspIndex); - - if ($index < $nspEnd) { - // the class is inside a block namespace, skip other classes that might be in it - for ($j = $i + 1; $j < $numClasses; ++$j) { - if ($classes[$j] < $nspEnd) { - ++$i; - } - } - // and continue checking the classes that might follow - continue; - } - } - } - - $classNameIndex = $tokens->getNextMeaningfulToken($index); - $className = $tokens[$classNameIndex]->getContent(); - $classStart = $tokens->getNextTokenOfKind($classNameIndex, ['{']); - $classEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classStart); - - $this->fixConstructor($tokens, $className, $classStart, $classEnd); - $this->fixParent($tokens, $classStart, $classEnd); - } - } - - /** - * Fix constructor within a class, if possible. - * - * @param Tokens $tokens the Tokens instance - * @param string $className the class name - * @param int $classStart the class start index - * @param int $classEnd the class end index - */ - private function fixConstructor(Tokens $tokens, string $className, int $classStart, int $classEnd): void - { - $php4 = $this->findFunction($tokens, $className, $classStart, $classEnd); - - if (null === $php4) { - return; // no PHP4-constructor! - } - - if (!empty($php4['modifiers'][T_ABSTRACT]) || !empty($php4['modifiers'][T_STATIC])) { - return; // PHP4 constructor can't be abstract or static - } - - $php5 = $this->findFunction($tokens, '__construct', $classStart, $classEnd); - - if (null === $php5) { - // no PHP5-constructor, we can rename the old one to __construct - $tokens[$php4['nameIndex']] = new Token([T_STRING, '__construct']); - - // in some (rare) cases we might have just created an infinite recursion issue - $this->fixInfiniteRecursion($tokens, $php4['bodyIndex'], $php4['endIndex']); - - return; - } - - // does the PHP4-constructor only call $this->__construct($args, ...)? - [$sequences, $case] = $this->getWrapperMethodSequence($tokens, '__construct', $php4['startIndex'], $php4['bodyIndex']); - - foreach ($sequences as $seq) { - if (null !== $tokens->findSequence($seq, $php4['bodyIndex'] - 1, $php4['endIndex'], $case)) { - // good, delete it! - for ($i = $php4['startIndex']; $i <= $php4['endIndex']; ++$i) { - $tokens->clearAt($i); - } - - return; - } - } - - // does __construct only call the PHP4-constructor (with the same args)? - [$sequences, $case] = $this->getWrapperMethodSequence($tokens, $className, $php4['startIndex'], $php4['bodyIndex']); - - foreach ($sequences as $seq) { - if (null !== $tokens->findSequence($seq, $php5['bodyIndex'] - 1, $php5['endIndex'], $case)) { - // that was a weird choice, but we can safely delete it and... - for ($i = $php5['startIndex']; $i <= $php5['endIndex']; ++$i) { - $tokens->clearAt($i); - } - - // rename the PHP4 one to __construct - $tokens[$php4['nameIndex']] = new Token([T_STRING, '__construct']); - - return; - } - } - } - - /** - * Fix calls to the parent constructor within a class. - * - * @param Tokens $tokens the Tokens instance - * @param int $classStart the class start index - * @param int $classEnd the class end index - */ - private function fixParent(Tokens $tokens, int $classStart, int $classEnd): void - { - // check calls to the parent constructor - foreach ($tokens->findGivenKind(T_EXTENDS) as $index => $token) { - $parentIndex = $tokens->getNextMeaningfulToken($index); - $parentClass = $tokens[$parentIndex]->getContent(); - - // using parent::ParentClassName() or ParentClassName::ParentClassName() - $parentSeq = $tokens->findSequence([ - [T_STRING], - [T_DOUBLE_COLON], - [T_STRING, $parentClass], - '(', - ], $classStart, $classEnd, [2 => false]); - - if (null !== $parentSeq) { - // we only need indices - $parentSeq = array_keys($parentSeq); - - // match either of the possibilities - if ($tokens[$parentSeq[0]]->equalsAny([[T_STRING, 'parent'], [T_STRING, $parentClass]], false)) { - // replace with parent::__construct - $tokens[$parentSeq[0]] = new Token([T_STRING, 'parent']); - $tokens[$parentSeq[2]] = new Token([T_STRING, '__construct']); - } - } - - foreach (Token::getObjectOperatorKinds() as $objectOperatorKind) { - // using $this->ParentClassName() - $parentSeq = $tokens->findSequence([ - [T_VARIABLE, '$this'], - [$objectOperatorKind], - [T_STRING, $parentClass], - '(', - ], $classStart, $classEnd, [2 => false]); - - if (null !== $parentSeq) { - // we only need indices - $parentSeq = array_keys($parentSeq); - - // replace call with parent::__construct() - $tokens[$parentSeq[0]] = new Token([ - T_STRING, - 'parent', - ]); - $tokens[$parentSeq[1]] = new Token([ - T_DOUBLE_COLON, - '::', - ]); - $tokens[$parentSeq[2]] = new Token([T_STRING, '__construct']); - } - } - } - } - - /** - * Fix a particular infinite recursion issue happening when the parent class has __construct and the child has only - * a PHP4 constructor that calls the parent constructor as $this->__construct(). - * - * @param Tokens $tokens the Tokens instance - * @param int $start the PHP4 constructor body start - * @param int $end the PHP4 constructor body end - */ - private function fixInfiniteRecursion(Tokens $tokens, int $start, int $end): void - { - foreach (Token::getObjectOperatorKinds() as $objectOperatorKind) { - $seq = [ - [T_VARIABLE, '$this'], - [$objectOperatorKind], - [T_STRING, '__construct'], - ]; - - while (true) { - $callSeq = $tokens->findSequence($seq, $start, $end, [2 => false]); - - if (null === $callSeq) { - return; - } - - $callSeq = array_keys($callSeq); - - $tokens[$callSeq[0]] = new Token([T_STRING, 'parent']); - $tokens[$callSeq[1]] = new Token([T_DOUBLE_COLON, '::']); - } - } - } - - /** - * Generate the sequence of tokens necessary for the body of a wrapper method that simply - * calls $this->{$method}( [args...] ) with the same arguments as its own signature. - * - * @param Tokens $tokens the Tokens instance - * @param string $method the wrapped method name - * @param int $startIndex function/method start index - * @param int $bodyIndex function/method body index - * - * @return array an array containing the sequence and case sensitiveness [ 0 => $seq, 1 => $case ] - */ - private function getWrapperMethodSequence(Tokens $tokens, string $method, int $startIndex, int $bodyIndex): array - { - $sequences = []; - - foreach (Token::getObjectOperatorKinds() as $objectOperatorKind) { - // initialise sequence as { $this->{$method}( - $seq = [ - '{', - [T_VARIABLE, '$this'], - [$objectOperatorKind], - [T_STRING, $method], - '(', - ]; - - // parse method parameters, if any - $index = $startIndex; - - while (true) { - // find the next variable name - $index = $tokens->getNextTokenOfKind($index, [[T_VARIABLE]]); - - if (null === $index || $index >= $bodyIndex) { - // we've reached the body already - break; - } - - // append a comma if it's not the first variable - if (\count($seq) > 5) { - $seq[] = ','; - } - - // append variable name to the sequence - $seq[] = [T_VARIABLE, $tokens[$index]->getContent()]; - } - - // almost done, close the sequence with ); } - $seq[] = ')'; - $seq[] = ';'; - $seq[] = '}'; - - $sequences[] = $seq; - } - - return [$sequences, [3 => false]]; - } - - /** - * Find a function or method matching a given name within certain bounds. - * - * Returns: - * - nameIndex (int): The index of the function/method name. - * - startIndex (int): The index of the function/method start. - * - endIndex (int): The index of the function/method end. - * - bodyIndex (int): The index of the function/method body. - * - modifiers (array): The modifiers as array keys and their index as the values, e.g. array(T_PUBLIC => 10) - * - * @param Tokens $tokens the Tokens instance - * @param string $name the function/Method name - * @param int $startIndex the search start index - * @param int $endIndex the search end index - * - * @return null|array{ - * nameIndex: int, - * startIndex: int, - * endIndex: int, - * bodyIndex: int, - * modifiers: list, - * } - */ - private function findFunction(Tokens $tokens, string $name, int $startIndex, int $endIndex): ?array - { - $function = $tokens->findSequence([ - [T_FUNCTION], - [T_STRING, $name], - '(', - ], $startIndex, $endIndex, false); - - if (null === $function) { - return null; - } - - // keep only the indices - $function = array_keys($function); - - // find previous block, saving method modifiers for later use - $possibleModifiers = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_STATIC, T_ABSTRACT, T_FINAL]; - $modifiers = []; - - $prevBlock = $tokens->getPrevMeaningfulToken($function[0]); - - while (null !== $prevBlock && $tokens[$prevBlock]->isGivenKind($possibleModifiers)) { - $modifiers[$tokens[$prevBlock]->getId()] = $prevBlock; - $prevBlock = $tokens->getPrevMeaningfulToken($prevBlock); - } - - if (isset($modifiers[T_ABSTRACT])) { - // abstract methods have no body - $bodyStart = null; - $funcEnd = $tokens->getNextTokenOfKind($function[2], [';']); - } else { - // find method body start and the end of the function definition - $bodyStart = $tokens->getNextTokenOfKind($function[2], ['{']); - $funcEnd = null !== $bodyStart ? $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $bodyStart) : null; - } - - return [ - 'nameIndex' => $function[1], - 'startIndex' => $prevBlock + 1, - 'endIndex' => $funcEnd, - 'bodyIndex' => $bodyStart, - 'modifiers' => $modifiers, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php deleted file mode 100644 index 9c366863..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/NoUnneededFinalMethodFixer.php +++ /dev/null @@ -1,210 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Filippo Tessarotto - */ -final class NoUnneededFinalMethodFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes `final` from methods where possible.', - [ - new CodeSample( - ' false] - ), - ], - null, - 'Risky when child class overrides a `private` method.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - if (!$tokens->isAllTokenKindsFound([T_FINAL, T_FUNCTION])) { - return false; - } - - if (\defined('T_ENUM') && $tokens->isTokenKindFound(T_ENUM)) { // @TODO: drop condition when PHP 8.1+ is required - return true; - } - - return $tokens->isTokenKindFound(T_CLASS); - } - - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($this->getMethods($tokens) as $element) { - $index = $element['method_final_index']; - - if ($element['method_of_enum'] || $element['class_is_final']) { - $this->clearFinal($tokens, $index); - - continue; - } - - if (!$element['method_is_private'] || false === $this->configuration['private_methods'] || $element['method_is_constructor']) { - continue; - } - - $this->clearFinal($tokens, $index); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('private_methods', 'Private methods of non-`final` classes must not be declared `final`.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function getMethods(Tokens $tokens): \Generator - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $modifierKinds = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_FINAL, T_ABSTRACT, T_STATIC]; - - $enums = []; - $classesAreFinal = []; - $elements = $tokensAnalyzer->getClassyElements(); - - for (end($elements);; prev($elements)) { - $index = key($elements); - - if (null === $index) { - break; - } - - $element = current($elements); - - if ('method' !== $element['type']) { - continue; // not a method - } - - $classIndex = $element['classIndex']; - - if (!\array_key_exists($classIndex, $enums)) { - $enums[$classIndex] = \defined('T_ENUM') && $tokens[$classIndex]->isGivenKind(T_ENUM); // @TODO: drop condition when PHP 8.1+ is required - } - - $element['method_final_index'] = null; - $element['method_is_private'] = false; - - $previous = $index; - - do { - $previous = $tokens->getPrevMeaningfulToken($previous); - - if ($tokens[$previous]->isGivenKind(T_PRIVATE)) { - $element['method_is_private'] = true; - } elseif ($tokens[$previous]->isGivenKind(T_FINAL)) { - $element['method_final_index'] = $previous; - } - } while ($tokens[$previous]->isGivenKind($modifierKinds)); - - if ($enums[$classIndex]) { - $element['method_of_enum'] = true; - - yield $element; - - continue; - } - - if (!\array_key_exists($classIndex, $classesAreFinal)) { - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classIndex)]; - $classesAreFinal[$classIndex] = $prevToken->isGivenKind(T_FINAL); - } - - $element['method_of_enum'] = false; - $element['class_is_final'] = $classesAreFinal[$classIndex]; - $element['method_is_constructor'] = '__construct' === strtolower($tokens[$tokens->getNextMeaningfulToken($index)]->getContent()); - - yield $element; - } - } - - private function clearFinal(Tokens $tokens, ?int $index): void - { - if (null === $index) { - return; - } - - $tokens->clearAt($index); - - ++$index; - - if ($tokens[$index]->isWhitespace()) { - $tokens->clearAt($index); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php deleted file mode 100644 index 298a0b7b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.php +++ /dev/null @@ -1,589 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class OrderedClassElementsFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** @internal */ - public const SORT_ALPHA = 'alpha'; - - /** @internal */ - public const SORT_NONE = 'none'; - - private const SUPPORTED_SORT_ALGORITHMS = [ - self::SORT_NONE, - self::SORT_ALPHA, - ]; - - /** - * @var array> Array containing all class element base types (keys) and their parent types (values) - */ - private static array $typeHierarchy = [ - 'use_trait' => null, - 'public' => null, - 'protected' => null, - 'private' => null, - 'case' => ['public'], - 'constant' => null, - 'constant_public' => ['constant', 'public'], - 'constant_protected' => ['constant', 'protected'], - 'constant_private' => ['constant', 'private'], - 'property' => null, - 'property_static' => ['property'], - 'property_public' => ['property', 'public'], - 'property_protected' => ['property', 'protected'], - 'property_private' => ['property', 'private'], - 'property_public_readonly' => ['property_readonly', 'property_public'], - 'property_protected_readonly' => ['property_readonly', 'property_protected'], - 'property_private_readonly' => ['property_readonly', 'property_private'], - 'property_public_static' => ['property_static', 'property_public'], - 'property_protected_static' => ['property_static', 'property_protected'], - 'property_private_static' => ['property_static', 'property_private'], - 'method' => null, - 'method_abstract' => ['method'], - 'method_static' => ['method'], - 'method_public' => ['method', 'public'], - 'method_protected' => ['method', 'protected'], - 'method_private' => ['method', 'private'], - 'method_public_abstract' => ['method_abstract', 'method_public'], - 'method_protected_abstract' => ['method_abstract', 'method_protected'], - 'method_private_abstract' => ['method_abstract', 'method_private'], - 'method_public_abstract_static' => ['method_abstract', 'method_static', 'method_public'], - 'method_protected_abstract_static' => ['method_abstract', 'method_static', 'method_protected'], - 'method_private_abstract_static' => ['method_abstract', 'method_static', 'method_private'], - 'method_public_static' => ['method_static', 'method_public'], - 'method_protected_static' => ['method_static', 'method_protected'], - 'method_private_static' => ['method_static', 'method_private'], - ]; - - /** - * @var array Array containing special method types - */ - private static array $specialTypes = [ - 'construct' => null, - 'destruct' => null, - 'magic' => null, - 'phpunit' => null, - ]; - - /** - * @var array Resolved configuration array (type => position) - */ - private array $typePosition; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->typePosition = []; - $pos = 0; - - foreach ($this->configuration['order'] as $type) { - $this->typePosition[$type] = $pos++; - } - - foreach (self::$typeHierarchy as $type => $parents) { - if (isset($this->typePosition[$type])) { - continue; - } - - if (!$parents) { - $this->typePosition[$type] = null; - - continue; - } - - foreach ($parents as $parent) { - if (isset($this->typePosition[$parent])) { - $this->typePosition[$type] = $this->typePosition[$parent]; - - continue 2; - } - } - - $this->typePosition[$type] = null; - } - - $lastPosition = \count($this->configuration['order']); - - foreach ($this->typePosition as &$pos) { - if (null === $pos) { - $pos = $lastPosition; - } - - $pos *= 10; // last digit is used by phpunit method ordering - } - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Orders the elements of classes/interfaces/traits/enums.', - [ - new CodeSample( - ' ['method_private', 'method_public']] - ), - new CodeSample( - ' ['method_public'], 'sort_algorithm' => self::SORT_ALPHA] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before ClassAttributesSeparationFixer, NoBlankLinesAfterClassOpeningFixer, SpaceAfterSemicolonFixer. - * Must run after NoPhp4ConstructorFixer, ProtectedToPrivateFixer. - */ - public function getPriority(): int - { - return 65; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($i = 1, $count = $tokens->count(); $i < $count; ++$i) { - if (!$tokens[$i]->isClassy()) { - continue; - } - - $i = $tokens->getNextTokenOfKind($i, ['{']); - $elements = $this->getElements($tokens, $i); - - if (0 === \count($elements)) { - continue; - } - - $sorted = $this->sortElements($elements); - $endIndex = $elements[\count($elements) - 1]['end']; - - if ($sorted !== $elements) { - $this->sortTokens($tokens, $i, $endIndex, $sorted); - } - - $i = $endIndex; - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('order', 'List of strings defining order of elements.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(array_keys(array_merge(self::$typeHierarchy, self::$specialTypes)))]) - ->setDefault([ - 'use_trait', - 'case', - 'constant_public', - 'constant_protected', - 'constant_private', - 'property_public', - 'property_protected', - 'property_private', - 'construct', - 'destruct', - 'magic', - 'phpunit', - 'method_public', - 'method_protected', - 'method_private', - ]) - ->getOption(), - (new FixerOptionBuilder('sort_algorithm', 'How multiple occurrences of same type statements should be sorted')) - ->setAllowedValues(self::SUPPORTED_SORT_ALGORITHMS) - ->setDefault(self::SORT_NONE) - ->getOption(), - ]); - } - - /** - * @return list - */ - private function getElements(Tokens $tokens, int $startIndex): array - { - static $elementTokenKinds = [CT::T_USE_TRAIT, T_CASE, T_CONST, T_VARIABLE, T_FUNCTION]; - - ++$startIndex; - $elements = []; - - while (true) { - $element = [ - 'start' => $startIndex, - 'visibility' => 'public', - 'abstract' => false, - 'static' => false, - 'readonly' => false, - ]; - - for ($i = $startIndex;; ++$i) { - $token = $tokens[$i]; - - // class end - if ($token->equals('}')) { - return $elements; - } - - if ($token->isGivenKind(T_ABSTRACT)) { - $element['abstract'] = true; - - continue; - } - - if ($token->isGivenKind(T_STATIC)) { - $element['static'] = true; - - continue; - } - - if (\defined('T_READONLY') && $token->isGivenKind(T_READONLY)) { // @TODO: drop condition when PHP 8.1+ is required - $element['readonly'] = true; - } - - if ($token->isGivenKind([T_PROTECTED, T_PRIVATE])) { - $element['visibility'] = strtolower($token->getContent()); - - continue; - } - - if (!$token->isGivenKind($elementTokenKinds)) { - continue; - } - - $type = $this->detectElementType($tokens, $i); - - if (\is_array($type)) { - $element['type'] = $type[0]; - $element['name'] = $type[1]; - } else { - $element['type'] = $type; - } - - if ('property' === $element['type']) { - $element['name'] = $tokens[$i]->getContent(); - } elseif (\in_array($element['type'], ['use_trait', 'case', 'constant', 'method', 'magic', 'construct', 'destruct'], true)) { - $element['name'] = $tokens[$tokens->getNextMeaningfulToken($i)]->getContent(); - } - - $element['end'] = $this->findElementEnd($tokens, $i); - - break; - } - - $elements[] = $element; - $startIndex = $element['end'] + 1; - } - } - - /** - * @return array|string type or array of type and name - */ - private function detectElementType(Tokens $tokens, int $index) - { - $token = $tokens[$index]; - - if ($token->isGivenKind(CT::T_USE_TRAIT)) { - return 'use_trait'; - } - - if ($token->isGivenKind(T_CASE)) { - return 'case'; - } - - if ($token->isGivenKind(T_CONST)) { - return 'constant'; - } - - if ($token->isGivenKind(T_VARIABLE)) { - return 'property'; - } - - $nameToken = $tokens[$tokens->getNextMeaningfulToken($index)]; - - if ($nameToken->equals([T_STRING, '__construct'], false)) { - return 'construct'; - } - - if ($nameToken->equals([T_STRING, '__destruct'], false)) { - return 'destruct'; - } - - if ( - $nameToken->equalsAny([ - [T_STRING, 'setUpBeforeClass'], - [T_STRING, 'doSetUpBeforeClass'], - [T_STRING, 'tearDownAfterClass'], - [T_STRING, 'doTearDownAfterClass'], - [T_STRING, 'setUp'], - [T_STRING, 'doSetUp'], - [T_STRING, 'assertPreConditions'], - [T_STRING, 'assertPostConditions'], - [T_STRING, 'tearDown'], - [T_STRING, 'doTearDown'], - ], false) - ) { - return ['phpunit', strtolower($nameToken->getContent())]; - } - - return str_starts_with($nameToken->getContent(), '__') ? 'magic' : 'method'; - } - - private function findElementEnd(Tokens $tokens, int $index): int - { - $index = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($tokens[$index]->equals('{')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } - - for (++$index; $tokens[$index]->isWhitespace(" \t") || $tokens[$index]->isComment(); ++$index); - - --$index; - - return $tokens[$index]->isWhitespace() ? $index - 1 : $index; - } - - /** - * @return list - */ - private function sortElements(array $elements): array - { - static $phpunitPositions = [ - 'setupbeforeclass' => 1, - 'dosetupbeforeclass' => 2, - 'teardownafterclass' => 3, - 'doteardownafterclass' => 4, - 'setup' => 5, - 'dosetup' => 6, - 'assertpreconditions' => 7, - 'assertpostconditions' => 8, - 'teardown' => 9, - 'doteardown' => 10, - ]; - - foreach ($elements as &$element) { - $type = $element['type']; - - if (\array_key_exists($type, self::$specialTypes)) { - if (isset($this->typePosition[$type])) { - $element['position'] = $this->typePosition[$type]; - - if ('phpunit' === $type) { - $element['position'] += $phpunitPositions[$element['name']]; - } - - continue; - } - - $type = 'method'; - } - - if (\in_array($type, ['constant', 'property', 'method'], true)) { - $type .= '_'.$element['visibility']; - - if ($element['abstract']) { - $type .= '_abstract'; - } - - if ($element['static']) { - $type .= '_static'; - } - - if ($element['readonly']) { - $type .= '_readonly'; - } - } - - $element['position'] = $this->typePosition[$type]; - } - - unset($element); - - usort($elements, function (array $a, array $b): int { - if ($a['position'] === $b['position']) { - return $this->sortGroupElements($a, $b); - } - - return $a['position'] <=> $b['position']; - }); - - return $elements; - } - - /** - * @param array{ - * start: int, - * visibility: string, - * abstract: bool, - * static: bool, - * readonly: bool, - * type: string, - * name: string, - * end: int, - * position: int, - * } $a - * @param array{ - * start: int, - * visibility: string, - * abstract: bool, - * static: bool, - * readonly: bool, - * type: string, - * name: string, - * end: int, - * position: int, - * } $b - */ - private function sortGroupElements(array $a, array $b): int - { - $selectedSortAlgorithm = $this->configuration['sort_algorithm']; - - if (self::SORT_ALPHA === $selectedSortAlgorithm) { - return strcasecmp($a['name'], $b['name']); - } - - return $a['start'] <=> $b['start']; - } - - /** - * @param list $elements - */ - private function sortTokens(Tokens $tokens, int $startIndex, int $endIndex, array $elements): void - { - $replaceTokens = []; - - foreach ($elements as $element) { - for ($i = $element['start']; $i <= $element['end']; ++$i) { - $replaceTokens[] = clone $tokens[$i]; - } - } - - $tokens->overrideRange($startIndex + 1, $endIndex, $replaceTokens); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php deleted file mode 100644 index 89ee57ee..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedInterfacesFixer.php +++ /dev/null @@ -1,246 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dave van der Brugge - */ -final class OrderedInterfacesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** @internal */ - public const OPTION_DIRECTION = 'direction'; - - /** @internal */ - public const OPTION_ORDER = 'order'; - - /** @internal */ - public const DIRECTION_ASCEND = 'ascend'; - - /** @internal */ - public const DIRECTION_DESCEND = 'descend'; - - /** @internal */ - public const ORDER_ALPHA = 'alpha'; - - /** @internal */ - public const ORDER_LENGTH = 'length'; - - /** - * Array of supported directions in configuration. - * - * @var string[] - */ - private const SUPPORTED_DIRECTION_OPTIONS = [ - self::DIRECTION_ASCEND, - self::DIRECTION_DESCEND, - ]; - - /** - * Array of supported orders in configuration. - * - * @var string[] - */ - private const SUPPORTED_ORDER_OPTIONS = [ - self::ORDER_ALPHA, - self::ORDER_LENGTH, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Orders the interfaces in an `implements` or `interface extends` clause.', - [ - new CodeSample( - " self::DIRECTION_DESCEND] - ), - new CodeSample( - " self::ORDER_LENGTH] - ), - new CodeSample( - " self::ORDER_LENGTH, - self::OPTION_DIRECTION => self::DIRECTION_DESCEND, - ] - ), - ], - null, - "Risky for `implements` when specifying both an interface and its parent interface, because PHP doesn't break on `parent, child` but does on `child, parent`." - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_IMPLEMENTS) - || $tokens->isAllTokenKindsFound([T_INTERFACE, T_EXTENDS]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_IMPLEMENTS)) { - if (!$token->isGivenKind(T_EXTENDS)) { - continue; - } - - $nameTokenIndex = $tokens->getPrevMeaningfulToken($index); - $interfaceTokenIndex = $tokens->getPrevMeaningfulToken($nameTokenIndex); - $interfaceToken = $tokens[$interfaceTokenIndex]; - - if (!$interfaceToken->isGivenKind(T_INTERFACE)) { - continue; - } - } - - $implementsStart = $index + 1; - $implementsEnd = $tokens->getPrevNonWhitespace($tokens->getNextTokenOfKind($implementsStart, ['{'])); - - $interfaces = $this->getInterfaces($tokens, $implementsStart, $implementsEnd); - - if (1 === \count($interfaces)) { - continue; - } - - foreach ($interfaces as $interfaceIndex => $interface) { - $interfaceTokens = Tokens::fromArray($interface, false); - $normalized = ''; - $actualInterfaceIndex = $interfaceTokens->getNextMeaningfulToken(-1); - - while ($interfaceTokens->offsetExists($actualInterfaceIndex)) { - $token = $interfaceTokens[$actualInterfaceIndex]; - - if ($token->isComment() || $token->isWhitespace()) { - break; - } - - $normalized .= str_replace('\\', ' ', $token->getContent()); - ++$actualInterfaceIndex; - } - - $interfaces[$interfaceIndex] = [ - 'tokens' => $interface, - 'normalized' => $normalized, - 'originalIndex' => $interfaceIndex, - ]; - } - - usort($interfaces, function (array $first, array $second): int { - $score = self::ORDER_LENGTH === $this->configuration[self::OPTION_ORDER] - ? \strlen($first['normalized']) - \strlen($second['normalized']) - : strcasecmp($first['normalized'], $second['normalized']); - - if (self::DIRECTION_DESCEND === $this->configuration[self::OPTION_DIRECTION]) { - $score *= -1; - } - - return $score; - }); - - $changed = false; - - foreach ($interfaces as $interfaceIndex => $interface) { - if ($interface['originalIndex'] !== $interfaceIndex) { - $changed = true; - - break; - } - } - - if (!$changed) { - continue; - } - - $newTokens = array_shift($interfaces)['tokens']; - - foreach ($interfaces as $interface) { - array_push($newTokens, new Token(','), ...$interface['tokens']); - } - - $tokens->overrideRange($implementsStart, $implementsEnd, $newTokens); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder(self::OPTION_ORDER, 'How the interfaces should be ordered')) - ->setAllowedValues(self::SUPPORTED_ORDER_OPTIONS) - ->setDefault(self::ORDER_ALPHA) - ->getOption(), - (new FixerOptionBuilder(self::OPTION_DIRECTION, 'Which direction the interfaces should be ordered')) - ->setAllowedValues(self::SUPPORTED_DIRECTION_OPTIONS) - ->setDefault(self::DIRECTION_ASCEND) - ->getOption(), - ]); - } - - /** - * @return array> - */ - private function getInterfaces(Tokens $tokens, int $implementsStart, int $implementsEnd): array - { - $interfaces = []; - $interfaceIndex = 0; - - for ($i = $implementsStart; $i <= $implementsEnd; ++$i) { - if ($tokens[$i]->equals(',')) { - ++$interfaceIndex; - $interfaces[$interfaceIndex] = []; - - continue; - } - - $interfaces[$interfaceIndex][] = $tokens[$i]; - } - - return $interfaces; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php deleted file mode 100644 index 1cf5ad2e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php +++ /dev/null @@ -1,195 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -final class OrderedTraitsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Trait `use` statements must be sorted alphabetically.', - [ - new CodeSample("isTokenKindFound(CT::T_USE_TRAIT); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($this->findUseStatementsGroups($tokens) as $uses) { - $this->sortUseStatements($tokens, $uses); - } - } - - /** - * @return iterable> - */ - private function findUseStatementsGroups(Tokens $tokens): iterable - { - $uses = []; - - for ($index = 1, $max = \count($tokens); $index < $max; ++$index) { - $token = $tokens[$index]; - - if ($token->isWhitespace() || $token->isComment()) { - continue; - } - - if (!$token->isGivenKind(CT::T_USE_TRAIT)) { - if (\count($uses) > 0) { - yield $uses; - - $uses = []; - } - - continue; - } - - $startIndex = $tokens->getNextNonWhitespace($tokens->getPrevMeaningfulToken($index)); - $endIndex = $tokens->getNextTokenOfKind($index, [';', '{']); - - if ($tokens[$endIndex]->equals('{')) { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $endIndex); - } - - $use = []; - - for ($i = $startIndex; $i <= $endIndex; ++$i) { - $use[] = $tokens[$i]; - } - - $uses[$startIndex] = Tokens::fromArray($use); - - $index = $endIndex; - } - } - - /** - * @param array $uses - */ - private function sortUseStatements(Tokens $tokens, array $uses): void - { - foreach ($uses as $use) { - $this->sortMultipleTraitsInStatement($use); - } - - $this->sort($tokens, $uses); - } - - private function sortMultipleTraitsInStatement(Tokens $use): void - { - $traits = []; - $indexOfName = null; - $name = []; - - for ($index = 0, $max = \count($use); $index < $max; ++$index) { - $token = $use[$index]; - - if ($token->isGivenKind([T_STRING, T_NS_SEPARATOR])) { - $name[] = $token; - - if (null === $indexOfName) { - $indexOfName = $index; - } - - continue; - } - - if ($token->equalsAny([',', ';', '{'])) { - $traits[$indexOfName] = Tokens::fromArray($name); - - $name = []; - $indexOfName = null; - } - - if ($token->equals('{')) { - $index = $use->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } - } - - $this->sort($use, $traits); - } - - /** - * @param array $elements - */ - private function sort(Tokens $tokens, array $elements): void - { - $toTraitName = static function (Tokens $use): string { - $string = ''; - - foreach ($use as $token) { - if ($token->equalsAny([';', '{'])) { - break; - } - - if ($token->isGivenKind([T_NS_SEPARATOR, T_STRING])) { - $string .= $token->getContent(); - } - } - - return ltrim($string, '\\'); - }; - - $sortedElements = $elements; - uasort($sortedElements, static function (Tokens $useA, Tokens $useB) use ($toTraitName): int { - return strcasecmp($toTraitName($useA), $toTraitName($useB)); - }); - - $sortedElements = array_combine( - array_keys($elements), - array_values($sortedElements) - ); - - foreach (array_reverse($sortedElements, true) as $index => $tokensToInsert) { - $tokens->overrideRange( - $index, - $index + \count($elements[$index]) - 1, - $tokensToInsert - ); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php deleted file mode 100644 index 40e85834..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.php +++ /dev/null @@ -1,164 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Filippo Tessarotto - */ -final class ProtectedToPrivateFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts `protected` variables and methods to `private` where possible.', - [ - new CodeSample( - 'isAllTokenKindsFound([T_ENUM, T_PROTECTED])) { // @TODO: drop condition when PHP 8.1+ is required - return true; - } - - return $tokens->isAllTokenKindsFound([T_CLASS, T_FINAL, T_PROTECTED]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $modifierKinds = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_FINAL, T_ABSTRACT, T_NS_SEPARATOR, T_STRING, CT::T_NULLABLE_TYPE, CT::T_ARRAY_TYPEHINT, T_STATIC, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $modifierKinds[] = T_READONLY; - } - - $classesCandidate = []; - $classElementTypes = ['method' => true, 'property' => true, 'const' => true]; - - foreach ($tokensAnalyzer->getClassyElements() as $index => $element) { - $classIndex = $element['classIndex']; - - if (!\array_key_exists($classIndex, $classesCandidate)) { - $classesCandidate[$classIndex] = $this->isClassCandidate($tokens, $classIndex); - } - - if (false === $classesCandidate[$classIndex]) { - continue; // not "final" class, "extends", is "anonymous", enum or uses trait - } - - if (!isset($classElementTypes[$element['type']])) { - continue; - } - - $previous = $index; - $isProtected = false; - $isFinal = false; - - do { - $previous = $tokens->getPrevMeaningfulToken($previous); - - if ($tokens[$previous]->isGivenKind(T_PROTECTED)) { - $isProtected = $previous; - } elseif ($tokens[$previous]->isGivenKind(T_FINAL)) { - $isFinal = $previous; - } - } while ($tokens[$previous]->isGivenKind($modifierKinds)); - - if (false === $isProtected) { - continue; - } - - if ($isFinal && 'const' === $element['type']) { - continue; // Final constants cannot be private - } - - $element['protected_index'] = $isProtected; - $tokens[$element['protected_index']] = new Token([T_PRIVATE, 'private']); - } - } - - private function isClassCandidate(Tokens $tokens, int $classIndex): bool - { - if (\defined('T_ENUM') && $tokens[$classIndex]->isGivenKind(T_ENUM)) { // @TODO: drop condition when PHP 8.1+ is required - return true; - } - - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classIndex)]; - - if (!$prevToken->isGivenKind(T_FINAL)) { - return false; - } - - $classNameIndex = $tokens->getNextMeaningfulToken($classIndex); // move to class name as anonymous class is never "final" - $classExtendsIndex = $tokens->getNextMeaningfulToken($classNameIndex); // move to possible "extends" - - if ($tokens[$classExtendsIndex]->isGivenKind(T_EXTENDS)) { - return false; - } - - if (!$tokens->isTokenKindFound(CT::T_USE_TRAIT)) { - return true; // cheap test - } - - $classOpenIndex = $tokens->getNextTokenOfKind($classNameIndex, ['{']); - $classCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classOpenIndex); - $useIndex = $tokens->getNextTokenOfKind($classOpenIndex, [[CT::T_USE_TRAIT]]); - - return null === $useIndex || $useIndex > $classCloseIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php deleted file mode 100644 index 568ab6e2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfAccessorFixer.php +++ /dev/null @@ -1,189 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gregor Harlan - */ -final class SelfAccessorFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Inside class or interface element `self` should be preferred to the class name itself.', - [ - new CodeSample( - 'isAnyTokenKindsFound([T_CLASS, T_INTERFACE]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - foreach ((new NamespacesAnalyzer())->getDeclarations($tokens) as $namespace) { - for ($index = $namespace->getScopeStartIndex(); $index < $namespace->getScopeEndIndex(); ++$index) { - if (!$tokens[$index]->isGivenKind([T_CLASS, T_INTERFACE]) || $tokensAnalyzer->isAnonymousClass($index)) { - continue; - } - - $nameIndex = $tokens->getNextTokenOfKind($index, [[T_STRING]]); - $startIndex = $tokens->getNextTokenOfKind($nameIndex, ['{']); - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $startIndex); - - $name = $tokens[$nameIndex]->getContent(); - - $this->replaceNameOccurrences($tokens, $namespace->getFullName(), $name, $startIndex, $endIndex); - - $index = $endIndex; - } - } - } - - /** - * Replace occurrences of the name of the classy element by "self" (if possible). - */ - private function replaceNameOccurrences(Tokens $tokens, string $namespace, string $name, int $startIndex, int $endIndex): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $insideMethodSignatureUntil = null; - - for ($i = $startIndex; $i < $endIndex; ++$i) { - if ($i === $insideMethodSignatureUntil) { - $insideMethodSignatureUntil = null; - } - - $token = $tokens[$i]; - - // skip anonymous classes - if ($token->isGivenKind(T_CLASS) && $tokensAnalyzer->isAnonymousClass($i)) { - $i = $tokens->getNextTokenOfKind($i, ['{']); - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $i); - - continue; - } - - if ($token->isGivenKind(T_FUNCTION)) { - $i = $tokens->getNextTokenOfKind($i, ['(']); - $insideMethodSignatureUntil = $tokens->getNextTokenOfKind($i, ['{', ';']); - - continue; - } - - if (!$token->equals([T_STRING, $name], false)) { - continue; - } - - $nextToken = $tokens[$tokens->getNextMeaningfulToken($i)]; - if ($nextToken->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - $classStartIndex = $i; - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($i)]; - if ($prevToken->isGivenKind(T_NS_SEPARATOR)) { - $classStartIndex = $this->getClassStart($tokens, $i, $namespace); - if (null === $classStartIndex) { - continue; - } - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($classStartIndex)]; - } - if ($prevToken->isGivenKind(T_STRING) || $prevToken->isObjectOperator()) { - continue; - } - - if ( - $prevToken->isGivenKind([T_INSTANCEOF, T_NEW]) - || $nextToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM) - || ( - null !== $insideMethodSignatureUntil - && $i < $insideMethodSignatureUntil - && $prevToken->equalsAny(['(', ',', [CT::T_TYPE_COLON], [CT::T_NULLABLE_TYPE]]) - ) - ) { - for ($j = $classStartIndex; $j < $i; ++$j) { - $tokens->clearTokenAndMergeSurroundingWhitespace($j); - } - $tokens[$i] = new Token([T_STRING, 'self']); - } - } - } - - private function getClassStart(Tokens $tokens, int $index, string $namespace): ?int - { - $namespace = ('' !== $namespace ? '\\'.$namespace : '').'\\'; - - foreach (array_reverse(Preg::split('/(\\\\)/', $namespace, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)) as $piece) { - $index = $tokens->getPrevMeaningfulToken($index); - if ('\\' === $piece) { - if (!$tokens[$index]->isGivenKind(T_NS_SEPARATOR)) { - return null; - } - } elseif (!$tokens[$index]->equals([T_STRING, $piece], false)) { - return null; - } - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php deleted file mode 100644 index 0c66ca6d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php +++ /dev/null @@ -1,201 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class SelfStaticAccessorFixer extends AbstractFixer -{ - /** - * @var TokensAnalyzer - */ - private $tokensAnalyzer; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Inside a `final` class or anonymous class `self` should be preferred to `static`.', - [ - new CodeSample( - 'isAllTokenKindsFound([T_CLASS, T_STATIC]) && $tokens->isAnyTokenKindsFound([T_DOUBLE_COLON, T_NEW, T_INSTANCEOF]); - } - - /** - * {@inheritdoc} - * - * Must run after FinalInternalClassFixer, FunctionToConstantFixer, PhpUnitTestCaseStaticMethodCallsFixer. - */ - public function getPriority(): int - { - return -10; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->tokensAnalyzer = new TokensAnalyzer($tokens); - - $classIndex = $tokens->getNextTokenOfKind(0, [[T_CLASS]]); - - while (null !== $classIndex) { - if ( - $this->tokensAnalyzer->isAnonymousClass($classIndex) - || $tokens[$tokens->getPrevMeaningfulToken($classIndex)]->isGivenKind(T_FINAL) - ) { - $classIndex = $this->fixClass($tokens, $classIndex); - } - - $classIndex = $tokens->getNextTokenOfKind($classIndex, [[T_CLASS]]); - } - } - - private function fixClass(Tokens $tokens, int $index): int - { - $index = $tokens->getNextTokenOfKind($index, ['{']); - $classOpenCount = 1; - - while ($classOpenCount > 0) { - ++$index; - - if ($tokens[$index]->equals('{')) { - ++$classOpenCount; - - continue; - } - - if ($tokens[$index]->equals('}')) { - --$classOpenCount; - - continue; - } - - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - // do not fix inside lambda - if ($this->tokensAnalyzer->isLambda($index)) { - // figure out where the lambda starts - $index = $tokens->getNextTokenOfKind($index, ['{']); - $openCount = 1; - - do { - $index = $tokens->getNextTokenOfKind($index, ['}', '{', [T_CLASS]]); - if ($tokens[$index]->equals('}')) { - --$openCount; - } elseif ($tokens[$index]->equals('{')) { - ++$openCount; - } else { - $index = $this->fixClass($tokens, $index); - } - } while ($openCount > 0); - } - - continue; - } - - if ($tokens[$index]->isGivenKind([T_NEW, T_INSTANCEOF])) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(T_STATIC)) { - $tokens[$index] = new Token([T_STRING, 'self']); - } - - continue; - } - - if (!$tokens[$index]->isGivenKind(T_STATIC)) { - continue; - } - - $staticIndex = $index; - $index = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$index]->isGivenKind(T_DOUBLE_COLON)) { - continue; - } - - $tokens[$staticIndex] = new Token([T_STRING, 'self']); - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php deleted file mode 100644 index 2c8c8dcb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleClassElementPerStatementFixer.php +++ /dev/null @@ -1,240 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * Fixer for rules defined in PSR2 ¶4.2. - * - * @author Javier Spagnoletti - * @author Dariusz Rumiński - */ -final class SingleClassElementPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - * - * Must run before ClassAttributesSeparationFixer. - */ - public function getPriority(): int - { - return 56; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST NOT be more than one property or constant declared per statement.', - [ - new CodeSample( - ' ['property']] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $analyzer = new TokensAnalyzer($tokens); - $elements = array_reverse($analyzer->getClassyElements(), true); - - foreach ($elements as $index => $element) { - if (!\in_array($element['type'], $this->configuration['elements'], true)) { - continue; // not in configuration - } - - $this->fixElement($tokens, $element['type'], $index); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $values = ['const', 'property']; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('elements', 'List of strings which element should be modified.')) - ->setDefault($values) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($values)]) - ->getOption(), - ]); - } - - private function fixElement(Tokens $tokens, string $type, int $index): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $repeatIndex = $index; - - while (true) { - $repeatIndex = $tokens->getNextMeaningfulToken($repeatIndex); - $repeatToken = $tokens[$repeatIndex]; - - if ($tokensAnalyzer->isArray($repeatIndex)) { - if ($repeatToken->isGivenKind(T_ARRAY)) { - $repeatIndex = $tokens->getNextTokenOfKind($repeatIndex, ['(']); - $repeatIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $repeatIndex); - } else { - $repeatIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $repeatIndex); - } - - continue; - } - - if ($repeatToken->equals(';')) { - return; // no repeating found, no fixing needed - } - - if ($repeatToken->equals(',')) { - break; - } - } - - $start = $tokens->getPrevTokenOfKind($index, [';', '{', '}']); - $this->expandElement( - $tokens, - $type, - $tokens->getNextMeaningfulToken($start), - $tokens->getNextTokenOfKind($index, [';']) - ); - } - - private function expandElement(Tokens $tokens, string $type, int $startIndex, int $endIndex): void - { - $divisionContent = null; - - if ($tokens[$startIndex - 1]->isWhitespace()) { - $divisionContent = $tokens[$startIndex - 1]->getContent(); - - if (Preg::match('#(\n|\r\n)#', $divisionContent, $matches)) { - $divisionContent = $matches[0].trim($divisionContent, "\r\n"); - } - } - - // iterate variables to split up - for ($i = $endIndex - 1; $i > $startIndex; --$i) { - $token = $tokens[$i]; - - if ($token->equals(')')) { - $i = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $i); - - continue; - } - - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_CLOSE)) { - $i = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $i); - - continue; - } - - if (!$tokens[$i]->equals(',')) { - continue; - } - - $tokens[$i] = new Token(';'); - - if ($tokens[$i + 1]->isWhitespace()) { - $tokens->clearAt($i + 1); - } - - if (null !== $divisionContent && '' !== $divisionContent) { - $tokens->insertAt($i + 1, new Token([T_WHITESPACE, $divisionContent])); - } - - // collect modifiers - $sequence = $this->getModifiersSequences($tokens, $type, $startIndex, $endIndex); - $tokens->insertAt($i + 2, $sequence); - } - } - - /** - * @return Token[] - */ - private function getModifiersSequences(Tokens $tokens, string $type, int $startIndex, int $endIndex): array - { - if ('property' === $type) { - $tokenKinds = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_STATIC, T_VAR, T_STRING, T_NS_SEPARATOR, CT::T_NULLABLE_TYPE, CT::T_ARRAY_TYPEHINT, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $tokenKinds[] = T_READONLY; - } - } else { - $tokenKinds = [T_PUBLIC, T_PROTECTED, T_PRIVATE, T_CONST]; - } - - $sequence = []; - - for ($i = $startIndex; $i < $endIndex - 1; ++$i) { - if ($tokens[$i]->isComment()) { - continue; - } - - if (!$tokens[$i]->isWhitespace() && !$tokens[$i]->isGivenKind($tokenKinds)) { - break; - } - - $sequence[] = clone $tokens[$i]; - } - - return $sequence; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php deleted file mode 100644 index d3d839fb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SingleTraitInsertPerStatementFixer.php +++ /dev/null @@ -1,116 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SingleTraitInsertPerStatementFixer extends AbstractFixer -{ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Each trait `use` must be done as single statement.', - [ - new CodeSample( - 'isTokenKindFound(CT::T_USE_TRAIT); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 1 < $index; --$index) { - if ($tokens[$index]->isGivenKind(CT::T_USE_TRAIT)) { - $candidates = $this->getCandidates($tokens, $index); - if (\count($candidates) > 0) { - $this->fixTraitUse($tokens, $index, $candidates); - } - } - } - } - - /** - * @param int[] $candidates ',' indices to fix - */ - private function fixTraitUse(Tokens $tokens, int $useTraitIndex, array $candidates): void - { - foreach ($candidates as $commaIndex) { - $inserts = [ - new Token([CT::T_USE_TRAIT, 'use']), - new Token([T_WHITESPACE, ' ']), - ]; - - $nextImportStartIndex = $tokens->getNextMeaningfulToken($commaIndex); - - if ($tokens[$nextImportStartIndex - 1]->isWhitespace()) { - if (1 === Preg::match('/\R/', $tokens[$nextImportStartIndex - 1]->getContent())) { - array_unshift($inserts, clone $tokens[$useTraitIndex - 1]); - } - $tokens->clearAt($nextImportStartIndex - 1); - } - - $tokens[$commaIndex] = new Token(';'); - $tokens->insertAt($nextImportStartIndex, $inserts); - } - } - - /** - * @return int[] - */ - private function getCandidates(Tokens $tokens, int $index): array - { - $indices = []; - $index = $tokens->getNextTokenOfKind($index, [',', ';', '{']); - - while (!$tokens[$index]->equals(';')) { - if ($tokens[$index]->equals('{')) { - return []; // do not fix use cases with grouping - } - - $indices[] = $index; - $index = $tokens->getNextTokenOfKind($index, [',', ';', '{']); - } - - return array_reverse($indices); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php deleted file mode 100644 index e112c2d1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/VisibilityRequiredFixer.php +++ /dev/null @@ -1,212 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * Fixer for rules defined in PSR2 ¶4.3, ¶4.5. - * - * @author Dariusz Rumiński - */ -final class VisibilityRequiredFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Visibility MUST be declared on all properties and methods; `abstract` and `final` MUST be declared before the visibility; `static` MUST be declared after the visibility.', - [ - new CodeSample( - ' ['const']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before ClassAttributesSeparationFixer. - */ - public function getPriority(): int - { - return 56; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('elements', 'The structural elements to fix (PHP >= 7.1 required for `const`).')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(['property', 'method', 'const'])]) - ->setDefault(['property', 'method', 'const']) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - $propertyTypeDeclarationKinds = [T_STRING, T_NS_SEPARATOR, CT::T_NULLABLE_TYPE, CT::T_ARRAY_TYPEHINT, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $propertyReadOnlyType = T_READONLY; - $propertyTypeDeclarationKinds[] = T_READONLY; - } else { - $propertyReadOnlyType = -999; - } - - $expectedKindsGeneric = [T_ABSTRACT, T_FINAL, T_PRIVATE, T_PROTECTED, T_PUBLIC, T_STATIC, T_VAR]; - $expectedKindsPropertyKinds = array_merge($expectedKindsGeneric, $propertyTypeDeclarationKinds); - - foreach (array_reverse($tokensAnalyzer->getClassyElements(), true) as $index => $element) { - if (!\in_array($element['type'], $this->configuration['elements'], true)) { - continue; - } - - $abstractFinalIndex = null; - $visibilityIndex = null; - $staticIndex = null; - $typeIndex = null; - $readOnlyIndex = null; - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $expectedKinds = 'property' === $element['type'] - ? $expectedKindsPropertyKinds - : $expectedKindsGeneric - ; - - while ($tokens[$prevIndex]->isGivenKind($expectedKinds)) { - if ($tokens[$prevIndex]->isGivenKind([T_ABSTRACT, T_FINAL])) { - $abstractFinalIndex = $prevIndex; - } elseif ($tokens[$prevIndex]->isGivenKind(T_STATIC)) { - $staticIndex = $prevIndex; - } elseif ($tokens[$prevIndex]->isGivenKind($propertyReadOnlyType)) { - $readOnlyIndex = $prevIndex; - } elseif ($tokens[$prevIndex]->isGivenKind($propertyTypeDeclarationKinds)) { - $typeIndex = $prevIndex; - } else { - $visibilityIndex = $prevIndex; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - } - - if (null !== $typeIndex) { - $index = $typeIndex; - } - - if ($tokens[$prevIndex]->equals(',')) { - continue; - } - - $swapIndex = $staticIndex ?? $readOnlyIndex; // "static" property cannot be "readonly", so there can always be at most one swap - - if (null !== $swapIndex) { - if ($this->isKeywordPlacedProperly($tokens, $swapIndex, $index)) { - $index = $swapIndex; - } else { - $this->moveTokenAndEnsureSingleSpaceFollows($tokens, $swapIndex, $index); - } - } - - if (null === $visibilityIndex) { - $tokens->insertAt($index, [new Token([T_PUBLIC, 'public']), new Token([T_WHITESPACE, ' '])]); - } else { - if ($tokens[$visibilityIndex]->isGivenKind(T_VAR)) { - $tokens[$visibilityIndex] = new Token([T_PUBLIC, 'public']); - } - if ($this->isKeywordPlacedProperly($tokens, $visibilityIndex, $index)) { - $index = $visibilityIndex; - } else { - $this->moveTokenAndEnsureSingleSpaceFollows($tokens, $visibilityIndex, $index); - } - } - - if (null === $abstractFinalIndex) { - continue; - } - - if ($this->isKeywordPlacedProperly($tokens, $abstractFinalIndex, $index)) { - continue; - } - - $this->moveTokenAndEnsureSingleSpaceFollows($tokens, $abstractFinalIndex, $index); - } - } - - private function isKeywordPlacedProperly(Tokens $tokens, int $keywordIndex, int $comparedIndex): bool - { - return $keywordIndex + 2 === $comparedIndex && ' ' === $tokens[$keywordIndex + 1]->getContent(); - } - - private function moveTokenAndEnsureSingleSpaceFollows(Tokens $tokens, int $fromIndex, int $toIndex): void - { - $tokens->insertAt($toIndex, [$tokens[$fromIndex], new Token([T_WHITESPACE, ' '])]); - $tokens->clearAt($fromIndex); - - if ($tokens[$fromIndex + 1]->isWhitespace()) { - $tokens->clearAt($fromIndex + 1); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php deleted file mode 100644 index 1d0610ea..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassUsage/DateTimeImmutableFixer.php +++ /dev/null @@ -1,158 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ClassUsage; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class DateTimeImmutableFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Class `DateTimeImmutable` should be used instead of `DateTime`.', - [new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $functionMap = [ - 'date_create' => 'date_create_immutable', - 'date_create_from_format' => 'date_create_immutable_from_format', - ]; - - $isInNamespace = false; - $isImported = false; // e.g. use DateTime; - - for ($index = 0, $limit = $tokens->count(); $index < $limit; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_NAMESPACE)) { - $isInNamespace = true; - - continue; - } - - if ($isInNamespace && $token->isGivenKind(T_USE)) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if ('datetime' !== strtolower($tokens[$nextIndex]->getContent())) { - continue; - } - - $nextNextIndex = $tokens->getNextMeaningfulToken($nextIndex); - - if ($tokens[$nextNextIndex]->equals(';')) { - $isImported = true; - } - - $index = $nextNextIndex; - - continue; - } - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->isGivenKind(T_FUNCTION)) { - continue; - } - - $lowercaseContent = strtolower($token->getContent()); - - if ('datetime' === $lowercaseContent) { - $this->fixClassUsage($tokens, $index, $isInNamespace, $isImported); - $limit = $tokens->count(); // update limit, as fixing class usage may insert new token - - continue; - } - - if (isset($functionMap[$lowercaseContent]) && $functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - $tokens[$index] = new Token([T_STRING, $functionMap[$lowercaseContent]]); - } - } - } - - private function fixClassUsage(Tokens $tokens, int $index, bool $isInNamespace, bool $isImported): void - { - $nextIndex = $tokens->getNextMeaningfulToken($index); - if ($tokens[$nextIndex]->isGivenKind(T_DOUBLE_COLON)) { - $nextNextIndex = $tokens->getNextMeaningfulToken($nextIndex); - if ($tokens[$nextNextIndex]->isGivenKind(T_STRING)) { - $nextNextNextIndex = $tokens->getNextMeaningfulToken($nextNextIndex); - if (!$tokens[$nextNextNextIndex]->equals('(')) { - return; - } - } - } - - $isUsedAlone = false; // e.g. new DateTime(); - $isUsedWithLeadingBackslash = false; // e.g. new \DateTime(); - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $prevPrevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - if (!$tokens[$prevPrevIndex]->isGivenKind(T_STRING)) { - $isUsedWithLeadingBackslash = true; - } - } elseif (!$tokens[$prevIndex]->isGivenKind(T_DOUBLE_COLON) && !$tokens[$prevIndex]->isObjectOperator()) { - $isUsedAlone = true; - } - - if ($isUsedWithLeadingBackslash || $isUsedAlone && ($isInNamespace && $isImported || !$isInNamespace)) { - $tokens[$index] = new Token([T_STRING, \DateTimeImmutable::class]); - if ($isInNamespace && $isUsedAlone) { - $tokens->insertAt($index, new Token([T_NS_SEPARATOR, '\\'])); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php deleted file mode 100644 index c28b8891..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/CommentToPhpdocFixer.php +++ /dev/null @@ -1,239 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\CommentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Utils; - -/** - * @author Kuba Werłos - */ -final class CommentToPhpdocFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @var string[] - */ - private array $ignoredTags = []; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_COMMENT); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - * - * Must run before GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocAnnotationWithoutDotFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToCommentFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer. - * Must run after AlignMultilineCommentFixer. - */ - public function getPriority(): int - { - // Should be run before all other PHPDoc fixers - return 26; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Comments with annotation should be docblock when used on structural elements.', - [ - new CodeSample(" ['todo']]), - ], - null, - 'Risky as new docblocks might mean more, e.g. a Doctrine entity might have a new column in database.' - ); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->ignoredTags = array_map( - static function (string $tag): string { - return strtolower($tag); - }, - $this->configuration['ignored_tags'] - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('ignored_tags', 'List of ignored tags')) - ->setAllowedTypes(['array']) - ->setDefault([]) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $commentsAnalyzer = new CommentsAnalyzer(); - - for ($index = 0, $limit = \count($tokens); $index < $limit; ++$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_COMMENT)) { - continue; - } - - if ($commentsAnalyzer->isHeaderComment($tokens, $index)) { - continue; - } - - if (!$commentsAnalyzer->isBeforeStructuralElement($tokens, $index)) { - continue; - } - - $commentIndices = $commentsAnalyzer->getCommentBlockIndices($tokens, $index); - - if ($this->isCommentCandidate($tokens, $commentIndices)) { - $this->fixComment($tokens, $commentIndices); - } - - $index = max($commentIndices); - } - } - - /** - * @param int[] $indices - */ - private function isCommentCandidate(Tokens $tokens, array $indices): bool - { - return array_reduce( - $indices, - function (bool $carry, int $index) use ($tokens): bool { - if ($carry) { - return true; - } - if (1 !== Preg::match('~(?:#|//|/\*+|\R(?:\s*\*)?)\s*\@([a-zA-Z0-9_\\\\-]+)(?=\s|\(|$)~', $tokens[$index]->getContent(), $matches)) { - return false; - } - - return !\in_array(strtolower($matches[1]), $this->ignoredTags, true); - }, - false - ); - } - - /** - * @param int[] $indices - */ - private function fixComment(Tokens $tokens, array $indices): void - { - if (1 === \count($indices)) { - $this->fixCommentSingleLine($tokens, reset($indices)); - } else { - $this->fixCommentMultiLine($tokens, $indices); - } - } - - private function fixCommentSingleLine(Tokens $tokens, int $index): void - { - $message = $this->getMessage($tokens[$index]->getContent()); - - if ('' !== trim(substr($message, 0, 1))) { - $message = ' '.$message; - } - - if ('' !== trim(substr($message, -1))) { - $message .= ' '; - } - - $tokens[$index] = new Token([T_DOC_COMMENT, '/**'.$message.'*/']); - } - - /** - * @param int[] $indices - */ - private function fixCommentMultiLine(Tokens $tokens, array $indices): void - { - $startIndex = reset($indices); - $indent = Utils::calculateTrailingWhitespaceIndent($tokens[$startIndex - 1]); - - $newContent = '/**'.$this->whitespacesConfig->getLineEnding(); - $count = max($indices); - - for ($index = $startIndex; $index <= $count; ++$index) { - if (!$tokens[$index]->isComment()) { - continue; - } - if (str_contains($tokens[$index]->getContent(), '*/')) { - return; - } - $message = $this->getMessage($tokens[$index]->getContent()); - if ('' !== trim(substr($message, 0, 1))) { - $message = ' '.$message; - } - $newContent .= $indent.' *'.$message.$this->whitespacesConfig->getLineEnding(); - } - - for ($index = $startIndex; $index <= $count; ++$index) { - $tokens->clearAt($index); - } - - $newContent .= $indent.' */'; - - $tokens->insertAt($startIndex, new Token([T_DOC_COMMENT, $newContent])); - } - - private function getMessage(string $content): string - { - if (str_starts_with($content, '#')) { - return substr($content, 1); - } - if (str_starts_with($content, '//')) { - return substr($content, 2); - } - - return rtrim(ltrim($content, '/*'), '*/'); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php deleted file mode 100644 index 044bf1e8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/HeaderCommentFixer.php +++ /dev/null @@ -1,454 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Options; - -/** - * @author Antonio J. García Lagar - */ -final class HeaderCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const HEADER_PHPDOC = 'PHPDoc'; - - /** - * @internal - */ - public const HEADER_COMMENT = 'comment'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Add, replace or remove header comment.', - [ - new CodeSample( - ' 'Made with love.', - ] - ), - new CodeSample( - ' 'Made with love.', - 'comment_type' => 'PHPDoc', - 'location' => 'after_open', - 'separate' => 'bottom', - ] - ), - new CodeSample( - ' 'Made with love.', - 'comment_type' => 'comment', - 'location' => 'after_declare_strict', - ] - ), - new CodeSample( - ' '', - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isMonolithicPhp(); - } - - /** - * {@inheritdoc} - * - * Must run before SingleLineCommentStyleFixer. - * Must run after DeclareStrictTypesFixer, NoBlankLinesAfterPhpdocFixer. - */ - public function getPriority(): int - { - // When this fixer is configured with ["separate" => "bottom", "comment_type" => "PHPDoc"] - // and the target file has no namespace or declare() construct, - // the fixed header comment gets trimmed by NoBlankLinesAfterPhpdocFixer if we run before it. - return -30; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $location = $this->configuration['location']; - $locationIndices = []; - - foreach (['after_open', 'after_declare_strict'] as $possibleLocation) { - $locationIndex = $this->findHeaderCommentInsertionIndex($tokens, $possibleLocation); - - if (!isset($locationIndices[$locationIndex]) || $possibleLocation === $location) { - $locationIndices[$locationIndex] = $possibleLocation; - } - } - - foreach ($locationIndices as $possibleLocation) { - // figure out where the comment should be placed - $headerNewIndex = $this->findHeaderCommentInsertionIndex($tokens, $possibleLocation); - - // check if there is already a comment - $headerCurrentIndex = $this->findHeaderCommentCurrentIndex($tokens, $headerNewIndex - 1); - - if (null === $headerCurrentIndex) { - if ('' === $this->configuration['header'] || $possibleLocation !== $location) { - continue; - } - - $this->insertHeader($tokens, $headerNewIndex); - - continue; - } - - $sameComment = $this->getHeaderAsComment() === $tokens[$headerCurrentIndex]->getContent(); - $expectedLocation = $possibleLocation === $location; - - if (!$sameComment || !$expectedLocation) { - if ($expectedLocation ^ $sameComment) { - $this->removeHeader($tokens, $headerCurrentIndex); - } - - if ('' === $this->configuration['header']) { - continue; - } - - if ($possibleLocation === $location) { - $this->insertHeader($tokens, $headerNewIndex); - } - - continue; - } - - $this->fixWhiteSpaceAroundHeader($tokens, $headerCurrentIndex); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $fixerName = $this->getName(); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('header', 'Proper header content.')) - ->setAllowedTypes(['string']) - ->setNormalizer(static function (Options $options, string $value) use ($fixerName): string { - if ('' === trim($value)) { - return ''; - } - - if (str_contains($value, '*/')) { - throw new InvalidFixerConfigurationException($fixerName, 'Cannot use \'*/\' in header.'); - } - - return $value; - }) - ->getOption(), - (new FixerOptionBuilder('comment_type', 'Comment syntax type.')) - ->setAllowedValues([self::HEADER_PHPDOC, self::HEADER_COMMENT]) - ->setDefault(self::HEADER_COMMENT) - ->getOption(), - (new FixerOptionBuilder('location', 'The location of the inserted header.')) - ->setAllowedValues(['after_open', 'after_declare_strict']) - ->setDefault('after_declare_strict') - ->getOption(), - (new FixerOptionBuilder('separate', 'Whether the header should be separated from the file content with a new line.')) - ->setAllowedValues(['both', 'top', 'bottom', 'none']) - ->setDefault('both') - ->getOption(), - ]); - } - - /** - * Enclose the given text in a comment block. - */ - private function getHeaderAsComment(): string - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - $comment = (self::HEADER_COMMENT === $this->configuration['comment_type'] ? '/*' : '/**').$lineEnding; - $lines = explode("\n", str_replace("\r", '', $this->configuration['header'])); - - foreach ($lines as $line) { - $comment .= rtrim(' * '.$line).$lineEnding; - } - - return $comment.' */'; - } - - private function findHeaderCommentCurrentIndex(Tokens $tokens, int $headerNewIndex): ?int - { - $index = $tokens->getNextNonWhitespace($headerNewIndex); - - if (null === $index || !$tokens[$index]->isComment()) { - return null; - } - - $next = $index + 1; - - if (!isset($tokens[$next]) || \in_array($this->configuration['separate'], ['top', 'none'], true) || !$tokens[$index]->isGivenKind(T_DOC_COMMENT)) { - return $index; - } - - if ($tokens[$next]->isWhitespace()) { - if (!Preg::match('/^\h*\R\h*$/D', $tokens[$next]->getContent())) { - return $index; - } - - ++$next; - } - - if (!isset($tokens[$next]) || !$tokens[$next]->isClassy() && !$tokens[$next]->isGivenKind(T_FUNCTION)) { - return $index; - } - - return $this->getHeaderAsComment() === $tokens[$index]->getContent() ? $index : null; - } - - /** - * Find the index where the header comment must be inserted. - */ - private function findHeaderCommentInsertionIndex(Tokens $tokens, string $location): int - { - $openTagIndex = $tokens[0]->isGivenKind(T_OPEN_TAG) ? 0 : $tokens->getNextTokenOfKind(0, [[T_OPEN_TAG]]); - - if (null === $openTagIndex) { - return 1; - } - - if ('after_open' === $location) { - return $openTagIndex + 1; - } - - $index = $tokens->getNextMeaningfulToken($openTagIndex); - - if (null === $index) { - return $openTagIndex + 1; // file without meaningful tokens but an open tag, comment should always be placed directly after the open tag - } - - if (!$tokens[$index]->isGivenKind(T_DECLARE)) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($index); - - if (null === $next || !$tokens[$next]->equals('(')) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($next); - - if (null === $next || !$tokens[$next]->equals([T_STRING, 'strict_types'], false)) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($next); - - if (null === $next || !$tokens[$next]->equals('=')) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($next); - - if (null === $next || !$tokens[$next]->isGivenKind(T_LNUMBER)) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($next); - - if (null === $next || !$tokens[$next]->equals(')')) { - return $openTagIndex + 1; - } - - $next = $tokens->getNextMeaningfulToken($next); - - if (null === $next || !$tokens[$next]->equals(';')) { // don't insert after close tag - return $openTagIndex + 1; - } - - return $next + 1; - } - - private function fixWhiteSpaceAroundHeader(Tokens $tokens, int $headerIndex): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - // fix lines after header comment - if ( - ('both' === $this->configuration['separate'] || 'bottom' === $this->configuration['separate']) - && null !== $tokens->getNextMeaningfulToken($headerIndex) - ) { - $expectedLineCount = 2; - } else { - $expectedLineCount = 1; - } - - if ($headerIndex === \count($tokens) - 1) { - $tokens->insertAt($headerIndex + 1, new Token([T_WHITESPACE, str_repeat($lineEnding, $expectedLineCount)])); - } else { - $lineBreakCount = $this->getLineBreakCount($tokens, $headerIndex, 1); - - if ($lineBreakCount < $expectedLineCount) { - $missing = str_repeat($lineEnding, $expectedLineCount - $lineBreakCount); - - if ($tokens[$headerIndex + 1]->isWhitespace()) { - $tokens[$headerIndex + 1] = new Token([T_WHITESPACE, $missing.$tokens[$headerIndex + 1]->getContent()]); - } else { - $tokens->insertAt($headerIndex + 1, new Token([T_WHITESPACE, $missing])); - } - } elseif ($lineBreakCount > $expectedLineCount && $tokens[$headerIndex + 1]->isWhitespace()) { - $newLinesToRemove = $lineBreakCount - $expectedLineCount; - $tokens[$headerIndex + 1] = new Token([ - T_WHITESPACE, - Preg::replace("/^\\R{{$newLinesToRemove}}/", '', $tokens[$headerIndex + 1]->getContent()), - ]); - } - } - - // fix lines before header comment - $expectedLineCount = 'both' === $this->configuration['separate'] || 'top' === $this->configuration['separate'] ? 2 : 1; - $prev = $tokens->getPrevNonWhitespace($headerIndex); - - $regex = '/\h$/'; - - if ($tokens[$prev]->isGivenKind(T_OPEN_TAG) && Preg::match($regex, $tokens[$prev]->getContent())) { - $tokens[$prev] = new Token([T_OPEN_TAG, Preg::replace($regex, $lineEnding, $tokens[$prev]->getContent())]); - } - - $lineBreakCount = $this->getLineBreakCount($tokens, $headerIndex, -1); - - if ($lineBreakCount < $expectedLineCount) { - // because of the way the insert index was determined for header comment there cannot be an empty token here - $tokens->insertAt($headerIndex, new Token([T_WHITESPACE, str_repeat($lineEnding, $expectedLineCount - $lineBreakCount)])); - } - } - - private function getLineBreakCount(Tokens $tokens, int $index, int $direction): int - { - $whitespace = ''; - - for ($index += $direction; isset($tokens[$index]); $index += $direction) { - $token = $tokens[$index]; - - if ($token->isWhitespace()) { - $whitespace .= $token->getContent(); - - continue; - } - - if (-1 === $direction && $token->isGivenKind(T_OPEN_TAG)) { - $whitespace .= $token->getContent(); - } - - if ('' !== $token->getContent()) { - break; - } - } - - return substr_count($whitespace, "\n"); - } - - private function removeHeader(Tokens $tokens, int $index): void - { - $prevIndex = $index - 1; - $prevToken = $tokens[$prevIndex]; - $newlineRemoved = false; - - if ($prevToken->isWhitespace()) { - $content = $prevToken->getContent(); - - if (Preg::match('/\R/', $content)) { - $newlineRemoved = true; - } - - $content = Preg::replace('/\R?\h*$/', '', $content); - - $tokens->ensureWhitespaceAtIndex($prevIndex, 0, $content); - } - - $nextIndex = $index + 1; - $nextToken = $tokens[$nextIndex] ?? null; - - if (!$newlineRemoved && null !== $nextToken && $nextToken->isWhitespace()) { - $content = Preg::replace('/^\R/', '', $nextToken->getContent()); - - $tokens->ensureWhitespaceAtIndex($nextIndex, 0, $content); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - private function insertHeader(Tokens $tokens, int $index): void - { - $tokens->insertAt($index, new Token([self::HEADER_COMMENT === $this->configuration['comment_type'] ? T_COMMENT : T_DOC_COMMENT, $this->getHeaderAsComment()])); - $this->fixWhiteSpaceAroundHeader($tokens, $index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php deleted file mode 100644 index d27585ea..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/MultilineCommentOpeningClosingFixer.php +++ /dev/null @@ -1,98 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class MultilineCommentOpeningClosingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'DocBlocks must start with two asterisks, multiline comments must start with a single asterisk, after the opening slash. Both must end with a single asterisk before the closing slash.', - [ - new CodeSample( - <<<'EOT' -isAnyTokenKindsFound([T_COMMENT, T_DOC_COMMENT]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - $originalContent = $token->getContent(); - - if ( - !$token->isGivenKind(T_DOC_COMMENT) - && !($token->isGivenKind(T_COMMENT) && str_starts_with($originalContent, '/*')) - ) { - continue; - } - - $newContent = $originalContent; - - // Fix opening - if ($token->isGivenKind(T_COMMENT)) { - $newContent = Preg::replace('/^\\/\\*{2,}(?!\\/)/', '/*', $newContent); - } - - // Fix closing - $newContent = Preg::replace('/(?getId(), $newContent]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php deleted file mode 100644 index 7d3ca2c5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoEmptyCommentFixer.php +++ /dev/null @@ -1,157 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoEmptyCommentFixer extends AbstractFixer -{ - private const TYPE_HASH = 1; - - private const TYPE_DOUBLE_SLASH = 2; - - private const TYPE_SLASH_ASTERISK = 3; - - /** - * {@inheritdoc} - * - * Must run before NoExtraBlankLinesFixer, NoTrailingWhitespaceFixer, NoWhitespaceInBlankLineFixer. - * Must run after PhpdocToCommentFixer. - */ - public function getPriority(): int - { - return 2; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be any empty comments.', - [new CodeSample("isTokenKindFound(T_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 1, $count = \count($tokens); $index < $count; ++$index) { - if (!$tokens[$index]->isGivenKind(T_COMMENT)) { - continue; - } - - [$blockStart, $index, $isEmpty] = $this->getCommentBlock($tokens, $index); - if (false === $isEmpty) { - continue; - } - - for ($i = $blockStart; $i <= $index; ++$i) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - } - } - - /** - * Return the start index, end index and a flag stating if the comment block is empty. - * - * @param int $index T_COMMENT index - */ - private function getCommentBlock(Tokens $tokens, int $index): array - { - $commentType = $this->getCommentType($tokens[$index]->getContent()); - $empty = $this->isEmptyComment($tokens[$index]->getContent()); - - if (self::TYPE_SLASH_ASTERISK === $commentType) { - return [$index, $index, $empty]; - } - - $start = $index; - $count = \count($tokens); - ++$index; - - for (; $index < $count; ++$index) { - if ($tokens[$index]->isComment()) { - if ($commentType !== $this->getCommentType($tokens[$index]->getContent())) { - break; - } - - if ($empty) { // don't retest if already known the block not being empty - $empty = $this->isEmptyComment($tokens[$index]->getContent()); - } - - continue; - } - - if (!$tokens[$index]->isWhitespace() || $this->getLineBreakCount($tokens, $index, $index + 1) > 1) { - break; - } - } - - return [$start, $index - 1, $empty]; - } - - private function getCommentType(string $content): int - { - if (str_starts_with($content, '#')) { - return self::TYPE_HASH; - } - - if ('*' === $content[1]) { - return self::TYPE_SLASH_ASTERISK; - } - - return self::TYPE_DOUBLE_SLASH; - } - - private function getLineBreakCount(Tokens $tokens, int $whiteStart, int $whiteEnd): int - { - $lineCount = 0; - for ($i = $whiteStart; $i < $whiteEnd; ++$i) { - $lineCount += Preg::matchAll('/\R/u', $tokens[$i]->getContent(), $matches); - } - - return $lineCount; - } - - private function isEmptyComment(string $content): bool - { - static $mapper = [ - self::TYPE_HASH => '|^#\s*$|', // single line comment starting with '#' - self::TYPE_SLASH_ASTERISK => '|^/\*[\s\*]*\*+/$|', // comment starting with '/*' and ending with '*/' (but not a PHPDoc) - self::TYPE_DOUBLE_SLASH => '|^//\s*$|', // single line comment starting with '//' - ]; - - $type = $this->getCommentType($content); - - return 1 === Preg::match($mapper[$type], $content); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php deleted file mode 100644 index 2c37ae09..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/NoTrailingWhitespaceInCommentFixer.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class NoTrailingWhitespaceInCommentFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST be no trailing spaces inside comment or PHPDoc.', - [new CodeSample('isAnyTokenKindsFound([T_COMMENT, T_DOC_COMMENT]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if ($token->isGivenKind(T_DOC_COMMENT)) { - $tokens[$index] = new Token([T_DOC_COMMENT, Preg::replace('/(*ANY)[\h]+$/m', '', $token->getContent())]); - - continue; - } - - if ($token->isGivenKind(T_COMMENT)) { - if (str_starts_with($token->getContent(), '/*')) { - $tokens[$index] = new Token([T_COMMENT, Preg::replace('/(*ANY)[\h]+$/m', '', $token->getContent())]); - } elseif (isset($tokens[$index + 1]) && $tokens[$index + 1]->isWhitespace()) { - $trimmedContent = ltrim($tokens[$index + 1]->getContent(), " \t"); - $tokens->ensureWhitespaceAtIndex($index + 1, 0, $trimmedContent); - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php deleted file mode 100644 index 490ee88f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php +++ /dev/null @@ -1,119 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SingleLineCommentSpacingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Single-line comments must have proper spacing.', - [ - new CodeSample( - 'isTokenKindFound(T_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_COMMENT)) { - continue; - } - - $content = $token->getContent(); - $contentLength = \strlen($content); - - if ('/' === $content[0]) { - if ($contentLength < 3) { - continue; // cheap check for "//" - } - - if ('*' === $content[1]) { // slash asterisk comment - if ($contentLength < 5 || '*' === $content[2] || str_contains($content, "\n")) { - continue; // cheap check for "/**/", comment that looks like a PHPDoc, or multi line comment - } - - $newContent = rtrim(substr($content, 0, -2)).' '.substr($content, -2); - $newContent = $this->fixCommentLeadingSpace($newContent, '/*'); - } else { // double slash comment - $newContent = $this->fixCommentLeadingSpace($content, '//'); - } - } else { // hash comment - if ($contentLength < 2 || '[' === $content[1]) { // cheap check for "#" or annotation (like) comment - continue; - } - - $newContent = $this->fixCommentLeadingSpace($content, '#'); - } - - if ($newContent !== $content) { - $tokens[$index] = new Token([T_COMMENT, $newContent]); - } - } - } - - // fix space between comment open and leading text - private function fixCommentLeadingSpace(string $content, string $prefix): string - { - if (0 !== Preg::match(sprintf('@^%s\h+.*$@', preg_quote($prefix, '@')), $content)) { - return $content; - } - - $position = \strlen($prefix); - - return substr($content, 0, $position).' '.substr($content, $position); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php deleted file mode 100644 index 7ce0148c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php +++ /dev/null @@ -1,186 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Comment; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class SingleLineCommentStyleFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var bool - */ - private $asteriskEnabled; - - /** - * @var bool - */ - private $hashEnabled; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->asteriskEnabled = \in_array('asterisk', $this->configuration['comment_types'], true); - $this->hashEnabled = \in_array('hash', $this->configuration['comment_types'], true); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Single-line comments and multi-line comments with only one line of actual content should use the `//` syntax.', - [ - new CodeSample( - ' ['asterisk']] - ), - new CodeSample( - " ['hash']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after HeaderCommentFixer, NoUselessReturnFixer, PhpdocToCommentFixer. - */ - public function getPriority(): int - { - return -31; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_COMMENT)) { - continue; - } - - $content = $token->getContent(); - $commentContent = substr($content, 2, -2) ?: ''; - - if ($this->hashEnabled && str_starts_with($content, '#')) { - if (isset($content[1]) && '[' === $content[1]) { - continue; // This might be an attribute on PHP8, do not change - } - - $tokens[$index] = new Token([$token->getId(), '//'.substr($content, 1)]); - - continue; - } - - if ( - !$this->asteriskEnabled - || str_contains($commentContent, '?>') - || !str_starts_with($content, '/*') - || 1 === Preg::match('/[^\s\*].*\R.*[^\s\*]/s', $commentContent) - ) { - continue; - } - - $nextTokenIndex = $index + 1; - if (isset($tokens[$nextTokenIndex])) { - $nextToken = $tokens[$nextTokenIndex]; - if (!$nextToken->isWhitespace() || 1 !== Preg::match('/\R/', $nextToken->getContent())) { - continue; - } - - $tokens[$nextTokenIndex] = new Token([$nextToken->getId(), ltrim($nextToken->getContent(), " \t")]); - } - - $content = '//'; - if (1 === Preg::match('/[^\s\*]/', $commentContent)) { - $content = '// '.Preg::replace('/[\s\*]*([^\s\*](?:.+[^\s\*])?)[\s\*]*/', '\1', $commentContent); - } - $tokens[$index] = new Token([$token->getId(), $content]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('comment_types', 'List of comment types to fix')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(['asterisk', 'hash'])]) - ->setDefault(['asterisk', 'hash']) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php deleted file mode 100644 index 1cc18ad1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php +++ /dev/null @@ -1,47 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; - -/** - * @author Dariusz Rumiński - */ -interface ConfigurableFixerInterface extends FixerInterface -{ - /** - * Set configuration. - * - * New configuration must override current one, not patch it. - * Using empty array makes fixer to use default configuration - * (or reset configuration from previously configured back to default one). - * - * Some fixers may have no configuration, then - simply don't implement this interface. - * Other ones may have configuration that will change behavior of fixer, - * eg `php_unit_strict` fixer allows to configure which methods should be fixed. - * Finally, some fixers need configuration to work, eg `header_comment`. - * - * @param array $configuration configuration depends on Fixer - * - * @throws InvalidFixerConfigurationException - */ - public function configure(array $configuration): void; - - /** - * Defines the available configuration options of the fixer. - */ - public function getConfigurationDefinition(): FixerConfigurationResolverInterface; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php deleted file mode 100644 index 509f1372..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php +++ /dev/null @@ -1,305 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ConstantNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Filippo Tessarotto - */ -final class NativeConstantInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private array $constantsToEscape = []; - - /** - * @var array - */ - private array $caseInsensitiveConstantsToEscape = []; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Add leading `\` before constant invocation of internal constant to speed up resolving. Constant name match is case-sensitive, except for `null`, `false` and `true`.', - [ - new CodeSample(" 'namespaced'] - ), - new CodeSample( - " [ - 'MY_CUSTOM_PI', - ], - ] - ), - new CodeSample( - " false, - 'include' => [ - 'MY_CUSTOM_PI', - ], - ] - ), - new CodeSample( - " [ - 'M_PI', - ], - ] - ), - ], - null, - 'Risky when any of the constants are namespaced or overridden.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before GlobalNamespaceImportFixer. - */ - public function getPriority(): int - { - return 10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $uniqueConfiguredExclude = array_unique($this->configuration['exclude']); - - // Case-sensitive constants handling - $constantsToEscape = array_values($this->configuration['include']); - - if (true === $this->configuration['fix_built_in']) { - $getDefinedConstants = get_defined_constants(true); - unset($getDefinedConstants['user']); - foreach ($getDefinedConstants as $constants) { - $constantsToEscape = array_merge($constantsToEscape, array_keys($constants)); - } - } - - $constantsToEscape = array_diff( - array_unique($constantsToEscape), - $uniqueConfiguredExclude - ); - - // Case-insensitive constants handling - static $caseInsensitiveConstants = ['null', 'false', 'true']; - $caseInsensitiveConstantsToEscape = []; - - foreach ($constantsToEscape as $constantIndex => $constant) { - $loweredConstant = strtolower($constant); - if (\in_array($loweredConstant, $caseInsensitiveConstants, true)) { - $caseInsensitiveConstantsToEscape[] = $loweredConstant; - unset($constantsToEscape[$constantIndex]); - } - } - - $caseInsensitiveConstantsToEscape = array_diff( - array_unique($caseInsensitiveConstantsToEscape), - array_map( - static fn (string $function): string => strtolower($function), - $uniqueConfiguredExclude, - ), - ); - - // Store the cache - $this->constantsToEscape = array_fill_keys($constantsToEscape, true); - ksort($this->constantsToEscape); - - $this->caseInsensitiveConstantsToEscape = array_fill_keys($caseInsensitiveConstantsToEscape, true); - ksort($this->caseInsensitiveConstantsToEscape); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if ('all' === $this->configuration['scope']) { - $this->fixConstantInvocations($tokens, 0, \count($tokens) - 1); - - return; - } - - $namespaces = (new NamespacesAnalyzer())->getDeclarations($tokens); - - // 'scope' is 'namespaced' here - /** @var NamespaceAnalysis $namespace */ - foreach (array_reverse($namespaces) as $namespace) { - if ($namespace->isGlobalNamespace()) { - continue; - } - - $this->fixConstantInvocations($tokens, $namespace->getScopeStartIndex(), $namespace->getScopeEndIndex()); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $constantChecker = static function (array $value): bool { - foreach ($value as $constantName) { - if (!\is_string($constantName) || '' === trim($constantName) || trim($constantName) !== $constantName) { - throw new InvalidOptionsException(sprintf( - 'Each element must be a non-empty, trimmed string, got "%s" instead.', - get_debug_type($constantName) - )); - } - } - - return true; - }; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('fix_built_in', 'Whether to fix constants returned by `get_defined_constants`. User constants are not accounted in this list and must be specified in the include one.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('include', 'List of additional constants to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([$constantChecker]) - ->setDefault([]) - ->getOption(), - (new FixerOptionBuilder('exclude', 'List of constants to ignore.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([$constantChecker]) - ->setDefault(['null', 'false', 'true']) - ->getOption(), - (new FixerOptionBuilder('scope', 'Only fix constant invocations that are made within a namespace or fix all.')) - ->setAllowedValues(['all', 'namespaced']) - ->setDefault('all') - ->getOption(), - (new FixerOptionBuilder('strict', 'Whether leading `\` of constant invocation not meant to have it should be removed.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function fixConstantInvocations(Tokens $tokens, int $startIndex, int $endIndex): void - { - $useDeclarations = (new NamespaceUsesAnalyzer())->getDeclarationsFromTokens($tokens); - $useConstantDeclarations = []; - - foreach ($useDeclarations as $use) { - if ($use->isConstant()) { - $useConstantDeclarations[$use->getShortName()] = true; - } - } - - $tokenAnalyzer = new TokensAnalyzer($tokens); - - for ($index = $endIndex; $index > $startIndex; --$index) { - $token = $tokens[$index]; - - // test if we are at a constant call - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - if (!$tokenAnalyzer->isConstantInvocation($index)) { - continue; - } - - $tokenContent = $token->getContent(); - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if (!isset($this->constantsToEscape[$tokenContent]) && !isset($this->caseInsensitiveConstantsToEscape[strtolower($tokenContent)])) { - if (false === $this->configuration['strict']) { - continue; - } - - if (!$tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - $prevPrevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - - if ($tokens[$prevPrevIndex]->isGivenKind(T_STRING)) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - - continue; - } - - if (isset($useConstantDeclarations[$tokenContent])) { - continue; - } - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - $tokens->insertAt($index, new Token([T_NS_SEPARATOR, '\\'])); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php deleted file mode 100644 index 4ab3ce93..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php +++ /dev/null @@ -1,266 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\AlternativeSyntaxAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ControlStructureBracesFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The body of each control structure MUST be enclosed within braces.', - [new CodeSample("getControlTokens(); - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind($controlTokens)) { - continue; - } - - if ( - $token->isGivenKind(T_ELSE) - && $tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_IF) - ) { - continue; - } - - $parenthesisEndIndex = $this->findParenthesisEnd($tokens, $index); - $nextAfterParenthesisEndIndex = $tokens->getNextMeaningfulToken($parenthesisEndIndex); - $tokenAfterParenthesis = $tokens[$nextAfterParenthesisEndIndex]; - - if ($tokenAfterParenthesis->equalsAny([';', '{', ':'])) { - continue; - } - - $statementEndIndex = null; - - if ($tokenAfterParenthesis->isGivenKind([T_IF, T_FOR, T_FOREACH, T_SWITCH, T_WHILE])) { - $tokenAfterParenthesisBlockEnd = $tokens->findBlockEnd( // go to ')' - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $tokens->getNextMeaningfulToken($nextAfterParenthesisEndIndex) - ); - - if ($tokens[$tokens->getNextMeaningfulToken($tokenAfterParenthesisBlockEnd)]->equals(':')) { - $statementEndIndex = $alternativeSyntaxAnalyzer->findAlternativeSyntaxBlockEnd($tokens, $nextAfterParenthesisEndIndex); - - $tokenAfterStatementEndIndex = $tokens->getNextMeaningfulToken($statementEndIndex); - if ($tokens[$tokenAfterStatementEndIndex]->equals(';')) { - $statementEndIndex = $tokenAfterStatementEndIndex; - } - } - } - - if (null === $statementEndIndex) { - $statementEndIndex = $this->findStatementEnd($tokens, $parenthesisEndIndex); - } - - $tokensToInsertAfterStatement = [ - new Token([T_WHITESPACE, ' ']), - new Token('}'), - ]; - - if (!$tokens[$statementEndIndex]->equalsAny([';', '}'])) { - array_unshift($tokensToInsertAfterStatement, new Token(';')); - } - - $tokens->insertSlices([$statementEndIndex + 1 => $tokensToInsertAfterStatement]); - - // insert opening brace - $tokens->insertSlices([$parenthesisEndIndex + 1 => [ - new Token([T_WHITESPACE, ' ']), - new Token('{'), - ]]); - } - } - - private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int - { - $nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex); - $nextToken = $tokens[$nextIndex]; - - if (!$nextToken->equals('(')) { - return $structureTokenIndex; - } - - return $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $nextIndex); - } - - private function findStatementEnd(Tokens $tokens, int $parenthesisEndIndex): int - { - $nextIndex = $tokens->getNextMeaningfulToken($parenthesisEndIndex); - $nextToken = $tokens[$nextIndex]; - - if (!$nextToken) { - return $parenthesisEndIndex; - } - - if ($nextToken->equals('{')) { - return $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $nextIndex); - } - - if ($nextToken->isGivenKind($this->getControlTokens())) { - $parenthesisEndIndex = $this->findParenthesisEnd($tokens, $nextIndex); - - $endIndex = $this->findStatementEnd($tokens, $parenthesisEndIndex); - - if ($nextToken->isGivenKind([T_IF, T_TRY, T_DO])) { - $openingTokenKind = $nextToken->getId(); - - while (true) { - $nextIndex = $tokens->getNextMeaningfulToken($endIndex); - $nextToken = isset($nextIndex) ? $tokens[$nextIndex] : null; - if ($nextToken && $nextToken->isGivenKind($this->getControlContinuationTokensForOpeningToken($openingTokenKind))) { - $parenthesisEndIndex = $this->findParenthesisEnd($tokens, $nextIndex); - - $endIndex = $this->findStatementEnd($tokens, $parenthesisEndIndex); - - if ($nextToken->isGivenKind($this->getFinalControlContinuationTokensForOpeningToken($openingTokenKind))) { - return $endIndex; - } - } else { - break; - } - } - } - - return $endIndex; - } - - $index = $parenthesisEndIndex; - - while (true) { - $token = $tokens[++$index]; - - // if there is some block in statement (eg lambda function) we need to skip it - if ($token->equals('{')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if ($token->equals(';')) { - return $index; - } - - if ($token->isGivenKind(T_CLOSE_TAG)) { - return $tokens->getPrevNonWhitespace($index); - } - } - } - - /** - * @return list - */ - private function getControlTokens(): array - { - static $tokens = [ - T_DECLARE, - T_DO, - T_ELSE, - T_ELSEIF, - T_FINALLY, - T_FOR, - T_FOREACH, - T_IF, - T_WHILE, - T_TRY, - T_CATCH, - T_SWITCH, - ]; - - return $tokens; - } - - /** - * @return list - */ - private function getControlContinuationTokensForOpeningToken(int $openingTokenKind): array - { - if (T_IF === $openingTokenKind) { - return [ - T_ELSE, - T_ELSEIF, - ]; - } - - if (T_DO === $openingTokenKind) { - return [T_WHILE]; - } - - if (T_TRY === $openingTokenKind) { - return [ - T_CATCH, - T_FINALLY, - ]; - } - - return []; - } - - /** - * @return list - */ - private function getFinalControlContinuationTokensForOpeningToken(int $openingTokenKind): array - { - if (T_IF === $openingTokenKind) { - return [T_ELSE]; - } - - if (T_TRY === $openingTokenKind) { - return [T_FINALLY]; - } - - return []; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php deleted file mode 100644 index 92ca19ad..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php +++ /dev/null @@ -1,146 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -final class ControlStructureContinuationPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const NEXT_LINE = 'next_line'; - - /** - * @internal - */ - public const SAME_LINE = 'same_line'; - - private const CONTROL_CONTINUATION_TOKENS = [ - T_CATCH, - T_ELSE, - T_ELSEIF, - T_FINALLY, - T_WHILE, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Control structure continuation keyword must be on the configured line.', - [ - new CodeSample( - ' self::NEXT_LINE] - ), - ] - ); - } - - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(self::CONTROL_CONTINUATION_TOKENS); - } - - /** - * {@inheritdoc} - * - * Must run after ControlStructureBracesFixer. - */ - public function getPriority(): int - { - return parent::getPriority(); - } - - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('position', 'the position of the keyword that continues the control structure.')) - ->setAllowedValues([self::NEXT_LINE, self::SAME_LINE]) - ->setDefault(self::SAME_LINE) - ->getOption(), - ]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->fixControlContinuationBraces($tokens); - } - - private function fixControlContinuationBraces(Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 0 < $index; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(self::CONTROL_CONTINUATION_TOKENS)) { - continue; - } - - $prevIndex = $tokens->getPrevNonWhitespace($index); - $prevToken = $tokens[$prevIndex]; - - if (!$prevToken->equals('}')) { - continue; - } - - if ($token->isGivenKind(T_WHILE)) { - $prevIndex = $tokens->getPrevMeaningfulToken( - $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $prevIndex) - ); - - if (!$tokens[$prevIndex]->isGivenKind(T_DO)) { - continue; - } - } - - $tokens->ensureWhitespaceAtIndex( - $index - 1, - 1, - self::NEXT_LINE === $this->configuration['position'] ? - $this->whitespacesConfig->getLineEnding().WhitespacesAnalyzer::detectIndent($tokens, $index) - : ' ' - ); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php deleted file mode 100644 index dc50f2ba..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ElseifFixer.php +++ /dev/null @@ -1,104 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶5.1. - * - * @author Dariusz Rumiński - */ -final class ElseifFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The keyword `elseif` should be used instead of `else if` so that all control keywords look like single words.', - [new CodeSample("isAllTokenKindsFound([T_IF, T_ELSE]); - } - - /** - * Replace all `else if` (T_ELSE T_IF) with `elseif` (T_ELSEIF). - * - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_ELSE)) { - continue; - } - - $ifTokenIndex = $tokens->getNextMeaningfulToken($index); - - // if next meaningful token is not T_IF - continue searching, this is not the case for fixing - if (!$tokens[$ifTokenIndex]->isGivenKind(T_IF)) { - continue; - } - - // if next meaningful token is T_IF, but uses an alternative syntax - this is not the case for fixing neither - $conditionEndBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $tokens->getNextMeaningfulToken($ifTokenIndex)); - $afterConditionIndex = $tokens->getNextMeaningfulToken($conditionEndBraceIndex); - if ($tokens[$afterConditionIndex]->equals(':')) { - continue; - } - - // now we have T_ELSE following by T_IF with no alternative syntax so we could fix this - // 1. clear whitespaces between T_ELSE and T_IF - $tokens->clearAt($index + 1); - - // 2. change token from T_ELSE into T_ELSEIF - $tokens[$index] = new Token([T_ELSEIF, 'elseif']); - - // 3. clear succeeding T_IF - $tokens->clearAt($ifTokenIndex); - - $beforeIfTokenIndex = $tokens->getPrevNonWhitespace($ifTokenIndex); - - // 4. clear extra whitespace after T_IF in T_COMMENT,T_WHITESPACE?,T_IF,T_WHITESPACE sequence - if ($tokens[$beforeIfTokenIndex]->isComment() && $tokens[$ifTokenIndex + 1]->isWhitespace()) { - $tokens->clearAt($ifTokenIndex + 1); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php deleted file mode 100644 index f0898a6f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopBodyFixer.php +++ /dev/null @@ -1,137 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class EmptyLoopBodyFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const STYLE_BRACES = 'braces'; - - private const STYLE_SEMICOLON = 'semicolon'; - - private const TOKEN_LOOP_KINDS = [T_FOR, T_FOREACH, T_WHILE]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Empty loop-body must be in configured style.', - [ - new CodeSample(" 'braces', - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer, NoExtraBlankLinesFixer, NoTrailingWhitespaceFixer. - * Must run after NoEmptyStatementFixer. - */ - public function getPriority(): int - { - return 39; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(self::TOKEN_LOOP_KINDS); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (self::STYLE_BRACES === $this->configuration['style']) { - $analyzer = new TokensAnalyzer($tokens); - $fixLoop = static function (int $index, int $endIndex) use ($tokens, $analyzer): void { - if ($tokens[$index]->isGivenKind(T_WHILE) && $analyzer->isWhilePartOfDoWhile($index)) { - return; - } - - $semiColonIndex = $tokens->getNextMeaningfulToken($endIndex); - - if (!$tokens[$semiColonIndex]->equals(';')) { - return; - } - - $tokens[$semiColonIndex] = new Token('{'); - $tokens->insertAt($semiColonIndex + 1, new Token('}')); - }; - } else { - $fixLoop = static function (int $index, int $endIndex) use ($tokens): void { - $braceOpenIndex = $tokens->getNextMeaningfulToken($endIndex); - - if (!$tokens[$braceOpenIndex]->equals('{')) { - return; - } - - $braceCloseIndex = $tokens->getNextMeaningfulToken($braceOpenIndex); - - if (!$tokens[$braceCloseIndex]->equals('}')) { - return; - } - - $tokens[$braceOpenIndex] = new Token(';'); - $tokens->clearTokenAndMergeSurroundingWhitespace($braceCloseIndex); - }; - } - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind(self::TOKEN_LOOP_KINDS)) { - $endIndex = $tokens->getNextTokenOfKind($index, ['(']); // proceed to open '(' - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $endIndex); // proceed to close ')' - $fixLoop($index, $endIndex); // fix loop if needs fixing - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('style', 'Style of empty loop-bodies.')) - ->setAllowedTypes(['string']) - ->setAllowedValues([self::STYLE_BRACES, self::STYLE_SEMICOLON]) - ->setDefault(self::STYLE_SEMICOLON) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php deleted file mode 100644 index 7f82fc4a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/EmptyLoopConditionFixer.php +++ /dev/null @@ -1,200 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class EmptyLoopConditionFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const STYLE_FOR = 'for'; - - private const STYLE_WHILE = 'while'; - - private const TOKEN_LOOP_KINDS = [T_FOR, T_WHILE]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Empty loop-condition must be in configured style.', - [ - new CodeSample(" 'for']), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoExtraBlankLinesFixer, NoTrailingWhitespaceFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(self::TOKEN_LOOP_KINDS); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (self::STYLE_WHILE === $this->configuration['style']) { - $candidateLoopKinds = [T_FOR, T_WHILE]; - $replacement = [new Token([T_WHILE, 'while']), new Token([T_WHITESPACE, ' ']), new Token('('), new Token([T_STRING, 'true']), new Token(')')]; - - $fixLoop = static function (int $index, int $openIndex, int $endIndex) use ($tokens, $replacement): void { - if (self::isForLoopWithEmptyCondition($tokens, $index, $openIndex, $endIndex)) { - self::clearNotCommentsInRange($tokens, $index, $endIndex); - self::cloneAndInsert($tokens, $index, $replacement); - } elseif (self::isWhileLoopWithEmptyCondition($tokens, $index, $openIndex, $endIndex)) { - $doIndex = self::getDoIndex($tokens, $index); - - if (null !== $doIndex) { - self::clearNotCommentsInRange($tokens, $index, $tokens->getNextMeaningfulToken($endIndex)); // clear including `;` - $tokens->clearAt($doIndex); - self::cloneAndInsert($tokens, $doIndex, $replacement); - } - } - }; - } else { // self::STYLE_FOR - $candidateLoopKinds = [T_WHILE]; - $replacement = [new Token([T_FOR, 'for']), new Token('('), new Token(';'), new Token(';'), new Token(')')]; - - $fixLoop = static function (int $index, int $openIndex, int $endIndex) use ($tokens, $replacement): void { - if (!self::isWhileLoopWithEmptyCondition($tokens, $index, $openIndex, $endIndex)) { - return; - } - - $doIndex = self::getDoIndex($tokens, $index); - - if (null === $doIndex) { - self::clearNotCommentsInRange($tokens, $index, $endIndex); - self::cloneAndInsert($tokens, $index, $replacement); - } else { - self::clearNotCommentsInRange($tokens, $index, $tokens->getNextMeaningfulToken($endIndex)); // clear including `;` - $tokens->clearAt($doIndex); - self::cloneAndInsert($tokens, $doIndex, $replacement); - } - }; - } - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind($candidateLoopKinds)) { - $openIndex = $tokens->getNextTokenOfKind($index, ['(']); // proceed to open '(' - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); // proceed to close ')' - $fixLoop($index, $openIndex, $endIndex); // fix loop if needed - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('style', 'Style of empty loop-condition.')) - ->setAllowedTypes(['string']) - ->setAllowedValues([self::STYLE_WHILE, self::STYLE_FOR]) - ->setDefault(self::STYLE_WHILE) - ->getOption(), - ]); - } - - private static function clearNotCommentsInRange(Tokens $tokens, int $indexStart, int $indexEnd): void - { - for ($i = $indexStart; $i <= $indexEnd; ++$i) { - if (!$tokens[$i]->isComment()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - } - } - - /** - * @param Token[] $replacement - */ - private static function cloneAndInsert(Tokens $tokens, int $index, array $replacement): void - { - $replacementClones = []; - - foreach ($replacement as $token) { - $replacementClones[] = clone $token; - } - - $tokens->insertAt($index, $replacementClones); - } - - private static function getDoIndex(Tokens $tokens, int $index): ?int - { - $endIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$endIndex]->equals('}')) { - return null; - } - - $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $endIndex); - $index = $tokens->getPrevMeaningfulToken($startIndex); - - return null === $index || !$tokens[$index]->isGivenKind(T_DO) ? null : $index; - } - - private static function isForLoopWithEmptyCondition(Tokens $tokens, int $index, int $openIndex, int $endIndex): bool - { - if (!$tokens[$index]->isGivenKind(T_FOR)) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($openIndex); - - if (null === $index || !$tokens[$index]->equals(';')) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index); - - return null !== $index && $tokens[$index]->equals(';') && $endIndex === $tokens->getNextMeaningfulToken($index); - } - - private static function isWhileLoopWithEmptyCondition(Tokens $tokens, int $index, int $openIndex, int $endIndex): bool - { - if (!$tokens[$index]->isGivenKind(T_WHILE)) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($openIndex); - - return null !== $index && $tokens[$index]->equals([T_STRING, 'true']) && $endIndex === $tokens->getNextMeaningfulToken($index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php deleted file mode 100644 index 99a3c85a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/IncludeFixer.php +++ /dev/null @@ -1,162 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\BlocksAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Sebastiaan Stok - * @author Dariusz Rumiński - * @author Kuba Werłos - */ -final class IncludeFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Include/Require and file path should be divided with a single space. File path should not be placed under brackets.', - [ - new CodeSample( - 'isAnyTokenKindsFound([T_REQUIRE, T_REQUIRE_ONCE, T_INCLUDE, T_INCLUDE_ONCE]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->clearIncludies($tokens, $this->findIncludies($tokens)); - } - - /** - * @param array $includies - */ - private function clearIncludies(Tokens $tokens, array $includies): void - { - $blocksAnalyzer = new BlocksAnalyzer(); - - foreach ($includies as $includy) { - if ($includy['end'] && !$tokens[$includy['end']]->isGivenKind(T_CLOSE_TAG)) { - $afterEndIndex = $tokens->getNextNonWhitespace($includy['end']); - - if (null === $afterEndIndex || !$tokens[$afterEndIndex]->isComment()) { - $tokens->removeLeadingWhitespace($includy['end']); - } - } - - $braces = $includy['braces']; - - if (null !== $braces) { - $prevIndex = $tokens->getPrevMeaningfulToken($includy['begin']); - $nextIndex = $tokens->getNextMeaningfulToken($braces['close']); - - // Include is also legal as function parameter or condition statement but requires being wrapped then. - if (!$tokens[$nextIndex]->equalsAny([';', [T_CLOSE_TAG]]) && !$blocksAnalyzer->isBlock($tokens, $prevIndex, $nextIndex)) { - continue; - } - - $this->removeWhitespaceAroundIfPossible($tokens, $braces['open']); - $this->removeWhitespaceAroundIfPossible($tokens, $braces['close']); - $tokens->clearTokenAndMergeSurroundingWhitespace($braces['open']); - $tokens->clearTokenAndMergeSurroundingWhitespace($braces['close']); - } - - $nextIndex = $tokens->getNonEmptySibling($includy['begin'], 1); - - if ($tokens[$nextIndex]->isWhitespace()) { - $tokens[$nextIndex] = new Token([T_WHITESPACE, ' ']); - } elseif (null !== $braces || $tokens[$nextIndex]->isGivenKind([T_VARIABLE, T_CONSTANT_ENCAPSED_STRING, T_COMMENT])) { - $tokens->insertAt($includy['begin'] + 1, new Token([T_WHITESPACE, ' '])); - } - } - } - - /** - * @return array - */ - private function findIncludies(Tokens $tokens): array - { - static $includyTokenKinds = [T_REQUIRE, T_REQUIRE_ONCE, T_INCLUDE, T_INCLUDE_ONCE]; - - $includies = []; - - foreach ($tokens->findGivenKind($includyTokenKinds) as $includyTokens) { - foreach ($includyTokens as $index => $token) { - $includy = [ - 'begin' => $index, - 'braces' => null, - 'end' => $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]), - ]; - - $braceOpenIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$braceOpenIndex]->equals('(')) { - $braceCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $braceOpenIndex); - - $includy['braces'] = [ - 'open' => $braceOpenIndex, - 'close' => $braceCloseIndex, - ]; - } - - $includies[$index] = $includy; - } - } - - krsort($includies); - - return $includies; - } - - private function removeWhitespaceAroundIfPossible(Tokens $tokens, int $index): void - { - $nextIndex = $tokens->getNextNonWhitespace($index); - - if (null === $nextIndex || !$tokens[$nextIndex]->isComment()) { - $tokens->removeLeadingWhitespace($index); - } - - $prevIndex = $tokens->getPrevNonWhitespace($index); - - if (null === $prevIndex || !$tokens[$prevIndex]->isComment()) { - $tokens->removeTrailingWhitespace($index); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php deleted file mode 100644 index 0c74585a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoAlternativeSyntaxFixer.php +++ /dev/null @@ -1,244 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Eddilbert Macharia - */ -final class NoAlternativeSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace control structure alternative syntax to use braces.', - [ - new CodeSample( - "\nLorem ipsum.\n\n", - ['fix_non_monolithic_code' => true] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->hasAlternativeSyntax() && (true === $this->configuration['fix_non_monolithic_code'] || $tokens->isMonolithicPhp()); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer, ElseifFixer, NoSuperfluousElseifFixer, NoUnneededControlParenthesesFixer, NoUselessElseFixer, SwitchContinueToBreakFixer. - */ - public function getPriority(): int - { - return 42; - } - - /** - * {@inheritDoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('fix_non_monolithic_code', 'Whether to also fix code with inline HTML.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) // @TODO change to "false" on next major 4.0 - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - $this->fixElseif($index, $token, $tokens); - $this->fixElse($index, $token, $tokens); - $this->fixOpenCloseControls($index, $token, $tokens); - } - } - - private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int - { - $nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex); - $nextToken = $tokens[$nextIndex]; - - return $nextToken->equals('(') - ? $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $nextIndex) - : $structureTokenIndex // return if next token is not opening parenthesis - ; - } - - /** - * Handle both extremes of the control structures. - * e.g. if(): or endif;. - * - * @param int $index the index of the token being processed - * @param Token $token the token being processed - * @param Tokens $tokens the collection of tokens - */ - private function fixOpenCloseControls(int $index, Token $token, Tokens $tokens): void - { - if ($token->isGivenKind([T_IF, T_FOREACH, T_WHILE, T_FOR, T_SWITCH, T_DECLARE])) { - $openIndex = $tokens->getNextTokenOfKind($index, ['(']); - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - $afterParenthesisIndex = $tokens->getNextMeaningfulToken($closeIndex); - $afterParenthesis = $tokens[$afterParenthesisIndex]; - - if (!$afterParenthesis->equals(':')) { - return; - } - - $items = []; - - if (!$tokens[$afterParenthesisIndex - 1]->isWhitespace()) { - $items[] = new Token([T_WHITESPACE, ' ']); - } - - $items[] = new Token('{'); - - if (!$tokens[$afterParenthesisIndex + 1]->isWhitespace()) { - $items[] = new Token([T_WHITESPACE, ' ']); - } - - $tokens->clearAt($afterParenthesisIndex); - $tokens->insertAt($afterParenthesisIndex, $items); - } - - if (!$token->isGivenKind([T_ENDIF, T_ENDFOREACH, T_ENDWHILE, T_ENDFOR, T_ENDSWITCH, T_ENDDECLARE])) { - return; - } - - $nextTokenIndex = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$nextTokenIndex]; - $tokens[$index] = new Token('}'); - - if ($nextToken->equals(';')) { - $tokens->clearAt($nextTokenIndex); - } - } - - /** - * Handle the else: cases. - * - * @param int $index the index of the token being processed - * @param Token $token the token being processed - * @param Tokens $tokens the collection of tokens - */ - private function fixElse(int $index, Token $token, Tokens $tokens): void - { - if (!$token->isGivenKind(T_ELSE)) { - return; - } - - $tokenAfterElseIndex = $tokens->getNextMeaningfulToken($index); - $tokenAfterElse = $tokens[$tokenAfterElseIndex]; - - if (!$tokenAfterElse->equals(':')) { - return; - } - - $this->addBraces($tokens, new Token([T_ELSE, 'else']), $index, $tokenAfterElseIndex); - } - - /** - * Handle the elsif(): cases. - * - * @param int $index the index of the token being processed - * @param Token $token the token being processed - * @param Tokens $tokens the collection of tokens - */ - private function fixElseif(int $index, Token $token, Tokens $tokens): void - { - if (!$token->isGivenKind(T_ELSEIF)) { - return; - } - - $parenthesisEndIndex = $this->findParenthesisEnd($tokens, $index); - $tokenAfterParenthesisIndex = $tokens->getNextMeaningfulToken($parenthesisEndIndex); - $tokenAfterParenthesis = $tokens[$tokenAfterParenthesisIndex]; - - if (!$tokenAfterParenthesis->equals(':')) { - return; - } - - $this->addBraces($tokens, new Token([T_ELSEIF, 'elseif']), $index, $tokenAfterParenthesisIndex); - } - - /** - * Add opening and closing braces to the else: and elseif: cases. - * - * @param Tokens $tokens the tokens collection - * @param Token $token the current token - * @param int $index the current token index - * @param int $colonIndex the index of the colon - */ - private function addBraces(Tokens $tokens, Token $token, int $index, int $colonIndex): void - { - $items = [ - new Token('}'), - new Token([T_WHITESPACE, ' ']), - $token, - ]; - - if (!$tokens[$index + 1]->isWhitespace()) { - $items[] = new Token([T_WHITESPACE, ' ']); - } - - $tokens->clearAt($index); - $tokens->insertAt( - $index, - $items - ); - - // increment the position of the colon by number of items inserted - $colonIndex += \count($items); - - $items = [new Token('{')]; - - if (!$tokens[$colonIndex + 1]->isWhitespace()) { - $items[] = new Token([T_WHITESPACE, ' ']); - } - - $tokens->clearAt($colonIndex); - $tokens->insertAt( - $colonIndex, - $items - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php deleted file mode 100644 index dfcb2088..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.php +++ /dev/null @@ -1,350 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\OptionsResolver\Options; - -/** - * Fixer for rule defined in PSR2 ¶5.2. - */ -final class NoBreakCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must be a comment when fall-through is intentional in a non-empty case body.', - [ - new CodeSample( - ' 'some comment'] - ), - ], - 'Adds a "no break" comment before fall-through cases, and removes it if there is no fall-through.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_SWITCH); - } - - /** - * {@inheritdoc} - * - * Must run after NoUselessElseFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('comment_text', 'The text to use in the added comment and to detect it.')) - ->setAllowedTypes(['string']) - ->setAllowedValues([ - static function (string $value): bool { - if (Preg::match('/\R/', $value)) { - throw new InvalidOptionsException('The comment text must not contain new lines.'); - } - - return true; - }, - ]) - ->setNormalizer(static function (Options $options, string $value): string { - return rtrim($value); - }) - ->setDefault('no break') - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index >= 0; --$index) { - if ($tokens[$index]->isGivenKind(T_DEFAULT)) { - if ($tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_DOUBLE_ARROW)) { - continue; // this is "default" from "match" - } - } elseif (!$tokens[$index]->isGivenKind(T_CASE)) { - continue; - } - - $this->fixCase($tokens, $tokens->getNextTokenOfKind($index, [':', ';'])); - } - } - - private function fixCase(Tokens $tokens, int $casePosition): void - { - $empty = true; - $fallThrough = true; - $commentPosition = null; - - for ($i = $casePosition + 1, $max = \count($tokens); $i < $max; ++$i) { - if ($tokens[$i]->isGivenKind([T_SWITCH, T_IF, T_ELSE, T_ELSEIF, T_FOR, T_FOREACH, T_WHILE, T_DO, T_FUNCTION, T_CLASS])) { - $empty = false; - $i = $this->getStructureEnd($tokens, $i); - - continue; - } - - if ($tokens[$i]->isGivenKind([T_BREAK, T_CONTINUE, T_RETURN, T_EXIT, T_GOTO])) { - $fallThrough = false; - - continue; - } - - if ($tokens[$i]->isGivenKind(T_THROW)) { - $previousIndex = $tokens->getPrevMeaningfulToken($i); - - if ($previousIndex === $casePosition || $tokens[$previousIndex]->equalsAny(['{', ';', '}', [T_OPEN_TAG]])) { - $fallThrough = false; - } - - continue; - } - - if ($tokens[$i]->equals('}') || $tokens[$i]->isGivenKind(T_ENDSWITCH)) { - if (null !== $commentPosition) { - $this->removeComment($tokens, $commentPosition); - } - - break; - } - - if ($this->isNoBreakComment($tokens[$i])) { - $commentPosition = $i; - - continue; - } - - if ($tokens[$i]->isGivenKind([T_CASE, T_DEFAULT])) { - if (!$empty && $fallThrough) { - if (null !== $commentPosition && $tokens->getPrevNonWhitespace($i) !== $commentPosition) { - $this->removeComment($tokens, $commentPosition); - $commentPosition = null; - } - - if (null === $commentPosition) { - $this->insertCommentAt($tokens, $i); - } else { - $text = $this->configuration['comment_text']; - $tokens[$commentPosition] = new Token([ - $tokens[$commentPosition]->getId(), - str_ireplace($text, $text, $tokens[$commentPosition]->getContent()), - ]); - - $this->ensureNewLineAt($tokens, $commentPosition); - } - } elseif (null !== $commentPosition) { - $this->removeComment($tokens, $commentPosition); - } - - break; - } - - if (!$tokens[$i]->isGivenKind([T_COMMENT, T_WHITESPACE])) { - $empty = false; - } - } - } - - private function isNoBreakComment(Token $token): bool - { - if (!$token->isComment()) { - return false; - } - - $text = preg_quote($this->configuration['comment_text'], '~'); - - return 1 === Preg::match("~^((//|#)\\s*{$text}\\s*)|(/\\*\\*?\\s*{$text}(\\s+.*)*\\*/)$~i", $token->getContent()); - } - - private function insertCommentAt(Tokens $tokens, int $casePosition): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - $newlinePosition = $this->ensureNewLineAt($tokens, $casePosition); - $newlineToken = $tokens[$newlinePosition]; - $nbNewlines = substr_count($newlineToken->getContent(), $lineEnding); - - if ($newlineToken->isGivenKind(T_OPEN_TAG) && Preg::match('/\R/', $newlineToken->getContent())) { - ++$nbNewlines; - } elseif ($tokens[$newlinePosition - 1]->isGivenKind(T_OPEN_TAG) && Preg::match('/\R/', $tokens[$newlinePosition - 1]->getContent())) { - ++$nbNewlines; - - if (!Preg::match('/\R/', $newlineToken->getContent())) { - $tokens[$newlinePosition] = new Token([$newlineToken->getId(), $lineEnding.$newlineToken->getContent()]); - } - } - - if ($nbNewlines > 1) { - Preg::match('/^(.*?)(\R\h*)$/s', $newlineToken->getContent(), $matches); - - $indent = WhitespacesAnalyzer::detectIndent($tokens, $newlinePosition - 1); - $tokens[$newlinePosition] = new Token([$newlineToken->getId(), $matches[1].$lineEnding.$indent]); - $tokens->insertAt(++$newlinePosition, new Token([T_WHITESPACE, $matches[2]])); - } - - $tokens->insertAt($newlinePosition, new Token([T_COMMENT, '// '.$this->configuration['comment_text']])); - $this->ensureNewLineAt($tokens, $newlinePosition); - } - - /** - * @return int The newline token position - */ - private function ensureNewLineAt(Tokens $tokens, int $position): int - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - $content = $lineEnding.WhitespacesAnalyzer::detectIndent($tokens, $position); - $whitespaceToken = $tokens[$position - 1]; - - if (!$whitespaceToken->isGivenKind(T_WHITESPACE)) { - if ($whitespaceToken->isGivenKind(T_OPEN_TAG)) { - $content = Preg::replace('/\R/', '', $content); - - if (!Preg::match('/\R/', $whitespaceToken->getContent())) { - $tokens[$position - 1] = new Token([T_OPEN_TAG, Preg::replace('/\s+$/', $lineEnding, $whitespaceToken->getContent())]); - } - } - - if ('' !== $content) { - $tokens->insertAt($position, new Token([T_WHITESPACE, $content])); - - return $position; - } - - return $position - 1; - } - - if ($tokens[$position - 2]->isGivenKind(T_OPEN_TAG) && Preg::match('/\R/', $tokens[$position - 2]->getContent())) { - $content = Preg::replace('/^\R/', '', $content); - } - - if (!Preg::match('/\R/', $whitespaceToken->getContent())) { - $tokens[$position - 1] = new Token([T_WHITESPACE, $content]); - } - - return $position - 1; - } - - private function removeComment(Tokens $tokens, int $commentPosition): void - { - if ($tokens[$tokens->getPrevNonWhitespace($commentPosition)]->isGivenKind(T_OPEN_TAG)) { - $whitespacePosition = $commentPosition + 1; - $regex = '/^\R\h*/'; - } else { - $whitespacePosition = $commentPosition - 1; - $regex = '/\R\h*$/'; - } - - $whitespaceToken = $tokens[$whitespacePosition]; - - if ($whitespaceToken->isGivenKind(T_WHITESPACE)) { - $content = Preg::replace($regex, '', $whitespaceToken->getContent()); - - $tokens->ensureWhitespaceAtIndex($whitespacePosition, 0, $content); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($commentPosition); - } - - private function getStructureEnd(Tokens $tokens, int $position): int - { - $initialToken = $tokens[$position]; - - if ($initialToken->isGivenKind([T_FOR, T_FOREACH, T_WHILE, T_IF, T_ELSEIF, T_SWITCH, T_FUNCTION])) { - $position = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $tokens->getNextTokenOfKind($position, ['(']) - ); - } elseif ($initialToken->isGivenKind(T_CLASS)) { - $openParenthesisPosition = $tokens->getNextMeaningfulToken($position); - - if ('(' === $tokens[$openParenthesisPosition]->getContent()) { - $position = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $openParenthesisPosition - ); - } - } - - $position = $tokens->getNextMeaningfulToken($position); - - if ('{' !== $tokens[$position]->getContent()) { - return $tokens->getNextTokenOfKind($position, [';']); - } - - $position = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $position); - - if ($initialToken->isGivenKind(T_DO)) { - $position = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $tokens->getNextTokenOfKind($position, ['(']) - ); - - return $tokens->getNextTokenOfKind($position, [';']); - } - - return $position; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php deleted file mode 100644 index a8b6f924..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoSuperfluousElseifFixer.php +++ /dev/null @@ -1,110 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractNoUselessElseFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoSuperfluousElseifFixer extends AbstractNoUselessElseFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ELSE, T_ELSEIF]); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replaces superfluous `elseif` with `if`.', - [ - new CodeSample(" $token) { - if ($this->isElseif($tokens, $index) && $this->isSuperfluousElse($tokens, $index)) { - $this->convertElseifToIf($tokens, $index); - } - } - } - - private function isElseif(Tokens $tokens, int $index): bool - { - return - $tokens[$index]->isGivenKind(T_ELSEIF) - || ($tokens[$index]->isGivenKind(T_ELSE) && $tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_IF)) - ; - } - - private function convertElseifToIf(Tokens $tokens, int $index): void - { - if ($tokens[$index]->isGivenKind(T_ELSE)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } else { - $tokens[$index] = new Token([T_IF, 'if']); - } - - $whitespace = ''; - - for ($previous = $index - 1; $previous > 0; --$previous) { - $token = $tokens[$previous]; - if ($token->isWhitespace() && Preg::match('/(\R\N*)$/', $token->getContent(), $matches)) { - $whitespace = $matches[1]; - - break; - } - } - - if ('' === $whitespace) { - return; - } - - $previousToken = $tokens[$index - 1]; - - if (!$previousToken->isWhitespace()) { - $tokens->insertAt($index, new Token([T_WHITESPACE, $whitespace])); - } elseif (!Preg::match('/\R/', $previousToken->getContent())) { - $tokens[$index - 1] = new Token([T_WHITESPACE, $whitespace]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php deleted file mode 100644 index 00cb3da0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php +++ /dev/null @@ -1,60 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\Fixer\Basic\NoTrailingCommaInSinglelineFixer; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @deprecated - * - * @author Dariusz Rumiński - */ -final class NoTrailingCommaInListCallFixer extends AbstractProxyFixer implements DeprecatedFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove trailing commas in list function calls.', - [new CodeSample("proxyFixers); - } - - /** - * {@inheritdoc} - */ - protected function createProxyFixers(): array - { - $fixer = new NoTrailingCommaInSinglelineFixer(); - $fixer->configure(['elements' => ['array_destructuring']]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php deleted file mode 100644 index f8e6a6b8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.php +++ /dev/null @@ -1,754 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Sullivan Senechal - * @author Dariusz Rumiński - * @author Gregor Harlan - */ -final class NoUnneededControlParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var int[] - */ - private const BLOCK_TYPES = [ - Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE, - Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, - Tokens::BLOCK_TYPE_CURLY_BRACE, - Tokens::BLOCK_TYPE_DESTRUCTURING_SQUARE_BRACE, - Tokens::BLOCK_TYPE_DYNAMIC_PROP_BRACE, - Tokens::BLOCK_TYPE_DYNAMIC_VAR_BRACE, - Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - ]; - - private const BEFORE_TYPES = [ - ';', - '{', - [T_OPEN_TAG], - [T_OPEN_TAG_WITH_ECHO], - [T_ECHO], - [T_PRINT], - [T_RETURN], - [T_THROW], - [T_YIELD], - [T_YIELD_FROM], - [T_BREAK], - [T_CONTINUE], - // won't be fixed, but true in concept, helpful for fast check - [T_REQUIRE], - [T_REQUIRE_ONCE], - [T_INCLUDE], - [T_INCLUDE_ONCE], - ]; - - private const NOOP_TYPES = [ - '$', - [T_CONSTANT_ENCAPSED_STRING], - [T_DNUMBER], - [T_DOUBLE_COLON], - [T_LNUMBER], - [T_NS_SEPARATOR], - [T_OBJECT_OPERATOR], - [T_STRING], - [T_VARIABLE], - [T_STATIC], - // magic constants - [T_CLASS_C], - [T_DIR], - [T_FILE], - [T_FUNC_C], - [T_LINE], - [T_METHOD_C], - [T_NS_C], - [T_TRAIT_C], - ]; - - private const CONFIG_OPTIONS = [ - 'break', - 'clone', - 'continue', - 'echo_print', - 'negative_instanceof', - 'others', - 'return', - 'switch_case', - 'yield', - 'yield_from', - ]; - - private const TOKEN_TYPE_CONFIG_MAP = [ - T_BREAK => 'break', - T_CASE => 'switch_case', - T_CONTINUE => 'continue', - T_ECHO => 'echo_print', - T_PRINT => 'echo_print', - T_RETURN => 'return', - T_YIELD => 'yield', - T_YIELD_FROM => 'yield_from', - ]; - - // handled by the `include` rule - private const TOKEN_TYPE_NO_CONFIG = [ - T_REQUIRE, - T_REQUIRE_ONCE, - T_INCLUDE, - T_INCLUDE_ONCE, - ]; - - private TokensAnalyzer $tokensAnalyzer; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes unneeded parentheses around control statements.', - [ - new CodeSample( - ' ['break', 'continue']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before ConcatSpaceFixer, NoTrailingWhitespaceFixer. - * Must run after NoAlternativeSyntaxFixer. - */ - public function getPriority(): int - { - return 30; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(['(', CT::T_BRACE_CLASS_INSTANTIATION_OPEN]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->tokensAnalyzer = new TokensAnalyzer($tokens); - - foreach ($tokens as $openIndex => $token) { - if ($token->equals('(')) { - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - } elseif ($token->isGivenKind(CT::T_BRACE_CLASS_INSTANTIATION_OPEN)) { - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_BRACE_CLASS_INSTANTIATION, $openIndex); - } else { - continue; - } - - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($openIndex); - $afterCloseIndex = $tokens->getNextMeaningfulToken($closeIndex); - - // do a cheap check for negative case: `X()` - - if ($tokens->getNextMeaningfulToken($openIndex) === $closeIndex) { - if ($this->isExitStatement($tokens, $beforeOpenIndex)) { - $this->removeUselessParenthesisPair($tokens, $beforeOpenIndex, $afterCloseIndex, $openIndex, $closeIndex, 'others'); - } - - continue; - } - - // do a cheap check for negative case: `foo(1,2)` - - if ($this->isKnownNegativePre($tokens[$beforeOpenIndex])) { - continue; - } - - // check for the simple useless wrapped cases - - if ($this->isUselessWrapped($tokens, $beforeOpenIndex, $afterCloseIndex)) { - $this->removeUselessParenthesisPair($tokens, $beforeOpenIndex, $afterCloseIndex, $openIndex, $closeIndex, $this->getConfigType($tokens, $beforeOpenIndex)); - - continue; - } - - // handle `clone` statements - - if ($this->isCloneStatement($tokens, $beforeOpenIndex)) { - if ($this->isWrappedCloneArgument($tokens, $beforeOpenIndex, $openIndex, $closeIndex, $afterCloseIndex)) { - $this->removeUselessParenthesisPair($tokens, $beforeOpenIndex, $afterCloseIndex, $openIndex, $closeIndex, 'clone'); - } - - continue; - } - - // handle `instance of` statements - - $instanceOfIndex = $this->getIndexOfInstanceOfStatement($tokens, $openIndex, $closeIndex); - - if (null !== $instanceOfIndex) { - if ($this->isWrappedInstanceOf($tokens, $instanceOfIndex, $beforeOpenIndex, $openIndex, $closeIndex, $afterCloseIndex)) { - $this->removeUselessParenthesisPair( - $tokens, - $beforeOpenIndex, - $afterCloseIndex, - $openIndex, - $closeIndex, - $tokens[$beforeOpenIndex]->equals('!') ? 'negative_instanceof' : 'others' - ); - } - - continue; - } - - // last checks deal with operators, do not swap around - - if ($this->isWrappedPartOfOperation($tokens, $beforeOpenIndex, $openIndex, $closeIndex, $afterCloseIndex)) { - $this->removeUselessParenthesisPair($tokens, $beforeOpenIndex, $afterCloseIndex, $openIndex, $closeIndex, $this->getConfigType($tokens, $beforeOpenIndex)); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $defaults = array_filter( - self::CONFIG_OPTIONS, - static function (string $option): bool { - return 'negative_instanceof' !== $option && 'others' !== $option && 'yield_from' !== $option; - } - ); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('statements', 'List of control statements to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(self::CONFIG_OPTIONS)]) - ->setDefault(array_values($defaults)) - ->getOption(), - ]); - } - - private function isUselessWrapped(Tokens $tokens, int $beforeOpenIndex, int $afterCloseIndex): bool - { - return - $this->isSingleStatement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedFnBody($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedForElement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedLanguageConstructArgument($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedSequenceElement($tokens, $beforeOpenIndex, $afterCloseIndex) - ; - } - - private function isExitStatement(Tokens $tokens, int $beforeOpenIndex): bool - { - return $tokens[$beforeOpenIndex]->isGivenKind(T_EXIT); - } - - private function isCloneStatement(Tokens $tokens, int $beforeOpenIndex): bool - { - return $tokens[$beforeOpenIndex]->isGivenKind(T_CLONE); - } - - private function isWrappedCloneArgument(Tokens $tokens, int $beforeOpenIndex, int $openIndex, int $closeIndex, int $afterCloseIndex): bool - { - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - - if ( - !( - $tokens[$beforeOpenIndex]->equals('?') // For BC reasons - || $this->isSimpleAssignment($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isSingleStatement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedFnBody($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedForElement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedSequenceElement($tokens, $beforeOpenIndex, $afterCloseIndex) - ) - ) { - return false; - } - - $newCandidateIndex = $tokens->getNextMeaningfulToken($openIndex); - - if ($tokens[$newCandidateIndex]->isGivenKind(T_NEW)) { - $openIndex = $newCandidateIndex; // `clone (new X)`, `clone (new X())`, clone (new X(Y))` - } - - return !$this->containsOperation($tokens, $openIndex, $closeIndex); - } - - private function getIndexOfInstanceOfStatement(Tokens $tokens, int $openIndex, int $closeIndex): ?int - { - $instanceOfIndex = $tokens->findGivenKind(T_INSTANCEOF, $openIndex, $closeIndex); - - return 1 === \count($instanceOfIndex) ? array_key_first($instanceOfIndex) : null; - } - - private function isWrappedInstanceOf(Tokens $tokens, int $instanceOfIndex, int $beforeOpenIndex, int $openIndex, int $closeIndex, int $afterCloseIndex): bool - { - if ( - $this->containsOperation($tokens, $openIndex, $instanceOfIndex) - || $this->containsOperation($tokens, $instanceOfIndex, $closeIndex) - ) { - return false; - } - - if ($tokens[$beforeOpenIndex]->equals('!')) { - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - } - - return - $this->isSimpleAssignment($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isSingleStatement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedFnBody($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedForElement($tokens, $beforeOpenIndex, $afterCloseIndex) - || $this->isWrappedSequenceElement($tokens, $beforeOpenIndex, $afterCloseIndex) - ; - } - - private function isWrappedPartOfOperation(Tokens $tokens, int $beforeOpenIndex, int $openIndex, int $closeIndex, int $afterCloseIndex): bool - { - if ($this->containsOperation($tokens, $openIndex, $closeIndex)) { - return false; - } - - $boundariesMoved = false; - - if ($this->isPreUnaryOperation($tokens, $beforeOpenIndex)) { - $beforeOpenIndex = $this->getBeforePreUnaryOperation($tokens, $beforeOpenIndex); - $boundariesMoved = true; - } - - if ($this->isAccess($tokens, $afterCloseIndex)) { - $afterCloseIndex = $this->getAfterAccess($tokens, $afterCloseIndex); - $boundariesMoved = true; - - if ($this->tokensAnalyzer->isUnarySuccessorOperator($afterCloseIndex)) { // post unary operation are only valid here - $afterCloseIndex = $tokens->getNextMeaningfulToken($afterCloseIndex); - } - } - - if ($boundariesMoved) { - if ($this->isKnownNegativePre($tokens[$beforeOpenIndex])) { - return false; - } - - if ($this->isUselessWrapped($tokens, $beforeOpenIndex, $afterCloseIndex)) { - return true; - } - } - - // check if part of some operation sequence - - $beforeIsBinaryOperation = $this->tokensAnalyzer->isBinaryOperator($beforeOpenIndex); - $afterIsBinaryOperation = $this->tokensAnalyzer->isBinaryOperator($afterCloseIndex); - - if ($beforeIsBinaryOperation && $afterIsBinaryOperation) { - return true; // `+ (x) +` - } - - $beforeToken = $tokens[$beforeOpenIndex]; - $afterToken = $tokens[$afterCloseIndex]; - - $beforeIsBlockOpenOrComma = $beforeToken->equals(',') || null !== $this->getBlock($tokens, $beforeOpenIndex, true); - $afterIsBlockEndOrComma = $afterToken->equals(',') || null !== $this->getBlock($tokens, $afterCloseIndex, false); - - if (($beforeIsBlockOpenOrComma && $afterIsBinaryOperation) || ($beforeIsBinaryOperation && $afterIsBlockEndOrComma)) { - // $beforeIsBlockOpenOrComma && $afterIsBlockEndOrComma is covered by `isWrappedSequenceElement` - // `[ (x) +` or `+ (X) ]` or `, (X) +` or `+ (X) ,` - - return true; - } - - if ($tokens[$beforeOpenIndex]->equals('}')) { - $beforeIsStatementOpen = !$this->closeCurlyBelongsToDynamicElement($tokens, $beforeOpenIndex); - } else { - $beforeIsStatementOpen = $beforeToken->equalsAny(self::BEFORE_TYPES) || $beforeToken->isGivenKind(T_CASE); - } - - $afterIsStatementEnd = $afterToken->equalsAny([';', [T_CLOSE_TAG]]); - - return - ($beforeIsStatementOpen && $afterIsBinaryOperation) // `isGivenKind([T_PRINT, T_YIELD, T_YIELD_FROM, T_REQUIRE, T_REQUIRE_ONCE, T_INCLUDE, T_INCLUDE_ONCE])) { - return false; - } - - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - - return $this->isWrappedSequenceElement($tokens, $beforeOpenIndex, $afterCloseIndex); - } - - // any of `isGivenKind(T_CASE)) { - return $tokens[$afterCloseIndex]->equalsAny([':', ';']); // `switch case` - } - - if (!$tokens[$afterCloseIndex]->equalsAny([';', [T_CLOSE_TAG]])) { - return false; - } - - if ($tokens[$beforeOpenIndex]->equals('}')) { - return !$this->closeCurlyBelongsToDynamicElement($tokens, $beforeOpenIndex); - } - - return $tokens[$beforeOpenIndex]->equalsAny(self::BEFORE_TYPES); - } - - private function isSimpleAssignment(Tokens $tokens, int $beforeOpenIndex, int $afterCloseIndex): bool - { - return $tokens[$beforeOpenIndex]->equals('=') && $tokens[$afterCloseIndex]->equalsAny([';', [T_CLOSE_TAG]]); // `= (X) ;` - } - - private function isWrappedSequenceElement(Tokens $tokens, int $startIndex, int $endIndex): bool - { - $startIsComma = $tokens[$startIndex]->equals(','); - $endIsComma = $tokens[$endIndex]->equals(','); - - if ($startIsComma && $endIsComma) { - return true; // `,(X),` - } - - $blockTypeStart = $this->getBlock($tokens, $startIndex, true); - $blockTypeEnd = $this->getBlock($tokens, $endIndex, false); - - return - ($startIsComma && null !== $blockTypeEnd) // `,(X)]` - || ($endIsComma && null !== $blockTypeStart) // `[(X),` - || (null !== $blockTypeEnd && null !== $blockTypeStart) // any type of `{(X)}`, `[(X)]` and `((X))` - ; - } - - // any of `for( (X); ;(X)) ;` note that the middle element is covered as 'single statement' as it is `; (X) ;` - private function isWrappedForElement(Tokens $tokens, int $beforeOpenIndex, int $afterCloseIndex): bool - { - $forCandidateIndex = null; - - if ($tokens[$beforeOpenIndex]->equals('(') && $tokens[$afterCloseIndex]->equals(';')) { - $forCandidateIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - } elseif ($tokens[$afterCloseIndex]->equals(')') && $tokens[$beforeOpenIndex]->equals(';')) { - $forCandidateIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $afterCloseIndex); - $forCandidateIndex = $tokens->getPrevMeaningfulToken($forCandidateIndex); - } - - return null !== $forCandidateIndex && $tokens[$forCandidateIndex]->isGivenKind(T_FOR); - } - - // `fn() => (X);` - private function isWrappedFnBody(Tokens $tokens, int $beforeOpenIndex, int $afterCloseIndex): bool - { - if (!$tokens[$beforeOpenIndex]->isGivenKind(T_DOUBLE_ARROW)) { - return false; - } - - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - - if ($tokens[$beforeOpenIndex]->isGivenKind(T_STRING)) { - while (true) { - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - - if (!$tokens[$beforeOpenIndex]->isGivenKind([T_STRING, CT::T_TYPE_INTERSECTION, CT::T_TYPE_ALTERNATION])) { - break; - } - } - - if (!$tokens[$beforeOpenIndex]->isGivenKind(CT::T_TYPE_COLON)) { - return false; - } - - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - } - - if (!$tokens[$beforeOpenIndex]->equals(')')) { - return false; - } - - $beforeOpenIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $beforeOpenIndex); - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - - if ($tokens[$beforeOpenIndex]->isGivenKind(CT::T_RETURN_REF)) { - $beforeOpenIndex = $tokens->getPrevMeaningfulToken($beforeOpenIndex); - } - - if (!$tokens[$beforeOpenIndex]->isGivenKind(T_FN)) { - return false; - } - - return $tokens[$afterCloseIndex]->equalsAny([';', ',', [T_CLOSE_TAG]]); - } - - private function isPreUnaryOperation(Tokens $tokens, int $index): bool - { - return $this->tokensAnalyzer->isUnaryPredecessorOperator($index) || $tokens[$index]->isCast(); - } - - private function getBeforePreUnaryOperation(Tokens $tokens, int $index): int - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - } while ($this->isPreUnaryOperation($tokens, $index)); - - return $index; - } - - // array access `(X)[` or `(X){` or object access `(X)->` or `(X)?->` - private function isAccess(Tokens $tokens, int $index): bool - { - $token = $tokens[$index]; - - return $token->isObjectOperator() || $token->equals('[') || $token->isGivenKind([CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN]); - } - - private function getAfterAccess(Tokens $tokens, int $index): int - { - while (true) { - $block = $this->getBlock($tokens, $index, true); - - if (null !== $block) { - $index = $tokens->findBlockEnd($block['type'], $index); - $index = $tokens->getNextMeaningfulToken($index); - - continue; - } - - if ( - $tokens[$index]->isObjectOperator() - || $tokens[$index]->equalsAny(['$', [T_PAAMAYIM_NEKUDOTAYIM], [T_STRING], [T_VARIABLE]]) - ) { - $index = $tokens->getNextMeaningfulToken($index); - - continue; - } - - break; - } - - return $index; - } - - /** - * @return null|array{type: Tokens::BLOCK_TYPE_*, isStart: bool} - */ - private function getBlock(Tokens $tokens, int $index, bool $isStart): ?array - { - $block = Tokens::detectBlockType($tokens[$index]); - - return null !== $block && $isStart === $block['isStart'] && \in_array($block['type'], self::BLOCK_TYPES, true) ? $block : null; - } - - // cheap check on a tokens type before `(` of which we know the `(` will never be superfluous - private function isKnownNegativePre(Token $token): bool - { - static $knownNegativeTypes; - - if (null === $knownNegativeTypes) { - $knownNegativeTypes = [ - [CT::T_CLASS_CONSTANT], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [CT::T_RETURN_REF], - [CT::T_USE_LAMBDA], - [T_ARRAY], - [T_CATCH], - [T_CLASS], - [T_DECLARE], - [T_ELSEIF], - [T_EMPTY], - [T_EXIT], - [T_EVAL], - [T_FN], - [T_FOREACH], - [T_FOR], - [T_FUNCTION], - [T_HALT_COMPILER], - [T_IF], - [T_ISSET], - [T_LIST], - [T_STRING], - [T_SWITCH], - [T_STATIC], - [T_UNSET], - [T_VARIABLE], - [T_WHILE], - // handled by the `include` rule - [T_REQUIRE], - [T_REQUIRE_ONCE], - [T_INCLUDE], - [T_INCLUDE_ONCE], - ]; - - if (\defined('T_MATCH')) { // @TODO: drop condition and add directly in `$knownNegativeTypes` above when PHP 8.0+ is required - $knownNegativeTypes[] = T_MATCH; - } - } - - return $token->equalsAny($knownNegativeTypes); - } - - private function containsOperation(Tokens $tokens, int $startIndex, int $endIndex): bool - { - while (true) { - $startIndex = $tokens->getNextMeaningfulToken($startIndex); - - if ($startIndex === $endIndex) { - break; - } - - $block = Tokens::detectBlockType($tokens[$startIndex]); - - if (null !== $block && $block['isStart']) { - $startIndex = $tokens->findBlockEnd($block['type'], $startIndex); - - continue; - } - - if (!$tokens[$startIndex]->equalsAny(self::NOOP_TYPES)) { - return true; - } - } - - return false; - } - - private function getConfigType(Tokens $tokens, int $beforeOpenIndex): ?string - { - if ($tokens[$beforeOpenIndex]->isGivenKind(self::TOKEN_TYPE_NO_CONFIG)) { - return null; - } - - foreach (self::TOKEN_TYPE_CONFIG_MAP as $type => $configItem) { - if ($tokens[$beforeOpenIndex]->isGivenKind($type)) { - return $configItem; - } - } - - return 'others'; - } - - private function removeUselessParenthesisPair( - Tokens $tokens, - int $beforeOpenIndex, - int $afterCloseIndex, - int $openIndex, - int $closeIndex, - ?string $configType - ): void { - $statements = $this->configuration['statements']; - - if (null === $configType || !\in_array($configType, $statements, true)) { - return; - } - - $needsSpaceAfter = - !$this->isAccess($tokens, $afterCloseIndex) - && !$tokens[$afterCloseIndex]->equalsAny([';', ',', [T_CLOSE_TAG]]) - && null === $this->getBlock($tokens, $afterCloseIndex, false) - && !($tokens[$afterCloseIndex]->equalsAny([':', ';']) && $tokens[$beforeOpenIndex]->isGivenKind(T_CASE)) - ; - - $needsSpaceBefore = - !$this->isPreUnaryOperation($tokens, $beforeOpenIndex) - && !$tokens[$beforeOpenIndex]->equalsAny(['}', [T_EXIT], [T_OPEN_TAG]]) - && null === $this->getBlock($tokens, $beforeOpenIndex, true) - ; - - $this->removeBrace($tokens, $closeIndex, $needsSpaceAfter); - $this->removeBrace($tokens, $openIndex, $needsSpaceBefore); - } - - private function removeBrace(Tokens $tokens, int $index, bool $needsSpace): void - { - if ($needsSpace) { - foreach ([-1, 1] as $direction) { - $siblingIndex = $tokens->getNonEmptySibling($index, $direction); - - if ($tokens[$siblingIndex]->isWhitespace() || $tokens[$siblingIndex]->isComment()) { - $needsSpace = false; - - break; - } - } - } - - if ($needsSpace) { - $tokens[$index] = new Token([T_WHITESPACE, ' ']); - } else { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } - - private function closeCurlyBelongsToDynamicElement(Tokens $tokens, int $beforeOpenIndex): bool - { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $beforeOpenIndex); - $index = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(T_DOUBLE_COLON)) { - return true; - } - - if ($tokens[$index]->equals(':')) { - $index = $tokens->getPrevTokenOfKind($index, [[T_CASE], '?']); - - return !$tokens[$index]->isGivenKind(T_CASE); - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php deleted file mode 100644 index 808e1453..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededCurlyBracesFixer.php +++ /dev/null @@ -1,172 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUnneededCurlyBracesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes unneeded curly braces that are superfluous and aren\'t part of a control structure\'s body.', - [ - new CodeSample( - ' true] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoUselessElseFixer, NoUselessReturnFixer, ReturnAssignmentFixer, SimplifiedIfReturnFixer. - */ - public function getPriority(): int - { - return 40; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('}'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($this->findCurlyBraceOpen($tokens) as $index) { - if ($this->isOverComplete($tokens, $index)) { - $this->clearOverCompleteBraces($tokens, $index, $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index)); - } - } - - if (true === $this->configuration['namespaces']) { - $this->clearIfIsOverCompleteNamespaceBlock($tokens); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('namespaces', 'Remove unneeded curly braces from bracketed namespaces.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * @param int $openIndex index of `{` token - * @param int $closeIndex index of `}` token - */ - private function clearOverCompleteBraces(Tokens $tokens, int $openIndex, int $closeIndex): void - { - $tokens->clearTokenAndMergeSurroundingWhitespace($closeIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($openIndex); - } - - /** - * @return iterable - */ - private function findCurlyBraceOpen(Tokens $tokens): iterable - { - for ($i = \count($tokens) - 1; $i > 0; --$i) { - if ($tokens[$i]->equals('{')) { - yield $i; - } - } - } - - /** - * @param int $index index of `{` token - */ - private function isOverComplete(Tokens $tokens, int $index): bool - { - static $include = ['{', '}', [T_OPEN_TAG], ':', ';']; - - return $tokens[$tokens->getPrevMeaningfulToken($index)]->equalsAny($include); - } - - private function clearIfIsOverCompleteNamespaceBlock(Tokens $tokens): void - { - if (1 !== $tokens->countTokenKind(T_NAMESPACE)) { - return; // fast check, we never fix if multiple namespaces are defined - } - - $index = $tokens->getNextTokenOfKind(0, [[T_NAMESPACE]]); - - do { - $index = $tokens->getNextMeaningfulToken($index); - } while ($tokens[$index]->isGivenKind([T_STRING, T_NS_SEPARATOR])); - - if (!$tokens[$index]->equals('{')) { - return; // `;` - } - - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - $afterCloseIndex = $tokens->getNextMeaningfulToken($closeIndex); - - if (null !== $afterCloseIndex && (!$tokens[$afterCloseIndex]->isGivenKind(T_CLOSE_TAG) || null !== $tokens->getNextMeaningfulToken($afterCloseIndex))) { - return; - } - - // clear up - $tokens->clearTokenAndMergeSurroundingWhitespace($closeIndex); - $tokens[$index] = new Token(';'); - - if ($tokens[$index - 1]->isWhitespace(" \t") && !$tokens[$index - 2]->isComment()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index - 1); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php deleted file mode 100644 index 58a9a3cb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php +++ /dev/null @@ -1,129 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractNoUselessElseFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUselessElseFixer extends AbstractNoUselessElseFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_ELSE); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be useless `else` cases.', - [ - new CodeSample(" $token) { - if (!$token->isGivenKind(T_ELSE)) { - continue; - } - - // `else if` vs. `else` and alternative syntax `else:` checks - if ($tokens[$tokens->getNextMeaningfulToken($index)]->equalsAny([':', [T_IF]])) { - continue; - } - - // clean up `else` if it is an empty statement - $this->fixEmptyElse($tokens, $index); - if ($tokens->isEmptyAt($index)) { - continue; - } - - // clean up `else` if possible - if ($this->isSuperfluousElse($tokens, $index)) { - $this->clearElse($tokens, $index); - } - } - } - - /** - * Remove tokens part of an `else` statement if not empty (i.e. no meaningful tokens inside). - * - * @param int $index T_ELSE index - */ - private function fixEmptyElse(Tokens $tokens, int $index): void - { - $next = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$next]->equals('{')) { - $close = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $next); - if (1 === $close - $next) { // '{}' - $this->clearElse($tokens, $index); - } elseif ($tokens->getNextMeaningfulToken($next) === $close) { // '{/**/}' - $this->clearElse($tokens, $index); - } - - return; - } - - // short `else` - $end = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - if ($next === $end) { - $this->clearElse($tokens, $index); - } - } - - /** - * @param int $index index of T_ELSE - */ - private function clearElse(Tokens $tokens, int $index): void - { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - // clear T_ELSE and the '{' '}' if there are any - $next = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$next]->equals('{')) { - return; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $next)); - $tokens->clearTokenAndMergeSurroundingWhitespace($next); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php deleted file mode 100644 index 513bf5ba..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php +++ /dev/null @@ -1,147 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class SimplifiedIfReturnFixer extends AbstractFixer -{ - /** - * @var list|string>}> - */ - private array $sequences = [ - [ - 'isNegative' => false, - 'sequence' => [ - '{', [T_RETURN], [T_STRING, 'true'], ';', '}', - [T_RETURN], [T_STRING, 'false'], ';', - ], - ], - [ - 'isNegative' => true, - 'sequence' => [ - '{', [T_RETURN], [T_STRING, 'false'], ';', '}', - [T_RETURN], [T_STRING, 'true'], ';', - ], - ], - [ - 'isNegative' => false, - 'sequence' => [ - [T_RETURN], [T_STRING, 'true'], ';', - [T_RETURN], [T_STRING, 'false'], ';', - ], - ], - [ - 'isNegative' => true, - 'sequence' => [ - [T_RETURN], [T_STRING, 'false'], ';', - [T_RETURN], [T_STRING, 'true'], ';', - ], - ], - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Simplify `if` control structures that return the boolean result of their condition.', - [new CodeSample("isAllTokenKindsFound([T_IF, T_RETURN, T_STRING]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($ifIndex = $tokens->count() - 1; 0 <= $ifIndex; --$ifIndex) { - if (!$tokens[$ifIndex]->isGivenKind([T_IF, T_ELSEIF])) { - continue; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($ifIndex)]->equals(')')) { - continue; // in a loop without braces - } - - $startParenthesisIndex = $tokens->getNextTokenOfKind($ifIndex, ['(']); - $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startParenthesisIndex); - $firstCandidateIndex = $tokens->getNextMeaningfulToken($endParenthesisIndex); - - foreach ($this->sequences as $sequenceSpec) { - $sequenceFound = $tokens->findSequence($sequenceSpec['sequence'], $firstCandidateIndex); - - if (null === $sequenceFound) { - continue; - } - - $firstSequenceIndex = key($sequenceFound); - - if ($firstSequenceIndex !== $firstCandidateIndex) { - continue; - } - - $indicesToClear = array_keys($sequenceFound); - array_pop($indicesToClear); // Preserve last semicolon - rsort($indicesToClear); - - foreach ($indicesToClear as $index) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - $newTokens = [ - new Token([T_RETURN, 'return']), - new Token([T_WHITESPACE, ' ']), - ]; - - if ($sequenceSpec['isNegative']) { - $newTokens[] = new Token('!'); - } else { - $newTokens[] = new Token([T_BOOL_CAST, '(bool)']); - } - - $tokens->overrideRange($ifIndex, $ifIndex, $newTokens); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php deleted file mode 100644 index bbc6516a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSemicolonToColonFixer.php +++ /dev/null @@ -1,96 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\SwitchAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\ControlCaseStructuresAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶5.2. - */ -final class SwitchCaseSemicolonToColonFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'A case should be followed by a colon and not a semicolon.', - [ - new CodeSample( - 'isTokenKindFound(T_SWITCH); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - /** @var SwitchAnalysis $analysis */ - foreach (ControlCaseStructuresAnalyzer::findControlStructures($tokens, [T_SWITCH]) as $analysis) { - $default = $analysis->getDefaultAnalysis(); - - if (null !== $default) { - $this->fixTokenIfNeeded($tokens, $default->getColonIndex()); - } - - foreach ($analysis->getCases() as $caseAnalysis) { - $this->fixTokenIfNeeded($tokens, $caseAnalysis->getColonIndex()); - } - } - } - - private function fixTokenIfNeeded(Tokens $tokens, int $index): void - { - if ($tokens[$index]->equals(';')) { - $tokens[$index] = new Token(':'); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php deleted file mode 100644 index a48a1462..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchCaseSpaceFixer.php +++ /dev/null @@ -1,94 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\SwitchAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\ControlCaseStructuresAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶5.2. - * - * @author Sullivan Senechal - */ -final class SwitchCaseSpaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes extra spaces between colon and case value.', - [ - new CodeSample( - 'isTokenKindFound(T_SWITCH); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - /** @var SwitchAnalysis $analysis */ - foreach (ControlCaseStructuresAnalyzer::findControlStructures($tokens, [T_SWITCH]) as $analysis) { - $default = $analysis->getDefaultAnalysis(); - - if (null !== $default) { - $index = $default->getIndex(); - - if (!$tokens[$index + 1]->isWhitespace() || !$tokens[$index + 2]->equalsAny([':', ';'])) { - continue; - } - - $tokens->clearAt($index + 1); - } - - foreach ($analysis->getCases() as $caseAnalysis) { - $colonIndex = $caseAnalysis->getColonIndex(); - $valueIndex = $tokens->getPrevNonWhitespace($colonIndex); - - // skip if there is no space between the colon and previous token or is space after comment - if ($valueIndex === $colonIndex - 1 || $tokens[$valueIndex]->isComment()) { - continue; - } - - $tokens->clearAt($valueIndex + 1); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php deleted file mode 100644 index 22ce3c17..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SwitchContinueToBreakFixer.php +++ /dev/null @@ -1,249 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SwitchContinueToBreakFixer extends AbstractFixer -{ - /** - * @var int[] - */ - private array $switchLevels = []; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Switch case must not be ended with `continue` but with `break`.', - [ - new CodeSample( - ' 3) { - continue; - } - - continue 2; - } -} -' - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after NoAlternativeSyntaxFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAllTokenKindsFound([T_SWITCH, T_CONTINUE]) && !$tokens->hasAlternativeSyntax(); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $count = \count($tokens); - - for ($index = 1; $index < $count - 1; ++$index) { - $index = $this->doFix($tokens, $index, 0, false); - } - } - - /** - * @param int $depth >= 0 - */ - private function doFix(Tokens $tokens, int $index, int $depth, bool $isInSwitch): int - { - $token = $tokens[$index]; - - if ($token->isGivenKind([T_FOREACH, T_FOR, T_WHILE])) { - // go to first `(`, go to its close ')', go to first of '{', ';', '? >' - $index = $tokens->getNextTokenOfKind($index, ['(']); - $index = $tokens->getNextTokenOfKind($index, [')']); - $index = $tokens->getNextTokenOfKind($index, ['{', ';', [T_CLOSE_TAG]]); - - if (!$tokens[$index]->equals('{')) { - return $index; - } - - return $this->fixInLoop($tokens, $index, $depth + 1); - } - - if ($token->isGivenKind(T_DO)) { - return $this->fixInLoop($tokens, $tokens->getNextTokenOfKind($index, ['{']), $depth + 1); - } - - if ($token->isGivenKind(T_SWITCH)) { - return $this->fixInSwitch($tokens, $index, $depth + 1); - } - - if ($token->isGivenKind(T_CONTINUE)) { - return $this->fixContinueWhenActsAsBreak($tokens, $index, $isInSwitch, $depth); - } - - return $index; - } - - private function fixInSwitch(Tokens $tokens, int $switchIndex, int $depth): int - { - $this->switchLevels[] = $depth; - - // figure out where the switch starts - $openIndex = $tokens->getNextTokenOfKind($switchIndex, ['{']); - - // figure out where the switch ends - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $openIndex); - - for ($index = $openIndex + 1; $index < $closeIndex; ++$index) { - $index = $this->doFix($tokens, $index, $depth, true); - } - - array_pop($this->switchLevels); - - return $closeIndex; - } - - private function fixInLoop(Tokens $tokens, int $openIndex, int $depth): int - { - $openCount = 1; - - while (true) { - ++$openIndex; - $token = $tokens[$openIndex]; - - if ($token->equals('{')) { - ++$openCount; - - continue; - } - - if ($token->equals('}')) { - --$openCount; - - if (0 === $openCount) { - break; - } - - continue; - } - - $openIndex = $this->doFix($tokens, $openIndex, $depth, false); - } - - return $openIndex; - } - - private function fixContinueWhenActsAsBreak(Tokens $tokens, int $continueIndex, bool $isInSwitch, int $depth): int - { - $followingContinueIndex = $tokens->getNextMeaningfulToken($continueIndex); - $followingContinueToken = $tokens[$followingContinueIndex]; - - if ($isInSwitch && $followingContinueToken->equals(';')) { - $this->replaceContinueWithBreakToken($tokens, $continueIndex); // short continue 1 notation - - return $followingContinueIndex; - } - - if (!$followingContinueToken->isGivenKind(T_LNUMBER)) { - return $followingContinueIndex; - } - - $afterFollowingContinueIndex = $tokens->getNextMeaningfulToken($followingContinueIndex); - - if (!$tokens[$afterFollowingContinueIndex]->equals(';')) { - return $afterFollowingContinueIndex; // if next not is `;` return without fixing, for example `continue 1 ? >getContent(); - $jump = str_replace('_', '', $jump); // support for numeric_literal_separator - - if (\strlen($jump) > 2 && 'x' === $jump[1]) { - $jump = hexdec($jump); // hexadecimal - 0x1 - } elseif (\strlen($jump) > 2 && 'b' === $jump[1]) { - $jump = bindec($jump); // binary - 0b1 - } elseif (\strlen($jump) > 1 && '0' === $jump[0]) { - $jump = octdec($jump); // octal 01 - } elseif (1 === Preg::match('#^\d+$#', $jump)) { // positive int - $jump = (float) $jump; // cast to float, might be a number bigger than PHP max. int value - } else { - return $afterFollowingContinueIndex; // cannot process value, ignore - } - - if ($jump > PHP_INT_MAX) { - return $afterFollowingContinueIndex; // cannot process value, ignore - } - - $jump = (int) $jump; - - if ($isInSwitch && (1 === $jump || 0 === $jump)) { - $this->replaceContinueWithBreakToken($tokens, $continueIndex); // long continue 0/1 notation - - return $afterFollowingContinueIndex; - } - - $jumpDestination = $depth - $jump + 1; - - if (\in_array($jumpDestination, $this->switchLevels, true)) { - $this->replaceContinueWithBreakToken($tokens, $continueIndex); - - return $afterFollowingContinueIndex; - } - - return $afterFollowingContinueIndex; - } - - private function replaceContinueWithBreakToken(Tokens $tokens, int $index): void - { - $tokens[$index] = new Token([T_BREAK, 'break']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php deleted file mode 100644 index 5a49a923..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/TrailingCommaInMultilineFixer.php +++ /dev/null @@ -1,250 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerConfiguration\InvalidOptionsForEnvException; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Options; - -/** - * @author Sebastiaan Stok - * @author Dariusz Rumiński - * @author Kuba Werłos - */ -final class TrailingCommaInMultilineFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const ELEMENTS_ARRAYS = 'arrays'; - - /** - * @internal - */ - public const ELEMENTS_ARGUMENTS = 'arguments'; - - /** - * @internal - */ - public const ELEMENTS_PARAMETERS = 'parameters'; - - private const MATCH_EXPRESSIONS = 'match'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Multi-line arrays, arguments list, parameters list and `match` expressions must have a trailing comma.', - [ - new CodeSample(" true] - ), - new VersionSpecificCodeSample(" [self::ELEMENTS_ARGUMENTS]]), - new VersionSpecificCodeSample(" [self::ELEMENTS_PARAMETERS]]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after NoMultilineWhitespaceAroundDoubleArrowFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN, '(']); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('after_heredoc', 'Whether a trailing comma should also be placed after heredoc end.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('elements', sprintf('Where to fix multiline trailing comma (PHP >= 8.0 for `%s` and `%s`).', self::ELEMENTS_PARAMETERS, self::MATCH_EXPRESSIONS))) // @TODO: remove text when PHP 8.0+ is required - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset([self::ELEMENTS_ARRAYS, self::ELEMENTS_ARGUMENTS, self::ELEMENTS_PARAMETERS, self::MATCH_EXPRESSIONS])]) - ->setDefault([self::ELEMENTS_ARRAYS]) - ->setNormalizer(static function (Options $options, $value) { - if (\PHP_VERSION_ID < 80000) { // @TODO: drop condition when PHP 8.0+ is required - foreach ([self::ELEMENTS_PARAMETERS, self::MATCH_EXPRESSIONS] as $option) { - if (\in_array($option, $value, true)) { - throw new InvalidOptionsForEnvException(sprintf('"%s" option can only be enabled with PHP 8.0+.', $option)); - } - } - } - - return $value; - }) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $fixArrays = \in_array(self::ELEMENTS_ARRAYS, $this->configuration['elements'], true); - $fixArguments = \in_array(self::ELEMENTS_ARGUMENTS, $this->configuration['elements'], true); - $fixParameters = \PHP_VERSION_ID >= 80000 && \in_array(self::ELEMENTS_PARAMETERS, $this->configuration['elements'], true); // @TODO: drop condition when PHP 8.0+ is required - $fixMatch = \PHP_VERSION_ID >= 80000 && \in_array(self::MATCH_EXPRESSIONS, $this->configuration['elements'], true); // @TODO: drop condition when PHP 8.0+ is required - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ( - $fixArrays - && ( - $tokens[$index]->equals('(') && $tokens[$prevIndex]->isGivenKind(T_ARRAY) // long syntax - || $tokens[$index]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN) // short syntax - ) - ) { - $this->fixBlock($tokens, $index); - - continue; - } - - if (!$tokens[$index]->equals('(')) { - continue; - } - - $prevPrevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - - if ($fixArguments - && $tokens[$prevIndex]->equalsAny([']', [T_CLASS], [T_STRING], [T_VARIABLE], [T_STATIC]]) - && !$tokens[$prevPrevIndex]->isGivenKind(T_FUNCTION) - ) { - $this->fixBlock($tokens, $index); - - continue; - } - - if ( - $fixParameters - && ( - $tokens[$prevIndex]->isGivenKind(T_STRING) && $tokens[$prevPrevIndex]->isGivenKind(T_FUNCTION) - || $tokens[$prevIndex]->isGivenKind([T_FN, T_FUNCTION]) - ) - ) { - $this->fixBlock($tokens, $index); - } - - if ($fixMatch && $tokens[$prevIndex]->isGivenKind(T_MATCH)) { - $this->fixMatch($tokens, $index); - } - } - } - - private function fixBlock(Tokens $tokens, int $startIndex): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - if (!$tokensAnalyzer->isBlockMultiline($tokens, $startIndex)) { - return; - } - - $blockType = Tokens::detectBlockType($tokens[$startIndex]); - $endIndex = $tokens->findBlockEnd($blockType['type'], $startIndex); - - $beforeEndIndex = $tokens->getPrevMeaningfulToken($endIndex); - $beforeEndToken = $tokens[$beforeEndIndex]; - - // if there is some item between braces then add `,` after it - if ( - $startIndex !== $beforeEndIndex && !$beforeEndToken->equals(',') - && (true === $this->configuration['after_heredoc'] || !$beforeEndToken->isGivenKind(T_END_HEREDOC)) - ) { - $tokens->insertAt($beforeEndIndex + 1, new Token(',')); - - $endToken = $tokens[$endIndex]; - - if (!$endToken->isComment() && !$endToken->isWhitespace()) { - $tokens->ensureWhitespaceAtIndex($endIndex, 1, ' '); - } - } - } - - private function fixMatch(Tokens $tokens, int $index): void - { - $index = $tokens->getNextTokenOfKind($index, ['{']); - $closeIndex = $index; - $isMultiline = false; - $depth = 1; - - do { - ++$closeIndex; - - if ($tokens[$closeIndex]->equals('{')) { - ++$depth; - } elseif ($tokens[$closeIndex]->equals('}')) { - --$depth; - } elseif (!$isMultiline && str_contains($tokens[$closeIndex]->getContent(), "\n")) { - $isMultiline = true; - } - } while ($depth > 0); - - if (!$isMultiline) { - return; - } - - $previousIndex = $tokens->getPrevMeaningfulToken($closeIndex); - - if (!$tokens[$previousIndex]->equals(',')) { - $tokens->insertAt($previousIndex + 1, new Token(',')); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php deleted file mode 100644 index 20a74dfc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/YodaStyleFixer.php +++ /dev/null @@ -1,748 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ControlStructure; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Bram Gotink - * @author Dariusz Rumiński - */ -final class YodaStyleFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private $candidatesMap; - - /** - * @var array - */ - private $candidateTypesConfiguration; - - /** - * @var array - */ - private $candidateTypes; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->resolveConfiguration(); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Write conditions in Yoda style (`true`), non-Yoda style (`[\'equal\' => false, \'identical\' => false, \'less_and_greater\' => false]`) or ignore those conditions (`null`) based on configuration.', - [ - new CodeSample( - ' 3; // less than -', - [ - 'equal' => true, - 'identical' => false, - 'less_and_greater' => null, - ] - ), - new CodeSample( - ' true, - ] - ), - new CodeSample( - ' false, - 'identical' => false, - 'less_and_greater' => false, - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after IsNullFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound($this->candidateTypes); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->fixTokens($tokens); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('equal', 'Style for equal (`==`, `!=`) statements.')) - ->setAllowedTypes(['bool', 'null']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('identical', 'Style for identical (`===`, `!==`) statements.')) - ->setAllowedTypes(['bool', 'null']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('less_and_greater', 'Style for less and greater than (`<`, `<=`, `>`, `>=`) statements.')) - ->setAllowedTypes(['bool', 'null']) - ->setDefault(null) - ->getOption(), - (new FixerOptionBuilder('always_move_variable', 'Whether variables should always be on non assignable side when applying Yoda style.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * Finds the end of the right-hand side of the comparison at the given - * index. - * - * The right-hand side ends when an operator with a lower precedence is - * encountered or when the block level for `()`, `{}` or `[]` goes below - * zero. - * - * @param Tokens $tokens The token list - * @param int $index The index of the comparison - * - * @return int The last index of the right-hand side of the comparison - */ - private function findComparisonEnd(Tokens $tokens, int $index): int - { - ++$index; - $count = \count($tokens); - - while ($index < $count) { - $token = $tokens[$index]; - - if ($token->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - ++$index; - - continue; - } - - if ($this->isOfLowerPrecedence($token)) { - break; - } - - $block = Tokens::detectBlockType($token); - - if (null === $block) { - ++$index; - - continue; - } - - if (!$block['isStart']) { - break; - } - - $index = $tokens->findBlockEnd($block['type'], $index) + 1; - } - - $prev = $tokens->getPrevMeaningfulToken($index); - - return $tokens[$prev]->isGivenKind(T_CLOSE_TAG) ? $tokens->getPrevMeaningfulToken($prev) : $prev; - } - - /** - * Finds the start of the left-hand side of the comparison at the given - * index. - * - * The left-hand side ends when an operator with a lower precedence is - * encountered or when the block level for `()`, `{}` or `[]` goes below - * zero. - * - * @param Tokens $tokens The token list - * @param int $index The index of the comparison - * - * @return int The first index of the left-hand side of the comparison - */ - private function findComparisonStart(Tokens $tokens, int $index): int - { - --$index; - $nonBlockFound = false; - - while (0 <= $index) { - $token = $tokens[$index]; - - if ($token->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - --$index; - - continue; - } - - if ($token->isGivenKind([CT::T_NAMED_ARGUMENT_COLON])) { - break; - } - - if ($this->isOfLowerPrecedence($token)) { - break; - } - - $block = Tokens::detectBlockType($token); - - if (null === $block) { - --$index; - $nonBlockFound = true; - - continue; - } - - if ( - $block['isStart'] - || ($nonBlockFound && Tokens::BLOCK_TYPE_CURLY_BRACE === $block['type']) // closing of structure not related to the comparison - ) { - break; - } - - $index = $tokens->findBlockStart($block['type'], $index) - 1; - } - - return $tokens->getNextMeaningfulToken($index); - } - - private function fixTokens(Tokens $tokens): Tokens - { - for ($i = \count($tokens) - 1; $i > 1; --$i) { - if ($tokens[$i]->isGivenKind($this->candidateTypes)) { - $yoda = $this->candidateTypesConfiguration[$tokens[$i]->getId()]; - } elseif ( - ($tokens[$i]->equals('<') && \in_array('<', $this->candidateTypes, true)) - || ($tokens[$i]->equals('>') && \in_array('>', $this->candidateTypes, true)) - ) { - $yoda = $this->candidateTypesConfiguration[$tokens[$i]->getContent()]; - } else { - continue; - } - - $fixableCompareInfo = $this->getCompareFixableInfo($tokens, $i, $yoda); - - if (null === $fixableCompareInfo) { - continue; - } - - $i = $this->fixTokensCompare( - $tokens, - $fixableCompareInfo['left']['start'], - $fixableCompareInfo['left']['end'], - $i, - $fixableCompareInfo['right']['start'], - $fixableCompareInfo['right']['end'] - ); - } - - return $tokens; - } - - /** - * Fixes the comparison at the given index. - * - * A comparison is considered fixed when - * - both sides are a variable (e.g. $a === $b) - * - neither side is a variable (e.g. self::CONST === 3) - * - only the right-hand side is a variable (e.g. 3 === self::$var) - * - * If the left-hand side and right-hand side of the given comparison are - * swapped, this function runs recursively on the previous left-hand-side. - * - * @return int an upper bound for all non-fixed comparisons - */ - private function fixTokensCompare( - Tokens $tokens, - int $startLeft, - int $endLeft, - int $compareOperatorIndex, - int $startRight, - int $endRight - ): int { - $type = $tokens[$compareOperatorIndex]->getId(); - $content = $tokens[$compareOperatorIndex]->getContent(); - - if (\array_key_exists($type, $this->candidatesMap)) { - $tokens[$compareOperatorIndex] = clone $this->candidatesMap[$type]; - } elseif (\array_key_exists($content, $this->candidatesMap)) { - $tokens[$compareOperatorIndex] = clone $this->candidatesMap[$content]; - } - - $right = $this->fixTokensComparePart($tokens, $startRight, $endRight); - $left = $this->fixTokensComparePart($tokens, $startLeft, $endLeft); - - for ($i = $startRight; $i <= $endRight; ++$i) { - $tokens->clearAt($i); - } - - for ($i = $startLeft; $i <= $endLeft; ++$i) { - $tokens->clearAt($i); - } - - $tokens->insertAt($startRight, $left); - $tokens->insertAt($startLeft, $right); - - return $startLeft; - } - - private function fixTokensComparePart(Tokens $tokens, int $start, int $end): Tokens - { - $newTokens = $tokens->generatePartialCode($start, $end); - $newTokens = $this->fixTokens(Tokens::fromCode(sprintf('clearAt(\count($newTokens) - 1); - $newTokens->clearAt(0); - $newTokens->clearEmptyTokens(); - - return $newTokens; - } - - private function getCompareFixableInfo(Tokens $tokens, int $index, bool $yoda): ?array - { - $left = $this->getLeftSideCompareFixableInfo($tokens, $index); - $right = $this->getRightSideCompareFixableInfo($tokens, $index); - - if (!$yoda && $this->isOfLowerPrecedenceAssignment($tokens[$tokens->getNextMeaningfulToken($right['end'])])) { - return null; - } - - if ($this->isListStatement($tokens, $left['start'], $left['end']) || $this->isListStatement($tokens, $right['start'], $right['end'])) { - return null; // do not fix lists assignment inside statements - } - - /** @var bool $strict */ - $strict = $this->configuration['always_move_variable']; - $leftSideIsVariable = $this->isVariable($tokens, $left['start'], $left['end'], $strict); - $rightSideIsVariable = $this->isVariable($tokens, $right['start'], $right['end'], $strict); - - if (!($leftSideIsVariable ^ $rightSideIsVariable)) { - return null; // both are (not) variables, do not touch - } - - if (!$strict) { // special handling for braces with not "always_move_variable" - $leftSideIsVariable = $leftSideIsVariable && !$tokens[$left['start']]->equals('('); - $rightSideIsVariable = $rightSideIsVariable && !$tokens[$right['start']]->equals('('); - } - - return ($yoda && !$leftSideIsVariable) || (!$yoda && !$rightSideIsVariable) - ? null - : ['left' => $left, 'right' => $right] - ; - } - - /** - * @return array{start: int, end: int} - */ - private function getLeftSideCompareFixableInfo(Tokens $tokens, int $index): array - { - return [ - 'start' => $this->findComparisonStart($tokens, $index), - 'end' => $tokens->getPrevMeaningfulToken($index), - ]; - } - - /** - * @return array{start: int, end: int} - */ - private function getRightSideCompareFixableInfo(Tokens $tokens, int $index): array - { - return [ - 'start' => $tokens->getNextMeaningfulToken($index), - 'end' => $this->findComparisonEnd($tokens, $index), - ]; - } - - private function isListStatement(Tokens $tokens, int $index, int $end): bool - { - for ($i = $index; $i <= $end; ++$i) { - if ($tokens[$i]->isGivenKind([T_LIST, CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE])) { - return true; - } - } - - return false; - } - - /** - * Checks whether the given token has a lower precedence than `T_IS_EQUAL` - * or `T_IS_IDENTICAL`. - * - * @param Token $token The token to check - * - * @return bool Whether the token has a lower precedence - */ - private function isOfLowerPrecedence(Token $token): bool - { - static $tokens; - - if (null === $tokens) { - $tokens = [ - T_BOOLEAN_AND, // && - T_BOOLEAN_OR, // || - T_CASE, // case - T_DOUBLE_ARROW, // => - T_ECHO, // echo - T_GOTO, // goto - T_LOGICAL_AND, // and - T_LOGICAL_OR, // or - T_LOGICAL_XOR, // xor - T_OPEN_TAG, // isOfLowerPrecedenceAssignment($token) || $token->isGivenKind($tokens) || $token->equalsAny($otherTokens); - } - - /** - * Checks whether the given assignment token has a lower precedence than `T_IS_EQUAL` - * or `T_IS_IDENTICAL`. - */ - private function isOfLowerPrecedenceAssignment(Token $token): bool - { - static $tokens; - - if (null === $tokens) { - $tokens = [ - T_AND_EQUAL, // &= - T_CONCAT_EQUAL, // .= - T_DIV_EQUAL, // /= - T_MINUS_EQUAL, // -= - T_MOD_EQUAL, // %= - T_MUL_EQUAL, // *= - T_OR_EQUAL, // |= - T_PLUS_EQUAL, // += - T_POW_EQUAL, // **= - T_SL_EQUAL, // <<= - T_SR_EQUAL, // >>= - T_XOR_EQUAL, // ^= - T_COALESCE_EQUAL, // ??= - ]; - } - - return $token->equals('=') || $token->isGivenKind($tokens); - } - - /** - * Checks whether the tokens between the given start and end describe a - * variable. - * - * @param Tokens $tokens The token list - * @param int $start The first index of the possible variable - * @param int $end The last index of the possible variable - * @param bool $strict Enable strict variable detection - * - * @return bool Whether the tokens describe a variable - */ - private function isVariable(Tokens $tokens, int $start, int $end, bool $strict): bool - { - $tokenAnalyzer = new TokensAnalyzer($tokens); - - if ($start === $end) { - return $tokens[$start]->isGivenKind(T_VARIABLE); - } - - if ($tokens[$start]->equals('(')) { - return true; - } - - if ($strict) { - for ($index = $start; $index <= $end; ++$index) { - if ( - $tokens[$index]->isCast() - || $tokens[$index]->isGivenKind(T_INSTANCEOF) - || $tokens[$index]->equals('!') - || $tokenAnalyzer->isBinaryOperator($index) - ) { - return false; - } - } - } - - $index = $start; - - // handle multiple braces around statement ((($a === 1))) - while ( - $tokens[$index]->equals('(') - && $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index) === $end - ) { - $index = $tokens->getNextMeaningfulToken($index); - $end = $tokens->getPrevMeaningfulToken($end); - } - - $expectString = false; - - while ($index <= $end) { - $current = $tokens[$index]; - if ($current->isComment() || $current->isWhitespace() || $tokens->isEmptyAt($index)) { - ++$index; - - continue; - } - - // check if this is the last token - if ($index === $end) { - return $current->isGivenKind($expectString ? T_STRING : T_VARIABLE); - } - - if ($current->isGivenKind([T_LIST, CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE])) { - return false; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - $next = $tokens[$nextIndex]; - - // self:: or ClassName:: - if ($current->isGivenKind(T_STRING) && $next->isGivenKind(T_DOUBLE_COLON)) { - $index = $tokens->getNextMeaningfulToken($nextIndex); - - continue; - } - - // \ClassName - if ($current->isGivenKind(T_NS_SEPARATOR) && $next->isGivenKind(T_STRING)) { - $index = $nextIndex; - - continue; - } - - // ClassName\ - if ($current->isGivenKind(T_STRING) && $next->isGivenKind(T_NS_SEPARATOR)) { - $index = $nextIndex; - - continue; - } - - // $a-> or a-> (as in $b->a->c) - if ($current->isGivenKind([T_STRING, T_VARIABLE]) && $next->isObjectOperator()) { - $index = $tokens->getNextMeaningfulToken($nextIndex); - $expectString = true; - - continue; - } - - // $a[...], a[...] (as in $c->a[$b]), $a{...} or a{...} (as in $c->a{$b}) - if ( - $current->isGivenKind($expectString ? T_STRING : T_VARIABLE) - && $next->equalsAny(['[', [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN, '{']]) - ) { - $index = $tokens->findBlockEnd( - $next->equals('[') ? Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE : Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE, - $nextIndex - ); - - if ($index === $end) { - return true; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$index]->equalsAny(['[', [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN, '{']]) && !$tokens[$index]->isObjectOperator()) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index); - $expectString = true; - - continue; - } - - // $a(...) or $a->b(...) - if ($strict && $current->isGivenKind([T_STRING, T_VARIABLE]) && $next->equals('(')) { - return false; - } - - // {...} (as in $a->{$b}) - if ($expectString && $current->isGivenKind(CT::T_DYNAMIC_PROP_BRACE_OPEN)) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_DYNAMIC_PROP_BRACE, $index); - if ($index === $end) { - return true; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$index]->isObjectOperator()) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index); - $expectString = true; - - continue; - } - - break; - } - - return !$this->isConstant($tokens, $start, $end); - } - - private function isConstant(Tokens $tokens, int $index, int $end): bool - { - $expectArrayOnly = false; - $expectNumberOnly = false; - $expectNothing = false; - - for (; $index <= $end; ++$index) { - $token = $tokens[$index]; - - if ($token->isComment() || $token->isWhitespace()) { - continue; - } - - if ($expectNothing) { - return false; - } - - if ($expectArrayOnly) { - if ($token->equalsAny(['(', ')', [CT::T_ARRAY_SQUARE_BRACE_CLOSE]])) { - continue; - } - - return false; - } - - if ($token->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - $expectArrayOnly = true; - - continue; - } - - if ($expectNumberOnly && !$token->isGivenKind([T_LNUMBER, T_DNUMBER])) { - return false; - } - - if ($token->equals('-')) { - $expectNumberOnly = true; - - continue; - } - - if ( - $token->isGivenKind([T_LNUMBER, T_DNUMBER, T_CONSTANT_ENCAPSED_STRING]) - || $token->equalsAny([[T_STRING, 'true'], [T_STRING, 'false'], [T_STRING, 'null']]) - ) { - $expectNothing = true; - - continue; - } - - return false; - } - - return true; - } - - private function resolveConfiguration(): void - { - $candidateTypes = []; - $this->candidatesMap = []; - - if (null !== $this->configuration['equal']) { - // `==`, `!=` and `<>` - $candidateTypes[T_IS_EQUAL] = $this->configuration['equal']; - $candidateTypes[T_IS_NOT_EQUAL] = $this->configuration['equal']; - } - - if (null !== $this->configuration['identical']) { - // `===` and `!==` - $candidateTypes[T_IS_IDENTICAL] = $this->configuration['identical']; - $candidateTypes[T_IS_NOT_IDENTICAL] = $this->configuration['identical']; - } - - if (null !== $this->configuration['less_and_greater']) { - // `<`, `<=`, `>` and `>=` - $candidateTypes[T_IS_SMALLER_OR_EQUAL] = $this->configuration['less_and_greater']; - $this->candidatesMap[T_IS_SMALLER_OR_EQUAL] = new Token([T_IS_GREATER_OR_EQUAL, '>=']); - - $candidateTypes[T_IS_GREATER_OR_EQUAL] = $this->configuration['less_and_greater']; - $this->candidatesMap[T_IS_GREATER_OR_EQUAL] = new Token([T_IS_SMALLER_OR_EQUAL, '<=']); - - $candidateTypes['<'] = $this->configuration['less_and_greater']; - $this->candidatesMap['<'] = new Token('>'); - - $candidateTypes['>'] = $this->configuration['less_and_greater']; - $this->candidatesMap['>'] = new Token('<'); - } - - $this->candidateTypesConfiguration = $candidateTypes; - $this->candidateTypes = array_keys($candidateTypes); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php deleted file mode 100644 index 6d7d7e84..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DeprecatedFixerInterface.php +++ /dev/null @@ -1,28 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -/** - * @author Kuba Werłos - */ -interface DeprecatedFixerInterface extends FixerInterface -{ - /** - * Returns names of fixers to use instead, if any. - * - * @return string[] - */ - public function getSuccessorsNames(): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php deleted file mode 100644 index f2ead599..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationArrayAssignmentFixer.php +++ /dev/null @@ -1,108 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\DoctrineAnnotation; - -use Doctrine\Common\Annotations\DocLexer; -use PhpCsFixer\AbstractDoctrineAnnotationFixer; -use PhpCsFixer\Doctrine\Annotation\Tokens; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * Forces the configured operator for assignment in arrays in Doctrine Annotations. - */ -final class DoctrineAnnotationArrayAssignmentFixer extends AbstractDoctrineAnnotationFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Doctrine annotations must use configured operator for assignment in arrays.', - [ - new CodeSample( - " ':'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before DoctrineAnnotationSpacesFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $options = parent::createConfigurationDefinition()->getOptions(); - - $operator = new FixerOptionBuilder('operator', 'The operator to use.'); - $options[] = $operator - ->setAllowedValues(['=', ':']) - ->setDefault('=') - ->getOption() - ; - - return new FixerConfigurationResolver($options); - } - - /** - * {@inheritdoc} - */ - protected function fixAnnotations(Tokens $doctrineAnnotationTokens): void - { - $scopes = []; - foreach ($doctrineAnnotationTokens as $token) { - if ($token->isType(DocLexer::T_OPEN_PARENTHESIS)) { - $scopes[] = 'annotation'; - - continue; - } - - if ($token->isType(DocLexer::T_OPEN_CURLY_BRACES)) { - $scopes[] = 'array'; - - continue; - } - - if ($token->isType([DocLexer::T_CLOSE_PARENTHESIS, DocLexer::T_CLOSE_CURLY_BRACES])) { - array_pop($scopes); - - continue; - } - - if ('array' === end($scopes) && $token->isType([DocLexer::T_EQUALS, DocLexer::T_COLON])) { - $token->setContent($this->configuration['operator']); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php deleted file mode 100644 index 8ecbda4c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationBracesFixer.php +++ /dev/null @@ -1,127 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\DoctrineAnnotation; - -use Doctrine\Common\Annotations\DocLexer; -use PhpCsFixer\AbstractDoctrineAnnotationFixer; -use PhpCsFixer\Doctrine\Annotation\Token; -use PhpCsFixer\Doctrine\Annotation\Tokens; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * Adds braces to Doctrine annotations when missing. - */ -final class DoctrineAnnotationBracesFixer extends AbstractDoctrineAnnotationFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Doctrine annotations without arguments must use the configured syntax.', - [ - new CodeSample( - " 'with_braces'] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver(array_merge( - parent::createConfigurationDefinition()->getOptions(), - [ - (new FixerOptionBuilder('syntax', 'Whether to add or remove braces.')) - ->setAllowedValues(['with_braces', 'without_braces']) - ->setDefault('without_braces') - ->getOption(), - ] - )); - } - - /** - * {@inheritdoc} - */ - protected function fixAnnotations(Tokens $doctrineAnnotationTokens): void - { - if ('without_braces' === $this->configuration['syntax']) { - $this->removesBracesFromAnnotations($doctrineAnnotationTokens); - } else { - $this->addBracesToAnnotations($doctrineAnnotationTokens); - } - } - - private function addBracesToAnnotations(Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$tokens[$index]->isType(DocLexer::T_AT)) { - continue; - } - - $braceIndex = $tokens->getNextMeaningfulToken($index + 1); - if (null !== $braceIndex && $tokens[$braceIndex]->isType(DocLexer::T_OPEN_PARENTHESIS)) { - continue; - } - - $tokens->insertAt($index + 2, new Token(DocLexer::T_OPEN_PARENTHESIS, '(')); - $tokens->insertAt($index + 3, new Token(DocLexer::T_CLOSE_PARENTHESIS, ')')); - } - } - - private function removesBracesFromAnnotations(Tokens $tokens): void - { - for ($index = 0, $max = \count($tokens); $index < $max; ++$index) { - if (!$tokens[$index]->isType(DocLexer::T_AT)) { - continue; - } - - $openBraceIndex = $tokens->getNextMeaningfulToken($index + 1); - if (null === $openBraceIndex) { - continue; - } - - if (!$tokens[$openBraceIndex]->isType(DocLexer::T_OPEN_PARENTHESIS)) { - continue; - } - - $closeBraceIndex = $tokens->getNextMeaningfulToken($openBraceIndex); - if (null === $closeBraceIndex) { - continue; - } - - if (!$tokens[$closeBraceIndex]->isType(DocLexer::T_CLOSE_PARENTHESIS)) { - continue; - } - - for ($currentIndex = $index + 2; $currentIndex <= $closeBraceIndex; ++$currentIndex) { - $tokens[$currentIndex]->clear(); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php deleted file mode 100644 index 8da8cc0a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationIndentationFixer.php +++ /dev/null @@ -1,193 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\DoctrineAnnotation; - -use Doctrine\Common\Annotations\DocLexer; -use PhpCsFixer\AbstractDoctrineAnnotationFixer; -use PhpCsFixer\Doctrine\Annotation\Tokens; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; - -final class DoctrineAnnotationIndentationFixer extends AbstractDoctrineAnnotationFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Doctrine annotations must be indented with four spaces.', - [ - new CodeSample(" true] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver(array_merge( - parent::createConfigurationDefinition()->getOptions(), - [ - (new FixerOptionBuilder('indent_mixed_lines', 'Whether to indent lines that have content before closing parenthesis.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ] - )); - } - - /** - * {@inheritdoc} - */ - protected function fixAnnotations(Tokens $doctrineAnnotationTokens): void - { - $annotationPositions = []; - for ($index = 0, $max = \count($doctrineAnnotationTokens); $index < $max; ++$index) { - if (!$doctrineAnnotationTokens[$index]->isType(DocLexer::T_AT)) { - continue; - } - - $annotationEndIndex = $doctrineAnnotationTokens->getAnnotationEnd($index); - if (null === $annotationEndIndex) { - return; - } - - $annotationPositions[] = [$index, $annotationEndIndex]; - $index = $annotationEndIndex; - } - - $indentLevel = 0; - foreach ($doctrineAnnotationTokens as $index => $token) { - if (!$token->isType(DocLexer::T_NONE) || !str_contains($token->getContent(), "\n")) { - continue; - } - - if (!$this->indentationCanBeFixed($doctrineAnnotationTokens, $index, $annotationPositions)) { - continue; - } - - $braces = $this->getLineBracesCount($doctrineAnnotationTokens, $index); - $delta = $braces[0] - $braces[1]; - $mixedBraces = 0 === $delta && $braces[0] > 0; - $extraIndentLevel = 0; - - if ($indentLevel > 0 && ($delta < 0 || $mixedBraces)) { - --$indentLevel; - - if (true === $this->configuration['indent_mixed_lines'] && $this->isClosingLineWithMeaningfulContent($doctrineAnnotationTokens, $index)) { - $extraIndentLevel = 1; - } - } - - $token->setContent(Preg::replace( - '/(\n( +\*)?) *$/', - '$1'.str_repeat(' ', 4 * ($indentLevel + $extraIndentLevel) + 1), - $token->getContent() - )); - - if ($delta > 0 || $mixedBraces) { - ++$indentLevel; - } - } - } - - /** - * @return int[] - */ - private function getLineBracesCount(Tokens $tokens, int $index): array - { - $opening = 0; - $closing = 0; - - while (isset($tokens[++$index])) { - $token = $tokens[$index]; - if ($token->isType(DocLexer::T_NONE) && str_contains($token->getContent(), "\n")) { - break; - } - - if ($token->isType([DocLexer::T_OPEN_PARENTHESIS, DocLexer::T_OPEN_CURLY_BRACES])) { - ++$opening; - - continue; - } - - if (!$token->isType([DocLexer::T_CLOSE_PARENTHESIS, DocLexer::T_CLOSE_CURLY_BRACES])) { - continue; - } - - if ($opening > 0) { - --$opening; - } else { - ++$closing; - } - } - - return [$opening, $closing]; - } - - private function isClosingLineWithMeaningfulContent(Tokens $tokens, int $index): bool - { - while (isset($tokens[++$index])) { - $token = $tokens[$index]; - if ($token->isType(DocLexer::T_NONE)) { - if (str_contains($token->getContent(), "\n")) { - return false; - } - - continue; - } - - return !$token->isType([DocLexer::T_CLOSE_PARENTHESIS, DocLexer::T_CLOSE_CURLY_BRACES]); - } - - return false; - } - - /** - * @param array> $annotationPositions Pairs of begin and end indices of main annotations - */ - private function indentationCanBeFixed(Tokens $tokens, int $newLineTokenIndex, array $annotationPositions): bool - { - foreach ($annotationPositions as $position) { - if ($newLineTokenIndex >= $position[0] && $newLineTokenIndex <= $position[1]) { - return true; - } - } - - for ($index = $newLineTokenIndex + 1, $max = \count($tokens); $index < $max; ++$index) { - $token = $tokens[$index]; - - if (str_contains($token->getContent(), "\n")) { - return false; - } - - return $tokens[$index]->isType(DocLexer::T_AT); - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php deleted file mode 100644 index bc04e752..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/DoctrineAnnotation/DoctrineAnnotationSpacesFixer.php +++ /dev/null @@ -1,301 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\DoctrineAnnotation; - -use Doctrine\Common\Annotations\DocLexer; -use PhpCsFixer\AbstractDoctrineAnnotationFixer; -use PhpCsFixer\Doctrine\Annotation\Token; -use PhpCsFixer\Doctrine\Annotation\Tokens; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; - -/** - * Fixes spaces around commas and assignment operators in Doctrine annotations. - */ -final class DoctrineAnnotationSpacesFixer extends AbstractDoctrineAnnotationFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Fixes spaces in Doctrine annotations.', - [ - new CodeSample( - " false, 'before_array_assignments_equals' => false] - ), - ], - 'There must not be any space around parentheses; commas must be preceded by no space and followed by one space; there must be no space around named arguments assignment operator; there must be one space around array assignment operator.' - ); - } - - /** - * {@inheritdoc} - * - * Must run after DoctrineAnnotationArrayAssignmentFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver(array_merge( - parent::createConfigurationDefinition()->getOptions(), - [ - (new FixerOptionBuilder('around_parentheses', 'Whether to fix spaces around parentheses.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('around_commas', 'Whether to fix spaces around commas.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('before_argument_assignments', 'Whether to add, remove or ignore spaces before argument assignment operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('after_argument_assignments', 'Whether to add, remove or ignore spaces after argument assignment operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('before_array_assignments_equals', 'Whether to add, remove or ignore spaces before array `=` assignment operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('after_array_assignments_equals', 'Whether to add, remove or ignore spaces after array assignment `=` operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('before_array_assignments_colon', 'Whether to add, remove or ignore spaces before array `:` assignment operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('after_array_assignments_colon', 'Whether to add, remove or ignore spaces after array assignment `:` operator.')) - ->setAllowedTypes(['null', 'bool']) - ->setDefault(true) - ->getOption(), - ] - )); - } - - /** - * {@inheritdoc} - */ - protected function fixAnnotations(Tokens $doctrineAnnotationTokens): void - { - if (true === $this->configuration['around_parentheses']) { - $this->fixSpacesAroundParentheses($doctrineAnnotationTokens); - } - - if (true === $this->configuration['around_commas']) { - $this->fixSpacesAroundCommas($doctrineAnnotationTokens); - } - - if ( - null !== $this->configuration['before_argument_assignments'] - || null !== $this->configuration['after_argument_assignments'] - || null !== $this->configuration['before_array_assignments_equals'] - || null !== $this->configuration['after_array_assignments_equals'] - || null !== $this->configuration['before_array_assignments_colon'] - || null !== $this->configuration['after_array_assignments_colon'] - ) { - $this->fixAroundAssignments($doctrineAnnotationTokens); - } - } - - private function fixSpacesAroundParentheses(Tokens $tokens): void - { - $inAnnotationUntilIndex = null; - - foreach ($tokens as $index => $token) { - if (null !== $inAnnotationUntilIndex) { - if ($index === $inAnnotationUntilIndex) { - $inAnnotationUntilIndex = null; - - continue; - } - } elseif ($tokens[$index]->isType(DocLexer::T_AT)) { - $endIndex = $tokens->getAnnotationEnd($index); - if (null !== $endIndex) { - $inAnnotationUntilIndex = $endIndex + 1; - } - - continue; - } - - if (null === $inAnnotationUntilIndex) { - continue; - } - - if (!$token->isType([DocLexer::T_OPEN_PARENTHESIS, DocLexer::T_CLOSE_PARENTHESIS])) { - continue; - } - - if ($token->isType(DocLexer::T_OPEN_PARENTHESIS)) { - $token = $tokens[$index - 1]; - if ($token->isType(DocLexer::T_NONE)) { - $token->clear(); - } - - $token = $tokens[$index + 1]; - } else { - $token = $tokens[$index - 1]; - } - - if ($token->isType(DocLexer::T_NONE)) { - if (str_contains($token->getContent(), "\n")) { - continue; - } - - $token->clear(); - } - } - } - - private function fixSpacesAroundCommas(Tokens $tokens): void - { - $inAnnotationUntilIndex = null; - - foreach ($tokens as $index => $token) { - if (null !== $inAnnotationUntilIndex) { - if ($index === $inAnnotationUntilIndex) { - $inAnnotationUntilIndex = null; - - continue; - } - } elseif ($tokens[$index]->isType(DocLexer::T_AT)) { - $endIndex = $tokens->getAnnotationEnd($index); - if (null !== $endIndex) { - $inAnnotationUntilIndex = $endIndex; - } - - continue; - } - - if (null === $inAnnotationUntilIndex) { - continue; - } - - if (!$token->isType(DocLexer::T_COMMA)) { - continue; - } - - $token = $tokens[$index - 1]; - if ($token->isType(DocLexer::T_NONE)) { - $token->clear(); - } - - if ($index < \count($tokens) - 1 && !Preg::match('/^\s/', $tokens[$index + 1]->getContent())) { - $tokens->insertAt($index + 1, new Token(DocLexer::T_NONE, ' ')); - } - } - } - - private function fixAroundAssignments(Tokens $tokens): void - { - $beforeArguments = $this->configuration['before_argument_assignments']; - $afterArguments = $this->configuration['after_argument_assignments']; - $beforeArraysEquals = $this->configuration['before_array_assignments_equals']; - $afterArraysEquals = $this->configuration['after_array_assignments_equals']; - $beforeArraysColon = $this->configuration['before_array_assignments_colon']; - $afterArraysColon = $this->configuration['after_array_assignments_colon']; - - $scopes = []; - foreach ($tokens as $index => $token) { - $endScopeType = end($scopes); - if (false !== $endScopeType && $token->isType($endScopeType)) { - array_pop($scopes); - - continue; - } - - if ($tokens[$index]->isType(DocLexer::T_AT)) { - $scopes[] = DocLexer::T_CLOSE_PARENTHESIS; - - continue; - } - - if ($tokens[$index]->isType(DocLexer::T_OPEN_CURLY_BRACES)) { - $scopes[] = DocLexer::T_CLOSE_CURLY_BRACES; - - continue; - } - - if (DocLexer::T_CLOSE_PARENTHESIS === $endScopeType && $token->isType(DocLexer::T_EQUALS)) { - $this->updateSpacesAfter($tokens, $index, $afterArguments); - $this->updateSpacesBefore($tokens, $index, $beforeArguments); - - continue; - } - - if (DocLexer::T_CLOSE_CURLY_BRACES === $endScopeType) { - if ($token->isType(DocLexer::T_EQUALS)) { - $this->updateSpacesAfter($tokens, $index, $afterArraysEquals); - $this->updateSpacesBefore($tokens, $index, $beforeArraysEquals); - - continue; - } - - if ($token->isType(DocLexer::T_COLON)) { - $this->updateSpacesAfter($tokens, $index, $afterArraysColon); - $this->updateSpacesBefore($tokens, $index, $beforeArraysColon); - } - } - } - } - - private function updateSpacesAfter(Tokens $tokens, int $index, ?bool $insert): void - { - $this->updateSpacesAt($tokens, $index + 1, $index + 1, $insert); - } - - private function updateSpacesBefore(Tokens $tokens, int $index, ?bool $insert): void - { - $this->updateSpacesAt($tokens, $index - 1, $index, $insert); - } - - private function updateSpacesAt(Tokens $tokens, int $index, int $insertIndex, ?bool $insert): void - { - if (null === $insert) { - return; - } - - $token = $tokens[$index]; - if ($insert) { - if (!$token->isType(DocLexer::T_NONE)) { - $tokens->insertAt($insertIndex, $token = new Token()); - } - - $token->setContent(' '); - } elseif ($token->isType(DocLexer::T_NONE)) { - $token->clear(); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php deleted file mode 100644 index 6e79741b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FixerInterface.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - * @author Fabien Potencier - */ -interface FixerInterface -{ - /** - * Check if the fixer is a candidate for given Tokens collection. - * - * Fixer is a candidate when the collection contains tokens that may be fixed - * during fixer work. This could be considered as some kind of bloom filter. - * When this method returns true then to the Tokens collection may or may not - * need a fixing, but when this method returns false then the Tokens collection - * need no fixing for sure. - */ - public function isCandidate(Tokens $tokens): bool; - - /** - * Check if fixer is risky or not. - * - * Risky fixer could change code behavior! - */ - public function isRisky(): bool; - - /** - * Fixes a file. - * - * @param \SplFileInfo $file A \SplFileInfo instance - * @param Tokens $tokens Tokens collection - */ - public function fix(\SplFileInfo $file, Tokens $tokens): void; - - /** - * Returns the definition of the fixer. - */ - public function getDefinition(): FixerDefinitionInterface; - - /** - * Returns the name of the fixer. - * - * The name must be all lowercase and without any spaces. - * - * @return string The name of the fixer - */ - public function getName(): string; - - /** - * Returns the priority of the fixer. - * - * The default priority is 0 and higher priorities are executed first. - */ - public function getPriority(): int; - - /** - * Returns true if the file is supported by this fixer. - * - * @return bool true if the file is supported by this fixer, false otherwise - */ - public function supports(\SplFileInfo $file): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php deleted file mode 100644 index 985d9a93..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/CombineNestedDirnameFixer.php +++ /dev/null @@ -1,236 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class CombineNestedDirnameFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace multiple nested calls of `dirname` by only one call with second `$level` parameter. Requires PHP >= 7.0.', - [ - new CodeSample( - "isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - * - * Must run before MethodArgumentSpaceFixer, NoSpacesInsideParenthesisFixer. - * Must run after DirConstantFixer. - */ - public function getPriority(): int - { - return 35; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - $dirnameInfo = $this->getDirnameInfo($tokens, $index); - - if (!$dirnameInfo) { - continue; - } - - $prev = $tokens->getPrevMeaningfulToken($dirnameInfo['indexes'][0]); - - if (!$tokens[$prev]->equals('(')) { - continue; - } - - $prev = $tokens->getPrevMeaningfulToken($prev); - $firstArgumentEnd = $dirnameInfo['end']; - $dirnameInfoArray = [$dirnameInfo]; - - while ($dirnameInfo = $this->getDirnameInfo($tokens, $prev, $firstArgumentEnd)) { - $dirnameInfoArray[] = $dirnameInfo; - $prev = $tokens->getPrevMeaningfulToken($dirnameInfo['indexes'][0]); - - if (!$tokens[$prev]->equals('(')) { - break; - } - - $prev = $tokens->getPrevMeaningfulToken($prev); - $firstArgumentEnd = $dirnameInfo['end']; - } - - if (\count($dirnameInfoArray) > 1) { - $this->combineDirnames($tokens, $dirnameInfoArray); - } - - $index = $prev; - } - } - - /** - * @param int $index Index of `dirname` - * @param null|int $firstArgumentEndIndex Index of last token of first argument of `dirname` call - * - * @return array{indexes: list, secondArgument?: int, levels: int, end: int}|bool `false` when it is not a (supported) `dirname` call, an array with info about the dirname call otherwise - */ - private function getDirnameInfo(Tokens $tokens, int $index, ?int $firstArgumentEndIndex = null) - { - if (!$tokens[$index]->equals([T_STRING, 'dirname'], false)) { - return false; - } - - if (!(new FunctionsAnalyzer())->isGlobalFunctionCall($tokens, $index)) { - return false; - } - - $info = ['indexes' => []]; - $prev = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prev]->isGivenKind(T_NS_SEPARATOR)) { - $info['indexes'][] = $prev; - } - - $info['indexes'][] = $index; - - // opening parenthesis "(" - $next = $tokens->getNextMeaningfulToken($index); - $info['indexes'][] = $next; - - if (null !== $firstArgumentEndIndex) { - $next = $tokens->getNextMeaningfulToken($firstArgumentEndIndex); - } else { - $next = $tokens->getNextMeaningfulToken($next); - - if ($tokens[$next]->equals(')')) { - return false; - } - - while (!$tokens[$next]->equalsAny([',', ')'])) { - $blockType = Tokens::detectBlockType($tokens[$next]); - - if (null !== $blockType) { - $next = $tokens->findBlockEnd($blockType['type'], $next); - } - - $next = $tokens->getNextMeaningfulToken($next); - } - } - - $info['indexes'][] = $next; - - if ($tokens[$next]->equals(',')) { - $next = $tokens->getNextMeaningfulToken($next); - $info['indexes'][] = $next; - } - - if ($tokens[$next]->equals(')')) { - $info['levels'] = 1; - $info['end'] = $next; - - return $info; - } - - if (!$tokens[$next]->isGivenKind(T_LNUMBER)) { - return false; - } - - $info['secondArgument'] = $next; - $info['levels'] = (int) $tokens[$next]->getContent(); - - $next = $tokens->getNextMeaningfulToken($next); - - if ($tokens[$next]->equals(',')) { - $info['indexes'][] = $next; - $next = $tokens->getNextMeaningfulToken($next); - } - - if (!$tokens[$next]->equals(')')) { - return false; - } - - $info['indexes'][] = $next; - $info['end'] = $next; - - return $info; - } - - /** - * @param array, secondArgument?: int, levels: int, end: int}> $dirnameInfoArray - */ - private function combineDirnames(Tokens $tokens, array $dirnameInfoArray): void - { - $outerDirnameInfo = array_pop($dirnameInfoArray); - $levels = $outerDirnameInfo['levels']; - - foreach ($dirnameInfoArray as $dirnameInfo) { - $levels += $dirnameInfo['levels']; - - foreach ($dirnameInfo['indexes'] as $index) { - $tokens->removeLeadingWhitespace($index); - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } - - $levelsToken = new Token([T_LNUMBER, (string) $levels]); - - if (isset($outerDirnameInfo['secondArgument'])) { - $tokens[$outerDirnameInfo['secondArgument']] = $levelsToken; - } else { - $prev = $tokens->getPrevMeaningfulToken($outerDirnameInfo['end']); - $items = []; - - if (!$tokens[$prev]->equals(',')) { - $items = [new Token(','), new Token([T_WHITESPACE, ' '])]; - } - - $items[] = $levelsToken; - $tokens->insertAt($outerDirnameInfo['end'], $items); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php deleted file mode 100644 index f07f2db5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/DateTimeCreateFromFormatCallFixer.php +++ /dev/null @@ -1,165 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class DateTimeCreateFromFormatCallFixer extends AbstractFixer -{ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The first argument of `DateTime::createFromFormat` method must start with `!`.', - [ - new CodeSample("isTokenKindFound(T_DOUBLE_COLON); - } - - public function isRisky(): bool - { - return true; - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - $namespacesAnalyzer = new NamespacesAnalyzer(); - $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); - - foreach ($namespacesAnalyzer->getDeclarations($tokens) as $namespace) { - $scopeStartIndex = $namespace->getScopeStartIndex(); - $useDeclarations = $namespaceUsesAnalyzer->getDeclarationsInNamespace($tokens, $namespace); - - for ($index = $namespace->getScopeEndIndex(); $index > $scopeStartIndex; --$index) { - if (!$tokens[$index]->isGivenKind(T_DOUBLE_COLON)) { - continue; - } - - $functionNameIndex = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$functionNameIndex]->equals([T_STRING, 'createFromFormat'], false)) { - continue; - } - - if (!$tokens[$tokens->getNextMeaningfulToken($functionNameIndex)]->equals('(')) { - continue; - } - - $classNameIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$classNameIndex]->equalsAny([[T_STRING, 'DateTime'], [T_STRING, 'DateTimeImmutable']], false)) { - continue; - } - - $preClassNameIndex = $tokens->getPrevMeaningfulToken($classNameIndex); - - if ($tokens[$preClassNameIndex]->isGivenKind(T_NS_SEPARATOR)) { - if ($tokens[$tokens->getPrevMeaningfulToken($preClassNameIndex)]->isGivenKind(T_STRING)) { - continue; - } - } elseif (!$namespace->isGlobalNamespace()) { - continue; - } else { - foreach ($useDeclarations as $useDeclaration) { - foreach (['datetime', 'datetimeimmutable'] as $name) { - if ($name === strtolower($useDeclaration->getShortName()) && $name !== strtolower($useDeclaration->getFullName())) { - continue 3; - } - } - } - } - - $openIndex = $tokens->getNextTokenOfKind($functionNameIndex, ['(']); - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - - $argumentIndex = $this->getFirstArgumentTokenIndex($tokens, $argumentsAnalyzer->getArguments($tokens, $openIndex, $closeIndex)); - - if (null === $argumentIndex) { - continue; - } - - $format = $tokens[$argumentIndex]->getContent(); - - if (\strlen($format) < 3) { - continue; - } - - $offset = 'b' === $format[0] || 'B' === $format[0] ? 2 : 1; - - if ('!' === $format[$offset]) { - continue; - } - - $tokens->clearAt($argumentIndex); - $tokens->insertAt($argumentIndex, new Token([T_CONSTANT_ENCAPSED_STRING, substr_replace($format, '!', $offset, 0)])); - } - } - } - - /** - * @param array $arguments - */ - private function getFirstArgumentTokenIndex(Tokens $tokens, array $arguments): ?int - { - if (2 !== \count($arguments)) { - return null; - } - - $argumentStartIndex = array_key_first($arguments); - $argumentEndIndex = $arguments[$argumentStartIndex]; - $argumentStartIndex = $tokens->getNextMeaningfulToken($argumentStartIndex - 1); - - if ( - $argumentStartIndex !== $argumentEndIndex - && $tokens->getNextMeaningfulToken($argumentStartIndex) <= $argumentEndIndex - ) { - return null; // argument is not a simple single string - } - - return !$tokens[$argumentStartIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING) - ? null // first argument is not a string - : $argumentStartIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php deleted file mode 100644 index 15b0174f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagOrderFixer.php +++ /dev/null @@ -1,126 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFopenFlagFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class FopenFlagOrderFixer extends AbstractFopenFlagFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Order the flags in `fopen` calls, `b` and `t` must be last.', - [new CodeSample("isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - continue; - } - - if (null !== $argumentFlagIndex) { - return; // multiple meaningful tokens found, no candidate for fixing - } - - $argumentFlagIndex = $i; - } - - // check if second argument is candidate - if (null === $argumentFlagIndex || !$tokens[$argumentFlagIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - return; - } - - $content = $tokens[$argumentFlagIndex]->getContent(); - $contentQuote = $content[0]; // `'`, `"`, `b` or `B` - - if ('b' === $contentQuote || 'B' === $contentQuote) { - $binPrefix = $contentQuote; - $contentQuote = $content[1]; // `'` or `"` - $mode = substr($content, 2, -1); - } else { - $binPrefix = ''; - $mode = substr($content, 1, -1); - } - - $modeLength = \strlen($mode); - if ($modeLength < 2) { - return; // nothing to sort - } - - if (false === $this->isValidModeString($mode)) { - return; - } - - $split = $this->sortFlags(Preg::split('#([^\+]\+?)#', $mode, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)); - $newContent = $binPrefix.$contentQuote.implode('', $split).$contentQuote; - - if ($content !== $newContent) { - $tokens[$argumentFlagIndex] = new Token([T_CONSTANT_ENCAPSED_STRING, $newContent]); - } - } - - /** - * @param string[] $flags - * - * @return string[] - */ - private function sortFlags(array $flags): array - { - usort( - $flags, - static function (string $flag1, string $flag2): int { - if ($flag1 === $flag2) { - return 0; - } - - if ('b' === $flag1) { - return 1; - } - - if ('b' === $flag2) { - return -1; - } - - if ('t' === $flag1) { - return 1; - } - - if ('t' === $flag2) { - return -1; - } - - return $flag1 < $flag2 ? -1 : 1; - } - ); - - return $flags; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php deleted file mode 100644 index 55412a18..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FopenFlagsFixer.php +++ /dev/null @@ -1,112 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFopenFlagFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class FopenFlagsFixer extends AbstractFopenFlagFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The flags in `fopen` calls must omit `t`, and `b` must be omitted or included consistently.', - [ - new CodeSample(" false]), - ], - null, - 'Risky when the function `fopen` is overridden.' - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('b_mode', 'The `b` flag must be used (`true`) or omitted (`false`).')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - protected function fixFopenFlagToken(Tokens $tokens, int $argumentStartIndex, int $argumentEndIndex): void - { - $argumentFlagIndex = null; - - for ($i = $argumentStartIndex; $i <= $argumentEndIndex; ++$i) { - if ($tokens[$i]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - continue; - } - - if (null !== $argumentFlagIndex) { - return; // multiple meaningful tokens found, no candidate for fixing - } - - $argumentFlagIndex = $i; - } - - // check if second argument is candidate - if (null === $argumentFlagIndex || !$tokens[$argumentFlagIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - return; - } - - $content = $tokens[$argumentFlagIndex]->getContent(); - $contentQuote = $content[0]; // `'`, `"`, `b` or `B` - - if ('b' === $contentQuote || 'B' === $contentQuote) { - $binPrefix = $contentQuote; - $contentQuote = $content[1]; // `'` or `"` - $mode = substr($content, 2, -1); - } else { - $binPrefix = ''; - $mode = substr($content, 1, -1); - } - - if (false === $this->isValidModeString($mode)) { - return; - } - - $mode = str_replace('t', '', $mode); - - if (true === $this->configuration['b_mode']) { - if (!str_contains($mode, 'b')) { - $mode .= 'b'; - } - } else { - $mode = str_replace('b', '', $mode); - } - - $newContent = $binPrefix.$contentQuote.$mode.$contentQuote; - - if ($content !== $newContent) { - $tokens[$argumentFlagIndex] = new Token([T_CONSTANT_ENCAPSED_STRING, $newContent]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php deleted file mode 100644 index e61c4214..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionDeclarationFixer.php +++ /dev/null @@ -1,261 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * Fixer for rules defined in PSR2 generally (¶1 and ¶6). - * - * @author Dariusz Rumiński - */ -final class FunctionDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const SPACING_NONE = 'none'; - - /** - * @internal - */ - public const SPACING_ONE = 'one'; - - private const SUPPORTED_SPACINGS = [self::SPACING_NONE, self::SPACING_ONE]; - - private string $singleLineWhitespaceOptions = " \t"; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Spaces should be properly placed in a function declaration.', - [ - new CodeSample( - ' self::SPACING_NONE] - ), - new VersionSpecificCodeSample( - ' null; -', - new VersionSpecification(70400), - ['closure_fn_spacing' => self::SPACING_NONE] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before MethodArgumentSpaceFixer. - * Must run after SingleSpaceAfterConstructFixer. - */ - public function getPriority(): int - { - return 31; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_FUNCTION, T_FN])) { - continue; - } - - $startParenthesisIndex = $tokens->getNextTokenOfKind($index, ['(', ';', [T_CLOSE_TAG]]); - - if (!$tokens[$startParenthesisIndex]->equals('(')) { - continue; - } - - $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startParenthesisIndex); - - if (false === $this->configuration['trailing_comma_single_line'] - && !$tokens->isPartialCodeMultiline($index, $endParenthesisIndex) - ) { - $commaIndex = $tokens->getPrevMeaningfulToken($endParenthesisIndex); - - if ($tokens[$commaIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($commaIndex); - } - } - - $startBraceIndex = $tokens->getNextTokenOfKind($endParenthesisIndex, [';', '{', [T_DOUBLE_ARROW]]); - - // fix single-line whitespace before { or => - // eg: `function foo(){}` => `function foo() {}` - // eg: `function foo() {}` => `function foo() {}` - // eg: `fn() =>` => `fn() =>` - if ( - $tokens[$startBraceIndex]->equalsAny(['{', [T_DOUBLE_ARROW]]) - && ( - !$tokens[$startBraceIndex - 1]->isWhitespace() - || $tokens[$startBraceIndex - 1]->isWhitespace($this->singleLineWhitespaceOptions) - ) - ) { - $tokens->ensureWhitespaceAtIndex($startBraceIndex - 1, 1, ' '); - } - - $afterParenthesisIndex = $tokens->getNextNonWhitespace($endParenthesisIndex); - $afterParenthesisToken = $tokens[$afterParenthesisIndex]; - - if ($afterParenthesisToken->isGivenKind(CT::T_USE_LAMBDA)) { - // fix whitespace after CT:T_USE_LAMBDA (we might add a token, so do this before determining start and end parenthesis) - $tokens->ensureWhitespaceAtIndex($afterParenthesisIndex + 1, 0, ' '); - - $useStartParenthesisIndex = $tokens->getNextTokenOfKind($afterParenthesisIndex, ['(']); - $useEndParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $useStartParenthesisIndex); - - if (false === $this->configuration['trailing_comma_single_line'] - && !$tokens->isPartialCodeMultiline($index, $useEndParenthesisIndex) - ) { - $commaIndex = $tokens->getPrevMeaningfulToken($useEndParenthesisIndex); - - if ($tokens[$commaIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($commaIndex); - } - } - - // remove single-line edge whitespaces inside use parentheses - $this->fixParenthesisInnerEdge($tokens, $useStartParenthesisIndex, $useEndParenthesisIndex); - - // fix whitespace before CT::T_USE_LAMBDA - $tokens->ensureWhitespaceAtIndex($afterParenthesisIndex - 1, 1, ' '); - } - - // remove single-line edge whitespaces inside parameters list parentheses - $this->fixParenthesisInnerEdge($tokens, $startParenthesisIndex, $endParenthesisIndex); - $isLambda = $tokensAnalyzer->isLambda($index); - - // remove whitespace before ( - // eg: `function foo () {}` => `function foo() {}` - if (!$isLambda && $tokens[$startParenthesisIndex - 1]->isWhitespace() && !$tokens[$tokens->getPrevNonWhitespace($startParenthesisIndex - 1)]->isComment()) { - $tokens->clearAt($startParenthesisIndex - 1); - } - - $option = $token->isGivenKind(T_FN) ? 'closure_fn_spacing' : 'closure_function_spacing'; - - if ($isLambda && self::SPACING_NONE === $this->configuration[$option]) { - // optionally remove whitespace after T_FUNCTION of a closure - // eg: `function () {}` => `function() {}` - if ($tokens[$index + 1]->isWhitespace()) { - $tokens->clearAt($index + 1); - } - } else { - // otherwise, enforce whitespace after T_FUNCTION - // eg: `function foo() {}` => `function foo() {}` - $tokens->ensureWhitespaceAtIndex($index + 1, 0, ' '); - } - - if ($isLambda) { - $prev = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prev]->isGivenKind(T_STATIC)) { - // fix whitespace after T_STATIC - // eg: `$a = static function(){};` => `$a = static function(){};` - $tokens->ensureWhitespaceAtIndex($prev + 1, 0, ' '); - } - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('closure_function_spacing', 'Spacing to use before open parenthesis for closures.')) - ->setDefault(self::SPACING_ONE) - ->setAllowedValues(self::SUPPORTED_SPACINGS) - ->getOption(), - (new FixerOptionBuilder('closure_fn_spacing', 'Spacing to use before open parenthesis for short arrow functions.')) - ->setDefault(self::SPACING_ONE) // @TODO change to SPACING_NONE on next major 4.0 - ->setAllowedValues(self::SUPPORTED_SPACINGS) - ->getOption(), - (new FixerOptionBuilder('trailing_comma_single_line', 'Whether trailing commas are allowed in single line signatures.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - private function fixParenthesisInnerEdge(Tokens $tokens, int $start, int $end): void - { - do { - --$end; - } while ($tokens->isEmptyAt($end)); - - // remove single-line whitespace before `)` - if ($tokens[$end]->isWhitespace($this->singleLineWhitespaceOptions)) { - $tokens->clearAt($end); - } - - // remove single-line whitespace after `(` - if ($tokens[$start + 1]->isWhitespace($this->singleLineWhitespaceOptions)) { - $tokens->clearAt($start + 1); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php deleted file mode 100644 index f1f16cc9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/FunctionTypehintSpaceFixer.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class FunctionTypehintSpaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Ensure single space between function\'s argument and its typehint.', - [ - new CodeSample("isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_FUNCTION, T_FN])) { - continue; - } - - $arguments = $functionsAnalyzer->getFunctionArguments($tokens, $index); - - foreach (array_reverse($arguments) as $argument) { - $type = $argument->getTypeAnalysis(); - - if (!$type instanceof TypeAnalysis) { - continue; - } - - $tokens->ensureWhitespaceAtIndex($type->getEndIndex() + 1, 0, ' '); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php deleted file mode 100644 index 166482d6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ImplodeCallFixer.php +++ /dev/null @@ -1,151 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class ImplodeCallFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Function `implode` must be called with 2 arguments in the documented order.', - [ - new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - * - * Must run before MethodArgumentSpaceFixer. - * Must run after NoAliasFunctionsFixer. - */ - public function getPriority(): int - { - return 37; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - for ($index = \count($tokens) - 1; $index > 0; --$index) { - if (!$tokens[$index]->equals([T_STRING, 'implode'], false)) { - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $argumentsIndices = $this->getArgumentIndices($tokens, $index); - - if (1 === \count($argumentsIndices)) { - $firstArgumentIndex = key($argumentsIndices); - $tokens->insertAt($firstArgumentIndex, [ - new Token([T_CONSTANT_ENCAPSED_STRING, "''"]), - new Token(','), - new Token([T_WHITESPACE, ' ']), - ]); - - continue; - } - - if (2 === \count($argumentsIndices)) { - [$firstArgumentIndex, $secondArgumentIndex] = array_keys($argumentsIndices); - - // If the first argument is string we have nothing to do - if ($tokens[$firstArgumentIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - continue; - } - // If the second argument is not string we cannot make a swap - if (!$tokens[$secondArgumentIndex]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - continue; - } - - // collect tokens from first argument - $firstArgumentEndIndex = $argumentsIndices[key($argumentsIndices)]; - $newSecondArgumentTokens = []; - for ($i = key($argumentsIndices); $i <= $firstArgumentEndIndex; ++$i) { - $newSecondArgumentTokens[] = clone $tokens[$i]; - $tokens->clearAt($i); - } - - $tokens->insertAt($firstArgumentIndex, clone $tokens[$secondArgumentIndex]); - - // insert above increased the second argument index - ++$secondArgumentIndex; - $tokens->clearAt($secondArgumentIndex); - $tokens->insertAt($secondArgumentIndex, $newSecondArgumentTokens); - } - } - } - - /** - * @return array In the format: startIndex => endIndex - */ - private function getArgumentIndices(Tokens $tokens, int $functionNameIndex): array - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - $openParenthesis = $tokens->getNextTokenOfKind($functionNameIndex, ['(']); - $closeParenthesis = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesis); - - $indices = []; - - foreach ($argumentsAnalyzer->getArguments($tokens, $openParenthesis, $closeParenthesis) as $startIndexCandidate => $endIndex) { - $indices[$tokens->getNextMeaningfulToken($startIndexCandidate - 1)] = $tokens->getPrevMeaningfulToken($endIndex + 1); - } - - return $indices; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php deleted file mode 100644 index b60dd148..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/LambdaNotUsedImportFixer.php +++ /dev/null @@ -1,352 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class LambdaNotUsedImportFixer extends AbstractFixer -{ - /** - * @var ArgumentsAnalyzer - */ - private $argumentsAnalyzer; - - /** - * @var FunctionsAnalyzer - */ - private $functionAnalyzer; - - /** - * @var TokensAnalyzer - */ - private $tokensAnalyzer; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Lambda must not import variables it doesn\'t use.', - [new CodeSample("isAllTokenKindsFound([T_FUNCTION, CT::T_USE_LAMBDA]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->argumentsAnalyzer = new ArgumentsAnalyzer(); - $this->functionAnalyzer = new FunctionsAnalyzer(); - $this->tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 4; $index > 0; --$index) { - $lambdaUseIndex = $this->getLambdaUseIndex($tokens, $index); - - if (false !== $lambdaUseIndex) { - $this->fixLambda($tokens, $lambdaUseIndex); - } - } - } - - private function fixLambda(Tokens $tokens, int $lambdaUseIndex): void - { - $lambdaUseOpenBraceIndex = $tokens->getNextTokenOfKind($lambdaUseIndex, ['(']); - $lambdaUseCloseBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $lambdaUseOpenBraceIndex); - $arguments = $this->argumentsAnalyzer->getArguments($tokens, $lambdaUseOpenBraceIndex, $lambdaUseCloseBraceIndex); - - $imports = $this->filterArguments($tokens, $arguments); - - if (0 === \count($imports)) { - return; // no imports to remove - } - - $notUsedImports = $this->findNotUsedLambdaImports($tokens, $imports, $lambdaUseCloseBraceIndex); - $notUsedImportsCount = \count($notUsedImports); - - if (0 === $notUsedImportsCount) { - return; // no not used imports found - } - - if ($notUsedImportsCount === \count($arguments)) { - $this->clearImportsAndUse($tokens, $lambdaUseIndex, $lambdaUseCloseBraceIndex); // all imports are not used - - return; - } - - $this->clearImports($tokens, array_reverse($notUsedImports)); - } - - /** - * @return array - */ - private function findNotUsedLambdaImports(Tokens $tokens, array $imports, int $lambdaUseCloseBraceIndex): array - { - static $riskyKinds = [ - CT::T_DYNAMIC_VAR_BRACE_OPEN, - T_EVAL, - T_INCLUDE, - T_INCLUDE_ONCE, - T_REQUIRE, - T_REQUIRE_ONCE, - ]; - - // figure out where the lambda starts ... - $lambdaOpenIndex = $tokens->getNextTokenOfKind($lambdaUseCloseBraceIndex, ['{']); - $curlyBracesLevel = 0; - - for ($index = $lambdaOpenIndex;; ++$index) { // go through the body of the lambda and keep count of the (possible) usages of the imported variables - $token = $tokens[$index]; - - if ($token->equals('{')) { - ++$curlyBracesLevel; - - continue; - } - - if ($token->equals('}')) { - --$curlyBracesLevel; - - if (0 === $curlyBracesLevel) { - break; - } - - continue; - } - - if ($token->isGivenKind(T_STRING) && 'compact' === strtolower($token->getContent()) && $this->functionAnalyzer->isGlobalFunctionCall($tokens, $index)) { - return []; // wouldn't touch it with a ten-foot pole - } - - if ($token->isGivenKind($riskyKinds)) { - return []; - } - - if ($token->equals('$')) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextIndex]->isGivenKind(T_VARIABLE)) { - return []; // "$$a" case - } - } - - if ($token->isGivenKind(T_VARIABLE)) { - $content = $token->getContent(); - - if (isset($imports[$content])) { - unset($imports[$content]); - - if (0 === \count($imports)) { - return $imports; - } - } - } - - if ($token->isGivenKind(T_STRING_VARNAME)) { - $content = '$'.$token->getContent(); - - if (isset($imports[$content])) { - unset($imports[$content]); - - if (0 === \count($imports)) { - return $imports; - } - } - } - - if ($token->isClassy()) { // is anonymous class - // check if used as argument in the constructor of the anonymous class - $index = $tokens->getNextTokenOfKind($index, ['(', '{']); - - if ($tokens[$index]->equals('(')) { - $closeBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $arguments = $this->argumentsAnalyzer->getArguments($tokens, $index, $closeBraceIndex); - - $imports = $this->countImportsUsedAsArgument($tokens, $imports, $arguments); - - $index = $tokens->getNextTokenOfKind($closeBraceIndex, ['{']); - } - - // skip body - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if ($token->isGivenKind(T_FUNCTION)) { - // check if used as argument - $lambdaUseOpenBraceIndex = $tokens->getNextTokenOfKind($index, ['(']); - $lambdaUseCloseBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $lambdaUseOpenBraceIndex); - $arguments = $this->argumentsAnalyzer->getArguments($tokens, $lambdaUseOpenBraceIndex, $lambdaUseCloseBraceIndex); - - $imports = $this->countImportsUsedAsArgument($tokens, $imports, $arguments); - - // check if used as import - $index = $tokens->getNextTokenOfKind($index, [[CT::T_USE_LAMBDA], '{']); - - if ($tokens[$index]->isGivenKind(CT::T_USE_LAMBDA)) { - $lambdaUseOpenBraceIndex = $tokens->getNextTokenOfKind($index, ['(']); - $lambdaUseCloseBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $lambdaUseOpenBraceIndex); - $arguments = $this->argumentsAnalyzer->getArguments($tokens, $lambdaUseOpenBraceIndex, $lambdaUseCloseBraceIndex); - - $imports = $this->countImportsUsedAsArgument($tokens, $imports, $arguments); - - $index = $tokens->getNextTokenOfKind($lambdaUseCloseBraceIndex, ['{']); - } - - // skip body - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - } - - return $imports; - } - - private function countImportsUsedAsArgument(Tokens $tokens, array $imports, array $arguments): array - { - foreach ($arguments as $start => $end) { - $info = $this->argumentsAnalyzer->getArgumentInfo($tokens, $start, $end); - $content = $info->getName(); - - if (isset($imports[$content])) { - unset($imports[$content]); - - if (0 === \count($imports)) { - return $imports; - } - } - } - - return $imports; - } - - /** - * @return false|int - */ - private function getLambdaUseIndex(Tokens $tokens, int $index) - { - if (!$tokens[$index]->isGivenKind(T_FUNCTION) || !$this->tokensAnalyzer->isLambda($index)) { - return false; - } - - $lambdaUseIndex = $tokens->getNextMeaningfulToken($index); // we are @ '(' or '&' after this - - if ($tokens[$lambdaUseIndex]->isGivenKind(CT::T_RETURN_REF)) { - $lambdaUseIndex = $tokens->getNextMeaningfulToken($lambdaUseIndex); - } - - $lambdaUseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $lambdaUseIndex); // we are @ ')' after this - $lambdaUseIndex = $tokens->getNextMeaningfulToken($lambdaUseIndex); - - if (!$tokens[$lambdaUseIndex]->isGivenKind(CT::T_USE_LAMBDA)) { - return false; - } - - return $lambdaUseIndex; - } - - private function filterArguments(Tokens $tokens, array $arguments): array - { - $imports = []; - - foreach ($arguments as $start => $end) { - $info = $this->argumentsAnalyzer->getArgumentInfo($tokens, $start, $end); - $argument = $info->getNameIndex(); - - if ($tokens[$tokens->getPrevMeaningfulToken($argument)]->equals('&')) { - continue; - } - - $argumentCandidate = $tokens[$argument]; - - if ('$this' === $argumentCandidate->getContent()) { - continue; - } - - if ($this->tokensAnalyzer->isSuperGlobal($argument)) { - continue; - } - - $imports[$argumentCandidate->getContent()] = $argument; - } - - return $imports; - } - - /** - * @param array $imports - */ - private function clearImports(Tokens $tokens, array $imports): void - { - foreach ($imports as $removeIndex) { - $tokens->clearTokenAndMergeSurroundingWhitespace($removeIndex); - $previousRemoveIndex = $tokens->getPrevMeaningfulToken($removeIndex); - - if ($tokens[$previousRemoveIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($previousRemoveIndex); - } elseif ($tokens[$previousRemoveIndex]->equals('(')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($tokens->getNextMeaningfulToken($removeIndex)); // next is always ',' here - } - } - } - - /** - * Remove `use` and all imported variables. - */ - private function clearImportsAndUse(Tokens $tokens, int $lambdaUseIndex, int $lambdaUseCloseBraceIndex): void - { - for ($i = $lambdaUseCloseBraceIndex; $i >= $lambdaUseIndex; --$i) { - if ($tokens[$i]->isComment()) { - continue; - } - - if ($tokens[$i]->isWhitespace()) { - $previousIndex = $tokens->getPrevNonWhitespace($i); - - if ($tokens[$previousIndex]->isComment()) { - continue; - } - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php deleted file mode 100644 index 527de0bf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/MethodArgumentSpaceFixer.php +++ /dev/null @@ -1,468 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶4.4, ¶4.6. - * - * @author Kuanhung Chen - */ -final class MethodArgumentSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'In method arguments and method call, there MUST NOT be a space before each comma and there MUST be one space after each comma. Argument lists MAY be split across multiple lines, where each subsequent line is indented once. When doing so, the first item in the list MUST be on the next line, and there MUST be only one argument per line.', - [ - new CodeSample( - " false] - ), - new CodeSample( - " true] - ), - new CodeSample( - " 'ensure_fully_multiline'] - ), - new CodeSample( - " 'ensure_single_line'] - ), - new CodeSample( - " 'ensure_fully_multiline', - 'keep_multiple_spaces_after_comma' => true, - ] - ), - new CodeSample( - " 'ensure_fully_multiline', - 'keep_multiple_spaces_after_comma' => false, - ] - ), - new VersionSpecificCodeSample( - <<<'SAMPLE' - true] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('('); - } - - public function configure(array $configuration): void - { - parent::configure($configuration); - - if (isset($configuration['ensure_fully_multiline'])) { - $this->configuration['on_multiline'] = $this->configuration['ensure_fully_multiline'] - ? 'ensure_fully_multiline' - : 'ignore'; - } - } - - /** - * {@inheritdoc} - * - * Must run before ArrayIndentationFixer. - * Must run after CombineNestedDirnameFixer, FunctionDeclarationFixer, ImplodeCallFixer, LambdaNotUsedImportFixer, NoMultilineWhitespaceAroundDoubleArrowFixer, NoUselessSprintfFixer, PowToExponentiationFixer, StrictParamFixer. - */ - public function getPriority(): int - { - return 30; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $expectedTokens = [T_LIST, T_FUNCTION, CT::T_USE_LAMBDA, T_FN, T_CLASS]; - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - $token = $tokens[$index]; - - if (!$token->equals('(')) { - continue; - } - - $meaningfulTokenBeforeParenthesis = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if ( - $meaningfulTokenBeforeParenthesis->isKeyword() - && !$meaningfulTokenBeforeParenthesis->isGivenKind($expectedTokens) - ) { - continue; - } - - $isMultiline = $this->fixFunction($tokens, $index); - - if ( - $isMultiline - && 'ensure_fully_multiline' === $this->configuration['on_multiline'] - && !$meaningfulTokenBeforeParenthesis->isGivenKind(T_LIST) - ) { - $this->ensureFunctionFullyMultiline($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('keep_multiple_spaces_after_comma', 'Whether keep multiple spaces after comma.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder( - 'on_multiline', - 'Defines how to handle function arguments lists that contain newlines.' - )) - ->setAllowedValues(['ignore', 'ensure_single_line', 'ensure_fully_multiline']) - ->setDefault('ensure_fully_multiline') - ->getOption(), - (new FixerOptionBuilder('after_heredoc', 'Whether the whitespace between heredoc end and comma should be removed.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * Fix arguments spacing for given function. - * - * @param Tokens $tokens Tokens to handle - * @param int $startFunctionIndex Start parenthesis position - * - * @return bool whether the function is multiline - */ - private function fixFunction(Tokens $tokens, int $startFunctionIndex): bool - { - $isMultiline = false; - - $endFunctionIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startFunctionIndex); - $firstWhitespaceIndex = $this->findWhitespaceIndexAfterParenthesis($tokens, $startFunctionIndex, $endFunctionIndex); - $lastWhitespaceIndex = $this->findWhitespaceIndexAfterParenthesis($tokens, $endFunctionIndex, $startFunctionIndex); - - foreach ([$firstWhitespaceIndex, $lastWhitespaceIndex] as $index) { - if (null === $index || !Preg::match('/\R/', $tokens[$index]->getContent())) { - continue; - } - - if ('ensure_single_line' !== $this->configuration['on_multiline']) { - $isMultiline = true; - - continue; - } - - $newLinesRemoved = $this->ensureSingleLine($tokens, $index); - - if (!$newLinesRemoved) { - $isMultiline = true; - } - } - - for ($index = $endFunctionIndex - 1; $index > $startFunctionIndex; --$index) { - $token = $tokens[$index]; - - if ($token->equals(')')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - continue; - } - - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_CLOSE)) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index); - - continue; - } - - if ($token->equals('}')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if ($token->equals(',')) { - $this->fixSpace($tokens, $index); - if (!$isMultiline && $this->isNewline($tokens[$index + 1])) { - $isMultiline = true; - } - } - } - - return $isMultiline; - } - - private function findWhitespaceIndexAfterParenthesis(Tokens $tokens, int $startParenthesisIndex, int $endParenthesisIndex): ?int - { - $direction = $endParenthesisIndex > $startParenthesisIndex ? 1 : -1; - $startIndex = $startParenthesisIndex + $direction; - $endIndex = $endParenthesisIndex - $direction; - - for ($index = $startIndex; $index !== $endIndex; $index += $direction) { - $token = $tokens[$index]; - - if ($token->isWhitespace()) { - return $index; - } - - if (!$token->isComment()) { - break; - } - } - - return null; - } - - /** - * @return bool Whether newlines were removed from the whitespace token - */ - private function ensureSingleLine(Tokens $tokens, int $index): bool - { - $previousToken = $tokens[$index - 1]; - - if ($previousToken->isComment() && !str_starts_with($previousToken->getContent(), '/*')) { - return false; - } - - $content = Preg::replace('/\R\h*/', '', $tokens[$index]->getContent()); - - $tokens->ensureWhitespaceAtIndex($index, 0, $content); - - return true; - } - - private function ensureFunctionFullyMultiline(Tokens $tokens, int $startFunctionIndex): void - { - // find out what the indentation is - $searchIndex = $startFunctionIndex; - do { - $prevWhitespaceTokenIndex = $tokens->getPrevTokenOfKind( - $searchIndex, - [[T_WHITESPACE]] - ); - - $searchIndex = $prevWhitespaceTokenIndex; - } while (null !== $prevWhitespaceTokenIndex - && !str_contains($tokens[$prevWhitespaceTokenIndex]->getContent(), "\n") - ); - - if (null === $prevWhitespaceTokenIndex) { - $existingIndentation = ''; - } else { - $existingIndentation = $tokens[$prevWhitespaceTokenIndex]->getContent(); - $lastLineIndex = strrpos($existingIndentation, "\n"); - $existingIndentation = false === $lastLineIndex - ? $existingIndentation - : substr($existingIndentation, $lastLineIndex + 1) - ; - } - - $indentation = $existingIndentation.$this->whitespacesConfig->getIndent(); - $endFunctionIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startFunctionIndex); - - $wasWhitespaceBeforeEndFunctionAddedAsNewToken = $tokens->ensureWhitespaceAtIndex( - $tokens[$endFunctionIndex - 1]->isWhitespace() ? $endFunctionIndex - 1 : $endFunctionIndex, - 0, - $this->whitespacesConfig->getLineEnding().$existingIndentation - ); - - if ($wasWhitespaceBeforeEndFunctionAddedAsNewToken) { - ++$endFunctionIndex; - } - - for ($index = $endFunctionIndex - 1; $index > $startFunctionIndex; --$index) { - $token = $tokens[$index]; - - // skip nested method calls and arrays - if ($token->equals(')')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - continue; - } - - // skip nested arrays - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_CLOSE)) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index); - - continue; - } - - if ($token->equals('}')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if ($token->equals(',') && !$tokens[$tokens->getNextMeaningfulToken($index)]->equals(')')) { - $this->fixNewline($tokens, $index, $indentation); - } - } - - $this->fixNewline($tokens, $startFunctionIndex, $indentation, false); - } - - /** - * Method to insert newline after comma or opening parenthesis. - * - * @param int $index index of a comma - * @param string $indentation the indentation that should be used - * @param bool $override whether to override the existing character or not - */ - private function fixNewline(Tokens $tokens, int $index, string $indentation, bool $override = true): void - { - if ($tokens[$index + 1]->isComment()) { - return; - } - - if ($tokens[$index + 2]->isComment()) { - $nextMeaningfulTokenIndex = $tokens->getNextMeaningfulToken($index + 2); - if (!$this->isNewline($tokens[$nextMeaningfulTokenIndex - 1])) { - $tokens->ensureWhitespaceAtIndex($nextMeaningfulTokenIndex, 0, $this->whitespacesConfig->getLineEnding().$indentation); - } - - return; - } - - $nextMeaningfulTokenIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextMeaningfulTokenIndex]->equals(')')) { - return; - } - - $tokens->ensureWhitespaceAtIndex($index + 1, 0, $this->whitespacesConfig->getLineEnding().$indentation); - } - - /** - * Method to insert space after comma and remove space before comma. - */ - private function fixSpace(Tokens $tokens, int $index): void - { - // remove space before comma if exist - if ($tokens[$index - 1]->isWhitespace()) { - $prevIndex = $tokens->getPrevNonWhitespace($index - 1); - - if ( - !$tokens[$prevIndex]->equals(',') && !$tokens[$prevIndex]->isComment() - && (true === $this->configuration['after_heredoc'] || !$tokens[$prevIndex]->isGivenKind(T_END_HEREDOC)) - ) { - $tokens->clearAt($index - 1); - } - } - - $nextIndex = $index + 1; - $nextToken = $tokens[$nextIndex]; - - // Two cases for fix space after comma (exclude multiline comments) - // 1) multiple spaces after comma - // 2) no space after comma - if ($nextToken->isWhitespace()) { - $newContent = $nextToken->getContent(); - - if ('ensure_single_line' === $this->configuration['on_multiline']) { - $newContent = Preg::replace('/\R/', '', $newContent); - } - - if ( - (false === $this->configuration['keep_multiple_spaces_after_comma'] || Preg::match('/\R/', $newContent)) - && !$this->isCommentLastLineToken($tokens, $index + 2) - ) { - $newContent = ltrim($newContent, " \t"); - } - - $tokens[$nextIndex] = new Token([T_WHITESPACE, '' === $newContent ? ' ' : $newContent]); - - return; - } - - if (!$this->isCommentLastLineToken($tokens, $index + 1)) { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - } - - /** - * Check if last item of current line is a comment. - * - * @param Tokens $tokens tokens to handle - * @param int $index index of token - */ - private function isCommentLastLineToken(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isComment() || !$tokens[$index + 1]->isWhitespace()) { - return false; - } - - $content = $tokens[$index + 1]->getContent(); - - return $content !== ltrim($content, "\r\n"); - } - - /** - * Checks if token is new line. - */ - private function isNewline(Token $token): bool - { - return $token->isWhitespace() && str_contains($token->getContent(), "\n"); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php deleted file mode 100644 index 7ccbbfa7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NativeFunctionInvocationFixer.php +++ /dev/null @@ -1,424 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Andreas Möller - */ -final class NativeFunctionInvocationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const SET_ALL = '@all'; - - /** - * Subset of SET_INTERNAL. - * - * Change function call to functions known to be optimized by the Zend engine. - * For details: - * - @see https://github.com/php/php-src/blob/php-7.2.6/Zend/zend_compile.c "zend_try_compile_special_func" - * - @see https://github.com/php/php-src/blob/php-7.2.6/ext/opcache/Optimizer/pass1_5.c - * - * @internal - */ - public const SET_COMPILER_OPTIMIZED = '@compiler_optimized'; - - /** - * @internal - */ - public const SET_INTERNAL = '@internal'; - - /** - * @var callable - */ - private $functionFilter; - - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->functionFilter = $this->getFunctionFilter(); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Add leading `\` before function invocation to speed up resolving.', - [ - new CodeSample( - ' [ - 'json_encode', - ], - ] - ), - new CodeSample( - ' 'all'] - ), - new CodeSample( - ' 'namespaced'] - ), - new CodeSample( - ' ['myGlobalFunction']] - ), - new CodeSample( - ' ['@all']] - ), - new CodeSample( - ' ['@internal']] - ), - new CodeSample( - ' ['@compiler_optimized']] - ), - ], - null, - 'Risky when any of the functions are overridden.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before GlobalNamespaceImportFixer. - * Must run after BacktickToShellExecFixer, RegularCallableCallFixer, StrictParamFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if ('all' === $this->configuration['scope']) { - $this->fixFunctionCalls($tokens, $this->functionFilter, 0, \count($tokens) - 1, false); - - return; - } - - $namespaces = (new NamespacesAnalyzer())->getDeclarations($tokens); - - // 'scope' is 'namespaced' here - /** @var NamespaceAnalysis $namespace */ - foreach (array_reverse($namespaces) as $namespace) { - $this->fixFunctionCalls($tokens, $this->functionFilter, $namespace->getScopeStartIndex(), $namespace->getScopeEndIndex(), $namespace->isGlobalNamespace()); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('exclude', 'List of functions to ignore.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $value): bool { - foreach ($value as $functionName) { - if (!\is_string($functionName) || '' === trim($functionName) || trim($functionName) !== $functionName) { - throw new InvalidOptionsException(sprintf( - 'Each element must be a non-empty, trimmed string, got "%s" instead.', - get_debug_type($functionName) - )); - } - } - - return true; - }]) - ->setDefault([]) - ->getOption(), - (new FixerOptionBuilder('include', 'List of function names or sets to fix. Defined sets are `@internal` (all native functions), `@all` (all global functions) and `@compiler_optimized` (functions that are specially optimized by Zend).')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $value): bool { - foreach ($value as $functionName) { - if (!\is_string($functionName) || '' === trim($functionName) || trim($functionName) !== $functionName) { - throw new InvalidOptionsException(sprintf( - 'Each element must be a non-empty, trimmed string, got "%s" instead.', - get_debug_type($functionName) - )); - } - - $sets = [ - self::SET_ALL, - self::SET_INTERNAL, - self::SET_COMPILER_OPTIMIZED, - ]; - - if (str_starts_with($functionName, '@') && !\in_array($functionName, $sets, true)) { - throw new InvalidOptionsException(sprintf('Unknown set "%s", known sets are "%s".', $functionName, implode('", "', $sets))); - } - } - - return true; - }]) - ->setDefault([self::SET_COMPILER_OPTIMIZED]) - ->getOption(), - (new FixerOptionBuilder('scope', 'Only fix function calls that are made within a namespace or fix all.')) - ->setAllowedValues(['all', 'namespaced']) - ->setDefault('all') - ->getOption(), - (new FixerOptionBuilder('strict', 'Whether leading `\` of function call not meant to have it should be removed.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function fixFunctionCalls(Tokens $tokens, callable $functionFilter, int $start, int $end, bool $tryToRemove): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - $tokensToInsert = []; - for ($index = $start; $index < $end; ++$index) { - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$functionFilter($tokens[$index]->getContent()) || $tryToRemove) { - if (false === $this->configuration['strict']) { - continue; - } - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - } - - continue; - } - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - continue; // do not bother if previous token is already namespace separator - } - - $tokensToInsert[$index] = new Token([T_NS_SEPARATOR, '\\']); - } - - $tokens->insertSlices($tokensToInsert); - } - - private function getFunctionFilter(): callable - { - $exclude = $this->normalizeFunctionNames($this->configuration['exclude']); - - if (\in_array(self::SET_ALL, $this->configuration['include'], true)) { - if (\count($exclude) > 0) { - return static function (string $functionName) use ($exclude): bool { - return !isset($exclude[strtolower($functionName)]); - }; - } - - return static function (): bool { - return true; - }; - } - - $include = []; - - if (\in_array(self::SET_INTERNAL, $this->configuration['include'], true)) { - $include = $this->getAllInternalFunctionsNormalized(); - } elseif (\in_array(self::SET_COMPILER_OPTIMIZED, $this->configuration['include'], true)) { - $include = $this->getAllCompilerOptimizedFunctionsNormalized(); // if `@internal` is set all compiler optimized function are already loaded - } - - foreach ($this->configuration['include'] as $additional) { - if (!str_starts_with($additional, '@')) { - $include[strtolower($additional)] = true; - } - } - - if (\count($exclude) > 0) { - return static function (string $functionName) use ($include, $exclude): bool { - return isset($include[strtolower($functionName)]) && !isset($exclude[strtolower($functionName)]); - }; - } - - return static function (string $functionName) use ($include): bool { - return isset($include[strtolower($functionName)]); - }; - } - - /** - * @return array normalized function names of which the PHP compiler optimizes - */ - private function getAllCompilerOptimizedFunctionsNormalized(): array - { - return $this->normalizeFunctionNames([ - // @see https://github.com/php/php-src/blob/PHP-7.4/Zend/zend_compile.c "zend_try_compile_special_func" - 'array_key_exists', - 'array_slice', - 'assert', - 'boolval', - 'call_user_func', - 'call_user_func_array', - 'chr', - 'count', - 'defined', - 'doubleval', - 'floatval', - 'func_get_args', - 'func_num_args', - 'get_called_class', - 'get_class', - 'gettype', - 'in_array', - 'intval', - 'is_array', - 'is_bool', - 'is_double', - 'is_float', - 'is_int', - 'is_integer', - 'is_long', - 'is_null', - 'is_object', - 'is_real', - 'is_resource', - 'is_scalar', - 'is_string', - 'ord', - 'sizeof', - 'strlen', - 'strval', - // @see https://github.com/php/php-src/blob/php-7.2.6/ext/opcache/Optimizer/pass1_5.c - // @see https://github.com/php/php-src/blob/PHP-8.1.2/Zend/Optimizer/block_pass.c - // @see https://github.com/php/php-src/blob/php-8.1.3/Zend/Optimizer/zend_optimizer.c - 'constant', - 'define', - 'dirname', - 'extension_loaded', - 'function_exists', - 'is_callable', - 'ini_get', - ]); - } - - /** - * @return array normalized function names of all internal defined functions - */ - private function getAllInternalFunctionsNormalized(): array - { - return $this->normalizeFunctionNames(get_defined_functions()['internal']); - } - - /** - * @param string[] $functionNames - * - * @return array all function names lower cased - */ - private function normalizeFunctionNames(array $functionNames): array - { - foreach ($functionNames as $index => $functionName) { - $functionNames[strtolower($functionName)] = true; - unset($functionNames[$index]); - } - - return $functionNames; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php deleted file mode 100644 index 0bb5650c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoSpacesAfterFunctionNameFixer.php +++ /dev/null @@ -1,187 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶4.6. - * - * @author Varga Bence - * @author Dariusz Rumiński - */ -final class NoSpacesAfterFunctionNameFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'When making a method or function call, there MUST NOT be a space between the method or function name and the opening parenthesis.', - [new CodeSample("isAnyTokenKindsFound(array_merge($this->getFunctionyTokenKinds(), [T_STRING])); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionyTokens = $this->getFunctionyTokenKinds(); - $languageConstructionTokens = $this->getLanguageConstructionTokenKinds(); - $braceTypes = $this->getBraceAfterVariableKinds(); - - foreach ($tokens as $index => $token) { - // looking for start brace - if (!$token->equals('(')) { - continue; - } - - // last non-whitespace token, can never be `null` always at least PHP open tag before it - $lastTokenIndex = $tokens->getPrevNonWhitespace($index); - - // check for ternary operator - $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $nextNonWhiteSpace = $tokens->getNextMeaningfulToken($endParenthesisIndex); - if ( - null !== $nextNonWhiteSpace - && $tokens[$nextNonWhiteSpace]->equals('?') - && $tokens[$lastTokenIndex]->isGivenKind($languageConstructionTokens) - ) { - continue; - } - - // check if it is a function call - if ($tokens[$lastTokenIndex]->isGivenKind($functionyTokens)) { - $this->fixFunctionCall($tokens, $index); - } elseif ($tokens[$lastTokenIndex]->isGivenKind(T_STRING)) { // for real function calls or definitions - $possibleDefinitionIndex = $tokens->getPrevMeaningfulToken($lastTokenIndex); - if (!$tokens[$possibleDefinitionIndex]->isGivenKind(T_FUNCTION)) { - $this->fixFunctionCall($tokens, $index); - } - } elseif ($tokens[$lastTokenIndex]->equalsAny($braceTypes)) { - $block = Tokens::detectBlockType($tokens[$lastTokenIndex]); - if ( - Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_DYNAMIC_VAR_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE === $block['type'] - || Tokens::BLOCK_TYPE_PARENTHESIS_BRACE === $block['type'] - ) { - $this->fixFunctionCall($tokens, $index); - } - } - } - } - - /** - * Fixes whitespaces around braces of a function(y) call. - * - * @param Tokens $tokens tokens to handle - * @param int $index index of token - */ - private function fixFunctionCall(Tokens $tokens, int $index): void - { - // remove space before opening brace - if ($tokens[$index - 1]->isWhitespace()) { - $tokens->clearAt($index - 1); - } - } - - /** - * @return array|string> - */ - private function getBraceAfterVariableKinds(): array - { - static $tokens = [ - ')', - ']', - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - ]; - - return $tokens; - } - - /** - * Gets the token kinds which can work as function calls. - * - * @return int[] Token names - */ - private function getFunctionyTokenKinds(): array - { - static $tokens = [ - T_ARRAY, - T_ECHO, - T_EMPTY, - T_EVAL, - T_EXIT, - T_INCLUDE, - T_INCLUDE_ONCE, - T_ISSET, - T_LIST, - T_PRINT, - T_REQUIRE, - T_REQUIRE_ONCE, - T_UNSET, - T_VARIABLE, - ]; - - return $tokens; - } - - /** - * Gets the token kinds of actually language construction. - * - * @return int[] - */ - private function getLanguageConstructionTokenKinds(): array - { - static $languageConstructionTokens = [ - T_ECHO, - T_PRINT, - T_INCLUDE, - T_INCLUDE_ONCE, - T_REQUIRE, - T_REQUIRE_ONCE, - ]; - - return $languageConstructionTokens; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php deleted file mode 100644 index 7f8f4135..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoTrailingCommaInSinglelineFunctionCallFixer.php +++ /dev/null @@ -1,68 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\Fixer\Basic\NoTrailingCommaInSinglelineFixer; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @deprecated - */ -final class NoTrailingCommaInSinglelineFunctionCallFixer extends AbstractProxyFixer implements DeprecatedFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'When making a method or function call on a single line there MUST NOT be a trailing comma after the last argument.', - [new CodeSample("proxyFixers); - } - - /** - * {@inheritdoc} - */ - protected function createProxyFixers(): array - { - $fixer = new NoTrailingCommaInSinglelineFixer(); - $fixer->configure(['elements' => ['arguments', 'array_destructuring']]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php deleted file mode 100644 index a41ca009..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUnreachableDefaultArgumentValueFixer.php +++ /dev/null @@ -1,203 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Mark Scherer - * @author Lucas Manzke - * @author Gregor Harlan - */ -final class NoUnreachableDefaultArgumentValueFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'In function arguments there must not be arguments with default values before non-default ones.', - [ - new CodeSample( - 'isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionKinds = [T_FUNCTION, T_FN]; - - for ($i = 0, $l = $tokens->count(); $i < $l; ++$i) { - if (!$tokens[$i]->isGivenKind($functionKinds)) { - continue; - } - - $startIndex = $tokens->getNextTokenOfKind($i, ['(']); - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); - - $this->fixFunctionDefinition($tokens, $startIndex, $i); - } - } - - private function fixFunctionDefinition(Tokens $tokens, int $startIndex, int $endIndex): void - { - $lastArgumentIndex = $this->getLastNonDefaultArgumentIndex($tokens, $startIndex, $endIndex); - - if (null === $lastArgumentIndex) { - return; - } - - for ($i = $lastArgumentIndex; $i > $startIndex; --$i) { - $token = $tokens[$i]; - - if ($token->isGivenKind(T_VARIABLE)) { - $lastArgumentIndex = $i; - - continue; - } - - if (!$token->equals('=') || $this->isNonNullableTypehintedNullableVariable($tokens, $i)) { - continue; - } - - $this->removeDefaultValue($tokens, $i, $this->getDefaultValueEndIndex($tokens, $lastArgumentIndex)); - } - } - - private function getLastNonDefaultArgumentIndex(Tokens $tokens, int $startIndex, int $endIndex): ?int - { - for ($i = $endIndex - 1; $i > $startIndex; --$i) { - $token = $tokens[$i]; - - if ($token->equals('=')) { - $i = $tokens->getPrevMeaningfulToken($i); - - continue; - } - - if ($token->isGivenKind(T_VARIABLE) && !$this->isEllipsis($tokens, $i)) { - return $i; - } - } - - return null; - } - - private function isEllipsis(Tokens $tokens, int $variableIndex): bool - { - return $tokens[$tokens->getPrevMeaningfulToken($variableIndex)]->isGivenKind(T_ELLIPSIS); - } - - private function getDefaultValueEndIndex(Tokens $tokens, int $index): int - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ATTRIBUTE, $index); - } - } while (!$tokens[$index]->equals(',')); - - return $tokens->getPrevMeaningfulToken($index); - } - - private function removeDefaultValue(Tokens $tokens, int $startIndex, int $endIndex): void - { - for ($i = $startIndex; $i <= $endIndex;) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - $this->clearWhitespacesBeforeIndex($tokens, $i); - $i = $tokens->getNextMeaningfulToken($i); - } - } - - /** - * @param int $index Index of "=" - */ - private function isNonNullableTypehintedNullableVariable(Tokens $tokens, int $index): bool - { - $nextToken = $tokens[$tokens->getNextMeaningfulToken($index)]; - - if (!$nextToken->equals([T_STRING, 'null'], false)) { - return false; - } - - $variableIndex = $tokens->getPrevMeaningfulToken($index); - - $searchTokens = [',', '(', [T_STRING], [CT::T_ARRAY_TYPEHINT], [T_CALLABLE]]; - $typehintKinds = [T_STRING, CT::T_ARRAY_TYPEHINT, T_CALLABLE]; - - $prevIndex = $tokens->getPrevTokenOfKind($variableIndex, $searchTokens); - - if (!$tokens[$prevIndex]->isGivenKind($typehintKinds)) { - return false; - } - - return !$tokens[$tokens->getPrevMeaningfulToken($prevIndex)]->isGivenKind(CT::T_NULLABLE_TYPE); - } - - private function clearWhitespacesBeforeIndex(Tokens $tokens, int $index): void - { - $prevIndex = $tokens->getNonEmptySibling($index, -1); - if (!$tokens[$prevIndex]->isWhitespace()) { - return; - } - - $prevNonWhiteIndex = $tokens->getPrevNonWhitespace($prevIndex); - if (null === $prevNonWhiteIndex || !$tokens[$prevNonWhiteIndex]->isComment()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php deleted file mode 100644 index d5af4435..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NoUselessSprintfFixer.php +++ /dev/null @@ -1,121 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUselessSprintfFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must be no `sprintf` calls with only the first argument.', - [ - new CodeSample( - "isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - * - * Must run before MethodArgumentSpaceFixer, NativeFunctionCasingFixer, NoEmptyStatementFixer, NoExtraBlankLinesFixer, NoSpacesInsideParenthesisFixer. - */ - public function getPriority(): int - { - return 42; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionAnalyzer = new FunctionsAnalyzer(); - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - for ($index = \count($tokens) - 1; $index > 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_STRING)) { - continue; - } - - if ('sprintf' !== strtolower($tokens[$index]->getContent())) { - continue; - } - - if (!$functionAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $openParenthesisIndex = $tokens->getNextTokenOfKind($index, ['(']); - - if ($tokens[$tokens->getNextMeaningfulToken($openParenthesisIndex)]->isGivenKind(T_ELLIPSIS)) { - continue; - } - - $closeParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesisIndex); - - if (1 !== $argumentsAnalyzer->countArguments($tokens, $openParenthesisIndex, $closeParenthesisIndex)) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($closeParenthesisIndex); - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($closeParenthesisIndex); - - if ($tokens[$prevMeaningfulTokenIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevMeaningfulTokenIndex); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($openParenthesisIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevMeaningfulTokenIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevMeaningfulTokenIndex); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php deleted file mode 100644 index a6c3f7e2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/NullableTypeDeclarationForDefaultNullValueFixer.php +++ /dev/null @@ -1,157 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\ArgumentAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author HypeMC - */ -final class NullableTypeDeclarationForDefaultNullValueFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Adds or removes `?` before type declarations for parameters with a default `null` value.', - [ - new CodeSample( - " false] - ), - ], - 'Rule is applied only in a PHP 7.1+ environment.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_VARIABLE) && $tokens->isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - * - * Must run before NoUnreachableDefaultArgumentValueFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('use_nullable_type_declaration', 'Whether to add or remove `?` before type declarations for parameters with a default `null` value.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $tokenKinds = [T_FUNCTION, T_FN]; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind($tokenKinds)) { - continue; - } - - $arguments = $functionsAnalyzer->getFunctionArguments($tokens, $index); - $this->fixFunctionParameters($tokens, $arguments); - } - } - - /** - * @param ArgumentAnalysis[] $arguments - */ - private function fixFunctionParameters(Tokens $tokens, array $arguments): void - { - $constructorPropertyModifiers = [ - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, - ]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $constructorPropertyModifiers[] = T_READONLY; - } - - foreach (array_reverse($arguments) as $argumentInfo) { - if ( - // Skip, if the parameter - // - doesn't have a type declaration - !$argumentInfo->hasTypeAnalysis() - // type is a union - || str_contains($argumentInfo->getTypeAnalysis()->getName(), '|') - // - a default value is not null we can continue - || !$argumentInfo->hasDefault() || 'null' !== strtolower($argumentInfo->getDefault()) - ) { - continue; - } - - $argumentTypeInfo = $argumentInfo->getTypeAnalysis(); - - if (\PHP_VERSION_ID >= 80000 && false === $this->configuration['use_nullable_type_declaration']) { - $visibility = $tokens[$tokens->getPrevMeaningfulToken($argumentTypeInfo->getStartIndex())]; - - if ($visibility->isGivenKind($constructorPropertyModifiers)) { - continue; - } - } - - if (true === $this->configuration['use_nullable_type_declaration']) { - if (!$argumentTypeInfo->isNullable() && 'mixed' !== $argumentTypeInfo->getName()) { - $tokens->insertAt($argumentTypeInfo->getStartIndex(), new Token([CT::T_NULLABLE_TYPE, '?'])); - } - } else { - if ($argumentTypeInfo->isNullable()) { - $tokens->removeTrailingWhitespace($argumentTypeInfo->getStartIndex()); - $tokens->clearTokenAndMergeSurroundingWhitespace($argumentTypeInfo->getStartIndex()); - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php deleted file mode 100644 index 488df0d7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToParamTypeFixer.php +++ /dev/null @@ -1,196 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Jan Gantzert - */ -final class PhpdocToParamTypeFixer extends AbstractPhpdocToTypeDeclarationFixer -{ - /** - * @var array{int, string}[] - */ - private const EXCLUDE_FUNC_NAMES = [ - [T_STRING, '__clone'], - [T_STRING, '__destruct'], - ]; - - /** - * @var array - */ - private const SKIPPED_TYPES = [ - 'mixed' => true, - 'resource' => true, - 'static' => true, - 'void' => true, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'EXPERIMENTAL: Takes `@param` annotations of non-mixed types and adjusts accordingly the function signature. Requires PHP >= 7.0.', - [ - new CodeSample( - ' false] - ), - ], - null, - 'This rule is EXPERIMENTAL and [1] is not covered with backward compatibility promise. [2] `@param` annotation is mandatory for the fixer to make changes, signatures of methods without it (no docblock, inheritdocs) will not be fixed. [3] Manual actions are required if inherited signatures are not properly documented.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_FUNCTION); - } - - /** - * {@inheritdoc} - * - * Must run before NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 8; - } - - protected function isSkippedType(string $type): bool - { - return isset(self::SKIPPED_TYPES[$type]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; 0 < $index; --$index) { - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - continue; - } - - $funcName = $tokens->getNextMeaningfulToken($index); - if ($tokens[$funcName]->equalsAny(self::EXCLUDE_FUNC_NAMES, false)) { - continue; - } - - $docCommentIndex = $this->findFunctionDocComment($tokens, $index); - - if (null === $docCommentIndex) { - continue; - } - - foreach ($this->getAnnotationsFromDocComment('param', $tokens, $docCommentIndex) as $paramTypeAnnotation) { - $typeInfo = $this->getCommonTypeFromAnnotation($paramTypeAnnotation, false); - - if (null === $typeInfo) { - continue; - } - - [$paramType, $isNullable] = $typeInfo; - - $startIndex = $tokens->getNextTokenOfKind($index, ['(']); - $variableIndex = $this->findCorrectVariable($tokens, $startIndex, $paramTypeAnnotation); - - if (null === $variableIndex) { - continue; - } - - $byRefIndex = $tokens->getPrevMeaningfulToken($variableIndex); - - if ($tokens[$byRefIndex]->equals('&')) { - $variableIndex = $byRefIndex; - } - - if ($this->hasParamTypeHint($tokens, $variableIndex)) { - continue; - } - - if (!$this->isValidSyntax(sprintf('insertAt($variableIndex, array_merge( - $this->createTypeDeclarationTokens($paramType, $isNullable), - [new Token([T_WHITESPACE, ' '])] - )); - } - } - } - - private function findCorrectVariable(Tokens $tokens, int $startIndex, Annotation $paramTypeAnnotation): ?int - { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startIndex); - - for ($index = $startIndex + 1; $index < $endIndex; ++$index) { - if (!$tokens[$index]->isGivenKind(T_VARIABLE)) { - continue; - } - - $variableName = $tokens[$index]->getContent(); - - if ($paramTypeAnnotation->getVariableName() === $variableName) { - return $index; - } - } - - return null; - } - - /** - * Determine whether the function already has a param type hint. - * - * @param int $index The index of the end of the function definition line, EG at { or ; - */ - private function hasParamTypeHint(Tokens $tokens, int $index): bool - { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - return !$tokens[$prevIndex]->equalsAny([',', '(']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php deleted file mode 100644 index db3c812a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToPropertyTypeFixer.php +++ /dev/null @@ -1,244 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class PhpdocToPropertyTypeFixer extends AbstractPhpdocToTypeDeclarationFixer -{ - /** - * @var array - */ - private array $skippedTypes = [ - 'mixed' => true, - 'resource' => true, - 'null' => true, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'EXPERIMENTAL: Takes `@var` annotation of non-mixed types and adjusts accordingly the property signature. Requires PHP >= 7.4.', - [ - new VersionSpecificCodeSample( - ' false] - ), - ], - null, - 'This rule is EXPERIMENTAL and [1] is not covered with backward compatibility promise. [2] `@var` annotation is mandatory for the fixer to make changes, signatures of properties without it (no docblock) will not be fixed. [3] Manual actions might be required for newly typed properties that are read before initialization.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - * - * Must run before NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 7; - } - - protected function isSkippedType(string $type): bool - { - return isset($this->skippedTypes[$type]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; 0 < $index; --$index) { - if ($tokens[$index]->isGivenKind([T_CLASS, T_TRAIT])) { - $this->fixClass($tokens, $index); - } - } - } - - private function fixClass(Tokens $tokens, int $index): void - { - $index = $tokens->getNextTokenOfKind($index, ['{']); - $classEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - for (; $index < $classEndIndex; ++$index) { - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $index = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($tokens[$index]->equals('{')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } - - continue; - } - - if (!$tokens[$index]->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $docCommentIndex = $index; - $propertyIndices = $this->findNextUntypedPropertiesDeclaration($tokens, $docCommentIndex); - - if ([] === $propertyIndices) { - continue; - } - - $typeInfo = $this->resolveApplicableType( - $propertyIndices, - $this->getAnnotationsFromDocComment('var', $tokens, $docCommentIndex) - ); - - if (null === $typeInfo) { - continue; - } - - [$propertyType, $isNullable] = $typeInfo; - - if (\in_array($propertyType, ['callable', 'never', 'void'], true)) { - continue; - } - - $newTokens = array_merge( - $this->createTypeDeclarationTokens($propertyType, $isNullable), - [new Token([T_WHITESPACE, ' '])] - ); - - $tokens->insertAt(current($propertyIndices), $newTokens); - - $index = max($propertyIndices) + \count($newTokens) + 1; - $classEndIndex += \count($newTokens); - } - } - - /** - * @return array - */ - private function findNextUntypedPropertiesDeclaration(Tokens $tokens, int $index): array - { - do { - $index = $tokens->getNextMeaningfulToken($index); - } while ($tokens[$index]->isGivenKind([ - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_STATIC, - T_VAR, - ])); - - if (!$tokens[$index]->isGivenKind(T_VARIABLE)) { - return []; - } - - $properties = []; - - while (!$tokens[$index]->equals(';')) { - if ($tokens[$index]->isGivenKind(T_VARIABLE)) { - $properties[$tokens[$index]->getContent()] = $index; - } - - $index = $tokens->getNextMeaningfulToken($index); - } - - return $properties; - } - - /** - * @param array $propertyIndices - * @param Annotation[] $annotations - */ - private function resolveApplicableType(array $propertyIndices, array $annotations): ?array - { - $propertyTypes = []; - - foreach ($annotations as $annotation) { - $propertyName = $annotation->getVariableName(); - - if (null === $propertyName) { - if (1 !== \count($propertyIndices)) { - continue; - } - - $propertyName = key($propertyIndices); - } - - if (!isset($propertyIndices[$propertyName])) { - continue; - } - - $typeInfo = $this->getCommonTypeFromAnnotation($annotation, false); - - if (!isset($propertyTypes[$propertyName])) { - $propertyTypes[$propertyName] = []; - } elseif ($typeInfo !== $propertyTypes[$propertyName]) { - return null; - } - - $propertyTypes[$propertyName] = $typeInfo; - } - - if (\count($propertyTypes) !== \count($propertyIndices)) { - return null; - } - - $type = array_shift($propertyTypes); - - foreach ($propertyTypes as $propertyType) { - if ($propertyType !== $type) { - return null; - } - } - - return $type; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php deleted file mode 100644 index b11d07e7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/PhpdocToReturnTypeFixer.php +++ /dev/null @@ -1,207 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractPhpdocToTypeDeclarationFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class PhpdocToReturnTypeFixer extends AbstractPhpdocToTypeDeclarationFixer -{ - /** - * @var array> - */ - private array $excludeFuncNames = [ - [T_STRING, '__construct'], - [T_STRING, '__destruct'], - [T_STRING, '__clone'], - ]; - - /** - * @var array - */ - private array $skippedTypes = [ - 'mixed' => true, - 'resource' => true, - 'null' => true, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'EXPERIMENTAL: Takes `@return` annotation of non-mixed types and adjusts accordingly the function signature. Requires PHP >= 7.0.', - [ - new CodeSample( - ' false] - ), - new VersionSpecificCodeSample( - 'isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - * - * Must run before FullyQualifiedStrictTypesFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer, ReturnTypeDeclarationFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 13; - } - - protected function isSkippedType(string $type): bool - { - return isset($this->skippedTypes[$type]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (\PHP_VERSION_ID >= 80000) { - unset($this->skippedTypes['mixed']); - } - - for ($index = $tokens->count() - 1; 0 < $index; --$index) { - if (!$tokens[$index]->isGivenKind([T_FUNCTION, T_FN])) { - continue; - } - - $funcName = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$funcName]->equalsAny($this->excludeFuncNames, false)) { - continue; - } - - $docCommentIndex = $this->findFunctionDocComment($tokens, $index); - if (null === $docCommentIndex) { - continue; - } - - $returnTypeAnnotation = $this->getAnnotationsFromDocComment('return', $tokens, $docCommentIndex); - if (1 !== \count($returnTypeAnnotation)) { - continue; - } - - $typeInfo = $this->getCommonTypeFromAnnotation(current($returnTypeAnnotation), true); - - if (null === $typeInfo) { - continue; - } - - [$returnType, $isNullable] = $typeInfo; - - $startIndex = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($this->hasReturnTypeHint($tokens, $startIndex)) { - continue; - } - - if (!$this->isValidSyntax(sprintf('getPrevTokenOfKind($startIndex, [')']); - - $tokens->insertAt( - $endFuncIndex + 1, - array_merge( - [ - new Token([CT::T_TYPE_COLON, ':']), - new Token([T_WHITESPACE, ' ']), - ], - $this->createTypeDeclarationTokens($returnType, $isNullable) - ) - ); - } - } - - /** - * Determine whether the function already has a return type hint. - * - * @param int $index The index of the end of the function definition line, EG at { or ; - */ - private function hasReturnTypeHint(Tokens $tokens, int $index): bool - { - $endFuncIndex = $tokens->getPrevTokenOfKind($index, [')']); - $nextIndex = $tokens->getNextMeaningfulToken($endFuncIndex); - - return $tokens[$nextIndex]->isGivenKind(CT::T_TYPE_COLON); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php deleted file mode 100644 index 32d49213..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/RegularCallableCallFixer.php +++ /dev/null @@ -1,265 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class RegularCallableCallFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Callables must be called without using `call_user_func*` when possible.', - [ - new CodeSample( - ' \'baz\'])` or `call_user_func($foo, $foo = \'bar\')`.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before NativeFunctionInvocationFixer. - * Must run after NoBinaryStringFixer, NoUselessConcatOperatorFixer. - */ - public function getPriority(): int - { - return 2; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if (!$tokens[$index]->equalsAny([[T_STRING, 'call_user_func'], [T_STRING, 'call_user_func_array']], false)) { - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; // redeclare/override - } - - $openParenthesis = $tokens->getNextMeaningfulToken($index); - $closeParenthesis = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesis); - $arguments = $argumentsAnalyzer->getArguments($tokens, $openParenthesis, $closeParenthesis); - - if (1 > \count($arguments)) { - return; // no arguments! - } - - $this->processCall($tokens, $index, $arguments); - } - } - - /** - * @param array $arguments - */ - private function processCall(Tokens $tokens, int $index, array $arguments): void - { - $firstArgIndex = $tokens->getNextMeaningfulToken( - $tokens->getNextMeaningfulToken($index) - ); - - /** @var Token $firstArgToken */ - $firstArgToken = $tokens[$firstArgIndex]; - - if ($firstArgToken->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - $afterFirstArgIndex = $tokens->getNextMeaningfulToken($firstArgIndex); - - if (!$tokens[$afterFirstArgIndex]->equalsAny([',', ')'])) { - return; // first argument is an expression like `call_user_func("foo"."bar", ...)`, not supported! - } - - $firstArgTokenContent = $firstArgToken->getContent(); - - if (!$this->isValidFunctionInvoke($firstArgTokenContent)) { - return; - } - - $newCallTokens = Tokens::fromCode('getContent()), 1, -1).'();'); - $newCallTokensSize = $newCallTokens->count(); - $newCallTokens->clearAt(0); - $newCallTokens->clearRange($newCallTokensSize - 3, $newCallTokensSize - 1); - $newCallTokens->clearEmptyTokens(); - - $this->replaceCallUserFuncWithCallback($tokens, $index, $newCallTokens, $firstArgIndex, $firstArgIndex); - } elseif ( - $firstArgToken->isGivenKind(T_FUNCTION) - || ( - $firstArgToken->isGivenKind(T_STATIC) - && $tokens[$tokens->getNextMeaningfulToken($firstArgIndex)]->isGivenKind(T_FUNCTION) - ) - ) { - $firstArgEndIndex = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_CURLY_BRACE, - $tokens->getNextTokenOfKind($firstArgIndex, ['{']) - ); - - $newCallTokens = $this->getTokensSubcollection($tokens, $firstArgIndex, $firstArgEndIndex); - $newCallTokens->insertAt($newCallTokens->count(), new Token(')')); - $newCallTokens->insertAt(0, new Token('(')); - $this->replaceCallUserFuncWithCallback($tokens, $index, $newCallTokens, $firstArgIndex, $firstArgEndIndex); - } elseif ($firstArgToken->isGivenKind(T_VARIABLE)) { - $firstArgEndIndex = reset($arguments); - - // check if the same variable is used multiple times and if so do not fix - - foreach ($arguments as $argumentStart => $argumentEnd) { - if ($firstArgEndIndex === $argumentEnd) { - continue; - } - - for ($i = $argumentStart; $i <= $argumentEnd; ++$i) { - if ($tokens[$i]->equals($firstArgToken)) { - return; - } - } - } - - // check if complex statement and if so wrap the call in () if on PHP 7 or up, else do not fix - - $newCallTokens = $this->getTokensSubcollection($tokens, $firstArgIndex, $firstArgEndIndex); - $complex = false; - - for ($newCallIndex = \count($newCallTokens) - 1; $newCallIndex >= 0; --$newCallIndex) { - if ($newCallTokens[$newCallIndex]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT, T_VARIABLE])) { - continue; - } - - $blockType = Tokens::detectBlockType($newCallTokens[$newCallIndex]); - - if (null !== $blockType && (Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE === $blockType['type'] || Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE === $blockType['type'])) { - $newCallIndex = $newCallTokens->findBlockStart($blockType['type'], $newCallIndex); - - continue; - } - - $complex = true; - - break; - } - - if ($complex) { - $newCallTokens->insertAt($newCallTokens->count(), new Token(')')); - $newCallTokens->insertAt(0, new Token('(')); - } - $this->replaceCallUserFuncWithCallback($tokens, $index, $newCallTokens, $firstArgIndex, $firstArgEndIndex); - } - } - - private function replaceCallUserFuncWithCallback(Tokens $tokens, int $callIndex, Tokens $newCallTokens, int $firstArgStartIndex, int $firstArgEndIndex): void - { - $tokens->clearRange($firstArgStartIndex, $firstArgEndIndex); - - $afterFirstArgIndex = $tokens->getNextMeaningfulToken($firstArgEndIndex); - $afterFirstArgToken = $tokens[$afterFirstArgIndex]; - - if ($afterFirstArgToken->equals(',')) { - $useEllipsis = $tokens[$callIndex]->equals([T_STRING, 'call_user_func_array'], false); - - if ($useEllipsis) { - $secondArgIndex = $tokens->getNextMeaningfulToken($afterFirstArgIndex); - $tokens->insertAt($secondArgIndex, new Token([T_ELLIPSIS, '...'])); - } - - $tokens->clearAt($afterFirstArgIndex); - $tokens->removeTrailingWhitespace($afterFirstArgIndex); - } - - $tokens->overrideRange($callIndex, $callIndex, $newCallTokens); - $prevIndex = $tokens->getPrevMeaningfulToken($callIndex); - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - } - } - - private function getTokensSubcollection(Tokens $tokens, int $indexStart, int $indexEnd): Tokens - { - $size = $indexEnd - $indexStart + 1; - $subCollection = new Tokens($size); - - for ($i = 0; $i < $size; ++$i) { - /** @var Token $toClone */ - $toClone = $tokens[$i + $indexStart]; - $subCollection[$i] = clone $toClone; - } - - return $subCollection; - } - - private function isValidFunctionInvoke(string $name): bool - { - if (\strlen($name) < 3 || 'b' === $name[0] || 'B' === $name[0]) { - return false; - } - - $name = substr($name, 1, -1); - - if ($name !== trim($name)) { - return false; - } - - return true; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php deleted file mode 100644 index eea0fb89..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/ReturnTypeDeclarationFixer.php +++ /dev/null @@ -1,131 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class ReturnTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Adjust spacing around colon in return type declarations and backed enum types.', - [ - new CodeSample( - " 'none'] - ), - new CodeSample( - " 'one'] - ), - ], - 'Rule is applied only in a PHP 7+ environment.' - ); - } - - /** - * {@inheritdoc} - * - * Must run after PhpdocToReturnTypeFixer, VoidReturnFixer. - */ - public function getPriority(): int - { - return -17; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(CT::T_TYPE_COLON); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $oneSpaceBefore = 'one' === $this->configuration['space_before']; - - for ($index = 0, $limit = $tokens->count(); $index < $limit; ++$index) { - if (!$tokens[$index]->isGivenKind(CT::T_TYPE_COLON)) { - continue; - } - - $previousIndex = $index - 1; - $previousToken = $tokens[$previousIndex]; - - if ($previousToken->isWhitespace()) { - if (!$tokens[$tokens->getPrevNonWhitespace($index - 1)]->isComment()) { - if ($oneSpaceBefore) { - $tokens[$previousIndex] = new Token([T_WHITESPACE, ' ']); - } else { - $tokens->clearAt($previousIndex); - } - } - } elseif ($oneSpaceBefore) { - $tokenWasAdded = $tokens->ensureWhitespaceAtIndex($index, 0, ' '); - - if ($tokenWasAdded) { - ++$limit; - } - - ++$index; - } - - ++$index; - - $tokenWasAdded = $tokens->ensureWhitespaceAtIndex($index, 0, ' '); - - if ($tokenWasAdded) { - ++$limit; - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('space_before', 'Spacing to apply before colon.')) - ->setAllowedValues(['one', 'none']) - ->setDefault('none') - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php deleted file mode 100644 index 7a6e8c23..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/SingleLineThrowFixer.php +++ /dev/null @@ -1,168 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class SingleLineThrowFixer extends AbstractFixer -{ - private const REMOVE_WHITESPACE_AFTER_TOKENS = ['[']; - private const REMOVE_WHITESPACE_AROUND_TOKENS = ['(', [T_DOUBLE_COLON]]; - private const REMOVE_WHITESPACE_BEFORE_TOKENS = [')', ']', ',', ';']; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Throwing exception must be done in single line.', - [ - new CodeSample("isTokenKindFound(T_THROW); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer, ConcatSpaceFixer. - */ - public function getPriority(): int - { - return 36; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - if (!$tokens[$index]->isGivenKind(T_THROW)) { - continue; - } - - $endCandidateIndex = $tokens->getNextMeaningfulToken($index); - - while (!$tokens[$endCandidateIndex]->equalsAny([')', ']', ',', ';'])) { - $blockType = Tokens::detectBlockType($tokens[$endCandidateIndex]); - - if (null !== $blockType) { - if (Tokens::BLOCK_TYPE_CURLY_BRACE === $blockType['type'] || !$blockType['isStart']) { - break; - } - - $endCandidateIndex = $tokens->findBlockEnd($blockType['type'], $endCandidateIndex); - } - - $endCandidateIndex = $tokens->getNextMeaningfulToken($endCandidateIndex); - } - - $this->trimNewLines($tokens, $index, $tokens->getPrevMeaningfulToken($endCandidateIndex)); - } - } - - private function trimNewLines(Tokens $tokens, int $startIndex, int $endIndex): void - { - for ($index = $startIndex; $index < $endIndex; ++$index) { - $content = $tokens[$index]->getContent(); - - if ($tokens[$index]->isGivenKind(T_COMMENT)) { - if (str_starts_with($content, '//')) { - $content = '/*'.substr($content, 2).' */'; - $tokens->clearAt($index + 1); - } elseif (str_starts_with($content, '#')) { - $content = '/*'.substr($content, 1).' */'; - $tokens->clearAt($index + 1); - } elseif (0 !== Preg::match('/\R/', $content)) { - $content = Preg::replace('/\R/', ' ', $content); - } - - $tokens[$index] = new Token([T_COMMENT, $content]); - - continue; - } - - if (!$tokens[$index]->isGivenKind(T_WHITESPACE)) { - continue; - } - - if (0 === Preg::match('/\R/', $content)) { - continue; - } - - $prevIndex = $tokens->getNonEmptySibling($index, -1); - - if ($this->isPreviousTokenToClear($tokens[$prevIndex])) { - $tokens->clearAt($index); - - continue; - } - - $nextIndex = $tokens->getNonEmptySibling($index, 1); - - if ( - $this->isNextTokenToClear($tokens[$nextIndex]) - && !$tokens[$prevIndex]->isGivenKind(T_FUNCTION) - ) { - $tokens->clearAt($index); - - continue; - } - - $tokens[$index] = new Token([T_WHITESPACE, ' ']); - } - } - - private function isPreviousTokenToClear(Token $token): bool - { - static $tokens = null; - - if (null === $tokens) { - $tokens = array_merge(self::REMOVE_WHITESPACE_AFTER_TOKENS, self::REMOVE_WHITESPACE_AROUND_TOKENS); - } - - return $token->equalsAny($tokens) || $token->isObjectOperator(); - } - - private function isNextTokenToClear(Token $token): bool - { - static $tokens = null; - - if (null === $tokens) { - $tokens = array_merge(self::REMOVE_WHITESPACE_AROUND_TOKENS, self::REMOVE_WHITESPACE_BEFORE_TOKENS); - } - - return $token->equalsAny($tokens) || $token->isObjectOperator(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php deleted file mode 100644 index 9db289f3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/StaticLambdaFixer.php +++ /dev/null @@ -1,167 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class StaticLambdaFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Lambdas not (indirect) referencing `$this` must be declared `static`.', - [new CodeSample("bindTo` on lambdas without referencing to `$this`.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_FUNCTION, T_FN]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $analyzer = new TokensAnalyzer($tokens); - $expectedFunctionKinds = [T_FUNCTION, T_FN]; - - for ($index = $tokens->count() - 4; $index > 0; --$index) { - if (!$tokens[$index]->isGivenKind($expectedFunctionKinds) || !$analyzer->isLambda($index)) { - continue; - } - - $prev = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prev]->isGivenKind(T_STATIC)) { - continue; // lambda is already 'static' - } - - $argumentsStartIndex = $tokens->getNextTokenOfKind($index, ['(']); - $argumentsEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $argumentsStartIndex); - - // figure out where the lambda starts and ends - - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $lambdaOpenIndex = $tokens->getNextTokenOfKind($argumentsEndIndex, ['{']); - $lambdaEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $lambdaOpenIndex); - } else { // T_FN - $lambdaOpenIndex = $tokens->getNextTokenOfKind($argumentsEndIndex, [[T_DOUBLE_ARROW]]); - $lambdaEndIndex = $this->findExpressionEnd($tokens, $lambdaOpenIndex); - } - - if ($this->hasPossibleReferenceToThis($tokens, $lambdaOpenIndex, $lambdaEndIndex)) { - continue; - } - - // make the lambda static - $tokens->insertAt( - $index, - [ - new Token([T_STATIC, 'static']), - new Token([T_WHITESPACE, ' ']), - ] - ); - - $index -= 4; // fixed after a lambda, closes candidate is at least 4 tokens before that - } - } - - private function findExpressionEnd(Tokens $tokens, int $index): int - { - $nextIndex = $tokens->getNextMeaningfulToken($index); - - while (null !== $nextIndex) { - /** @var Token $nextToken */ - $nextToken = $tokens[$nextIndex]; - - if ($nextToken->equalsAny([',', ';', [T_CLOSE_TAG]])) { - break; - } - - $blockType = Tokens::detectBlockType($nextToken); - - if (null !== $blockType && $blockType['isStart']) { - $nextIndex = $tokens->findBlockEnd($blockType['type'], $nextIndex); - } - - $index = $nextIndex; - $nextIndex = $tokens->getNextMeaningfulToken($index); - } - - return $index; - } - - /** - * Returns 'true' if there is a possible reference to '$this' within the given tokens index range. - */ - private function hasPossibleReferenceToThis(Tokens $tokens, int $startIndex, int $endIndex): bool - { - for ($i = $startIndex; $i <= $endIndex; ++$i) { - if ($tokens[$i]->isGivenKind(T_VARIABLE) && '$this' === strtolower($tokens[$i]->getContent())) { - return true; // directly accessing '$this' - } - - if ($tokens[$i]->isGivenKind([ - T_INCLUDE, // loading additional symbols we cannot analyze here - T_INCLUDE_ONCE, // " - T_REQUIRE, // " - T_REQUIRE_ONCE, // " - CT::T_DYNAMIC_VAR_BRACE_OPEN, // "$h = ${$g};" case - T_EVAL, // "$c = eval('return $this;');" case - ])) { - return true; - } - - if ($tokens[$i]->equals('$')) { - $nextIndex = $tokens->getNextMeaningfulToken($i); - - if ($tokens[$nextIndex]->isGivenKind(T_VARIABLE)) { - return true; // "$$a" case - } - } - - if ($tokens[$i]->equals([T_STRING, 'parent'], false)) { - return true; // parent:: case - } - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php deleted file mode 100644 index 2df90852..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/UseArrowFunctionsFixer.php +++ /dev/null @@ -1,207 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gregor Harlan - */ -final class UseArrowFunctionsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Anonymous functions with one-liner return statement must use arrow functions.', - [ - new VersionSpecificCodeSample( - <<<'SAMPLE' -isAllTokenKindsFound([T_FUNCTION, T_RETURN]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $analyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_FUNCTION) || !$analyzer->isLambda($index)) { - continue; - } - - // Find parameters end - // Abort if they are multilined - - $parametersStart = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$parametersStart]->isGivenKind(CT::T_RETURN_REF)) { - $parametersStart = $tokens->getNextMeaningfulToken($parametersStart); - } - - $parametersEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $parametersStart); - - if ($this->isMultilined($tokens, $parametersStart, $parametersEnd)) { - continue; - } - - // Find `use ()` start and end - // Abort if it contains reference variables - - $next = $tokens->getNextMeaningfulToken($parametersEnd); - - $useStart = null; - $useEnd = null; - - if ($tokens[$next]->isGivenKind(CT::T_USE_LAMBDA)) { - $useStart = $next; - - if ($tokens[$useStart - 1]->isGivenKind(T_WHITESPACE)) { - --$useStart; - } - - $next = $tokens->getNextMeaningfulToken($next); - - while (!$tokens[$next]->equals(')')) { - if ($tokens[$next]->equals('&')) { - // variables used by reference are not supported by arrow functions - continue 2; - } - - $next = $tokens->getNextMeaningfulToken($next); - } - - $useEnd = $next; - $next = $tokens->getNextMeaningfulToken($next); - } - - // Find opening brace and following `return` - // Abort if there is more than whitespace between them (like comments) - - $braceOpen = $tokens[$next]->equals('{') ? $next : $tokens->getNextTokenOfKind($next, ['{']); - $return = $braceOpen + 1; - - if ($tokens[$return]->isGivenKind(T_WHITESPACE)) { - ++$return; - } - - if (!$tokens[$return]->isGivenKind(T_RETURN)) { - continue; - } - - // Find semicolon of `return` statement - - $semicolon = $tokens->getNextTokenOfKind($return, ['{', ';']); - - if (!$tokens[$semicolon]->equals(';')) { - continue; - } - - // Find closing brace - // Abort if there is more than whitespace between semicolon and closing brace - - $braceClose = $semicolon + 1; - - if ($tokens[$braceClose]->isGivenKind(T_WHITESPACE)) { - ++$braceClose; - } - - if (!$tokens[$braceClose]->equals('}')) { - continue; - } - - // Abort if the `return` statement is multilined - - if ($this->isMultilined($tokens, $return, $semicolon)) { - continue; - } - - // Transform the function to an arrow function - - $this->transform($tokens, $index, $useStart, $useEnd, $braceOpen, $return, $semicolon, $braceClose); - } - } - - private function isMultilined(Tokens $tokens, int $start, int $end): bool - { - for ($i = $start; $i < $end; ++$i) { - if (str_contains($tokens[$i]->getContent(), "\n")) { - return true; - } - } - - return false; - } - - private function transform(Tokens $tokens, int $index, ?int $useStart, ?int $useEnd, int $braceOpen, int $return, int $semicolon, int $braceClose): void - { - $tokensToInsert = [new Token([T_DOUBLE_ARROW, '=>'])]; - - if ($tokens->getNextMeaningfulToken($return) === $semicolon) { - $tokensToInsert[] = new Token([T_WHITESPACE, ' ']); - $tokensToInsert[] = new Token([T_STRING, 'null']); - } - - $tokens->clearRange($semicolon, $braceClose); - $tokens->clearRange($braceOpen + 1, $return); - $tokens->overrideRange($braceOpen, $braceOpen, $tokensToInsert); - - if (null !== $useStart) { - $tokens->clearRange($useStart, $useEnd); - } - - $tokens[$index] = new Token([T_FN, 'fn']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php deleted file mode 100644 index 61d4a8ea..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/FunctionNotation/VoidReturnFixer.php +++ /dev/null @@ -1,258 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\FunctionNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Mark Nielsen - */ -final class VoidReturnFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Add `void` return type to functions with missing or empty return statements, but priority is given to `@return` annotations. Requires PHP >= 7.1.', - [ - new CodeSample( - "isTokenKindFound(T_FUNCTION); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // These cause syntax errors. - static $excludedFunctions = [ - [T_STRING, '__clone'], - [T_STRING, '__construct'], - [T_STRING, '__debugInfo'], - [T_STRING, '__destruct'], - [T_STRING, '__isset'], - [T_STRING, '__serialize'], - [T_STRING, '__set_state'], - [T_STRING, '__sleep'], - [T_STRING, '__toString'], - ]; - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - continue; - } - - $functionName = $tokens->getNextMeaningfulToken($index); - if ($tokens[$functionName]->equalsAny($excludedFunctions, false)) { - continue; - } - - $startIndex = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($this->hasReturnTypeHint($tokens, $startIndex)) { - continue; - } - - if ($tokens[$startIndex]->equals(';')) { - // No function body defined, fallback to PHPDoc. - if ($this->hasVoidReturnAnnotation($tokens, $index)) { - $this->fixFunctionDefinition($tokens, $startIndex); - } - - continue; - } - - if ($this->hasReturnAnnotation($tokens, $index)) { - continue; - } - - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $startIndex); - - if ($this->hasVoidReturn($tokens, $startIndex, $endIndex)) { - $this->fixFunctionDefinition($tokens, $startIndex); - } - } - } - - /** - * Determine whether there is a non-void return annotation in the function's PHPDoc comment. - * - * @param int $index The index of the function token - */ - private function hasReturnAnnotation(Tokens $tokens, int $index): bool - { - foreach ($this->findReturnAnnotations($tokens, $index) as $return) { - if (['void'] !== $return->getTypes()) { - return true; - } - } - - return false; - } - - /** - * Determine whether there is a void return annotation in the function's PHPDoc comment. - * - * @param int $index The index of the function token - */ - private function hasVoidReturnAnnotation(Tokens $tokens, int $index): bool - { - foreach ($this->findReturnAnnotations($tokens, $index) as $return) { - if (['void'] === $return->getTypes()) { - return true; - } - } - - return false; - } - - /** - * Determine whether the function already has a return type hint. - * - * @param int $index The index of the end of the function definition line, EG at { or ; - */ - private function hasReturnTypeHint(Tokens $tokens, int $index): bool - { - $endFuncIndex = $tokens->getPrevTokenOfKind($index, [')']); - $nextIndex = $tokens->getNextMeaningfulToken($endFuncIndex); - - return $tokens[$nextIndex]->isGivenKind(CT::T_TYPE_COLON); - } - - /** - * Determine whether the function has a void return. - * - * @param int $startIndex Start of function body - * @param int $endIndex End of function body - */ - private function hasVoidReturn(Tokens $tokens, int $startIndex, int $endIndex): bool - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($i = $startIndex; $i < $endIndex; ++$i) { - if ( - // skip anonymous classes - ($tokens[$i]->isGivenKind(T_CLASS) && $tokensAnalyzer->isAnonymousClass($i)) - // skip lambda functions - || ($tokens[$i]->isGivenKind(T_FUNCTION) && $tokensAnalyzer->isLambda($i)) - ) { - $i = $tokens->getNextTokenOfKind($i, ['{']); - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $i); - - continue; - } - - if ($tokens[$i]->isGivenKind([T_YIELD, T_YIELD_FROM])) { - return false; // Generators cannot return void. - } - - if (!$tokens[$i]->isGivenKind(T_RETURN)) { - continue; - } - - $i = $tokens->getNextMeaningfulToken($i); - if (!$tokens[$i]->equals(';')) { - return false; - } - } - - return true; - } - - /** - * @param int $index The index of the end of the function definition line, EG at { or ; - */ - private function fixFunctionDefinition(Tokens $tokens, int $index): void - { - $endFuncIndex = $tokens->getPrevTokenOfKind($index, [')']); - $tokens->insertAt($endFuncIndex + 1, [ - new Token([CT::T_TYPE_COLON, ':']), - new Token([T_WHITESPACE, ' ']), - new Token([T_STRING, 'void']), - ]); - } - - /** - * Find all the return annotations in the function's PHPDoc comment. - * - * @param int $index The index of the function token - * - * @return Annotation[] - */ - private function findReturnAnnotations(Tokens $tokens, int $index): array - { - do { - $index = $tokens->getPrevNonWhitespace($index); - } while ($tokens[$index]->isGivenKind([ - T_ABSTRACT, - T_FINAL, - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_STATIC, - ])); - - if (!$tokens[$index]->isGivenKind(T_DOC_COMMENT)) { - return []; - } - - $doc = new DocBlock($tokens[$index]->getContent()); - - return $doc->getAnnotationsOfType('return'); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php deleted file mode 100644 index 9a08aae5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/FullyQualifiedStrictTypesFixer.php +++ /dev/null @@ -1,232 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author VeeWee - */ -final class FullyQualifiedStrictTypesFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Transforms imported FQCN parameters and return types in function arguments to short version.', - [ - new CodeSample( - 'isTokenKindFound(T_FUNCTION); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $namespacesAnalyzer = new NamespacesAnalyzer(); - $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); - $functionsAnalyzer = new FunctionsAnalyzer(); - - foreach ($namespacesAnalyzer->getDeclarations($tokens) as $namespace) { - $namespaceName = strtolower($namespace->getFullName()); - $uses = []; - - foreach ($namespaceUsesAnalyzer->getDeclarationsInNamespace($tokens, $namespace) as $use) { - $uses[strtolower(ltrim($use->getFullName(), '\\'))] = $use->getShortName(); - } - - for ($index = $namespace->getScopeStartIndex(); $index < $namespace->getScopeEndIndex(); ++$index) { - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $this->fixFunction($functionsAnalyzer, $tokens, $index, $uses, $namespaceName); - } - } - } - } - - /** - * @param array $uses - */ - private function fixFunction(FunctionsAnalyzer $functionsAnalyzer, Tokens $tokens, int $index, array $uses, string $namespaceName): void - { - $arguments = $functionsAnalyzer->getFunctionArguments($tokens, $index); - - foreach ($arguments as $argument) { - if ($argument->hasTypeAnalysis()) { - $this->replaceByShortType($tokens, $argument->getTypeAnalysis(), $uses, $namespaceName); - } - } - - $returnTypeAnalysis = $functionsAnalyzer->getFunctionReturnType($tokens, $index); - - if (null !== $returnTypeAnalysis) { - $this->replaceByShortType($tokens, $returnTypeAnalysis, $uses, $namespaceName); - } - } - - /** - * @param array $uses - */ - private function replaceByShortType(Tokens $tokens, TypeAnalysis $type, array $uses, string $namespaceName): void - { - if ($type->isReservedType()) { - return; - } - - $typeStartIndex = $type->getStartIndex(); - - if ($tokens[$typeStartIndex]->isGivenKind(CT::T_NULLABLE_TYPE)) { - $typeStartIndex = $tokens->getNextMeaningfulToken($typeStartIndex); - } - - $namespaceNameLength = \strlen($namespaceName); - $types = $this->getTypes($tokens, $typeStartIndex, $type->getEndIndex()); - - foreach ($types as $typeName => [$startIndex, $endIndex]) { - if (!str_starts_with($typeName, '\\')) { - continue; // no shorter type possible - } - - $typeName = substr($typeName, 1); - $typeNameLower = strtolower($typeName); - - if (isset($uses[$typeNameLower])) { - // if the type without leading "\" equals any of the full "uses" long names, it can be replaced with the short one - $tokens->overrideRange($startIndex, $endIndex, $this->namespacedStringToTokens($uses[$typeNameLower])); - } elseif ('' === $namespaceName) { - // if we are in the global namespace and the type is not imported the leading '\' can be removed (TODO nice config candidate) - foreach ($uses as $useShortName) { - if (strtolower($useShortName) === $typeNameLower) { - continue 2; - } - } - - $tokens->overrideRange($startIndex, $endIndex, $this->namespacedStringToTokens($typeName)); - } elseif ($typeNameLower !== $namespaceName && str_starts_with($typeNameLower, $namespaceName)) { - // if the type starts with namespace and the type is not the same as the namespace it can be shortened - $typeNameShort = substr($typeName, $namespaceNameLength + 1); - $tokens->overrideRange($startIndex, $endIndex, $this->namespacedStringToTokens($typeNameShort)); - } - } - } - - /** - * @return iterable - */ - private function getTypes(Tokens $tokens, int $index, int $endIndex): iterable - { - $index = $typeStartIndex = $typeEndIndex = $tokens->getNextMeaningfulToken($index - 1); - $type = $tokens[$index]->getContent(); - - while (true) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind([CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION])) { - yield $type => [$typeStartIndex, $typeEndIndex]; - - $index = $typeStartIndex = $typeEndIndex = $tokens->getNextMeaningfulToken($index); - $type = $tokens[$index]->getContent(); - - continue; - } - - if ($index > $endIndex || !$tokens[$index]->isGivenKind([T_STRING, T_NS_SEPARATOR])) { - yield $type => [$typeStartIndex, $typeEndIndex]; - - break; - } - - $typeEndIndex = $index; - $type .= $tokens[$index]->getContent(); - } - } - - /** - * @return Token[] - */ - private function namespacedStringToTokens(string $input): array - { - $tokens = []; - $parts = explode('\\', $input); - - foreach ($parts as $index => $part) { - $tokens[] = new Token([T_STRING, $part]); - - if ($index !== \count($parts) - 1) { - $tokens[] = new Token([T_NS_SEPARATOR, '\\']); - } - } - - return $tokens; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php deleted file mode 100644 index 7764cb2f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GlobalNamespaceImportFixer.php +++ /dev/null @@ -1,752 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\ClassyAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gregor Harlan - */ -final class GlobalNamespaceImportFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Imports or fully qualifies global classes/functions/constants.', - [ - new CodeSample( - ' true, 'import_constants' => true, 'import_functions' => true] - ), - new CodeSample( - ' false, 'import_constants' => false, 'import_functions' => false] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoUnusedImportsFixer, OrderedImportsFixer. - * Must run after NativeConstantInvocationFixer, NativeFunctionInvocationFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_DOC_COMMENT, T_NS_SEPARATOR, T_USE]) - && $tokens->isTokenKindFound(T_NAMESPACE) - && 1 === $tokens->countTokenKind(T_NAMESPACE) - && $tokens->isMonolithicPhp(); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $namespaceAnalyses = (new NamespacesAnalyzer())->getDeclarations($tokens); - - if (1 !== \count($namespaceAnalyses) || $namespaceAnalyses[0]->isGlobalNamespace()) { - return; - } - - $useDeclarations = (new NamespaceUsesAnalyzer())->getDeclarationsFromTokens($tokens); - - $newImports = []; - - if (true === $this->configuration['import_constants']) { - $newImports['const'] = $this->importConstants($tokens, $useDeclarations); - } elseif (false === $this->configuration['import_constants']) { - $this->fullyQualifyConstants($tokens, $useDeclarations); - } - - if (true === $this->configuration['import_functions']) { - $newImports['function'] = $this->importFunctions($tokens, $useDeclarations); - } elseif (false === $this->configuration['import_functions']) { - $this->fullyQualifyFunctions($tokens, $useDeclarations); - } - - if (true === $this->configuration['import_classes']) { - $newImports['class'] = $this->importClasses($tokens, $useDeclarations); - } elseif (false === $this->configuration['import_classes']) { - $this->fullyQualifyClasses($tokens, $useDeclarations); - } - - $newImports = array_filter($newImports); - - if (\count($newImports) > 0) { - $this->insertImports($tokens, $newImports, $useDeclarations); - } - } - - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('import_constants', 'Whether to import, not import or ignore global constants.')) - ->setDefault(null) - ->setAllowedValues([true, false, null]) - ->getOption(), - (new FixerOptionBuilder('import_functions', 'Whether to import, not import or ignore global functions.')) - ->setDefault(null) - ->setAllowedValues([true, false, null]) - ->getOption(), - (new FixerOptionBuilder('import_classes', 'Whether to import, not import or ignore global classes.')) - ->setDefault(true) - ->setAllowedValues([true, false, null]) - ->getOption(), - ]); - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - * - * @return array - */ - private function importConstants(Tokens $tokens, array $useDeclarations): array - { - [$global, $other] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isConstant(); - }, true); - - // find namespaced const declarations (`const FOO = 1`) - // and add them to the not importable names (already used) - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - $token = $tokens[$index]; - - if ($token->isClassy()) { - $index = $tokens->getNextTokenOfKind($index, ['{']); - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if (!$token->isGivenKind(T_CONST)) { - continue; - } - - $index = $tokens->getNextMeaningfulToken($index); - $other[$tokens[$index]->getContent()] = true; - } - - $analyzer = new TokensAnalyzer($tokens); - $indices = []; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - $name = $token->getContent(); - - if (isset($other[$name])) { - continue; - } - - if (!$analyzer->isConstantInvocation($index)) { - continue; - } - - $nsSeparatorIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$nsSeparatorIndex]->isGivenKind(T_NS_SEPARATOR)) { - if (!isset($global[$name])) { - // found an unqualified constant invocation - // add it to the not importable names (already used) - $other[$name] = true; - } - - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($nsSeparatorIndex); - if ($tokens[$prevIndex]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_STRING])) { - continue; - } - - $indices[] = $index; - } - - return $this->prepareImports($tokens, $indices, $global, $other, true); - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - * - * @return array - */ - private function importFunctions(Tokens $tokens, array $useDeclarations): array - { - [$global, $other] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isFunction(); - }, false); - - // find function declarations - // and add them to the not importable names (already used) - foreach ($this->findFunctionDeclarations($tokens, 0, $tokens->count() - 1) as $name) { - $other[strtolower($name)] = true; - } - - $analyzer = new FunctionsAnalyzer(); - $indices = []; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - $name = strtolower($token->getContent()); - - if (isset($other[$name])) { - continue; - } - - if (!$analyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $nsSeparatorIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$nsSeparatorIndex]->isGivenKind(T_NS_SEPARATOR)) { - if (!isset($global[$name])) { - $other[$name] = true; - } - - continue; - } - - $indices[] = $index; - } - - return $this->prepareImports($tokens, $indices, $global, $other, false); - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - * - * @return array - */ - private function importClasses(Tokens $tokens, array $useDeclarations): array - { - [$global, $other] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isClass(); - }, false); - - /** @var DocBlock[] $docBlocks */ - $docBlocks = []; - - // find class declarations and class usages in docblocks - // and add them to the not importable names (already used) - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_DOC_COMMENT)) { - $docBlocks[$index] = new DocBlock($token->getContent()); - - $this->traverseDocBlockTypes($docBlocks[$index], static function (string $type) use ($global, &$other): void { - if (str_contains($type, '\\')) { - return; - } - - $name = strtolower($type); - - if (!isset($global[$name])) { - $other[$name] = true; - } - }); - } - - if (!$token->isClassy()) { - continue; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(T_STRING)) { - $other[strtolower($tokens[$index]->getContent())] = true; - } - } - - $analyzer = new ClassyAnalyzer(); - $indices = []; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - $name = strtolower($token->getContent()); - - if (isset($other[$name])) { - continue; - } - - if (!$analyzer->isClassyInvocation($tokens, $index)) { - continue; - } - - $nsSeparatorIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$nsSeparatorIndex]->isGivenKind(T_NS_SEPARATOR)) { - if (!isset($global[$name])) { - $other[$name] = true; - } - - continue; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($nsSeparatorIndex)]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_STRING])) { - continue; - } - - $indices[] = $index; - } - - $imports = []; - - foreach ($docBlocks as $index => $docBlock) { - $changed = $this->traverseDocBlockTypes($docBlock, static function (string $type) use ($global, $other, &$imports): string { - if ('\\' !== $type[0]) { - return $type; - } - - $name = substr($type, 1); - $checkName = strtolower($name); - - if (str_contains($checkName, '\\') || isset($other[$checkName])) { - return $type; - } - - if (isset($global[$checkName])) { - return \is_string($global[$checkName]) ? $global[$checkName] : $name; - } - - $imports[$checkName] = $name; - - return $name; - }); - - if ($changed) { - $tokens[$index] = new Token([T_DOC_COMMENT, $docBlock->getContent()]); - } - } - - return $imports + $this->prepareImports($tokens, $indices, $global, $other, false); - } - - /** - * Removes the leading slash at the given indices (when the name is not already used). - * - * @param int[] $indices - * @param array $other - * - * @return array array keys contain the names that must be imported - */ - private function prepareImports(Tokens $tokens, array $indices, array $global, array $other, bool $caseSensitive): array - { - $imports = []; - - foreach ($indices as $index) { - $name = $tokens[$index]->getContent(); - $checkName = $caseSensitive ? $name : strtolower($name); - - if (isset($other[$checkName])) { - continue; - } - - if (!isset($global[$checkName])) { - $imports[$checkName] = $name; - } elseif (\is_string($global[$checkName])) { - $tokens[$index] = new Token([T_STRING, $global[$checkName]]); - } - - $tokens->clearAt($tokens->getPrevMeaningfulToken($index)); - } - - return $imports; - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - */ - private function insertImports(Tokens $tokens, array $imports, array $useDeclarations): void - { - if (\count($useDeclarations) > 0) { - $useDeclaration = end($useDeclarations); - $index = $useDeclaration->getEndIndex() + 1; - } else { - $namespace = (new NamespacesAnalyzer())->getDeclarations($tokens)[0]; - $index = $namespace->getEndIndex() + 1; - } - - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - if (!$tokens[$index]->isWhitespace() || !str_contains($tokens[$index]->getContent(), "\n")) { - $tokens->insertAt($index, new Token([T_WHITESPACE, $lineEnding])); - } - - foreach ($imports as $type => $typeImports) { - foreach ($typeImports as $name) { - $items = [ - new Token([T_WHITESPACE, $lineEnding]), - new Token([T_USE, 'use']), - new Token([T_WHITESPACE, ' ']), - ]; - - if ('const' === $type) { - $items[] = new Token([CT::T_CONST_IMPORT, 'const']); - $items[] = new Token([T_WHITESPACE, ' ']); - } elseif ('function' === $type) { - $items[] = new Token([CT::T_FUNCTION_IMPORT, 'function']); - $items[] = new Token([T_WHITESPACE, ' ']); - } - - $items[] = new Token([T_STRING, $name]); - $items[] = new Token(';'); - - $tokens->insertAt($index, $items); - } - } - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - */ - private function fullyQualifyConstants(Tokens $tokens, array $useDeclarations): void - { - if (!$tokens->isTokenKindFound(CT::T_CONST_IMPORT)) { - return; - } - - [$global] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isConstant() && !$declaration->isAliased(); - }, true); - - if (!$global) { - return; - } - - $analyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - if (!isset($global[$token->getContent()])) { - continue; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - if (!$analyzer->isConstantInvocation($index)) { - continue; - } - - $tokens->insertAt($index, new Token([T_NS_SEPARATOR, '\\'])); - } - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - */ - private function fullyQualifyFunctions(Tokens $tokens, array $useDeclarations): void - { - if (!$tokens->isTokenKindFound(CT::T_FUNCTION_IMPORT)) { - return; - } - - [$global] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isFunction() && !$declaration->isAliased(); - }, false); - - if (!$global) { - return; - } - - $analyzer = new FunctionsAnalyzer(); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - if (!isset($global[strtolower($token->getContent())])) { - continue; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - if (!$analyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $tokens->insertAt($index, new Token([T_NS_SEPARATOR, '\\'])); - } - } - - /** - * @param NamespaceUseAnalysis[] $useDeclarations - */ - private function fullyQualifyClasses(Tokens $tokens, array $useDeclarations): void - { - if (!$tokens->isTokenKindFound(T_USE)) { - return; - } - - [$global] = $this->filterUseDeclarations($useDeclarations, static function (NamespaceUseAnalysis $declaration): bool { - return $declaration->isClass() && !$declaration->isAliased(); - }, false); - - if (!$global) { - return; - } - - $analyzer = new ClassyAnalyzer(); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_DOC_COMMENT)) { - $doc = new DocBlock($token->getContent()); - - $changed = $this->traverseDocBlockTypes($doc, static function (string $type) use ($global): string { - if (!isset($global[strtolower($type)])) { - return $type; - } - - return '\\'.$type; - }); - - if ($changed) { - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - - continue; - } - - if (!$token->isGivenKind(T_STRING)) { - continue; - } - - if (!isset($global[strtolower($token->getContent())])) { - continue; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_NS_SEPARATOR)) { - continue; - } - - if (!$analyzer->isClassyInvocation($tokens, $index)) { - continue; - } - - $tokens->insertAt($index, new Token([T_NS_SEPARATOR, '\\'])); - } - } - - /** - * @param NamespaceUseAnalysis[] $declarations - */ - private function filterUseDeclarations(array $declarations, callable $callback, bool $caseSensitive): array - { - $global = []; - $other = []; - - foreach ($declarations as $declaration) { - if (!$callback($declaration)) { - continue; - } - - $fullName = ltrim($declaration->getFullName(), '\\'); - - if (str_contains($fullName, '\\')) { - $name = $caseSensitive ? $declaration->getShortName() : strtolower($declaration->getShortName()); - $other[$name] = true; - - continue; - } - - $checkName = $caseSensitive ? $fullName : strtolower($fullName); - $alias = $declaration->getShortName(); - $global[$checkName] = $alias === $fullName ? true : $alias; - } - - return [$global, $other]; - } - - /** - * @return iterable - */ - private function findFunctionDeclarations(Tokens $tokens, int $start, int $end): iterable - { - for ($index = $start; $index <= $end; ++$index) { - $token = $tokens[$index]; - - if ($token->isClassy()) { - $classStart = $tokens->getNextTokenOfKind($index, ['{']); - $classEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classStart); - - for ($index = $classStart; $index <= $classEnd; ++$index) { - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - continue; - } - - $methodStart = $tokens->getNextTokenOfKind($index, ['{', ';']); - - if ($tokens[$methodStart]->equals(';')) { - $index = $methodStart; - - continue; - } - - $methodEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $methodStart); - - foreach ($this->findFunctionDeclarations($tokens, $methodStart, $methodEnd) as $function) { - yield $function; - } - - $index = $methodEnd; - } - - continue; - } - - if (!$token->isGivenKind(T_FUNCTION)) { - continue; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(CT::T_RETURN_REF)) { - $index = $tokens->getNextMeaningfulToken($index); - } - - if ($tokens[$index]->isGivenKind(T_STRING)) { - yield $tokens[$index]->getContent(); - } - } - } - - private function traverseDocBlockTypes(DocBlock $doc, callable $callback): bool - { - $annotations = $doc->getAnnotationsOfType(Annotation::getTagsWithTypes()); - - if (0 === \count($annotations)) { - return false; - } - - $changed = false; - - foreach ($annotations as $annotation) { - $types = $new = $annotation->getTypes(); - - foreach ($types as $i => $fullType) { - $newFullType = $fullType; - - Preg::matchAll('/[\\\\\w]+/', $fullType, $matches, PREG_OFFSET_CAPTURE); - - foreach (array_reverse($matches[0]) as [$type, $offset]) { - $newType = $callback($type); - - if (null !== $newType && $type !== $newType) { - $newFullType = substr_replace($newFullType, $newType, $offset, \strlen($type)); - } - } - - $new[$i] = $newFullType; - } - - if ($types !== $new) { - $annotation->setTypes($new); - $changed = true; - } - } - - return $changed; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php deleted file mode 100644 index d6e4351d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/GroupImportFixer.php +++ /dev/null @@ -1,280 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Volodymyr Kupriienko - */ -final class GroupImportFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST be group use for the same namespaces.', - [ - new CodeSample( - "isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $useWithSameNamespaces = $this->getSameNamespaces($tokens); - - if ([] === $useWithSameNamespaces) { - return; - } - - $this->removeSingleUseStatements($useWithSameNamespaces, $tokens); - $this->addGroupUseStatements($useWithSameNamespaces, $tokens); - } - - /** - * Gets namespace use analyzers with same namespaces. - * - * @return NamespaceUseAnalysis[] - */ - private function getSameNamespaces(Tokens $tokens): array - { - $useDeclarations = (new NamespaceUsesAnalyzer())->getDeclarationsFromTokens($tokens); - - if (0 === \count($useDeclarations)) { - return []; - } - - $allNamespaceAndType = array_map( - function (NamespaceUseAnalysis $useDeclaration): string { - return $this->getNamespaceNameWithSlash($useDeclaration).$useDeclaration->getType(); - }, - $useDeclarations - ); - - $sameNamespaces = array_filter(array_count_values($allNamespaceAndType), static function (int $count): bool { - return $count > 1; - }); - $sameNamespaces = array_keys($sameNamespaces); - - $sameNamespaceAnalysis = array_filter($useDeclarations, function (NamespaceUseAnalysis $useDeclaration) use ($sameNamespaces): bool { - $namespaceNameAndType = $this->getNamespaceNameWithSlash($useDeclaration).$useDeclaration->getType(); - - return \in_array($namespaceNameAndType, $sameNamespaces, true); - }); - - usort($sameNamespaceAnalysis, function (NamespaceUseAnalysis $a, NamespaceUseAnalysis $b): int { - $namespaceA = $this->getNamespaceNameWithSlash($a); - $namespaceB = $this->getNamespaceNameWithSlash($b); - - return \strlen($namespaceA) - \strlen($namespaceB) ?: strcmp($a->getFullName(), $b->getFullName()); - }); - - return $sameNamespaceAnalysis; - } - - /** - * @param NamespaceUseAnalysis[] $statements - */ - private function removeSingleUseStatements(array $statements, Tokens $tokens): void - { - foreach ($statements as $useDeclaration) { - $index = $useDeclaration->getStartIndex(); - $endIndex = $useDeclaration->getEndIndex(); - - $useStatementTokens = [T_USE, T_WHITESPACE, T_STRING, T_NS_SEPARATOR, T_AS, CT::T_CONST_IMPORT, CT::T_FUNCTION_IMPORT]; - - while ($index !== $endIndex) { - if ($tokens[$index]->isGivenKind($useStatementTokens)) { - $tokens->clearAt($index); - } - - ++$index; - } - - if (isset($tokens[$index]) && $tokens[$index]->equals(';')) { - $tokens->clearAt($index); - } - - ++$index; - - if (isset($tokens[$index]) && $tokens[$index]->isGivenKind(T_WHITESPACE)) { - $tokens->clearAt($index); - } - } - } - - /** - * @param NamespaceUseAnalysis[] $statements - */ - private function addGroupUseStatements(array $statements, Tokens $tokens): void - { - $currentUseDeclaration = null; - $insertIndex = \array_slice($statements, -1)[0]->getEndIndex() + 1; - - foreach ($statements as $index => $useDeclaration) { - if ($this->areDeclarationsDifferent($currentUseDeclaration, $useDeclaration)) { - $currentUseDeclaration = $useDeclaration; - $insertIndex += $this->createNewGroup( - $tokens, - $insertIndex, - $useDeclaration, - $this->getNamespaceNameWithSlash($currentUseDeclaration) - ); - } else { - $newTokens = [ - new Token(','), - new Token([T_WHITESPACE, ' ']), - ]; - - if ($useDeclaration->isAliased()) { - $tokens->insertAt($insertIndex, $newTokens); - $insertIndex += \count($newTokens); - $newTokens = []; - - $insertIndex += $this->insertToGroupUseWithAlias($tokens, $insertIndex, $useDeclaration); - } - - $newTokens[] = new Token([T_STRING, $useDeclaration->getShortName()]); - - if (!isset($statements[$index + 1]) || $this->areDeclarationsDifferent($currentUseDeclaration, $statements[$index + 1])) { - $newTokens[] = new Token([CT::T_GROUP_IMPORT_BRACE_CLOSE, '}']); - $newTokens[] = new Token(';'); - $newTokens[] = new Token([T_WHITESPACE, "\n"]); - } - - $tokens->insertAt($insertIndex, $newTokens); - $insertIndex += \count($newTokens); - } - } - } - - private function getNamespaceNameWithSlash(NamespaceUseAnalysis $useDeclaration): string - { - $position = strrpos($useDeclaration->getFullName(), '\\'); - if (false === $position || 0 === $position) { - return $useDeclaration->getFullName(); - } - - return substr($useDeclaration->getFullName(), 0, $position + 1); - } - - /** - * Insert use with alias to the group. - */ - private function insertToGroupUseWithAlias(Tokens $tokens, int $insertIndex, NamespaceUseAnalysis $useDeclaration): int - { - $newTokens = [ - new Token([T_STRING, substr($useDeclaration->getFullName(), strripos($useDeclaration->getFullName(), '\\') + 1)]), - new Token([T_WHITESPACE, ' ']), - new Token([T_AS, 'as']), - new Token([T_WHITESPACE, ' ']), - ]; - - $tokens->insertAt($insertIndex, $newTokens); - - return \count($newTokens) + 1; - } - - /** - * Creates new use statement group. - */ - private function createNewGroup(Tokens $tokens, int $insertIndex, NamespaceUseAnalysis $useDeclaration, string $currentNamespace): int - { - $insertedTokens = 0; - - if (\count($tokens) === $insertIndex) { - $tokens->setSize($insertIndex + 1); - } - - $newTokens = [ - new Token([T_USE, 'use']), - new Token([T_WHITESPACE, ' ']), - ]; - - if ($useDeclaration->isFunction() || $useDeclaration->isConstant()) { - $importStatementParams = $useDeclaration->isFunction() - ? [CT::T_FUNCTION_IMPORT, 'function'] - : [CT::T_CONST_IMPORT, 'const']; - - $newTokens[] = new Token($importStatementParams); - $newTokens[] = new Token([T_WHITESPACE, ' ']); - } - - $namespaceParts = array_filter(explode('\\', $currentNamespace)); - - foreach ($namespaceParts as $part) { - $newTokens[] = new Token([T_STRING, $part]); - $newTokens[] = new Token([T_NS_SEPARATOR, '\\']); - } - - $newTokens[] = new Token([CT::T_GROUP_IMPORT_BRACE_OPEN, '{']); - - $newTokensCount = \count($newTokens); - $tokens->insertAt($insertIndex, $newTokens); - $insertedTokens += $newTokensCount; - - $insertIndex += $newTokensCount; - - if ($useDeclaration->isAliased()) { - $inserted = $this->insertToGroupUseWithAlias($tokens, $insertIndex + 1, $useDeclaration); - $insertedTokens += $inserted; - $insertIndex += $inserted; - } - - $tokens->insertAt($insertIndex, new Token([T_STRING, $useDeclaration->getShortName()])); - ++$insertedTokens; - - return $insertedTokens; - } - - /** - * Check if namespace use analyses are different. - */ - private function areDeclarationsDifferent(?NamespaceUseAnalysis $analysis1, ?NamespaceUseAnalysis $analysis2): bool - { - if (null === $analysis1 || null === $analysis2) { - return true; - } - - $namespaceName1 = $this->getNamespaceNameWithSlash($analysis1); - $namespaceName2 = $this->getNamespaceNameWithSlash($analysis2); - - return $namespaceName1 !== $namespaceName2 || $analysis1->getType() !== $analysis2->getType(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php deleted file mode 100644 index a1bcc09a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoLeadingImportSlashFixer.php +++ /dev/null @@ -1,99 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Carlos Cirello - */ -final class NoLeadingImportSlashFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove leading slashes in `use` clauses.', - [new CodeSample("isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $usesIndices = $tokensAnalyzer->getImportUseIndexes(); - - foreach ($usesIndices as $idx) { - $nextTokenIdx = $tokens->getNextMeaningfulToken($idx); - $nextToken = $tokens[$nextTokenIdx]; - - if ($nextToken->isGivenKind(T_NS_SEPARATOR)) { - $this->removeLeadingImportSlash($tokens, $nextTokenIdx); - } elseif ($nextToken->isGivenKind([CT::T_FUNCTION_IMPORT, CT::T_CONST_IMPORT])) { - $nextTokenIdx = $tokens->getNextMeaningfulToken($nextTokenIdx); - if ($tokens[$nextTokenIdx]->isGivenKind(T_NS_SEPARATOR)) { - $this->removeLeadingImportSlash($tokens, $nextTokenIdx); - } - } - } - } - - private function removeLeadingImportSlash(Tokens $tokens, int $index): void - { - $previousIndex = $tokens->getPrevNonWhitespace($index); - - if ( - $previousIndex < $index - 1 - || $tokens[$previousIndex]->isComment() - ) { - $tokens->clearAt($index); - - return; - } - - $tokens[$index] = new Token([T_WHITESPACE, ' ']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php deleted file mode 100644 index 56a7d959..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnneededImportAliasFixer.php +++ /dev/null @@ -1,97 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUnneededImportAliasFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Imports should not be aliased as the same name.', - [new CodeSample("isAllTokenKindsFound([T_USE, T_AS]); - } - - /** - * {@inheritdoc} - * - * Must run before NoSinglelineWhitespaceBeforeSemicolonsFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 0 <= $index; --$index) { - if (!$tokens[$index]->isGivenKind(T_AS)) { - continue; - } - - $aliasIndex = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$aliasIndex]->isGivenKind(T_STRING)) { - continue; - } - - $importIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$importIndex]->isGivenKind(T_STRING)) { - continue; - } - - if ($tokens[$importIndex]->getContent() !== $tokens[$aliasIndex]->getContent()) { - continue; - } - - do { - $importIndex = $tokens->getPrevMeaningfulToken($importIndex); - } while ($tokens[$importIndex]->isGivenKind([T_NS_SEPARATOR, T_STRING, T_AS]) || $tokens[$importIndex]->equals(',')); - - if ($tokens[$importIndex]->isGivenKind([CT::T_FUNCTION_IMPORT, CT::T_CONST_IMPORT])) { - $importIndex = $tokens->getPrevMeaningfulToken($importIndex); - } - - if (!$tokens[$importIndex]->isGivenKind([T_USE, CT::T_GROUP_IMPORT_BRACE_OPEN])) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($aliasIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php deleted file mode 100644 index f39f4197..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/NoUnusedImportsFixer.php +++ /dev/null @@ -1,300 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\GotoLabelAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Dariusz Rumiński - */ -final class NoUnusedImportsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Unused `use` statements must be removed.', - [new CodeSample("isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $useDeclarations = (new NamespaceUsesAnalyzer())->getDeclarationsFromTokens($tokens); - - if (0 === \count($useDeclarations)) { - return; - } - - foreach ((new NamespacesAnalyzer())->getDeclarations($tokens) as $namespace) { - $currentNamespaceUseDeclarations = []; - $currentNamespaceUseDeclarationIndices = []; - - foreach ($useDeclarations as $useDeclaration) { - if ($useDeclaration->getStartIndex() >= $namespace->getScopeStartIndex() && $useDeclaration->getEndIndex() <= $namespace->getScopeEndIndex()) { - $currentNamespaceUseDeclarations[] = $useDeclaration; - $currentNamespaceUseDeclarationIndices[$useDeclaration->getStartIndex()] = $useDeclaration->getEndIndex(); - } - } - - foreach ($currentNamespaceUseDeclarations as $useDeclaration) { - if (!$this->isImportUsed($tokens, $namespace, $useDeclaration, $currentNamespaceUseDeclarationIndices)) { - $this->removeUseDeclaration($tokens, $useDeclaration); - } - } - - $this->removeUsesInSameNamespace($tokens, $currentNamespaceUseDeclarations, $namespace); - } - } - - /** - * @param array $ignoredIndices indices of the use statements themselves that should not be checked as being "used" - */ - private function isImportUsed(Tokens $tokens, NamespaceAnalysis $namespace, NamespaceUseAnalysis $import, array $ignoredIndices): bool - { - $analyzer = new TokensAnalyzer($tokens); - $gotoLabelAnalyzer = new GotoLabelAnalyzer(); - - $tokensNotBeforeFunctionCall = [T_NEW]; - - $attributeIsDefined = \defined('T_ATTRIBUTE'); - - if ($attributeIsDefined) { // @TODO: drop condition when PHP 8.0+ is required - $tokensNotBeforeFunctionCall[] = T_ATTRIBUTE; - } - - $namespaceEndIndex = $namespace->getScopeEndIndex(); - $inAttribute = false; - - for ($index = $namespace->getScopeStartIndex(); $index <= $namespaceEndIndex; ++$index) { - $token = $tokens[$index]; - - if ($attributeIsDefined && $token->isGivenKind(T_ATTRIBUTE)) { - $inAttribute = true; - - continue; - } - - if ($attributeIsDefined && $token->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - $inAttribute = false; - - continue; - } - - if (isset($ignoredIndices[$index])) { - $index = $ignoredIndices[$index]; - - continue; - } - - if ($token->isGivenKind(T_STRING)) { - if (0 !== strcasecmp($import->getShortName(), $token->getContent())) { - continue; - } - - if ($inAttribute) { - return true; - } - - $prevMeaningfulToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if ($prevMeaningfulToken->isGivenKind(T_NAMESPACE)) { - $index = $tokens->getNextTokenOfKind($index, [';', '{', [T_CLOSE_TAG]]); - - continue; - } - - if ( - $prevMeaningfulToken->isGivenKind([T_NS_SEPARATOR, T_FUNCTION, T_CONST, T_DOUBLE_COLON]) - || $prevMeaningfulToken->isObjectOperator() - ) { - continue; - } - - $nextMeaningfulIndex = $tokens->getNextMeaningfulToken($index); - - if ($gotoLabelAnalyzer->belongsToGoToLabel($tokens, $nextMeaningfulIndex)) { - continue; - } - - $nextMeaningfulToken = $tokens[$nextMeaningfulIndex]; - - if ($analyzer->isConstantInvocation($index)) { - $type = NamespaceUseAnalysis::TYPE_CONSTANT; - } elseif ($nextMeaningfulToken->equals('(') && !$prevMeaningfulToken->isGivenKind($tokensNotBeforeFunctionCall)) { - $type = NamespaceUseAnalysis::TYPE_FUNCTION; - } else { - $type = NamespaceUseAnalysis::TYPE_CLASS; - } - - if ($import->getType() === $type) { - return true; - } - - continue; - } - - if ($token->isComment() - && Preg::match( - '/(?getShortName().'(?![[:alnum:]])/i', - $token->getContent() - ) - ) { - return true; - } - } - - return false; - } - - private function removeUseDeclaration(Tokens $tokens, NamespaceUseAnalysis $useDeclaration): void - { - for ($index = $useDeclaration->getEndIndex() - 1; $index >= $useDeclaration->getStartIndex(); --$index) { - if ($tokens[$index]->isComment()) { - continue; - } - - if (!$tokens[$index]->isWhitespace() || !str_contains($tokens[$index]->getContent(), "\n")) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - continue; - } - - // when multi line white space keep the line feed if the previous token is a comment - $prevIndex = $tokens->getPrevNonWhitespace($index); - - if ($tokens[$prevIndex]->isComment()) { - $content = $tokens[$index]->getContent(); - $tokens[$index] = new Token([T_WHITESPACE, substr($content, strrpos($content, "\n"))]); // preserve indent only - } else { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } - - if ($tokens[$useDeclaration->getEndIndex()]->equals(';')) { // do not remove `? >` - $tokens->clearAt($useDeclaration->getEndIndex()); - } - - // remove white space above and below where the `use` statement was - - $prevIndex = $useDeclaration->getStartIndex() - 1; - $prevToken = $tokens[$prevIndex]; - - if ($prevToken->isWhitespace()) { - $content = rtrim($prevToken->getContent(), " \t"); - - $tokens->ensureWhitespaceAtIndex($prevIndex, 0, $content); - - $prevToken = $tokens[$prevIndex]; - } - - if (!isset($tokens[$useDeclaration->getEndIndex() + 1])) { - return; - } - - $nextIndex = $tokens->getNonEmptySibling($useDeclaration->getEndIndex(), 1); - - if (null === $nextIndex) { - return; - } - - $nextToken = $tokens[$nextIndex]; - - if ($nextToken->isWhitespace()) { - $content = Preg::replace( - "#^\r\n|^\n#", - '', - ltrim($nextToken->getContent(), " \t"), - 1 - ); - - $tokens->ensureWhitespaceAtIndex($nextIndex, 0, $content); - - $nextToken = $tokens[$nextIndex]; - } - - if ($prevToken->isWhitespace() && $nextToken->isWhitespace()) { - $content = $prevToken->getContent().$nextToken->getContent(); - - $tokens->ensureWhitespaceAtIndex($nextIndex, 0, $content); - - $tokens->clearAt($prevIndex); - } - } - - /** - * @param list $useDeclarations - */ - private function removeUsesInSameNamespace(Tokens $tokens, array $useDeclarations, NamespaceAnalysis $namespaceDeclaration): void - { - $namespace = $namespaceDeclaration->getFullName(); - $nsLength = \strlen($namespace.'\\'); - - foreach ($useDeclarations as $useDeclaration) { - if ($useDeclaration->isAliased()) { - continue; - } - - $useDeclarationFullName = ltrim($useDeclaration->getFullName(), '\\'); - - if (!str_starts_with($useDeclarationFullName, $namespace.'\\')) { - continue; - } - - $partName = substr($useDeclarationFullName, $nsLength); - - if (!str_contains($partName, '\\')) { - $this->removeUseDeclaration($tokens, $useDeclaration); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php deleted file mode 100644 index 767ef55d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/OrderedImportsFixer.php +++ /dev/null @@ -1,552 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Sebastiaan Stok - * @author Dariusz Rumiński - * @author Darius Matulionis - * @author Adriano Pilger - */ -final class OrderedImportsFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const IMPORT_TYPE_CLASS = 'class'; - - /** - * @internal - */ - public const IMPORT_TYPE_CONST = 'const'; - - /** - * @internal - */ - public const IMPORT_TYPE_FUNCTION = 'function'; - - /** - * @internal - */ - public const SORT_ALPHA = 'alpha'; - - /** - * @internal - */ - public const SORT_LENGTH = 'length'; - - /** - * @internal - */ - public const SORT_NONE = 'none'; - - /** - * Array of supported sort types in configuration. - * - * @var string[] - */ - private const SUPPORTED_SORT_TYPES = [self::IMPORT_TYPE_CLASS, self::IMPORT_TYPE_CONST, self::IMPORT_TYPE_FUNCTION]; - - /** - * Array of supported sort algorithms in configuration. - * - * @var string[] - */ - private const SUPPORTED_SORT_ALGORITHMS = [self::SORT_ALPHA, self::SORT_LENGTH, self::SORT_NONE]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Ordering `use` statements.', - [ - new CodeSample( - " self::SORT_LENGTH] - ), - new CodeSample( - ' self::SORT_LENGTH, - 'imports_order' => [ - self::IMPORT_TYPE_CONST, - self::IMPORT_TYPE_CLASS, - self::IMPORT_TYPE_FUNCTION, - ], - ] - ), - new CodeSample( - ' self::SORT_ALPHA, - 'imports_order' => [ - self::IMPORT_TYPE_CONST, - self::IMPORT_TYPE_CLASS, - self::IMPORT_TYPE_FUNCTION, - ], - ] - ), - new CodeSample( - ' self::SORT_NONE, - 'imports_order' => [ - self::IMPORT_TYPE_CONST, - self::IMPORT_TYPE_CLASS, - self::IMPORT_TYPE_FUNCTION, - ], - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BlankLineBetweenImportGroupsFixer. - * Must run after GlobalNamespaceImportFixer, NoLeadingImportSlashFixer. - */ - public function getPriority(): int - { - return -30; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $namespacesImports = $tokensAnalyzer->getImportUseIndexes(true); - - if (0 === \count($namespacesImports)) { - return; - } - - $usesOrder = []; - foreach ($namespacesImports as $uses) { - $usesOrder[] = $this->getNewOrder(array_reverse($uses), $tokens); - } - $usesOrder = array_replace(...$usesOrder); - - $usesOrder = array_reverse($usesOrder, true); - $mapStartToEnd = []; - - foreach ($usesOrder as $use) { - $mapStartToEnd[$use['startIndex']] = $use['endIndex']; - } - - // Now insert the new tokens, starting from the end - foreach ($usesOrder as $index => $use) { - $declarationTokens = Tokens::fromCode( - sprintf( - 'clearRange(0, 2); // clear `clearAt(\count($declarationTokens) - 1); // clear `;` - $declarationTokens->clearEmptyTokens(); - - $tokens->overrideRange($index, $mapStartToEnd[$index], $declarationTokens); - if ($use['group']) { - // a group import must start with `use` and cannot be part of comma separated import list - $prev = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prev]->equals(',')) { - $tokens[$prev] = new Token(';'); - $tokens->insertAt($prev + 1, new Token([T_USE, 'use'])); - - if (!$tokens[$prev + 2]->isWhitespace()) { - $tokens->insertAt($prev + 2, new Token([T_WHITESPACE, ' '])); - } - } - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $supportedSortTypes = self::SUPPORTED_SORT_TYPES; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('sort_algorithm', 'whether the statements should be sorted alphabetically or by length, or not sorted')) - ->setAllowedValues(self::SUPPORTED_SORT_ALGORITHMS) - ->setDefault(self::SORT_ALPHA) - ->getOption(), - (new FixerOptionBuilder('imports_order', 'Defines the order of import types.')) - ->setAllowedTypes(['array', 'null']) - ->setAllowedValues([static function (?array $value) use ($supportedSortTypes): bool { - if (null !== $value) { - $missing = array_diff($supportedSortTypes, $value); - if (\count($missing) > 0) { - throw new InvalidOptionsException(sprintf( - 'Missing sort %s "%s".', - 1 === \count($missing) ? 'type' : 'types', - implode('", "', $missing) - )); - } - - $unknown = array_diff($value, $supportedSortTypes); - if (\count($unknown) > 0) { - throw new InvalidOptionsException(sprintf( - 'Unknown sort %s "%s".', - 1 === \count($unknown) ? 'type' : 'types', - implode('", "', $unknown) - )); - } - } - - return true; - }]) - ->setDefault(null) - ->getOption(), - ]); - } - - /** - * This method is used for sorting the uses in a namespace. - * - * @param array $first - * @param array $second - * - * @internal - */ - private function sortAlphabetically(array $first, array $second): int - { - // Replace backslashes by spaces before sorting for correct sort order - $firstNamespace = str_replace('\\', ' ', $this->prepareNamespace($first['namespace'])); - $secondNamespace = str_replace('\\', ' ', $this->prepareNamespace($second['namespace'])); - - return strcasecmp($firstNamespace, $secondNamespace); - } - - /** - * This method is used for sorting the uses statements in a namespace by length. - * - * @param array $first - * @param array $second - * - * @internal - */ - private function sortByLength(array $first, array $second): int - { - $firstNamespace = (self::IMPORT_TYPE_CLASS === $first['importType'] ? '' : $first['importType'].' ').$this->prepareNamespace($first['namespace']); - $secondNamespace = (self::IMPORT_TYPE_CLASS === $second['importType'] ? '' : $second['importType'].' ').$this->prepareNamespace($second['namespace']); - - $firstNamespaceLength = \strlen($firstNamespace); - $secondNamespaceLength = \strlen($secondNamespace); - - if ($firstNamespaceLength === $secondNamespaceLength) { - $sortResult = strcasecmp($firstNamespace, $secondNamespace); - } else { - $sortResult = $firstNamespaceLength > $secondNamespaceLength ? 1 : -1; - } - - return $sortResult; - } - - private function prepareNamespace(string $namespace): string - { - return trim(Preg::replace('%/\*(.*)\*/%s', '', $namespace)); - } - - /** - * @param list $uses - */ - private function getNewOrder(array $uses, Tokens $tokens): array - { - $indices = []; - $originalIndices = []; - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - for ($i = \count($uses) - 1; $i >= 0; --$i) { - $index = $uses[$i]; - - $startIndex = $tokens->getTokenNotOfKindsSibling($index + 1, 1, [T_WHITESPACE]); - $endIndex = $tokens->getNextTokenOfKind($startIndex, [';', [T_CLOSE_TAG]]); - $previous = $tokens->getPrevMeaningfulToken($endIndex); - - $group = $tokens[$previous]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE); - if ($tokens[$startIndex]->isGivenKind(CT::T_CONST_IMPORT)) { - $type = self::IMPORT_TYPE_CONST; - $index = $tokens->getNextNonWhitespace($startIndex); - } elseif ($tokens[$startIndex]->isGivenKind(CT::T_FUNCTION_IMPORT)) { - $type = self::IMPORT_TYPE_FUNCTION; - $index = $tokens->getNextNonWhitespace($startIndex); - } else { - $type = self::IMPORT_TYPE_CLASS; - $index = $startIndex; - } - - $namespaceTokens = []; - - while ($index <= $endIndex) { - $token = $tokens[$index]; - - if ($index === $endIndex || (!$group && $token->equals(','))) { - if ($group && self::SORT_NONE !== $this->configuration['sort_algorithm']) { - // if group import, sort the items within the group definition - - // figure out where the list of namespace parts within the group def. starts - $namespaceTokensCount = \count($namespaceTokens) - 1; - $namespace = ''; - for ($k = 0; $k < $namespaceTokensCount; ++$k) { - if ($namespaceTokens[$k]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) { - $namespace .= '{'; - - break; - } - - $namespace .= $namespaceTokens[$k]->getContent(); - } - - // fetch all parts, split up in an array of strings, move comments to the end - $parts = []; - $firstIndent = ''; - $separator = ', '; - $lastIndent = ''; - $hasGroupTrailingComma = false; - - for ($k1 = $k + 1; $k1 < $namespaceTokensCount; ++$k1) { - $comment = ''; - $namespacePart = ''; - for ($k2 = $k1;; ++$k2) { - if ($namespaceTokens[$k2]->equalsAny([',', [CT::T_GROUP_IMPORT_BRACE_CLOSE]])) { - break; - } - - if ($namespaceTokens[$k2]->isComment()) { - $comment .= $namespaceTokens[$k2]->getContent(); - - continue; - } - - // if there is any line ending inside the group import, it should be indented properly - if ( - '' === $firstIndent - && $namespaceTokens[$k2]->isWhitespace() - && str_contains($namespaceTokens[$k2]->getContent(), $lineEnding) - ) { - $lastIndent = $lineEnding; - $firstIndent = $lineEnding.$this->whitespacesConfig->getIndent(); - $separator = ','.$firstIndent; - } - - $namespacePart .= $namespaceTokens[$k2]->getContent(); - } - - $namespacePart = trim($namespacePart); - if ('' === $namespacePart) { - $hasGroupTrailingComma = true; - - continue; - } - - $comment = trim($comment); - if ('' !== $comment) { - $namespacePart .= ' '.$comment; - } - - $parts[] = $namespacePart; - - $k1 = $k2; - } - - $sortedParts = $parts; - sort($parts); - - // check if the order needs to be updated, otherwise don't touch as we might change valid CS (to other valid CS). - if ($sortedParts === $parts) { - $namespace = Tokens::fromArray($namespaceTokens)->generateCode(); - } else { - $namespace .= $firstIndent.implode($separator, $parts).($hasGroupTrailingComma ? ',' : '').$lastIndent.'}'; - } - } else { - $namespace = Tokens::fromArray($namespaceTokens)->generateCode(); - } - - $indices[$startIndex] = [ - 'namespace' => $namespace, - 'startIndex' => $startIndex, - 'endIndex' => $index - 1, - 'importType' => $type, - 'group' => $group, - ]; - - $originalIndices[] = $startIndex; - - if ($index === $endIndex) { - break; - } - - $namespaceTokens = []; - $nextPartIndex = $tokens->getTokenNotOfKindSibling($index, 1, [',', [T_WHITESPACE]]); - $startIndex = $nextPartIndex; - $index = $nextPartIndex; - - continue; - } - - $namespaceTokens[] = $token; - ++$index; - } - } - - // Is sort types provided, sorting by groups and each group by algorithm - if (null !== $this->configuration['imports_order']) { - // Grouping indices by import type. - $groupedByTypes = []; - - foreach ($indices as $startIndex => $item) { - $groupedByTypes[$item['importType']][$startIndex] = $item; - } - - // Sorting each group by algorithm. - foreach ($groupedByTypes as $type => $groupIndices) { - $groupedByTypes[$type] = $this->sortByAlgorithm($groupIndices); - } - - // Ordering groups - $sortedGroups = []; - - foreach ($this->configuration['imports_order'] as $type) { - if (isset($groupedByTypes[$type]) && !empty($groupedByTypes[$type])) { - foreach ($groupedByTypes[$type] as $startIndex => $item) { - $sortedGroups[$startIndex] = $item; - } - } - } - - $indices = $sortedGroups; - } else { - // Sorting only by algorithm - $indices = $this->sortByAlgorithm($indices); - } - - $index = -1; - $usesOrder = []; - - // Loop through the index but use original index order - foreach ($indices as $v) { - $usesOrder[$originalIndices[++$index]] = $v; - } - - return $usesOrder; - } - - /** - * @param array< - * int, - * array{ - * namespace: string, - * startIndex: int, - * endIndex: int, - * importType: string, - * group: bool, - * } - * > $indices - * - * @return array< - * int, - * array{ - * namespace: string, - * startIndex: int, - * endIndex: int, - * importType: string, - * group: bool, - * } - * > - */ - private function sortByAlgorithm(array $indices): array - { - if (self::SORT_ALPHA === $this->configuration['sort_algorithm']) { - uasort($indices, [$this, 'sortAlphabetically']); - } elseif (self::SORT_LENGTH === $this->configuration['sort_algorithm']) { - uasort($indices, [$this, 'sortByLength']); - } - - return $indices; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php deleted file mode 100644 index 9f8979fd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php +++ /dev/null @@ -1,275 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * Fixer for rules defined in PSR2 ¶3. - * - * @author Dariusz Rumiński - */ -final class SingleImportPerStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST be one use keyword per declaration.', - [ - new CodeSample( - ' true] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before MultilineWhitespaceBeforeSemicolonsFixer, NoLeadingImportSlashFixer, NoSinglelineWhitespaceBeforeSemicolonsFixer, NoUnusedImportsFixer, SpaceAfterSemicolonFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $fixGroups = $this->configuration['group_to_single_imports']; - - foreach (array_reverse($tokensAnalyzer->getImportUseIndexes()) as $index) { - $endIndex = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - $groupClose = $tokens->getPrevMeaningfulToken($endIndex); - - if ($tokens[$groupClose]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE)) { - if ($fixGroups) { - $this->fixGroupUse($tokens, $index, $endIndex); - } - } else { - $this->fixMultipleUse($tokens, $index, $endIndex); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('group_to_single_imports', 'Whether to change group imports into single imports.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function getGroupDeclaration(Tokens $tokens, int $index): array - { - $groupPrefix = ''; - $comment = ''; - $groupOpenIndex = null; - - for ($i = $index + 1;; ++$i) { - if ($tokens[$i]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) { - $groupOpenIndex = $i; - - break; - } - - if ($tokens[$i]->isComment()) { - $comment .= $tokens[$i]->getContent(); - if (!$tokens[$i - 1]->isWhitespace() && !$tokens[$i + 1]->isWhitespace()) { - $groupPrefix .= ' '; - } - - continue; - } - - if ($tokens[$i]->isWhitespace()) { - $groupPrefix .= ' '; - - continue; - } - - $groupPrefix .= $tokens[$i]->getContent(); - } - - return [ - rtrim($groupPrefix), - $groupOpenIndex, - $tokens->findBlockEnd(Tokens::BLOCK_TYPE_GROUP_IMPORT_BRACE, $groupOpenIndex), - $comment, - ]; - } - - /** - * @return string[] - */ - private function getGroupStatements(Tokens $tokens, string $groupPrefix, int $groupOpenIndex, int $groupCloseIndex, string $comment): array - { - $statements = []; - $statement = $groupPrefix; - - for ($i = $groupOpenIndex + 1; $i <= $groupCloseIndex; ++$i) { - $token = $tokens[$i]; - - if ($token->equals(',') && $tokens[$tokens->getNextMeaningfulToken($i)]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE)) { - continue; - } - - if ($token->equalsAny([',', [CT::T_GROUP_IMPORT_BRACE_CLOSE]])) { - $statements[] = 'use'.$statement.';'; - $statement = $groupPrefix; - - continue; - } - - if ($token->isWhitespace()) { - $j = $tokens->getNextMeaningfulToken($i); - - if ($tokens[$j]->isGivenKind(T_AS)) { - $statement .= ' as '; - $i += 2; - } elseif ($tokens[$j]->isGivenKind(CT::T_FUNCTION_IMPORT)) { - $statement = ' function'.$statement; - $i += 2; - } elseif ($tokens[$j]->isGivenKind(CT::T_CONST_IMPORT)) { - $statement = ' const'.$statement; - $i += 2; - } - - if ($token->isWhitespace(" \t") || !str_starts_with($tokens[$i - 1]->getContent(), '//')) { - continue; - } - } - - $statement .= $token->getContent(); - } - - if ('' !== $comment) { - $statements[0] .= ' '.$comment; - } - - return $statements; - } - - private function fixGroupUse(Tokens $tokens, int $index, int $endIndex): void - { - [$groupPrefix, $groupOpenIndex, $groupCloseIndex, $comment] = $this->getGroupDeclaration($tokens, $index); - $statements = $this->getGroupStatements($tokens, $groupPrefix, $groupOpenIndex, $groupCloseIndex, $comment); - - if (\count($statements) < 2) { - return; - } - - $tokens->clearRange($index, $groupCloseIndex); - if ($tokens[$endIndex]->equals(';')) { - $tokens->clearAt($endIndex); - } - - $ending = $this->whitespacesConfig->getLineEnding(); - $importTokens = Tokens::fromCode('clearAt(0); - $importTokens->clearEmptyTokens(); - - $tokens->insertAt($index, $importTokens); - } - - private function fixMultipleUse(Tokens $tokens, int $index, int $endIndex): void - { - $nextTokenIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextTokenIndex]->isGivenKind(CT::T_FUNCTION_IMPORT)) { - $leadingTokens = [ - new Token([CT::T_FUNCTION_IMPORT, 'function']), - new Token([T_WHITESPACE, ' ']), - ]; - } elseif ($tokens[$nextTokenIndex]->isGivenKind(CT::T_CONST_IMPORT)) { - $leadingTokens = [ - new Token([CT::T_CONST_IMPORT, 'const']), - new Token([T_WHITESPACE, ' ']), - ]; - } else { - $leadingTokens = []; - } - - $ending = $this->whitespacesConfig->getLineEnding(); - - for ($i = $endIndex - 1; $i > $index; --$i) { - if (!$tokens[$i]->equals(',')) { - continue; - } - - $tokens[$i] = new Token(';'); - $i = $tokens->getNextMeaningfulToken($i); - - $tokens->insertAt($i, new Token([T_USE, 'use'])); - $tokens->insertAt($i + 1, new Token([T_WHITESPACE, ' '])); - - foreach ($leadingTokens as $offset => $leadingToken) { - $tokens->insertAt($i + 2 + $offset, clone $leadingTokens[$offset]); - } - - $indent = WhitespacesAnalyzer::detectIndent($tokens, $index); - - if ($tokens[$i - 1]->isWhitespace()) { - $tokens[$i - 1] = new Token([T_WHITESPACE, $ending.$indent]); - } elseif (!str_contains($tokens[$i - 1]->getContent(), "\n")) { - $tokens->insertAt($i, new Token([T_WHITESPACE, $ending.$indent])); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php deleted file mode 100644 index 773f25bf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php +++ /dev/null @@ -1,161 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Import; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use PhpCsFixer\Utils; - -/** - * Fixer for rules defined in PSR2 ¶3. - * - * @author Ceeram - * @author Graham Campbell - */ -final class SingleLineAfterImportsFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Each namespace use MUST go on its own line and there MUST be one blank line after the use statements block.', - [ - new CodeSample( - 'whitespacesConfig->getLineEnding(); - $tokensAnalyzer = new TokensAnalyzer($tokens); - - $added = 0; - foreach ($tokensAnalyzer->getImportUseIndexes() as $index) { - $index += $added; - $indent = ''; - - // if previous line ends with comment and current line starts with whitespace, use current indent - if ($tokens[$index - 1]->isWhitespace(" \t") && $tokens[$index - 2]->isGivenKind(T_COMMENT)) { - $indent = $tokens[$index - 1]->getContent(); - } elseif ($tokens[$index - 1]->isWhitespace()) { - $indent = Utils::calculateTrailingWhitespaceIndent($tokens[$index - 1]); - } - - $semicolonIndex = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); // Handle insert index for inline T_COMMENT with whitespace after semicolon - $insertIndex = $semicolonIndex; - - if ($tokens[$semicolonIndex]->isGivenKind(T_CLOSE_TAG)) { - if ($tokens[$insertIndex - 1]->isWhitespace()) { - --$insertIndex; - } - - $tokens->insertAt($insertIndex, new Token(';')); - ++$added; - } - - if ($semicolonIndex === \count($tokens) - 1) { - $tokens->insertAt($insertIndex + 1, new Token([T_WHITESPACE, $ending.$ending.$indent])); - ++$added; - } else { - $newline = $ending; - $tokens[$semicolonIndex]->isGivenKind(T_CLOSE_TAG) ? --$insertIndex : ++$insertIndex; - if ($tokens[$insertIndex]->isWhitespace(" \t") && $tokens[$insertIndex + 1]->isComment()) { - ++$insertIndex; - } - - // Increment insert index for inline T_COMMENT or T_DOC_COMMENT - if ($tokens[$insertIndex]->isComment()) { - ++$insertIndex; - } - - $afterSemicolon = $tokens->getNextMeaningfulToken($semicolonIndex); - if (null === $afterSemicolon || !$tokens[$afterSemicolon]->isGivenKind(T_USE)) { - $newline .= $ending; - } - - if ($tokens[$insertIndex]->isWhitespace()) { - $nextToken = $tokens[$insertIndex]; - if (2 === substr_count($nextToken->getContent(), "\n")) { - continue; - } - $nextMeaningfulAfterUseIndex = $tokens->getNextMeaningfulToken($insertIndex); - if (null !== $nextMeaningfulAfterUseIndex && $tokens[$nextMeaningfulAfterUseIndex]->isGivenKind(T_USE)) { - if (substr_count($nextToken->getContent(), "\n") < 1) { - $tokens[$insertIndex] = new Token([T_WHITESPACE, $newline.$indent.ltrim($nextToken->getContent())]); - } - } else { - $tokens[$insertIndex] = new Token([T_WHITESPACE, $newline.$indent.ltrim($nextToken->getContent())]); - } - } else { - $tokens->insertAt($insertIndex, new Token([T_WHITESPACE, $newline.$indent])); - ++$added; - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php deleted file mode 100644 index cbf64c94..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php +++ /dev/null @@ -1,92 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -trait Indentation -{ - private function getLineIndentation(Tokens $tokens, int $index): string - { - $newlineTokenIndex = $this->getPreviousNewlineTokenIndex($tokens, $index); - - if (null === $newlineTokenIndex) { - return ''; - } - - return $this->extractIndent($this->computeNewLineContent($tokens, $newlineTokenIndex)); - } - - private function extractIndent(string $content): string - { - if (Preg::match('/\R(\h*)[^\r\n]*$/D', $content, $matches)) { - return $matches[1]; - } - - return ''; - } - - private function getPreviousNewlineTokenIndex(Tokens $tokens, int $index): ?int - { - while ($index > 0) { - $index = $tokens->getPrevTokenOfKind($index, [[T_WHITESPACE], [T_INLINE_HTML]]); - - if (null === $index) { - break; - } - - if ($this->isNewLineToken($tokens, $index)) { - return $index; - } - } - - return null; - } - - private function computeNewLineContent(Tokens $tokens, int $index): string - { - $content = $tokens[$index]->getContent(); - - if (0 !== $index && $tokens[$index - 1]->equalsAny([[T_OPEN_TAG], [T_CLOSE_TAG]])) { - $content = Preg::replace('/\S/', '', $tokens[$index - 1]->getContent()).$content; - } - - return $content; - } - - private function isNewLineToken(Tokens $tokens, int $index): bool - { - $token = $tokens[$index]; - - if ( - $token->isGivenKind(T_OPEN_TAG) - && isset($tokens[$index + 1]) - && !$tokens[$index + 1]->isWhitespace() - && Preg::match('/\R/', $token->getContent()) - ) { - return true; - } - - if (!$tokens[$index]->isGivenKind([T_WHITESPACE, T_INLINE_HTML])) { - return false; - } - - return (bool) Preg::match('/\R/', $this->computeNewLineContent($tokens, $index)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php deleted file mode 100644 index 491aa89f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php +++ /dev/null @@ -1,253 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\DeprecatedFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @deprecated - * - * @author Sullivan Senechal - */ -final class ClassKeywordRemoveFixer extends AbstractFixer implements DeprecatedFixerInterface -{ - /** - * @var string[] - */ - private array $imports = []; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts `::class` keywords to FQCN strings.', - [ - new CodeSample( - 'isTokenKindFound(CT::T_CLASS_CONSTANT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $namespacesAnalyzer = new NamespacesAnalyzer(); - - $previousNamespaceScopeEndIndex = 0; - foreach ($namespacesAnalyzer->getDeclarations($tokens) as $declaration) { - $this->replaceClassKeywordsSection($tokens, '', $previousNamespaceScopeEndIndex, $declaration->getStartIndex()); - $this->replaceClassKeywordsSection($tokens, $declaration->getFullName(), $declaration->getStartIndex(), $declaration->getScopeEndIndex()); - $previousNamespaceScopeEndIndex = $declaration->getScopeEndIndex(); - } - - $this->replaceClassKeywordsSection($tokens, '', $previousNamespaceScopeEndIndex, $tokens->count() - 1); - } - - private function storeImports(Tokens $tokens, int $startIndex, int $endIndex): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $this->imports = []; - - /** @var int $index */ - foreach ($tokensAnalyzer->getImportUseIndexes() as $index) { - if ($index < $startIndex || $index > $endIndex) { - continue; - } - - $import = ''; - while ($index = $tokens->getNextMeaningfulToken($index)) { - if ($tokens[$index]->equalsAny([';', [CT::T_GROUP_IMPORT_BRACE_OPEN]]) || $tokens[$index]->isGivenKind(T_AS)) { - break; - } - - $import .= $tokens[$index]->getContent(); - } - - // Imports group (PHP 7 spec) - if ($tokens[$index]->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) { - $groupEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_GROUP_IMPORT_BRACE, $index); - $groupImports = array_map( - static function (string $import): string { - return trim($import); - }, - explode(',', $tokens->generatePartialCode($index + 1, $groupEndIndex - 1)) - ); - foreach ($groupImports as $groupImport) { - $groupImportParts = array_map(static function (string $import): string { - return trim($import); - }, explode(' as ', $groupImport)); - if (2 === \count($groupImportParts)) { - $this->imports[$groupImportParts[1]] = $import.$groupImportParts[0]; - } else { - $this->imports[] = $import.$groupImport; - } - } - } elseif ($tokens[$index]->isGivenKind(T_AS)) { - $aliasIndex = $tokens->getNextMeaningfulToken($index); - $alias = $tokens[$aliasIndex]->getContent(); - $this->imports[$alias] = $import; - } else { - $this->imports[] = $import; - } - } - } - - private function replaceClassKeywordsSection(Tokens $tokens, string $namespace, int $startIndex, int $endIndex): void - { - if ($endIndex - $startIndex < 3) { - return; - } - - $this->storeImports($tokens, $startIndex, $endIndex); - - $ctClassTokens = $tokens->findGivenKind(CT::T_CLASS_CONSTANT, $startIndex, $endIndex); - foreach (array_reverse(array_keys($ctClassTokens)) as $classIndex) { - $this->replaceClassKeyword($tokens, $namespace, $classIndex); - } - } - - private function replaceClassKeyword(Tokens $tokens, string $namespacePrefix, int $classIndex): void - { - $classEndIndex = $tokens->getPrevMeaningfulToken($classIndex); - $classEndIndex = $tokens->getPrevMeaningfulToken($classEndIndex); - - if (!$tokens[$classEndIndex]->isGivenKind(T_STRING)) { - return; - } - - if ($tokens[$classEndIndex]->equalsAny([[T_STRING, 'self'], [T_STATIC, 'static'], [T_STRING, 'parent']], false)) { - return; - } - - $classBeginIndex = $classEndIndex; - while (true) { - $prev = $tokens->getPrevMeaningfulToken($classBeginIndex); - if (!$tokens[$prev]->isGivenKind([T_NS_SEPARATOR, T_STRING])) { - break; - } - - $classBeginIndex = $prev; - } - - $classString = $tokens->generatePartialCode( - $tokens[$classBeginIndex]->isGivenKind(T_NS_SEPARATOR) - ? $tokens->getNextMeaningfulToken($classBeginIndex) - : $classBeginIndex, - $classEndIndex - ); - - $classImport = false; - if ($tokens[$classBeginIndex]->isGivenKind(T_NS_SEPARATOR)) { - $namespacePrefix = ''; - } else { - foreach ($this->imports as $alias => $import) { - if ($classString === $alias) { - $classImport = $import; - - break; - } - - $classStringArray = explode('\\', $classString); - $namespaceToTest = $classStringArray[0]; - - if (0 === strcmp($namespaceToTest, substr($import, -\strlen($namespaceToTest)))) { - $classImport = $import; - - break; - } - } - } - - for ($i = $classBeginIndex; $i <= $classIndex; ++$i) { - if (!$tokens[$i]->isComment() && !($tokens[$i]->isWhitespace() && str_contains($tokens[$i]->getContent(), "\n"))) { - $tokens->clearAt($i); - } - } - - $tokens->insertAt($classBeginIndex, new Token([ - T_CONSTANT_ENCAPSED_STRING, - "'".$this->makeClassFQN($namespacePrefix, $classImport, $classString)."'", - ])); - } - - /** - * @param false|string $classImport - */ - private function makeClassFQN(string $namespacePrefix, $classImport, string $classString): string - { - if (false === $classImport) { - return ('' !== $namespacePrefix ? ($namespacePrefix.'\\') : '').$classString; - } - - $classStringArray = explode('\\', $classString); - $classStringLength = \count($classStringArray); - $classImportArray = explode('\\', $classImport); - $classImportLength = \count($classImportArray); - - if (1 === $classStringLength) { - return $classImport; - } - - return implode('\\', array_merge( - \array_slice($classImportArray, 0, $classImportLength - $classStringLength + 1), - $classStringArray - )); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php deleted file mode 100644 index ce09c125..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php +++ /dev/null @@ -1,172 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class CombineConsecutiveIssetsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Using `isset($var) &&` multiple times should be done in one call.', - [new CodeSample("isAllTokenKindsFound([T_ISSET, T_BOOLEAN_AND]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokenCount = $tokens->count(); - - for ($index = 1; $index < $tokenCount; ++$index) { - if (!$tokens[$index]->isGivenKind(T_ISSET) - || !$tokens[$tokens->getPrevMeaningfulToken($index)]->equalsAny(['(', '{', ';', '=', [T_OPEN_TAG], [T_BOOLEAN_AND], [T_BOOLEAN_OR]])) { - continue; - } - - $issetInfo = $this->getIssetInfo($tokens, $index); - $issetCloseBraceIndex = end($issetInfo); // ')' token - $insertLocation = prev($issetInfo) + 1; // one index after the previous meaningful of ')' - - $booleanAndTokenIndex = $tokens->getNextMeaningfulToken($issetCloseBraceIndex); - - while ($tokens[$booleanAndTokenIndex]->isGivenKind(T_BOOLEAN_AND)) { - $issetIndex = $tokens->getNextMeaningfulToken($booleanAndTokenIndex); - if (!$tokens[$issetIndex]->isGivenKind(T_ISSET)) { - $index = $issetIndex; - - break; - } - - // fetch info about the 'isset' statement that we're merging - $nextIssetInfo = $this->getIssetInfo($tokens, $issetIndex); - - $nextMeaningfulTokenIndex = $tokens->getNextMeaningfulToken(end($nextIssetInfo)); - $nextMeaningfulToken = $tokens[$nextMeaningfulTokenIndex]; - - if (!$nextMeaningfulToken->equalsAny([')', '}', ';', [T_CLOSE_TAG], [T_BOOLEAN_AND], [T_BOOLEAN_OR]])) { - $index = $nextMeaningfulTokenIndex; - - break; - } - - // clone what we want to move, do not clone '(' and ')' of the 'isset' statement we're merging - $clones = $this->getTokenClones($tokens, \array_slice($nextIssetInfo, 1, -1)); - - // clean up now the tokens of the 'isset' statement we're merging - $this->clearTokens($tokens, array_merge($nextIssetInfo, [$issetIndex, $booleanAndTokenIndex])); - - // insert the tokens to create the new statement - array_unshift($clones, new Token(','), new Token([T_WHITESPACE, ' '])); - $tokens->insertAt($insertLocation, $clones); - - // correct some counts and offset based on # of tokens inserted - $numberOfTokensInserted = \count($clones); - $tokenCount += $numberOfTokensInserted; - $issetCloseBraceIndex += $numberOfTokensInserted; - $insertLocation += $numberOfTokensInserted; - - $booleanAndTokenIndex = $tokens->getNextMeaningfulToken($issetCloseBraceIndex); - } - } - } - - /** - * @param int[] $indices - */ - private function clearTokens(Tokens $tokens, array $indices): void - { - foreach ($indices as $index) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } - - /** - * @param int $index of T_ISSET - * - * @return int[] indices of meaningful tokens belonging to the isset statement - */ - private function getIssetInfo(Tokens $tokens, int $index): array - { - $openIndex = $tokens->getNextMeaningfulToken($index); - - $braceOpenCount = 1; - $meaningfulTokenIndices = [$openIndex]; - - for ($i = $openIndex + 1;; ++$i) { - if ($tokens[$i]->isWhitespace() || $tokens[$i]->isComment()) { - continue; - } - - $meaningfulTokenIndices[] = $i; - - if ($tokens[$i]->equals(')')) { - --$braceOpenCount; - if (0 === $braceOpenCount) { - break; - } - } elseif ($tokens[$i]->equals('(')) { - ++$braceOpenCount; - } - } - - return $meaningfulTokenIndices; - } - - /** - * @param int[] $indices - * - * @return Token[] - */ - private function getTokenClones(Tokens $tokens, array $indices): array - { - $clones = []; - - foreach ($indices as $i) { - $clones[] = clone $tokens[$i]; - } - - return $clones; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php deleted file mode 100644 index 6a595b69..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveUnsetsFixer.php +++ /dev/null @@ -1,188 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class CombineConsecutiveUnsetsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Calling `unset` on multiple items should be done in one call.', - [new CodeSample("isTokenKindFound(T_UNSET); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_UNSET)) { - continue; - } - - $previousUnsetCall = $this->getPreviousUnsetCall($tokens, $index); - if (\is_int($previousUnsetCall)) { - $index = $previousUnsetCall; - - continue; - } - - [$previousUnset, , $previousUnsetBraceEnd] = $previousUnsetCall; - - // Merge the tokens inside the 'unset' call into the previous one 'unset' call. - $tokensAddCount = $this->moveTokens( - $tokens, - $nextUnsetContentStart = $tokens->getNextTokenOfKind($index, ['(']), - $nextUnsetContentEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $nextUnsetContentStart), - $previousUnsetBraceEnd - 1 - ); - - if (!$tokens[$previousUnsetBraceEnd]->isWhitespace()) { - $tokens->insertAt($previousUnsetBraceEnd, new Token([T_WHITESPACE, ' '])); - ++$tokensAddCount; - } - - $tokens->insertAt($previousUnsetBraceEnd, new Token(',')); - ++$tokensAddCount; - - // Remove 'unset', '(', ')' and (possibly) ';' from the merged 'unset' call. - $this->clearOffsetTokens($tokens, $tokensAddCount, [$index, $nextUnsetContentStart, $nextUnsetContentEnd]); - - $nextUnsetSemicolon = $tokens->getNextMeaningfulToken($nextUnsetContentEnd); - if (null !== $nextUnsetSemicolon && $tokens[$nextUnsetSemicolon]->equals(';')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($nextUnsetSemicolon); - } - - $index = $previousUnset + 1; - } - } - - /** - * @param int[] $indices - */ - private function clearOffsetTokens(Tokens $tokens, int $offset, array $indices): void - { - foreach ($indices as $index) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index + $offset); - } - } - - /** - * Find a previous call to unset directly before the index. - * - * Returns an array with - * * unset index - * * opening brace index - * * closing brace index - * * end semicolon index - * - * Or the index to where the method looked for a call. - * - * @return int|int[] - */ - private function getPreviousUnsetCall(Tokens $tokens, int $index) - { - $previousUnsetSemicolon = $tokens->getPrevMeaningfulToken($index); - if (null === $previousUnsetSemicolon) { - return $index; - } - - if (!$tokens[$previousUnsetSemicolon]->equals(';')) { - return $previousUnsetSemicolon; - } - - $previousUnsetBraceEnd = $tokens->getPrevMeaningfulToken($previousUnsetSemicolon); - if (null === $previousUnsetBraceEnd) { - return $index; - } - - if (!$tokens[$previousUnsetBraceEnd]->equals(')')) { - return $previousUnsetBraceEnd; - } - - $previousUnsetBraceStart = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $previousUnsetBraceEnd); - $previousUnset = $tokens->getPrevMeaningfulToken($previousUnsetBraceStart); - if (null === $previousUnset) { - return $index; - } - - if (!$tokens[$previousUnset]->isGivenKind(T_UNSET)) { - return $previousUnset; - } - - return [ - $previousUnset, - $previousUnsetBraceStart, - $previousUnsetBraceEnd, - $previousUnsetSemicolon, - ]; - } - - /** - * @param int $start Index previous of the first token to move - * @param int $end Index of the last token to move - * @param int $to Upper boundary index - * - * @return int Number of tokens inserted - */ - private function moveTokens(Tokens $tokens, int $start, int $end, int $to): int - { - $added = 0; - for ($i = $start + 1; $i < $end; $i += 2) { - if ($tokens[$i]->isWhitespace() && $tokens[$to + 1]->isWhitespace()) { - $tokens[$to + 1] = new Token([T_WHITESPACE, $tokens[$to + 1]->getContent().$tokens[$i]->getContent()]); - } else { - $tokens->insertAt(++$to, clone $tokens[$i]); - ++$end; - ++$added; - } - - $tokens->clearAt($i + 1); - } - - return $added; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php deleted file mode 100644 index 8e0d4da9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php +++ /dev/null @@ -1,148 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class DeclareEqualNormalizeFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var string - */ - private $callback; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->callback = 'none' === $this->configuration['space'] ? 'removeWhitespaceAroundToken' : 'ensureWhitespaceAroundToken'; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Equal sign in declare statement should be surrounded by spaces or not following configuration.', - [ - new CodeSample(" 'single']), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after DeclareStrictTypesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DECLARE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $callback = $this->callback; - for ($index = 0, $count = $tokens->count(); $index < $count - 6; ++$index) { - if (!$tokens[$index]->isGivenKind(T_DECLARE)) { - continue; - } - - $openParenthesisIndex = $tokens->getNextMeaningfulToken($index); - $closeParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesisIndex); - - for ($i = $closeParenthesisIndex; $i > $openParenthesisIndex; --$i) { - if ($tokens[$i]->equals('=')) { - $this->{$callback}($tokens, $i); - } - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('space', 'Spacing to apply around the equal sign.')) - ->setAllowedValues(['single', 'none']) - ->setDefault('none') - ->getOption(), - ]); - } - - /** - * @param int $index of `=` token - */ - private function ensureWhitespaceAroundToken(Tokens $tokens, int $index): void - { - if ($tokens[$index + 1]->isWhitespace()) { - if (' ' !== $tokens[$index + 1]->getContent()) { - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } - } else { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - - if ($tokens[$index - 1]->isWhitespace()) { - if (' ' !== $tokens[$index - 1]->getContent() && !$tokens[$tokens->getPrevNonWhitespace($index - 1)]->isComment()) { - $tokens[$index - 1] = new Token([T_WHITESPACE, ' ']); - } - } else { - $tokens->insertAt($index, new Token([T_WHITESPACE, ' '])); - } - } - - /** - * @param int $index of `=` token - */ - private function removeWhitespaceAroundToken(Tokens $tokens, int $index): void - { - if (!$tokens[$tokens->getPrevNonWhitespace($index)]->isComment()) { - $tokens->removeLeadingWhitespace($index); - } - - $tokens->removeTrailingWhitespace($index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php deleted file mode 100644 index e3879731..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DeclareParenthesesFixer.php +++ /dev/null @@ -1,56 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -final class DeclareParenthesesFixer extends AbstractFixer -{ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must not be spaces around `declare` statement parentheses.', - [new CodeSample("isTokenKindFound(T_DECLARE); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_DECLARE)) { - continue; - } - - $tokens->removeTrailingWhitespace($index); - - $startParenthesisIndex = $tokens->getNextTokenOfKind($index, ['(']); - $tokens->removeTrailingWhitespace($startParenthesisIndex); - - $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startParenthesisIndex); - $tokens->removeLeadingWhitespace($endParenthesisIndex); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php deleted file mode 100644 index 112101a3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/DirConstantFixer.php +++ /dev/null @@ -1,138 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Vladimir Reznichenko - */ -final class DirConstantFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replaces `dirname(__FILE__)` expression with equivalent `__DIR__` constant.', - [new CodeSample("isAllTokenKindsFound([T_STRING, T_FILE]); - } - - /** - * {@inheritdoc} - * - * Must run before CombineNestedDirnameFixer. - */ - public function getPriority(): int - { - return 40; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $currIndex = 0; - - do { - $boundaries = $this->find('dirname', $tokens, $currIndex, $tokens->count() - 1); - if (null === $boundaries) { - return; - } - - [$functionNameIndex, $openParenthesis, $closeParenthesis] = $boundaries; - - // analysing cursor shift, so nested expressions kept processed - $currIndex = $openParenthesis; - - // ensure __FILE__ is in between (...) - - $fileCandidateRightIndex = $tokens->getPrevMeaningfulToken($closeParenthesis); - $trailingCommaIndex = null; - - if ($tokens[$fileCandidateRightIndex]->equals(',')) { - $trailingCommaIndex = $fileCandidateRightIndex; - $fileCandidateRightIndex = $tokens->getPrevMeaningfulToken($fileCandidateRightIndex); - } - - $fileCandidateRight = $tokens[$fileCandidateRightIndex]; - - if (!$fileCandidateRight->isGivenKind(T_FILE)) { - continue; - } - - $fileCandidateLeftIndex = $tokens->getNextMeaningfulToken($openParenthesis); - $fileCandidateLeft = $tokens[$fileCandidateLeftIndex]; - - if (!$fileCandidateLeft->isGivenKind(T_FILE)) { - continue; - } - - // get rid of root namespace when it used - $namespaceCandidateIndex = $tokens->getPrevMeaningfulToken($functionNameIndex); - $namespaceCandidate = $tokens[$namespaceCandidateIndex]; - - if ($namespaceCandidate->isGivenKind(T_NS_SEPARATOR)) { - $tokens->removeTrailingWhitespace($namespaceCandidateIndex); - $tokens->clearAt($namespaceCandidateIndex); - } - - if (null !== $trailingCommaIndex) { - if (!$tokens[$tokens->getNextNonWhitespace($trailingCommaIndex)]->isComment()) { - $tokens->removeTrailingWhitespace($trailingCommaIndex); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($trailingCommaIndex); - } - - // closing parenthesis removed with leading spaces - if (!$tokens[$tokens->getNextNonWhitespace($closeParenthesis)]->isComment()) { - $tokens->removeLeadingWhitespace($closeParenthesis); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($closeParenthesis); - - // opening parenthesis removed with trailing and leading spaces - if (!$tokens[$tokens->getNextNonWhitespace($openParenthesis)]->isComment()) { - $tokens->removeLeadingWhitespace($openParenthesis); - } - - $tokens->removeTrailingWhitespace($openParenthesis); - $tokens->clearTokenAndMergeSurroundingWhitespace($openParenthesis); - - // replace constant and remove function name - $tokens[$fileCandidateLeftIndex] = new Token([T_DIR, '__DIR__']); - $tokens->clearTokenAndMergeSurroundingWhitespace($functionNameIndex); - } while (null !== $currIndex); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php deleted file mode 100644 index a3b69396..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ErrorSuppressionFixer.php +++ /dev/null @@ -1,186 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Jules Pietri - * @author Kuba Werłos - */ -final class ErrorSuppressionFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const OPTION_MUTE_DEPRECATION_ERROR = 'mute_deprecation_error'; - - /** - * @internal - */ - public const OPTION_NOISE_REMAINING_USAGES = 'noise_remaining_usages'; - - /** - * @internal - */ - public const OPTION_NOISE_REMAINING_USAGES_EXCLUDE = 'noise_remaining_usages_exclude'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Error control operator should be added to deprecation notices and/or removed from other cases.', - [ - new CodeSample(" true] - ), - new CodeSample( - " true, - self::OPTION_NOISE_REMAINING_USAGES_EXCLUDE => ['unlink'], - ] - ), - ], - null, - 'Risky because adding/removing `@` might cause changes to code behaviour or if `trigger_error` function is overridden.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder(self::OPTION_MUTE_DEPRECATION_ERROR, 'Whether to add `@` in deprecation notices.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder(self::OPTION_NOISE_REMAINING_USAGES, 'Whether to remove `@` in remaining usages.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder(self::OPTION_NOISE_REMAINING_USAGES_EXCLUDE, 'List of global functions to exclude from removing `@`')) - ->setAllowedTypes(['array']) - ->setDefault([]) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $excludedFunctions = array_map(static function (string $function): string { - return strtolower($function); - }, $this->configuration[self::OPTION_NOISE_REMAINING_USAGES_EXCLUDE]); - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (true === $this->configuration[self::OPTION_NOISE_REMAINING_USAGES] && $token->equals('@')) { - $tokens->clearAt($index); - - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $functionIndex = $index; - $startIndex = $index; - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $startIndex = $prevIndex; - $prevIndex = $tokens->getPrevMeaningfulToken($startIndex); - } - - $index = $prevIndex; - - if ($this->isDeprecationErrorCall($tokens, $functionIndex)) { - if (false === $this->configuration[self::OPTION_MUTE_DEPRECATION_ERROR]) { - continue; - } - - if ($tokens[$prevIndex]->equals('@')) { - continue; - } - - $tokens->insertAt($startIndex, new Token('@')); - - continue; - } - - if (!$tokens[$prevIndex]->equals('@')) { - continue; - } - - if (true === $this->configuration[self::OPTION_NOISE_REMAINING_USAGES] && !\in_array($tokens[$functionIndex]->getContent(), $excludedFunctions, true)) { - $tokens->clearAt($index); - } - } - } - - private function isDeprecationErrorCall(Tokens $tokens, int $index): bool - { - if ('trigger_error' !== strtolower($tokens[$index]->getContent())) { - return false; - } - - $endBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $tokens->getNextTokenOfKind($index, [[T_STRING], '('])); - $prevIndex = $tokens->getPrevMeaningfulToken($endBraceIndex); - - if ($tokens[$prevIndex]->equals(',')) { - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - } - - return $tokens[$prevIndex]->equals([T_STRING, 'E_USER_DEPRECATED']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php deleted file mode 100644 index 25925fe1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ExplicitIndirectVariableFixer.php +++ /dev/null @@ -1,91 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class ExplicitIndirectVariableFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Add curly braces to indirect variables to make them clear to understand. Requires PHP >= 7.0.', - [ - new CodeSample( - <<<'EOT' -$bar['baz']; -echo $foo->$callback($baz); - -EOT - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_VARIABLE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index > 1; --$index) { - $token = $tokens[$index]; - if (!$token->isGivenKind(T_VARIABLE)) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - if (!$prevToken->equals('$') && !$prevToken->isObjectOperator()) { - continue; - } - - $openingBrace = CT::T_DYNAMIC_VAR_BRACE_OPEN; - $closingBrace = CT::T_DYNAMIC_VAR_BRACE_CLOSE; - if ($prevToken->isObjectOperator()) { - $openingBrace = CT::T_DYNAMIC_PROP_BRACE_OPEN; - $closingBrace = CT::T_DYNAMIC_PROP_BRACE_CLOSE; - } - - $tokens->overrideRange($index, $index, [ - new Token([$openingBrace, '{']), - new Token([T_VARIABLE, $token->getContent()]), - new Token([$closingBrace, '}']), - ]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php deleted file mode 100644 index 42d15028..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/FunctionToConstantFixer.php +++ /dev/null @@ -1,301 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class FunctionToConstantFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private static $availableFunctions; - - /** - * @var array - */ - private array $functionsFixMap; - - public function __construct() - { - if (null === self::$availableFunctions) { - self::$availableFunctions = [ - 'get_called_class' => [ - new Token([T_STATIC, 'static']), - new Token([T_DOUBLE_COLON, '::']), - new Token([CT::T_CLASS_CONSTANT, 'class']), - ], - 'get_class' => [new Token([T_CLASS_C, '__CLASS__'])], - 'get_class_this' => [ - new Token([T_STATIC, 'static']), - new Token([T_DOUBLE_COLON, '::']), - new Token([CT::T_CLASS_CONSTANT, 'class']), - ], - 'php_sapi_name' => [new Token([T_STRING, 'PHP_SAPI'])], - 'phpversion' => [new Token([T_STRING, 'PHP_VERSION'])], - 'pi' => [new Token([T_STRING, 'M_PI'])], - ]; - } - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->functionsFixMap = []; - - foreach ($this->configuration['functions'] as $key) { - $this->functionsFixMap[$key] = self::$availableFunctions[$key]; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace core functions calls returning constants with the constants.', - [ - new CodeSample( - " ['get_called_class', 'get_class_this', 'phpversion']] - ), - ], - null, - 'Risky when any of the configured functions to replace are overridden.' - ); - } - - /** - * {@inheritdoc} - * - * Must run before NativeFunctionCasingFixer, NoExtraBlankLinesFixer, NoSinglelineWhitespaceBeforeSemicolonsFixer, NoTrailingWhitespaceFixer, NoWhitespaceInBlankLineFixer, SelfStaticAccessorFixer. - * Must run after NoSpacesAfterFunctionNameFixer, NoSpacesInsideParenthesisFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionAnalyzer = new FunctionsAnalyzer(); - - for ($index = $tokens->count() - 4; $index > 0; --$index) { - $candidate = $this->getReplaceCandidate($tokens, $functionAnalyzer, $index); - if (null === $candidate) { - continue; - } - - $this->fixFunctionCallToConstant( - $tokens, - $index, - $candidate[0], // brace open - $candidate[1], // brace close - $candidate[2] // replacement - ); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $functionNames = array_keys(self::$availableFunctions); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('functions', 'List of function names to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($functionNames)]) - ->setDefault([ - 'get_called_class', - 'get_class', - 'get_class_this', - 'php_sapi_name', - 'phpversion', - 'pi', - ]) - ->getOption(), - ]); - } - - /** - * @param Token[] $replacements - */ - private function fixFunctionCallToConstant(Tokens $tokens, int $index, int $braceOpenIndex, int $braceCloseIndex, array $replacements): void - { - for ($i = $braceCloseIndex; $i >= $braceOpenIndex; --$i) { - if ($tokens[$i]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - - if ($replacements[0]->isGivenKind([T_CLASS_C, T_STATIC])) { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - if ($prevToken->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearAt($prevIndex); - } - } - - $tokens->clearAt($index); - $tokens->insertAt($index, $replacements); - } - - private function getReplaceCandidate( - Tokens $tokens, - FunctionsAnalyzer $functionAnalyzer, - int $index - ): ?array { - if (!$tokens[$index]->isGivenKind(T_STRING)) { - return null; - } - - $lowerContent = strtolower($tokens[$index]->getContent()); - - if ('get_class' === $lowerContent) { - return $this->fixGetClassCall($tokens, $functionAnalyzer, $index); - } - - if (!isset($this->functionsFixMap[$lowerContent])) { - return null; - } - - if (!$functionAnalyzer->isGlobalFunctionCall($tokens, $index)) { - return null; - } - - // test if function call without parameters - $braceOpenIndex = $tokens->getNextMeaningfulToken($index); - if (!$tokens[$braceOpenIndex]->equals('(')) { - return null; - } - - $braceCloseIndex = $tokens->getNextMeaningfulToken($braceOpenIndex); - if (!$tokens[$braceCloseIndex]->equals(')')) { - return null; - } - - return $this->getReplacementTokenClones($lowerContent, $braceOpenIndex, $braceCloseIndex); - } - - private function fixGetClassCall( - Tokens $tokens, - FunctionsAnalyzer $functionAnalyzer, - int $index - ): ?array { - if (!isset($this->functionsFixMap['get_class']) && !isset($this->functionsFixMap['get_class_this'])) { - return null; - } - - if (!$functionAnalyzer->isGlobalFunctionCall($tokens, $index)) { - return null; - } - - $braceOpenIndex = $tokens->getNextMeaningfulToken($index); - $braceCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $braceOpenIndex); - - if ($braceCloseIndex === $tokens->getNextMeaningfulToken($braceOpenIndex)) { // no arguments passed - if (isset($this->functionsFixMap['get_class'])) { - return $this->getReplacementTokenClones('get_class', $braceOpenIndex, $braceCloseIndex); - } - } elseif (isset($this->functionsFixMap['get_class_this'])) { - $isThis = false; - - for ($i = $braceOpenIndex + 1; $i < $braceCloseIndex; ++$i) { - if ($tokens[$i]->equalsAny([[T_WHITESPACE], [T_COMMENT], [T_DOC_COMMENT], ')'])) { - continue; - } - - if ($tokens[$i]->isGivenKind(T_VARIABLE) && '$this' === strtolower($tokens[$i]->getContent())) { - $isThis = true; - - continue; - } - - if (false === $isThis && $tokens[$i]->equals('(')) { - continue; - } - - $isThis = false; - - break; - } - - if ($isThis) { - return $this->getReplacementTokenClones('get_class_this', $braceOpenIndex, $braceCloseIndex); - } - } - - return null; - } - - private function getReplacementTokenClones(string $lowerContent, int $braceOpenIndex, int $braceCloseIndex): array - { - $clones = []; - foreach ($this->functionsFixMap[$lowerContent] as $token) { - $clones[] = clone $token; - } - - return [ - $braceOpenIndex, - $braceCloseIndex, - $clones, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php deleted file mode 100644 index 746bc268..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.php +++ /dev/null @@ -1,170 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author John Paul E. Balandan, CPA - */ -final class GetClassToClassKeywordFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace `get_class` calls on object variables with class keyword syntax.', - [ - new VersionSpecificCodeSample( - "= 80000 && $tokens->isAllTokenKindsFound([T_STRING, T_VARIABLE]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - $indicesToClear = []; - $tokenSlices = []; - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if (!$tokens[$index]->equals([T_STRING, 'get_class'], false)) { - continue; - } - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - continue; - } - - $braceOpenIndex = $tokens->getNextMeaningfulToken($index); - $braceCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $braceOpenIndex); - - if ($braceCloseIndex === $tokens->getNextMeaningfulToken($braceOpenIndex)) { - continue; // get_class with no arguments - } - - $meaningfulTokensCount = 0; - $variableTokensIndices = []; - - for ($i = $braceOpenIndex + 1; $i < $braceCloseIndex; ++$i) { - if (!$tokens[$i]->equalsAny([[T_WHITESPACE], [T_COMMENT], [T_DOC_COMMENT], '(', ')'])) { - ++$meaningfulTokensCount; - } - - if (!$tokens[$i]->isGivenKind(T_VARIABLE)) { - continue; - } - - if ('$this' === strtolower($tokens[$i]->getContent())) { - continue 2; // get_class($this) - } - - $variableTokensIndices[] = $i; - } - - if ($meaningfulTokensCount > 1 || 1 !== \count($variableTokensIndices)) { - continue; // argument contains more logic, or more arguments, or no variable argument - } - - $indicesToClear[$index] = [$braceOpenIndex, current($variableTokensIndices), $braceCloseIndex]; - } - - foreach ($indicesToClear as $index => $items) { - $tokenSlices[$index] = $this->getReplacementTokenSlices($tokens, $items[1]); - $this->clearGetClassCall($tokens, $index, $items[0], $items[2]); - } - - $tokens->insertSlices($tokenSlices); - } - - /** - * @return list - */ - private function getReplacementTokenSlices(Tokens $tokens, int $variableIndex): array - { - return [ - new Token([T_VARIABLE, $tokens[$variableIndex]->getContent()]), - new Token([T_DOUBLE_COLON, '::']), - new Token([CT::T_CLASS_CONSTANT, 'class']), - ]; - } - - private function clearGetClassCall(Tokens $tokens, int $index, int $braceOpenIndex, int $braceCloseIndex): void - { - for ($i = $braceOpenIndex; $i <= $braceCloseIndex; ++$i) { - if ($tokens[$i]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->clearAt($prevIndex); - } - - $tokens->clearAt($index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php deleted file mode 100644 index 673c558b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/IsNullFixer.php +++ /dev/null @@ -1,181 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Vladimir Reznichenko - */ -final class IsNullFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replaces `is_null($var)` expression with `null === $var`.', - [ - new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $sequenceNeeded = [[T_STRING, 'is_null'], '(']; - $functionsAnalyzer = new FunctionsAnalyzer(); - $currIndex = 0; - - while (true) { - // recalculate "end" because we might have added tokens in previous iteration - $matches = $tokens->findSequence($sequenceNeeded, $currIndex, $tokens->count() - 1, false); - - // stop looping if didn't find any new matches - if (null === $matches) { - break; - } - - // 0 and 1 accordingly are "is_null", "(" tokens - $matches = array_keys($matches); - - // move the cursor just after the sequence - [$isNullIndex, $currIndex] = $matches; - - if (!$functionsAnalyzer->isGlobalFunctionCall($tokens, $matches[0])) { - continue; - } - - $next = $tokens->getNextMeaningfulToken($currIndex); - - if ($tokens[$next]->equals(')')) { - continue; - } - - $prevTokenIndex = $tokens->getPrevMeaningfulToken($matches[0]); - - // handle function references with namespaces - if ($tokens[$prevTokenIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens->removeTrailingWhitespace($prevTokenIndex); - $tokens->clearAt($prevTokenIndex); - - $prevTokenIndex = $tokens->getPrevMeaningfulToken($prevTokenIndex); - } - - // check if inversion being used, text comparison is due to not existing constant - $isInvertedNullCheck = false; - - if ($tokens[$prevTokenIndex]->equals('!')) { - $isInvertedNullCheck = true; - - // get rid of inverting for proper transformations - $tokens->removeTrailingWhitespace($prevTokenIndex); - $tokens->clearAt($prevTokenIndex); - } - - // before getting rind of `()` around a parameter, ensure it's not assignment/ternary invariant - $referenceEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $matches[1]); - $isContainingDangerousConstructs = false; - - for ($paramTokenIndex = $matches[1]; $paramTokenIndex <= $referenceEnd; ++$paramTokenIndex) { - if (\in_array($tokens[$paramTokenIndex]->getContent(), ['?', '?:', '=', '??'], true)) { - $isContainingDangerousConstructs = true; - - break; - } - } - - // edge cases: is_null() followed/preceded by ==, ===, !=, !==, <>, (int-or-other-casting) - $parentLeftToken = $tokens[$tokens->getPrevMeaningfulToken($isNullIndex)]; - $parentRightToken = $tokens[$tokens->getNextMeaningfulToken($referenceEnd)]; - $parentOperations = [T_IS_EQUAL, T_IS_NOT_EQUAL, T_IS_IDENTICAL, T_IS_NOT_IDENTICAL]; - $wrapIntoParentheses = $parentLeftToken->isCast() || $parentLeftToken->isGivenKind($parentOperations) || $parentRightToken->isGivenKind($parentOperations); - - // possible trailing comma removed - $prevIndex = $tokens->getPrevMeaningfulToken($referenceEnd); - - if ($tokens[$prevIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($prevIndex); - } - - if (!$isContainingDangerousConstructs) { - // closing parenthesis removed with leading spaces - $tokens->removeLeadingWhitespace($referenceEnd); - $tokens->clearAt($referenceEnd); - - // opening parenthesis removed with trailing spaces - $tokens->removeLeadingWhitespace($matches[1]); - $tokens->removeTrailingWhitespace($matches[1]); - $tokens->clearAt($matches[1]); - } - - // sequence which we'll use as a replacement - $replacement = [ - new Token([T_STRING, 'null']), - new Token([T_WHITESPACE, ' ']), - new Token($isInvertedNullCheck ? [T_IS_NOT_IDENTICAL, '!=='] : [T_IS_IDENTICAL, '===']), - new Token([T_WHITESPACE, ' ']), - ]; - - if ($wrapIntoParentheses) { - array_unshift($replacement, new Token('(')); - $tokens->insertAt($referenceEnd + 1, new Token(')')); - } - - $tokens->overrideRange($isNullIndex, $isNullIndex, $replacement); - - // nested is_null calls support - $currIndex = $isNullIndex; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php deleted file mode 100644 index af7f65d6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php +++ /dev/null @@ -1,229 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gert de Pagter - */ -final class NoUnsetOnPropertyFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Properties should be set to `null` instead of using `unset`.', - [new CodeSample("a);\n")], - null, - 'Risky when relying on attributes to be removed using `unset` rather than be set to `null`.'. - ' Changing variables to `null` instead of unsetting means these still show up when looping over class variables'. - ' and reference properties remain unbroken.'. - ' With PHP 7.4, this rule might introduce `null` assignments to properties whose type declaration does not allow it.' - ); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_UNSET) - && $tokens->isAnyTokenKindsFound([T_OBJECT_OPERATOR, T_PAAMAYIM_NEKUDOTAYIM]); - } - - /** - * {@inheritdoc} - * - * Must run before CombineConsecutiveUnsetsFixer. - */ - public function getPriority(): int - { - return 25; - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_UNSET)) { - continue; - } - - $unsetsInfo = $this->getUnsetsInfo($tokens, $index); - - if (!$this->isAnyUnsetToTransform($unsetsInfo)) { - continue; - } - - $isLastUnset = true; // "last" as we reverse the array below - - foreach (array_reverse($unsetsInfo) as $unsetInfo) { - $this->updateTokens($tokens, $unsetInfo, $isLastUnset); - $isLastUnset = false; - } - } - } - - /** - * @return array> - */ - private function getUnsetsInfo(Tokens $tokens, int $index): array - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - $unsetStart = $tokens->getNextTokenOfKind($index, ['(']); - $unsetEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $unsetStart); - $isFirst = true; - $unsets = []; - - foreach ($argumentsAnalyzer->getArguments($tokens, $unsetStart, $unsetEnd) as $startIndex => $endIndex) { - $startIndex = $tokens->getNextMeaningfulToken($startIndex - 1); - $endIndex = $tokens->getPrevMeaningfulToken($endIndex + 1); - $unsets[] = [ - 'startIndex' => $startIndex, - 'endIndex' => $endIndex, - 'isToTransform' => $this->isProperty($tokens, $startIndex, $endIndex), - 'isFirst' => $isFirst, - ]; - $isFirst = false; - } - - return $unsets; - } - - private function isProperty(Tokens $tokens, int $index, int $endIndex): bool - { - if ($tokens[$index]->isGivenKind(T_VARIABLE)) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if (null === $nextIndex || !$tokens[$nextIndex]->isGivenKind(T_OBJECT_OPERATOR)) { - return false; - } - - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - $nextNextIndex = $tokens->getNextMeaningfulToken($nextIndex); - - if (null !== $nextNextIndex && $nextNextIndex < $endIndex) { - return false; - } - - return null !== $nextIndex && $tokens[$nextIndex]->isGivenKind(T_STRING); - } - - if ($tokens[$index]->isGivenKind([T_NS_SEPARATOR, T_STRING])) { - $nextIndex = $tokens->getTokenNotOfKindsSibling($index, 1, [T_DOUBLE_COLON, T_NS_SEPARATOR, T_STRING]); - $nextNextIndex = $tokens->getNextMeaningfulToken($nextIndex); - - if (null !== $nextNextIndex && $nextNextIndex < $endIndex) { - return false; - } - - return null !== $nextIndex && $tokens[$nextIndex]->isGivenKind(T_VARIABLE); - } - - return false; - } - - /** - * @param array> $unsetsInfo - */ - private function isAnyUnsetToTransform(array $unsetsInfo): bool - { - foreach ($unsetsInfo as $unsetInfo) { - if ($unsetInfo['isToTransform']) { - return true; - } - } - - return false; - } - - /** - * @param array $unsetInfo - */ - private function updateTokens(Tokens $tokens, array $unsetInfo, bool $isLastUnset): void - { - // if entry is first and to be transformed we remove leading "unset(" - if ($unsetInfo['isFirst'] && $unsetInfo['isToTransform']) { - $braceIndex = $tokens->getPrevTokenOfKind($unsetInfo['startIndex'], ['(']); - $unsetIndex = $tokens->getPrevTokenOfKind($braceIndex, [[T_UNSET]]); - $tokens->clearTokenAndMergeSurroundingWhitespace($braceIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($unsetIndex); - } - - // if entry is last and to be transformed we remove trailing ")" - if ($isLastUnset && $unsetInfo['isToTransform']) { - $braceIndex = $tokens->getNextTokenOfKind($unsetInfo['endIndex'], [')']); - $previousIndex = $tokens->getPrevMeaningfulToken($braceIndex); - if ($tokens[$previousIndex]->equals(',')) { - $tokens->clearTokenAndMergeSurroundingWhitespace($previousIndex); // trailing ',' in function call (PHP 7.3) - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($braceIndex); - } - - // if entry is not last we replace comma with semicolon (last entry already has semicolon - from original unset) - if (!$isLastUnset) { - $commaIndex = $tokens->getNextTokenOfKind($unsetInfo['endIndex'], [',']); - $tokens[$commaIndex] = new Token(';'); - } - - // if entry is to be unset and is not last we add trailing ")" - if (!$unsetInfo['isToTransform'] && !$isLastUnset) { - $tokens->insertAt($unsetInfo['endIndex'] + 1, new Token(')')); - } - - // if entry is to be unset and is not first we add leading "unset(" - if (!$unsetInfo['isToTransform'] && !$unsetInfo['isFirst']) { - $tokens->insertAt( - $unsetInfo['startIndex'], - [ - new Token([T_UNSET, 'unset']), - new Token('('), - ] - ); - } - - // and finally - // if entry is to be transformed we add trailing " = null" - if ($unsetInfo['isToTransform']) { - $tokens->insertAt( - $unsetInfo['endIndex'] + 1, - [ - new Token([T_WHITESPACE, ' ']), - new Token('='), - new Token([T_WHITESPACE, ' ']), - new Token([T_STRING, 'null']), - ] - ); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php deleted file mode 100644 index d7b43e31..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php +++ /dev/null @@ -1,358 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\LanguageConstruct; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Andreas Möller - */ -final class SingleSpaceAfterConstructFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var array - */ - private static array $tokenMap = [ - 'abstract' => T_ABSTRACT, - 'as' => T_AS, - 'attribute' => CT::T_ATTRIBUTE_CLOSE, - 'break' => T_BREAK, - 'case' => T_CASE, - 'catch' => T_CATCH, - 'class' => T_CLASS, - 'clone' => T_CLONE, - 'comment' => T_COMMENT, - 'const' => T_CONST, - 'const_import' => CT::T_CONST_IMPORT, - 'continue' => T_CONTINUE, - 'do' => T_DO, - 'echo' => T_ECHO, - 'else' => T_ELSE, - 'elseif' => T_ELSEIF, - 'enum' => null, - 'extends' => T_EXTENDS, - 'final' => T_FINAL, - 'finally' => T_FINALLY, - 'for' => T_FOR, - 'foreach' => T_FOREACH, - 'function' => T_FUNCTION, - 'function_import' => CT::T_FUNCTION_IMPORT, - 'global' => T_GLOBAL, - 'goto' => T_GOTO, - 'if' => T_IF, - 'implements' => T_IMPLEMENTS, - 'include' => T_INCLUDE, - 'include_once' => T_INCLUDE_ONCE, - 'instanceof' => T_INSTANCEOF, - 'insteadof' => T_INSTEADOF, - 'interface' => T_INTERFACE, - 'match' => null, - 'named_argument' => CT::T_NAMED_ARGUMENT_COLON, - 'namespace' => T_NAMESPACE, - 'new' => T_NEW, - 'open_tag_with_echo' => T_OPEN_TAG_WITH_ECHO, - 'php_doc' => T_DOC_COMMENT, - 'php_open' => T_OPEN_TAG, - 'print' => T_PRINT, - 'private' => T_PRIVATE, - 'protected' => T_PROTECTED, - 'public' => T_PUBLIC, - 'readonly' => null, - 'require' => T_REQUIRE, - 'require_once' => T_REQUIRE_ONCE, - 'return' => T_RETURN, - 'static' => T_STATIC, - 'switch' => T_SWITCH, - 'throw' => T_THROW, - 'trait' => T_TRAIT, - 'try' => T_TRY, - 'type_colon' => CT::T_TYPE_COLON, - 'use' => T_USE, - 'use_lambda' => CT::T_USE_LAMBDA, - 'use_trait' => CT::T_USE_TRAIT, - 'var' => T_VAR, - 'while' => T_WHILE, - 'yield' => T_YIELD, - 'yield_from' => T_YIELD_FROM, - ]; - - /** - * @var array - */ - private array $fixTokenMap = []; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if (\defined('T_MATCH')) { // @TODO: drop condition when PHP 8.0+ is required - self::$tokenMap['match'] = T_MATCH; - } - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - self::$tokenMap['readonly'] = T_READONLY; - } - - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - self::$tokenMap['enum'] = T_ENUM; - } - - $this->fixTokenMap = []; - - foreach ($this->configuration['constructs'] as $key) { - if (null !== self::$tokenMap[$key]) { - $this->fixTokenMap[$key] = self::$tokenMap[$key]; - } - } - - if (isset($this->fixTokenMap['public'])) { - $this->fixTokenMap['constructor_public'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC; - } - - if (isset($this->fixTokenMap['protected'])) { - $this->fixTokenMap['constructor_protected'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED; - } - - if (isset($this->fixTokenMap['private'])) { - $this->fixTokenMap['constructor_private'] = CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Ensures a single space after language constructs.', - [ - new CodeSample( - ' [ - 'echo', - ], - ] - ), - new CodeSample( - ' [ - 'yield_from', - ], - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BracesFixer, FunctionDeclarationFixer. - * Must run after ModernizeStrposFixer. - */ - public function getPriority(): int - { - return 36; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(array_values($this->fixTokenMap)) && !$tokens->hasAlternativeSyntax(); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokenKinds = array_values($this->fixTokenMap); - - for ($index = $tokens->count() - 2; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind($tokenKinds)) { - continue; - } - - $whitespaceTokenIndex = $index + 1; - - if ($tokens[$whitespaceTokenIndex]->equalsAny([',', ';', ')', [CT::T_ARRAY_SQUARE_BRACE_CLOSE], [CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE]])) { - continue; - } - - if ( - $token->isGivenKind(T_STATIC) - && !$tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind([T_FUNCTION, T_VARIABLE]) - ) { - continue; - } - - if ($token->isGivenKind(T_OPEN_TAG)) { - if ($tokens[$whitespaceTokenIndex]->equals([T_WHITESPACE]) && !str_contains($tokens[$whitespaceTokenIndex]->getContent(), "\n") && !str_contains($token->getContent(), "\n")) { - $tokens->clearAt($whitespaceTokenIndex); - } - - continue; - } - - if ($token->isGivenKind(T_CLASS) && $tokens[$tokens->getNextMeaningfulToken($index)]->equals('(')) { - continue; - } - - if ($token->isGivenKind([T_EXTENDS, T_IMPLEMENTS]) && $this->isMultilineExtendsOrImplementsWithMoreThanOneAncestor($tokens, $index)) { - continue; - } - - if ($token->isGivenKind(T_RETURN) && $this->isMultiLineReturn($tokens, $index)) { - continue; - } - - if ($token->isGivenKind(T_CONST) && $this->isMultilineConstant($tokens, $index)) { - continue; - } - - if ($token->isComment() || $token->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - if ($tokens[$whitespaceTokenIndex]->equals([T_WHITESPACE]) && str_contains($tokens[$whitespaceTokenIndex]->getContent(), "\n")) { - continue; - } - } - - $tokens->ensureWhitespaceAtIndex($whitespaceTokenIndex, 0, ' '); - - if ( - $token->isGivenKind(T_YIELD_FROM) - && 'yield from' !== strtolower($token->getContent()) - ) { - $tokens[$index] = new Token([T_YIELD_FROM, Preg::replace( - '/\s+/', - ' ', - $token->getContent() - )]); - } - } - } - - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $defaults = self::$tokenMap; - $tokens = array_keys($defaults); - - unset($defaults['type_colon']); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('constructs', 'List of constructs which must be followed by a single space.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($tokens)]) - ->setDefault(array_keys($defaults)) - ->getOption(), - ]); - } - - private function isMultiLineReturn(Tokens $tokens, int $index): bool - { - ++$index; - $tokenFollowingReturn = $tokens[$index]; - - if ( - !$tokenFollowingReturn->isGivenKind(T_WHITESPACE) - || !str_contains($tokenFollowingReturn->getContent(), "\n") - ) { - return false; - } - - $nestedCount = 0; - - for ($indexEnd = \count($tokens) - 1, ++$index; $index < $indexEnd; ++$index) { - if (str_contains($tokens[$index]->getContent(), "\n")) { - return true; - } - - if ($tokens[$index]->equals('{')) { - ++$nestedCount; - } elseif ($tokens[$index]->equals('}')) { - --$nestedCount; - } elseif (0 === $nestedCount && $tokens[$index]->equalsAny([';', [T_CLOSE_TAG]])) { - break; - } - } - - return false; - } - - private function isMultilineExtendsOrImplementsWithMoreThanOneAncestor(Tokens $tokens, int $index): bool - { - $hasMoreThanOneAncestor = false; - - while (++$index) { - $token = $tokens[$index]; - - if ($token->equals(',')) { - $hasMoreThanOneAncestor = true; - - continue; - } - - if ($token->equals('{')) { - return false; - } - - if ($hasMoreThanOneAncestor && str_contains($token->getContent(), "\n")) { - return true; - } - } - - return false; - } - - private function isMultilineConstant(Tokens $tokens, int $index): bool - { - $scopeEnd = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]) - 1; - $hasMoreThanOneConstant = null !== $tokens->findSequence([new Token(',')], $index + 1, $scopeEnd); - - return $hasMoreThanOneConstant && $tokens->isPartialCodeMultiline($index, $scopeEnd); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php deleted file mode 100644 index bdd35d7c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.php +++ /dev/null @@ -1,144 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ListNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ListSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var null|int - */ - private $candidateTokenKind; - - /** - * Use 'syntax' => 'long'|'short'. - * - * @param array $configuration - * - * @throws InvalidFixerConfigurationException - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->candidateTokenKind = 'long' === $this->configuration['syntax'] ? CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN : T_LIST; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'List (`array` destructuring) assignment should be declared using the configured syntax. Requires PHP >= 7.1.', - [ - new CodeSample( - " 'long'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BinaryOperatorSpacesFixer, TernaryOperatorSpacesFixer. - */ - public function getPriority(): int - { - return 1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound($this->candidateTokenKind); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - if ($tokens[$index]->isGivenKind($this->candidateTokenKind)) { - if (T_LIST === $this->candidateTokenKind) { - $this->fixToShortSyntax($tokens, $index); - } else { - $this->fixToLongSyntax($tokens, $index); - } - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('syntax', 'Whether to use the `long` or `short` `list` syntax.')) - ->setAllowedValues(['long', 'short']) - ->setDefault('short') - ->getOption(), - ]); - } - - private function fixToLongSyntax(Tokens $tokens, int $index): void - { - static $typesOfInterest = [ - [CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE], - '[', // [CT::T_ARRAY_SQUARE_BRACE_OPEN], - ]; - - $closeIndex = $tokens->getNextTokenOfKind($index, $typesOfInterest); - if (!$tokens[$closeIndex]->isGivenKind(CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE)) { - return; - } - - $tokens[$index] = new Token('('); - $tokens[$closeIndex] = new Token(')'); - $tokens->insertAt($index, new Token([T_LIST, 'list'])); - } - - private function fixToShortSyntax(Tokens $tokens, int $index): void - { - $openIndex = $tokens->getNextTokenOfKind($index, ['(']); - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - - $tokens[$openIndex] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, '[']); - $tokens[$closeIndex] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, ']']); - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php deleted file mode 100644 index 3ef36517..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php +++ /dev/null @@ -1,136 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\NamespaceNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶3. - * - * @author Dariusz Rumiński - */ -final class BlankLineAfterNamespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST be one blank line after the namespace declaration.', - [ - new CodeSample("isTokenKindFound(T_NAMESPACE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $lastIndex = $tokens->count() - 1; - - for ($index = $lastIndex; $index >= 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_NAMESPACE)) { - continue; - } - - $semicolonIndex = $tokens->getNextTokenOfKind($index, [';', '{', [T_CLOSE_TAG]]); - $semicolonToken = $tokens[$semicolonIndex]; - - if (!$semicolonToken->equals(';')) { - continue; - } - - $indexToEnsureBlankLineAfter = $this->getIndexToEnsureBlankLineAfter($tokens, $semicolonIndex); - $indexToEnsureBlankLine = $tokens->getNonEmptySibling($indexToEnsureBlankLineAfter, 1); - - if (null !== $indexToEnsureBlankLine && $tokens[$indexToEnsureBlankLine]->isWhitespace()) { - $tokens[$indexToEnsureBlankLine] = $this->getTokenToInsert($tokens[$indexToEnsureBlankLine]->getContent(), $indexToEnsureBlankLine === $lastIndex); - } else { - $tokens->insertAt($indexToEnsureBlankLineAfter + 1, $this->getTokenToInsert('', $indexToEnsureBlankLineAfter === $lastIndex)); - } - } - } - - private function getIndexToEnsureBlankLineAfter(Tokens $tokens, int $index): int - { - $indexToEnsureBlankLine = $index; - $nextIndex = $tokens->getNonEmptySibling($indexToEnsureBlankLine, 1); - - while (null !== $nextIndex) { - $token = $tokens[$nextIndex]; - - if ($token->isWhitespace()) { - if (1 === Preg::match('/\R/', $token->getContent())) { - break; - } - $nextNextIndex = $tokens->getNonEmptySibling($nextIndex, 1); - - if (!$tokens[$nextNextIndex]->isComment()) { - break; - } - } - - if (!$token->isWhitespace() && !$token->isComment()) { - break; - } - - $indexToEnsureBlankLine = $nextIndex; - $nextIndex = $tokens->getNonEmptySibling($indexToEnsureBlankLine, 1); - } - - return $indexToEnsureBlankLine; - } - - private function getTokenToInsert(string $currentContent, bool $isLastIndex): Token - { - $ending = $this->whitespacesConfig->getLineEnding(); - - $emptyLines = $isLastIndex ? $ending : $ending.$ending; - $indent = 1 === Preg::match('/^.*\R( *)$/s', $currentContent, $matches) ? $matches[1] : ''; - - return new Token([T_WHITESPACE, $emptyLines.$indent]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php deleted file mode 100644 index b3835580..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.php +++ /dev/null @@ -1,107 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\NamespaceNotation; - -use PhpCsFixer\AbstractLinesBeforeNamespaceFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Tokens; - -final class CleanNamespaceFixer extends AbstractLinesBeforeNamespaceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $samples = []; - - foreach (['namespace Foo \\ Bar;', 'echo foo /* comment */ \\ bar();'] as $sample) { - $samples[] = new VersionSpecificCodeSample( - "isTokenKindFound(T_NS_SEPARATOR); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $count = $tokens->count(); - - for ($index = 0; $index < $count; ++$index) { - if ($tokens[$index]->isGivenKind(T_NS_SEPARATOR)) { - $previousIndex = $tokens->getPrevMeaningfulToken($index); - - $index = $this->fixNamespace( - $tokens, - $tokens[$previousIndex]->isGivenKind(T_STRING) ? $previousIndex : $index - ); - } - } - } - - /** - * @param int $index start of namespace - */ - private function fixNamespace(Tokens $tokens, int $index): int - { - $tillIndex = $index; - - // go to the end of the namespace - while ($tokens[$tillIndex]->isGivenKind([T_NS_SEPARATOR, T_STRING])) { - $tillIndex = $tokens->getNextMeaningfulToken($tillIndex); - } - - $tillIndex = $tokens->getPrevMeaningfulToken($tillIndex); - - $spaceIndices = []; - - for (; $index <= $tillIndex; ++$index) { - if ($tokens[$index]->isGivenKind(T_WHITESPACE)) { - $spaceIndices[] = $index; - } elseif ($tokens[$index]->isComment()) { - $tokens->clearAt($index); - } - } - - if ($tokens[$index - 1]->isWhitespace()) { - array_pop($spaceIndices); - } - - foreach ($spaceIndices as $i) { - $tokens->clearAt($i); - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php deleted file mode 100644 index 96bc14b0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoBlankLinesBeforeNamespaceFixer.php +++ /dev/null @@ -1,76 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\NamespaceNotation; - -use PhpCsFixer\AbstractLinesBeforeNamespaceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class NoBlankLinesBeforeNamespaceFixer extends AbstractLinesBeforeNamespaceFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_NAMESPACE); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should be no blank lines before a namespace declaration.', - [ - new CodeSample( - "count(); $index < $limit; ++$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_NAMESPACE)) { - continue; - } - - $this->fixLinesBeforeNamespace($tokens, $index, 0, 1); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php deleted file mode 100644 index 6a038c8f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php +++ /dev/null @@ -1,104 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\NamespaceNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Bram Gotink - * @author Dariusz Rumiński - */ -final class NoLeadingNamespaceWhitespaceFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_NAMESPACE); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The namespace declaration line shouldn\'t contain leading whitespace.', - [ - new CodeSample( - 'isGivenKind(T_NAMESPACE)) { - continue; - } - - $beforeNamespaceIndex = $index - 1; - $beforeNamespace = $tokens[$beforeNamespaceIndex]; - - if (!$beforeNamespace->isWhitespace()) { - if (!self::endsWithWhitespace($beforeNamespace->getContent())) { - $tokens->insertAt($index, new Token([T_WHITESPACE, $this->whitespacesConfig->getLineEnding()])); - } - - continue; - } - - $lastNewline = strrpos($beforeNamespace->getContent(), "\n"); - - if (false === $lastNewline) { - $beforeBeforeNamespace = $tokens[$index - 2]; - - if (self::endsWithWhitespace($beforeBeforeNamespace->getContent())) { - $tokens->clearAt($beforeNamespaceIndex); - } else { - $tokens[$beforeNamespaceIndex] = new Token([T_WHITESPACE, ' ']); - } - } else { - $tokens[$beforeNamespaceIndex] = new Token([T_WHITESPACE, substr($beforeNamespace->getContent(), 0, $lastNewline + 1)]); - } - } - } - - private static function endsWithWhitespace(string $str): bool - { - if ('' === $str) { - return false; - } - - return '' === trim(substr($str, -1)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php deleted file mode 100644 index 667b1da5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/SingleBlankLineBeforeNamespaceFixer.php +++ /dev/null @@ -1,71 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\NamespaceNotation; - -use PhpCsFixer\AbstractLinesBeforeNamespaceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class SingleBlankLineBeforeNamespaceFixer extends AbstractLinesBeforeNamespaceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should be exactly one blank line before a namespace declaration.', - [ - new CodeSample("isTokenKindFound(T_NAMESPACE); - } - - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - return -21; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_NAMESPACE)) { - $this->fixLinesBeforeNamespace($tokens, $index, 2, 2); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php deleted file mode 100644 index ca3e0721..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Naming/NoHomoglyphNamesFixer.php +++ /dev/null @@ -1,244 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Naming; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Fred Cox - * @author Dariusz Rumiński - */ -final class NoHomoglyphNamesFixer extends AbstractFixer -{ - /** - * Used the program https://github.com/mcfedr/homoglyph-download - * to generate this list from - * http://homoglyphs.net/?text=abcdefghijklmnopqrstuvwxyz&lang=en&exc7=1&exc8=1&exc13=1&exc14=1. - * - * Symbols replaced include - * - Latin homoglyphs - * - IPA extensions - * - Greek and Coptic - * - Cyrillic - * - Cyrillic Supplement - * - Letterlike Symbols - * - Latin Numbers - * - Fullwidth Latin - * - * This is not the complete list of unicode homographs, but limited - * to those you are more likely to have typed/copied by accident - * - * @var array - */ - private static array $replacements = [ - 'O' => '0', - '0' => '0', - 'I' => '1', - '1' => '1', - '2' => '2', - '3' => '3', - '4' => '4', - '5' => '5', - '6' => '6', - '7' => '7', - '8' => '8', - '9' => '9', - 'Α' => 'A', - 'А' => 'A', - 'A' => 'A', - 'ʙ' => 'B', - 'Β' => 'B', - 'В' => 'B', - 'B' => 'B', - 'Ϲ' => 'C', - 'С' => 'C', - 'Ⅽ' => 'C', - 'C' => 'C', - 'Ⅾ' => 'D', - 'D' => 'D', - 'Ε' => 'E', - 'Е' => 'E', - 'E' => 'E', - 'Ϝ' => 'F', - 'F' => 'F', - 'ɢ' => 'G', - 'Ԍ' => 'G', - 'G' => 'G', - 'ʜ' => 'H', - 'Η' => 'H', - 'Н' => 'H', - 'H' => 'H', - 'l' => 'I', - 'Ι' => 'I', - 'І' => 'I', - 'Ⅰ' => 'I', - 'I' => 'I', - 'Ј' => 'J', - 'J' => 'J', - 'Κ' => 'K', - 'К' => 'K', - 'K' => 'K', - 'K' => 'K', - 'ʟ' => 'L', - 'Ⅼ' => 'L', - 'L' => 'L', - 'Μ' => 'M', - 'М' => 'M', - 'Ⅿ' => 'M', - 'M' => 'M', - 'ɴ' => 'N', - 'Ν' => 'N', - 'N' => 'N', - 'Ο' => 'O', - 'О' => 'O', - 'O' => 'O', - 'Ρ' => 'P', - 'Р' => 'P', - 'P' => 'P', - 'Q' => 'Q', - 'ʀ' => 'R', - 'R' => 'R', - 'Ѕ' => 'S', - 'S' => 'S', - 'Τ' => 'T', - 'Т' => 'T', - 'T' => 'T', - 'U' => 'U', - 'Ѵ' => 'V', - 'Ⅴ' => 'V', - 'V' => 'V', - 'W' => 'W', - 'Χ' => 'X', - 'Х' => 'X', - 'Ⅹ' => 'X', - 'X' => 'X', - 'ʏ' => 'Y', - 'Υ' => 'Y', - 'Ү' => 'Y', - 'Y' => 'Y', - 'Ζ' => 'Z', - 'Z' => 'Z', - '_' => '_', - 'ɑ' => 'a', - 'а' => 'a', - 'a' => 'a', - 'Ь' => 'b', - 'b' => 'b', - 'ϲ' => 'c', - 'с' => 'c', - 'ⅽ' => 'c', - 'c' => 'c', - 'ԁ' => 'd', - 'ⅾ' => 'd', - 'd' => 'd', - 'е' => 'e', - 'e' => 'e', - 'f' => 'f', - 'ɡ' => 'g', - 'g' => 'g', - 'һ' => 'h', - 'h' => 'h', - 'ɩ' => 'i', - 'і' => 'i', - 'ⅰ' => 'i', - 'i' => 'i', - 'ј' => 'j', - 'j' => 'j', - 'k' => 'k', - 'ⅼ' => 'l', - 'l' => 'l', - 'ⅿ' => 'm', - 'm' => 'm', - 'n' => 'n', - 'ο' => 'o', - 'о' => 'o', - 'o' => 'o', - 'р' => 'p', - 'p' => 'p', - 'q' => 'q', - 'r' => 'r', - 'ѕ' => 's', - 's' => 's', - 't' => 't', - 'u' => 'u', - 'ν' => 'v', - 'ѵ' => 'v', - 'ⅴ' => 'v', - 'v' => 'v', - 'ѡ' => 'w', - 'w' => 'w', - 'х' => 'x', - 'ⅹ' => 'x', - 'x' => 'x', - 'у' => 'y', - 'y' => 'y', - 'z' => 'z', - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace accidental usage of homoglyphs (non ascii characters) in names.', - [new CodeSample("isAnyTokenKindsFound([T_VARIABLE, T_STRING]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind([T_VARIABLE, T_STRING])) { - continue; - } - - $replaced = Preg::replaceCallback('/[^[:ascii:]]/u', static function (array $matches): string { - return self::$replacements[$matches[0]] ?? $matches[0]; - }, $token->getContent(), -1, $count); - - if ($count) { - $tokens->offsetSet($index, new Token([$token->getId(), $replaced])); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php deleted file mode 100644 index 2e3b3f73..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/AssignNullCoalescingToCoalesceEqualFixer.php +++ /dev/null @@ -1,191 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Analyzer\RangeAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class AssignNullCoalescingToCoalesceEqualFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Use the null coalescing assignment operator `??=` where possible.', - [ - new VersionSpecificCodeSample( - "isTokenKindFound(T_COALESCE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index > 3; --$index) { - if (!$tokens[$index]->isGivenKind(T_COALESCE)) { - continue; - } - - // make sure after '??' does not contain '? :' - - $nextIndex = $tokens->getNextTokenOfKind($index, ['?', ';', [T_CLOSE_TAG]]); - - if ($tokens[$nextIndex]->equals('?')) { - continue; - } - - // get what is before '??' - - $beforeRange = $this->getBeforeOperator($tokens, $index); - $equalsIndex = $tokens->getPrevMeaningfulToken($beforeRange['start']); - - // make sure that before that is '=' - - if (!$tokens[$equalsIndex]->equals('=')) { - continue; - } - - // get what is before '=' - - $assignRange = $this->getBeforeOperator($tokens, $equalsIndex); - $beforeAssignmentIndex = $tokens->getPrevMeaningfulToken($assignRange['start']); - - // make sure that before that is ';', '{', '}', '(', ')' or 'equalsAny([';', '{', '}', ')', '(', [T_OPEN_TAG]])) { - continue; - } - - // make sure before and after are the same - - if (!RangeAnalyzer::rangeEqualsRange($tokens, $assignRange, $beforeRange)) { - continue; - } - - $tokens[$equalsIndex] = new Token([T_COALESCE_EQUAL, '??=']); - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - $this->clearMeaningfulFromRange($tokens, $beforeRange); - - foreach ([$equalsIndex, $assignRange['end']] as $i) { - $i = $tokens->getNonEmptySibling($i, 1); - - if ($tokens[$i]->isWhitespace(" \t")) { - $tokens[$i] = new Token([T_WHITESPACE, ' ']); - } elseif (!$tokens[$i]->isWhitespace()) { - $tokens->insertAt($i, new Token([T_WHITESPACE, ' '])); - } - } - } - } - - /** - * @return array{start: int, end: int} - */ - private function getBeforeOperator(Tokens $tokens, int $index): array - { - $controlStructureWithoutBracesTypes = [T_IF, T_ELSE, T_ELSEIF, T_FOR, T_FOREACH, T_WHILE]; - - $index = $tokens->getPrevMeaningfulToken($index); - $range = [ - 'start' => $index, - 'end' => $index, - ]; - - $previousIndex = $index; - $previousToken = $tokens[$previousIndex]; - - while ($previousToken->equalsAny([ - '$', - ']', - ')', - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [T_NS_SEPARATOR], - [T_STRING], - [T_VARIABLE], - ])) { - $blockType = Tokens::detectBlockType($previousToken); - - if (null !== $blockType) { - $blockStart = $tokens->findBlockStart($blockType['type'], $previousIndex); - - if ($tokens[$previousIndex]->equals(')') && $tokens[$tokens->getPrevMeaningfulToken($blockStart)]->isGivenKind($controlStructureWithoutBracesTypes)) { - break; // we went too far back - } - - $previousIndex = $blockStart; - } - - $index = $previousIndex; - $previousIndex = $tokens->getPrevMeaningfulToken($previousIndex); - $previousToken = $tokens[$previousIndex]; - } - - if ($previousToken->isGivenKind(T_OBJECT_OPERATOR)) { - $index = $this->getBeforeOperator($tokens, $previousIndex)['start']; - } elseif ($previousToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)) { - $index = $this->getBeforeOperator($tokens, $tokens->getPrevMeaningfulToken($previousIndex))['start']; - } - - $range['start'] = $index; - - return $range; - } - - /** - * @param array{start: int, end: int} $range - */ - private function clearMeaningfulFromRange(Tokens $tokens, array $range): void - { - // $range['end'] must be meaningful! - for ($i = $range['end']; $i >= $range['start']; $i = $tokens->getPrevMeaningfulToken($i)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php deleted file mode 100644 index 83fb6711..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/BinaryOperatorSpacesFixer.php +++ /dev/null @@ -1,859 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Dariusz Rumiński - */ -final class BinaryOperatorSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const SINGLE_SPACE = 'single_space'; - - /** - * @internal - */ - public const NO_SPACE = 'no_space'; - - /** - * @internal - */ - public const ALIGN = 'align'; - - /** - * @internal - */ - public const ALIGN_SINGLE_SPACE = 'align_single_space'; - - /** - * @internal - */ - public const ALIGN_SINGLE_SPACE_MINIMAL = 'align_single_space_minimal'; - - /** - * @internal - * - * @const Placeholder used as anchor for right alignment. - */ - public const ALIGN_PLACEHOLDER = "\x2 ALIGNABLE%d \x3"; - - /** - * @var string[] - */ - private const SUPPORTED_OPERATORS = [ - '=', - '*', - '/', - '%', - '<', - '>', - '|', - '^', - '+', - '-', - '&', - '&=', - '&&', - '||', - '.=', - '/=', - '=>', - '==', - '>=', - '===', - '!=', - '<>', - '!==', - '<=', - 'and', - 'or', - 'xor', - '-=', - '%=', - '*=', - '|=', - '+=', - '<<', - '<<=', - '>>', - '>>=', - '^=', - '**', - '**=', - '<=>', - '??', - '??=', - ]; - - /** - * Keep track of the deepest level ever achieved while - * parsing the code. Used later to replace alignment - * placeholders with spaces. - */ - private int $deepestLevel; - - /** - * Level counter of the current nest level. - * So one level alignments are not mixed with - * other level ones. - */ - private int $currentLevel; - - /** - * @var array - */ - private static array $allowedValues = [ - self::ALIGN, - self::ALIGN_SINGLE_SPACE, - self::ALIGN_SINGLE_SPACE_MINIMAL, - self::SINGLE_SPACE, - self::NO_SPACE, - null, - ]; - - private TokensAnalyzer $tokensAnalyzer; - - /** - * @var array - */ - private array $alignOperatorTokens = []; - - /** - * @var array - */ - private array $operators = []; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->operators = $this->resolveOperatorsFromConfig(); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Binary operators should be surrounded by space as configured.', - [ - new CodeSample( - " ['=' => 'align', 'xor' => null]] - ), - new CodeSample( - ' ['+=' => 'align_single_space']] - ), - new CodeSample( - ' ['===' => 'align_single_space_minimal']] - ), - new CodeSample( - ' ['|' => 'no_space']] - ), - new CodeSample( - ' 1, - "baaaaaaaaaaar" => 11, -]; -', - ['operators' => ['=>' => 'single_space']] - ), - new CodeSample( - ' 12, - "baaaaaaaaaaar" => 13, -]; -', - ['operators' => ['=>' => 'align']] - ), - new CodeSample( - ' 12, - "baaaaaaaaaaar" => 13, -]; -', - ['operators' => ['=>' => 'align_single_space']] - ), - new CodeSample( - ' 12, - "baaaaaaaaaaar" => 13, -]; -', - ['operators' => ['=>' => 'align_single_space_minimal']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after ArrayIndentationFixer, ArraySyntaxFixer, AssignNullCoalescingToCoalesceEqualFixer, ListSyntaxFixer, ModernizeStrposFixer, NoMultilineWhitespaceAroundDoubleArrowFixer, NoUnsetCastFixer, PowToExponentiationFixer, StandardizeNotEqualsFixer, StrictComparisonFixer. - */ - public function getPriority(): int - { - return -32; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->tokensAnalyzer = new TokensAnalyzer($tokens); - - // last and first tokens cannot be an operator - for ($index = $tokens->count() - 2; $index > 0; --$index) { - if (!$this->tokensAnalyzer->isBinaryOperator($index)) { - continue; - } - - if ('=' === $tokens[$index]->getContent()) { - $isDeclare = $this->isEqualPartOfDeclareStatement($tokens, $index); - if (false === $isDeclare) { - $this->fixWhiteSpaceAroundOperator($tokens, $index); - } else { - $index = $isDeclare; // skip `declare(foo ==bar)`, see `declare_equal_normalize` - } - } else { - $this->fixWhiteSpaceAroundOperator($tokens, $index); - } - - // previous of binary operator is now never an operator / previous of declare statement cannot be an operator - --$index; - } - - if (\count($this->alignOperatorTokens) > 0) { - $this->fixAlignment($tokens, $this->alignOperatorTokens); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('default', 'Default fix strategy.')) - ->setDefault(self::SINGLE_SPACE) - ->setAllowedValues(self::$allowedValues) - ->getOption(), - (new FixerOptionBuilder('operators', 'Dictionary of `binary operator` => `fix strategy` values that differ from the default strategy. Supported are: `'.implode('`, `', self::SUPPORTED_OPERATORS).'`')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $option): bool { - foreach ($option as $operator => $value) { - if (!\in_array($operator, self::SUPPORTED_OPERATORS, true)) { - throw new InvalidOptionsException( - sprintf( - 'Unexpected "operators" key, expected any of "%s", got "%s".', - implode('", "', self::SUPPORTED_OPERATORS), - \gettype($operator).'#'.$operator - ) - ); - } - - if (!\in_array($value, self::$allowedValues, true)) { - throw new InvalidOptionsException( - sprintf( - 'Unexpected value for operator "%s", expected any of "%s", got "%s".', - $operator, - implode('", "', self::$allowedValues), - \is_object($value) ? \get_class($value) : (null === $value ? 'null' : \gettype($value).'#'.$value) - ) - ); - } - } - - return true; - }]) - ->setDefault([]) - ->getOption(), - ]); - } - - private function fixWhiteSpaceAroundOperator(Tokens $tokens, int $index): void - { - $tokenContent = strtolower($tokens[$index]->getContent()); - - if (!\array_key_exists($tokenContent, $this->operators)) { - return; // not configured to be changed - } - - if (self::SINGLE_SPACE === $this->operators[$tokenContent]) { - $this->fixWhiteSpaceAroundOperatorToSingleSpace($tokens, $index); - - return; - } - - if (self::NO_SPACE === $this->operators[$tokenContent]) { - $this->fixWhiteSpaceAroundOperatorToNoSpace($tokens, $index); - - return; - } - - // schedule for alignment - $this->alignOperatorTokens[$tokenContent] = $this->operators[$tokenContent]; - - if (self::ALIGN === $this->operators[$tokenContent]) { - return; - } - - // fix white space after operator - if ($tokens[$index + 1]->isWhitespace()) { - if (self::ALIGN_SINGLE_SPACE_MINIMAL === $this->operators[$tokenContent]) { - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } - - return; - } - - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - - private function fixWhiteSpaceAroundOperatorToSingleSpace(Tokens $tokens, int $index): void - { - // fix white space after operator - if ($tokens[$index + 1]->isWhitespace()) { - $content = $tokens[$index + 1]->getContent(); - if (' ' !== $content && !str_contains($content, "\n") && !$tokens[$tokens->getNextNonWhitespace($index + 1)]->isComment()) { - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } - } else { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - - // fix white space before operator - if ($tokens[$index - 1]->isWhitespace()) { - $content = $tokens[$index - 1]->getContent(); - if (' ' !== $content && !str_contains($content, "\n") && !$tokens[$tokens->getPrevNonWhitespace($index - 1)]->isComment()) { - $tokens[$index - 1] = new Token([T_WHITESPACE, ' ']); - } - } else { - $tokens->insertAt($index, new Token([T_WHITESPACE, ' '])); - } - } - - private function fixWhiteSpaceAroundOperatorToNoSpace(Tokens $tokens, int $index): void - { - // fix white space after operator - if ($tokens[$index + 1]->isWhitespace()) { - $content = $tokens[$index + 1]->getContent(); - if (!str_contains($content, "\n") && !$tokens[$tokens->getNextNonWhitespace($index + 1)]->isComment()) { - $tokens->clearAt($index + 1); - } - } - - // fix white space before operator - if ($tokens[$index - 1]->isWhitespace()) { - $content = $tokens[$index - 1]->getContent(); - if (!str_contains($content, "\n") && !$tokens[$tokens->getPrevNonWhitespace($index - 1)]->isComment()) { - $tokens->clearAt($index - 1); - } - } - } - - /** - * @return false|int index of T_DECLARE where the `=` belongs to or `false` - */ - private function isEqualPartOfDeclareStatement(Tokens $tokens, int $index) - { - $prevMeaningfulIndex = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prevMeaningfulIndex]->isGivenKind(T_STRING)) { - $prevMeaningfulIndex = $tokens->getPrevMeaningfulToken($prevMeaningfulIndex); - if ($tokens[$prevMeaningfulIndex]->equals('(')) { - $prevMeaningfulIndex = $tokens->getPrevMeaningfulToken($prevMeaningfulIndex); - if ($tokens[$prevMeaningfulIndex]->isGivenKind(T_DECLARE)) { - return $prevMeaningfulIndex; - } - } - } - - return false; - } - - /** - * @return array - */ - private function resolveOperatorsFromConfig(): array - { - $operators = []; - - if (null !== $this->configuration['default']) { - foreach (self::SUPPORTED_OPERATORS as $operator) { - $operators[$operator] = $this->configuration['default']; - } - } - - foreach ($this->configuration['operators'] as $operator => $value) { - if (null === $value) { - unset($operators[$operator]); - } else { - $operators[$operator] = $value; - } - } - - return $operators; - } - - // Alignment logic related methods - - /** - * @param array $toAlign - */ - private function fixAlignment(Tokens $tokens, array $toAlign): void - { - $this->deepestLevel = 0; - $this->currentLevel = 0; - - foreach ($toAlign as $tokenContent => $alignStrategy) { - // This fixer works partially on Tokens and partially on string representation of code. - // During the process of fixing internal state of single Token may be affected by injecting ALIGN_PLACEHOLDER to its content. - // The placeholder will be resolved by `replacePlaceholders` method by removing placeholder or changing it into spaces. - // That way of fixing the code causes disturbances in marking Token as changed - if code is perfectly valid then placeholder - // still be injected and removed, which will cause the `changed` flag to be set. - // To handle that unwanted behavior we work on clone of Tokens collection and then override original collection with fixed collection. - $tokensClone = clone $tokens; - - if ('=>' === $tokenContent) { - $this->injectAlignmentPlaceholdersForArrow($tokensClone, 0, \count($tokens)); - } else { - $this->injectAlignmentPlaceholdersDefault($tokensClone, 0, \count($tokens), $tokenContent); - } - - // for all tokens that should be aligned but do not have anything to align with, fix spacing if needed - if (self::ALIGN_SINGLE_SPACE === $alignStrategy || self::ALIGN_SINGLE_SPACE_MINIMAL === $alignStrategy) { - if ('=>' === $tokenContent) { - for ($index = $tokens->count() - 2; $index > 0; --$index) { - if ($tokens[$index]->isGivenKind(T_DOUBLE_ARROW)) { // always binary operator, never part of declare statement - $this->fixWhiteSpaceBeforeOperator($tokensClone, $index, $alignStrategy); - } - } - } elseif ('=' === $tokenContent) { - for ($index = $tokens->count() - 2; $index > 0; --$index) { - if ('=' === $tokens[$index]->getContent() && !$this->isEqualPartOfDeclareStatement($tokens, $index) && $this->tokensAnalyzer->isBinaryOperator($index)) { - $this->fixWhiteSpaceBeforeOperator($tokensClone, $index, $alignStrategy); - } - } - } else { - for ($index = $tokens->count() - 2; $index > 0; --$index) { - $content = $tokens[$index]->getContent(); - if (strtolower($content) === $tokenContent && $this->tokensAnalyzer->isBinaryOperator($index)) { // never part of declare statement - $this->fixWhiteSpaceBeforeOperator($tokensClone, $index, $alignStrategy); - } - } - } - } - - $tokens->setCode($this->replacePlaceholders($tokensClone, $alignStrategy)); - } - } - - private function injectAlignmentPlaceholdersDefault(Tokens $tokens, int $startAt, int $endAt, string $tokenContent): void - { - $newLineFoundSinceLastPlaceholder = true; - - for ($index = $startAt; $index < $endAt; ++$index) { - $token = $tokens[$index]; - $content = $token->getContent(); - - if (str_contains($content, "\n")) { - $newLineFoundSinceLastPlaceholder = true; - } - - if ( - strtolower($content) === $tokenContent - && $this->tokensAnalyzer->isBinaryOperator($index) - && ('=' !== $content || !$this->isEqualPartOfDeclareStatement($tokens, $index)) - && $newLineFoundSinceLastPlaceholder - ) { - $tokens[$index] = new Token(sprintf(self::ALIGN_PLACEHOLDER, $this->currentLevel).$content); - $newLineFoundSinceLastPlaceholder = false; - - continue; - } - - if ($token->isGivenKind(T_FN)) { - $from = $tokens->getNextMeaningfulToken($index); - $until = $this->getLastTokenIndexOfFn($tokens, $index); - $this->injectAlignmentPlaceholders($tokens, $from + 1, $until - 1, $tokenContent); - $index = $until; - - continue; - } - - if ($token->isGivenKind([T_FUNCTION, T_CLASS])) { - $index = $tokens->getNextTokenOfKind($index, ['{', ';', '(']); - // We don't align `=` on multi-line definition of function parameters with default values - if ($tokens[$index]->equals('(')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - continue; - } - - if ($tokens[$index]->equals(';')) { - continue; - } - - // Update the token to the `{` one in order to apply the following logic - $token = $tokens[$index]; - } - - if ($token->equals('{')) { - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - $this->injectAlignmentPlaceholders($tokens, $index + 1, $until - 1, $tokenContent); - $index = $until; - - continue; - } - - if ($token->equals('(')) { - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $this->injectAlignmentPlaceholders($tokens, $index + 1, $until - 1, $tokenContent); - $index = $until; - - continue; - } - - if ($token->equals('[')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, $index); - - continue; - } - - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index); - $this->injectAlignmentPlaceholders($tokens, $index + 1, $until - 1, $tokenContent); - $index = $until; - - continue; - } - } - } - - private function injectAlignmentPlaceholders(Tokens $tokens, int $from, int $until, string $tokenContent): void - { - // Only inject placeholders for multi-line code - if ($tokens->isPartialCodeMultiline($from, $until)) { - ++$this->deepestLevel; - $currentLevel = $this->currentLevel; - $this->currentLevel = $this->deepestLevel; - $this->injectAlignmentPlaceholdersDefault($tokens, $from, $until, $tokenContent); - $this->currentLevel = $currentLevel; - } - } - - private function injectAlignmentPlaceholdersForArrow(Tokens $tokens, int $startAt, int $endAt): void - { - $newLineFoundSinceLastPlaceholder = true; - - for ($index = $startAt; $index < $endAt; ++$index) { - $token = $tokens[$index]; - $content = $token->getContent(); - - if (str_contains($content, "\n")) { - $newLineFoundSinceLastPlaceholder = true; - } - - if ($token->isGivenKind(T_FN)) { - $from = $tokens->getNextMeaningfulToken($index); - $until = $this->getLastTokenIndexOfFn($tokens, $index); - $this->injectArrayAlignmentPlaceholders($tokens, $from + 1, $until - 1); - $index = $until; - - continue; - } - - if ($token->isGivenKind(T_ARRAY)) { // don't use "$tokens->isArray()" here, short arrays are handled in the next case - $from = $tokens->getNextMeaningfulToken($index); - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $from); - $index = $until; - - $this->injectArrayAlignmentPlaceholders($tokens, $from + 1, $until - 1); - - continue; - } - - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $from = $index; - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $from); - $index = $until; - - $this->injectArrayAlignmentPlaceholders($tokens, $from + 1, $until - 1); - - continue; - } - - // no need to analyze for `isBinaryOperator` (always true), nor if part of declare statement (not valid PHP) - // there is also no need to analyse the second arrow of a line - if ($token->isGivenKind(T_DOUBLE_ARROW) && $newLineFoundSinceLastPlaceholder) { - $tokenContent = sprintf(self::ALIGN_PLACEHOLDER, $this->currentLevel).$token->getContent(); - - $nextToken = $tokens[$index + 1]; - if (!$nextToken->isWhitespace()) { - $tokenContent .= ' '; - } elseif ($nextToken->isWhitespace(" \t")) { - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } - - $tokens[$index] = new Token([T_DOUBLE_ARROW, $tokenContent]); - $newLineFoundSinceLastPlaceholder = false; - - continue; - } - - if ($token->equals(';')) { - ++$this->deepestLevel; - ++$this->currentLevel; - - continue; - } - - if ($token->equals(',')) { - for ($i = $index; $i < $endAt - 1; ++$i) { - if (str_contains($tokens[$i - 1]->getContent(), "\n")) { - $newLineFoundSinceLastPlaceholder = true; - - break; - } - - if ($tokens[$i + 1]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN])) { - $arrayStartIndex = $tokens[$i + 1]->isGivenKind(T_ARRAY) - ? $tokens->getNextMeaningfulToken($i + 1) - : $i + 1 - ; - $blockType = Tokens::detectBlockType($tokens[$arrayStartIndex]); - $arrayEndIndex = $tokens->findBlockEnd($blockType['type'], $arrayStartIndex); - - if ($tokens->isPartialCodeMultiline($arrayStartIndex, $arrayEndIndex)) { - break; - } - } - - ++$index; - } - } - - if ($token->equals('{')) { - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - $this->injectArrayAlignmentPlaceholders($tokens, $index + 1, $until - 1); - $index = $until; - - continue; - } - - if ($token->equals('(')) { - $until = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $this->injectArrayAlignmentPlaceholders($tokens, $index + 1, $until - 1); - $index = $until; - - continue; - } - } - } - - private function injectArrayAlignmentPlaceholders(Tokens $tokens, int $from, int $until): void - { - // Only inject placeholders for multi-line arrays - if ($tokens->isPartialCodeMultiline($from, $until)) { - ++$this->deepestLevel; - $currentLevel = $this->currentLevel; - $this->currentLevel = $this->deepestLevel; - $this->injectAlignmentPlaceholdersForArrow($tokens, $from, $until); - $this->currentLevel = $currentLevel; - } - } - - private function fixWhiteSpaceBeforeOperator(Tokens $tokens, int $index, string $alignStrategy): void - { - // fix white space after operator is not needed as BinaryOperatorSpacesFixer took care of this (if strategy is _not_ ALIGN) - if (!$tokens[$index - 1]->isWhitespace()) { - $tokens->insertAt($index, new Token([T_WHITESPACE, ' '])); - - return; - } - - if (self::ALIGN_SINGLE_SPACE_MINIMAL !== $alignStrategy || $tokens[$tokens->getPrevNonWhitespace($index - 1)]->isComment()) { - return; - } - - $content = $tokens[$index - 1]->getContent(); - if (' ' !== $content && !str_contains($content, "\n")) { - $tokens[$index - 1] = new Token([T_WHITESPACE, ' ']); - } - } - - /** - * Look for group of placeholders and provide vertical alignment. - */ - private function replacePlaceholders(Tokens $tokens, string $alignStrategy): string - { - $tmpCode = $tokens->generateCode(); - - for ($j = 0; $j <= $this->deepestLevel; ++$j) { - $placeholder = sprintf(self::ALIGN_PLACEHOLDER, $j); - - if (!str_contains($tmpCode, $placeholder)) { - continue; - } - - $lines = explode("\n", $tmpCode); - $groups = []; - $groupIndex = 0; - $groups[$groupIndex] = []; - - foreach ($lines as $index => $line) { - if (substr_count($line, $placeholder) > 0) { - $groups[$groupIndex][] = $index; - } else { - ++$groupIndex; - $groups[$groupIndex] = []; - } - } - - foreach ($groups as $group) { - if (\count($group) < 1) { - continue; - } - - if (self::ALIGN !== $alignStrategy) { - // move placeholders to match strategy - foreach ($group as $index) { - $currentPosition = strpos($lines[$index], $placeholder); - $before = substr($lines[$index], 0, $currentPosition); - - if (self::ALIGN_SINGLE_SPACE === $alignStrategy) { - if (!str_ends_with($before, ' ')) { // if last char of before-content is not ' '; add it - $before .= ' '; - } - } elseif (self::ALIGN_SINGLE_SPACE_MINIMAL === $alignStrategy) { - if (1 !== Preg::match('/^\h+$/', $before)) { // if indent; do not move, leave to other fixer - $before = rtrim($before).' '; - } - } - - $lines[$index] = $before.substr($lines[$index], $currentPosition); - } - } - - $rightmostSymbol = 0; - foreach ($group as $index) { - $rightmostSymbol = max($rightmostSymbol, mb_strpos($lines[$index], $placeholder)); - } - - foreach ($group as $index) { - $line = $lines[$index]; - $currentSymbol = mb_strpos($line, $placeholder); - $delta = abs($rightmostSymbol - $currentSymbol); - - if ($delta > 0) { - $line = str_replace($placeholder, str_repeat(' ', $delta).$placeholder, $line); - $lines[$index] = $line; - } - } - } - - $tmpCode = str_replace($placeholder, '', implode("\n", $lines)); - } - - return $tmpCode; - } - - private function getLastTokenIndexOfFn(Tokens $tokens, int $index): int - { - $index = $tokens->getNextTokenOfKind($index, [[T_DOUBLE_ARROW]]); - - while (true) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->equalsAny([';', ',', [T_CLOSE_TAG]])) { - break; - } - - $blockType = Tokens::detectBlockType($tokens[$index]); - - if (null === $blockType) { - continue; - } - - if ($blockType['isStart']) { - $index = $tokens->findBlockEnd($blockType['type'], $index); - - continue; - } - - break; - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php deleted file mode 100644 index cc3509e2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.php +++ /dev/null @@ -1,168 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class ConcatSpaceFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var null|string - */ - private $fixCallback; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if ('one' === $this->configuration['spacing']) { - $this->fixCallback = 'fixConcatenationToSingleSpace'; - } else { - $this->fixCallback = 'fixConcatenationToNoSpace'; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Concatenation should be spaced according configuration.', - [ - new CodeSample( - " 'none'] - ), - new CodeSample( - " 'one'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after NoUnneededControlParenthesesFixer, SingleLineThrowFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('.'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $callBack = $this->fixCallback; - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if ($tokens[$index]->equals('.')) { - $this->{$callBack}($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('spacing', 'Spacing to apply around concatenation operator.')) - ->setAllowedValues(['one', 'none']) - ->setDefault('none') - ->getOption(), - ]); - } - - /** - * @param int $index index of concatenation '.' token - */ - private function fixConcatenationToNoSpace(Tokens $tokens, int $index): void - { - $prevNonWhitespaceToken = $tokens[$tokens->getPrevNonWhitespace($index)]; - - if (!$prevNonWhitespaceToken->isGivenKind([T_LNUMBER, T_COMMENT, T_DOC_COMMENT]) || str_starts_with($prevNonWhitespaceToken->getContent(), '/*')) { - $tokens->removeLeadingWhitespace($index, " \t"); - } - - if (!$tokens[$tokens->getNextNonWhitespace($index)]->isGivenKind([T_LNUMBER, T_COMMENT, T_DOC_COMMENT])) { - $tokens->removeTrailingWhitespace($index, " \t"); - } - } - - /** - * @param int $index index of concatenation '.' token - */ - private function fixConcatenationToSingleSpace(Tokens $tokens, int $index): void - { - $this->fixWhiteSpaceAroundConcatToken($tokens, $index, 1); - $this->fixWhiteSpaceAroundConcatToken($tokens, $index, -1); - } - - /** - * @param int $index index of concatenation '.' token - * @param int $offset 1 or -1 - */ - private function fixWhiteSpaceAroundConcatToken(Tokens $tokens, int $index, int $offset): void - { - $offsetIndex = $index + $offset; - - if (!$tokens[$offsetIndex]->isWhitespace()) { - $tokens->insertAt($index + (1 === $offset ?: 0), new Token([T_WHITESPACE, ' '])); - - return; - } - - if (str_contains($tokens[$offsetIndex]->getContent(), "\n")) { - return; - } - - if ($tokens[$index + $offset * 2]->isComment()) { - return; - } - - $tokens[$offsetIndex] = new Token([T_WHITESPACE, ' ']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php deleted file mode 100644 index 52b8ad13..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/IncrementStyleFixer.php +++ /dev/null @@ -1,178 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\Fixer\AbstractIncrementOperatorFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gregor Harlan - * @author Kuba Werłos - */ -final class IncrementStyleFixer extends AbstractIncrementOperatorFixer implements ConfigurableFixerInterface -{ - /** - * @internal - */ - public const STYLE_PRE = 'pre'; - - /** - * @internal - */ - public const STYLE_POST = 'post'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Pre- or post-increment and decrement operators should be used if possible.', - [ - new CodeSample(" self::STYLE_POST] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoSpacesInsideParenthesisFixer. - * Must run after StandardizeIncrementFixer. - */ - public function getPriority(): int - { - return 15; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_INC, T_DEC]); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('style', 'Whether to use pre- or post-increment and decrement operators.')) - ->setAllowedValues([self::STYLE_PRE, self::STYLE_POST]) - ->setDefault(self::STYLE_PRE) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_INC, T_DEC])) { - continue; - } - - if (self::STYLE_PRE === $this->configuration['style'] && $tokensAnalyzer->isUnarySuccessorOperator($index)) { - $nextToken = $tokens[$tokens->getNextMeaningfulToken($index)]; - - if (!$nextToken->equalsAny([';', ')'])) { - continue; - } - - $startIndex = $this->findStart($tokens, $index); - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($startIndex)]; - - if ($prevToken->equalsAny([';', '{', '}', [T_OPEN_TAG], ')'])) { - $tokens->clearAt($index); - $tokens->insertAt($startIndex, clone $token); - } - } elseif (self::STYLE_POST === $this->configuration['style'] && $tokensAnalyzer->isUnaryPredecessorOperator($index)) { - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if (!$prevToken->equalsAny([';', '{', '}', [T_OPEN_TAG], ')'])) { - continue; - } - - $endIndex = $this->findEnd($tokens, $index); - $nextToken = $tokens[$tokens->getNextMeaningfulToken($endIndex)]; - - if ($nextToken->equalsAny([';', ')'])) { - $tokens->clearAt($index); - $tokens->insertAt($tokens->getNextNonWhitespace($endIndex), clone $token); - } - } - } - } - - private function findEnd(Tokens $tokens, int $index): int - { - $nextIndex = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$nextIndex]; - - while ($nextToken->equalsAny([ - '$', - '(', - '[', - [CT::T_DYNAMIC_PROP_BRACE_OPEN], - [CT::T_DYNAMIC_VAR_BRACE_OPEN], - [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN], - [T_NS_SEPARATOR], - [T_STATIC], - [T_STRING], - [T_VARIABLE], - ])) { - $blockType = Tokens::detectBlockType($nextToken); - - if (null !== $blockType) { - $nextIndex = $tokens->findBlockEnd($blockType['type'], $nextIndex); - } - - $index = $nextIndex; - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - $nextToken = $tokens[$nextIndex]; - } - - if ($nextToken->isObjectOperator()) { - return $this->findEnd($tokens, $nextIndex); - } - - if ($nextToken->isGivenKind(T_PAAMAYIM_NEKUDOTAYIM)) { - return $this->findEnd($tokens, $tokens->getNextMeaningfulToken($nextIndex)); - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php deleted file mode 100644 index 583e2a9a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Haralan Dobrev - */ -final class LogicalOperatorsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Use `&&` and `||` logical operators instead of `and` and `or`.', - [ - new CodeSample( - 'isAnyTokenKindsFound([T_LOGICAL_AND, T_LOGICAL_OR]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if ($token->isGivenKind(T_LOGICAL_AND)) { - $tokens[$index] = new Token([T_BOOLEAN_AND, '&&']); - } elseif ($token->isGivenKind(T_LOGICAL_OR)) { - $tokens[$index] = new Token([T_BOOLEAN_OR, '||']); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php deleted file mode 100644 index 83cdccfb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php +++ /dev/null @@ -1,212 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class NewWithBracesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'All instances created with `new` keyword must (not) be followed by braces.', - [ - new CodeSample(" false] - ), - new CodeSample( - " false] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before ClassDefinitionFixer. - */ - public function getPriority(): int - { - return 37; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_NEW); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $nextTokenKinds = null; - - if (null === $nextTokenKinds) { - $nextTokenKinds = [ - '?', - ';', - ',', - '(', - ')', - '[', - ']', - ':', - '<', - '>', - '+', - '-', - '*', - '/', - '%', - '&', - '^', - '|', - [T_CLASS], - [T_IS_SMALLER_OR_EQUAL], - [T_IS_GREATER_OR_EQUAL], - [T_IS_EQUAL], - [T_IS_NOT_EQUAL], - [T_IS_IDENTICAL], - [T_IS_NOT_IDENTICAL], - [T_CLOSE_TAG], - [T_LOGICAL_AND], - [T_LOGICAL_OR], - [T_LOGICAL_XOR], - [T_BOOLEAN_AND], - [T_BOOLEAN_OR], - [T_SL], - [T_SR], - [T_INSTANCEOF], - [T_AS], - [T_DOUBLE_ARROW], - [T_POW], - [T_SPACESHIP], - [CT::T_ARRAY_SQUARE_BRACE_OPEN], - [CT::T_ARRAY_SQUARE_BRACE_CLOSE], - [CT::T_BRACE_CLASS_INSTANTIATION_OPEN], - [CT::T_BRACE_CLASS_INSTANTIATION_CLOSE], - ]; - - if (\defined('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG')) { // @TODO: drop condition when PHP 8.1+ is required - $nextTokenKinds[] = [T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG]; - $nextTokenKinds[] = [T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG]; - } - } - - for ($index = $tokens->count() - 3; $index > 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_NEW)) { - continue; - } - - $nextIndex = $tokens->getNextTokenOfKind($index, $nextTokenKinds); - - // new anonymous class definition - if ($tokens[$nextIndex]->isGivenKind(T_CLASS)) { - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - - if ($this->configuration['anonymous_class']) { - $this->ensureBracesAt($tokens, $nextIndex); - } else { - $this->ensureNoBracesAt($tokens, $nextIndex); - } - - continue; - } - - // entrance into array index syntax - need to look for exit - - while ($tokens[$nextIndex]->equals('[') || $tokens[$nextIndex]->isGivenKind(CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN)) { - $nextIndex = $tokens->findBlockEnd(Tokens::detectBlockType($tokens[$nextIndex])['type'], $nextIndex); - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - } - - if ($this->configuration['named_class']) { - $this->ensureBracesAt($tokens, $nextIndex); - } else { - $this->ensureNoBracesAt($tokens, $nextIndex); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('named_class', 'Whether named classes should be followed by parentheses.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('anonymous_class', 'Whether anonymous classes should be followed by parentheses.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - private function ensureBracesAt(Tokens $tokens, int $index): void - { - $token = $tokens[$index]; - - if (!$token->equals('(') && !$token->isObjectOperator()) { - $tokens->insertAt( - $tokens->getPrevMeaningfulToken($index) + 1, - [new Token('('), new Token(')')] - ); - } - } - - private function ensureNoBracesAt(Tokens $tokens, int $index): void - { - if (!$tokens[$index]->equals('(')) { - return; - } - - $closingIndex = $tokens->getNextMeaningfulToken($index); - - // constructor has arguments - braces can not be removed - if (!$tokens[$closingIndex]->equals(')')) { - return; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($closingIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php deleted file mode 100644 index ccb8071f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.php +++ /dev/null @@ -1,72 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoSpaceAroundDoubleColonFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must be no space around double colons (also called Scope Resolution Operator or Paamayim Nekudotayim).', - [new CodeSample("\nisTokenKindFound(T_DOUBLE_COLON); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 2; $index > 1; --$index) { - if ($tokens[$index]->isGivenKind(T_DOUBLE_COLON)) { - $this->removeSpace($tokens, $index, 1); - $this->removeSpace($tokens, $index, -1); - } - } - } - - /** - * @param -1|1 $direction - */ - private function removeSpace(Tokens $tokens, int $index, int $direction): void - { - if (!$tokens[$index + $direction]->isWhitespace()) { - return; - } - - if ($tokens[$tokens->getNonWhitespaceSibling($index, $direction)]->isComment()) { - return; - } - - $tokens->clearAt($index + $direction); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php deleted file mode 100644 index 95310ac5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessConcatOperatorFixer.php +++ /dev/null @@ -1,351 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUselessConcatOperatorFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const STR_DOUBLE_QUOTE = 0; - private const STR_DOUBLE_QUOTE_VAR = 1; - private const STR_SINGLE_QUOTE = 2; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be useless concat operations.', - [ - new CodeSample(" true]), - ], - ); - } - - /** - * {@inheritdoc} - * - * Must run before DateTimeCreateFromFormatCallFixer, EregToPregFixer, PhpUnitDedicateAssertInternalTypeFixer, RegularCallableCallFixer, SetTypeToCastFixer. - * Must run after NoBinaryStringFixer, SingleQuoteFixer. - */ - public function getPriority(): int - { - return 5; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound('.') && $tokens->isAnyTokenKindsFound([T_CONSTANT_ENCAPSED_STRING, '"']); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if (!$tokens[$index]->equals('.')) { - continue; - } - - $nextMeaningfulTokenIndex = $tokens->getNextMeaningfulToken($index); - - if ($this->containsLinebreak($tokens, $index, $nextMeaningfulTokenIndex)) { - continue; - } - - $secondOperand = $this->getConcatOperandType($tokens, $nextMeaningfulTokenIndex, 1); - - if (null === $secondOperand) { - continue; - } - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($index); - - if ($this->containsLinebreak($tokens, $prevMeaningfulTokenIndex, $index)) { - continue; - } - - $firstOperand = $this->getConcatOperandType($tokens, $prevMeaningfulTokenIndex, -1); - - if (null === $firstOperand) { - continue; - } - - $this->fixConcatOperation($tokens, $firstOperand, $index, $secondOperand); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('juggle_simple_strings', 'Allow for simple string quote juggling if it results in more concat-operations merges.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $firstOperand - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $secondOperand - */ - private function fixConcatOperation(Tokens $tokens, array $firstOperand, int $concatIndex, array $secondOperand): void - { - // if both operands are of the same type then these operands can always be merged - - if ( - (self::STR_DOUBLE_QUOTE === $firstOperand['type'] && self::STR_DOUBLE_QUOTE === $secondOperand['type']) - || (self::STR_SINGLE_QUOTE === $firstOperand['type'] && self::STR_SINGLE_QUOTE === $secondOperand['type']) - ) { - $this->mergeContantEscapedStringOperands($tokens, $firstOperand, $concatIndex, $secondOperand); - - return; - } - - if (self::STR_DOUBLE_QUOTE_VAR === $firstOperand['type'] && self::STR_DOUBLE_QUOTE_VAR === $secondOperand['type']) { - $this->mergeContantEscapedStringVarOperands($tokens, $firstOperand, $concatIndex, $secondOperand); - - return; - } - - // if any is double and the other is not, check for simple other, than merge with " - - $operands = [ - [$firstOperand, $secondOperand], - [$secondOperand, $firstOperand], - ]; - - foreach ($operands as $operandPair) { - [$operand1, $operand2] = $operandPair; - - if (self::STR_DOUBLE_QUOTE_VAR === $operand1['type'] && self::STR_DOUBLE_QUOTE === $operand2['type']) { - $this->mergeContantEscapedStringVarOperands($tokens, $firstOperand, $concatIndex, $secondOperand); - - return; - } - - if (!$this->configuration['juggle_simple_strings']) { - continue; - } - - if (self::STR_DOUBLE_QUOTE === $operand1['type'] && self::STR_SINGLE_QUOTE === $operand2['type']) { - $operantContent = $tokens[$operand2['start']]->getContent(); - - if ($this->isSimpleQuotedStringContent($operantContent)) { - $this->mergeContantEscapedStringOperands($tokens, $firstOperand, $concatIndex, $secondOperand); - } - - return; - } - - if (self::STR_DOUBLE_QUOTE_VAR === $operand1['type'] && self::STR_SINGLE_QUOTE === $operand2['type']) { - $operantContent = $tokens[$operand2['start']]->getContent(); - - if ($this->isSimpleQuotedStringContent($operantContent)) { - $this->mergeContantEscapedStringVarOperands($tokens, $firstOperand, $concatIndex, $secondOperand); - } - - return; - } - } - } - - /** - * @param -1|1 $direction - * - * @return null|array{ - * start: int, - * end: int, - * type: self::STR_*, - * } - */ - private function getConcatOperandType(Tokens $tokens, int $index, int $direction): ?array - { - if ($tokens[$index]->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - $firstChar = $tokens[$index]->getContent(); - - if ('b' === $firstChar[0] || 'B' === $firstChar[0]) { - return null; // we don't care about these, priorities are set to do deal with these cases - } - - return [ - 'start' => $index, - 'end' => $index, - 'type' => '"' === $firstChar[0] ? self::STR_DOUBLE_QUOTE : self::STR_SINGLE_QUOTE, - ]; - } - - if ($tokens[$index]->equals('"')) { - $end = $tokens->getTokenOfKindSibling($index, $direction, ['"']); - - return [ - 'start' => 1 === $direction ? $index : $end, - 'end' => 1 === $direction ? $end : $index, - 'type' => self::STR_DOUBLE_QUOTE_VAR, - ]; - } - - return null; - } - - /** - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $firstOperand - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $secondOperand - */ - private function mergeContantEscapedStringOperands( - Tokens $tokens, - array $firstOperand, - int $concatOperatorIndex, - array $secondOperand - ): void { - $quote = self::STR_DOUBLE_QUOTE === $firstOperand['type'] || self::STR_DOUBLE_QUOTE === $secondOperand['type'] ? '"' : "'"; - $firstOperandTokenContent = $tokens[$firstOperand['start']]->getContent(); - $secondOperandTokenContent = $tokens[$secondOperand['start']]->getContent(); - - $tokens[$firstOperand['start']] = new Token( - [ - T_CONSTANT_ENCAPSED_STRING, - $quote.substr($firstOperandTokenContent, 1, -1).substr($secondOperandTokenContent, 1, -1).$quote, - ], - ); - - $tokens->clearTokenAndMergeSurroundingWhitespace($secondOperand['start']); - $this->clearConcatAndAround($tokens, $concatOperatorIndex); - } - - /** - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $firstOperand - * @param array{ - * start: int, - * end: int, - * type: self::STR_*, - * } $secondOperand - */ - private function mergeContantEscapedStringVarOperands( - Tokens $tokens, - array $firstOperand, - int $concatOperatorIndex, - array $secondOperand - ): void { - // build uo the new content - $newContent = ''; - - foreach ([$firstOperand, $secondOperand] as $operant) { - $operandContent = ''; - - for ($i = $operant['start']; $i <= $operant['end'];) { - $operandContent .= $tokens[$i]->getContent(); - $i = $tokens->getNextMeaningfulToken($i); - } - - $newContent .= substr($operandContent, 1, -1); - } - - // remove tokens making up the concat statement - - for ($i = $secondOperand['end']; $i >= $secondOperand['start'];) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - $i = $tokens->getPrevMeaningfulToken($i); - } - - $this->clearConcatAndAround($tokens, $concatOperatorIndex); - - for ($i = $firstOperand['end']; $i > $firstOperand['start'];) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - $i = $tokens->getPrevMeaningfulToken($i); - } - - // insert new tokens based on the new content - - $newTokens = Tokens::fromCode('overrideRange($firstOperand['start'], $firstOperand['start'], $insertTokens); - } - - private function clearConcatAndAround(Tokens $tokens, int $concatOperatorIndex): void - { - if ($tokens[$concatOperatorIndex + 1]->isWhitespace()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($concatOperatorIndex + 1); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($concatOperatorIndex); - - if ($tokens[$concatOperatorIndex - 1]->isWhitespace()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($concatOperatorIndex - 1); - } - } - - private function isSimpleQuotedStringContent(string $candidate): bool - { - return 0 === Preg::match('#[\$"\'\\\]#', substr($candidate, 1, -1)); - } - - private function containsLinebreak(Tokens $tokens, int $startIndex, int $endIndex): bool - { - for ($i = $endIndex; $i > $startIndex; --$i) { - if (Preg::match('/\R/', $tokens[$i]->getContent())) { - return true; - } - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php deleted file mode 100644 index 99f47877..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php +++ /dev/null @@ -1,82 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUselessNullsafeOperatorFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be useless `null-safe-operators` `?->` used.', - [ - new VersionSpecificCodeSample( - 'parentMethod(); - } -} -', - new VersionSpecification(80000) - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return \PHP_VERSION_ID >= 80000 && $tokens->isAllTokenKindsFound([T_VARIABLE, T_NULLSAFE_OBJECT_OPERATOR]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_NULLSAFE_OBJECT_OPERATOR)) { - continue; - } - - $nullsafeObjectOperatorIndex = $index; - $index = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$index]->isGivenKind(T_VARIABLE)) { - continue; - } - - if ('$this' !== strtolower($tokens[$index]->getContent())) { - continue; - } - - $tokens[$nullsafeObjectOperatorIndex] = new Token([T_OBJECT_OPERATOR, '->']); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php deleted file mode 100644 index 83c5cf55..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSpaceFixer.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Javier Spagnoletti - */ -final class NotOperatorWithSpaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Logical NOT operators (`!`) should have leading and trailing whitespaces.', - [new CodeSample( - 'isTokenKindFound('!'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if ($token->equals('!')) { - if (!$tokens[$index + 1]->isWhitespace()) { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - } - - if (!$tokens[$index - 1]->isWhitespace()) { - $tokens->insertAt($index, new Token([T_WHITESPACE, ' '])); - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php deleted file mode 100644 index 22901318..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/NotOperatorWithSuccessorSpaceFixer.php +++ /dev/null @@ -1,77 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Javier Spagnoletti - */ -final class NotOperatorWithSuccessorSpaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Logical NOT operators (`!`) should have one trailing whitespace.', - [new CodeSample( - 'isTokenKindFound('!'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - $token = $tokens[$index]; - - if ($token->equals('!')) { - $tokens->ensureWhitespaceAtIndex($index + 1, 0, ' '); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php deleted file mode 100644 index 71e4cd6b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/ObjectOperatorWithoutWhitespaceFixer.php +++ /dev/null @@ -1,71 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -final class ObjectOperatorWithoutWhitespaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be space before or after object operators `->` and `?->`.', - [new CodeSample(" b;\n")] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getObjectOperatorKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // [Structure] there should not be space before or after "->" or "?->" - foreach ($tokens as $index => $token) { - if (!$token->isObjectOperator()) { - continue; - } - - // clear whitespace before -> - if ($tokens[$index - 1]->isWhitespace(" \t") && !$tokens[$index - 2]->isComment()) { - $tokens->clearAt($index - 1); - } - - // clear whitespace after -> - if ($tokens[$index + 1]->isWhitespace(" \t") && !$tokens[$index + 2]->isComment()) { - $tokens->clearAt($index + 1); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php deleted file mode 100644 index 6b6b8683..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/OperatorLinebreakFixer.php +++ /dev/null @@ -1,319 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\AlternativeSyntaxAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\SwitchAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\ControlCaseStructuresAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\GotoLabelAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\ReferenceAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class OperatorLinebreakFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const BOOLEAN_OPERATORS = [[T_BOOLEAN_AND], [T_BOOLEAN_OR], [T_LOGICAL_AND], [T_LOGICAL_OR], [T_LOGICAL_XOR]]; - - private string $position = 'beginning'; - - /** - * @var array|string> - */ - private array $operators = []; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Operators - when multiline - must always be at the beginning or at the end of the line.', - [ - new CodeSample(' 'end'] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->position = $this->configuration['position']; - $this->operators = self::BOOLEAN_OPERATORS; - - if (false === $this->configuration['only_booleans']) { - $this->operators = array_merge($this->operators, self::getNonBooleanOperators()); - } - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('only_booleans', 'whether to limit operators to only boolean ones')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('position', 'whether to place operators at the beginning or at the end of the line')) - ->setAllowedValues(['beginning', 'end']) - ->setDefault($this->position) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $referenceAnalyzer = new ReferenceAnalyzer(); - $gotoLabelAnalyzer = new GotoLabelAnalyzer(); - $alternativeSyntaxAnalyzer = new AlternativeSyntaxAnalyzer(); - - $excludedIndices = $this->getExcludedIndices($tokens); - - $index = $tokens->count(); - while ($index > 1) { - --$index; - - if (!$tokens[$index]->equalsAny($this->operators, false)) { - continue; - } - - if ($gotoLabelAnalyzer->belongsToGoToLabel($tokens, $index)) { - continue; - } - - if ($referenceAnalyzer->isReference($tokens, $index)) { - continue; - } - - if ($alternativeSyntaxAnalyzer->belongsToAlternativeSyntax($tokens, $index)) { - continue; - } - - if (\in_array($index, $excludedIndices, true)) { - continue; - } - - $operatorIndices = [$index]; - if ($tokens[$index]->equals(':')) { - /** @var int $prevIndex */ - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prevIndex]->equals('?')) { - $operatorIndices = [$prevIndex, $index]; - $index = $prevIndex; - } - } - - $this->fixOperatorLinebreak($tokens, $operatorIndices); - } - } - - /** - * Currently only colons from "switch". - * - * @return int[] - */ - private function getExcludedIndices(Tokens $tokens): array - { - $colonIndices = []; - - /** @var SwitchAnalysis $analysis */ - foreach (ControlCaseStructuresAnalyzer::findControlStructures($tokens, [T_SWITCH]) as $analysis) { - foreach ($analysis->getCases() as $case) { - $colonIndices[] = $case->getColonIndex(); - } - - $defaultAnalysis = $analysis->getDefaultAnalysis(); - - if (null !== $defaultAnalysis) { - $colonIndices[] = $defaultAnalysis->getColonIndex(); - } - } - - return $colonIndices; - } - - /** - * @param int[] $operatorIndices - */ - private function fixOperatorLinebreak(Tokens $tokens, array $operatorIndices): void - { - /** @var int $prevIndex */ - $prevIndex = $tokens->getPrevMeaningfulToken(min($operatorIndices)); - $indexStart = $prevIndex + 1; - - /** @var int $nextIndex */ - $nextIndex = $tokens->getNextMeaningfulToken(max($operatorIndices)); - $indexEnd = $nextIndex - 1; - - if (!$this->isMultiline($tokens, $indexStart, $indexEnd)) { - return; // operator is not surrounded by multiline whitespaces, do not touch it - } - - if ('beginning' === $this->position) { - if (!$this->isMultiline($tokens, max($operatorIndices), $indexEnd)) { - return; // operator already is placed correctly - } - $this->fixMoveToTheBeginning($tokens, $operatorIndices); - - return; - } - - if (!$this->isMultiline($tokens, $indexStart, min($operatorIndices))) { - return; // operator already is placed correctly - } - $this->fixMoveToTheEnd($tokens, $operatorIndices); - } - - /** - * @param int[] $operatorIndices - */ - private function fixMoveToTheBeginning(Tokens $tokens, array $operatorIndices): void - { - /** @var int $prevIndex */ - $prevIndex = $tokens->getNonEmptySibling(min($operatorIndices), -1); - - /** @var int $nextIndex */ - $nextIndex = $tokens->getNextMeaningfulToken(max($operatorIndices)); - - for ($i = $nextIndex - 1; $i > max($operatorIndices); --$i) { - if ($tokens[$i]->isWhitespace() && 1 === Preg::match('/\R/u', $tokens[$i]->getContent())) { - $isWhitespaceBefore = $tokens[$prevIndex]->isWhitespace(); - $inserts = $this->getReplacementsAndClear($tokens, $operatorIndices, -1); - if ($isWhitespaceBefore) { - $inserts[] = new Token([T_WHITESPACE, ' ']); - } - $tokens->insertAt($nextIndex, $inserts); - - break; - } - } - } - - /** - * @param int[] $operatorIndices - */ - private function fixMoveToTheEnd(Tokens $tokens, array $operatorIndices): void - { - /** @var int $prevIndex */ - $prevIndex = $tokens->getPrevMeaningfulToken(min($operatorIndices)); - - /** @var int $nextIndex */ - $nextIndex = $tokens->getNonEmptySibling(max($operatorIndices), 1); - - for ($i = $prevIndex + 1; $i < max($operatorIndices); ++$i) { - if ($tokens[$i]->isWhitespace() && 1 === Preg::match('/\R/u', $tokens[$i]->getContent())) { - $isWhitespaceAfter = $tokens[$nextIndex]->isWhitespace(); - $inserts = $this->getReplacementsAndClear($tokens, $operatorIndices, 1); - if ($isWhitespaceAfter) { - array_unshift($inserts, new Token([T_WHITESPACE, ' '])); - } - $tokens->insertAt($prevIndex + 1, $inserts); - - break; - } - } - } - - /** - * @param int[] $indices - * - * @return Token[] - */ - private function getReplacementsAndClear(Tokens $tokens, array $indices, int $direction): array - { - return array_map( - static function (int $index) use ($tokens, $direction): Token { - $clone = $tokens[$index]; - - if ($tokens[$index + $direction]->isWhitespace()) { - $tokens->clearAt($index + $direction); - } - - $tokens->clearAt($index); - - return $clone; - }, - $indices - ); - } - - private function isMultiline(Tokens $tokens, int $indexStart, int $indexEnd): bool - { - for ($index = $indexStart; $index <= $indexEnd; ++$index) { - if (str_contains($tokens[$index]->getContent(), "\n")) { - return true; - } - } - - return false; - } - - private static function getNonBooleanOperators(): array - { - return array_merge( - [ - '%', '&', '*', '+', '-', '.', '/', ':', '<', '=', '>', '?', '^', '|', - [T_AND_EQUAL], [T_CONCAT_EQUAL], [T_DIV_EQUAL], [T_DOUBLE_ARROW], [T_IS_EQUAL], [T_IS_GREATER_OR_EQUAL], - [T_IS_IDENTICAL], [T_IS_NOT_EQUAL], [T_IS_NOT_IDENTICAL], [T_IS_SMALLER_OR_EQUAL], [T_MINUS_EQUAL], - [T_MOD_EQUAL], [T_MUL_EQUAL], [T_OR_EQUAL], [T_PAAMAYIM_NEKUDOTAYIM], [T_PLUS_EQUAL], [T_POW], - [T_POW_EQUAL], [T_SL], [T_SL_EQUAL], [T_SR], [T_SR_EQUAL], [T_XOR_EQUAL], - [T_COALESCE], [T_SPACESHIP], - ], - array_map(static fn (int $id): array => [$id], Token::getObjectOperatorKinds()), - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php deleted file mode 100644 index 023332a9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeIncrementFixer.php +++ /dev/null @@ -1,130 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\Fixer\AbstractIncrementOperatorFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author ntzm - */ -final class StandardizeIncrementFixer extends AbstractIncrementOperatorFixer -{ - private const EXPRESSION_END_TOKENS = [ - ';', - ')', - ']', - ',', - ':', - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [T_CLOSE_TAG], - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Increment and decrement operators should be used if possible.', - [ - new CodeSample("isAnyTokenKindsFound([T_PLUS_EQUAL, T_MINUS_EQUAL]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = $tokens->count() - 1; $index > 0; --$index) { - $expressionEnd = $tokens[$index]; - if (!$expressionEnd->equalsAny(self::EXPRESSION_END_TOKENS)) { - continue; - } - - $numberIndex = $tokens->getPrevMeaningfulToken($index); - $number = $tokens[$numberIndex]; - if (!$number->isGivenKind(T_LNUMBER) || '1' !== $number->getContent()) { - continue; - } - - $operatorIndex = $tokens->getPrevMeaningfulToken($numberIndex); - $operator = $tokens[$operatorIndex]; - if (!$operator->isGivenKind([T_PLUS_EQUAL, T_MINUS_EQUAL])) { - continue; - } - - $startIndex = $this->findStart($tokens, $operatorIndex); - - $this->clearRangeLeaveComments( - $tokens, - $tokens->getPrevMeaningfulToken($operatorIndex) + 1, - $numberIndex - ); - - $tokens->insertAt( - $startIndex, - new Token($operator->isGivenKind(T_PLUS_EQUAL) ? [T_INC, '++'] : [T_DEC, '--']) - ); - } - } - - /** - * Clear tokens in the given range unless they are comments. - */ - private function clearRangeLeaveComments(Tokens $tokens, int $indexStart, int $indexEnd): void - { - for ($i = $indexStart; $i <= $indexEnd; ++$i) { - $token = $tokens[$i]; - - if ($token->isComment()) { - continue; - } - - if ($token->isWhitespace("\n\r")) { - continue; - } - - $tokens->clearAt($i); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php deleted file mode 100644 index fe5a73e4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/StandardizeNotEqualsFixer.php +++ /dev/null @@ -1,69 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class StandardizeNotEqualsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Replace all `<>` with `!=`.', - [new CodeSample(" \$c;\n")] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BinaryOperatorSpacesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_IS_NOT_EQUAL); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if ($token->isGivenKind(T_IS_NOT_EQUAL)) { - $tokens[$index] = new Token([T_IS_NOT_EQUAL, '!=']); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php deleted file mode 100644 index 0a0324bd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryOperatorSpacesFixer.php +++ /dev/null @@ -1,165 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\AlternativeSyntaxAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\SwitchAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\ControlCaseStructuresAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\GotoLabelAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class TernaryOperatorSpacesFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Standardize spaces around ternary operator.', - [new CodeSample("isAllTokenKindsFound(['?', ':']); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $alternativeSyntaxAnalyzer = new AlternativeSyntaxAnalyzer(); - $gotoLabelAnalyzer = new GotoLabelAnalyzer(); - $ternaryOperatorIndices = []; - $excludedIndices = $this->getColonIndicesForSwitch($tokens); - - foreach ($tokens as $index => $token) { - if (!$token->equalsAny(['?', ':'])) { - continue; - } - - if (\in_array($index, $excludedIndices, true)) { - continue; - } - - if ($alternativeSyntaxAnalyzer->belongsToAlternativeSyntax($tokens, $index)) { - continue; - } - - if ($gotoLabelAnalyzer->belongsToGoToLabel($tokens, $index)) { - continue; - } - - $ternaryOperatorIndices[] = $index; - } - - foreach (array_reverse($ternaryOperatorIndices) as $index) { - $token = $tokens[$index]; - - if ($token->equals('?')) { - $nextNonWhitespaceIndex = $tokens->getNextNonWhitespace($index); - - if ($tokens[$nextNonWhitespaceIndex]->equals(':')) { - // for `$a ?: $b` remove spaces between `?` and `:` - $tokens->ensureWhitespaceAtIndex($index + 1, 0, ''); - } else { - // for `$a ? $b : $c` ensure space after `?` - $this->ensureWhitespaceExistence($tokens, $index + 1, true); - } - - // for `$a ? $b : $c` ensure space before `?` - $this->ensureWhitespaceExistence($tokens, $index - 1, false); - - continue; - } - - if ($token->equals(':')) { - // for `$a ? $b : $c` ensure space after `:` - $this->ensureWhitespaceExistence($tokens, $index + 1, true); - - $prevNonWhitespaceToken = $tokens[$tokens->getPrevNonWhitespace($index)]; - - if (!$prevNonWhitespaceToken->equals('?')) { - // for `$a ? $b : $c` ensure space before `:` - $this->ensureWhitespaceExistence($tokens, $index - 1, false); - } - } - } - } - - /** - * @return int[] - */ - private function getColonIndicesForSwitch(Tokens $tokens): array - { - $colonIndices = []; - - /** @var SwitchAnalysis $analysis */ - foreach (ControlCaseStructuresAnalyzer::findControlStructures($tokens, [T_SWITCH]) as $analysis) { - foreach ($analysis->getCases() as $case) { - $colonIndices[] = $case->getColonIndex(); - } - - $defaultAnalysis = $analysis->getDefaultAnalysis(); - - if (null !== $defaultAnalysis) { - $colonIndices[] = $defaultAnalysis->getColonIndex(); - } - } - - return $colonIndices; - } - - private function ensureWhitespaceExistence(Tokens $tokens, int $index, bool $after): void - { - if ($tokens[$index]->isWhitespace()) { - if ( - !str_contains($tokens[$index]->getContent(), "\n") - && !$tokens[$index - 1]->isComment() - ) { - $tokens[$index] = new Token([T_WHITESPACE, ' ']); - } - - return; - } - - $index += $after ? 0 : 1; - $tokens->insertAt($index, new Token([T_WHITESPACE, ' '])); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php deleted file mode 100644 index 2cd7e9b9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToElvisOperatorFixer.php +++ /dev/null @@ -1,229 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\RangeAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -final class TernaryToElvisOperatorFixer extends AbstractFixer -{ - /** - * Lower precedence and other valid preceding tokens. - * - * Ordered by most common types first. - * - * @var list - */ - private const VALID_BEFORE_ENDTYPES = [ - '=', - [T_OPEN_TAG], - [T_OPEN_TAG_WITH_ECHO], - '(', - ',', - ';', - '[', - '{', - '}', - [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN], - [T_AND_EQUAL], // &= - [T_CONCAT_EQUAL], // .= - [T_DIV_EQUAL], // /= - [T_MINUS_EQUAL], // -= - [T_MOD_EQUAL], // %= - [T_MUL_EQUAL], // *= - [T_OR_EQUAL], // |= - [T_PLUS_EQUAL], // += - [T_POW_EQUAL], // **= - [T_SL_EQUAL], // <<= - [T_SR_EQUAL], // >>= - [T_XOR_EQUAL], // ^= - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Use the Elvis operator `?:` where possible.', - [ - new CodeSample( - "isTokenKindFound('?'); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $blockEdgeDefinitions = Tokens::getBlockEdgeDefinitions(); - - for ($index = \count($tokens) - 5; $index > 1; --$index) { - if (!$tokens[$index]->equals('?')) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextIndex]->equals(':')) { - continue; // Elvis is alive! - } - - // get and check what is before the `?` operator - - $beforeOperator = $this->getBeforeOperator($tokens, $index, $blockEdgeDefinitions); - - if (null === $beforeOperator) { - continue; // contains something we cannot fix because of priorities - } - - // get what is after the `?` token - - $afterOperator = $this->getAfterOperator($tokens, $index); - - // if before and after the `?` operator are the same (in meaningful matter), clear after - - if (RangeAnalyzer::rangeEqualsRange($tokens, $beforeOperator, $afterOperator)) { - $this->clearMeaningfulFromRange($tokens, $afterOperator); - } - } - } - - /** - * @return null|array{start: int, end: int} null if contains ++/-- operator - */ - private function getBeforeOperator(Tokens $tokens, int $index, array $blockEdgeDefinitions): ?array - { - $index = $tokens->getPrevMeaningfulToken($index); - $before = ['end' => $index]; - - while (!$tokens[$index]->equalsAny(self::VALID_BEFORE_ENDTYPES)) { - if ($tokens[$index]->isGivenKind([T_INC, T_DEC])) { - return null; - } - - $blockType = Tokens::detectBlockType($tokens[$index]); - - if (null === $blockType || $blockType['isStart']) { - $before['start'] = $index; - $index = $tokens->getPrevMeaningfulToken($index); - - continue; - } - - $blockType = $blockEdgeDefinitions[$blockType['type']]; - $openCount = 1; - - do { - $index = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind([T_INC, T_DEC])) { - return null; - } - - if ($tokens[$index]->equals($blockType['start'])) { - ++$openCount; - - continue; - } - - if ($tokens[$index]->equals($blockType['end'])) { - --$openCount; - } - } while (1 >= $openCount); - - $before['start'] = $index; - $index = $tokens->getPrevMeaningfulToken($index); - } - - if (!isset($before['start'])) { - return null; - } - - return $before; - } - - /** - * @return array{start: int, end: int} - */ - private function getAfterOperator(Tokens $tokens, int $index): array - { - $index = $tokens->getNextMeaningfulToken($index); - $after = ['start' => $index]; - - while (!$tokens[$index]->equals(':')) { - $blockType = Tokens::detectBlockType($tokens[$index]); - - if (null !== $blockType) { - $index = $tokens->findBlockEnd($blockType['type'], $index); - } - - $after['end'] = $index; - $index = $tokens->getNextMeaningfulToken($index); - } - - return $after; - } - - /** - * @param array{start: int, end: int} $range - */ - private function clearMeaningfulFromRange(Tokens $tokens, array $range): void - { - // $range['end'] must be meaningful! - for ($i = $range['end']; $i >= $range['start']; $i = $tokens->getPrevMeaningfulToken($i)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($i); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php deleted file mode 100644 index b5b5ea8c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/TernaryToNullCoalescingFixer.php +++ /dev/null @@ -1,227 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class TernaryToNullCoalescingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Use `null` coalescing operator `??` where possible. Requires PHP >= 7.0.', - [ - new CodeSample( - "isTokenKindFound(T_ISSET); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $issetIndices = array_keys($tokens->findGivenKind(T_ISSET)); - - while ($issetIndex = array_pop($issetIndices)) { - $this->fixIsset($tokens, $issetIndex); - } - } - - /** - * @param int $index of `T_ISSET` token - */ - private function fixIsset(Tokens $tokens, int $index): void - { - $prevTokenIndex = $tokens->getPrevMeaningfulToken($index); - - if ($this->isHigherPrecedenceAssociativityOperator($tokens[$prevTokenIndex])) { - return; - } - - $startBraceIndex = $tokens->getNextTokenOfKind($index, ['(']); - $endBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startBraceIndex); - - $ternaryQuestionMarkIndex = $tokens->getNextMeaningfulToken($endBraceIndex); - - if (!$tokens[$ternaryQuestionMarkIndex]->equals('?')) { - return; // we are not in a ternary operator - } - - // search what is inside the isset() - $issetTokens = $this->getMeaningfulSequence($tokens, $startBraceIndex, $endBraceIndex); - - if ($this->hasChangingContent($issetTokens)) { - return; // some weird stuff inside the isset - } - - // search what is inside the middle argument of ternary operator - $ternaryColonIndex = $tokens->getNextTokenOfKind($ternaryQuestionMarkIndex, [':']); - $ternaryFirstOperandTokens = $this->getMeaningfulSequence($tokens, $ternaryQuestionMarkIndex, $ternaryColonIndex); - - if ($issetTokens->generateCode() !== $ternaryFirstOperandTokens->generateCode()) { - return; // regardless of non-meaningful tokens, the operands are different - } - - $ternaryFirstOperandIndex = $tokens->getNextMeaningfulToken($ternaryQuestionMarkIndex); - - // preserve comments and spaces - $comments = []; - $commentStarted = false; - - for ($loopIndex = $index; $loopIndex < $ternaryFirstOperandIndex; ++$loopIndex) { - if ($tokens[$loopIndex]->isComment()) { - $comments[] = $tokens[$loopIndex]; - $commentStarted = true; - } elseif ($commentStarted) { - if ($tokens[$loopIndex]->isWhitespace()) { - $comments[] = $tokens[$loopIndex]; - } - - $commentStarted = false; - } - } - - $tokens[$ternaryColonIndex] = new Token([T_COALESCE, '??']); - $tokens->overrideRange($index, $ternaryFirstOperandIndex - 1, $comments); - } - - /** - * Get the sequence of meaningful tokens and returns a new Tokens instance. - * - * @param int $start start index - * @param int $end end index - */ - private function getMeaningfulSequence(Tokens $tokens, int $start, int $end): Tokens - { - $sequence = []; - $index = $start; - - while ($index < $end) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($index >= $end || null === $index) { - break; - } - - $sequence[] = $tokens[$index]; - } - - return Tokens::fromArray($sequence); - } - - /** - * Check if the requested token is an operator computed - * before the ternary operator along with the `isset()`. - */ - private function isHigherPrecedenceAssociativityOperator(Token $token): bool - { - static $operatorsPerId = [ - T_ARRAY_CAST => true, - T_BOOLEAN_AND => true, - T_BOOLEAN_OR => true, - T_BOOL_CAST => true, - T_COALESCE => true, - T_DEC => true, - T_DOUBLE_CAST => true, - T_INC => true, - T_INT_CAST => true, - T_IS_EQUAL => true, - T_IS_GREATER_OR_EQUAL => true, - T_IS_IDENTICAL => true, - T_IS_NOT_EQUAL => true, - T_IS_NOT_IDENTICAL => true, - T_IS_SMALLER_OR_EQUAL => true, - T_OBJECT_CAST => true, - T_POW => true, - T_SL => true, - T_SPACESHIP => true, - T_SR => true, - T_STRING_CAST => true, - T_UNSET_CAST => true, - ]; - - static $operatorsPerContent = [ - '!', - '%', - '&', - '*', - '+', - '-', - '/', - ':', - '^', - '|', - '~', - '.', - ]; - - return isset($operatorsPerId[$token->getId()]) || $token->equalsAny($operatorsPerContent); - } - - /** - * Check if the `isset()` content may change if called multiple times. - * - * @param Tokens $tokens The original token list - */ - private function hasChangingContent(Tokens $tokens): bool - { - static $operatorsPerId = [ - T_DEC, - T_INC, - T_YIELD, - T_YIELD_FROM, - ]; - - foreach ($tokens as $token) { - if ($token->isGivenKind($operatorsPerId) || $token->equals('(')) { - return true; - } - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php deleted file mode 100644 index c1558d7e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Operator/UnaryOperatorSpacesFixer.php +++ /dev/null @@ -1,81 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Operator; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gregor Harlan - */ -final class UnaryOperatorSpacesFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Unary operators should be placed adjacent to their operands.', - [new CodeSample("count() - 1; $index >= 0; --$index) { - if ($tokensAnalyzer->isUnarySuccessorOperator($index)) { - if (!$tokens[$tokens->getPrevNonWhitespace($index)]->isComment()) { - $tokens->removeLeadingWhitespace($index); - } - - continue; - } - - if ($tokensAnalyzer->isUnaryPredecessorOperator($index)) { - $tokens->removeTrailingWhitespace($index); - - continue; - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php deleted file mode 100644 index f6f7ab18..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/BlankLineAfterOpeningTagFixer.php +++ /dev/null @@ -1,102 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\PhpTag; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Ceeram - */ -final class BlankLineAfterOpeningTagFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Ensure there is no code on the same line as the PHP open tag and it is followed by a blank line.', - [new CodeSample("isTokenKindFound(T_OPEN_TAG); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - // ignore files with short open tag and ignore non-monolithic files - if (!$tokens[0]->isGivenKind(T_OPEN_TAG) || !$tokens->isMonolithicPhp()) { - return; - } - - $newlineFound = false; - - /** @var Token $token */ - foreach ($tokens as $token) { - if ($token->isWhitespace() && str_contains($token->getContent(), "\n")) { - $newlineFound = true; - - break; - } - } - - // ignore one-line files - if (!$newlineFound) { - return; - } - - $token = $tokens[0]; - - if (!str_contains($token->getContent(), "\n")) { - $tokens[0] = new Token([$token->getId(), rtrim($token->getContent()).$lineEnding]); - } - - if (!str_contains($tokens[1]->getContent(), "\n")) { - if ($tokens[1]->isWhitespace()) { - $tokens[1] = new Token([T_WHITESPACE, $lineEnding.$tokens[1]->getContent()]); - } else { - $tokens->insertAt(1, new Token([T_WHITESPACE, $lineEnding])); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php deleted file mode 100644 index e11cb6ab..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/EchoTagSyntaxFixer.php +++ /dev/null @@ -1,269 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\PhpTag; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Michele Locati - */ -final class EchoTagSyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** @internal */ - public const OPTION_FORMAT = 'format'; - - /** @internal */ - public const OPTION_SHORTEN_SIMPLE_STATEMENTS_ONLY = 'shorten_simple_statements_only'; - - /** @internal */ - public const OPTION_LONG_FUNCTION = 'long_function'; - - /** @internal */ - public const FORMAT_SHORT = 'short'; - - /** @internal */ - public const FORMAT_LONG = 'long'; - - /** @internal */ - public const LONG_FUNCTION_ECHO = 'echo'; - - /** @internal */ - public const LONG_FUNCTION_PRINT = 'print'; - - private const SUPPORTED_FORMAT_OPTIONS = [ - self::FORMAT_LONG, - self::FORMAT_SHORT, - ]; - - private const SUPPORTED_LONGFUNCTION_OPTIONS = [ - self::LONG_FUNCTION_ECHO, - self::LONG_FUNCTION_PRINT, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $sample = <<<'EOT' - - - - - -EOT - ; - - return new FixerDefinition( - 'Replaces short-echo ` self::FORMAT_LONG]), - new CodeSample($sample, [self::OPTION_FORMAT => self::FORMAT_LONG, self::OPTION_LONG_FUNCTION => self::LONG_FUNCTION_PRINT]), - new CodeSample($sample, [self::OPTION_FORMAT => self::FORMAT_SHORT]), - new CodeSample($sample, [self::OPTION_FORMAT => self::FORMAT_SHORT, self::OPTION_SHORTEN_SIMPLE_STATEMENTS_ONLY => false]), - ], - null - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoMixedEchoPrintFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - if (self::FORMAT_SHORT === $this->configuration[self::OPTION_FORMAT]) { - return $tokens->isAnyTokenKindsFound([T_ECHO, T_PRINT]); - } - - return $tokens->isTokenKindFound(T_OPEN_TAG_WITH_ECHO); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder(self::OPTION_FORMAT, 'The desired language construct.')) - ->setAllowedValues(self::SUPPORTED_FORMAT_OPTIONS) - ->setDefault(self::FORMAT_LONG) - ->getOption(), - (new FixerOptionBuilder(self::OPTION_LONG_FUNCTION, 'The function to be used to expand the short echo tags')) - ->setAllowedValues(self::SUPPORTED_LONGFUNCTION_OPTIONS) - ->setDefault(self::LONG_FUNCTION_ECHO) - ->getOption(), - (new FixerOptionBuilder(self::OPTION_SHORTEN_SIMPLE_STATEMENTS_ONLY, 'Render short-echo tags only in case of simple code')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (self::FORMAT_SHORT === $this->configuration[self::OPTION_FORMAT]) { - $this->longToShort($tokens); - } else { - $this->shortToLong($tokens); - } - } - - private function longToShort(Tokens $tokens): void - { - $count = $tokens->count(); - - for ($index = 0; $index < $count; ++$index) { - if (!$tokens[$index]->isGivenKind(T_OPEN_TAG)) { - continue; - } - - $nextMeaningful = $tokens->getNextMeaningfulToken($index); - - if (null === $nextMeaningful) { - return; - } - - if (!$tokens[$nextMeaningful]->isGivenKind([T_ECHO, T_PRINT])) { - $index = $nextMeaningful; - - continue; - } - - if (true === $this->configuration[self::OPTION_SHORTEN_SIMPLE_STATEMENTS_ONLY] && $this->isComplexCode($tokens, $nextMeaningful + 1)) { - $index = $nextMeaningful; - - continue; - } - - $newTokens = $this->buildLongToShortTokens($tokens, $index, $nextMeaningful); - $tokens->overrideRange($index, $nextMeaningful, $newTokens); - $count = $tokens->count(); - } - } - - private function shortToLong(Tokens $tokens): void - { - if (self::LONG_FUNCTION_PRINT === $this->configuration[self::OPTION_LONG_FUNCTION]) { - $echoToken = [T_PRINT, 'print']; - } else { - $echoToken = [T_ECHO, 'echo']; - } - - $index = -1; - - while (true) { - $index = $tokens->getNextTokenOfKind($index, [[T_OPEN_TAG_WITH_ECHO]]); - - if (null === $index) { - return; - } - - $replace = [new Token([T_OPEN_TAG, 'isWhitespace()) { - $replace[] = new Token([T_WHITESPACE, ' ']); - } - - $tokens->overrideRange($index, $index, $replace); - ++$index; - } - } - - /** - * Check if $tokens, starting at $index, contains "complex code", that is, the content - * of the echo tag contains more than a simple "echo something". - * - * This is done by a very quick test: if the tag contains non-whitespace tokens after - * a semicolon, we consider it as "complex". - * - * @example `` is false (not complex) - * @example `` is false (not "complex") - * @example `` is true ("complex") - */ - private function isComplexCode(Tokens $tokens, int $index): bool - { - $semicolonFound = false; - - for ($count = $tokens->count(); $index < $count; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_CLOSE_TAG)) { - return false; - } - - if (';' === $token->getContent()) { - $semicolonFound = true; - } elseif ($semicolonFound && !$token->isWhitespace()) { - return true; - } - } - - return false; - } - - /** - * Builds the list of tokens that replace a long echo sequence. - * - * @return Token[] - */ - private function buildLongToShortTokens(Tokens $tokens, int $openTagIndex, int $echoTagIndex): array - { - $result = [new Token([T_OPEN_TAG_WITH_ECHO, 'getNextNonWhitespace($openTagIndex); - - if ($start === $echoTagIndex) { - // No non-whitespace tokens between $openTagIndex and $echoTagIndex - return $result; - } - - // Find the last non-whitespace index before $echoTagIndex - $end = $echoTagIndex - 1; - - while ($tokens[$end]->isWhitespace()) { - --$end; - } - - // Copy the non-whitespace tokens between $openTagIndex and $echoTagIndex - for ($index = $start; $index <= $end; ++$index) { - $result[] = clone $tokens[$index]; - } - - return $result; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php deleted file mode 100644 index 2fc80bc5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php +++ /dev/null @@ -1,135 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\PhpTag; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR1 ¶2.1. - * - * @author Dariusz Rumiński - */ -final class FullOpeningTagFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHP code must use the long `generateCode(); - - // replace all echo ' echo ' $token) { - if ($token->isGivenKind(T_OPEN_TAG)) { - $tokenContent = $token->getContent(); - $possibleOpenContent = substr($content, $tokensOldContentLength, 5); - - if (false === $possibleOpenContent || 'isGivenKind([T_COMMENT, T_DOC_COMMENT, T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE, T_STRING])) { - $tokenContent = ''; - $tokenContentLength = 0; - $parts = explode('getContent()); - $iLast = \count($parts) - 1; - - foreach ($parts as $i => $part) { - $tokenContent .= $part; - $tokenContentLength += \strlen($part); - - if ($i !== $iLast) { - $originalTokenContent = substr($content, $tokensOldContentLength + $tokenContentLength, 5); - if ('getId(), $tokenContent]); - $token = $newTokens[$index]; - } - - $tokensOldContentLength += \strlen($token->getContent()); - } - - $tokens->overrideRange(0, $tokens->count() - 1, $newTokens); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php deleted file mode 100644 index 74727d10..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php +++ /dev/null @@ -1,80 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\PhpTag; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Ceeram - */ -final class LinebreakAfterOpeningTagFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Ensure there is no code on the same line as the PHP open tag.', - [new CodeSample("isTokenKindFound(T_OPEN_TAG); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // ignore files with short open tag and ignore non-monolithic files - if (!$tokens[0]->isGivenKind(T_OPEN_TAG) || !$tokens->isMonolithicPhp()) { - return; - } - - // ignore if linebreak already present - if (str_contains($tokens[0]->getContent(), "\n")) { - return; - } - - $newlineFound = false; - foreach ($tokens as $token) { - if ($token->isWhitespace() && str_contains($token->getContent(), "\n")) { - $newlineFound = true; - - break; - } - } - - // ignore one-line files - if (!$newlineFound) { - return; - } - - $tokens[0] = new Token([T_OPEN_TAG, rtrim($tokens[0]->getContent()).$this->whitespacesConfig->getLineEnding()]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php deleted file mode 100644 index ff1e00be..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php +++ /dev/null @@ -1,72 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\PhpTag; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.2. - * - * @author Dariusz Rumiński - */ -final class NoClosingTagFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The closing `?>` tag MUST be omitted from files containing only PHP.', - [new CodeSample("\n")] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_CLOSE_TAG); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (\count($tokens) < 2 || !$tokens->isMonolithicPhp() || !$tokens->isTokenKindFound(T_CLOSE_TAG)) { - return; - } - - $closeTags = $tokens->findGivenKind(T_CLOSE_TAG); - $index = key($closeTags); - - if (isset($tokens[$index - 1]) && $tokens[$index - 1]->isWhitespace()) { - $tokens->clearAt($index - 1); - } - $tokens->clearAt($index); - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$prevIndex]->equalsAny([';', '}', [T_OPEN_TAG]])) { - $tokens->insertAt($prevIndex + 1, new Token(';')); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php deleted file mode 100644 index 16872747..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/AlignMultilineCommentFixer.php +++ /dev/null @@ -1,182 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - * @author Julien Falque - */ -final class AlignMultilineCommentFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @var null|int[] - */ - private $tokenKinds; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->tokenKinds = [T_DOC_COMMENT]; - if ('phpdocs_only' !== $this->configuration['comment_type']) { - $this->tokenKinds[] = T_COMMENT; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Each line of multi-line DocComments must have an asterisk [PSR-5] and must be aligned with the first one.', - [ - new CodeSample( - ' 'phpdocs_like'] - ), - new CodeSample( - ' 'all_multiline'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before CommentToPhpdocFixer, GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocAnnotationWithoutDotFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer. - * Must run after ArrayIndentationFixer. - */ - public function getPriority(): int - { - return 27; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound($this->tokenKinds); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind($this->tokenKinds)) { - continue; - } - - $whitespace = ''; - $previousIndex = $index - 1; - - if ($tokens[$previousIndex]->isWhitespace()) { - $whitespace = $tokens[$previousIndex]->getContent(); - --$previousIndex; - } - - if ($tokens[$previousIndex]->isGivenKind(T_OPEN_TAG)) { - $whitespace = Preg::replace('/\S/', '', $tokens[$previousIndex]->getContent()).$whitespace; - } - - if (1 !== Preg::match('/\R(\h*)$/', $whitespace, $matches)) { - continue; - } - - if ($token->isGivenKind(T_COMMENT) && 'all_multiline' !== $this->configuration['comment_type'] && 1 === Preg::match('/\R(?:\R|\s*[^\s\*])/', $token->getContent())) { - continue; - } - - $indentation = $matches[1]; - $lines = Preg::split('/\R/u', $token->getContent()); - - foreach ($lines as $lineNumber => $line) { - if (0 === $lineNumber) { - continue; - } - - $line = ltrim($line); - - if ($token->isGivenKind(T_COMMENT) && (!isset($line[0]) || '*' !== $line[0])) { - continue; - } - - if (!isset($line[0])) { - $line = '*'; - } elseif ('*' !== $line[0]) { - $line = '* '.$line; - } - - $lines[$lineNumber] = $indentation.' '.$line; - } - - $tokens[$index] = new Token([$token->getId(), implode($lineEnding, $lines)]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('comment_type', 'Whether to fix PHPDoc comments only (`phpdocs_only`), any multi-line comment whose lines all start with an asterisk (`phpdocs_like`) or any multi-line comment (`all_multiline`).')) - ->setAllowedValues(['phpdocs_only', 'phpdocs_like', 'all_multiline']) - ->setDefault('phpdocs_only') - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php deleted file mode 100644 index f8b7211a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocAnnotationRemoveFixer.php +++ /dev/null @@ -1,176 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class GeneralPhpdocAnnotationRemoveFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Configured annotations should be omitted from PHPDoc.', - [ - new CodeSample( - ' ['author']] - ), - new CodeSample( - ' ['author'], 'case_sensitive' => false] - ), - new CodeSample( - ' ['package', 'subpackage']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoEmptyPhpdocFixer, PhpdocAlignFixer, PhpdocLineSpanFixer, PhpdocSeparationFixer, PhpdocTrimFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (0 === \count($this->configuration['annotations'])) { - return; - } - - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $annotations = $this->getAnnotationsToRemove($doc); - - // nothing to do if there are no annotations - if (0 === \count($annotations)) { - continue; - } - - foreach ($annotations as $annotation) { - $annotation->remove(); - } - - if ('' === $doc->getContent()) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } else { - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('annotations', 'List of annotations to remove, e.g. `["author"]`.')) - ->setAllowedTypes(['array']) - ->setDefault([]) - ->getOption(), - (new FixerOptionBuilder('case_sensitive', 'Should annotations be case sensitive.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } - - /** - * @return list - */ - private function getAnnotationsToRemove(DocBlock $doc): array - { - if (true === $this->configuration['case_sensitive']) { - return $doc->getAnnotationsOfType($this->configuration['annotations']); - } - - $typesToSearchFor = array_map(function (string $type): string { - return strtolower($type); - }, $this->configuration['annotations']); - - $annotations = []; - - foreach ($doc->getAnnotations() as $annotation) { - $tagName = strtolower($annotation->getTag()->getName()); - if (\in_array($tagName, $typesToSearchFor, true)) { - $annotations[] = $annotation; - } - } - - return $annotations; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php deleted file mode 100644 index b2948be3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/GeneralPhpdocTagRenameFixer.php +++ /dev/null @@ -1,213 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\OptionsResolver\Options; - -final class GeneralPhpdocTagRenameFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Renames PHPDoc tags.', - [ - new CodeSample(" [ - 'inheritDocs' => 'inheritDoc', - ], - ]), - new CodeSample(" [ - 'inheritDocs' => 'inheritDoc', - ], - 'fix_annotation' => false, - ]), - new CodeSample(" [ - 'inheritDocs' => 'inheritDoc', - ], - 'fix_inline' => false, - ]), - new CodeSample(" [ - 'inheritDocs' => 'inheritDoc', - ], - 'case_sensitive' => true, - ]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - // must be run before PhpdocAddMissingParamAnnotationFixer - return 11; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('fix_annotation', 'Whether annotation tags should be fixed.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('fix_inline', 'Whether inline tags should be fixed.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('replacements', 'A map of tags to replace.')) - ->setAllowedTypes(['array']) - ->setNormalizer(static function (Options $options, $value): array { - $normalizedValue = []; - - foreach ($value as $from => $to) { - if (!\is_string($from)) { - throw new InvalidOptionsException('Tag to replace must be a string.'); - } - - if (!\is_string($to)) { - throw new InvalidOptionsException(sprintf( - 'Tag to replace to from "%s" must be a string.', - $from - )); - } - - if (1 !== Preg::match('#^\S+$#', $to) || str_contains($to, '*/')) { - throw new InvalidOptionsException(sprintf( - 'Tag "%s" cannot be replaced by invalid tag "%s".', - $from, - $to - )); - } - - $from = trim($from); - $to = trim($to); - - if (!$options['case_sensitive']) { - $lowercaseFrom = strtolower($from); - - if (isset($normalizedValue[$lowercaseFrom]) && $normalizedValue[$lowercaseFrom] !== $to) { - throw new InvalidOptionsException(sprintf( - 'Tag "%s" cannot be configured to be replaced with several different tags when case sensitivity is off.', - $from - )); - } - - $from = $lowercaseFrom; - } - - $normalizedValue[$from] = $to; - } - - foreach ($normalizedValue as $from => $to) { - if (isset($normalizedValue[$to]) && $normalizedValue[$to] !== $to) { - throw new InvalidOptionsException(sprintf( - 'Cannot change tag "%1$s" to tag "%2$s", as the tag "%2$s" is configured to be replaced to "%3$s".', - $from, - $to, - $normalizedValue[$to] - )); - } - } - - return $normalizedValue; - }) - ->setDefault([]) - ->getOption(), - (new FixerOptionBuilder('case_sensitive', 'Whether tags should be replaced only if they have exact same casing.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (0 === \count($this->configuration['replacements'])) { - return; - } - - if (true === $this->configuration['fix_annotation']) { - if ($this->configuration['fix_inline']) { - $regex = '/"[^"]*"(*SKIP)(*FAIL)|\b(?<=@)(%s)\b/'; - } else { - $regex = '/"[^"]*"(*SKIP)(*FAIL)|(?configuration['case_sensitive']; - $replacements = $this->configuration['replacements']; - $regex = sprintf($regex, implode('|', array_keys($replacements))); - - if ($caseInsensitive) { - $regex .= 'i'; - } - - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $tokens[$index] = new Token([T_DOC_COMMENT, Preg::replaceCallback( - $regex, - static function (array $matches) use ($caseInsensitive, $replacements) { - if ($caseInsensitive) { - $matches[1] = strtolower($matches[1]); - } - - return $replacements[$matches[1]]; - }, - $token->getContent() - )]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php deleted file mode 100644 index ec3dadda..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoBlankLinesAfterPhpdocFixer.php +++ /dev/null @@ -1,115 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class NoBlankLinesAfterPhpdocFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be blank lines between docblock and the documented element.', - [ - new CodeSample( - ' $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - // get the next non-whitespace token inc comments, provided - // that there is whitespace between it and the current token - $next = $tokens->getNextNonWhitespace($index); - if ($index + 2 === $next && false === $tokens[$next]->isGivenKind($forbiddenSuccessors)) { - $this->fixWhitespace($tokens, $index + 1); - } - } - } - - /** - * Cleanup a whitespace token. - */ - private function fixWhitespace(Tokens $tokens, int $index): void - { - $content = $tokens[$index]->getContent(); - // if there is more than one new line in the whitespace, then we need to fix it - if (substr_count($content, "\n") > 1) { - // the final bit of the whitespace must be the next statement's indentation - $tokens[$index] = new Token([T_WHITESPACE, substr($content, strrpos($content, "\n"))]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php deleted file mode 100644 index 843bf01d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoEmptyPhpdocFixer.php +++ /dev/null @@ -1,71 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoEmptyPhpdocFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be empty PHPDoc blocks.', - [new CodeSample("isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - if (Preg::match('#^/\*\*[\s\*]*\*/$#', $token->getContent())) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php deleted file mode 100644 index b8cfdf89..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/NoSuperfluousPhpdocTagsFixer.php +++ /dev/null @@ -1,667 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\TypeExpression; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class NoSuperfluousPhpdocTagsFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const NO_TYPE_INFO = [ - 'types' => [], - 'allows_null' => true, - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes `@param`, `@return` and `@var` tags that don\'t provide any useful information.', - [ - new CodeSample(' true]), - new CodeSample(' true]), - new CodeSample(' true]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoEmptyPhpdocFixer, PhpdocAlignFixer, VoidReturnFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, FullyQualifiedStrictTypesFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocIndentFixer, PhpdocLineSpanFixer, PhpdocReturnSelfReferenceFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 6; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - $namespaceUseAnalyzer = new NamespaceUsesAnalyzer(); - $shortNames = []; - $currentSymbol = null; - $currentSymbolEndIndex = null; - - foreach ($namespaceUseAnalyzer->getDeclarationsFromTokens($tokens) as $namespaceUseAnalysis) { - $shortNames[strtolower($namespaceUseAnalysis->getShortName())] = '\\'.strtolower($namespaceUseAnalysis->getFullName()); - } - - $symbolKinds = [T_CLASS, T_INTERFACE]; - if (\defined('T_ENUM')) { // @TODO drop the condition when requiring PHP 8.1+ - $symbolKinds[] = T_ENUM; - } - - foreach ($tokens as $index => $token) { - if ($index === $currentSymbolEndIndex) { - $currentSymbol = null; - $currentSymbolEndIndex = null; - - continue; - } - - if ($token->isGivenKind(T_CLASS) && $tokensAnalyzer->isAnonymousClass($index)) { - continue; - } - - if ($token->isGivenKind($symbolKinds)) { - $currentSymbol = $tokens[$tokens->getNextMeaningfulToken($index)]->getContent(); - $currentSymbolEndIndex = $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_CURLY_BRACE, - $tokens->getNextTokenOfKind($index, ['{']), - ); - - continue; - } - - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $documentedElement = $this->findDocumentedElement($tokens, $index); - - if (null === $documentedElement) { - continue; - } - - $content = $initialContent = $token->getContent(); - - if (true === $this->configuration['remove_inheritdoc']) { - $content = $this->removeSuperfluousInheritDoc($content); - } - - if ('function' === $documentedElement['type']) { - $content = $this->fixFunctionDocComment($content, $tokens, $documentedElement, $currentSymbol, $shortNames); - } elseif ('property' === $documentedElement['type']) { - $content = $this->fixPropertyDocComment($content, $tokens, $documentedElement, $currentSymbol, $shortNames); - } elseif ('classy' === $documentedElement['type']) { - $content = $this->fixClassDocComment($content, $documentedElement); - } else { - throw new \RuntimeException('Unknown type.'); - } - - if ('' === $content) { - $content = '/** */'; - } - - if ($content !== $initialContent) { - $tokens[$index] = new Token([T_DOC_COMMENT, $content]); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('allow_mixed', 'Whether type `mixed` without description is allowed (`true`) or considered superfluous (`false`)')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('remove_inheritdoc', 'Remove `@inheritDoc` tags')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('allow_unused_params', 'Whether `param` annotation without actual signature is allowed (`true`) or considered superfluous (`false`)')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * @return null|array{ - * index: int, - * type: 'classy'|'function'|'property', - * modifiers: array, - * types: array, - * } - */ - private function findDocumentedElement(Tokens $tokens, int $docCommentIndex): ?array - { - $modifierKinds = [ - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_ABSTRACT, - T_FINAL, - T_STATIC, - ]; - - $typeKinds = [ - CT::T_NULLABLE_TYPE, - CT::T_ARRAY_TYPEHINT, - CT::T_TYPE_ALTERNATION, - CT::T_TYPE_INTERSECTION, - T_STRING, - T_NS_SEPARATOR, - ]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $modifierKinds[] = T_READONLY; - } - - $element = [ - 'modifiers' => [], - 'types' => [], - ]; - - $index = $tokens->getNextMeaningfulToken($docCommentIndex); - - // @TODO: drop condition when PHP 8.0+ is required - if (null !== $index && \defined('T_ATTRIBUTE') && $tokens[$index]->isGivenKind(T_ATTRIBUTE)) { - do { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ATTRIBUTE, $index); - $index = $tokens->getNextMeaningfulToken($index); - } while (null !== $index && $tokens[$index]->isGivenKind(T_ATTRIBUTE)); - } - - while (true) { - if (null === $index) { - break; - } - - if ($tokens[$index]->isClassy()) { - $element['index'] = $index; - $element['type'] = 'classy'; - - return $element; - } - - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $element['index'] = $index; - $element['type'] = 'function'; - - return $element; - } - - if ($tokens[$index]->isGivenKind(T_VARIABLE)) { - $element['index'] = $index; - $element['type'] = 'property'; - - return $element; - } - - if ($tokens[$index]->isGivenKind($modifierKinds)) { - $element['modifiers'][$index] = $tokens[$index]; - } elseif ($tokens[$index]->isGivenKind($typeKinds)) { - $element['types'][$index] = $tokens[$index]; - } else { - break; - } - - $index = $tokens->getNextMeaningfulToken($index); - } - - return null; - } - - /** - * @param array{ - * index: int, - * type: 'function', - * modifiers: array, - * types: array, - * } $element - * @param array $shortNames - */ - private function fixFunctionDocComment( - string $content, - Tokens $tokens, - array $element, - ?string $currentSymbol, - array $shortNames - ): string { - $docBlock = new DocBlock($content); - - $openingParenthesisIndex = $tokens->getNextTokenOfKind($element['index'], ['(']); - $closingParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openingParenthesisIndex); - - $argumentsInfo = $this->getArgumentsInfo( - $tokens, - $openingParenthesisIndex + 1, - $closingParenthesisIndex - 1 - ); - - foreach ($docBlock->getAnnotationsOfType('param') as $annotation) { - $argumentName = $annotation->getVariableName(); - - if (null === $argumentName) { - if ($this->annotationIsSuperfluous($annotation, self::NO_TYPE_INFO, $currentSymbol, $shortNames)) { - $annotation->remove(); - } - - continue; - } - - if (!isset($argumentsInfo[$argumentName]) && true === $this->configuration['allow_unused_params']) { - continue; - } - - if (!isset($argumentsInfo[$argumentName]) || $this->annotationIsSuperfluous($annotation, $argumentsInfo[$argumentName], $currentSymbol, $shortNames)) { - $annotation->remove(); - } - } - - $returnTypeInfo = $this->getReturnTypeInfo($tokens, $closingParenthesisIndex); - - foreach ($docBlock->getAnnotationsOfType('return') as $annotation) { - if ($this->annotationIsSuperfluous($annotation, $returnTypeInfo, $currentSymbol, $shortNames)) { - $annotation->remove(); - } - } - - $this->removeSuperfluousModifierAnnotation($docBlock, $element); - - return $docBlock->getContent(); - } - - /** - * @param array{ - * index: int, - * type: 'property', - * modifiers: array, - * types: array, - * } $element - * @param array $shortNames - */ - private function fixPropertyDocComment( - string $content, - Tokens $tokens, - array $element, - ?string $currentSymbol, - array $shortNames - ): string { - if (\count($element['types']) > 0) { - $propertyTypeInfo = $this->parseTypeHint($tokens, array_key_first($element['types'])); - } else { - $propertyTypeInfo = self::NO_TYPE_INFO; - } - - $docBlock = new DocBlock($content); - - foreach ($docBlock->getAnnotationsOfType('var') as $annotation) { - if ($this->annotationIsSuperfluous($annotation, $propertyTypeInfo, $currentSymbol, $shortNames)) { - $annotation->remove(); - } - } - - return $docBlock->getContent(); - } - - /** - * @param array{ - * index: int, - * type: 'classy', - * modifiers: array, - * types: array, - * } $element - */ - private function fixClassDocComment(string $content, array $element): string - { - $docBlock = new DocBlock($content); - - $this->removeSuperfluousModifierAnnotation($docBlock, $element); - - return $docBlock->getContent(); - } - - /** - * @return array, allows_null: bool}> - */ - private function getArgumentsInfo(Tokens $tokens, int $start, int $end): array - { - $argumentsInfo = []; - - for ($index = $start; $index <= $end; ++$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_VARIABLE)) { - continue; - } - - $beforeArgumentIndex = $tokens->getPrevTokenOfKind($index, ['(', ',']); - $typeIndex = $tokens->getNextMeaningfulToken($beforeArgumentIndex); - - if ($typeIndex !== $index) { - $info = $this->parseTypeHint($tokens, $typeIndex); - } else { - $info = self::NO_TYPE_INFO; - } - - if (!$info['allows_null']) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - if ( - $tokens[$nextIndex]->equals('=') - && $tokens[$tokens->getNextMeaningfulToken($nextIndex)]->equals([T_STRING, 'null'], false) - ) { - $info['allows_null'] = true; - } - } - - $argumentsInfo[$token->getContent()] = $info; - } - - return $argumentsInfo; - } - - /** - * @return array{types: list, allows_null: bool} - */ - private function getReturnTypeInfo(Tokens $tokens, int $closingParenthesisIndex): array - { - $colonIndex = $tokens->getNextMeaningfulToken($closingParenthesisIndex); - - return $tokens[$colonIndex]->isGivenKind(CT::T_TYPE_COLON) - ? $this->parseTypeHint($tokens, $tokens->getNextMeaningfulToken($colonIndex)) - : self::NO_TYPE_INFO - ; - } - - /** - * @param int $index The index of the first token of the type hint - * - * @return array{types: list, allows_null: bool} - */ - private function parseTypeHint(Tokens $tokens, int $index): array - { - $allowsNull = false; - - $types = []; - - while (true) { - $type = ''; - - if (\defined('T_READONLY') && $tokens[$index]->isGivenKind(T_READONLY)) { // @TODO: simplify condition when PHP 8.1+ is required - $index = $tokens->getNextMeaningfulToken($index); - } - - if ($tokens[$index]->isGivenKind([CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE])) { - $index = $tokens->getNextMeaningfulToken($index); - - continue; - } - - if ($tokens[$index]->isGivenKind(CT::T_NULLABLE_TYPE)) { - $allowsNull = true; - $index = $tokens->getNextMeaningfulToken($index); - } - - while ($tokens[$index]->isGivenKind([T_NS_SEPARATOR, T_STATIC, T_STRING, CT::T_ARRAY_TYPEHINT, T_CALLABLE])) { - $type .= $tokens[$index]->getContent(); - $index = $tokens->getNextMeaningfulToken($index); - } - - if ('' === $type) { - break; - } - - $types[] = $type; - - if (!$tokens[$index]->isGivenKind([CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION])) { - break; - } - - $index = $tokens->getNextMeaningfulToken($index); - } - - return [ - 'types' => $types, - 'allows_null' => $allowsNull, - ]; - } - - /** - * @param array $symbolShortNames - */ - private function annotationIsSuperfluous( - Annotation $annotation, - array $info, - ?string $currentSymbol, - array $symbolShortNames - ): bool { - if ('param' === $annotation->getTag()->getName()) { - $regex = '{@param(?:\s+'.TypeExpression::REGEX_TYPES.')?(?:\s+(?:\&\s*)?(?:\.{3}\s*)?\$\S+)?(?:\s+(?(?!\*+\/)\S+))?}sx'; - } elseif ('var' === $annotation->getTag()->getName()) { - $regex = '{@var(?:\s+'.TypeExpression::REGEX_TYPES.')?(?:\s+\$\S+)?(?:\s+(?(?!\*\/)\S+))?}sx'; - } else { - $regex = '{@return(?:\s+'.TypeExpression::REGEX_TYPES.')?(?:\s+(?(?!\*\/)\S+))?}sx'; - } - - if (1 !== Preg::match($regex, $annotation->getContent(), $matches)) { - // Unable to match the annotation, it must be malformed or has unsupported format. - // Either way we don't want to tinker with it. - return false; - } - - if (isset($matches['description'])) { - return false; - } - - if (!isset($matches['types']) || '' === $matches['types']) { - // If there's no type info in the annotation, further checks make no sense, exit early. - return true; - } - - $annotationTypes = $this->toComparableNames($annotation->getTypes(), $currentSymbol, $symbolShortNames); - - if (['null'] === $annotationTypes) { - return false; - } - - if (['mixed'] === $annotationTypes && [] === $info['types']) { - return false === $this->configuration['allow_mixed']; - } - - $actualTypes = $info['types']; - - if ($info['allows_null']) { - $actualTypes[] = 'null'; - } - - return $annotationTypes === $this->toComparableNames($actualTypes, $currentSymbol, $symbolShortNames); - } - - /** - * Normalizes types to make them comparable. - * - * Converts given types to lowercase, replaces imports aliases with - * their matching FQCN, and finally sorts the result. - * - * @param string[] $types The types to normalize - * @param array $symbolShortNames The imports aliases - * - * @return array The normalized types - */ - private function toComparableNames(array $types, ?string $currentSymbol, array $symbolShortNames): array - { - $normalized = array_map( - static function (string $type) use ($currentSymbol, $symbolShortNames): string { - if ('self' === $type && null !== $currentSymbol) { - $type = $currentSymbol; - } - - $type = strtolower($type); - - if (str_contains($type, '&')) { - $intersects = explode('&', $type); - sort($intersects); - - return implode('&', $intersects); - } - - return $symbolShortNames[$type] ?? $type; - }, - $types - ); - - sort($normalized); - - return $normalized; - } - - private function removeSuperfluousInheritDoc(string $docComment): string - { - return Preg::replace('~ - # $1: before @inheritDoc tag - ( - # beginning of comment or a PHPDoc tag - (?: - ^/\*\* - (?: - \R - [ \t]*(?:\*[ \t]*)? - )*? - | - @\N+ - ) - - # empty comment lines - (?: - \R - [ \t]*(?:\*[ \t]*?)? - )* - ) - - # spaces before @inheritDoc tag - [ \t]* - - # @inheritDoc tag - (?:@inheritDocs?|\{@inheritDocs?\}) - - # $2: after @inheritDoc tag - ( - # empty comment lines - (?: - \R - [ \t]*(?:\*[ \t]*)? - )* - - # a PHPDoc tag or end of comment - (?: - @\N+ - | - (?: - \R - [ \t]*(?:\*[ \t]*)? - )* - [ \t]*\*/$ - ) - ) - ~ix', '$1$2', $docComment); - } - - private function removeSuperfluousModifierAnnotation(DocBlock $docBlock, array $element): void - { - foreach (['abstract' => T_ABSTRACT, 'final' => T_FINAL] as $annotationType => $modifierToken) { - $annotations = $docBlock->getAnnotationsOfType($annotationType); - - foreach ($element['modifiers'] as $token) { - if ($token->isGivenKind($modifierToken)) { - foreach ($annotations as $annotation) { - $annotation->remove(); - } - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php deleted file mode 100644 index 8ac425b5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAddMissingParamAnnotationFixer.php +++ /dev/null @@ -1,279 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\Line; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class PhpdocAddMissingParamAnnotationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHPDoc should contain `@param` for all params.', - [ - new CodeSample( - ' true] - ), - new CodeSample( - ' false] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer, PhpdocOrderFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, GeneralPhpdocTagRenameFixer, PhpdocIndentFixer, PhpdocNoAliasTagFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $argumentsAnalyzer = new ArgumentsAnalyzer(); - - for ($index = 0, $limit = $tokens->count(); $index < $limit; ++$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $tokenContent = $token->getContent(); - - if (false !== stripos($tokenContent, 'inheritdoc')) { - continue; - } - - // ignore one-line phpdocs like `/** foo */`, as there is no place to put new annotations - if (!str_contains($tokenContent, "\n")) { - continue; - } - - $mainIndex = $index; - $index = $tokens->getNextMeaningfulToken($index); - - if (null === $index) { - return; - } - - while ($tokens[$index]->isGivenKind([ - T_ABSTRACT, - T_FINAL, - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_STATIC, - T_VAR, - ])) { - $index = $tokens->getNextMeaningfulToken($index); - } - - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - continue; - } - - $openIndex = $tokens->getNextTokenOfKind($index, ['(']); - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - - $arguments = []; - - foreach ($argumentsAnalyzer->getArguments($tokens, $openIndex, $index) as $start => $end) { - $argumentInfo = $this->prepareArgumentInformation($tokens, $start, $end); - - if (false === $this->configuration['only_untyped'] || '' === $argumentInfo['type']) { - $arguments[$argumentInfo['name']] = $argumentInfo; - } - } - - if (0 === \count($arguments)) { - continue; - } - - $doc = new DocBlock($tokenContent); - $lastParamLine = null; - - foreach ($doc->getAnnotationsOfType('param') as $annotation) { - $pregMatched = Preg::match('/^[^$]+(\$\w+).*$/s', $annotation->getContent(), $matches); - - if (1 === $pregMatched) { - unset($arguments[$matches[1]]); - } - - $lastParamLine = max($lastParamLine, $annotation->getEnd()); - } - - if (0 === \count($arguments)) { - continue; - } - - $lines = $doc->getLines(); - $linesCount = \count($lines); - - Preg::match('/^(\s*).*$/', $lines[$linesCount - 1]->getContent(), $matches); - $indent = $matches[1]; - - $newLines = []; - - foreach ($arguments as $argument) { - $type = $argument['type'] ?: 'mixed'; - - if (!str_starts_with($type, '?') && 'null' === strtolower($argument['default'])) { - $type = 'null|'.$type; - } - - $newLines[] = new Line(sprintf( - '%s* @param %s %s%s', - $indent, - $type, - $argument['name'], - $this->whitespacesConfig->getLineEnding() - )); - } - - array_splice( - $lines, - $lastParamLine ? $lastParamLine + 1 : $linesCount - 1, - 0, - $newLines - ); - - $tokens[$mainIndex] = new Token([T_DOC_COMMENT, implode('', $lines)]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('only_untyped', 'Whether to add missing `@param` annotations for untyped parameters only.')) - ->setDefault(true) - ->setAllowedTypes(['bool']) - ->getOption(), - ]); - } - - /** - * @return array{default: string, name: string, type: string} - */ - private function prepareArgumentInformation(Tokens $tokens, int $start, int $end): array - { - $info = [ - 'default' => '', - 'name' => '', - 'type' => '', - ]; - - $sawName = false; - - for ($index = $start; $index <= $end; ++$index) { - $token = $tokens[$index]; - - if ($token->isComment() || $token->isWhitespace()) { - continue; - } - - if ($token->isGivenKind(T_VARIABLE)) { - $sawName = true; - $info['name'] = $token->getContent(); - - continue; - } - - if ($token->equals('=')) { - continue; - } - - if ($sawName) { - $info['default'] .= $token->getContent(); - } elseif (!$token->equals('&')) { - if ($token->isGivenKind(T_ELLIPSIS)) { - if ('' === $info['type']) { - $info['type'] = 'array'; - } else { - $info['type'] .= '[]'; - } - } else { - $info['type'] .= $token->getContent(); - } - } - } - - return $info; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php deleted file mode 100644 index d9beff20..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAlignFixer.php +++ /dev/null @@ -1,458 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\TypeExpression; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Fabien Potencier - * @author Jordi Boggiano - * @author Sebastiaan Stok - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class PhpdocAlignFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const ALIGN_LEFT = 'left'; - - /** - * @internal - */ - public const ALIGN_VERTICAL = 'vertical'; - - private const ALIGNABLE_TAGS = [ - 'param', - 'property', - 'property-read', - 'property-write', - 'return', - 'throws', - 'type', - 'var', - 'method', - ]; - - private const TAGS_WITH_NAME = [ - 'param', - 'property', - 'property-read', - 'property-write', - ]; - - private const TAGS_WITH_METHOD_SIGNATURE = [ - 'method', - ]; - - /** - * @var string - */ - private $regex; - - /** - * @var string - */ - private $regexCommentLine; - - /** - * @var string - */ - private $align; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $tagsWithNameToAlign = array_intersect($this->configuration['tags'], self::TAGS_WITH_NAME); - $tagsWithMethodSignatureToAlign = array_intersect($this->configuration['tags'], self::TAGS_WITH_METHOD_SIGNATURE); - $tagsWithoutNameToAlign = array_diff($this->configuration['tags'], $tagsWithNameToAlign, $tagsWithMethodSignatureToAlign); - $types = []; - - $indent = '(?P(?:\ {2}|\t)*)'; - - // e.g. @param <$var> - if ([] !== $tagsWithNameToAlign) { - $types[] = '(?P'.implode('|', $tagsWithNameToAlign).')\s+(?P(?:'.TypeExpression::REGEX_TYPES.')?)\s+(?P(?:&|\.{3})?\$\S+)'; - } - - // e.g. @return - if ([] !== $tagsWithoutNameToAlign) { - $types[] = '(?P'.implode('|', $tagsWithoutNameToAlign).')\s+(?P(?:'.TypeExpression::REGEX_TYPES.')?)'; - } - - // e.g. @method - if ([] !== $tagsWithMethodSignatureToAlign) { - $types[] = '(?P'.implode('|', $tagsWithMethodSignatureToAlign).')(\s+(?Pstatic))?(\s+(?P[^\s(]+)|)\s+(?P.+\))'; - } - - // optional - $desc = '(?:\s+(?P\V*))'; - - $this->regex = '/^'.$indent.'\ \*\ @(?J)(?:'.implode('|', $types).')'.$desc.'\s*$/ux'; - $this->regexCommentLine = '/^'.$indent.' \*(?! @)(?:\s+(?P\V+))(?align = $this->configuration['align']; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $code = <<<'EOF' - self::ALIGN_VERTICAL]), - new CodeSample($code, ['align' => self::ALIGN_LEFT]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAnnotationWithoutDotFixer, PhpdocIndentFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocScalarFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToCommentFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer. - */ - public function getPriority(): int - { - /* - * Should be run after all other docblock fixers. This because they - * modify other annotations to change their type and or separation - * which totally change the behavior of this fixer. It's important that - * annotations are of the correct type, and are grouped correctly - * before running this fixer. - */ - return -42; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $content = $token->getContent(); - $docBlock = new DocBlock($content); - $this->fixDocBlock($docBlock); - $newContent = $docBlock->getContent(); - if ($newContent !== $content) { - $tokens[$index] = new Token([T_DOC_COMMENT, $newContent]); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $tags = new FixerOptionBuilder('tags', 'The tags that should be aligned.'); - $tags - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(self::ALIGNABLE_TAGS)]) - ->setDefault([ - 'method', - 'param', - 'property', - 'return', - 'throws', - 'type', - 'var', - ]) - ; - - $align = new FixerOptionBuilder('align', 'Align comments'); - $align - ->setAllowedTypes(['string']) - ->setAllowedValues([self::ALIGN_LEFT, self::ALIGN_VERTICAL]) - ->setDefault(self::ALIGN_VERTICAL) - ; - - return new FixerConfigurationResolver([$tags->getOption(), $align->getOption()]); - } - - private function fixDocBlock(DocBlock $docBlock): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - for ($i = 0, $l = \count($docBlock->getLines()); $i < $l; ++$i) { - $matches = $this->getMatches($docBlock->getLine($i)->getContent()); - - if (null === $matches) { - continue; - } - - $current = $i; - $items = [$matches]; - - while (true) { - if (null === $docBlock->getLine(++$i)) { - break 2; - } - - $matches = $this->getMatches($docBlock->getLine($i)->getContent(), true); - if (null === $matches) { - break; - } - - $items[] = $matches; - } - - // compute the max length of the tag, hint and variables - $hasStatic = false; - $tagMax = 0; - $hintMax = 0; - $varMax = 0; - - foreach ($items as $item) { - if (null === $item['tag']) { - continue; - } - - $hasStatic = $hasStatic || $item['static']; - $tagMax = max($tagMax, \strlen($item['tag'])); - $hintMax = max($hintMax, \strlen($item['hint'])); - $varMax = max($varMax, \strlen($item['var'])); - } - - $currTag = null; - - // update - foreach ($items as $j => $item) { - if (null === $item['tag']) { - if ('@' === $item['desc'][0]) { - $docBlock->getLine($current + $j)->setContent($item['indent'].' * '.$item['desc'].$lineEnding); - - continue; - } - - $extraIndent = 2; - - if (\in_array($currTag, self::TAGS_WITH_NAME, true) || \in_array($currTag, self::TAGS_WITH_METHOD_SIGNATURE, true)) { - $extraIndent = 3; - } - - if ($hasStatic) { - $extraIndent += 7; // \strlen('static '); - } - - $line = - $item['indent'] - .' * ' - .$this->getIndent( - $tagMax + $hintMax + $varMax + $extraIndent, - $this->getLeftAlignedDescriptionIndent($items, $j) - ) - .$item['desc'] - .$lineEnding; - - $docBlock->getLine($current + $j)->setContent($line); - - continue; - } - - $currTag = $item['tag']; - - $line = - $item['indent'] - .' * @' - .$item['tag'] - ; - - if ($hasStatic) { - $line .= - $this->getIndent( - $tagMax - \strlen($item['tag']) + 1, - $item['static'] ? 1 : 0 - ) - .($item['static'] ?: $this->getIndent(6 /* \strlen('static') */, 0)) - ; - $hintVerticalAlignIndent = 1; - } else { - $hintVerticalAlignIndent = $tagMax - \strlen($item['tag']) + 1; - } - - $line .= - $this->getIndent( - $hintVerticalAlignIndent, - $item['hint'] ? 1 : 0 - ) - .$item['hint'] - ; - - if (!empty($item['var'])) { - $line .= - $this->getIndent(($hintMax ?: -1) - \strlen($item['hint']) + 1) - .$item['var'] - .( - !empty($item['desc']) - ? $this->getIndent($varMax - \strlen($item['var']) + 1).$item['desc'].$lineEnding - : $lineEnding - ) - ; - } elseif (!empty($item['desc'])) { - $line .= $this->getIndent($hintMax - \strlen($item['hint']) + 1).$item['desc'].$lineEnding; - } else { - $line .= $lineEnding; - } - - $docBlock->getLine($current + $j)->setContent($line); - } - } - } - - /** - * @return null|array - */ - private function getMatches(string $line, bool $matchCommentOnly = false): ?array - { - if (Preg::match($this->regex, $line, $matches)) { - if (!empty($matches['tag2'])) { - $matches['tag'] = $matches['tag2']; - $matches['hint'] = $matches['hint2']; - $matches['var'] = ''; - } - - if (!empty($matches['tag3'])) { - $matches['tag'] = $matches['tag3']; - $matches['hint'] = $matches['hint3']; - $matches['var'] = $matches['signature']; - - // Since static can be both a return type declaration & a keyword that defines static methods - // we assume it's a type declaration when only one value is present - if ('' === $matches['hint'] && '' !== $matches['static']) { - $matches['hint'] = $matches['static']; - $matches['static'] = ''; - } - } - - if (isset($matches['hint'])) { - $matches['hint'] = trim($matches['hint']); - } - - if (!isset($matches['static'])) { - $matches['static'] = ''; - } - - return $matches; - } - - if ($matchCommentOnly && Preg::match($this->regexCommentLine, $line, $matches)) { - $matches['tag'] = null; - $matches['var'] = ''; - $matches['hint'] = ''; - $matches['static'] = ''; - - return $matches; - } - - return null; - } - - private function getIndent(int $verticalAlignIndent, int $leftAlignIndent = 1): string - { - $indent = self::ALIGN_VERTICAL === $this->align ? $verticalAlignIndent : $leftAlignIndent; - - return str_repeat(' ', $indent); - } - - /** - * @param array[] $items - */ - private function getLeftAlignedDescriptionIndent(array $items, int $index): int - { - if (self::ALIGN_LEFT !== $this->align) { - return 0; - } - - // Find last tagged line: - $item = null; - for (; $index >= 0; --$index) { - $item = $items[$index]; - if (null !== $item['tag']) { - break; - } - } - - // No last tag found — no indent: - if (null === $item) { - return 0; - } - - // Indent according to existing values: - return - $this->getSentenceIndent($item['static']) + - $this->getSentenceIndent($item['tag']) + - $this->getSentenceIndent($item['hint']) + - $this->getSentenceIndent($item['var']); - } - - /** - * Get indent for sentence. - */ - private function getSentenceIndent(?string $sentence): int - { - if (null === $sentence) { - return 0; - } - - $length = \strlen($sentence); - - return 0 === $length ? 0 : $length + 1; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php deleted file mode 100644 index 02451992..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocAnnotationWithoutDotFixer.php +++ /dev/null @@ -1,134 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class PhpdocAnnotationWithoutDotFixer extends AbstractFixer -{ - /** - * @var string[] - */ - private array $tags = ['throws', 'return', 'param', 'internal', 'deprecated', 'var', 'type']; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHPDoc annotation descriptions should not be a sentence.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $annotations = $doc->getAnnotations(); - - if (0 === \count($annotations)) { - continue; - } - - foreach ($annotations as $annotation) { - if ( - !$annotation->getTag()->valid() || !\in_array($annotation->getTag()->getName(), $this->tags, true) - ) { - continue; - } - - $lineAfterAnnotation = $doc->getLine($annotation->getEnd() + 1); - if (null !== $lineAfterAnnotation) { - $lineAfterAnnotationTrimmed = ltrim($lineAfterAnnotation->getContent()); - if ('' === $lineAfterAnnotationTrimmed || !str_starts_with($lineAfterAnnotationTrimmed, '*')) { - // malformed PHPDoc, missing asterisk ! - continue; - } - } - - $content = $annotation->getContent(); - - if ( - 1 !== Preg::match('/[.。]\h*$/u', $content) - || 0 !== Preg::match('/[.。](?!\h*$)/u', $content, $matches) - ) { - continue; - } - - $endLine = $doc->getLine($annotation->getEnd()); - $endLine->setContent(Preg::replace('/(?getContent())); - - $startLine = $doc->getLine($annotation->getStart()); - $optionalTypeRegEx = $annotation->supportTypes() - ? sprintf('(?:%s\s+(?:\$\w+\s+)?)?', preg_quote(implode('|', $annotation->getTypes()), '/')) - : ''; - $content = Preg::replaceCallback( - '/^(\s*\*\s*@\w+\s+'.$optionalTypeRegEx.')(\p{Lu}?(?=\p{Ll}|\p{Zs}))(.*)$/', - static function (array $matches): string { - return $matches[1].mb_strtolower($matches[2]).$matches[3]; - }, - $startLine->getContent(), - 1 - ); - $startLine->setContent($content); - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php deleted file mode 100644 index d926dbbf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocIndentFixer.php +++ /dev/null @@ -1,144 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Utils; - -/** - * @author Ceeram - * @author Graham Campbell - */ -final class PhpdocIndentFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Docblocks should have the same indentation as the documented subject.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - // skip if there is no next token or if next token is block end `}` - if (null === $nextIndex || $tokens[$nextIndex]->equals('}')) { - continue; - } - - $prevIndex = $index - 1; - $prevToken = $tokens[$prevIndex]; - - // ignore inline docblocks - if ( - $prevToken->isGivenKind(T_OPEN_TAG) - || ($prevToken->isWhitespace(" \t") && !$tokens[$index - 2]->isGivenKind(T_OPEN_TAG)) - || $prevToken->equalsAny([';', ',', '{', '(']) - ) { - continue; - } - - if ($tokens[$nextIndex - 1]->isWhitespace()) { - $indent = Utils::calculateTrailingWhitespaceIndent($tokens[$nextIndex - 1]); - } else { - $indent = ''; - } - - $newPrevContent = $this->fixWhitespaceBeforeDocblock($prevToken->getContent(), $indent); - - if ('' !== $newPrevContent) { - if ($prevToken->isArray()) { - $tokens[$prevIndex] = new Token([$prevToken->getId(), $newPrevContent]); - } else { - $tokens[$prevIndex] = new Token($newPrevContent); - } - } else { - $tokens->clearAt($prevIndex); - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $this->fixDocBlock($token->getContent(), $indent)]); - } - } - - /** - * Fix indentation of Docblock. - * - * @param string $content Docblock contents - * @param string $indent Indentation to apply - * - * @return string Dockblock contents including correct indentation - */ - private function fixDocBlock(string $content, string $indent): string - { - return ltrim(Preg::replace('/^\h*\*/m', $indent.' *', $content)); - } - - /** - * @param string $content Whitespace before Docblock - * @param string $indent Indentation of the documented subject - * - * @return string Whitespace including correct indentation for Dockblock after this whitespace - */ - private function fixWhitespaceBeforeDocblock(string $content, string $indent): string - { - return rtrim($content, " \t").$indent; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php deleted file mode 100644 index 19b40c43..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocInlineTagNormalizerFixer.php +++ /dev/null @@ -1,121 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class PhpdocInlineTagNormalizerFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Fixes PHPDoc inline tags.', - [ - new CodeSample( - " ['TUTORIAL']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (0 === \count($this->configuration['tags'])) { - return; - } - - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - // Move `@` inside tag, for example @{tag} -> {@tag}, replace multiple curly brackets, - // remove spaces between '{' and '@', remove white space between end - // of text and closing bracket and between the tag and inline comment. - $content = Preg::replaceCallback( - sprintf( - '#(?:@{+|{+\h*@)\h*(%s)s?([^}]*)(?:}+)#i', - implode('|', array_map(static function (string $tag): string { - return preg_quote($tag, '/'); - }, $this->configuration['tags'])) - ), - static function (array $matches): string { - $doc = trim($matches[2]); - - if ('' === $doc) { - return '{@'.$matches[1].'}'; - } - - return '{@'.$matches[1].' '.$doc.'}'; - }, - $token->getContent() - ); - - $tokens[$index] = new Token([T_DOC_COMMENT, $content]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('tags', 'The list of tags to normalize')) - ->setAllowedTypes(['array']) - ->setDefault(['example', 'id', 'internal', 'inheritdoc', 'inheritdocs', 'link', 'source', 'toc', 'tutorial']) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php deleted file mode 100644 index 7bc34d0c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocLineSpanFixer.php +++ /dev/null @@ -1,165 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Gert de Pagter - */ -final class PhpdocLineSpanFixer extends AbstractFixer implements WhitespacesAwareFixerInterface, ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Changes doc blocks from single to multi line, or reversed. Works for class constants, properties and methods only.', - [ - new CodeSample(" 'single'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, GeneralPhpdocAnnotationRemoveFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 7; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('const', 'Whether const blocks should be single or multi line')) - ->setAllowedValues(['single', 'multi', null]) - ->setDefault('multi') - ->getOption(), - (new FixerOptionBuilder('property', 'Whether property doc blocks should be single or multi line')) - ->setAllowedValues(['single', 'multi', null]) - ->setDefault('multi') - ->getOption(), - (new FixerOptionBuilder('method', 'Whether method doc blocks should be single or multi line')) - ->setAllowedValues(['single', 'multi', null]) - ->setDefault('multi') - ->getOption(), - ]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $analyzer = new TokensAnalyzer($tokens); - - foreach ($analyzer->getClassyElements() as $index => $element) { - if (!$this->hasDocBlock($tokens, $index)) { - continue; - } - - $type = $element['type']; - - if (!isset($this->configuration[$type])) { - continue; - } - - $docIndex = $this->getDocBlockIndex($tokens, $index); - $doc = new DocBlock($tokens[$docIndex]->getContent()); - - if ('multi' === $this->configuration[$type]) { - $doc->makeMultiLine(WhitespacesAnalyzer::detectIndent($tokens, $docIndex), $this->whitespacesConfig->getLineEnding()); - } elseif ('single' === $this->configuration[$type]) { - $doc->makeSingleLine(); - } - - $tokens->offsetSet($docIndex, new Token([T_DOC_COMMENT, $doc->getContent()])); - } - } - - private function hasDocBlock(Tokens $tokens, int $index): bool - { - $docBlockIndex = $this->getDocBlockIndex($tokens, $index); - - return $tokens[$docBlockIndex]->isGivenKind(T_DOC_COMMENT); - } - - private function getDocBlockIndex(Tokens $tokens, int $index): int - { - $propertyPartKinds = [ - T_PUBLIC, - T_PROTECTED, - T_PRIVATE, - T_FINAL, - T_ABSTRACT, - T_COMMENT, - T_VAR, - T_STATIC, - T_STRING, - T_NS_SEPARATOR, - CT::T_ARRAY_TYPEHINT, - CT::T_NULLABLE_TYPE, - ]; - - if (\defined('T_ATTRIBUTE')) { // @TODO: drop condition when PHP 8.0+ is required - $propertyPartKinds[] = T_ATTRIBUTE; - } - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $propertyPartKinds[] = T_READONLY; - } - - do { - $index = $tokens->getPrevNonWhitespace($index); - - if ($tokens[$index]->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - $index = $tokens->getPrevTokenOfKind($index, [[T_ATTRIBUTE]]); - } - } while ($tokens[$index]->isGivenKind($propertyPartKinds)); - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php deleted file mode 100644 index a168a913..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAccessFixer.php +++ /dev/null @@ -1,73 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class PhpdocNoAccessFixer extends AbstractProxyFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - '`@access` annotations should be omitted from PHPDoc.', - [ - new CodeSample( - 'configure(['annotations' => ['access']]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php deleted file mode 100644 index c4ec3689..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoAliasTagFixer.php +++ /dev/null @@ -1,135 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\ConfigurationException\InvalidConfigurationException; -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; - -/** - * Case-sensitive tag replace fixer (does not process inline tags like {@inheritdoc}). - * - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class PhpdocNoAliasTagFixer extends AbstractProxyFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'No alias PHPDoc tags should be used.', - [ - new CodeSample( - ' ['link' => 'website']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocSingleLineVarSpacingFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return parent::getPriority(); - } - - public function configure(array $configuration): void - { - parent::configure($configuration); - - /** @var GeneralPhpdocTagRenameFixer $generalPhpdocTagRenameFixer */ - $generalPhpdocTagRenameFixer = $this->proxyFixers['general_phpdoc_tag_rename']; - - try { - $generalPhpdocTagRenameFixer->configure([ - 'fix_annotation' => true, - 'fix_inline' => false, - 'replacements' => $this->configuration['replacements'], - 'case_sensitive' => true, - ]); - } catch (InvalidConfigurationException $exception) { - throw new InvalidFixerConfigurationException( - $this->getName(), - Preg::replace('/^\[.+?\] /', '', $exception->getMessage()), - $exception - ); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('replacements', 'Mapping between replaced annotations with new ones.')) - ->setAllowedTypes(['array']) - ->setDefault([ - 'property-read' => 'property', - 'property-write' => 'property', - 'type' => 'var', - 'link' => 'see', - ]) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function createProxyFixers(): array - { - return [new GeneralPhpdocTagRenameFixer()]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php deleted file mode 100644 index b318aa69..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoEmptyReturnFixer.php +++ /dev/null @@ -1,126 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class PhpdocNoEmptyReturnFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - '`@return void` and `@return null` annotations should be omitted from PHPDoc.', - [ - new CodeSample( - ' $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $annotations = $doc->getAnnotationsOfType('return'); - - if (0 === \count($annotations)) { - continue; - } - - foreach ($annotations as $annotation) { - $this->fixAnnotation($annotation); - } - - $newContent = $doc->getContent(); - - if ($newContent === $token->getContent()) { - continue; - } - - if ('' === $newContent) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - continue; - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - /** - * Remove `return void` or `return null` annotations. - */ - private function fixAnnotation(Annotation $annotation): void - { - $types = $annotation->getNormalizedTypes(); - - if (1 === \count($types) && ('null' === $types[0] || 'void' === $types[0])) { - $annotation->remove(); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php deleted file mode 100644 index d7da1d1a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoPackageFixer.php +++ /dev/null @@ -1,73 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class PhpdocNoPackageFixer extends AbstractProxyFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - '`@package` and `@subpackage` annotations should be omitted from PHPDoc.', - [ - new CodeSample( - 'configure(['annotations' => ['package', 'subpackage']]); - - return [$fixer]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php deleted file mode 100644 index 65d420fa..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.php +++ /dev/null @@ -1,162 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Remove inheritdoc tags from classy that does not inherit. - */ -final class PhpdocNoUselessInheritdocFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Classy that does not inherit must not have `@inheritdoc` tags.', - [ - new CodeSample("isTokenKindFound(T_DOC_COMMENT) && $tokens->isAnyTokenKindsFound([T_CLASS, T_INTERFACE]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // min. offset 4 as minimal candidate is @: isGivenKind([T_CLASS, T_INTERFACE])) { - $index = $this->fixClassy($tokens, $index); - } - } - } - - private function fixClassy(Tokens $tokens, int $index): int - { - // figure out where the classy starts - $classOpenIndex = $tokens->getNextTokenOfKind($index, ['{']); - - // figure out where the classy ends - $classEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $classOpenIndex); - - // is classy extending or implementing some interface - $extendingOrImplementing = $this->isExtendingOrImplementing($tokens, $index, $classOpenIndex); - - if (!$extendingOrImplementing) { - // PHPDoc of classy should not have inherit tag even when using traits as Traits cannot provide this information - $this->fixClassyOutside($tokens, $index); - } - - // figure out if the classy uses a trait - if (!$extendingOrImplementing && $this->isUsingTrait($tokens, $index, $classOpenIndex, $classEndIndex)) { - $extendingOrImplementing = true; - } - - $this->fixClassyInside($tokens, $classOpenIndex, $classEndIndex, !$extendingOrImplementing); - - return $classEndIndex; - } - - private function fixClassyInside(Tokens $tokens, int $classOpenIndex, int $classEndIndex, bool $fixThisLevel): void - { - for ($i = $classOpenIndex; $i < $classEndIndex; ++$i) { - if ($tokens[$i]->isGivenKind(T_CLASS)) { - $i = $this->fixClassy($tokens, $i); - } elseif ($fixThisLevel && $tokens[$i]->isGivenKind(T_DOC_COMMENT)) { - $this->fixToken($tokens, $i); - } - } - } - - private function fixClassyOutside(Tokens $tokens, int $classIndex): void - { - $previousIndex = $tokens->getPrevNonWhitespace($classIndex); - if ($tokens[$previousIndex]->isGivenKind(T_DOC_COMMENT)) { - $this->fixToken($tokens, $previousIndex); - } - } - - private function fixToken(Tokens $tokens, int $tokenIndex): void - { - $count = 0; - $content = Preg::replaceCallback( - '#(\h*(?:@{*|{*\h*@)\h*inheritdoc\h*)([^}]*)((?:}*)\h*)#i', - static function (array $matches): string { - return ' '.$matches[2]; - }, - $tokens[$tokenIndex]->getContent(), - -1, - $count - ); - - if ($count) { - $tokens[$tokenIndex] = new Token([T_DOC_COMMENT, $content]); - } - } - - private function isExtendingOrImplementing(Tokens $tokens, int $classIndex, int $classOpenIndex): bool - { - for ($index = $classIndex; $index < $classOpenIndex; ++$index) { - if ($tokens[$index]->isGivenKind([T_EXTENDS, T_IMPLEMENTS])) { - return true; - } - } - - return false; - } - - private function isUsingTrait(Tokens $tokens, int $classIndex, int $classOpenIndex, int $classCloseIndex): bool - { - if ($tokens[$classIndex]->isGivenKind(T_INTERFACE)) { - // cannot use Trait inside an interface - return false; - } - - $useIndex = $tokens->getNextTokenOfKind($classOpenIndex, [[CT::T_USE_TRAIT]]); - - return null !== $useIndex && $useIndex < $classCloseIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php deleted file mode 100644 index 38a476df..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderByValueFixer.php +++ /dev/null @@ -1,223 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Options; - -/** - * @author Filippo Tessarotto - * @author Andreas Möller - */ -final class PhpdocOrderByValueFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Order phpdoc tags by value.', - [ - new CodeSample( - ' [ - 'author', - ], - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpUnitFqcnAnnotationFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return -10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAllTokenKindsFound([T_CLASS, T_DOC_COMMENT]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if ([] === $this->configuration['annotations']) { - return; - } - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - foreach ($this->configuration['annotations'] as $type => $typeLowerCase) { - $findPattern = sprintf( - '/@%s\s.+@%s\s/s', - $type, - $type - ); - - if ( - !$tokens[$index]->isGivenKind(T_DOC_COMMENT) - || 0 === Preg::match($findPattern, $tokens[$index]->getContent()) - ) { - continue; - } - - $docBlock = new DocBlock($tokens[$index]->getContent()); - - $annotations = $docBlock->getAnnotationsOfType($type); - $annotationMap = []; - - if (\in_array($type, ['property', 'property-read', 'property-write'], true)) { - $replacePattern = sprintf( - '/(?s)\*\s*@%s\s+(?P.+\s+)?\$(?P[^\s]+).*/', - $type - ); - - $replacement = '\2'; - } elseif ('method' === $type) { - $replacePattern = '/(?s)\*\s*@method\s+(?P.+\s+)?(?P.+)\(.*/'; - $replacement = '\2'; - } else { - $replacePattern = sprintf( - '/\*\s*@%s\s+(?P.+)/', - $typeLowerCase - ); - - $replacement = '\1'; - } - - foreach ($annotations as $annotation) { - $rawContent = $annotation->getContent(); - - $comparableContent = Preg::replace( - $replacePattern, - $replacement, - strtolower(trim($rawContent)) - ); - - $annotationMap[$comparableContent] = $rawContent; - } - - $orderedAnnotationMap = $annotationMap; - - ksort($orderedAnnotationMap, SORT_STRING); - - if ($orderedAnnotationMap === $annotationMap) { - continue; - } - - $lines = $docBlock->getLines(); - - foreach (array_reverse($annotations) as $annotation) { - array_splice( - $lines, - $annotation->getStart(), - $annotation->getEnd() - $annotation->getStart() + 1, - array_pop($orderedAnnotationMap) - ); - } - - $tokens[$index] = new Token([T_DOC_COMMENT, implode('', $lines)]); - } - } - } - - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $allowedValues = [ - 'author', - 'covers', - 'coversNothing', - 'dataProvider', - 'depends', - 'group', - 'internal', - 'method', - 'mixin', - 'property', - 'property-read', - 'property-write', - 'requires', - 'throws', - 'uses', - ]; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('annotations', 'List of annotations to order, e.g. `["covers"]`.')) - ->setAllowedTypes([ - 'array', - ]) - ->setAllowedValues([ - new AllowedValueSubset($allowedValues), - ]) - ->setNormalizer(static function (Options $options, $value): array { - $normalized = []; - - foreach ($value as $annotation) { - // since we will be using "strtolower" on the input annotations when building the sorting - // map we must match the type in lower case as well - $normalized[$annotation] = strtolower($annotation); - } - - return $normalized; - }) - ->setDefault([ - 'covers', - ]) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php deleted file mode 100644 index 71dd83c9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php +++ /dev/null @@ -1,220 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Graham Campbell - * @author Jakub Kwaśniewski - */ -final class PhpdocOrderFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @const string[] - * - * @TODO: 4.0 - change default to ['param', 'return', 'throws'] - */ - private const ORDER_DEFAULT = ['param', 'throws', 'return']; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $code = <<<'EOF' - self::ORDER_DEFAULT]), - new CodeSample($code, ['order' => ['param', 'return', 'throws']]), - new CodeSample($code, ['order' => ['param', 'custom', 'throws', 'return']]), - ], - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer, PhpdocSeparationFixer, PhpdocTrimFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocIndentFixer, PhpdocNoEmptyReturnFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return -2; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('order', 'Sequence in which annotations in PHPDoc should be ordered.')) - ->setAllowedTypes(['string[]']) - ->setAllowedValues([function ($order) { - if (\count($order) < 2) { - throw new InvalidOptionsException('The option "order" value is invalid. Minimum two tags are required.'); - } - - return true; - }]) - ->setDefault(self::ORDER_DEFAULT) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - // assuming annotations are already grouped by tags - $content = $token->getContent(); - - // sort annotations - $successors = $this->configuration['order']; - while (\count($successors) >= 3) { - $predecessor = array_shift($successors); - $content = $this->moveAnnotationsBefore($predecessor, $successors, $content); - } - - // we're parsing the content last time to make sure the internal - // state of the docblock is correct after the modifications - $predecessors = $this->configuration['order']; - $last = array_pop($predecessors); - $content = $this->moveAnnotationsAfter($last, $predecessors, $content); - - // persist the content at the end - $tokens[$index] = new Token([T_DOC_COMMENT, $content]); - } - } - - /** - * Move all given annotations in before given set of annotations. - * - * @param string $move Tag of annotations that should be moved - * @param string[] $before Tags of annotations that should moved annotations be placed before - */ - private function moveAnnotationsBefore(string $move, array $before, string $content): string - { - $doc = new DocBlock($content); - $toBeMoved = $doc->getAnnotationsOfType($move); - - // nothing to do if there are no annotations to be moved - if (0 === \count($toBeMoved)) { - return $content; - } - - $others = $doc->getAnnotationsOfType($before); - - if (0 === \count($others)) { - return $content; - } - - // get the index of the final line of the final toBoMoved annotation - $end = end($toBeMoved)->getEnd(); - - $line = $doc->getLine($end); - - // move stuff about if required - foreach ($others as $other) { - if ($other->getStart() < $end) { - // we're doing this to maintain the original line indices - $line->setContent($line->getContent().$other->getContent()); - $other->remove(); - } - } - - return $doc->getContent(); - } - - /** - * Move all given annotations after given set of annotations. - * - * @param string $move Tag of annotations that should be moved - * @param string[] $after Tags of annotations that should moved annotations be placed after - */ - private function moveAnnotationsAfter(string $move, array $after, string $content): string - { - $doc = new DocBlock($content); - $toBeMoved = $doc->getAnnotationsOfType($move); - - // nothing to do if there are no annotations to be moved - if (0 === \count($toBeMoved)) { - return $content; - } - - $others = $doc->getAnnotationsOfType($after); - - // nothing to do if there are no other annotations - if (0 === \count($others)) { - return $content; - } - - // get the index of the first line of the first toBeMoved annotation - $start = $toBeMoved[0]->getStart(); - $line = $doc->getLine($start); - - // move stuff about if required - foreach (array_reverse($others) as $other) { - if ($other->getEnd() > $start) { - // we're doing this to maintain the original line indices - $line->setContent($other->getContent().$line->getContent()); - $other->remove(); - } - } - - return $doc->getContent(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php deleted file mode 100644 index ea323096..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.php +++ /dev/null @@ -1,231 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\OptionsResolver\Options; - -final class PhpdocReturnSelfReferenceFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var string[] - */ - private static array $toTypes = [ - '$this', - 'static', - 'self', - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'The type of `@return` annotations of methods returning a reference to itself must the configured one.', - [ - new CodeSample( - ' ['this' => 'self']] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return \count($tokens) > 10 && $tokens->isAllTokenKindsFound([T_DOC_COMMENT, T_FUNCTION]) && $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds()); - } - - /** - * {@inheritdoc} - * - * Must run before NoSuperfluousPhpdocTagsFixer, PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 10; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - - foreach ($tokensAnalyzer->getClassyElements() as $index => $element) { - if ('method' === $element['type']) { - $this->fixMethod($tokens, $index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $default = [ - 'this' => '$this', - '@this' => '$this', - '$self' => 'self', - '@self' => 'self', - '$static' => 'static', - '@static' => 'static', - ]; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('replacements', 'Mapping between replaced return types with new ones.')) - ->setAllowedTypes(['array']) - ->setNormalizer(static function (Options $options, array $value) use ($default): array { - $normalizedValue = []; - - foreach ($value as $from => $to) { - if (\is_string($from)) { - $from = strtolower($from); - } - - if (!isset($default[$from])) { - throw new InvalidOptionsException(sprintf( - 'Unknown key "%s", expected any of "%s".', - \gettype($from).'#'.$from, - implode('", "', array_keys($default)) - )); - } - - if (!\in_array($to, self::$toTypes, true)) { - throw new InvalidOptionsException(sprintf( - 'Unknown value "%s", expected any of "%s".', - \is_object($to) ? \get_class($to) : \gettype($to).(\is_resource($to) ? '' : '#'.$to), - implode('", "', self::$toTypes) - )); - } - - $normalizedValue[$from] = $to; - } - - return $normalizedValue; - }) - ->setDefault($default) - ->getOption(), - ]); - } - - private function fixMethod(Tokens $tokens, int $index): void - { - static $methodModifiers = [T_STATIC, T_FINAL, T_ABSTRACT, T_PRIVATE, T_PROTECTED, T_PUBLIC]; - - // find PHPDoc of method (if any) - while (true) { - $tokenIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$tokenIndex]->isGivenKind($methodModifiers)) { - break; - } - - $index = $tokenIndex; - } - - $docIndex = $tokens->getPrevNonWhitespace($index); - if (!$tokens[$docIndex]->isGivenKind(T_DOC_COMMENT)) { - return; - } - - // find @return - $docBlock = new DocBlock($tokens[$docIndex]->getContent()); - $returnsBlock = $docBlock->getAnnotationsOfType('return'); - - if (0 === \count($returnsBlock)) { - return; // no return annotation found - } - - $returnsBlock = $returnsBlock[0]; - $types = $returnsBlock->getTypes(); - - if (0 === \count($types)) { - return; // no return type(s) found - } - - $newTypes = []; - - foreach ($types as $type) { - $newTypes[] = $this->configuration['replacements'][strtolower($type)] ?? $type; - } - - if ($types === $newTypes) { - return; - } - - $returnsBlock->setTypes($newTypes); - $tokens[$docIndex] = new Token([T_DOC_COMMENT, $docBlock->getContent()]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php deleted file mode 100644 index b603912e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocScalarFixer.php +++ /dev/null @@ -1,131 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractPhpdocTypesFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; - -/** - * @author Graham Campbell - */ -final class PhpdocScalarFixer extends AbstractPhpdocTypesFixer implements ConfigurableFixerInterface -{ - /** - * The types to fix. - * - * @var array - */ - private static array $types = [ - 'boolean' => 'bool', - 'callback' => 'callable', - 'double' => 'float', - 'integer' => 'int', - 'real' => 'float', - 'str' => 'string', - ]; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Scalar types should always be written in the same form. `int` not `integer`, `bool` not `boolean`, `float` not `real` or `double`.', - [ - new CodeSample(' ['boolean']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer. - * Must run after PhpdocTypesFixer. - */ - public function getPriority(): int - { - /* - * Should be run before all other docblock fixers apart from the - * phpdoc_to_comment and phpdoc_indent fixer to make sure all fixers - * apply correct indentation to new code they add. This should run - * before alignment of params is done since this fixer might change - * the type and thereby un-aligning the params. We also must run after - * the phpdoc_types_fixer because it can convert types to things that - * we can fix. - */ - return 15; - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $types = array_keys(self::$types); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('types', 'A list of types to fix.')) - ->setAllowedValues([new AllowedValueSubset($types)]) - ->setDefault($types) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function normalize(string $type): string - { - if (\in_array($type, $this->configuration['types'], true)) { - return self::$types[$type]; - } - - return $type; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php deleted file mode 100644 index 3f25db1e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php +++ /dev/null @@ -1,234 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\TagComparator; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Graham Campbell - * @author Jakub Kwaśniewski - */ -final class PhpdocSeparationFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var string[][] - */ - private array $groups; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $code = <<<'EOF' - [...TagComparator::DEFAULT_GROUPS, ['param', 'return']]]), - new CodeSample($code, ['groups' => [['author', 'throws', 'custom'], ['return', 'param']]]), - ], - ); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->groups = $this->configuration['groups']; - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, GeneralPhpdocAnnotationRemoveFixer, PhpdocIndentFixer, PhpdocNoAccessFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocOrderFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return -3; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $this->fixDescription($doc); - $this->fixAnnotations($doc); - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $allowTagToBelongToOnlyOneGroup = function ($groups) { - $tags = []; - foreach ($groups as $groupIndex => $group) { - foreach ($group as $member) { - if (isset($tags[$member])) { - if ($groupIndex === $tags[$member]) { - throw new InvalidOptionsException( - 'The option "groups" value is invalid. '. - 'The "'.$member.'" tag is specified more than once.' - ); - } - - throw new InvalidOptionsException( - 'The option "groups" value is invalid. '. - 'The "'.$member.'" tag belongs to more than one group.' - ); - } - $tags[$member] = $groupIndex; - } - } - - return true; - }; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('groups', 'Sets of annotation types to be grouped together.')) - ->setAllowedTypes(['string[][]']) - ->setDefault(TagComparator::DEFAULT_GROUPS) - ->setAllowedValues([$allowTagToBelongToOnlyOneGroup]) - ->getOption(), - ]); - } - - /** - * Make sure the description is separated from the annotations. - */ - private function fixDescription(DocBlock $doc): void - { - foreach ($doc->getLines() as $index => $line) { - if ($line->containsATag()) { - break; - } - - if ($line->containsUsefulContent()) { - $next = $doc->getLine($index + 1); - - if (null !== $next && $next->containsATag()) { - $line->addBlank(); - - break; - } - } - } - } - - /** - * Make sure the annotations are correctly separated. - */ - private function fixAnnotations(DocBlock $doc): void - { - foreach ($doc->getAnnotations() as $index => $annotation) { - $next = $doc->getAnnotation($index + 1); - - if (null === $next) { - break; - } - - if (TagComparator::shouldBeTogether($annotation->getTag(), $next->getTag(), $this->groups)) { - $this->ensureAreTogether($doc, $annotation, $next); - } else { - $this->ensureAreSeparate($doc, $annotation, $next); - } - } - } - - /** - * Force the given annotations to immediately follow each other. - */ - private function ensureAreTogether(DocBlock $doc, Annotation $first, Annotation $second): void - { - $pos = $first->getEnd(); - $final = $second->getStart(); - - for ($pos = $pos + 1; $pos < $final; ++$pos) { - $doc->getLine($pos)->remove(); - } - } - - /** - * Force the given annotations to have one empty line between each other. - */ - private function ensureAreSeparate(DocBlock $doc, Annotation $first, Annotation $second): void - { - $pos = $first->getEnd(); - $final = $second->getStart() - 1; - - // check if we need to add a line, or need to remove one or more lines - if ($pos === $final) { - $doc->getLine($pos)->addBlank(); - - return; - } - - for ($pos = $pos + 1; $pos < $final; ++$pos) { - $doc->getLine($pos)->remove(); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php deleted file mode 100644 index 8ccd3d74..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSingleLineVarSpacingFixer.php +++ /dev/null @@ -1,98 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for part of rule defined in PSR5 ¶7.22. - */ -final class PhpdocSingleLineVarSpacingFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Single line `@var` PHPDoc should have proper spacing.', - [new CodeSample("isAnyTokenKindsFound([T_COMMENT, T_DOC_COMMENT]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - /** @var Token $token */ - foreach ($tokens as $index => $token) { - if (!$token->isComment()) { - continue; - } - - $content = $token->getContent(); - $fixedContent = $this->fixTokenContent($content); - - if ($content !== $fixedContent) { - $tokens[$index] = new Token([T_DOC_COMMENT, $fixedContent]); - } - } - } - - private function fixTokenContent(string $content): string - { - return Preg::replaceCallback( - '#^/\*\*\h*@var\h+(\S+)\h*(\$\S+)?\h*([^\n]*)\*/$#', - static function (array $matches) { - $content = '/** @var'; - - for ($i = 1, $m = \count($matches); $i < $m; ++$i) { - if ('' !== $matches[$i]) { - $content .= ' '.$matches[$i]; - } - } - - return rtrim($content).' */'; - }, - $content - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php deleted file mode 100644 index 090ac88f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSummaryFixer.php +++ /dev/null @@ -1,103 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\ShortDescription; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class PhpdocSummaryFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHPDoc summary should end in either a full stop, exclamation mark, or question mark.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $end = (new ShortDescription($doc))->getEnd(); - - if (null !== $end) { - $line = $doc->getLine($end); - $content = rtrim($line->getContent()); - - if (!$this->isCorrectlyFormatted($content)) { - $line->setContent($content.'.'.$this->whitespacesConfig->getLineEnding()); - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - } - } - - /** - * Is the last line of the short description correctly formatted? - */ - private function isCorrectlyFormatted(string $content): bool - { - if (false !== stripos($content, '{@inheritdoc}')) { - return true; - } - - return $content !== rtrim($content, '.。!?¡¿!?'); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php deleted file mode 100644 index b9608320..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagCasingFixer.php +++ /dev/null @@ -1,106 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractProxyFixer; -use PhpCsFixer\ConfigurationException\InvalidConfigurationException; -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; - -final class PhpdocTagCasingFixer extends AbstractProxyFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Fixes casing of PHPDoc tags.', - [ - new CodeSample(" ['foo'], - ]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return parent::getPriority(); - } - - public function configure(array $configuration): void - { - parent::configure($configuration); - - $replacements = []; - foreach ($this->configuration['tags'] as $tag) { - $replacements[$tag] = $tag; - } - - /** @var GeneralPhpdocTagRenameFixer $generalPhpdocTagRenameFixer */ - $generalPhpdocTagRenameFixer = $this->proxyFixers['general_phpdoc_tag_rename']; - - try { - $generalPhpdocTagRenameFixer->configure([ - 'fix_annotation' => true, - 'fix_inline' => true, - 'replacements' => $replacements, - 'case_sensitive' => false, - ]); - } catch (InvalidConfigurationException $exception) { - throw new InvalidFixerConfigurationException( - $this->getName(), - Preg::replace('/^\[.+?\] /', '', $exception->getMessage()), - $exception - ); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('tags', 'List of tags to fix with their expected casing.')) - ->setAllowedTypes(['array']) - ->setDefault(['inheritDoc']) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function createProxyFixers(): array - { - return [new GeneralPhpdocTagRenameFixer()]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php deleted file mode 100644 index f553ba10..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTagTypeFixer.php +++ /dev/null @@ -1,215 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\OptionsResolver\Options; - -final class PhpdocTagTypeFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - private const TAG_REGEX = '/^(?: - (? - (?:@(?.+?)(?:\s.+)?) - ) - | - {(? - (?:@(?.+?)(?:\s.+)?) - )} - )$/x'; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Forces PHPDoc tags to be either regular annotations or inline.', - [ - new CodeSample( - " ['inheritdoc' => 'inline']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (0 === \count($this->configuration['tags'])) { - return; - } - - $regularExpression = sprintf( - '/({?@(?:%s).*?(?:(?=\s\*\/)|(?=\n)}?))/i', - implode('|', array_map( - static function (string $tag): string { - return preg_quote($tag, '/'); - }, - array_keys($this->configuration['tags']) - )) - ); - - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $parts = Preg::split( - $regularExpression, - $token->getContent(), - -1, - PREG_SPLIT_DELIM_CAPTURE - ); - - for ($i = 1, $max = \count($parts) - 1; $i < $max; $i += 2) { - if (!Preg::match(self::TAG_REGEX, $parts[$i], $matches)) { - continue; - } - - if ('' !== $matches['tag']) { - $tag = $matches['tag']; - $tagName = $matches['tag_name']; - } else { - $tag = $matches['inlined_tag']; - $tagName = $matches['inlined_tag_name']; - } - - $tagName = strtolower($tagName); - if (!isset($this->configuration['tags'][$tagName])) { - continue; - } - - if ('inline' === $this->configuration['tags'][$tagName]) { - $parts[$i] = '{'.$tag.'}'; - - continue; - } - - if (!$this->tagIsSurroundedByText($parts, $i)) { - $parts[$i] = $tag; - } - } - - $tokens[$index] = new Token([T_DOC_COMMENT, implode('', $parts)]); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('tags', 'The list of tags to fix')) - ->setAllowedTypes(['array']) - ->setAllowedValues([static function (array $value): bool { - foreach ($value as $type) { - if (!\in_array($type, ['annotation', 'inline'], true)) { - throw new InvalidOptionsException("Unknown tag type \"{$type}\"."); - } - } - - return true; - }]) - ->setDefault([ - 'api' => 'annotation', - 'author' => 'annotation', - 'copyright' => 'annotation', - 'deprecated' => 'annotation', - 'example' => 'annotation', - 'global' => 'annotation', - 'inheritDoc' => 'annotation', - 'internal' => 'annotation', - 'license' => 'annotation', - 'method' => 'annotation', - 'package' => 'annotation', - 'param' => 'annotation', - 'property' => 'annotation', - 'return' => 'annotation', - 'see' => 'annotation', - 'since' => 'annotation', - 'throws' => 'annotation', - 'todo' => 'annotation', - 'uses' => 'annotation', - 'var' => 'annotation', - 'version' => 'annotation', - ]) - ->setNormalizer(static function (Options $options, $value): array { - $normalized = []; - - foreach ($value as $tag => $type) { - $normalized[strtolower($tag)] = $type; - } - - return $normalized; - }) - ->getOption(), - ]); - } - - /** - * @param list $parts - */ - private function tagIsSurroundedByText(array $parts, int $index): bool - { - return - Preg::match('/(^|\R)\h*[^@\s]\N*/', $this->cleanComment($parts[$index - 1])) - || Preg::match('/^.*?\R\s*[^@\s]/', $this->cleanComment($parts[$index + 1])) - ; - } - - private function cleanComment(string $comment): string - { - $comment = Preg::replace('/^\/\*\*|\*\/$/', '', $comment); - - return Preg::replace('/(\R)(\h*\*)?\h*/', '$1', $comment); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php deleted file mode 100644 index a536afa9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocToCommentFixer.php +++ /dev/null @@ -1,162 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\CommentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Ceeram - * @author Dariusz Rumiński - */ -final class PhpdocToCommentFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * @var string[] - */ - private array $ignoredTags = []; - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - * - * Must run before GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyCommentFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocAnnotationWithoutDotFixer, PhpdocIndentFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer, SingleLineCommentSpacingFixer, SingleLineCommentStyleFixer. - * Must run after CommentToPhpdocFixer. - */ - public function getPriority(): int - { - /* - * Should be run before all other docblock fixers so that these fixers - * don't touch doc comments which are meant to be converted to regular - * comments. - */ - return 25; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Docblocks should only be used on structural elements.', - [ - new CodeSample( - ' $sqlite) { - $sqlite->open($path); -} -' - ), - new CodeSample( - ' $sqlite) { - $sqlite->open($path); -} - -/** @todo This should be a PHPDoc as the tag is on "ignored_tags" list */ -foreach($connections as $key => $sqlite) { - $sqlite->open($path); -} -', - ['ignored_tags' => ['todo']] - ), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function configure(array $configuration = null): void - { - parent::configure($configuration); - - $this->ignoredTags = array_map( - static function (string $tag): string { - return strtolower($tag); - }, - $this->configuration['ignored_tags'] - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('ignored_tags', 'List of ignored tags (matched case insensitively)')) - ->setAllowedTypes(['array']) - ->setDefault([]) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $commentsAnalyzer = new CommentsAnalyzer(); - - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - if ($commentsAnalyzer->isHeaderComment($tokens, $index)) { - continue; - } - - if ($commentsAnalyzer->isBeforeStructuralElement($tokens, $index)) { - continue; - } - - if (0 < Preg::matchAll('~\@([a-zA-Z0-9_\\\\-]+)\b~', $token->getContent(), $matches)) { - foreach ($matches[1] as $match) { - if (\in_array(strtolower($match), $this->ignoredTags, true)) { - continue 2; - } - } - } - - $tokens[$index] = new Token([T_COMMENT, '/*'.ltrim($token->getContent(), '/*')]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php deleted file mode 100644 index 3d41bdb8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimConsecutiveBlankLineSeparationFixer.php +++ /dev/null @@ -1,197 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\Line; -use PhpCsFixer\DocBlock\ShortDescription; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Nobu Funaki - * @author Dariusz Rumiński - */ -final class PhpdocTrimConsecutiveBlankLineSeparationFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes extra blank lines after summary and after description in PHPDoc.', - [ - new CodeSample( - 'isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $summaryEnd = (new ShortDescription($doc))->getEnd(); - - if (null !== $summaryEnd) { - $this->fixSummary($doc, $summaryEnd); - $this->fixDescription($doc, $summaryEnd); - } - - $this->fixAllTheRest($doc); - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - private function fixSummary(DocBlock $doc, int $summaryEnd): void - { - $nonBlankLineAfterSummary = $this->findNonBlankLine($doc, $summaryEnd); - - $this->removeExtraBlankLinesBetween($doc, $summaryEnd, $nonBlankLineAfterSummary); - } - - private function fixDescription(DocBlock $doc, int $summaryEnd): void - { - $annotationStart = $this->findFirstAnnotationOrEnd($doc); - - // assuming the end of the Description appears before the first Annotation - $descriptionEnd = $this->reverseFindLastUsefulContent($doc, $annotationStart); - - if (null === $descriptionEnd || $summaryEnd === $descriptionEnd) { - return; // no Description - } - - if ($annotationStart === \count($doc->getLines()) - 1) { - return; // no content after Description - } - - $this->removeExtraBlankLinesBetween($doc, $descriptionEnd, $annotationStart); - } - - private function fixAllTheRest(DocBlock $doc): void - { - $annotationStart = $this->findFirstAnnotationOrEnd($doc); - $lastLine = $this->reverseFindLastUsefulContent($doc, \count($doc->getLines()) - 1); - - if (null !== $lastLine && $annotationStart !== $lastLine) { - $this->removeExtraBlankLinesBetween($doc, $annotationStart, $lastLine); - } - } - - private function removeExtraBlankLinesBetween(DocBlock $doc, int $from, int $to): void - { - for ($index = $from + 1; $index < $to; ++$index) { - $line = $doc->getLine($index); - $next = $doc->getLine($index + 1); - $this->removeExtraBlankLine($line, $next); - } - } - - private function removeExtraBlankLine(Line $current, Line $next): void - { - if (!$current->isTheEnd() && !$current->containsUsefulContent() - && !$next->isTheEnd() && !$next->containsUsefulContent()) { - $current->remove(); - } - } - - private function findNonBlankLine(DocBlock $doc, int $after): ?int - { - foreach ($doc->getLines() as $index => $line) { - if ($index <= $after) { - continue; - } - - if ($line->containsATag() || $line->containsUsefulContent() || $line->isTheEnd()) { - return $index; - } - } - - return null; - } - - private function findFirstAnnotationOrEnd(DocBlock $doc): int - { - $index = null; - foreach ($doc->getLines() as $index => $line) { - if ($line->containsATag()) { - return $index; - } - } - - return $index; // no Annotation, return the last line - } - - private function reverseFindLastUsefulContent(DocBlock $doc, int $from): ?int - { - for ($index = $from - 1; $index >= 0; --$index) { - if ($doc->getLine($index)->containsUsefulContent()) { - return $index; - } - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php deleted file mode 100644 index d835fb33..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTrimFixer.php +++ /dev/null @@ -1,124 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class PhpdocTrimFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'PHPDoc should start and end with content, excluding the very first and last line of the docblocks.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $content = $token->getContent(); - $content = $this->fixStart($content); - // we need re-parse the docblock after fixing the start before - // fixing the end in order for the lines to be correctly indexed - $content = $this->fixEnd($content); - $tokens[$index] = new Token([T_DOC_COMMENT, $content]); - } - } - - /** - * Make sure the first useful line starts immediately after the first line. - */ - private function fixStart(string $content): string - { - return Preg::replace( - '~ - (^/\*\*) # DocComment begin - (?: - \R\h*(?:\*\h*)? # lines without useful content - (?!\R\h*\*/) # not followed by a DocComment end - )+ - (\R\h*(?:\*\h*)?\S) # first line with useful content - ~x', - '$1$2', - $content - ); - } - - /** - * Make sure the last useful line is immediately before the final line. - */ - private function fixEnd(string $content): string - { - return Preg::replace( - '~ - (\R\h*(?:\*\h*)?\S.*?) # last line with useful content - (?: - (? - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractPhpdocTypesFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; - -/** - * @author Graham Campbell - * @author Dariusz Rumiński - */ -final class PhpdocTypesFixer extends AbstractPhpdocTypesFixer implements ConfigurableFixerInterface -{ - /** - * Available types, grouped. - * - * @var array - */ - private const POSSIBLE_TYPES = [ - 'simple' => [ - 'array', - 'bool', - 'callable', - 'float', - 'int', - 'iterable', - 'null', - 'object', - 'string', - ], - 'alias' => [ - 'boolean', - 'callback', - 'double', - 'integer', - 'real', - ], - 'meta' => [ - '$this', - 'false', - 'mixed', - 'parent', - 'resource', - 'scalar', - 'self', - 'static', - 'true', - 'void', - ], - ]; - - private string $patternToFix = ''; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $typesToFix = array_merge(...array_map(static function (string $group): array { - return self::POSSIBLE_TYPES[$group]; - }, $this->configuration['groups'])); - - $this->patternToFix = sprintf( - '/(? ['simple', 'alias']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before GeneralPhpdocAnnotationRemoveFixer, GeneralPhpdocTagRenameFixer, NoBlankLinesAfterPhpdocFixer, NoEmptyPhpdocFixer, NoSuperfluousPhpdocTagsFixer, PhpdocAddMissingParamAnnotationFixer, PhpdocAlignFixer, PhpdocInlineTagNormalizerFixer, PhpdocLineSpanFixer, PhpdocNoAccessFixer, PhpdocNoAliasTagFixer, PhpdocNoEmptyReturnFixer, PhpdocNoPackageFixer, PhpdocNoUselessInheritdocFixer, PhpdocOrderByValueFixer, PhpdocOrderFixer, PhpdocReturnSelfReferenceFixer, PhpdocScalarFixer, PhpdocSeparationFixer, PhpdocSingleLineVarSpacingFixer, PhpdocSummaryFixer, PhpdocTagCasingFixer, PhpdocTagTypeFixer, PhpdocToParamTypeFixer, PhpdocToPropertyTypeFixer, PhpdocToReturnTypeFixer, PhpdocTrimConsecutiveBlankLineSeparationFixer, PhpdocTrimFixer, PhpdocTypesOrderFixer, PhpdocVarAnnotationCorrectOrderFixer, PhpdocVarWithoutNameFixer. - * Must run after PhpdocAnnotationWithoutDotFixer, PhpdocIndentFixer. - */ - public function getPriority(): int - { - /* - * Should be run before all other docblock fixers apart from the - * phpdoc_to_comment and phpdoc_indent fixer to make sure all fixers - * apply correct indentation to new code they add. This should run - * before alignment of params is done since this fixer might change - * the type and thereby un-aligning the params. We also must run before - * the phpdoc_scalar_fixer so that it can make changes after us. - */ - return 16; - } - - /** - * {@inheritdoc} - */ - protected function normalize(string $type): string - { - return Preg::replaceCallback( - $this->patternToFix, - function (array $matches): string { - return strtolower($matches[0]); - }, - $type - ); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $possibleGroups = array_keys(self::POSSIBLE_TYPES); - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('groups', 'Type groups to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($possibleGroups)]) - ->setDefault($possibleGroups) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php deleted file mode 100644 index 6cff3474..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php +++ /dev/null @@ -1,206 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\Annotation; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\TypeExpression; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class PhpdocTypesOrderFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Sorts PHPDoc types.', - [ - new CodeSample( - ' 'always_last'] - ), - new CodeSample( - ' 'alpha'] - ), - new CodeSample( - ' 'alpha', - 'null_adjustment' => 'always_last', - ] - ), - new CodeSample( - ' 'alpha', - 'null_adjustment' => 'none', - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before PhpdocAlignFixer. - * Must run after AlignMultilineCommentFixer, CommentToPhpdocFixer, PhpdocAnnotationWithoutDotFixer, PhpdocIndentFixer, PhpdocScalarFixer, PhpdocToCommentFixer, PhpdocTypesFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_DOC_COMMENT); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('sort_algorithm', 'The sorting algorithm to apply.')) - ->setAllowedValues(['alpha', 'none']) - ->setDefault('alpha') - ->getOption(), - (new FixerOptionBuilder('null_adjustment', 'Forces the position of `null` (overrides `sort_algorithm`).')) - ->setAllowedValues(['always_first', 'always_last', 'none']) - ->setDefault('always_first') - ->getOption(), - ]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - $annotations = $doc->getAnnotationsOfType(Annotation::getTagsWithTypes()); - - if (0 === \count($annotations)) { - continue; - } - - foreach ($annotations as $annotation) { - // fix main types - $annotation->setTypes( - $this->sortTypes( - $annotation->getTypeExpression() - ) - ); - - // fix @method parameters types - $line = $doc->getLine($annotation->getStart()); - $line->setContent(Preg::replaceCallback('/(@method\s+.+?\s+\w+\()(.*)\)/', function (array $matches) { - $sorted = Preg::replaceCallback('/([^\s,]+)([\s]+\$[^\s,]+)/', function (array $matches): string { - return $this->sortJoinedTypes($matches[1]).$matches[2]; - }, $matches[2]); - - return $matches[1].$sorted.')'; - }, $line->getContent())); - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - /** - * @return string[] - */ - private function sortTypes(TypeExpression $typeExpression): array - { - $normalizeType = static function (string $type): string { - return Preg::replace('/^\\??\\\?/', '', $type); - }; - - $typeExpression->sortTypes( - function (TypeExpression $a, TypeExpression $b) use ($normalizeType): int { - $a = $normalizeType($a->toString()); - $b = $normalizeType($b->toString()); - $lowerCaseA = strtolower($a); - $lowerCaseB = strtolower($b); - - if ('none' !== $this->configuration['null_adjustment']) { - if ('null' === $lowerCaseA && 'null' !== $lowerCaseB) { - return 'always_last' === $this->configuration['null_adjustment'] ? 1 : -1; - } - if ('null' !== $lowerCaseA && 'null' === $lowerCaseB) { - return 'always_last' === $this->configuration['null_adjustment'] ? -1 : 1; - } - } - - if ('alpha' === $this->configuration['sort_algorithm']) { - return strcasecmp($a, $b); - } - - return 0; - } - ); - - return $typeExpression->getTypes(); - } - - private function sortJoinedTypes(string $types): string - { - $typeExpression = new TypeExpression($types, null, []); - - return implode('|', $this->sortTypes($typeExpression)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php deleted file mode 100644 index 400f8dd7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarAnnotationCorrectOrderFixer.php +++ /dev/null @@ -1,81 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - */ -final class PhpdocVarAnnotationCorrectOrderFixer extends AbstractFixer -{ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - '`@var` and `@type` annotations must have type and name in the correct order.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - if (false === stripos($token->getContent(), '@var') && false === stripos($token->getContent(), '@type')) { - continue; - } - - $newContent = Preg::replace( - '/(@(?:type|var)\s*)(\$\S+)(\h+)([^\$](?:[^<\s]|<[^>]*>)*)(\s|\*)/i', - '$1$4$3$2$5', - $token->getContent() - ); - - if ($newContent === $token->getContent()) { - continue; - } - - $tokens[$index] = new Token([$token->getId(), $newContent]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php deleted file mode 100644 index 80200cf9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocVarWithoutNameFixer.php +++ /dev/null @@ -1,160 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Phpdoc; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\DocBlock\DocBlock; -use PhpCsFixer\DocBlock\Line; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - * @author Dave van der Brugge - */ -final class PhpdocVarWithoutNameFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - '`@var` and `@type` annotations of classy properties should not contain the name.', - [new CodeSample('isTokenKindFound(T_DOC_COMMENT) && $tokens->isAnyTokenKindsFound([T_CLASS, T_TRAIT]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if (null === $nextIndex) { - continue; - } - - // For people writing "static public $foo" instead of "public static $foo" - if ($tokens[$nextIndex]->isGivenKind(T_STATIC)) { - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - } - - // We want only doc blocks that are for properties and thus have specified access modifiers next - $propertyModifierKinds = [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $propertyModifierKinds[] = T_READONLY; - } - - if (!$tokens[$nextIndex]->isGivenKind($propertyModifierKinds)) { - continue; - } - - $doc = new DocBlock($token->getContent()); - - $firstLevelLines = $this->getFirstLevelLines($doc); - $annotations = $doc->getAnnotationsOfType(['type', 'var']); - - foreach ($annotations as $annotation) { - if (isset($firstLevelLines[$annotation->getStart()])) { - $this->fixLine($firstLevelLines[$annotation->getStart()]); - } - } - - $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]); - } - } - - private function fixLine(Line $line): void - { - $content = $line->getContent(); - - Preg::matchAll('/ \$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $content, $matches); - - if (isset($matches[0][0])) { - $line->setContent(str_replace($matches[0][0], '', $content)); - } - } - - /** - * @return Line[] - */ - private function getFirstLevelLines(DocBlock $docBlock): array - { - $nested = 0; - $lines = $docBlock->getLines(); - - foreach ($lines as $index => $line) { - $content = $line->getContent(); - - if (Preg::match('/\s*\*\s*}$/', $content)) { - --$nested; - } - - if ($nested > 0) { - unset($lines[$index]); - } - - if (Preg::match('/\s\{$/', $content)) { - ++$nested; - } - } - - return $lines; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php deleted file mode 100644 index 7656f950..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/NoUselessReturnFixer.php +++ /dev/null @@ -1,112 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ReturnNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -final class NoUselessReturnFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAllTokenKindsFound([T_FUNCTION, T_RETURN]); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be an empty `return` statement at the end of a function.', - [ - new CodeSample( - ' $token) { - if (!$token->isGivenKind(T_FUNCTION)) { - continue; - } - - $index = $tokens->getNextTokenOfKind($index, [';', '{']); - if ($tokens[$index]->equals('{')) { - $this->fixFunction($tokens, $index, $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index)); - } - } - } - - /** - * @param int $start Token index of the opening brace token of the function - * @param int $end Token index of the closing brace token of the function - */ - private function fixFunction(Tokens $tokens, int $start, int $end): void - { - for ($index = $end; $index > $start; --$index) { - if (!$tokens[$index]->isGivenKind(T_RETURN)) { - continue; - } - - $nextAt = $tokens->getNextMeaningfulToken($index); - if (!$tokens[$nextAt]->equals(';')) { - continue; - } - - if ($tokens->getNextMeaningfulToken($nextAt) !== $end) { - continue; - } - - $previous = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$previous]->equalsAny([[T_ELSE], ')'])) { - continue; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - $tokens->clearTokenAndMergeSurroundingWhitespace($nextAt); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php deleted file mode 100644 index 5ca7cdb9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/ReturnAssignmentFixer.php +++ /dev/null @@ -1,482 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ReturnNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -final class ReturnAssignmentFixer extends AbstractFixer -{ - /** - * @var TokensAnalyzer - */ - private $tokensAnalyzer; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Local, dynamic and directly referenced variables should not be assigned and directly returned by a function or method.', - [new CodeSample("isAllTokenKindsFound([T_FUNCTION, T_RETURN, T_VARIABLE]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokenCount = \count($tokens); - $this->tokensAnalyzer = new TokensAnalyzer($tokens); - - for ($index = 1; $index < $tokenCount; ++$index) { - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - continue; - } - - $next = $tokens->getNextMeaningfulToken($index); - if ($tokens[$next]->isGivenKind(CT::T_RETURN_REF)) { - continue; - } - - $functionOpenIndex = $tokens->getNextTokenOfKind($index, ['{', ';']); - if ($tokens[$functionOpenIndex]->equals(';')) { // abstract function - $index = $functionOpenIndex - 1; - - continue; - } - - $functionCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $functionOpenIndex); - $totalTokensAdded = 0; - - do { - $tokensAdded = $this->fixFunction( - $tokens, - $index, - $functionOpenIndex, - $functionCloseIndex - ); - - $totalTokensAdded += $tokensAdded; - } while ($tokensAdded > 0); - - $index = $functionCloseIndex + $totalTokensAdded; - $tokenCount += $totalTokensAdded; - } - } - - /** - * @param int $functionIndex token index of T_FUNCTION - * @param int $functionOpenIndex token index of the opening brace token of the function - * @param int $functionCloseIndex token index of the closing brace token of the function - * - * @return int >= 0 number of tokens inserted into the Tokens collection - */ - private function fixFunction(Tokens $tokens, int $functionIndex, int $functionOpenIndex, int $functionCloseIndex): int - { - static $riskyKinds = [ - CT::T_DYNAMIC_VAR_BRACE_OPEN, // "$h = ${$g};" case - T_EVAL, // "$c = eval('return $this;');" case - T_GLOBAL, - T_INCLUDE, // loading additional symbols we cannot analyze here - T_INCLUDE_ONCE, // " - T_REQUIRE, // " - T_REQUIRE_ONCE, // " - ]; - - $inserted = 0; - $candidates = []; - $isRisky = false; - - if ($tokens[$tokens->getNextMeaningfulToken($functionIndex)]->isGivenKind(CT::T_RETURN_REF)) { - $isRisky = true; - } - - // go through the function declaration and check if references are passed - // - check if it will be risky to fix return statements of this function - for ($index = $functionIndex + 1; $index < $functionOpenIndex; ++$index) { - if ($tokens[$index]->equals('&')) { - $isRisky = true; - - break; - } - } - - // go through all the tokens of the body of the function: - // - check if it will be risky to fix return statements of this function - // - check nested functions; fix when found and update the upper limit + number of inserted token - // - check for return statements that might be fixed (based on if fixing will be risky, which is only know after analyzing the whole function) - - for ($index = $functionOpenIndex + 1; $index < $functionCloseIndex; ++$index) { - if ($tokens[$index]->isGivenKind(T_FUNCTION)) { - $nestedFunctionOpenIndex = $tokens->getNextTokenOfKind($index, ['{', ';']); - if ($tokens[$nestedFunctionOpenIndex]->equals(';')) { // abstract function - $index = $nestedFunctionOpenIndex - 1; - - continue; - } - - $nestedFunctionCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $nestedFunctionOpenIndex); - - $tokensAdded = $this->fixFunction( - $tokens, - $index, - $nestedFunctionOpenIndex, - $nestedFunctionCloseIndex - ); - - $index = $nestedFunctionCloseIndex + $tokensAdded; - $functionCloseIndex += $tokensAdded; - $inserted += $tokensAdded; - } - - if ($isRisky) { - continue; // don't bother to look into anything else than nested functions as the current is risky already - } - - if ($tokens[$index]->equals('&')) { - $isRisky = true; - - continue; - } - - if ($tokens[$index]->isGivenKind(T_RETURN)) { - $candidates[] = $index; - - continue; - } - - // test if there is anything in the function body that might - // change global state or indirect changes (like through references, eval, etc.) - - if ($tokens[$index]->isGivenKind($riskyKinds)) { - $isRisky = true; - - continue; - } - - if ($tokens[$index]->isGivenKind(T_STATIC)) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$nextIndex]->isGivenKind(T_FUNCTION)) { - $isRisky = true; // "static $a" case - - continue; - } - } - - if ($tokens[$index]->equals('$')) { - $nextIndex = $tokens->getNextMeaningfulToken($index); - if ($tokens[$nextIndex]->isGivenKind(T_VARIABLE)) { - $isRisky = true; // "$$a" case - - continue; - } - } - - if ($this->tokensAnalyzer->isSuperGlobal($index)) { - $isRisky = true; - - continue; - } - } - - if ($isRisky) { - return $inserted; - } - - // fix the candidates in reverse order when applicable - for ($i = \count($candidates) - 1; $i >= 0; --$i) { - $index = $candidates[$i]; - - // Check if returning only a variable (i.e. not the result of an expression, function call etc.) - $returnVarIndex = $tokens->getNextMeaningfulToken($index); - if (!$tokens[$returnVarIndex]->isGivenKind(T_VARIABLE)) { - continue; // example: "return 1;" - } - - $endReturnVarIndex = $tokens->getNextMeaningfulToken($returnVarIndex); - if (!$tokens[$endReturnVarIndex]->equalsAny([';', [T_CLOSE_TAG]])) { - continue; // example: "return $a + 1;" - } - - // Check that the variable is assigned just before it is returned - $assignVarEndIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$assignVarEndIndex]->equals(';')) { - continue; // example: "? return $a;" - } - - // Note: here we are @ "; return $a;" (or "; return $a ? >") - while (true) { - $prevMeaningFul = $tokens->getPrevMeaningfulToken($assignVarEndIndex); - - if (!$tokens[$prevMeaningFul]->equals(')')) { - break; - } - - $assignVarEndIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $prevMeaningFul); - } - - $assignVarOperatorIndex = $tokens->getPrevTokenOfKind( - $assignVarEndIndex, - ['=', ';', '{', '}', [T_OPEN_TAG], [T_OPEN_TAG_WITH_ECHO]] - ); - - if ($tokens[$assignVarOperatorIndex]->equals('}')) { - $startIndex = $this->isCloseBracePartOfDefinition($tokens, $assignVarOperatorIndex); // test for `anonymous class`, `lambda` and `match` - - if (null === $startIndex) { - continue; - } - - $assignVarOperatorIndex = $tokens->getPrevMeaningfulToken($startIndex); - } - - if (!$tokens[$assignVarOperatorIndex]->equals('=')) { - continue; - } - - // Note: here we are @ "= [^;{] ; return $a;" - $assignVarIndex = $tokens->getPrevMeaningfulToken($assignVarOperatorIndex); - if (!$tokens[$assignVarIndex]->equals($tokens[$returnVarIndex], false)) { - continue; - } - - // Note: here we are @ "$a = [^;{] ; return $a;" - $beforeAssignVarIndex = $tokens->getPrevMeaningfulToken($assignVarIndex); - if (!$tokens[$beforeAssignVarIndex]->equalsAny([';', '{', '}'])) { - continue; - } - - // Note: here we are @ "[;{}] $a = [^;{] ; return $a;" - $inserted += $this->simplifyReturnStatement( - $tokens, - $assignVarIndex, - $assignVarOperatorIndex, - $index, - $endReturnVarIndex - ); - } - - return $inserted; - } - - /** - * @return int >= 0 number of tokens inserted into the Tokens collection - */ - private function simplifyReturnStatement( - Tokens $tokens, - int $assignVarIndex, - int $assignVarOperatorIndex, - int $returnIndex, - int $returnVarEndIndex - ): int { - $inserted = 0; - $originalIndent = $tokens[$assignVarIndex - 1]->isWhitespace() - ? $tokens[$assignVarIndex - 1]->getContent() - : null - ; - - // remove the return statement - if ($tokens[$returnVarEndIndex]->equals(';')) { // do not remove PHP close tags - $tokens->clearTokenAndMergeSurroundingWhitespace($returnVarEndIndex); - } - - for ($i = $returnIndex; $i <= $returnVarEndIndex - 1; ++$i) { - $this->clearIfSave($tokens, $i); - } - - // remove no longer needed indentation of the old/remove return statement - if ($tokens[$returnIndex - 1]->isWhitespace()) { - $content = $tokens[$returnIndex - 1]->getContent(); - $fistLinebreakPos = strrpos($content, "\n"); - $content = false === $fistLinebreakPos - ? ' ' - : substr($content, $fistLinebreakPos) - ; - - $tokens[$returnIndex - 1] = new Token([T_WHITESPACE, $content]); - } - - // remove the variable and the assignment - for ($i = $assignVarIndex; $i <= $assignVarOperatorIndex; ++$i) { - $this->clearIfSave($tokens, $i); - } - - // insert new return statement - $tokens->insertAt($assignVarIndex, new Token([T_RETURN, 'return'])); - ++$inserted; - - // use the original indent of the var assignment for the new return statement - if ( - null !== $originalIndent - && $tokens[$assignVarIndex - 1]->isWhitespace() - && $originalIndent !== $tokens[$assignVarIndex - 1]->getContent() - ) { - $tokens[$assignVarIndex - 1] = new Token([T_WHITESPACE, $originalIndent]); - } - - // remove trailing space after the new return statement which might be added during the cleanup process - $nextIndex = $tokens->getNonEmptySibling($assignVarIndex, 1); - if (!$tokens[$nextIndex]->isWhitespace()) { - $tokens->insertAt($nextIndex, new Token([T_WHITESPACE, ' '])); - ++$inserted; - } - - return $inserted; - } - - private function clearIfSave(Tokens $tokens, int $index): void - { - if ($tokens[$index]->isComment()) { - return; - } - - if ($tokens[$index]->isWhitespace() && $tokens[$tokens->getPrevNonWhitespace($index)]->isComment()) { - return; - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - /** - * @param int $index open brace index - * - * @return null|int index of the first token of a definition (lambda, anonymous class or match) or `null` if not an anonymous - */ - private function isCloseBracePartOfDefinition(Tokens $tokens, int $index): ?int - { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - $candidateIndex = $this->isOpenBraceOfLambda($tokens, $index); - - if (null !== $candidateIndex) { - return $candidateIndex; - } - - $candidateIndex = $this->isOpenBraceOfAnonymousClass($tokens, $index); - - return $candidateIndex ?? $this->isOpenBraceOfMatch($tokens, $index); - } - - /** - * @param int $index open brace index - * - * @return null|int index of T_NEW of anonymous class or `null` if not an anonymous - */ - private function isOpenBraceOfAnonymousClass(Tokens $tokens, int $index): ?int - { - do { - $index = $tokens->getPrevMeaningfulToken($index); - } while ($tokens[$index]->equalsAny([',', [T_STRING], [T_IMPLEMENTS], [T_EXTENDS]])); - - if ($tokens[$index]->equals(')')) { - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $index = $tokens->getPrevMeaningfulToken($index); - } - - if (!$tokens[$index]->isGivenKind(T_CLASS)) { - return null; - } - - $index = $tokens->getPrevMeaningfulToken($index); - - return $tokens[$index]->isGivenKind(T_NEW) ? $index : null; - } - - /** - * @param int $index open brace index - * - * @return null|int index of T_FUNCTION or T_STATIC of lambda or `null` if not a lambda - */ - private function isOpenBraceOfLambda(Tokens $tokens, int $index): ?int - { - $index = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$index]->equals(')')) { - return null; - } - - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $index = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$index]->isGivenKind(CT::T_USE_LAMBDA)) { - $index = $tokens->getPrevTokenOfKind($index, [')']); - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $index = $tokens->getPrevMeaningfulToken($index); - } - - if ($tokens[$index]->isGivenKind(CT::T_RETURN_REF)) { - $index = $tokens->getPrevMeaningfulToken($index); - } - - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - return null; - } - - $staticCandidate = $tokens->getPrevMeaningfulToken($index); - - return $tokens[$staticCandidate]->isGivenKind(T_STATIC) ? $staticCandidate : $index; - } - - /** - * @param int $index open brace index - * - * @return null|int index of T_MATCH or `null` if not a `match` - */ - private function isOpenBraceOfMatch(Tokens $tokens, int $index): ?int - { - if (!\defined('T_MATCH') || !$tokens->isTokenKindFound(T_MATCH)) { // @TODO: drop condition when PHP 8.0+ is required - return null; - } - - $index = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$index]->equals(')')) { - return null; - } - - $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $index = $tokens->getPrevMeaningfulToken($index); - - return $tokens[$index]->isGivenKind(T_MATCH) ? $index : null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php deleted file mode 100644 index 800c21c1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/ReturnNotation/SimplifiedNullReturnFixer.php +++ /dev/null @@ -1,157 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\ReturnNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class SimplifiedNullReturnFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'A return statement wishing to return `void` should not return `null`.', - [ - new CodeSample("isTokenKindFound(T_RETURN); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_RETURN)) { - continue; - } - - if ($this->needFixing($tokens, $index)) { - $this->clear($tokens, $index); - } - } - } - - /** - * Clear the return statement located at a given index. - */ - private function clear(Tokens $tokens, int $index): void - { - while (!$tokens[++$index]->equals(';')) { - if ($this->shouldClearToken($tokens, $index)) { - $tokens->clearAt($index); - } - } - } - - /** - * Does the return statement located at a given index need fixing? - */ - private function needFixing(Tokens $tokens, int $index): bool - { - if ($this->isStrictOrNullableReturnTypeFunction($tokens, $index)) { - return false; - } - - $content = ''; - while (!$tokens[$index]->equals(';')) { - $index = $tokens->getNextMeaningfulToken($index); - $content .= $tokens[$index]->getContent(); - } - - $content = ltrim($content, '('); - $content = rtrim($content, ');'); - - return 'null' === strtolower($content); - } - - /** - * Is the return within a function with a non-void or nullable return type? - * - * @param int $returnIndex Current return token index - */ - private function isStrictOrNullableReturnTypeFunction(Tokens $tokens, int $returnIndex): bool - { - $functionIndex = $returnIndex; - do { - $functionIndex = $tokens->getPrevTokenOfKind($functionIndex, [[T_FUNCTION]]); - if (null === $functionIndex) { - return false; - } - $openingCurlyBraceIndex = $tokens->getNextTokenOfKind($functionIndex, ['{']); - $closingCurlyBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $openingCurlyBraceIndex); - } while ($closingCurlyBraceIndex < $returnIndex); - - $possibleVoidIndex = $tokens->getPrevMeaningfulToken($openingCurlyBraceIndex); - $isStrictReturnType = $tokens[$possibleVoidIndex]->isGivenKind(T_STRING) && 'void' !== $tokens[$possibleVoidIndex]->getContent(); - - $nullableTypeIndex = $tokens->getNextTokenOfKind($functionIndex, [[CT::T_NULLABLE_TYPE]]); - $isNullableReturnType = null !== $nullableTypeIndex && $nullableTypeIndex < $openingCurlyBraceIndex; - - return $isStrictReturnType || $isNullableReturnType; - } - - /** - * Should we clear the specific token? - * - * If the token is a comment, or is whitespace that is immediately before a - * comment, then we'll leave it alone. - */ - private function shouldClearToken(Tokens $tokens, int $index): bool - { - $token = $tokens[$index]; - - return !$token->isComment() && !($token->isWhitespace() && $tokens[$index + 1]->isComment()); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php deleted file mode 100644 index 919f2df3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/MultilineWhitespaceBeforeSemicolonsFixer.php +++ /dev/null @@ -1,295 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Semicolon; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - * @author Egidijus Girčys - */ -final class MultilineWhitespaceBeforeSemicolonsFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @internal - */ - public const STRATEGY_NO_MULTI_LINE = 'no_multi_line'; - - /** - * @internal - */ - public const STRATEGY_NEW_LINE_FOR_CHAINED_CALLS = 'new_line_for_chained_calls'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Forbid multi-line whitespace before the closing semicolon or move the semicolon to the new line for chained calls.', - [ - new CodeSample( - 'method1() - ->method2() - ->method(3); - ?> -', - ['strategy' => self::STRATEGY_NEW_LINE_FOR_CHAINED_CALLS] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before SpaceAfterSemicolonFixer. - * Must run after CombineConsecutiveIssetsFixer, GetClassToClassKeywordFixer, NoEmptyStatementFixer, SimplifiedIfReturnFixer, SingleImportPerStatementFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(';'); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder( - 'strategy', - 'Forbid multi-line whitespace or move the semicolon to the new line for chained calls.' - )) - ->setAllowedValues([self::STRATEGY_NO_MULTI_LINE, self::STRATEGY_NEW_LINE_FOR_CHAINED_CALLS]) - ->setDefault(self::STRATEGY_NO_MULTI_LINE) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - if (self::STRATEGY_NEW_LINE_FOR_CHAINED_CALLS === $this->configuration['strategy']) { - $this->applyChainedCallsFix($tokens); - - return; - } - - if (self::STRATEGY_NO_MULTI_LINE === $this->configuration['strategy']) { - $this->applyNoMultiLineFix($tokens); - } - } - - private function applyNoMultiLineFix(Tokens $tokens): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - foreach ($tokens as $index => $token) { - if (!$token->equals(';')) { - continue; - } - - $previousIndex = $index - 1; - $previous = $tokens[$previousIndex]; - if (!$previous->isWhitespace() || !str_contains($previous->getContent(), "\n")) { - continue; - } - - $content = $previous->getContent(); - if (str_starts_with($content, $lineEnding) && $tokens[$index - 2]->isComment()) { - $tokens->ensureWhitespaceAtIndex($previousIndex, 0, $lineEnding); - } else { - $tokens->clearAt($previousIndex); - } - } - } - - private function applyChainedCallsFix(Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index >= 0; --$index) { - // continue if token is not a semicolon - if (!$tokens[$index]->equals(';')) { - continue; - } - - // get the indent of the chained call, null in case it's not a chained call - $indent = $this->findWhitespaceBeforeFirstCall($index - 1, $tokens); - - if (null === $indent) { - continue; - } - - // unset semicolon - $tokens->clearAt($index); - - // find the line ending token index after the semicolon - $index = $this->getNewLineIndex($index, $tokens); - - // line ending string of the last method call - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - // appended new line to the last method call - $newline = new Token([T_WHITESPACE, $lineEnding.$indent]); - - // insert the new line with indented semicolon - $tokens->insertAt($index, [$newline, new Token(';')]); - } - } - - /** - * Find the index for the new line. Return the given index when there's no new line. - */ - private function getNewLineIndex(int $index, Tokens $tokens): int - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - for ($index, $count = \count($tokens); $index < $count; ++$index) { - if (false !== strstr($tokens[$index]->getContent(), $lineEnding)) { - return $index; - } - } - - return $index; - } - - /** - * Checks if the semicolon closes a chained call and returns the whitespace of the first call at $index. - * i.e. it will return the whitespace marked with '____' in the example underneath. - * - * .. - * ____$this->methodCall() - * ->anotherCall(); - * .. - */ - private function findWhitespaceBeforeFirstCall(int $index, Tokens $tokens): ?string - { - // semicolon followed by a closing bracket? - if (!$tokens[$index]->equals(')')) { - return null; - } - - // find opening bracket - $openingBrackets = 1; - for (--$index; $index > 0; --$index) { - if ($tokens[$index]->equals(')')) { - ++$openingBrackets; - - continue; - } - - if ($tokens[$index]->equals('(')) { - if (1 === $openingBrackets) { - break; - } - --$openingBrackets; - } - } - - // method name - if (!$tokens[--$index]->isGivenKind(T_STRING)) { - return null; - } - - // ->, ?-> or :: - if (!$tokens[--$index]->isObjectOperator() && !$tokens[$index]->isGivenKind(T_DOUBLE_COLON)) { - return null; - } - - // white space - if (!$tokens[--$index]->isGivenKind(T_WHITESPACE)) { - return null; - } - - $closingBrackets = 0; - for ($index; $index >= 0; --$index) { - if ($tokens[$index]->equals(')')) { - ++$closingBrackets; - } - - if ($tokens[$index]->equals('(')) { - --$closingBrackets; - } - - // must be the variable of the first call in the chain - if ($tokens[$index]->isGivenKind([T_VARIABLE, T_RETURN, T_STRING]) && 0 === $closingBrackets) { - if ($tokens[--$index]->isGivenKind(T_WHITESPACE) - || $tokens[$index]->isGivenKind(T_OPEN_TAG)) { - return $this->getIndentAt($tokens, $index); - } - } - } - - return null; - } - - private function getIndentAt(Tokens $tokens, int $index): ?string - { - $content = ''; - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - // find line ending token - for ($index; $index > 0; --$index) { - if (false !== strstr($tokens[$index]->getContent(), $lineEnding)) { - break; - } - } - - if ($tokens[$index]->isWhitespace()) { - $content = $tokens[$index]->getContent(); - --$index; - } - - if ($tokens[$index]->isGivenKind(T_OPEN_TAG)) { - $content = $tokens[$index]->getContent().$content; - } - - if (1 === Preg::match('/\R{1}(\h*)$/', $content, $matches)) { - return $matches[1]; - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php deleted file mode 100644 index 11b23f0d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoEmptyStatementFixer.php +++ /dev/null @@ -1,195 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Semicolon; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Dariusz Rumiński - */ -final class NoEmptyStatementFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove useless (semicolon) statements.', - [ - new CodeSample("isTokenKindFound(';'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) { - if ($tokens[$index]->isGivenKind([T_BREAK, T_CONTINUE])) { - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->equals([T_LNUMBER, '1'])) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - continue; - } - - // skip T_FOR parenthesis to ignore double `;` like `for ($i = 1; ; ++$i) {...}` - if ($tokens[$index]->isGivenKind(T_FOR)) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $tokens->getNextMeaningfulToken($index)) + 1; - - continue; - } - - if (!$tokens[$index]->equals(';')) { - continue; - } - - $previousMeaningfulIndex = $tokens->getPrevMeaningfulToken($index); - - // A semicolon can always be removed if it follows a semicolon, '{' or opening tag. - if ($tokens[$previousMeaningfulIndex]->equalsAny(['{', ';', [T_OPEN_TAG]])) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - continue; - } - - // A semicolon might be removed if it follows a '}' but only if the brace is part of certain structures. - if ($tokens[$previousMeaningfulIndex]->equals('}')) { - $this->fixSemicolonAfterCurlyBraceClose($tokens, $index, $previousMeaningfulIndex); - - continue; - } - - // A semicolon might be removed together with its noop statement, for example "getPrevMeaningfulToken($previousMeaningfulIndex); - - if ( - $tokens[$prePreviousMeaningfulIndex]->equalsAny([';', '{', '}', [T_OPEN_TAG]]) - && $tokens[$previousMeaningfulIndex]->isGivenKind([T_CONSTANT_ENCAPSED_STRING, T_DNUMBER, T_LNUMBER, T_STRING, T_VARIABLE]) - ) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - $tokens->clearTokenAndMergeSurroundingWhitespace($previousMeaningfulIndex); - } - } - } - - /** - * Fix semicolon after closing curly brace if needed. - * - * Test for the following cases - * - just '{' '}' block (following open tag or ';') - * - if, else, elseif - * - interface, trait, class (but not anonymous) - * - catch, finally (but not try) - * - for, foreach, while (but not 'do - while') - * - switch - * - function (declaration, but not lambda) - * - declare (with '{' '}') - * - namespace (with '{' '}') - * - * @param int $index Semicolon index - */ - private function fixSemicolonAfterCurlyBraceClose(Tokens $tokens, int $index, int $curlyCloseIndex): void - { - static $beforeCurlyOpeningKinds = null; - - if (null === $beforeCurlyOpeningKinds) { - $beforeCurlyOpeningKinds = [T_ELSE, T_FINALLY, T_NAMESPACE, T_OPEN_TAG]; - } - - $curlyOpeningIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $curlyCloseIndex); - $beforeCurlyOpeningIndex = $tokens->getPrevMeaningfulToken($curlyOpeningIndex); - - if ($tokens[$beforeCurlyOpeningIndex]->isGivenKind($beforeCurlyOpeningKinds) || $tokens[$beforeCurlyOpeningIndex]->equalsAny([';', '{', '}'])) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - return; - } - - // check for namespaces and class, interface and trait definitions - if ($tokens[$beforeCurlyOpeningIndex]->isGivenKind(T_STRING)) { - $classyTestIndex = $tokens->getPrevMeaningfulToken($beforeCurlyOpeningIndex); - - while ($tokens[$classyTestIndex]->equals(',') || $tokens[$classyTestIndex]->isGivenKind([T_STRING, T_NS_SEPARATOR, T_EXTENDS, T_IMPLEMENTS])) { - $classyTestIndex = $tokens->getPrevMeaningfulToken($classyTestIndex); - } - - $tokensAnalyzer = new TokensAnalyzer($tokens); - - if ( - $tokens[$classyTestIndex]->isGivenKind(T_NAMESPACE) - || ($tokens[$classyTestIndex]->isClassy() && !$tokensAnalyzer->isAnonymousClass($classyTestIndex)) - ) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - } - - return; - } - - // early return check, below only control structures with conditions are fixed - if (!$tokens[$beforeCurlyOpeningIndex]->equals(')')) { - return; - } - - $openingBraceIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $beforeCurlyOpeningIndex); - $beforeOpeningBraceIndex = $tokens->getPrevMeaningfulToken($openingBraceIndex); - - if ($tokens[$beforeOpeningBraceIndex]->isGivenKind([T_IF, T_ELSEIF, T_FOR, T_FOREACH, T_WHILE, T_SWITCH, T_CATCH, T_DECLARE])) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); - - return; - } - - // check for function definition - if ($tokens[$beforeOpeningBraceIndex]->isGivenKind(T_STRING)) { - $beforeStringIndex = $tokens->getPrevMeaningfulToken($beforeOpeningBraceIndex); - - if ($tokens[$beforeStringIndex]->isGivenKind(T_FUNCTION)) { - $tokens->clearTokenAndMergeSurroundingWhitespace($index); // implicit return - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php deleted file mode 100644 index c3f0d135..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/NoSinglelineWhitespaceBeforeSemicolonsFixer.php +++ /dev/null @@ -1,75 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Semicolon; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Graham Campbell - */ -final class NoSinglelineWhitespaceBeforeSemicolonsFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Single-line whitespace before closing semicolon are prohibited.', - [new CodeSample("foo() ;\n")] - ); - } - - /** - * {@inheritdoc} - * - * Must run after CombineConsecutiveIssetsFixer, FunctionToConstantFixer, NoEmptyStatementFixer, NoUnneededImportAliasFixer, SimplifiedIfReturnFixer, SingleImportPerStatementFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(';'); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->equals(';') || !$tokens[$index - 1]->isWhitespace(" \t")) { - continue; - } - - if ($tokens[$index - 2]->equals(';')) { - // do not remove all whitespace before the semicolon because it is also whitespace after another semicolon - $tokens->ensureWhitespaceAtIndex($index - 1, 0, ' '); - } elseif (!$tokens[$index - 2]->isComment()) { - $tokens->clearAt($index - 1); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php deleted file mode 100644 index c9a9131f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SemicolonAfterInstructionFixer.php +++ /dev/null @@ -1,73 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Semicolon; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SemicolonAfterInstructionFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Instructions must be terminated with a semicolon.', - [new CodeSample("\n")] - ); - } - - /** - * {@inheritdoc} - * - * Must run before SimplifiedIfReturnFixer. - */ - public function getPriority(): int - { - return 2; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_CLOSE_TAG); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; $index > 1; --$index) { - if (!$tokens[$index]->isGivenKind(T_CLOSE_TAG)) { - continue; - } - - $prev = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$prev]->equalsAny([';', '{', '}', ':', [T_OPEN_TAG]])) { - continue; - } - - $tokens->insertAt($prev + 1, new Token(';')); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php deleted file mode 100644 index 799ee5a8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Semicolon/SpaceAfterSemicolonFixer.php +++ /dev/null @@ -1,146 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Semicolon; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class SpaceAfterSemicolonFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Fix whitespace after a semicolon.', - [ - new CodeSample( - " true, - ]), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after CombineConsecutiveUnsetsFixer, MultilineWhitespaceBeforeSemicolonsFixer, NoEmptyStatementFixer, OrderedClassElementsFixer, SingleImportPerStatementFixer, SingleTraitInsertPerStatementFixer. - */ - public function getPriority(): int - { - return -1; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(';'); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('remove_in_empty_for_expressions', 'Whether spaces should be removed for empty `for` expressions.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $insideForParenthesesUntil = null; - - for ($index = 0, $max = \count($tokens) - 1; $index < $max; ++$index) { - if (true === $this->configuration['remove_in_empty_for_expressions']) { - if ($tokens[$index]->isGivenKind(T_FOR)) { - $index = $tokens->getNextMeaningfulToken($index); - $insideForParenthesesUntil = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - continue; - } - - if ($index === $insideForParenthesesUntil) { - $insideForParenthesesUntil = null; - - continue; - } - } - - if (!$tokens[$index]->equals(';')) { - continue; - } - - if (!$tokens[$index + 1]->isWhitespace()) { - if ( - !$tokens[$index + 1]->equalsAny([')', [T_INLINE_HTML]]) && ( - false === $this->configuration['remove_in_empty_for_expressions'] - || !$tokens[$index + 1]->equals(';') - ) - ) { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, ' '])); - ++$max; - } - - continue; - } - - if ( - null !== $insideForParenthesesUntil - && ($tokens[$index + 2]->equals(';') || $index + 2 === $insideForParenthesesUntil) - && !Preg::match('/\R/', $tokens[$index + 1]->getContent()) - ) { - $tokens->clearAt($index + 1); - - continue; - } - - if ( - isset($tokens[$index + 2]) - && !$tokens[$index + 1]->equals([T_WHITESPACE, ' ']) - && $tokens[$index + 1]->isWhitespace(" \t") - && !$tokens[$index + 2]->isComment() - && !$tokens[$index + 2]->equals(')') - ) { - $tokens[$index + 1] = new Token([T_WHITESPACE, ' ']); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php deleted file mode 100644 index 76e26b47..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/DeclareStrictTypesFixer.php +++ /dev/null @@ -1,152 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Strict; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Jordi Boggiano - */ -final class DeclareStrictTypesFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Force strict types declaration in all files. Requires PHP >= 7.0.', - [ - new CodeSample( - "isGivenKind(T_OPEN_TAG); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - // check if the declaration is already done - $searchIndex = $tokens->getNextMeaningfulToken(0); - if (null === $searchIndex) { - $this->insertSequence($tokens); // declaration not found, insert one - - return; - } - - $sequenceLocation = $tokens->findSequence([[T_DECLARE, 'declare'], '(', [T_STRING, 'strict_types'], '=', [T_LNUMBER], ')'], $searchIndex, null, false); - if (null === $sequenceLocation) { - $this->insertSequence($tokens); // declaration not found, insert one - - return; - } - - $this->fixStrictTypesCasingAndValue($tokens, $sequenceLocation); - } - - /** - * @param array $sequence - */ - private function fixStrictTypesCasingAndValue(Tokens $tokens, array $sequence): void - { - /** @var int $index */ - /** @var Token $token */ - foreach ($sequence as $index => $token) { - if ($token->isGivenKind(T_STRING)) { - $tokens[$index] = new Token([T_STRING, strtolower($token->getContent())]); - - continue; - } - if ($token->isGivenKind(T_LNUMBER)) { - $tokens[$index] = new Token([T_LNUMBER, '1']); - - break; - } - } - } - - private function insertSequence(Tokens $tokens): void - { - $sequence = [ - new Token([T_DECLARE, 'declare']), - new Token('('), - new Token([T_STRING, 'strict_types']), - new Token('='), - new Token([T_LNUMBER, '1']), - new Token(')'), - new Token(';'), - ]; - $endIndex = \count($sequence); - - $tokens->insertAt(1, $sequence); - - // start index of the sequence is always 1 here, 0 is always open tag - // transform "getContent(), "\n")) { - $tokens[0] = new Token([$tokens[0]->getId(), trim($tokens[0]->getContent()).' ']); - } - - if ($endIndex === \count($tokens) - 1) { - return; // no more tokens after sequence, single_blank_line_at_eof might add a line - } - - $lineEnding = $this->whitespacesConfig->getLineEnding(); - if (!$tokens[1 + $endIndex]->isWhitespace()) { - $tokens->insertAt(1 + $endIndex, new Token([T_WHITESPACE, $lineEnding])); - - return; - } - - $content = $tokens[1 + $endIndex]->getContent(); - $tokens[1 + $endIndex] = new Token([T_WHITESPACE, $lineEnding.ltrim($content, " \t")]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php deleted file mode 100644 index b60e98b3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictComparisonFixer.php +++ /dev/null @@ -1,89 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Strict; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class StrictComparisonFixer extends AbstractFixer -{ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Comparisons should be strict.', - [new CodeSample("isAnyTokenKindsFound([T_IS_EQUAL, T_IS_NOT_EQUAL]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $map = [ - T_IS_EQUAL => [ - 'id' => T_IS_IDENTICAL, - 'content' => '===', - ], - T_IS_NOT_EQUAL => [ - 'id' => T_IS_NOT_IDENTICAL, - 'content' => '!==', - ], - ]; - - foreach ($tokens as $index => $token) { - $tokenId = $token->getId(); - - if (isset($map[$tokenId])) { - $tokens[$index] = new Token([$map[$tokenId]['id'], $map[$tokenId]['content']]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php deleted file mode 100644 index fd269421..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Strict/StrictParamFixer.php +++ /dev/null @@ -1,177 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Strict; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class StrictParamFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Functions should be used with `$strict` param set to `true`.', - [new CodeSample("isTokenKindFound(T_STRING); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - * - * Must run before MethodArgumentSpaceFixer, NativeFunctionInvocationFixer. - */ - public function getPriority(): int - { - return 31; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $functionsAnalyzer = new FunctionsAnalyzer(); - - static $map = null; - - if (null === $map) { - $trueToken = new Token([T_STRING, 'true']); - - $map = [ - 'array_keys' => [null, null, $trueToken], - 'array_search' => [null, null, $trueToken], - 'base64_decode' => [null, $trueToken], - 'in_array' => [null, null, $trueToken], - 'mb_detect_encoding' => [null, [new Token([T_STRING, 'mb_detect_order']), new Token('('), new Token(')')], $trueToken], - ]; - } - - for ($index = $tokens->count() - 1; 0 <= $index; --$index) { - $token = $tokens[$index]; - - $nextIndex = $tokens->getNextMeaningfulToken($index); - if (null !== $nextIndex && !$tokens[$nextIndex]->equals('(')) { - continue; - } - - $lowercaseContent = strtolower($token->getContent()); - if (isset($map[$lowercaseContent]) && $functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) { - $this->fixFunction($tokens, $index, $map[$lowercaseContent]); - } - } - } - - private function fixFunction(Tokens $tokens, int $functionIndex, array $functionParams): void - { - $startBraceIndex = $tokens->getNextTokenOfKind($functionIndex, ['(']); - $endBraceIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startBraceIndex); - $paramsQuantity = 0; - $expectParam = true; - - for ($index = $startBraceIndex + 1; $index < $endBraceIndex; ++$index) { - $token = $tokens[$index]; - - if ($expectParam && !$token->isWhitespace() && !$token->isComment()) { - ++$paramsQuantity; - $expectParam = false; - } - - if ($token->equals('(')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - continue; - } - - if ($token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, $index); - - continue; - } - - if ($token->equals(',')) { - $expectParam = true; - - continue; - } - } - - $functionParamsQuantity = \count($functionParams); - - if ($paramsQuantity === $functionParamsQuantity) { - return; - } - - $tokensToInsert = []; - - for ($i = $paramsQuantity; $i < $functionParamsQuantity; ++$i) { - // function call do not have all params that are required to set useStrict flag, exit from method! - if (!$functionParams[$i]) { - return; - } - - $tokensToInsert[] = new Token(','); - $tokensToInsert[] = new Token([T_WHITESPACE, ' ']); - - if (!\is_array($functionParams[$i])) { - $tokensToInsert[] = clone $functionParams[$i]; - - continue; - } - - foreach ($functionParams[$i] as $param) { - $tokensToInsert[] = clone $param; - } - } - - $beforeEndBraceIndex = $tokens->getPrevMeaningfulToken($endBraceIndex); - - if ($tokens[$beforeEndBraceIndex]->equals(',')) { - array_shift($tokensToInsert); - $tokensToInsert[] = new Token(','); - } - - $tokens->insertAt($beforeEndBraceIndex + 1, $tokensToInsert); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php deleted file mode 100644 index b84e766a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/EscapeImplicitBackslashesFixer.php +++ /dev/null @@ -1,171 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class EscapeImplicitBackslashesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $codeSample = <<<'EOF' - true] - ), - new CodeSample( - $codeSample, - ['double_quoted' => false] - ), - new CodeSample( - $codeSample, - ['heredoc_syntax' => false] - ), - ], - 'In PHP double-quoted strings and heredocs some chars like `n`, `$` or `u` have special meanings if preceded by a backslash ' - .'(and some are special only if followed by other special chars), while a backslash preceding other chars are interpreted like a plain ' - .'backslash. The precise list of those special chars is hard to remember and to identify quickly: this fixer escapes backslashes ' - ."that do not start a special interpretation with the char after them.\n" - .'It is possible to fix also single-quoted strings: in this case there is no special chars apart from single-quote and backslash ' - .'itself, so the fixer simply ensure that all backslashes are escaped. Both single and double backslashes are allowed in single-quoted ' - .'strings, so the purpose in this context is mainly to have a uniformed way to have them written all over the codebase.' - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ENCAPSED_AND_WHITESPACE, T_CONSTANT_ENCAPSED_STRING]); - } - - /** - * {@inheritdoc} - * - * Must run before HeredocToNowdocFixer, SingleQuoteFixer. - * Must run after BacktickToShellExecFixer. - */ - public function getPriority(): int - { - return 15; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $singleQuotedRegex = '/(? $token) { - $content = $token->getContent(); - if ($token->equalsAny(['"', 'b"', 'B"'])) { - $doubleQuoteOpened = !$doubleQuoteOpened; - } - if (!$token->isGivenKind([T_ENCAPSED_AND_WHITESPACE, T_CONSTANT_ENCAPSED_STRING]) || !str_contains($content, '\\')) { - continue; - } - - // Nowdoc syntax - if ($token->isGivenKind(T_ENCAPSED_AND_WHITESPACE) && '\'' === substr(rtrim($tokens[$index - 1]->getContent()), -1)) { - continue; - } - - $firstTwoCharacters = strtolower(substr($content, 0, 2)); - $isSingleQuotedString = $token->isGivenKind(T_CONSTANT_ENCAPSED_STRING) && ('\'' === $content[0] || 'b\'' === $firstTwoCharacters); - $isDoubleQuotedString = - ($token->isGivenKind(T_CONSTANT_ENCAPSED_STRING) && ('"' === $content[0] || 'b"' === $firstTwoCharacters)) - || ($token->isGivenKind(T_ENCAPSED_AND_WHITESPACE) && $doubleQuoteOpened) - ; - $isHeredocSyntax = !$isSingleQuotedString && !$isDoubleQuotedString; - if ( - (false === $this->configuration['single_quoted'] && $isSingleQuotedString) - || (false === $this->configuration['double_quoted'] && $isDoubleQuotedString) - || (false === $this->configuration['heredoc_syntax'] && $isHeredocSyntax) - ) { - continue; - } - - $regex = $heredocSyntaxRegex; - if ($isSingleQuotedString) { - $regex = $singleQuotedRegex; - } elseif ($isDoubleQuotedString) { - $regex = $doubleQuotedRegex; - } - - $newContent = Preg::replace($regex, '\\\\\\\\$1', $content); - if ($newContent !== $content) { - $tokens[$index] = new Token([$token->getId(), $newContent]); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('single_quoted', 'Whether to fix single-quoted strings.')) - ->setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - (new FixerOptionBuilder('double_quoted', 'Whether to fix double-quoted strings.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - (new FixerOptionBuilder('heredoc_syntax', 'Whether to fix heredoc syntax.')) - ->setAllowedTypes(['bool']) - ->setDefault(true) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php deleted file mode 100644 index 0410cf5c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/ExplicitStringVariableFixer.php +++ /dev/null @@ -1,175 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Filippo Tessarotto - */ -final class ExplicitStringVariableFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts implicit variables into explicit ones in double-quoted strings or heredoc syntax.', - [new CodeSample( - <<<'EOT' -country !"; -$c = "I have $farm[0] chickens !"; - -EOT - )], - 'The reasoning behind this rule is the following:' - ."\n".'- When there are two valid ways of doing the same thing, using both is confusing, there should be a coding standard to follow' - ."\n".'- PHP manual marks `"$var"` syntax as implicit and `"${var}"` syntax as explicit: explicit code should always be preferred' - ."\n".'- Explicit syntax allows word concatenation inside strings, e.g. `"${var}IsAVar"`, implicit doesn\'t' - ."\n".'- Explicit syntax is easier to detect for IDE/editors and therefore has colors/highlight with higher contrast, which is easier to read' - ."\n".'Backtick operator is skipped because it is harder to handle; you can use `backtick_to_shell_exec` fixer to normalize backticks to strings' - ); - } - - /** - * {@inheritdoc} - * - * Must run after BacktickToShellExecFixer. - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_VARIABLE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $backtickStarted = false; - for ($index = \count($tokens) - 1; $index > 0; --$index) { - $token = $tokens[$index]; - - if ($token->equals('`')) { - $backtickStarted = !$backtickStarted; - - continue; - } - - if ($backtickStarted || !$token->isGivenKind(T_VARIABLE)) { - continue; - } - - $prevToken = $tokens[$index - 1]; - - if (!$this->isStringPartToken($prevToken)) { - continue; - } - - $distinctVariableIndex = $index; - $variableTokens = [ - $distinctVariableIndex => [ - 'tokens' => [$index => $token], - 'firstVariableTokenIndex' => $index, - 'lastVariableTokenIndex' => $index, - ], - ]; - - $nextIndex = $index + 1; - $squareBracketCount = 0; - - while (!$this->isStringPartToken($tokens[$nextIndex])) { - if ($tokens[$nextIndex]->isGivenKind(T_CURLY_OPEN)) { - $nextIndex = $tokens->getNextTokenOfKind($nextIndex, [[CT::T_CURLY_CLOSE]]); - } elseif ($tokens[$nextIndex]->isGivenKind(T_VARIABLE) && 1 !== $squareBracketCount) { - $distinctVariableIndex = $nextIndex; - $variableTokens[$distinctVariableIndex] = [ - 'tokens' => [$nextIndex => $tokens[$nextIndex]], - 'firstVariableTokenIndex' => $nextIndex, - 'lastVariableTokenIndex' => $nextIndex, - ]; - } else { - $variableTokens[$distinctVariableIndex]['tokens'][$nextIndex] = $tokens[$nextIndex]; - $variableTokens[$distinctVariableIndex]['lastVariableTokenIndex'] = $nextIndex; - - if ($tokens[$nextIndex]->equalsAny(['[', ']'])) { - ++$squareBracketCount; - } - } - - ++$nextIndex; - } - krsort($variableTokens, SORT_NUMERIC); - - foreach ($variableTokens as $distinctVariableSet) { - if (1 === \count($distinctVariableSet['tokens'])) { - $singleVariableIndex = key($distinctVariableSet['tokens']); - $singleVariableToken = current($distinctVariableSet['tokens']); - $tokens->overrideRange($singleVariableIndex, $singleVariableIndex, [ - new Token([T_CURLY_OPEN, '{']), - new Token([T_VARIABLE, $singleVariableToken->getContent()]), - new Token([CT::T_CURLY_CLOSE, '}']), - ]); - } else { - foreach ($distinctVariableSet['tokens'] as $variablePartIndex => $variablePartToken) { - if ($variablePartToken->isGivenKind(T_NUM_STRING)) { - $tokens[$variablePartIndex] = new Token([T_LNUMBER, $variablePartToken->getContent()]); - - continue; - } - - if ($variablePartToken->isGivenKind(T_STRING) && $tokens[$variablePartIndex + 1]->equals(']')) { - $tokens[$variablePartIndex] = new Token([T_CONSTANT_ENCAPSED_STRING, "'".$variablePartToken->getContent()."'"]); - } - } - - $tokens->insertAt($distinctVariableSet['lastVariableTokenIndex'] + 1, new Token([CT::T_CURLY_CLOSE, '}'])); - $tokens->insertAt($distinctVariableSet['firstVariableTokenIndex'], new Token([T_CURLY_OPEN, '{'])); - } - } - } - } - - /** - * Check if token is a part of a string. - * - * @param Token $token The token to check - */ - private function isStringPartToken(Token $token): bool - { - return $token->isGivenKind(T_ENCAPSED_AND_WHITESPACE) - || $token->isGivenKind(T_START_HEREDOC) - || '"' === $token->getContent() - || 'b"' === strtolower($token->getContent()) - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php deleted file mode 100644 index 185cc8bc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/HeredocToNowdocFixer.php +++ /dev/null @@ -1,116 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class HeredocToNowdocFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Convert `heredoc` to `nowdoc` where possible.', - [ - new CodeSample( - <<<'EOF' -isTokenKindFound(T_START_HEREDOC); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_START_HEREDOC) || str_contains($token->getContent(), "'")) { - continue; - } - - if ($tokens[$index + 1]->isGivenKind(T_END_HEREDOC)) { - $tokens[$index] = $this->convertToNowdoc($token); - - continue; - } - - if ( - !$tokens[$index + 1]->isGivenKind(T_ENCAPSED_AND_WHITESPACE) - || !$tokens[$index + 2]->isGivenKind(T_END_HEREDOC) - ) { - continue; - } - - $content = $tokens[$index + 1]->getContent(); - // regex: odd number of backslashes, not followed by dollar - if (Preg::match('/(?convertToNowdoc($token); - $content = str_replace(['\\\\', '\\$'], ['\\', '$'], $content); - $tokens[$index + 1] = new Token([ - $tokens[$index + 1]->getId(), - $content, - ]); - } - } - - /** - * Transforms the heredoc start token to nowdoc notation. - */ - private function convertToNowdoc(Token $token): Token - { - return new Token([ - $token->getId(), - Preg::replace('/^([Bb]?<<<)(\h*)"?([^\s"]+)"?/', '$1$2\'$3\'', $token->getContent()), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php deleted file mode 100644 index ccb8bb5a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoBinaryStringFixer.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author ntzm - */ -final class NoBinaryStringFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound( - [ - T_CONSTANT_ENCAPSED_STRING, - T_START_HEREDOC, - 'b"', - ] - ); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There should not be a binary flag before strings.', - [ - new CodeSample(" $token) { - if ($token->isGivenKind([T_CONSTANT_ENCAPSED_STRING, T_START_HEREDOC])) { - $content = $token->getContent(); - - if ('b' === strtolower($content[0])) { - $tokens[$index] = new Token([$token->getId(), substr($content, 1)]); - } - } elseif ($token->equals('b"')) { - $tokens[$index] = new Token('"'); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php deleted file mode 100644 index 8ba97ff1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/NoTrailingWhitespaceInStringFixer.php +++ /dev/null @@ -1,112 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class NoTrailingWhitespaceInStringFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE, T_INLINE_HTML]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There must be no trailing whitespace in strings.', - [ - new CodeSample( - "count() - 1, $last = true; $index >= 0; --$index, $last = false) { - /** @var Token $token */ - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE, T_INLINE_HTML])) { - continue; - } - - $isInlineHtml = $token->isGivenKind(T_INLINE_HTML); - $regex = $isInlineHtml && $last ? '/\h+(?=\R|$)/' : '/\h+(?=\R)/'; - $content = Preg::replace($regex, '', $token->getContent()); - - if ($token->getContent() === $content) { - continue; - } - - if (!$isInlineHtml || 0 === $index) { - $this->updateContent($tokens, $index, $content); - - continue; - } - - $prev = $index - 1; - - if ($tokens[$prev]->equals([T_CLOSE_TAG, '?>']) && Preg::match('/^\R/', $content, $match)) { - $tokens[$prev] = new Token([T_CLOSE_TAG, $tokens[$prev]->getContent().$match[0]]); - $content = substr($content, \strlen($match[0])); - $content = false === $content ? '' : $content; // @phpstan-ignore-line due to https://github.com/phpstan/phpstan/issues/1215 , awaiting PHP8 as min requirement of Fixer - } - - $this->updateContent($tokens, $index, $content); - } - } - - private function updateContent(Tokens $tokens, int $index, string $content): void - { - if ('' === $content) { - $tokens->clearAt($index); - - return; - } - - $tokens[$index] = new Token([$tokens[$index]->getId(), $content]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php deleted file mode 100644 index 53ccabae..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SimpleToComplexStringVariableFixer.php +++ /dev/null @@ -1,116 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dave van der Brugge - */ -final class SimpleToComplexStringVariableFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Converts explicit variables in double-quoted strings and heredoc syntax from simple to complex format (`${` to `{$`).', - [ - new CodeSample( - <<<'EOT' -isTokenKindFound(T_DOLLAR_OPEN_CURLY_BRACES); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 3; $index > 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_DOLLAR_OPEN_CURLY_BRACES)) { - continue; - } - - $varnameToken = $tokens[$index + 1]; - - if (!$varnameToken->isGivenKind(T_STRING_VARNAME)) { - continue; - } - - $dollarCloseToken = $tokens[$index + 2]; - - if (!$dollarCloseToken->isGivenKind(CT::T_DOLLAR_CLOSE_CURLY_BRACES)) { - continue; - } - - $tokenOfStringBeforeToken = $tokens[$index - 1]; - $stringContent = $tokenOfStringBeforeToken->getContent(); - - if (str_ends_with($stringContent, '$') && !str_ends_with($stringContent, '\\$')) { - $newContent = substr($stringContent, 0, -1).'\\$'; - $tokenOfStringBeforeToken = new Token([T_ENCAPSED_AND_WHITESPACE, $newContent]); - } - - $tokens->overrideRange($index - 1, $index + 2, [ - $tokenOfStringBeforeToken, - new Token([T_CURLY_OPEN, '{']), - new Token([T_VARIABLE, '$'.$varnameToken->getContent()]), - new Token([CT::T_CURLY_CLOSE, '}']), - ]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php deleted file mode 100644 index 21a565c8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/SingleQuoteFixer.php +++ /dev/null @@ -1,121 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class SingleQuoteFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - $codeSample = <<<'EOF' - true] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before NoUselessConcatOperatorFixer. - * Must run after BacktickToShellExecFixer, EscapeImplicitBackslashesFixer. - */ - public function getPriority(): int - { - return 10; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_CONSTANT_ENCAPSED_STRING); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->isGivenKind(T_CONSTANT_ENCAPSED_STRING)) { - continue; - } - - $content = $token->getContent(); - $prefix = ''; - - if ('b' === strtolower($content[0])) { - $prefix = $content[0]; - $content = substr($content, 1); - } - - if ( - '"' === $content[0] - && (true === $this->configuration['strings_containing_single_quote_chars'] || !str_contains($content, "'")) - // regex: odd number of backslashes, not followed by double quote or dollar - && !Preg::match('/(?setAllowedTypes(['bool']) - ->setDefault(false) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php deleted file mode 100644 index a4038773..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLengthToEmptyFixer.php +++ /dev/null @@ -1,329 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFunctionReferenceFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class StringLengthToEmptyFixer extends AbstractFunctionReferenceFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'String tests for empty must be done against `\'\'`, not with `strlen`.', - [new CodeSample("findStrLengthCalls($tokens) as $candidate) { - [$functionNameIndex, $openParenthesisIndex, $closeParenthesisIndex] = $candidate; - $arguments = $argumentsAnalyzer->getArguments($tokens, $openParenthesisIndex, $closeParenthesisIndex); - - if (1 !== \count($arguments)) { - continue; // must be one argument - } - - // test for leading `\` before `strlen` call - - $nextIndex = $tokens->getNextMeaningfulToken($closeParenthesisIndex); - $previousIndex = $tokens->getPrevMeaningfulToken($functionNameIndex); - - if ($tokens[$previousIndex]->isGivenKind(T_NS_SEPARATOR)) { - $namespaceSeparatorIndex = $previousIndex; - $previousIndex = $tokens->getPrevMeaningfulToken($previousIndex); - } else { - $namespaceSeparatorIndex = null; - } - - // test for yoda vs non-yoda fix case - - if ($this->isOperatorOfInterest($tokens[$previousIndex])) { // test if valid yoda case to fix - $operatorIndex = $previousIndex; - $operandIndex = $tokens->getPrevMeaningfulToken($previousIndex); - - if (!$this->isOperandOfInterest($tokens[$operandIndex])) { // test if operand is `0` or `1` - continue; - } - - $replacement = $this->getReplacementYoda($tokens[$operatorIndex], $tokens[$operandIndex]); - - if (null === $replacement) { - continue; - } - - if ($this->isOfHigherPrecedence($tokens[$nextIndex])) { // is of higher precedence right; continue - continue; - } - - if ($this->isOfHigherPrecedence($tokens[$tokens->getPrevMeaningfulToken($operandIndex)])) { // is of higher precedence left; continue - continue; - } - } elseif ($this->isOperatorOfInterest($tokens[$nextIndex])) { // test if valid !yoda case to fix - $operatorIndex = $nextIndex; - $operandIndex = $tokens->getNextMeaningfulToken($nextIndex); - - if (!$this->isOperandOfInterest($tokens[$operandIndex])) { // test if operand is `0` or `1` - continue; - } - - $replacement = $this->getReplacementNotYoda($tokens[$operatorIndex], $tokens[$operandIndex]); - - if (null === $replacement) { - continue; - } - - if ($this->isOfHigherPrecedence($tokens[$tokens->getNextMeaningfulToken($operandIndex)])) { // is of higher precedence right; continue - continue; - } - - if ($this->isOfHigherPrecedence($tokens[$previousIndex])) { // is of higher precedence left; continue - continue; - } - } else { - continue; - } - - // prepare for fixing - - $keepParentheses = $this->keepParentheses($tokens, $openParenthesisIndex, $closeParenthesisIndex); - - if (T_IS_IDENTICAL === $replacement) { - $operandContent = '==='; - } else { // T_IS_NOT_IDENTICAL === $replacement - $operandContent = '!=='; - } - - // apply fixing - - $tokens[$operandIndex] = new Token([T_CONSTANT_ENCAPSED_STRING, "''"]); - $tokens[$operatorIndex] = new Token([$replacement, $operandContent]); - - if (!$keepParentheses) { - $tokens->clearTokenAndMergeSurroundingWhitespace($closeParenthesisIndex); - $tokens->clearTokenAndMergeSurroundingWhitespace($openParenthesisIndex); - } - - $tokens->clearTokenAndMergeSurroundingWhitespace($functionNameIndex); - - if (null !== $namespaceSeparatorIndex) { - $tokens->clearTokenAndMergeSurroundingWhitespace($namespaceSeparatorIndex); - } - } - } - - private function getReplacementYoda(Token $operator, Token $operand): ?int - { - /* Yoda 0 - - 0 === strlen($b) | '' === $b - 0 !== strlen($b) | '' !== $b - 0 <= strlen($b) | X makes no sense, assume overridden - 0 >= strlen($b) | '' === $b - 0 < strlen($b) | '' !== $b - 0 > strlen($b) | X makes no sense, assume overridden - */ - - if ('0' === $operand->getContent()) { - if ($operator->isGivenKind([T_IS_IDENTICAL, T_IS_GREATER_OR_EQUAL])) { - return T_IS_IDENTICAL; - } - - if ($operator->isGivenKind(T_IS_NOT_IDENTICAL) || $operator->equals('<')) { - return T_IS_NOT_IDENTICAL; - } - - return null; - } - - /* Yoda 1 - - 1 === strlen($b) | X cannot simplify - 1 !== strlen($b) | X cannot simplify - 1 <= strlen($b) | '' !== $b - 1 >= strlen($b) | cannot simplify - 1 < strlen($b) | cannot simplify - 1 > strlen($b) | '' === $b - */ - - if ($operator->isGivenKind(T_IS_SMALLER_OR_EQUAL)) { - return T_IS_NOT_IDENTICAL; - } - - if ($operator->equals('>')) { - return T_IS_IDENTICAL; - } - - return null; - } - - private function getReplacementNotYoda(Token $operator, Token $operand): ?int - { - /* Not Yoda 0 - - strlen($b) === 0 | $b === '' - strlen($b) !== 0 | $b !== '' - strlen($b) <= 0 | $b === '' - strlen($b) >= 0 | X makes no sense, assume overridden - strlen($b) < 0 | X makes no sense, assume overridden - strlen($b) > 0 | $b !== '' - */ - - if ('0' === $operand->getContent()) { - if ($operator->isGivenKind([T_IS_IDENTICAL, T_IS_SMALLER_OR_EQUAL])) { - return T_IS_IDENTICAL; - } - - if ($operator->isGivenKind(T_IS_NOT_IDENTICAL) || $operator->equals('>')) { - return T_IS_NOT_IDENTICAL; - } - - return null; - } - - /* Not Yoda 1 - - strlen($b) === 1 | X cannot simplify - strlen($b) !== 1 | X cannot simplify - strlen($b) <= 1 | X cannot simplify - strlen($b) >= 1 | $b !== '' - strlen($b) < 1 | $b === '' - strlen($b) > 1 | X cannot simplify - */ - - if ($operator->isGivenKind(T_IS_GREATER_OR_EQUAL)) { - return T_IS_NOT_IDENTICAL; - } - - if ($operator->equals('<')) { - return T_IS_IDENTICAL; - } - - return null; - } - - private function isOperandOfInterest(Token $token): bool - { - if (!$token->isGivenKind(T_LNUMBER)) { - return false; - } - - $content = $token->getContent(); - - return '0' === $content || '1' === $content; - } - - private function isOperatorOfInterest(Token $token): bool - { - return - $token->isGivenKind([T_IS_IDENTICAL, T_IS_NOT_IDENTICAL, T_IS_SMALLER_OR_EQUAL, T_IS_GREATER_OR_EQUAL]) - || $token->equals('<') || $token->equals('>') - ; - } - - private function isOfHigherPrecedence(Token $token): bool - { - static $operatorsPerContent = [ - '!', - '%', - '*', - '+', - '-', - '.', - '/', - '~', - '?', - ]; - - return $token->isGivenKind([T_INSTANCEOF, T_POW, T_SL, T_SR]) || $token->equalsAny($operatorsPerContent); - } - - private function keepParentheses(Tokens $tokens, int $openParenthesisIndex, int $closeParenthesisIndex): bool - { - $i = $tokens->getNextMeaningfulToken($openParenthesisIndex); - - if ($tokens[$i]->isCast()) { - $i = $tokens->getNextMeaningfulToken($i); - } - - for (; $i < $closeParenthesisIndex; ++$i) { - $token = $tokens[$i]; - - if ($token->isGivenKind([T_VARIABLE, T_STRING]) || $token->isObjectOperator() || $token->isWhitespace() || $token->isComment()) { - continue; - } - - $blockType = Tokens::detectBlockType($token); - - if (null !== $blockType && $blockType['isStart']) { - $i = $tokens->findBlockEnd($blockType['type'], $i); - - continue; - } - - return true; - } - - return false; - } - - private function findStrLengthCalls(Tokens $tokens): \Generator - { - $candidates = []; - $count = \count($tokens); - - for ($i = 0; $i < $count; ++$i) { - $candidate = $this->find('strlen', $tokens, $i, $count); - - if (null === $candidate) { - break; - } - - $i = $candidate[1]; // proceed to openParenthesisIndex - $candidates[] = $candidate; - } - - foreach (array_reverse($candidates) as $candidate) { - yield $candidate; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php deleted file mode 100644 index 7e50c736..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/StringNotation/StringLineEndingFixer.php +++ /dev/null @@ -1,88 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\StringNotation; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixes the line endings in multi-line strings. - * - * @author Ilija Tovilo - */ -final class StringLineEndingFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE, T_INLINE_HTML]); - } - - /** - * {@inheritdoc} - */ - public function isRisky(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'All multi-line strings must use correct line ending.', - [ - new CodeSample( - "whitespacesConfig->getLineEnding(); - - foreach ($tokens as $tokenIndex => $token) { - if (!$token->isGivenKind([T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE, T_INLINE_HTML])) { - continue; - } - - $tokens[$tokenIndex] = new Token([ - $token->getId(), - Preg::replace( - '#\R#u', - $ending, - $token->getContent() - ), - ]); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php deleted file mode 100644 index e6d02002..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.php +++ /dev/null @@ -1,203 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\Indentation; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class ArrayIndentationFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - use Indentation; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Each element of an array must be indented exactly once.', - [ - new CodeSample(" [\n 'baz' => true,\n ],\n];\n"), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN]); - } - - /** - * {@inheritdoc} - * - * Must run before AlignMultilineCommentFixer, BinaryOperatorSpacesFixer. - * Must run after MethodArgumentSpaceFixer. - */ - public function getPriority(): int - { - return 29; - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $lastIndent = ''; - $scopes = []; - $previousLineInitialIndent = ''; - $previousLineNewIndent = ''; - - foreach ($tokens as $index => $token) { - $currentScope = [] !== $scopes ? \count($scopes) - 1 : null; - - if ($token->isComment()) { - continue; - } - - if ( - $token->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN) - || ($token->equals('(') && $tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_ARRAY)) - ) { - $endIndex = $tokens->findBlockEnd( - $token->equals('(') ? Tokens::BLOCK_TYPE_PARENTHESIS_BRACE : Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE, - $index - ); - - $scopes[] = [ - 'type' => 'array', - 'end_index' => $endIndex, - 'initial_indent' => $lastIndent, - ]; - - continue; - } - - if ($this->isNewLineToken($tokens, $index)) { - $lastIndent = $this->extractIndent($this->computeNewLineContent($tokens, $index)); - } - - if (null === $currentScope) { - continue; - } - - if ($token->isWhitespace()) { - if (!Preg::match('/\R/', $token->getContent())) { - continue; - } - - if ('array' === $scopes[$currentScope]['type']) { - $indent = false; - - for ($searchEndIndex = $index + 1; $searchEndIndex < $scopes[$currentScope]['end_index']; ++$searchEndIndex) { - $searchEndToken = $tokens[$searchEndIndex]; - - if ( - (!$searchEndToken->isWhitespace() && !$searchEndToken->isComment()) - || ($searchEndToken->isWhitespace() && Preg::match('/\R/', $searchEndToken->getContent())) - ) { - $indent = true; - - break; - } - } - - $content = Preg::replace( - '/(\R+)\h*$/', - '$1'.$scopes[$currentScope]['initial_indent'].($indent ? $this->whitespacesConfig->getIndent() : ''), - $token->getContent() - ); - - $previousLineInitialIndent = $this->extractIndent($token->getContent()); - $previousLineNewIndent = $this->extractIndent($content); - } else { - $content = Preg::replace( - '/(\R)'.preg_quote($scopes[$currentScope]['initial_indent'], '/').'(\h*)$/', - '$1'.$scopes[$currentScope]['new_indent'].'$2', - $token->getContent() - ); - } - - $tokens[$index] = new Token([T_WHITESPACE, $content]); - $lastIndent = $this->extractIndent($content); - - continue; - } - - if ($index === $scopes[$currentScope]['end_index']) { - while ([] !== $scopes && $index === $scopes[$currentScope]['end_index']) { - array_pop($scopes); - --$currentScope; - } - - continue; - } - - if ($token->equals(',')) { - continue; - } - - if ('expression' !== $scopes[$currentScope]['type']) { - $endIndex = $this->findExpressionEndIndex($tokens, $index, $scopes[$currentScope]['end_index']); - - if ($endIndex === $index) { - continue; - } - - $scopes[] = [ - 'type' => 'expression', - 'end_index' => $endIndex, - 'initial_indent' => $previousLineInitialIndent, - 'new_indent' => $previousLineNewIndent, - ]; - } - } - } - - private function findExpressionEndIndex(Tokens $tokens, int $index, int $parentScopeEndIndex): int - { - $endIndex = null; - - for ($searchEndIndex = $index + 1; $searchEndIndex < $parentScopeEndIndex; ++$searchEndIndex) { - $searchEndToken = $tokens[$searchEndIndex]; - - if ($searchEndToken->equalsAny(['(', '{']) || $searchEndToken->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) { - $type = Tokens::detectBlockType($searchEndToken); - $searchEndIndex = $tokens->findBlockEnd( - $type['type'], - $searchEndIndex - ); - - continue; - } - - if ($searchEndToken->equals(',')) { - $endIndex = $tokens->getPrevMeaningfulToken($searchEndIndex); - - break; - } - } - - return $endIndex ?? $tokens->getPrevMeaningfulToken($parentScopeEndIndex); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php deleted file mode 100644 index 87b18997..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBeforeStatementFixer.php +++ /dev/null @@ -1,350 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Dariusz Rumiński - * @author Andreas Möller - */ -final class BlankLineBeforeStatementFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @var array - */ - private static array $tokenMap = [ - 'break' => T_BREAK, - 'case' => T_CASE, - 'continue' => T_CONTINUE, - 'declare' => T_DECLARE, - 'default' => T_DEFAULT, - 'do' => T_DO, - 'exit' => T_EXIT, - 'for' => T_FOR, - 'foreach' => T_FOREACH, - 'goto' => T_GOTO, - 'if' => T_IF, - 'include' => T_INCLUDE, - 'include_once' => T_INCLUDE_ONCE, - 'phpdoc' => T_DOC_COMMENT, - 'require' => T_REQUIRE, - 'require_once' => T_REQUIRE_ONCE, - 'return' => T_RETURN, - 'switch' => T_SWITCH, - 'throw' => T_THROW, - 'try' => T_TRY, - 'while' => T_WHILE, - 'yield' => T_YIELD, - 'yield_from' => T_YIELD_FROM, - ]; - - /** - * @var list - */ - private array $fixTokenMap = []; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - parent::configure($configuration); - - $this->fixTokenMap = []; - - foreach ($this->configuration['statements'] as $key) { - $this->fixTokenMap[$key] = self::$tokenMap[$key]; - } - - $this->fixTokenMap = array_values($this->fixTokenMap); - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'An empty line feed must precede any configured statement.', - [ - new CodeSample( - 'process(); - break; - case 44: - break; -} -', - [ - 'statements' => ['break'], - ] - ), - new CodeSample( - 'isTired()) { - $bar->sleep(); - continue; - } -} -', - [ - 'statements' => ['continue'], - ] - ), - new CodeSample( - ' 0); -', - [ - 'statements' => ['do'], - ] - ), - new CodeSample( - ' ['exit'], - ] - ), - new CodeSample( - ' ['goto'], - ] - ), - new CodeSample( - ' ['if'], - ] - ), - new CodeSample( - ' ['return'], - ] - ), - new CodeSample( - ' ['switch'], - ] - ), - new CodeSample( - 'bar(); - throw new \UnexpectedValueException("A cannot be null."); -} -', - [ - 'statements' => ['throw'], - ] - ), - new CodeSample( - 'bar(); -} catch (\Exception $exception) { - $a = -1; -} -', - [ - 'statements' => ['try'], - ] - ), - new CodeSample( - ' ['yield'], - ] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after NoExtraBlankLinesFixer, NoUselessReturnFixer, ReturnAssignmentFixer. - */ - public function getPriority(): int - { - return -21; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound($this->fixTokenMap); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $analyzer = new TokensAnalyzer($tokens); - - for ($index = $tokens->count() - 1; $index > 0; --$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind($this->fixTokenMap)) { - continue; - } - - if ($token->isGivenKind(T_WHILE) && $analyzer->isWhilePartOfDoWhile($index)) { - continue; - } - - $prevNonWhitespace = $tokens->getPrevNonWhitespace($index); - - if ($this->shouldAddBlankLine($tokens, $prevNonWhitespace)) { - $this->insertBlankLine($tokens, $index); - } - - $index = $prevNonWhitespace; - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('statements', 'List of statements which must be preceded by an empty line.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(array_keys(self::$tokenMap))]) - ->setDefault([ - 'break', - 'continue', - 'declare', - 'return', - 'throw', - 'try', - ]) - ->getOption(), - ]); - } - - private function shouldAddBlankLine(Tokens $tokens, int $prevNonWhitespace): bool - { - $prevNonWhitespaceToken = $tokens[$prevNonWhitespace]; - - if ($prevNonWhitespaceToken->isComment()) { - for ($j = $prevNonWhitespace - 1; $j >= 0; --$j) { - if (str_contains($tokens[$j]->getContent(), "\n")) { - return false; - } - - if ($tokens[$j]->isWhitespace() || $tokens[$j]->isComment()) { - continue; - } - - return $tokens[$j]->equalsAny([';', '}']); - } - } - - return $prevNonWhitespaceToken->equalsAny([';', '}']); - } - - private function insertBlankLine(Tokens $tokens, int $index): void - { - $prevIndex = $index - 1; - $prevToken = $tokens[$prevIndex]; - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - if ($prevToken->isWhitespace()) { - $newlinesCount = substr_count($prevToken->getContent(), "\n"); - - if (0 === $newlinesCount) { - $tokens[$prevIndex] = new Token([T_WHITESPACE, rtrim($prevToken->getContent(), " \t").$lineEnding.$lineEnding]); - } elseif (1 === $newlinesCount) { - $tokens[$prevIndex] = new Token([T_WHITESPACE, $lineEnding.$prevToken->getContent()]); - } - } else { - $tokens->insertAt($index, new Token([T_WHITESPACE, $lineEnding.$lineEnding])); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php deleted file mode 100644 index e5e0de0e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php +++ /dev/null @@ -1,192 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @author Sander Verkuil - */ -final class BlankLineBetweenImportGroupsFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - private const IMPORT_TYPE_CLASS = 'class'; - - private const IMPORT_TYPE_CONST = 'const'; - - private const IMPORT_TYPE_FUNCTION = 'function'; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Putting blank lines between `use` statement groups.', - [ - new CodeSample( - 'isTokenKindFound(T_USE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokensAnalyzer = new TokensAnalyzer($tokens); - $namespacesImports = $tokensAnalyzer->getImportUseIndexes(true); - - foreach (array_reverse($namespacesImports) as $uses) { - $this->walkOverUses($tokens, $uses); - } - } - - /** - * @param int[] $uses - */ - private function walkOverUses(Tokens $tokens, array $uses): void - { - $usesCount = \count($uses); - - if ($usesCount < 2) { - return; // nothing to fix - } - - $previousType = null; - - for ($i = $usesCount - 1; $i >= 0; --$i) { - $index = $uses[$i]; - $startIndex = $tokens->getNextMeaningfulToken($index + 1); - $endIndex = $tokens->getNextTokenOfKind($startIndex, [';', [T_CLOSE_TAG]]); - - if ($tokens[$startIndex]->isGivenKind(CT::T_CONST_IMPORT)) { - $type = self::IMPORT_TYPE_CONST; - } elseif ($tokens[$startIndex]->isGivenKind(CT::T_FUNCTION_IMPORT)) { - $type = self::IMPORT_TYPE_FUNCTION; - } else { - $type = self::IMPORT_TYPE_CLASS; - } - - if (null !== $previousType && $type !== $previousType) { - $this->ensureLine($tokens, $endIndex + 1); - } - - $previousType = $type; - } - } - - private function ensureLine(Tokens $tokens, int $index): void - { - static $lineEnding; - - if (null === $lineEnding) { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - $lineEnding .= $lineEnding; - } - - $index = $this->getInsertIndex($tokens, $index); - - if ($tokens[$index]->isWhitespace()) { - $tokens[$index] = new Token([T_WHITESPACE, $lineEnding]); - } else { - $tokens->insertSlices([$index + 1 => [new Token([T_WHITESPACE, $lineEnding])]]); - } - } - - private function getInsertIndex(Tokens $tokens, int $index): int - { - $tokensCount = \count($tokens); - - for (; $index < $tokensCount - 1; ++$index) { - if (!$tokens[$index]->isWhitespace() && !$tokens[$index]->isComment()) { - return $index - 1; - } - - $content = $tokens[$index]->getContent(); - - if (str_contains($content, "\n")) { - return $index; - } - } - - return $index; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php deleted file mode 100644 index 042d8284..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.php +++ /dev/null @@ -1,80 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Jack Cherng - */ -final class CompactNullableTypehintFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove extra spaces in a nullable typehint.', - [ - new CodeSample( - "isTokenKindFound(CT::T_NULLABLE_TYPE); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - static $typehintKinds = [ - CT::T_ARRAY_TYPEHINT, - T_CALLABLE, - T_NS_SEPARATOR, - T_STRING, - ]; - - for ($index = $tokens->count() - 1; $index >= 0; --$index) { - if (!$tokens[$index]->isGivenKind(CT::T_NULLABLE_TYPE)) { - continue; - } - - // remove whitespaces only if there are only whitespaces - // between '?' and the variable type - if ( - $tokens[$index + 1]->isWhitespace() - && $tokens[$index + 2]->isGivenKind($typehintKinds) - ) { - $tokens->removeTrailingWhitespace($index); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php deleted file mode 100644 index c78dc3c1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/HeredocIndentationFixer.php +++ /dev/null @@ -1,185 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Gregor Harlan - */ -final class HeredocIndentationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Heredoc/nowdoc content must be properly indented. Requires PHP >= 7.3.', - [ - new VersionSpecificCodeSample( - <<<'SAMPLE' - 'same_as_start'] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run after BracesFixer, StatementIndentationFixer. - */ - public function getPriority(): int - { - return -26; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isTokenKindFound(T_START_HEREDOC); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('indentation', 'Whether the indentation should be the same as in the start token line or one level more.')) - ->setAllowedValues(['start_plus_one', 'same_as_start']) - ->setDefault('start_plus_one') - ->getOption(), - ]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - for ($index = \count($tokens) - 1; 0 <= $index; --$index) { - if (!$tokens[$index]->isGivenKind(T_END_HEREDOC)) { - continue; - } - - $end = $index; - $index = $tokens->getPrevTokenOfKind($index, [[T_START_HEREDOC]]); - - $this->fixIndentation($tokens, $index, $end); - } - } - - private function fixIndentation(Tokens $tokens, int $start, int $end): void - { - $indent = WhitespacesAnalyzer::detectIndent($tokens, $start); - - if ('start_plus_one' === $this->configuration['indentation']) { - $indent .= $this->whitespacesConfig->getIndent(); - } - - Preg::match('/^\h*/', $tokens[$end]->getContent(), $matches); - $currentIndent = $matches[0]; - $currentIndentLength = \strlen($currentIndent); - - $content = $indent.substr($tokens[$end]->getContent(), $currentIndentLength); - $tokens[$end] = new Token([T_END_HEREDOC, $content]); - - if ($end === $start + 1) { - return; - } - - for ($index = $end - 1, $last = true; $index > $start; --$index, $last = false) { - if (!$tokens[$index]->isGivenKind([T_ENCAPSED_AND_WHITESPACE, T_WHITESPACE])) { - continue; - } - - $content = $tokens[$index]->getContent(); - - if ('' !== $currentIndent) { - $content = Preg::replace('/(?<=\v)(?!'.$currentIndent.')\h+/', '', $content); - } - - $regexEnd = $last && !$currentIndent ? '(?!\v|$)' : '(?!\v)'; - $content = Preg::replace('/(?<=\v)'.$currentIndent.$regexEnd.'/', $indent, $content); - - $tokens[$index] = new Token([$tokens[$index]->getId(), $content]); - } - - ++$index; - - if (!$tokens[$index]->isGivenKind(T_ENCAPSED_AND_WHITESPACE)) { - $tokens->insertAt($index, new Token([T_ENCAPSED_AND_WHITESPACE, $indent])); - - return; - } - - $content = $tokens[$index]->getContent(); - - if (!\in_array($content[0], ["\r", "\n"], true) && (!$currentIndent || str_starts_with($content, $currentIndent))) { - $content = $indent.substr($content, $currentIndentLength); - } elseif ($currentIndent) { - $content = Preg::replace('/^(?!'.$currentIndent.')\h+/', '', $content); - } - - $tokens[$index] = new Token([T_ENCAPSED_AND_WHITESPACE, $content]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php deleted file mode 100644 index 14a1d29e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php +++ /dev/null @@ -1,153 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.4. - * - * @author Dariusz Rumiński - */ -final class IndentationTypeFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * @var string - */ - private $indent; - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Code MUST use configured indentation type.', - [ - new CodeSample("isAnyTokenKindsFound([T_COMMENT, T_DOC_COMMENT, T_WHITESPACE]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->indent = $this->whitespacesConfig->getIndent(); - - foreach ($tokens as $index => $token) { - if ($token->isComment()) { - $tokens[$index] = $this->fixIndentInComment($tokens, $index); - - continue; - } - - if ($token->isWhitespace()) { - $tokens[$index] = $this->fixIndentToken($tokens, $index); - - continue; - } - } - } - - private function fixIndentInComment(Tokens $tokens, int $index): Token - { - $content = Preg::replace('/^(?:(?getContent(), -1, $count); - - // Also check for more tabs. - while (0 !== $count) { - $content = Preg::replace('/^(\ +)?\t/m', '\1 ', $content, -1, $count); - } - - $indent = $this->indent; - - // change indent to expected one - $content = Preg::replaceCallback('/^(?: )+/m', function (array $matches) use ($indent): string { - return $this->getExpectedIndent($matches[0], $indent); - }, $content); - - return new Token([$tokens[$index]->getId(), $content]); - } - - private function fixIndentToken(Tokens $tokens, int $index): Token - { - $content = $tokens[$index]->getContent(); - $previousTokenHasTrailingLinebreak = false; - - // @TODO this can be removed when we have a transformer for "T_OPEN_TAG" to "T_OPEN_TAG + T_WHITESPACE" - if (str_contains($tokens[$index - 1]->getContent(), "\n")) { - $content = "\n".$content; - $previousTokenHasTrailingLinebreak = true; - } - - $indent = $this->indent; - $newContent = Preg::replaceCallback( - '/(\R)(\h+)/', // find indent - function (array $matches) use ($indent): string { - // normalize mixed indent - $content = Preg::replace('/(?:(?getExpectedIndent($content, $indent); - }, - $content - ); - - if ($previousTokenHasTrailingLinebreak) { - $newContent = substr($newContent, 1); - } - - return new Token([T_WHITESPACE, $newContent]); - } - - /** - * @return string mixed - */ - private function getExpectedIndent(string $content, string $indent): string - { - if ("\t" === $indent) { - $content = str_replace(' ', $indent, $content); - } - - return $content; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php deleted file mode 100644 index d482eebd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/LineEndingFixer.php +++ /dev/null @@ -1,94 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.2. - * - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -final class LineEndingFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'All PHP files must use same line ending.', - [ - new CodeSample( - "whitespacesConfig->getLineEnding(); - - for ($index = 0, $count = \count($tokens); $index < $count; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_ENCAPSED_AND_WHITESPACE)) { - if ($tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_END_HEREDOC)) { - $tokens[$index] = new Token([ - $token->getId(), - Preg::replace( - '#\R#', - $ending, - $token->getContent() - ), - ]); - } - - continue; - } - - if ($token->isGivenKind([T_CLOSE_TAG, T_COMMENT, T_DOC_COMMENT, T_OPEN_TAG, T_START_HEREDOC, T_WHITESPACE])) { - $tokens[$index] = new Token([ - $token->getId(), - Preg::replace( - '#\R#', - $ending, - $token->getContent() - ), - ]); - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php deleted file mode 100644 index 4fc14a80..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/MethodChainingIndentationFixer.php +++ /dev/null @@ -1,222 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Vladimir Boliev - */ -final class MethodChainingIndentationFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Method chaining MUST be properly indented. Method chaining with different levels of indentation is not supported.', - [new CodeSample("setEmail('voff.web@gmail.com')\n ->setPassword('233434');\n")] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(Token::getObjectOperatorKinds()); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $lineEnding = $this->whitespacesConfig->getLineEnding(); - - for ($index = 1, $count = \count($tokens); $index < $count; ++$index) { - if (!$tokens[$index]->isObjectOperator()) { - continue; - } - - $endParenthesisIndex = $tokens->getNextTokenOfKind($index, ['(', ';', ',', [T_CLOSE_TAG]]); - - if (null === $endParenthesisIndex || !$tokens[$endParenthesisIndex]->equals('(')) { - continue; - } - - if ($this->canBeMovedToNextLine($index, $tokens)) { - $newline = new Token([T_WHITESPACE, $lineEnding]); - - if ($tokens[$index - 1]->isWhitespace()) { - $tokens[$index - 1] = $newline; - } else { - $tokens->insertAt($index, $newline); - ++$index; - ++$endParenthesisIndex; - } - } - - $currentIndent = $this->getIndentAt($tokens, $index - 1); - - if (null === $currentIndent) { - continue; - } - - $expectedIndent = $this->getExpectedIndentAt($tokens, $index); - - if ($currentIndent !== $expectedIndent) { - $tokens[$index - 1] = new Token([T_WHITESPACE, $lineEnding.$expectedIndent]); - } - - $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $endParenthesisIndex); - - for ($searchIndex = $index + 1; $searchIndex < $endParenthesisIndex; ++$searchIndex) { - $searchToken = $tokens[$searchIndex]; - - if (!$searchToken->isWhitespace()) { - continue; - } - - $content = $searchToken->getContent(); - - if (!Preg::match('/\R/', $content)) { - continue; - } - - $content = Preg::replace( - '/(\R)'.$currentIndent.'(\h*)$/D', - '$1'.$expectedIndent.'$2', - $content - ); - - $tokens[$searchIndex] = new Token([$searchToken->getId(), $content]); - } - } - } - - /** - * @param int $index index of the first token on the line to indent - */ - private function getExpectedIndentAt(Tokens $tokens, int $index): string - { - $index = $tokens->getPrevMeaningfulToken($index); - $indent = $this->whitespacesConfig->getIndent(); - - for ($i = $index; $i >= 0; --$i) { - if ($tokens[$i]->equals(')')) { - $i = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $i); - } - - $currentIndent = $this->getIndentAt($tokens, $i); - if (null === $currentIndent) { - continue; - } - - if ($this->currentLineRequiresExtraIndentLevel($tokens, $i, $index)) { - return $currentIndent.$indent; - } - - return $currentIndent; - } - - return $indent; - } - - /** - * @param int $index position of the object operator token ("->" or "?->") - */ - private function canBeMovedToNextLine(int $index, Tokens $tokens): bool - { - $prevMeaningful = $tokens->getPrevMeaningfulToken($index); - $hasCommentBefore = false; - - for ($i = $index - 1; $i > $prevMeaningful; --$i) { - if ($tokens[$i]->isComment()) { - $hasCommentBefore = true; - - continue; - } - - if ($tokens[$i]->isWhitespace() && 1 === Preg::match('/\R/', $tokens[$i]->getContent())) { - return $hasCommentBefore; - } - } - - return false; - } - - /** - * @param int $index index of the indentation token - */ - private function getIndentAt(Tokens $tokens, int $index): ?string - { - if (1 === Preg::match('/\R{1}(\h*)$/', $this->getIndentContentAt($tokens, $index), $matches)) { - return $matches[1]; - } - - return null; - } - - private function getIndentContentAt(Tokens $tokens, int $index): string - { - if (!$tokens[$index]->isGivenKind([T_WHITESPACE, T_INLINE_HTML])) { - return ''; - } - - $content = $tokens[$index]->getContent(); - - if ($tokens[$index]->isWhitespace() && $tokens[$index - 1]->isGivenKind(T_OPEN_TAG)) { - $content = $tokens[$index - 1]->getContent().$content; - } - - if (Preg::match('/\R/', $content)) { - return $content; - } - - return ''; - } - - /** - * @param int $start index of first meaningful token on previous line - * @param int $end index of last token on previous line - */ - private function currentLineRequiresExtraIndentLevel(Tokens $tokens, int $start, int $end): bool - { - $firstMeaningful = $tokens->getNextMeaningfulToken($start); - - if ($tokens[$firstMeaningful]->isObjectOperator()) { - $thirdMeaningful = $tokens->getNextMeaningfulToken($tokens->getNextMeaningfulToken($firstMeaningful)); - - return - $tokens[$thirdMeaningful]->equals('(') - && $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $thirdMeaningful) > $end - ; - } - - return - !$tokens[$end]->equals(')') - || $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $end) >= $start - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php deleted file mode 100644 index b9b9cf02..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoExtraBlankLinesFixer.php +++ /dev/null @@ -1,460 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; -use PhpCsFixer\Utils; - -/** - * @author Dariusz Rumiński - */ -final class NoExtraBlankLinesFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface -{ - /** - * @var string[] - */ - private static array $availableTokens = [ - 'attribute', - 'break', - 'case', - 'continue', - 'curly_brace_block', - 'default', - 'extra', - 'parenthesis_brace_block', - 'return', - 'square_brace_block', - 'switch', - 'throw', - 'use', - 'use_trait', - ]; - - /** - * @var array key is token id, value is name of callback - */ - private array $tokenKindCallbackMap; - - /** - * @var array token prototype, value is name of callback - */ - private array $tokenEqualsMap; - - private Tokens $tokens; - - private TokensAnalyzer $tokensAnalyzer; - - /** - * {@inheritdoc} - */ - public function configure(array $configuration): void - { - if (isset($configuration['tokens']) && \in_array('use_trait', $configuration['tokens'], true)) { - Utils::triggerDeprecation(new \RuntimeException('Option "tokens: use_trait" used in `no_extra_blank_lines` rule is deprecated, use the rule `class_attributes_separation` with `elements: trait_import` instead.')); - } - - parent::configure($configuration); - - $tokensConfiguration = $this->configuration['tokens']; - - $this->tokenEqualsMap = []; - - if (\in_array('curly_brace_block', $tokensConfiguration, true)) { - $this->tokenEqualsMap['{'] = 'fixStructureOpenCloseIfMultiLine'; // i.e. not: CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN - } - - if (\in_array('parenthesis_brace_block', $tokensConfiguration, true)) { - $this->tokenEqualsMap['('] = 'fixStructureOpenCloseIfMultiLine'; // i.e. not: CT::T_BRACE_CLASS_INSTANTIATION_OPEN - } - - static $configMap = [ - 'attribute' => [CT::T_ATTRIBUTE_CLOSE, 'fixAfterToken'], - 'break' => [T_BREAK, 'fixAfterToken'], - 'case' => [T_CASE, 'fixAfterCaseToken'], - 'continue' => [T_CONTINUE, 'fixAfterToken'], - 'default' => [T_DEFAULT, 'fixAfterToken'], - 'extra' => [T_WHITESPACE, 'removeMultipleBlankLines'], - 'return' => [T_RETURN, 'fixAfterToken'], - 'square_brace_block' => [CT::T_ARRAY_SQUARE_BRACE_OPEN, 'fixStructureOpenCloseIfMultiLine'], - 'switch' => [T_SWITCH, 'fixAfterToken'], - 'throw' => [T_THROW, 'fixAfterThrowToken'], - 'use' => [T_USE, 'removeBetweenUse'], - 'use_trait' => [CT::T_USE_TRAIT, 'removeBetweenUse'], - ]; - - $this->tokenKindCallbackMap = []; - - foreach ($tokensConfiguration as $config) { - if (isset($configMap[$config])) { - $this->tokenKindCallbackMap[$configMap[$config][0]] = $configMap[$config][1]; - } - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Removes extra blank lines and/or blank lines following configuration.', - [ - new CodeSample( - ' ['break']] - ), - new CodeSample( - ' ['continue']] - ), - new CodeSample( - ' ['curly_brace_block']] - ), - new CodeSample( - ' ['extra']] - ), - new CodeSample( - ' ['parenthesis_brace_block']] - ), - new CodeSample( - ' ['return']] - ), - new CodeSample( - ' ['square_brace_block']] - ), - new CodeSample( - ' ['throw']] - ), - new CodeSample( - ' ['use']] - ), - new CodeSample( - ' ['switch', 'case', 'default']] - ), - ] - ); - } - - /** - * {@inheritdoc} - * - * Must run before BlankLineBeforeStatementFixer. - * Must run after ClassAttributesSeparationFixer, CombineConsecutiveUnsetsFixer, EmptyLoopBodyFixer, EmptyLoopConditionFixer, FunctionToConstantFixer, ModernizeStrposFixer, NoEmptyCommentFixer, NoEmptyPhpdocFixer, NoEmptyStatementFixer, NoUnusedImportsFixer, NoUselessElseFixer, NoUselessReturnFixer, NoUselessSprintfFixer, StringLengthToEmptyFixer. - */ - public function getPriority(): int - { - return -20; - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $this->tokens = $tokens; - $this->tokensAnalyzer = new TokensAnalyzer($this->tokens); - - for ($index = $tokens->getSize() - 1; $index > 0; --$index) { - $this->fixByToken($tokens[$index], $index); - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('tokens', 'List of tokens to fix.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset(self::$availableTokens)]) - ->setDefault(['extra']) - ->getOption(), - ]); - } - - private function fixByToken(Token $token, int $index): void - { - foreach ($this->tokenKindCallbackMap as $kind => $callback) { - if (!$token->isGivenKind($kind)) { - continue; - } - - $this->{$callback}($index); - - return; - } - - foreach ($this->tokenEqualsMap as $equals => $callback) { - if (!$token->equals($equals)) { - continue; - } - - $this->{$callback}($index); - - return; - } - } - - private function removeBetweenUse(int $index): void - { - $next = $this->tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - - if (null === $next || $this->tokens[$next]->isGivenKind(T_CLOSE_TAG)) { - return; - } - - $nextUseCandidate = $this->tokens->getNextMeaningfulToken($next); - - if (null === $nextUseCandidate || !$this->tokens[$nextUseCandidate]->isGivenKind($this->tokens[$index]->getId()) || !$this->containsLinebreak($index, $nextUseCandidate)) { - return; - } - - $this->removeEmptyLinesAfterLineWithTokenAt($next); - } - - private function removeMultipleBlankLines(int $index): void - { - $expected = $this->tokens[$index - 1]->isGivenKind(T_OPEN_TAG) && 1 === Preg::match('/\R$/', $this->tokens[$index - 1]->getContent()) ? 1 : 2; - - $parts = Preg::split('/(.*\R)/', $this->tokens[$index]->getContent(), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - $count = \count($parts); - - if ($count > $expected) { - $this->tokens[$index] = new Token([T_WHITESPACE, implode('', \array_slice($parts, 0, $expected)).rtrim($parts[$count - 1], "\r\n")]); - } - } - - private function fixAfterToken(int $index): void - { - for ($i = $index - 1; $i > 0; --$i) { - if ($this->tokens[$i]->isGivenKind(T_FUNCTION) && $this->tokensAnalyzer->isLambda($i)) { - return; - } - - if ($this->tokens[$i]->isGivenKind(T_CLASS) && $this->tokensAnalyzer->isAnonymousClass($i)) { - return; - } - - if ($this->tokens[$i]->isWhitespace() && str_contains($this->tokens[$i]->getContent(), "\n")) { - break; - } - } - - $this->removeEmptyLinesAfterLineWithTokenAt($index); - } - - private function fixAfterCaseToken(int $index): void - { - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - $enumSwitchIndex = $this->tokens->getPrevTokenOfKind($index, [[T_SWITCH], [T_ENUM]]); - - if (!$this->tokens[$enumSwitchIndex]->isGivenKind(T_SWITCH)) { - return; - } - } - - $this->removeEmptyLinesAfterLineWithTokenAt($index); - } - - private function fixAfterThrowToken(int $index): void - { - if ($this->tokens[$this->tokens->getPrevMeaningfulToken($index)]->equalsAny([';', '{', '}', ':', [T_OPEN_TAG]])) { - $this->fixAfterToken($index); - } - } - - /** - * Remove white line(s) after the index of a block type, - * but only if the block is not on one line. - * - * @param int $index body start - */ - private function fixStructureOpenCloseIfMultiLine(int $index): void - { - $blockTypeInfo = Tokens::detectBlockType($this->tokens[$index]); - $bodyEnd = $this->tokens->findBlockEnd($blockTypeInfo['type'], $index); - - for ($i = $bodyEnd - 1; $i >= $index; --$i) { - if (str_contains($this->tokens[$i]->getContent(), "\n")) { - $this->removeEmptyLinesAfterLineWithTokenAt($i); - $this->removeEmptyLinesAfterLineWithTokenAt($index); - - break; - } - } - } - - private function removeEmptyLinesAfterLineWithTokenAt(int $index): void - { - // find the line break - $tokenCount = \count($this->tokens); - for ($end = $index; $end < $tokenCount; ++$end) { - if ( - $this->tokens[$end]->equals('}') - || str_contains($this->tokens[$end]->getContent(), "\n") - ) { - break; - } - } - - if ($end === $tokenCount) { - return; // not found, early return - } - - $ending = $this->whitespacesConfig->getLineEnding(); - - for ($i = $end; $i < $tokenCount && $this->tokens[$i]->isWhitespace(); ++$i) { - $content = $this->tokens[$i]->getContent(); - - if (substr_count($content, "\n") < 1) { - continue; - } - - $newContent = Preg::replace('/^.*\R(\h*)$/s', $ending.'$1', $content); - - $this->tokens[$i] = new Token([T_WHITESPACE, $newContent]); - } - } - - private function containsLinebreak(int $startIndex, int $endIndex): bool - { - for ($i = $endIndex; $i > $startIndex; --$i) { - if (Preg::match('/\R/', $this->tokens[$i]->getContent())) { - return true; - } - } - - return false; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php deleted file mode 100644 index a9f69617..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesAroundOffsetFixer.php +++ /dev/null @@ -1,111 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\AllowedValueSubset; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Javier Spagnoletti - */ -final class NoSpacesAroundOffsetFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST NOT be spaces around offset braces.', - [ - new CodeSample(" ['inside']]), - new CodeSample(" ['outside']]), - ] - ); - } - - /** - * {@inheritdoc} - */ - public function isCandidate(Tokens $tokens): bool - { - return $tokens->isAnyTokenKindsFound(['[', CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN]); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->equalsAny(['[', [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN]])) { - continue; - } - - if (\in_array('inside', $this->configuration['positions'], true)) { - if ($token->equals('[')) { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, $index); - } else { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE, $index); - } - - // remove space after opening `[` or `{` - if ($tokens[$index + 1]->isWhitespace(" \t")) { - $tokens->clearAt($index + 1); - } - - // remove space before closing `]` or `}` - if ($tokens[$endIndex - 1]->isWhitespace(" \t")) { - $tokens->clearAt($endIndex - 1); - } - } - - if (\in_array('outside', $this->configuration['positions'], true)) { - $prevNonWhitespaceIndex = $tokens->getPrevNonWhitespace($index); - if ($tokens[$prevNonWhitespaceIndex]->isComment()) { - continue; - } - - $tokens->removeLeadingWhitespace($index); - } - } - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - $values = ['inside', 'outside']; - - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('positions', 'Whether spacing should be fixed inside and/or outside the offset braces.')) - ->setAllowedTypes(['array']) - ->setAllowedValues([new AllowedValueSubset($values)]) - ->setDefault($values) - ->getOption(), - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php deleted file mode 100644 index caaf2301..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoSpacesInsideParenthesisFixer.php +++ /dev/null @@ -1,111 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶4.3, ¶4.6, ¶5. - * - * @author Marc Aubé - * @author Dariusz Rumiński - */ -final class NoSpacesInsideParenthesisFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'There MUST NOT be a space after the opening parenthesis. There MUST NOT be a space before the closing parenthesis.', - [ - new CodeSample("isTokenKindFound('('); - } - - /** - * {@inheritdoc} - */ - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - foreach ($tokens as $index => $token) { - if (!$token->equals('(')) { - continue; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - // ignore parenthesis for T_ARRAY - if (null !== $prevIndex && $tokens[$prevIndex]->isGivenKind(T_ARRAY)) { - continue; - } - - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - // remove space after opening `(` - if (!$tokens[$tokens->getNextNonWhitespace($index)]->isComment()) { - $this->removeSpaceAroundToken($tokens, $index + 1); - } - - // remove space before closing `)` if it is not `list($a, $b, )` case - if (!$tokens[$tokens->getPrevMeaningfulToken($endIndex)]->equals(',')) { - $this->removeSpaceAroundToken($tokens, $endIndex - 1); - } - } - } - - /** - * Remove spaces from token at a given index. - */ - private function removeSpaceAroundToken(Tokens $tokens, int $index): void - { - $token = $tokens[$index]; - - if ($token->isWhitespace() && !str_contains($token->getContent(), "\n")) { - $tokens->clearAt($index); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php deleted file mode 100644 index 5e7d6a81..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.php +++ /dev/null @@ -1,113 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Fixer for rules defined in PSR2 ¶2.3. - * - * Don't add trailing spaces at the end of non-blank lines. - * - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -final class NoTrailingWhitespaceFixer extends AbstractFixer -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove trailing whitespace at the end of non-blank lines.', - [new CodeSample("= 0; --$index) { - $token = $tokens[$index]; - if ( - $token->isGivenKind(T_OPEN_TAG) - && $tokens->offsetExists($index + 1) - && $tokens[$index + 1]->isWhitespace() - && 1 === Preg::match('/(.*)\h$/', $token->getContent(), $openTagMatches) - && 1 === Preg::match('/^(\R)(.*)$/s', $tokens[$index + 1]->getContent(), $whitespaceMatches) - ) { - $tokens[$index] = new Token([T_OPEN_TAG, $openTagMatches[1].$whitespaceMatches[1]]); - $tokens->ensureWhitespaceAtIndex($index + 1, 0, $whitespaceMatches[2]); - - continue; - } - - if (!$token->isWhitespace()) { - continue; - } - - $lines = Preg::split('/(\\R+)/', $token->getContent(), -1, PREG_SPLIT_DELIM_CAPTURE); - $linesSize = \count($lines); - - // fix only multiline whitespaces or singleline whitespaces at the end of file - if ($linesSize > 1 || !isset($tokens[$index + 1])) { - if (!$tokens[$index - 1]->isGivenKind(T_OPEN_TAG) || 1 !== Preg::match('/(.*)\R$/', $tokens[$index - 1]->getContent())) { - $lines[0] = rtrim($lines[0], " \t"); - } - - for ($i = 1; $i < $linesSize; ++$i) { - $trimmedLine = rtrim($lines[$i], " \t"); - if ('' !== $trimmedLine) { - $lines[$i] = $trimmedLine; - } - } - - $content = implode('', $lines); - if ('' !== $content) { - $tokens[$index] = new Token([$token->getId(), $content]); - } else { - $tokens->clearAt($index); - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php deleted file mode 100644 index 52872486..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoWhitespaceInBlankLineFixer.php +++ /dev/null @@ -1,98 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - */ -final class NoWhitespaceInBlankLineFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Remove trailing whitespace at the end of blank lines.', - [new CodeSample("isWhitespace()) { - $this->fixWhitespaceToken($tokens, $i); - } - } - } - - private function fixWhitespaceToken(Tokens $tokens, int $index): void - { - $content = $tokens[$index]->getContent(); - $lines = Preg::split("/(\r\n|\n)/", $content); - $lineCount = \count($lines); - - if ( - // fix T_WHITESPACES with at least 3 lines (eg `\n \n`) - $lineCount > 2 - // and T_WHITESPACES with at least 2 lines at the end of file or after open tag with linebreak - || ($lineCount > 0 && (!isset($tokens[$index + 1]) || $tokens[$index - 1]->isGivenKind(T_OPEN_TAG))) - ) { - $lMax = isset($tokens[$index + 1]) ? $lineCount - 1 : $lineCount; - - $lStart = 1; - if ($tokens[$index - 1]->isGivenKind(T_OPEN_TAG) && "\n" === substr($tokens[$index - 1]->getContent(), -1)) { - $lStart = 0; - } - - for ($l = $lStart; $l < $lMax; ++$l) { - $lines[$l] = Preg::replace('/^\h+$/', '', $lines[$l]); - } - $content = implode($this->whitespacesConfig->getLineEnding(), $lines); - $tokens->ensureWhitespaceAtIndex($index, 0, $content); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php deleted file mode 100644 index af7fa873..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php +++ /dev/null @@ -1,76 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * A file must always end with a line endings character. - * - * Fixer for rules defined in PSR2 ¶2.2. - * - * @author Fabien Potencier - * @author Dariusz Rumiński - */ -final class SingleBlankLineAtEofFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'A PHP file without end tag must always end with a single empty line feed.', - [ - new CodeSample("count(); - - if ($count > 0 && !$tokens[$count - 1]->isGivenKind([T_INLINE_HTML, T_CLOSE_TAG, T_OPEN_TAG])) { - $tokens->ensureWhitespaceAtIndex($count - 1, 1, $this->whitespacesConfig->getLineEnding()); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php deleted file mode 100644 index 94d7239e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php +++ /dev/null @@ -1,615 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\Indentation; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Analyzer\AlternativeSyntaxAnalyzer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class StatementIndentationFixer extends AbstractFixer implements WhitespacesAwareFixerInterface -{ - use Indentation; - - private AlternativeSyntaxAnalyzer $alternativeSyntaxAnalyzer; - - private bool $bracesFixerCompatibility; - - public function __construct(bool $bracesFixerCompatibility = false) - { - parent::__construct(); - - $this->bracesFixerCompatibility = $bracesFixerCompatibility; - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'Each statement must be indented.', - [ - new CodeSample( - 'alternativeSyntaxAnalyzer = new AlternativeSyntaxAnalyzer(); - - $blockSignatureFirstTokens = [ - T_USE, - T_IF, - T_ELSE, - T_ELSEIF, - T_FOR, - T_FOREACH, - T_WHILE, - T_SWITCH, - T_CASE, - T_DEFAULT, - T_TRY, - T_FUNCTION, - T_CLASS, - T_INTERFACE, - T_TRAIT, - T_EXTENDS, - T_IMPLEMENTS, - ]; - if (\defined('T_MATCH')) { // @TODO: drop condition when PHP 8.0+ is required - $blockSignatureFirstTokens[] = T_MATCH; - } - - $blockFirstTokens = ['{', [CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN], [CT::T_USE_TRAIT], [CT::T_GROUP_IMPORT_BRACE_OPEN]]; - if (\defined('T_ATTRIBUTE')) { // @TODO: drop condition when PHP 8.0+ is required - $blockFirstTokens[] = [T_ATTRIBUTE]; - } - - $endIndex = \count($tokens) - 1; - if ($tokens[$endIndex]->isWhitespace()) { - --$endIndex; - } - - $lastIndent = $this->getLineIndentationWithBracesCompatibility( - $tokens, - 0, - $this->extractIndent($this->computeNewLineContent($tokens, 0)), - ); - - /** - * @var list $scopes - */ - $scopes = [ - [ - 'type' => 'block', - 'skip' => false, - 'end_index' => $endIndex, - 'end_index_inclusive' => true, - 'initial_indent' => $lastIndent, - 'is_indented_block' => false, - ], - ]; - - $previousLineInitialIndent = ''; - $previousLineNewIndent = ''; - $alternativeBlockStarts = []; - $caseBlockStarts = []; - - foreach ($tokens as $index => $token) { - $currentScope = \count($scopes) - 1; - - if ( - $token->equalsAny($blockFirstTokens) - || ($token->equals('(') && !$tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_ARRAY)) - || isset($alternativeBlockStarts[$index]) - || isset($caseBlockStarts[$index]) - ) { - $endIndexInclusive = true; - - if ($token->isGivenKind([T_EXTENDS, T_IMPLEMENTS])) { - $endIndex = $tokens->getNextTokenOfKind($index, ['{']); - } elseif ($token->isGivenKind(CT::T_USE_TRAIT)) { - $endIndex = $tokens->getNextTokenOfKind($index, [';']); - } elseif ($token->equals(':')) { - if (isset($caseBlockStarts[$index])) { - [$endIndex, $endIndexInclusive] = $this->findCaseBlockEnd($tokens, $index); - } else { - $endIndex = $this->alternativeSyntaxAnalyzer->findAlternativeSyntaxBlockEnd($tokens, $alternativeBlockStarts[$index]); - } - } elseif ($token->isGivenKind(CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN)) { - $endIndex = $tokens->getNextTokenOfKind($index, [[CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE]]); - } elseif ($token->isGivenKind(CT::T_GROUP_IMPORT_BRACE_OPEN)) { - $endIndex = $tokens->getNextTokenOfKind($index, [[CT::T_GROUP_IMPORT_BRACE_CLOSE]]); - } elseif ($token->equals('{')) { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - } elseif ($token->equals('(')) { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - } else { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ATTRIBUTE, $index); - } - - if ('block_signature' === $scopes[$currentScope]['type']) { - $initialIndent = $scopes[$currentScope]['initial_indent']; - } else { - $initialIndent = $this->getLineIndentationWithBracesCompatibility($tokens, $index, $lastIndent); - } - - $skip = false; - if ($this->bracesFixerCompatibility) { - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (null !== $prevIndex) { - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - } - if (null !== $prevIndex && $tokens[$prevIndex]->isGivenKind([T_FUNCTION, T_FN])) { - $skip = true; - } - } - - $scopes[] = [ - 'type' => 'block', - 'skip' => $skip, - 'end_index' => $endIndex, - 'end_index_inclusive' => $endIndexInclusive, - 'initial_indent' => $initialIndent, - 'is_indented_block' => true, - ]; - ++$currentScope; - - while ($index >= $scopes[$currentScope]['end_index']) { - array_pop($scopes); - - --$currentScope; - } - - continue; - } - - if ($token->isGivenKind($blockSignatureFirstTokens)) { - for ($endIndex = $index + 1, $max = \count($tokens); $endIndex < $max; ++$endIndex) { - if ($tokens[$endIndex]->equals('(')) { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $endIndex); - - continue; - } - - if ($tokens[$endIndex]->equalsAny(['{', ';', [T_DOUBLE_ARROW], [T_IMPLEMENTS]])) { - break; - } - - if ($tokens[$endIndex]->equals(':')) { - if ($token->isGivenKind([T_CASE, T_DEFAULT])) { - $caseBlockStarts[$endIndex] = $index; - } else { - $alternativeBlockStarts[$endIndex] = $index; - } - - break; - } - } - - $scopes[] = [ - 'type' => 'block_signature', - 'skip' => false, - 'end_index' => $endIndex, - 'end_index_inclusive' => true, - 'initial_indent' => $this->getLineIndentationWithBracesCompatibility($tokens, $index, $lastIndent), - 'is_indented_block' => $token->isGivenKind([T_EXTENDS, T_IMPLEMENTS]), - ]; - - continue; - } - - if ( - $token->isWhitespace() - || ($index > 0 && $tokens[$index - 1]->isGivenKind(T_OPEN_TAG)) - ) { - $previousOpenTagContent = $tokens[$index - 1]->isGivenKind(T_OPEN_TAG) - ? Preg::replace('/\S/', '', $tokens[$index - 1]->getContent()) - : '' - ; - - $content = $previousOpenTagContent.($token->isWhitespace() ? $token->getContent() : ''); - - if (!Preg::match('/\R/', $content)) { - continue; - } - - $nextToken = $tokens[$index + 1] ?? null; - - if ( - $this->bracesFixerCompatibility - && null !== $nextToken - && $nextToken->isComment() - && !$this->isCommentWithFixableIndentation($tokens, $index + 1) - ) { - continue; - } - - if ('block' === $scopes[$currentScope]['type'] || 'block_signature' === $scopes[$currentScope]['type']) { - $indent = false; - - if ($scopes[$currentScope]['is_indented_block']) { - $firstNonWhitespaceTokenIndex = null; - $nextNewlineIndex = null; - for ($searchIndex = $index + 1, $max = \count($tokens); $searchIndex < $max; ++$searchIndex) { - $searchToken = $tokens[$searchIndex]; - - if (!$searchToken->isWhitespace()) { - if (null === $firstNonWhitespaceTokenIndex) { - $firstNonWhitespaceTokenIndex = $searchIndex; - } - - continue; - } - - if (Preg::match('/\R/', $searchToken->getContent())) { - $nextNewlineIndex = $searchIndex; - - break; - } - } - - if (!$this->isCommentForControlSructureContinuation($tokens, $index + 1)) { - $endIndex = $scopes[$currentScope]['end_index']; - - if (!$scopes[$currentScope]['end_index_inclusive']) { - ++$endIndex; - } - - if ( - (null !== $firstNonWhitespaceTokenIndex && $firstNonWhitespaceTokenIndex < $endIndex) - || (null !== $nextNewlineIndex && $nextNewlineIndex < $endIndex) - ) { - $indent = true; - } - } - } - - $previousLineInitialIndent = $this->extractIndent($content); - - if ($scopes[$currentScope]['skip']) { - $whitespaces = $previousLineInitialIndent; - } else { - $whitespaces = $scopes[$currentScope]['initial_indent'].($indent ? $this->whitespacesConfig->getIndent() : ''); - } - - $content = Preg::replace( - '/(\R+)\h*$/', - '$1'.$whitespaces, - $content - ); - - $previousLineNewIndent = $this->extractIndent($content); - } else { - $content = Preg::replace( - '/(\R)'.$scopes[$currentScope]['initial_indent'].'(\h*)$/D', - '$1'.$scopes[$currentScope]['new_indent'].'$2', - $content - ); - } - - $lastIndent = $this->extractIndent($content); - - if ('' !== $previousOpenTagContent) { - $content = Preg::replace("/^{$previousOpenTagContent}/", '', $content); - } - - if ('' !== $content) { - $tokens->ensureWhitespaceAtIndex($index, 0, $content); - } elseif ($token->isWhitespace()) { - $tokens->clearAt($index); - } - - if (null !== $nextToken && $nextToken->isComment()) { - $tokens[$index + 1] = new Token([ - $nextToken->getId(), - Preg::replace( - '/(\R)'.preg_quote($previousLineInitialIndent, '/').'(\h*\S+.*)/', - '$1'.$previousLineNewIndent.'$2', - $nextToken->getContent() - ), - ]); - } - - if ($token->isWhitespace()) { - continue; - } - } - - if ($this->isNewLineToken($tokens, $index)) { - $lastIndent = $this->extractIndent($this->computeNewLineContent($tokens, $index)); - } - - while ($index >= $scopes[$currentScope]['end_index']) { - array_pop($scopes); - - if ([] === $scopes) { - return; - } - - --$currentScope; - } - - if ($token->isComment() || $token->equalsAny([';', ',', '}', [T_OPEN_TAG], [T_CLOSE_TAG], [CT::T_ATTRIBUTE_CLOSE]])) { - continue; - } - - if ('statement' !== $scopes[$currentScope]['type'] && 'block_signature' !== $scopes[$currentScope]['type']) { - $endIndex = $this->findStatementEndIndex($tokens, $index, $scopes[$currentScope]['end_index']); - - if ($endIndex === $index) { - continue; - } - - $scopes[] = [ - 'type' => 'statement', - 'skip' => false, - 'end_index' => $endIndex, - 'end_index_inclusive' => false, - 'initial_indent' => $previousLineInitialIndent, - 'new_indent' => $previousLineNewIndent, - ]; - } - } - } - - private function findStatementEndIndex(Tokens $tokens, int $index, int $parentScopeEndIndex): int - { - $endIndex = null; - - for ($searchEndIndex = $index; $searchEndIndex <= $parentScopeEndIndex; ++$searchEndIndex) { - $searchEndToken = $tokens[$searchEndIndex]; - - if ($searchEndToken->equalsAny(['(', '{', [CT::T_ARRAY_SQUARE_BRACE_OPEN]])) { - if ($searchEndToken->equals('(')) { - $blockType = Tokens::BLOCK_TYPE_PARENTHESIS_BRACE; - } elseif ($searchEndToken->equals('{')) { - $blockType = Tokens::BLOCK_TYPE_CURLY_BRACE; - } else { - $blockType = Tokens::BLOCK_TYPE_ARRAY_SQUARE_BRACE; - } - - $searchEndIndex = $tokens->findBlockEnd($blockType, $searchEndIndex); - - continue; - } - - if ($searchEndToken->equalsAny([';', ',', '}', [T_CLOSE_TAG]])) { - $endIndex = $tokens->getPrevNonWhitespace($searchEndIndex); - - break; - } - } - - return $endIndex ?? $tokens->getPrevMeaningfulToken($parentScopeEndIndex); - } - - /** - * @return array{int, bool} - */ - private function findCaseBlockEnd(Tokens $tokens, int $index): array - { - for ($max = \count($tokens); $index < $max; ++$index) { - if ($tokens[$index]->isGivenKind(T_SWITCH)) { - $braceIndex = $tokens->getNextMeaningfulToken( - $tokens->findBlockEnd( - Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, - $tokens->getNextMeaningfulToken($index) - ) - ); - - if ($tokens[$braceIndex]->equals(':')) { - $index = $this->alternativeSyntaxAnalyzer->findAlternativeSyntaxBlockEnd($tokens, $index); - } else { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $braceIndex); - } - - continue; - } - - if ($tokens[$index]->equals('{')) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - continue; - } - - if ($tokens[$index]->equalsAny([[T_CASE], [T_DEFAULT]])) { - return [$index, true]; - } - - if ($tokens[$index]->equalsAny(['}', [T_ENDSWITCH]])) { - return [$tokens->getPrevNonWhitespace($index), false]; - } - } - - throw new \LogicException('End of case block not found.'); - } - - private function getLineIndentationWithBracesCompatibility(Tokens $tokens, int $index, string $regularIndent): string - { - if ( - $this->bracesFixerCompatibility - && $tokens[$index]->isGivenKind(T_OPEN_TAG) - && Preg::match('/\R/', $tokens[$index]->getContent()) - && isset($tokens[$index + 1]) - && $tokens[$index + 1]->isWhitespace() - && Preg::match('/\h+$/D', $tokens[$index + 1]->getContent()) - ) { - return Preg::replace('/.*?(\h+)$/sD', '$1', $tokens[$index + 1]->getContent()); - } - - return $regularIndent; - } - - private function isCommentForControlSructureContinuation(Tokens $tokens, int $index): bool - { - if (!isset($tokens[$index], $tokens[$index + 1])) { - return false; - } - - if (!$tokens[$index]->isComment() || 1 !== Preg::match('~^(//|#)~', $tokens[$index]->getContent())) { - return false; - } - - if (!$tokens[$index + 1]->isWhitespace() || 1 !== Preg::match('/\R/', $tokens[$index + 1]->getContent())) { - return false; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - if (null !== $prevIndex && $tokens[$prevIndex]->equals('{')) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index + 1); - - if (null === $index || !$tokens[$index]->equals('}')) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index); - - return null !== $index && $tokens[$index]->equalsAny([[T_ELSE], [T_ELSEIF], ',']); - } - - /** - * Returns whether the token at given index is a comment whose indentation - * can be fixed. - * - * Indentation of a comment is not changed when the comment is part of a - * multi-line message whose lines are all single-line comments and at least - * one line has meaningful content. - */ - private function isCommentWithFixableIndentation(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isComment()) { - return false; - } - - if (str_starts_with($tokens[$index]->getContent(), '/*')) { - return true; - } - - $indent = preg_quote($this->whitespacesConfig->getIndent(), '~'); - - if (1 === Preg::match("~^(//|#)({$indent}.*)?$~", $tokens[$index]->getContent())) { - return false; - } - - $firstCommentIndex = $index; - while (true) { - $i = $this->getSiblingContinuousSingleLineComment($tokens, $firstCommentIndex, false); - if (null === $i) { - break; - } - - $firstCommentIndex = $i; - } - - $lastCommentIndex = $index; - while (true) { - $i = $this->getSiblingContinuousSingleLineComment($tokens, $lastCommentIndex, true); - if (null === $i) { - break; - } - - $lastCommentIndex = $i; - } - - if ($firstCommentIndex === $lastCommentIndex) { - return true; - } - - for ($i = $firstCommentIndex + 1; $i < $lastCommentIndex; ++$i) { - if (!$tokens[$i]->isWhitespace() && !$tokens[$i]->isComment()) { - return false; - } - } - - return true; - } - - private function getSiblingContinuousSingleLineComment(Tokens $tokens, int $index, bool $after): ?int - { - $siblingIndex = $index; - do { - if ($after) { - $siblingIndex = $tokens->getNextTokenOfKind($siblingIndex, [[T_COMMENT]]); - } else { - $siblingIndex = $tokens->getPrevTokenOfKind($siblingIndex, [[T_COMMENT]]); - } - - if (null === $siblingIndex) { - return null; - } - } while (str_starts_with($tokens[$siblingIndex]->getContent(), '/*')); - - $newLines = 0; - for ($i = min($siblingIndex, $index) + 1, $max = max($siblingIndex, $index); $i < $max; ++$i) { - if ($tokens[$i]->isWhitespace() && Preg::match('/\R/', $tokens[$i]->getContent())) { - if (1 === $newLines || Preg::match('/\R.*\R/', $tokens[$i]->getContent())) { - return null; - } - - ++$newLines; - } - } - - return $siblingIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php deleted file mode 100644 index e4ea7879..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php +++ /dev/null @@ -1,155 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer\Whitespace; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver; -use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface; -use PhpCsFixer\FixerConfiguration\FixerOptionBuilder; -use PhpCsFixer\FixerDefinition\CodeSample; -use PhpCsFixer\FixerDefinition\FixerDefinition; -use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; -use PhpCsFixer\FixerDefinition\VersionSpecification; -use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample; -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -final class TypesSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface -{ - public function configure(array $configuration): void - { - parent::configure($configuration); - - if (!isset($this->configuration['space_multiple_catch'])) { - $this->configuration['space_multiple_catch'] = $this->configuration['space']; - } - } - - /** - * {@inheritdoc} - */ - public function getDefinition(): FixerDefinitionInterface - { - return new FixerDefinition( - 'A single space or none should be around union type and intersection type operators.', - [ - new CodeSample( - " 'single'] - ), - new VersionSpecificCodeSample( - "isAnyTokenKindsFound([CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]); - } - - /** - * {@inheritdoc} - */ - protected function createConfigurationDefinition(): FixerConfigurationResolverInterface - { - return new FixerConfigurationResolver([ - (new FixerOptionBuilder('space', 'spacing to apply around union type and intersection type operators.')) - ->setAllowedValues(['none', 'single']) - ->setDefault('none') - ->getOption(), - (new FixerOptionBuilder('space_multiple_catch', 'spacing to apply around type operator when catching exceptions of multiple types, use `null` to follow the value configured for `space`.')) - ->setAllowedValues(['none', 'single', null]) - ->setDefault(null) - ->getOption(), - ]); - } - - protected function applyFix(\SplFileInfo $file, Tokens $tokens): void - { - $tokenCount = $tokens->count() - 1; - - for ($index = 0; $index < $tokenCount; ++$index) { - if ($tokens[$index]->isGivenKind([CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION])) { - $tokenCount += $this->fixSpacing($tokens, $index, 'single' === $this->configuration['space']); - - continue; - } - - if ($tokens[$index]->isGivenKind(T_CATCH)) { - while (true) { - $index = $tokens->getNextTokenOfKind($index, [')', [CT::T_TYPE_ALTERNATION]]); - - if ($tokens[$index]->equals(')')) { - break; - } - - $tokenCount += $this->fixSpacing($tokens, $index, 'single' === $this->configuration['space_multiple_catch']); - } - - // implicit continue - } - } - } - - private function fixSpacing(Tokens $tokens, int $index, bool $singleSpace): int - { - if (!$singleSpace) { - $this->ensureNoSpace($tokens, $index + 1); - $this->ensureNoSpace($tokens, $index - 1); - - return 0; - } - - $addedTokenCount = 0; - $addedTokenCount += $this->ensureSingleSpace($tokens, $index + 1, 0); - $addedTokenCount += $this->ensureSingleSpace($tokens, $index - 1, 1); - - return $addedTokenCount; - } - - private function ensureSingleSpace(Tokens $tokens, int $index, int $offset): int - { - if (!$tokens[$index]->isWhitespace()) { - $tokens->insertSlices([$index + $offset => new Token([T_WHITESPACE, ' '])]); - - return 1; - } - - if (' ' !== $tokens[$index]->getContent() && 1 !== Preg::match('/\R/', $tokens[$index]->getContent())) { - $tokens[$index] = new Token([T_WHITESPACE, ' ']); - } - - return 0; - } - - private function ensureNoSpace(Tokens $tokens, int $index): void - { - if ($tokens[$index]->isWhitespace() && 1 !== Preg::match('/\R/', $tokens[$index]->getContent())) { - $tokens->clearAt($index); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php deleted file mode 100644 index c03a3e78..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Fixer; - -use PhpCsFixer\WhitespacesFixerConfig; - -/** - * @author Dariusz Rumiński - */ -interface WhitespacesAwareFixerInterface extends FixerInterface -{ - public function setWhitespacesConfig(WhitespacesFixerConfig $config): void; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php deleted file mode 100644 index 8170e9ef..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOption.php +++ /dev/null @@ -1,94 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -/** - * @author ntzm - * - * @internal - */ -final class AliasedFixerOption implements FixerOptionInterface -{ - private FixerOptionInterface $fixerOption; - - private string $alias; - - public function __construct(FixerOptionInterface $fixerOption, string $alias) - { - $this->fixerOption = $fixerOption; - $this->alias = $alias; - } - - public function getAlias(): string - { - return $this->alias; - } - - /** - * {@inheritdoc} - */ - public function getName(): string - { - return $this->fixerOption->getName(); - } - - /** - * {@inheritdoc} - */ - public function getDescription(): string - { - return $this->fixerOption->getDescription(); - } - - /** - * {@inheritdoc} - */ - public function hasDefault(): bool - { - return $this->fixerOption->hasDefault(); - } - - /** - * {@inheritdoc} - */ - public function getDefault() - { - return $this->fixerOption->getDefault(); - } - - /** - * {@inheritdoc} - */ - public function getAllowedTypes(): ?array - { - return $this->fixerOption->getAllowedTypes(); - } - - /** - * {@inheritdoc} - */ - public function getAllowedValues(): ?array - { - return $this->fixerOption->getAllowedValues(); - } - - /** - * {@inheritdoc} - */ - public function getNormalizer(): ?\Closure - { - return $this->fixerOption->getNormalizer(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php deleted file mode 100644 index 1020d139..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AliasedFixerOptionBuilder.php +++ /dev/null @@ -1,78 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -/** - * @author ntzm - * - * @internal - */ -final class AliasedFixerOptionBuilder -{ - private FixerOptionBuilder $optionBuilder; - - private string $alias; - - public function __construct(FixerOptionBuilder $optionBuilder, string $alias) - { - $this->optionBuilder = $optionBuilder; - $this->alias = $alias; - } - - /** - * @param mixed $default - */ - public function setDefault($default): self - { - $this->optionBuilder->setDefault($default); - - return $this; - } - - /** - * @param list $allowedTypes - */ - public function setAllowedTypes(array $allowedTypes): self - { - $this->optionBuilder->setAllowedTypes($allowedTypes); - - return $this; - } - - /** - * @param list<(callable(mixed): bool)|null|scalar> $allowedValues - */ - public function setAllowedValues(array $allowedValues): self - { - $this->optionBuilder->setAllowedValues($allowedValues); - - return $this; - } - - public function setNormalizer(\Closure $normalizer): self - { - $this->optionBuilder->setNormalizer($normalizer); - - return $this; - } - - public function getOption(): AliasedFixerOption - { - return new AliasedFixerOption( - $this->optionBuilder->getOption(), - $this->alias - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php deleted file mode 100644 index fad56516..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/AllowedValueSubset.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -/** - * @internal - */ -final class AllowedValueSubset -{ - /** - * @var list - */ - private array $allowedValues; - - /** - * @param list $allowedValues - */ - public function __construct(array $allowedValues) - { - $this->allowedValues = $allowedValues; - sort($this->allowedValues, SORT_FLAG_CASE | SORT_STRING); - } - - /** - * Checks whether the given values are a subset of the allowed ones. - * - * @param mixed $values the value to validate - */ - public function __invoke($values): bool - { - if (!\is_array($values)) { - return false; - } - - foreach ($values as $value) { - if (!\in_array($value, $this->allowedValues, true)) { - return false; - } - } - - return true; - } - - /** - * @return list - */ - public function getAllowedValues(): array - { - return $this->allowedValues; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php deleted file mode 100644 index 607aba39..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOption.php +++ /dev/null @@ -1,89 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -final class DeprecatedFixerOption implements DeprecatedFixerOptionInterface -{ - private FixerOptionInterface $option; - - private string $deprecationMessage; - - public function __construct(FixerOptionInterface $option, string $deprecationMessage) - { - $this->option = $option; - $this->deprecationMessage = $deprecationMessage; - } - - /** - * {@inheritdoc} - */ - public function getName(): string - { - return $this->option->getName(); - } - - /** - * {@inheritdoc} - */ - public function getDescription(): string - { - return $this->option->getDescription(); - } - - /** - * {@inheritdoc} - */ - public function hasDefault(): bool - { - return $this->option->hasDefault(); - } - - /** - * {@inheritdoc} - */ - public function getDefault() - { - return $this->option->getDefault(); - } - - /** - * {@inheritdoc} - */ - public function getAllowedTypes(): ?array - { - return $this->option->getAllowedTypes(); - } - - /** - * {@inheritdoc} - */ - public function getAllowedValues(): ?array - { - return $this->option->getAllowedValues(); - } - - /** - * {@inheritdoc} - */ - public function getNormalizer(): ?\Closure - { - return $this->option->getNormalizer(); - } - - public function getDeprecationMessage(): string - { - return $this->deprecationMessage; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php deleted file mode 100644 index d847aea3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/DeprecatedFixerOptionInterface.php +++ /dev/null @@ -1,20 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -interface DeprecatedFixerOptionInterface extends FixerOptionInterface -{ - public function getDeprecationMessage(): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php deleted file mode 100644 index 2517f290..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolver.php +++ /dev/null @@ -1,131 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -use PhpCsFixer\Utils; -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\OptionsResolver\OptionsResolver; - -final class FixerConfigurationResolver implements FixerConfigurationResolverInterface -{ - /** - * @var list - */ - private array $options = []; - - /** - * @var list - */ - private array $registeredNames = []; - - /** - * @param iterable $options - */ - public function __construct(iterable $options) - { - foreach ($options as $option) { - $this->addOption($option); - } - - if (0 === \count($this->registeredNames)) { - throw new \LogicException('Options cannot be empty.'); - } - } - - /** - * {@inheritdoc} - */ - public function getOptions(): array - { - return $this->options; - } - - /** - * {@inheritdoc} - */ - public function resolve(array $configuration): array - { - $resolver = new OptionsResolver(); - - foreach ($this->options as $option) { - $name = $option->getName(); - - if ($option instanceof AliasedFixerOption) { - $alias = $option->getAlias(); - - if (\array_key_exists($alias, $configuration)) { - if (\array_key_exists($name, $configuration)) { - throw new InvalidOptionsException(sprintf('Aliased option "%s"/"%s" is passed multiple times.', $name, $alias)); - } - - Utils::triggerDeprecation(new \RuntimeException(sprintf( - 'Option "%s" is deprecated, use "%s" instead.', - $alias, - $name - ))); - - $configuration[$name] = $configuration[$alias]; - unset($configuration[$alias]); - } - } - - if ($option->hasDefault()) { - $resolver->setDefault($name, $option->getDefault()); - } else { - $resolver->setRequired($name); - } - - $allowedValues = $option->getAllowedValues(); - if (null !== $allowedValues) { - foreach ($allowedValues as &$allowedValue) { - if (\is_object($allowedValue) && \is_callable($allowedValue)) { - $allowedValue = static function (/* mixed */ $values) use ($allowedValue) { - return $allowedValue($values); - }; - } - } - - $resolver->setAllowedValues($name, $allowedValues); - } - - $allowedTypes = $option->getAllowedTypes(); - if (null !== $allowedTypes) { - $resolver->setAllowedTypes($name, $allowedTypes); - } - - $normalizer = $option->getNormalizer(); - if (null !== $normalizer) { - $resolver->setNormalizer($name, $normalizer); - } - } - - return $resolver->resolve($configuration); - } - - /** - * @throws \LogicException when the option is already defined - */ - private function addOption(FixerOptionInterface $option): void - { - $name = $option->getName(); - - if (\in_array($name, $this->registeredNames, true)) { - throw new \LogicException(sprintf('The "%s" option is defined multiple times.', $name)); - } - - $this->options[] = $option; - $this->registeredNames[] = $name; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php deleted file mode 100644 index 284cdbd3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerConfigurationResolverInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -interface FixerConfigurationResolverInterface -{ - /** - * @return list - */ - public function getOptions(): array; - - /** - * @param array $configuration - * - * @return array - */ - public function resolve(array $configuration): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php deleted file mode 100644 index db6556ec..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.php +++ /dev/null @@ -1,162 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -final class FixerOption implements FixerOptionInterface -{ - private string $name; - - private string $description; - - private bool $isRequired; - - /** - * @var mixed - */ - private $default; - - /** - * @var null|list - */ - private $allowedTypes; - - /** - * @var null|list<(callable(mixed): bool)|null|scalar> - */ - private $allowedValues; - - /** - * @var null|\Closure - */ - private $normalizer; - - /** - * @param mixed $default - * @param null|list $allowedTypes - * @param null|list<(callable(mixed): bool)|null|scalar> $allowedValues - */ - public function __construct( - string $name, - string $description, - bool $isRequired = true, - $default = null, - ?array $allowedTypes = null, - ?array $allowedValues = null, - ?\Closure $normalizer = null - ) { - if ($isRequired && null !== $default) { - throw new \LogicException('Required options cannot have a default value.'); - } - - if (null !== $allowedValues) { - foreach ($allowedValues as &$allowedValue) { - if ($allowedValue instanceof \Closure) { - $allowedValue = $this->unbind($allowedValue); - } - } - } - - $this->name = $name; - $this->description = $description; - $this->isRequired = $isRequired; - $this->default = $default; - $this->allowedTypes = $allowedTypes; - $this->allowedValues = $allowedValues; - - if (null !== $normalizer) { - $this->normalizer = $this->unbind($normalizer); - } - } - - /** - * {@inheritdoc} - */ - public function getName(): string - { - return $this->name; - } - - /** - * {@inheritdoc} - */ - public function getDescription(): string - { - return $this->description; - } - - /** - * {@inheritdoc} - */ - public function hasDefault(): bool - { - return !$this->isRequired; - } - - /** - * {@inheritdoc} - */ - public function getDefault() - { - if (!$this->hasDefault()) { - throw new \LogicException('No default value defined.'); - } - - return $this->default; - } - - /** - * {@inheritdoc} - */ - public function getAllowedTypes(): ?array - { - return $this->allowedTypes; - } - - /** - * {@inheritdoc} - */ - public function getAllowedValues(): ?array - { - return $this->allowedValues; - } - - /** - * {@inheritdoc} - */ - public function getNormalizer(): ?\Closure - { - return $this->normalizer; - } - - /** - * Unbinds the given closure to avoid memory leaks. - * - * The closures provided to this class were probably defined in a fixer - * class and thus bound to it by default. The configuration will then be - * stored in {@see AbstractFixer::$configurationDefinition}, leading to the - * following cyclic reference: - * - * fixer -> configuration definition -> options -> closures -> fixer - * - * This cyclic reference prevent the garbage collector to free memory as - * all elements are still referenced. - * - * See {@see https://bugs.php.net/bug.php?id=69639 Bug #69639} for details. - */ - private function unbind(\Closure $closure): \Closure - { - return $closure->bindTo(null); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php deleted file mode 100644 index ef297164..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php +++ /dev/null @@ -1,131 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -final class FixerOptionBuilder -{ - private string $name; - - private string $description; - - /** - * @var mixed - */ - private $default; - - private bool $isRequired = true; - - /** - * @var null|list - */ - private $allowedTypes; - - /** - * @var null|list<(callable(mixed): bool)|null|scalar> - */ - private $allowedValues; - - /** - * @var null|\Closure - */ - private $normalizer; - - /** - * @var null|string - */ - private $deprecationMessage; - - public function __construct(string $name, string $description) - { - $this->name = $name; - $this->description = $description; - } - - /** - * @param mixed $default - * - * @return $this - */ - public function setDefault($default): self - { - $this->default = $default; - $this->isRequired = false; - - return $this; - } - - /** - * @param list $allowedTypes - * - * @return $this - */ - public function setAllowedTypes(array $allowedTypes): self - { - $this->allowedTypes = $allowedTypes; - - return $this; - } - - /** - * @param list<(callable(mixed): bool)|null|scalar> $allowedValues - * - * @return $this - */ - public function setAllowedValues(array $allowedValues): self - { - $this->allowedValues = $allowedValues; - - return $this; - } - - /** - * @return $this - */ - public function setNormalizer(\Closure $normalizer): self - { - $this->normalizer = $normalizer; - - return $this; - } - - /** - * @return $this - */ - public function setDeprecationMessage(?string $deprecationMessage): self - { - $this->deprecationMessage = $deprecationMessage; - - return $this; - } - - public function getOption(): FixerOptionInterface - { - $option = new FixerOption( - $this->name, - $this->description, - $this->isRequired, - $this->default, - $this->allowedTypes, - $this->allowedValues, - $this->normalizer - ); - - if (null !== $this->deprecationMessage) { - $option = new DeprecatedFixerOption($option, $this->deprecationMessage); - } - - return $option; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php deleted file mode 100644 index 9ff7c5dc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php +++ /dev/null @@ -1,43 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -interface FixerOptionInterface -{ - public function getName(): string; - - public function getDescription(): string; - - public function hasDefault(): bool; - - /** - * @return mixed - * - * @throws \LogicException when no default value is defined - */ - public function getDefault(); - - /** - * @return null|list - */ - public function getAllowedTypes(): ?array; - - /** - * @return null|list<(callable(mixed): bool)|null|scalar> - */ - public function getAllowedValues(): ?array; - - public function getNormalizer(): ?\Closure; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php deleted file mode 100644 index e1957ac6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerConfiguration; - -use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class InvalidOptionsForEnvException extends InvalidOptionsException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php deleted file mode 100644 index b0dd2fed..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php +++ /dev/null @@ -1,47 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - */ -final class CodeSample implements CodeSampleInterface -{ - private string $code; - - /** - * @var null|array - */ - private ?array $configuration; - - /** - * @param null|array $configuration - */ - public function __construct(string $code, ?array $configuration = null) - { - $this->code = $code; - $this->configuration = $configuration; - } - - public function getCode(): string - { - return $this->code; - } - - public function getConfiguration(): ?array - { - return $this->configuration; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php deleted file mode 100644 index 9bce5eb8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php +++ /dev/null @@ -1,28 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - */ -interface CodeSampleInterface -{ - public function getCode(): string; - - /** - * @return null|array - */ - public function getConfiguration(): ?array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php deleted file mode 100644 index 833d94c1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSample.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class FileSpecificCodeSample implements FileSpecificCodeSampleInterface -{ - private CodeSampleInterface $codeSample; - - private \SplFileInfo $splFileInfo; - - /** - * @param null|array $configuration - */ - public function __construct( - string $code, - \SplFileInfo $splFileInfo, - ?array $configuration = null - ) { - $this->codeSample = new CodeSample($code, $configuration); - $this->splFileInfo = $splFileInfo; - } - - /** - * {@inheritdoc} - */ - public function getCode(): string - { - return $this->codeSample->getCode(); - } - - /** - * {@inheritdoc} - */ - public function getConfiguration(): ?array - { - return $this->codeSample->getConfiguration(); - } - - /** - * {@inheritdoc} - */ - public function getSplFileInfo(): \SplFileInfo - { - return $this->splFileInfo; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php deleted file mode 100644 index df6f092f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FileSpecificCodeSampleInterface.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -interface FileSpecificCodeSampleInterface extends CodeSampleInterface -{ - public function getSplFileInfo(): \SplFileInfo; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php deleted file mode 100644 index cd1e4779..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinition.php +++ /dev/null @@ -1,68 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - */ -final class FixerDefinition implements FixerDefinitionInterface -{ - private string $summary; - - /** - * @var list - */ - private array $codeSamples; - - private ?string $description; - - private ?string $riskyDescription; - - /** - * @param list $codeSamples array of samples, where single sample is [code, configuration] - * @param null|string $riskyDescription null for non-risky fixer - */ - public function __construct( - string $summary, - array $codeSamples, - ?string $description = null, - ?string $riskyDescription = null - ) { - $this->summary = $summary; - $this->codeSamples = $codeSamples; - $this->description = $description; - $this->riskyDescription = $riskyDescription; - } - - public function getSummary(): string - { - return $this->summary; - } - - public function getDescription(): ?string - { - return $this->description; - } - - public function getRiskyDescription(): ?string - { - return $this->riskyDescription; - } - - public function getCodeSamples(): array - { - return $this->codeSamples; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php deleted file mode 100644 index 5bc2f934..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/FixerDefinitionInterface.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Dariusz Rumiński - */ -interface FixerDefinitionInterface -{ - public function getSummary(): string; - - public function getDescription(): ?string; - - /** - * @return null|string null for non-risky fixer - */ - public function getRiskyDescription(): ?string; - - /** - * Array of samples, where single sample is [code, configuration]. - * - * @return list - */ - public function getCodeSamples(): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php deleted file mode 100644 index c5d3dc1f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSample.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Andreas Möller - */ -final class VersionSpecificCodeSample implements VersionSpecificCodeSampleInterface -{ - private CodeSampleInterface $codeSample; - - private VersionSpecificationInterface $versionSpecification; - - /** - * @param null|array $configuration - */ - public function __construct( - string $code, - VersionSpecificationInterface $versionSpecification, - ?array $configuration = null - ) { - $this->codeSample = new CodeSample($code, $configuration); - $this->versionSpecification = $versionSpecification; - } - - /** - * {@inheritdoc} - */ - public function getCode(): string - { - return $this->codeSample->getCode(); - } - - /** - * {@inheritdoc} - */ - public function getConfiguration(): ?array - { - return $this->codeSample->getConfiguration(); - } - - /** - * {@inheritdoc} - */ - public function isSuitableFor(int $version): bool - { - return $this->versionSpecification->isSatisfiedBy($version); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php deleted file mode 100644 index 74e4f446..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificCodeSampleInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Andreas Moeller - */ -interface VersionSpecificCodeSampleInterface extends CodeSampleInterface -{ - public function isSuitableFor(int $version): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php deleted file mode 100644 index 916b7de1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Andreas Möller - */ -final class VersionSpecification implements VersionSpecificationInterface -{ - /** - * @var null|int<1, max> - */ - private ?int $minimum; - - /** - * @var null|int<1, max> - */ - private ?int $maximum; - - /** - * @param null|int<1, max> $minimum - * @param null|int<1, max> $maximum - * - * @throws \InvalidArgumentException - */ - public function __construct(?int $minimum = null, ?int $maximum = null) - { - if (null === $minimum && null === $maximum) { - throw new \InvalidArgumentException('Minimum or maximum need to be specified.'); - } - - // @phpstan-ignore-next-line - if (null !== $minimum && 1 > $minimum) { - throw new \InvalidArgumentException('Minimum needs to be either null or an integer greater than 0.'); - } - - if (null !== $maximum) { - // @phpstan-ignore-next-line - if (1 > $maximum) { - throw new \InvalidArgumentException('Maximum needs to be either null or an integer greater than 0.'); - } - - if (null !== $minimum && $maximum < $minimum) { - throw new \InvalidArgumentException('Maximum should not be lower than the minimum.'); - } - } - - $this->minimum = $minimum; - $this->maximum = $maximum; - } - - /** - * {@inheritdoc} - */ - public function isSatisfiedBy(int $version): bool - { - if (null !== $this->minimum && $version < $this->minimum) { - return false; - } - - if (null !== $this->maximum && $version > $this->maximum) { - return false; - } - - return true; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php deleted file mode 100644 index 502cdc4a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php +++ /dev/null @@ -1,23 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\FixerDefinition; - -/** - * @author Andreas Möller - */ -interface VersionSpecificationInterface -{ - public function isSatisfiedBy(int $version): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerFactory.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerFactory.php deleted file mode 100644 index b9dbd4e5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerFactory.php +++ /dev/null @@ -1,236 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; -use PhpCsFixer\Fixer\ConfigurableFixerInterface; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface; -use PhpCsFixer\RuleSet\RuleSetInterface; -use Symfony\Component\Finder\Finder as SymfonyFinder; -use Symfony\Component\Finder\SplFileInfo; - -/** - * Class provides a way to create a group of fixers. - * - * Fixers may be registered (made the factory aware of them) by - * registering a custom fixer and default, built in fixers. - * Then, one can attach Config instance to fixer instances. - * - * Finally factory creates a ready to use group of fixers. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class FixerFactory -{ - private FixerNameValidator $nameValidator; - - /** - * @var list - */ - private array $fixers = []; - - /** - * @var array - */ - private array $fixersByName = []; - - public function __construct() - { - $this->nameValidator = new FixerNameValidator(); - } - - public function setWhitespacesConfig(WhitespacesFixerConfig $config): self - { - foreach ($this->fixers as $fixer) { - if ($fixer instanceof WhitespacesAwareFixerInterface) { - $fixer->setWhitespacesConfig($config); - } - } - - return $this; - } - - /** - * @return list - */ - public function getFixers(): array - { - $this->fixers = Utils::sortFixers($this->fixers); - - return $this->fixers; - } - - /** - * @return $this - */ - public function registerBuiltInFixers(): self - { - static $builtInFixers = null; - - if (null === $builtInFixers) { - $builtInFixers = []; - - /** @var SplFileInfo $file */ - foreach (SymfonyFinder::create()->files()->in(__DIR__.'/Fixer')->name('*Fixer.php')->depth(1) as $file) { - $relativeNamespace = $file->getRelativePath(); - $fixerClass = 'PhpCsFixer\\Fixer\\'.($relativeNamespace ? $relativeNamespace.'\\' : '').$file->getBasename('.php'); - $builtInFixers[] = $fixerClass; - } - } - - foreach ($builtInFixers as $class) { - $this->registerFixer(new $class(), false); - } - - return $this; - } - - /** - * @param FixerInterface[] $fixers - * - * @return $this - */ - public function registerCustomFixers(iterable $fixers): self - { - foreach ($fixers as $fixer) { - $this->registerFixer($fixer, true); - } - - return $this; - } - - /** - * @return $this - */ - public function registerFixer(FixerInterface $fixer, bool $isCustom): self - { - $name = $fixer->getName(); - - if (isset($this->fixersByName[$name])) { - throw new \UnexpectedValueException(sprintf('Fixer named "%s" is already registered.', $name)); - } - - if (!$this->nameValidator->isValid($name, $isCustom)) { - throw new \UnexpectedValueException(sprintf('Fixer named "%s" has invalid name.', $name)); - } - - $this->fixers[] = $fixer; - $this->fixersByName[$name] = $fixer; - - return $this; - } - - /** - * Apply RuleSet on fixers to filter out all unwanted fixers. - * - * @return $this - */ - public function useRuleSet(RuleSetInterface $ruleSet): self - { - $fixers = []; - $fixersByName = []; - $fixerConflicts = []; - - $fixerNames = array_keys($ruleSet->getRules()); - foreach ($fixerNames as $name) { - if (!\array_key_exists($name, $this->fixersByName)) { - throw new \UnexpectedValueException(sprintf('Rule "%s" does not exist.', $name)); - } - - $fixer = $this->fixersByName[$name]; - $config = $ruleSet->getRuleConfiguration($name); - - if (null !== $config) { - if ($fixer instanceof ConfigurableFixerInterface) { - if (\count($config) < 1) { - throw new InvalidFixerConfigurationException($fixer->getName(), 'Configuration must be an array and may not be empty.'); - } - - $fixer->configure($config); - } else { - throw new InvalidFixerConfigurationException($fixer->getName(), 'Is not configurable.'); - } - } - - $fixers[] = $fixer; - $fixersByName[$name] = $fixer; - $conflicts = array_intersect($this->getFixersConflicts($fixer), $fixerNames); - - if (\count($conflicts) > 0) { - $fixerConflicts[$name] = $conflicts; - } - } - - if (\count($fixerConflicts) > 0) { - throw new \UnexpectedValueException($this->generateConflictMessage($fixerConflicts)); - } - - $this->fixers = $fixers; - $this->fixersByName = $fixersByName; - - return $this; - } - - /** - * Check if fixer exists. - */ - public function hasRule(string $name): bool - { - return isset($this->fixersByName[$name]); - } - - /** - * @return null|string[] - */ - private function getFixersConflicts(FixerInterface $fixer): ?array - { - static $conflictMap = [ - 'no_blank_lines_before_namespace' => ['single_blank_line_before_namespace'], - 'single_import_per_statement' => ['group_import'], - ]; - - $fixerName = $fixer->getName(); - - return \array_key_exists($fixerName, $conflictMap) ? $conflictMap[$fixerName] : []; - } - - /** - * @param array $fixerConflicts - */ - private function generateConflictMessage(array $fixerConflicts): string - { - $message = 'Rule contains conflicting fixers:'; - $report = []; - - foreach ($fixerConflicts as $fixer => $fixers) { - // filter mutual conflicts - $report[$fixer] = array_filter( - $fixers, - static function (string $candidate) use ($report, $fixer): bool { - return !\array_key_exists($candidate, $report) || !\in_array($fixer, $report[$candidate], true); - } - ); - - if (\count($report[$fixer]) > 0) { - $message .= sprintf("\n- \"%s\" with \"%s\"", $fixer, implode('", "', $report[$fixer])); - } - } - - return $message; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php deleted file mode 100644 index b609da49..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php +++ /dev/null @@ -1,51 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use Symfony\Contracts\EventDispatcher\Event; - -/** - * Event that is fired when file was processed by Fixer. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class FixerFileProcessedEvent extends Event -{ - /** - * Event name. - */ - public const NAME = 'fixer.file_processed'; - - public const STATUS_INVALID = 1; - public const STATUS_SKIPPED = 2; - public const STATUS_NO_CHANGES = 3; - public const STATUS_FIXED = 4; - public const STATUS_EXCEPTION = 5; - public const STATUS_LINT = 6; - - private int $status; - - public function __construct(int $status) - { - $this->status = $status; - } - - public function getStatus(): int - { - return $this->status; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/FixerNameValidator.php b/old_vendor/friendsofphp/php-cs-fixer/src/FixerNameValidator.php deleted file mode 100644 index ce2697d3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/FixerNameValidator.php +++ /dev/null @@ -1,32 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class FixerNameValidator -{ - public function isValid(string $name, bool $isCustom): bool - { - if (!$isCustom) { - return 1 === Preg::match('/^[a-z][a-z0-9_]*$/', $name); - } - - return 1 === Preg::match('/^[A-Z][a-zA-Z0-9]*\/[a-z][a-z0-9_]*$/', $name); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php deleted file mode 100644 index 0666d6df..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php +++ /dev/null @@ -1,85 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Indicator; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class PhpUnitTestCaseIndicator -{ - public function isPhpUnitClass(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isGivenKind(T_CLASS)) { - throw new \LogicException(sprintf('No "T_CLASS" at given index %d, got "%s".', $index, $tokens[$index]->getName())); - } - - $index = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$index]->isGivenKind(T_STRING)) { - return false; - } - - $extendsIndex = $tokens->getNextTokenOfKind($index, ['{', [T_EXTENDS]]); - - if (!$tokens[$extendsIndex]->isGivenKind(T_EXTENDS)) { - return false; - } - - if (0 !== Preg::match('/(?:Test|TestCase)$/', $tokens[$index]->getContent())) { - return true; - } - - while (null !== $index = $tokens->getNextMeaningfulToken($index)) { - if ($tokens[$index]->equals('{')) { - break; // end of class signature - } - - if (!$tokens[$index]->isGivenKind(T_STRING)) { - continue; // not part of extends nor part of implements; so continue - } - - if (0 !== Preg::match('/(?:Test|TestCase)(?:Interface)?$/', $tokens[$index]->getContent())) { - return true; - } - } - - return false; - } - - /** - * @return \Generator array of [int start, int end] indices from sooner to later classes - */ - public function findPhpUnitClasses(Tokens $tokens): \Generator - { - for ($index = $tokens->count() - 1; $index > 0; --$index) { - if (!$tokens[$index]->isGivenKind(T_CLASS) || !$this->isPhpUnitClass($tokens, $index)) { - continue; - } - - $startIndex = $tokens->getNextTokenOfKind($index, ['{']); - - if (null === $startIndex) { - return; - } - - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $startIndex); - - yield [$startIndex, $endIndex]; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php deleted file mode 100644 index 8140824b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php +++ /dev/null @@ -1,71 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class CachingLinter implements LinterInterface -{ - private LinterInterface $sublinter; - - /** - * @var array - */ - private array $cache = []; - - public function __construct(LinterInterface $linter) - { - $this->sublinter = $linter; - } - - /** - * {@inheritdoc} - */ - public function isAsync(): bool - { - return $this->sublinter->isAsync(); - } - - /** - * {@inheritdoc} - */ - public function lintFile(string $path): LintingResultInterface - { - $checksum = md5(file_get_contents($path)); - - if (!isset($this->cache[$checksum])) { - $this->cache[$checksum] = $this->sublinter->lintFile($path); - } - - return $this->cache[$checksum]; - } - - /** - * {@inheritdoc} - */ - public function lintSource(string $source): LintingResultInterface - { - $checksum = md5($source); - - if (!isset($this->cache[$checksum])) { - $this->cache[$checksum] = $this->sublinter->lintSource($source); - } - - return $this->cache[$checksum]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/Linter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/Linter.php deleted file mode 100644 index 4139e1e1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/Linter.php +++ /dev/null @@ -1,56 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * Handle PHP code linting process. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class Linter implements LinterInterface -{ - private LinterInterface $subLinter; - - public function __construct() - { - $this->subLinter = new TokenizerLinter(); - } - - /** - * {@inheritdoc} - */ - public function isAsync(): bool - { - return $this->subLinter->isAsync(); - } - - /** - * {@inheritdoc} - */ - public function lintFile(string $path): LintingResultInterface - { - return $this->subLinter->lintFile($path); - } - - /** - * {@inheritdoc} - */ - public function lintSource(string $source): LintingResultInterface - { - return $this->subLinter->lintSource($source); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php deleted file mode 100644 index 1b5c2db6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LinterInterface.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * Interface for PHP code linting process manager. - * - * @author Dariusz Rumiński - */ -interface LinterInterface -{ - public function isAsync(): bool; - - /** - * Lint PHP file. - */ - public function lintFile(string $path): LintingResultInterface; - - /** - * Lint PHP code. - */ - public function lintSource(string $source): LintingResultInterface; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingException.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingException.php deleted file mode 100644 index b4adb7e8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingException.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * @author Dariusz Rumiński - * - * @final - * - * @TODO 4.0 make class "final" - */ -class LintingException extends \RuntimeException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php deleted file mode 100644 index 855d695b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/LintingResultInterface.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * @author Dariusz Rumiński - */ -interface LintingResultInterface -{ - /** - * Check if linting process was successful and raise LintingException if not. - */ - public function check(): void; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php deleted file mode 100644 index edd2ca87..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinter.php +++ /dev/null @@ -1,160 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -use PhpCsFixer\FileReader; -use PhpCsFixer\FileRemoval; -use Symfony\Component\Filesystem\Exception\IOException; -use Symfony\Component\Process\PhpExecutableFinder; -use Symfony\Component\Process\Process; - -/** - * Handle PHP code linting using separated process of `php -l _file_`. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ProcessLinter implements LinterInterface -{ - private FileRemoval $fileRemoval; - - private ProcessLinterProcessBuilder $processBuilder; - - /** - * Temporary file for code linting. - * - * @var null|string - */ - private $temporaryFile; - - /** - * @param null|string $executable PHP executable, null for autodetection - */ - public function __construct(?string $executable = null) - { - if (null === $executable) { - $executableFinder = new PhpExecutableFinder(); - $executable = $executableFinder->find(false); - - if (false === $executable) { - throw new UnavailableLinterException('Cannot find PHP executable.'); - } - - if ('phpdbg' === \PHP_SAPI) { - if (!str_contains($executable, 'phpdbg')) { - throw new UnavailableLinterException('Automatically found PHP executable is non-standard phpdbg. Could not find proper PHP executable.'); - } - - // automatically found executable is `phpdbg`, let us try to fallback to regular `php` - $executable = str_replace('phpdbg', 'php', $executable); - - if (!is_executable($executable)) { - throw new UnavailableLinterException('Automatically found PHP executable is phpdbg. Could not find proper PHP executable.'); - } - } - } - - $this->processBuilder = new ProcessLinterProcessBuilder($executable); - $this->fileRemoval = new FileRemoval(); - } - - public function __destruct() - { - if (null !== $this->temporaryFile) { - $this->fileRemoval->delete($this->temporaryFile); - } - } - - /** - * This class is not intended to be serialized, - * and cannot be deserialized (see __wakeup method). - */ - public function __sleep(): array - { - throw new \BadMethodCallException('Cannot serialize '.__CLASS__); - } - - /** - * Disable the deserialization of the class to prevent attacker executing - * code by leveraging the __destruct method. - * - * @see https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection - */ - public function __wakeup(): void - { - throw new \BadMethodCallException('Cannot unserialize '.__CLASS__); - } - - /** - * {@inheritdoc} - */ - public function isAsync(): bool - { - return true; - } - - /** - * {@inheritdoc} - */ - public function lintFile(string $path): LintingResultInterface - { - return new ProcessLintingResult($this->createProcessForFile($path), $path); - } - - /** - * {@inheritdoc} - */ - public function lintSource(string $source): LintingResultInterface - { - return new ProcessLintingResult($this->createProcessForSource($source), $this->temporaryFile); - } - - /** - * @param string $path path to file - */ - private function createProcessForFile(string $path): Process - { - // in case php://stdin - if (!is_file($path)) { - return $this->createProcessForSource(FileReader::createSingleton()->read($path)); - } - - $process = $this->processBuilder->build($path); - $process->setTimeout(10); - $process->start(); - - return $process; - } - - /** - * Create process that lint PHP code. - * - * @param string $source code - */ - private function createProcessForSource(string $source): Process - { - if (null === $this->temporaryFile) { - $this->temporaryFile = tempnam(sys_get_temp_dir(), 'cs_fixer_tmp_'); - $this->fileRemoval->observe($this->temporaryFile); - } - - if (false === @file_put_contents($this->temporaryFile, $source)) { - throw new IOException(sprintf('Failed to write file "%s".', $this->temporaryFile), 0, null, $this->temporaryFile); - } - - return $this->createProcessForFile($this->temporaryFile); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php deleted file mode 100644 index ee9a555e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLinterProcessBuilder.php +++ /dev/null @@ -1,44 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -use Symfony\Component\Process\Process; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class ProcessLinterProcessBuilder -{ - private string $executable; - - /** - * @param string $executable PHP executable - */ - public function __construct(string $executable) - { - $this->executable = $executable; - } - - public function build(string $path): Process - { - return new Process([ - $this->executable, - '-l', - $path, - ]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php deleted file mode 100644 index 985869ea..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/ProcessLintingResult.php +++ /dev/null @@ -1,88 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -use Symfony\Component\Process\Process; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class ProcessLintingResult implements LintingResultInterface -{ - private Process $process; - - private ?string $path; - - private ?bool $isSuccessful = null; - - public function __construct(Process $process, ?string $path = null) - { - $this->process = $process; - $this->path = $path; - } - - /** - * {@inheritdoc} - */ - public function check(): void - { - if (!$this->isSuccessful()) { - // on some systems stderr is used, but on others, it's not - throw new LintingException($this->getProcessErrorMessage(), $this->process->getExitCode()); - } - } - - private function getProcessErrorMessage(): string - { - $output = strtok(ltrim($this->process->getErrorOutput() ?: $this->process->getOutput()), "\n"); - - if (false === $output) { - return 'Fatal error: Unable to lint file.'; - } - - if (null !== $this->path) { - $needle = sprintf('in %s ', $this->path); - $pos = strrpos($output, $needle); - - if (false !== $pos) { - $output = sprintf('%s%s', substr($output, 0, $pos), substr($output, $pos + \strlen($needle))); - } - } - - $prefix = substr($output, 0, 18); - - if ('PHP Parse error: ' === $prefix) { - return sprintf('Parse error: %s.', substr($output, 18)); - } - - if ('PHP Fatal error: ' === $prefix) { - return sprintf('Fatal error: %s.', substr($output, 18)); - } - - return sprintf('%s.', $output); - } - - private function isSuccessful(): bool - { - if (null === $this->isSuccessful) { - $this->process->wait(); - $this->isSuccessful = $this->process->isSuccessful(); - } - - return $this->isSuccessful; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php deleted file mode 100644 index d4ba1182..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLinter.php +++ /dev/null @@ -1,65 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -use PhpCsFixer\FileReader; -use PhpCsFixer\Tokenizer\CodeHasher; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Handle PHP code linting. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class TokenizerLinter implements LinterInterface -{ - /** - * {@inheritdoc} - */ - public function isAsync(): bool - { - return false; - } - - /** - * {@inheritdoc} - */ - public function lintFile(string $path): LintingResultInterface - { - return $this->lintSource(FileReader::createSingleton()->read($path)); - } - - /** - * {@inheritdoc} - */ - public function lintSource(string $source): LintingResultInterface - { - try { - // To lint, we will parse the source into Tokens. - // During that process, it might throw a ParseError or CompileError. - // If it won't, cache of tokenized version of source will be kept, which is great for Runner. - // Yet, first we need to clear already existing cache to not hit it and lint the code indeed. - $codeHash = CodeHasher::calculateCodeHash($source); - Tokens::clearCache($codeHash); - Tokens::fromCode($source); - - return new TokenizerLintingResult(); - } catch (\ParseError|\CompileError $e) { - return new TokenizerLintingResult($e); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php deleted file mode 100644 index d233437e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/TokenizerLintingResult.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class TokenizerLintingResult implements LintingResultInterface -{ - private ?\Error $error; - - public function __construct(?\Error $error = null) - { - $this->error = $error; - } - - /** - * {@inheritdoc} - */ - public function check(): void - { - if (null !== $this->error) { - throw new LintingException( - sprintf('%s: %s on line %d.', $this->getMessagePrefix(), $this->error->getMessage(), $this->error->getLine()), - $this->error->getCode(), - $this->error - ); - } - } - - private function getMessagePrefix(): string - { - return $this->error instanceof \ParseError ? 'Parse error' : 'Fatal error'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php b/old_vendor/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php deleted file mode 100644 index 20cefbbf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Linter/UnavailableLinterException.php +++ /dev/null @@ -1,28 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Linter; - -/** - * Exception that is thrown when the chosen linter is not available on the environment. - * - * @author Dariusz Rumiński - * - * @final - * - * @TODO 4.0 make class "final" - */ -class UnavailableLinterException extends \RuntimeException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/PharChecker.php b/old_vendor/friendsofphp/php-cs-fixer/src/PharChecker.php deleted file mode 100644 index fb352420..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/PharChecker.php +++ /dev/null @@ -1,41 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @internal - */ -final class PharChecker implements PharCheckerInterface -{ - /** - * {@inheritdoc} - */ - public function checkFileValidity(string $filename): ?string - { - try { - $phar = new \Phar($filename); - // free the variable to unlock the file - unset($phar); - } catch (\Exception $e) { - if (!$e instanceof \UnexpectedValueException && !$e instanceof \PharException) { - throw $e; - } - - return 'Failed to create Phar instance. '.$e->getMessage(); - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php deleted file mode 100644 index 6ae22088..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/PharCheckerInterface.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @internal - */ -interface PharCheckerInterface -{ - /** - * @return null|string the invalidity reason if any, null otherwise - */ - public function checkFileValidity(string $filename): ?string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Preg.php b/old_vendor/friendsofphp/php-cs-fixer/src/Preg.php deleted file mode 100644 index 444e0a9b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Preg.php +++ /dev/null @@ -1,200 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * This class replaces preg_* functions to better handling UTF8 strings, - * ensuring no matter "u" modifier is present or absent subject will be handled correctly. - * - * @author Kuba Werłos - * - * @internal - */ -final class Preg -{ - /** - * @param null|string[] $matches - * - * @throws PregException - */ - public static function match(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int - { - $result = @preg_match(self::addUtf8Modifier($pattern), $subject, $matches, $flags, $offset); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - $result = @preg_match(self::removeUtf8Modifier($pattern), $subject, $matches, $flags, $offset); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - throw self::newPregException(preg_last_error(), __METHOD__, (array) $pattern); - } - - /** - * @param null|string[] $matches - * - * @throws PregException - */ - public static function matchAll(string $pattern, string $subject, ?array &$matches = null, int $flags = PREG_PATTERN_ORDER, int $offset = 0): int - { - $result = @preg_match_all(self::addUtf8Modifier($pattern), $subject, $matches, $flags, $offset); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - $result = @preg_match_all(self::removeUtf8Modifier($pattern), $subject, $matches, $flags, $offset); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - throw self::newPregException(preg_last_error(), __METHOD__, (array) $pattern); - } - - /** - * @param string|string[] $subject - * - * @throws PregException - */ - public static function replace(string $pattern, string $replacement, $subject, int $limit = -1, ?int &$count = null): string - { - $result = @preg_replace(self::addUtf8Modifier($pattern), $replacement, $subject, $limit, $count); - if (null !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - $result = @preg_replace(self::removeUtf8Modifier($pattern), $replacement, $subject, $limit, $count); - if (null !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - throw self::newPregException(preg_last_error(), __METHOD__, (array) $pattern); - } - - /** - * @throws PregException - */ - public static function replaceCallback(string $pattern, callable $callback, string $subject, int $limit = -1, ?int &$count = null): string - { - $result = @preg_replace_callback(self::addUtf8Modifier($pattern), $callback, $subject, $limit, $count); - if (null !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - $result = @preg_replace_callback(self::removeUtf8Modifier($pattern), $callback, $subject, $limit, $count); - if (null !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - throw self::newPregException(preg_last_error(), __METHOD__, (array) $pattern); - } - - /** - * @return string[] - * - * @throws PregException - */ - public static function split(string $pattern, string $subject, int $limit = -1, int $flags = 0): array - { - $result = @preg_split(self::addUtf8Modifier($pattern), $subject, $limit, $flags); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - $result = @preg_split(self::removeUtf8Modifier($pattern), $subject, $limit, $flags); - if (false !== $result && PREG_NO_ERROR === preg_last_error()) { - return $result; - } - - throw self::newPregException(preg_last_error(), __METHOD__, (array) $pattern); - } - - /** - * @param string|string[] $pattern - * - * @return string|string[] - */ - private static function addUtf8Modifier($pattern) - { - if (\is_array($pattern)) { - return array_map(__METHOD__, $pattern); - } - - return $pattern.'u'; - } - - /** - * @param string|string[] $pattern - * - * @return string|string[] - */ - private static function removeUtf8Modifier($pattern) - { - if (\is_array($pattern)) { - return array_map(__METHOD__, $pattern); - } - - if ('' === $pattern) { - return ''; - } - - $delimiter = $pattern[0]; - - $endDelimiterPosition = strrpos($pattern, $delimiter); - - return substr($pattern, 0, $endDelimiterPosition).str_replace('u', '', substr($pattern, $endDelimiterPosition)); - } - - /** - * Create PregException. - * - * Create the generic PregException message and if possible due to finding - * an invalid pattern, tell more about such kind of error in the message. - * - * @param string[] $patterns - */ - private static function newPregException(int $error, string $method, array $patterns): PregException - { - foreach ($patterns as $pattern) { - $last = error_get_last(); - $result = @preg_match($pattern, ''); - - if (false !== $result) { - continue; - } - - $code = preg_last_error(); - $next = error_get_last(); - - if ($last !== $next) { - $message = sprintf( - '(code: %d) %s', - $code, - preg_replace('~preg_[a-z_]+[()]{2}: ~', '', $next['message']) - ); - } else { - $message = sprintf('(code: %d)', $code); - } - - return new PregException( - sprintf('%s(): Invalid PCRE pattern "%s": %s (version: %s)', $method, $pattern, $message, PCRE_VERSION), - $code - ); - } - - return new PregException(sprintf('Error occurred when calling %s.', $method), $error); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/PregException.php b/old_vendor/friendsofphp/php-cs-fixer/src/PregException.php deleted file mode 100644 index c91b86ce..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/PregException.php +++ /dev/null @@ -1,26 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * Exception that is thrown when PCRE function encounters an error. - * - * @author Kuba Werłos - * - * @internal - */ -final class PregException extends \RuntimeException -{ -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php deleted file mode 100644 index 9c36c3c7..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractMigrationSetDescription.php +++ /dev/null @@ -1,38 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -use PhpCsFixer\Preg; - -/** - * @internal - */ -abstract class AbstractMigrationSetDescription extends AbstractRuleSetDescription -{ - public function getDescription(): string - { - $name = $this->getName(); - - if (0 !== Preg::match('#^@PHPUnit([\d]{2})Migration.*$#', $name, $matches)) { - return sprintf('Rules to improve tests code for PHPUnit %d.%d compatibility.', $matches[1][0], $matches[1][1]); - } - - if (0 !== Preg::match('#^@PHP([\d]{2})Migration.*$#', $name, $matches)) { - return sprintf('Rules to improve code for PHP %d.%d compatibility.', $matches[1][0], $matches[1][1]); - } - - throw new \RuntimeException(sprintf('Cannot generate description for "%s" "%s".', static::class, $name)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php deleted file mode 100644 index d822ffcc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/AbstractRuleSetDescription.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -/** - * @internal - */ -abstract class AbstractRuleSetDescription implements RuleSetDescriptionInterface -{ - public function __construct() - { - } - - public function getName(): string - { - $name = substr(static::class, 1 + strrpos(static::class, '\\'), -3); - - return '@'.str_replace('Risky', ':risky', $name); - } - - public function isRisky(): bool - { - return str_contains(static::class, 'Risky'); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php deleted file mode 100644 index f0fc270d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSet.php +++ /dev/null @@ -1,152 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException; - -/** - * Set of rules to be used by fixer. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class RuleSet implements RuleSetInterface -{ - /** - * Group of rules generated from input set. - * - * The key is name of rule, value is bool if the rule/set should be used. - * The key must not point to any set. - * - * @var array|bool> - */ - private array $rules; - - public function __construct(array $set = []) - { - foreach ($set as $name => $value) { - if ('' === $name) { - throw new \InvalidArgumentException('Rule/set name must not be empty.'); - } - - // @phpstan-ignore-next-line - if (\is_int($name)) { - throw new \InvalidArgumentException(sprintf('Missing value for "%s" rule/set.', $value)); - } - - // @phpstan-ignore-next-line - if (!\is_bool($value) && !\is_array($value)) { - $message = str_starts_with($name, '@') ? 'Set must be enabled (true) or disabled (false). Other values are not allowed.' : 'Rule must be enabled (true), disabled (false) or configured (non-empty, assoc array). Other values are not allowed.'; - - if (null === $value) { - $message .= ' To disable the '.(str_starts_with($name, '@') ? 'set' : 'rule').', use "FALSE" instead of "NULL".'; - } - - throw new InvalidFixerConfigurationException($name, $message); - } - } - - $this->resolveSet($set); - } - - /** - * {@inheritdoc} - */ - public function hasRule(string $rule): bool - { - return \array_key_exists($rule, $this->rules); - } - - /** - * {@inheritdoc} - */ - public function getRuleConfiguration(string $rule): ?array - { - if (!$this->hasRule($rule)) { - throw new \InvalidArgumentException(sprintf('Rule "%s" is not in the set.', $rule)); - } - - if (true === $this->rules[$rule]) { - return null; - } - - return $this->rules[$rule]; - } - - /** - * {@inheritdoc} - */ - public function getRules(): array - { - return $this->rules; - } - - /** - * Resolve input set into group of rules. - * - * @param array|bool> $rules - */ - private function resolveSet(array $rules): void - { - $resolvedRules = []; - - // expand sets - foreach ($rules as $name => $value) { - if (str_starts_with($name, '@')) { - if (!\is_bool($value)) { - throw new \UnexpectedValueException(sprintf('Nested rule set "%s" configuration must be a boolean.', $name)); - } - - $set = $this->resolveSubset($name, $value); - $resolvedRules = array_merge($resolvedRules, $set); - } else { - $resolvedRules[$name] = $value; - } - } - - // filter out all resolvedRules that are off - $resolvedRules = array_filter($resolvedRules); - - $this->rules = $resolvedRules; - } - - /** - * Resolve set rules as part of another set. - * - * If set value is false then disable all fixers in set, - * if not then get value from set item. - * - * @return array|bool> - */ - private function resolveSubset(string $setName, bool $setValue): array - { - $rules = RuleSets::getSetDefinition($setName)->getRules(); - - foreach ($rules as $name => $value) { - if (str_starts_with($name, '@')) { - $set = $this->resolveSubset($name, $setValue); - unset($rules[$name]); - $rules = array_merge($rules, $set); - } elseif (!$setValue) { - $rules[$name] = false; - } else { - $rules[$name] = $value; - } - } - - return $rules; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php deleted file mode 100644 index 156aed3a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetDescriptionInterface.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -/** - * @internal - */ -interface RuleSetDescriptionInterface -{ - public function getDescription(): string; - - public function getName(): string; - - /** - * Get all rules from rules set. - * - * @return array|bool> - */ - public function getRules(): array; - - public function isRisky(): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php deleted file mode 100644 index eb83b6b4..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -/** - * Set of rules to be used by fixer. - * - * Example of set: ["@PSR2" => true, "@PSR1" => false, "strict" => true]. - * - * @author Dariusz Rumiński - */ -interface RuleSetInterface -{ - /** - * @param array|bool> $set - */ - public function __construct(array $set = []); - - /** - * Get configuration for given rule. - * - * @return null|array - */ - public function getRuleConfiguration(string $rule): ?array; - - /** - * Get all rules from rules set. - * - * @return array|bool> - */ - public function getRules(): array; - - /** - * Check given rule is in rules set. - */ - public function hasRule(string $rule): bool; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php deleted file mode 100644 index 2b0969fd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/RuleSets.php +++ /dev/null @@ -1,70 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet; - -use Symfony\Component\Finder\Finder; - -/** - * Set of rule sets to be used by fixer. - * - * @internal - */ -final class RuleSets -{ - /** - * @var array - */ - private static $setDefinitions; - - /** - * @return array - */ - public static function getSetDefinitions(): array - { - if (null === self::$setDefinitions) { - self::$setDefinitions = []; - - foreach (Finder::create()->files()->in(__DIR__.'/Sets') as $file) { - $class = 'PhpCsFixer\RuleSet\Sets\\'.$file->getBasename('.php'); - $set = new $class(); - - self::$setDefinitions[$set->getName()] = $set; - } - - ksort(self::$setDefinitions); - } - - return self::$setDefinitions; - } - - /** - * @return string[] - */ - public static function getSetDefinitionNames(): array - { - return array_keys(self::getSetDefinitions()); - } - - public static function getSetDefinition(string $name): RuleSetDescriptionInterface - { - $definitions = self::getSetDefinitions(); - - if (!isset($definitions[$name])) { - throw new \InvalidArgumentException(sprintf('Set "%s" does not exist.', $name)); - } - - return $definitions[$name]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php deleted file mode 100644 index 53535465..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php +++ /dev/null @@ -1,42 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class DoctrineAnnotationSet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - 'doctrine_annotation_array_assignment' => [ - 'operator' => ':', - ], - 'doctrine_annotation_braces' => true, - 'doctrine_annotation_indentation' => true, - 'doctrine_annotation_spaces' => [ - 'before_array_assignments_colon' => false, - ], - ]; - } - - public function getDescription(): string - { - return 'Rules covering Doctrine annotations with configuration based on examples found in `Doctrine Annotation documentation `_ and `Symfony documentation `_.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php deleted file mode 100644 index 05d89b20..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - * - * Last updated to PER Coding Style v1.0.0. - */ -final class PERRiskySet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PSR12:risky' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PER Coding Style `_.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php deleted file mode 100644 index e5594032..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERSet.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - * - * Last updated to PER Coding Style v1.0.0. - */ -final class PERSet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PSR12' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PER Coding Style `_.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php deleted file mode 100644 index bb877922..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php +++ /dev/null @@ -1,30 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP54MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - 'array_syntax' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php deleted file mode 100644 index 848b3501..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP56MigrationRiskySet.php +++ /dev/null @@ -1,30 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP56MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - 'pow_to_exponentiation' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php deleted file mode 100644 index a7fcb211..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationRiskySet.php +++ /dev/null @@ -1,39 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP70MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP56Migration:risky' => true, - 'combine_nested_dirname' => true, - 'declare_strict_types' => true, - 'non_printable_character' => true, - 'random_api_migration' => [ - 'replacements' => [ - 'mt_rand' => 'random_int', - 'rand' => 'random_int', - ], - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php deleted file mode 100644 index 62b0ad99..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP70MigrationSet.php +++ /dev/null @@ -1,31 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP70MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP54Migration' => true, - 'ternary_to_null_coalescing' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php deleted file mode 100644 index 5a57f262..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationRiskySet.php +++ /dev/null @@ -1,31 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP71MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP70Migration:risky' => true, - 'void_return' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php deleted file mode 100644 index 9379628d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP71MigrationSet.php +++ /dev/null @@ -1,32 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP71MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP70Migration' => true, - 'list_syntax' => true, - 'visibility_required' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php deleted file mode 100644 index aa0ed8fb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP73MigrationSet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP73MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP71Migration' => true, - 'heredoc_indentation' => true, - 'method_argument_space' => ['after_heredoc' => true], - 'no_whitespace_before_comma_in_array' => ['after_heredoc' => true], - 'trailing_comma_in_multiline' => ['after_heredoc' => true], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php deleted file mode 100644 index 0a1bc17d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationRiskySet.php +++ /dev/null @@ -1,33 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP74MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP71Migration:risky' => true, - 'implode_call' => true, - 'no_alias_functions' => true, - 'use_arrow_functions' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php deleted file mode 100644 index 8af7296a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP74MigrationSet.php +++ /dev/null @@ -1,33 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP74MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP73Migration' => true, - 'assign_null_coalescing_to_coalesce_equal' => true, - 'normalize_index_brace' => true, - 'short_scalar_cast' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php deleted file mode 100644 index 4027b6ed..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php +++ /dev/null @@ -1,40 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP80MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP74Migration:risky' => true, - 'get_class_to_class_keyword' => true, - 'modernize_strpos' => true, - 'no_alias_functions' => [ - 'sets' => [ - '@all', - ], - ], - 'no_php4_constructor' => true, - 'no_unneeded_final_method' => true, // final private method (not constructor) are no longer allowed >= PHP8.0 - 'no_unreachable_default_argument_value' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php deleted file mode 100644 index 8b49a55c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php +++ /dev/null @@ -1,32 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP80MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP74Migration' => true, - 'clean_namespace' => true, - 'no_unset_cast' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php deleted file mode 100644 index eaa27e9d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php +++ /dev/null @@ -1,31 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP81MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP80Migration' => true, - 'octal_notation' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php deleted file mode 100644 index 6a9da7db..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php +++ /dev/null @@ -1,31 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHP82MigrationSet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHP81Migration' => true, - 'simple_to_complex_string_variable' => true, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php deleted file mode 100644 index 1cabfc04..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.php +++ /dev/null @@ -1,33 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit30MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - 'php_unit_dedicate_assert' => [ - 'target' => PhpUnitTargetVersion::VERSION_3_0, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php deleted file mode 100644 index fb4cbfb5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit32MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit32MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit30Migration:risky' => true, - 'php_unit_no_expectation_annotation' => [ - 'target' => PhpUnitTargetVersion::VERSION_3_2, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php deleted file mode 100644 index 6a52afac..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit35MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit32Migration:risky' => true, - 'php_unit_dedicate_assert' => [ - 'target' => PhpUnitTargetVersion::VERSION_3_5, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php deleted file mode 100644 index 13927970..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit43MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit43MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit35Migration:risky' => true, - 'php_unit_no_expectation_annotation' => [ - 'target' => PhpUnitTargetVersion::VERSION_4_3, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php deleted file mode 100644 index fcb1b57e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit48MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit48MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit43Migration:risky' => true, - 'php_unit_namespaced' => [ - 'target' => PhpUnitTargetVersion::VERSION_4_8, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php deleted file mode 100644 index 38474584..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit50MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit50MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit48Migration:risky' => true, - 'php_unit_dedicate_assert' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_0, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php deleted file mode 100644 index d0f71ee3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit52MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit52MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit50Migration:risky' => true, - 'php_unit_expectation' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_2, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php deleted file mode 100644 index b7c87922..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit54MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit54MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit52Migration:risky' => true, - 'php_unit_mock' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_4, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php deleted file mode 100644 index e3c1647d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit55MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit55MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit54Migration:risky' => true, - 'php_unit_mock' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_5, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php deleted file mode 100644 index a1038bf8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit56MigrationRiskySet.php +++ /dev/null @@ -1,37 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit56MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit55Migration:risky' => true, - 'php_unit_dedicate_assert' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_6, - ], - 'php_unit_expectation' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_6, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php deleted file mode 100644 index 84076e11..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit57MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit57MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit56Migration:risky' => true, - 'php_unit_namespaced' => [ - 'target' => PhpUnitTargetVersion::VERSION_5_7, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php deleted file mode 100644 index 6bc7f711..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit60MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit57Migration:risky' => true, - 'php_unit_namespaced' => [ - 'target' => PhpUnitTargetVersion::VERSION_6_0, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php deleted file mode 100644 index a7efa234..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php +++ /dev/null @@ -1,34 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit75MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit60Migration:risky' => true, - 'php_unit_dedicate_assert_internal_type' => [ - 'target' => PhpUnitTargetVersion::VERSION_7_5, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php deleted file mode 100644 index aaf5fc31..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\Fixer\PhpUnit\PhpUnitTargetVersion; -use PhpCsFixer\RuleSet\AbstractMigrationSetDescription; - -/** - * @internal - */ -final class PHPUnit84MigrationRiskySet extends AbstractMigrationSetDescription -{ - public function getRules(): array - { - return [ - '@PHPUnit60Migration:risky' => true, - '@PHPUnit75Migration:risky' => true, - 'php_unit_expectation' => [ - 'target' => PhpUnitTargetVersion::VERSION_8_4, - ], - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php deleted file mode 100644 index 84fd3efa..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php +++ /dev/null @@ -1,36 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PSR12RiskySet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - 'no_trailing_whitespace_in_string' => true, - 'no_unreachable_default_argument_value' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PSR-12 `_ standard.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php deleted file mode 100644 index b7b87581..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php +++ /dev/null @@ -1,72 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PSR12Set extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PSR2' => true, - 'blank_line_after_opening_tag' => true, - 'blank_line_between_import_groups' => true, - 'braces' => [ - 'allow_single_line_anonymous_class_with_empty_body' => true, - ], - 'class_definition' => [ - 'inline_constructor_arguments' => false, // handled by method_argument_space fixer - 'space_before_parenthesis' => true, // defined in PSR12 ¶8. Anonymous Classes - ], - 'compact_nullable_typehint' => true, - 'declare_equal_normalize' => true, - 'lowercase_cast' => true, - 'lowercase_static_reference' => true, - 'new_with_braces' => true, - 'no_blank_lines_after_class_opening' => true, - 'no_leading_import_slash' => true, - 'no_whitespace_in_blank_line' => true, - 'ordered_class_elements' => [ - 'order' => [ - 'use_trait', - ], - ], - 'ordered_imports' => [ - 'imports_order' => [ - 'class', - 'function', - 'const', - ], - 'sort_algorithm' => 'none', - ], - 'return_type_declaration' => true, - 'short_scalar_cast' => true, - 'single_blank_line_before_namespace' => true, - 'single_import_per_statement' => ['group_to_single_imports' => false], - 'single_trait_insert_per_statement' => true, - 'ternary_operator_spaces' => true, - 'visibility_required' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PSR-12 `_ standard.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php deleted file mode 100644 index 3c82ea56..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php +++ /dev/null @@ -1,36 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PSR1Set extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - 'encoding' => true, - 'full_opening_tag' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PSR-1 `_ standard.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php deleted file mode 100644 index b9489eea..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR2Set.php +++ /dev/null @@ -1,65 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PSR2Set extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PSR1' => true, - 'blank_line_after_namespace' => true, - 'braces' => true, - 'class_definition' => true, - 'constant_case' => true, - 'elseif' => true, - 'function_declaration' => true, - 'indentation_type' => true, - 'line_ending' => true, - 'lowercase_keywords' => true, - 'method_argument_space' => [ - 'on_multiline' => 'ensure_fully_multiline', - ], - 'no_break_comment' => true, - 'no_closing_tag' => true, - 'no_space_around_double_colon' => true, - 'no_spaces_after_function_name' => true, - 'no_spaces_inside_parenthesis' => true, - 'no_trailing_whitespace' => true, - 'no_trailing_whitespace_in_comment' => true, - 'single_blank_line_at_eof' => true, - 'single_class_element_per_statement' => [ - 'elements' => [ - 'property', - ], - ], - 'single_import_per_statement' => true, - 'single_line_after_imports' => true, - 'switch_case_semicolon_to_colon' => true, - 'switch_case_space' => true, - 'visibility_required' => ['elements' => ['method', 'property']], - ]; - } - - public function getDescription(): string - { - return 'Rules that follow `PSR-2 `_ standard.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php deleted file mode 100644 index 8a7dfaac..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerRiskySet.php +++ /dev/null @@ -1,61 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PhpCsFixerRiskySet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PER:risky' => true, - '@Symfony:risky' => true, - 'comment_to_phpdoc' => true, - 'final_internal_class' => true, - // @TODO: consider switching to `true`, like in @Symfony - 'native_constant_invocation' => [ - 'fix_built_in' => false, - 'include' => [ - 'DIRECTORY_SEPARATOR', - 'PHP_INT_SIZE', - 'PHP_SAPI', - 'PHP_VERSION_ID', - ], - 'scope' => 'namespaced', - 'strict' => true, - ], - 'no_alias_functions' => [ - 'sets' => [ - '@all', - ], - ], - 'no_unreachable_default_argument_value' => true, - 'no_unset_on_property' => true, - 'php_unit_strict' => true, - 'php_unit_test_case_static_method_calls' => true, - 'strict_comparison' => true, - 'strict_param' => true, - ]; - } - - public function getDescription(): string - { - return 'Rule set as used by the PHP-CS-Fixer development team, highly opinionated.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php deleted file mode 100644 index 3b31a08c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php +++ /dev/null @@ -1,125 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class PhpCsFixerSet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PER' => true, - '@Symfony' => true, - 'align_multiline_comment' => true, - 'array_indentation' => true, - 'blank_line_before_statement' => [ - 'statements' => [ - 'break', - 'case', - 'continue', - 'declare', - 'default', - 'exit', - 'goto', - 'include', - 'include_once', - 'phpdoc', - 'require', - 'require_once', - 'return', - 'switch', - 'throw', - 'try', - 'yield', - 'yield_from', - ], - ], - 'combine_consecutive_issets' => true, - 'combine_consecutive_unsets' => true, - 'empty_loop_body' => true, - 'escape_implicit_backslashes' => true, - 'explicit_indirect_variable' => true, - 'explicit_string_variable' => true, - 'heredoc_to_nowdoc' => true, - 'method_argument_space' => [ - 'on_multiline' => 'ensure_fully_multiline', - ], - 'method_chaining_indentation' => true, - 'multiline_comment_opening_closing' => true, - 'multiline_whitespace_before_semicolons' => [ - 'strategy' => 'new_line_for_chained_calls', - ], - 'no_extra_blank_lines' => [ - 'tokens' => [ - 'attribute', - 'break', - 'case', - 'continue', - 'curly_brace_block', - 'default', - 'extra', - 'parenthesis_brace_block', - 'return', - 'square_brace_block', - 'switch', - 'throw', - 'use', - ], - ], - 'no_null_property_initialization' => true, - 'no_superfluous_elseif' => true, - 'no_unneeded_control_parentheses' => [ - 'statements' => [ - 'break', - 'clone', - 'continue', - 'echo_print', - 'negative_instanceof', - 'others', - 'return', - 'switch_case', - 'yield', - 'yield_from', - ], - ], - 'no_useless_else' => true, - 'no_useless_return' => true, - 'operator_linebreak' => [ - 'only_booleans' => true, - ], - 'ordered_class_elements' => true, - 'php_unit_internal_class' => true, - 'php_unit_test_class_requires_covers' => true, - 'phpdoc_add_missing_param_annotation' => true, - 'phpdoc_no_empty_return' => true, - 'phpdoc_order_by_value' => true, - 'phpdoc_types_order' => true, - 'phpdoc_var_annotation_correct_order' => true, - 'return_assignment' => true, - 'single_line_comment_style' => true, - 'single_line_throw' => false, - 'whitespace_after_comma_in_array' => ['ensure_single_space' => true], - ]; - } - - public function getDescription(): string - { - return 'Rule set as used by the PHP-CS-Fixer development team, highly opinionated.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php deleted file mode 100644 index e07ae342..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php +++ /dev/null @@ -1,76 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class SymfonyRiskySet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PHP56Migration:risky' => true, - '@PSR12:risky' => true, - 'array_push' => true, - 'combine_nested_dirname' => true, - 'dir_constant' => true, - 'ereg_to_preg' => true, - 'error_suppression' => true, - 'fopen_flag_order' => true, - 'fopen_flags' => [ - 'b_mode' => false, - ], - 'function_to_constant' => true, - 'implode_call' => true, - 'is_null' => true, - 'logical_operators' => true, - 'modernize_types_casting' => true, - 'native_constant_invocation' => true, - 'native_function_invocation' => [ - 'include' => [ - '@compiler_optimized', - ], - 'scope' => 'namespaced', - 'strict' => true, - ], - 'no_alias_functions' => true, - 'no_homoglyph_names' => true, - 'no_php4_constructor' => true, - 'no_unneeded_final_method' => true, - 'no_unreachable_default_argument_value' => false, - 'no_useless_sprintf' => true, - 'non_printable_character' => true, - 'ordered_traits' => true, - 'php_unit_construct' => true, - 'php_unit_mock_short_will_return' => true, - 'php_unit_set_up_tear_down_visibility' => true, - 'php_unit_test_annotation' => true, - 'psr_autoloading' => true, - 'self_accessor' => true, - 'set_type_to_cast' => true, - 'string_length_to_empty' => true, - 'string_line_ending' => true, - 'ternary_to_elvis_operator' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow the official `Symfony Coding Standards `_.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php b/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php deleted file mode 100644 index 02d4d6fb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php +++ /dev/null @@ -1,270 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\RuleSet\Sets; - -use PhpCsFixer\RuleSet\AbstractRuleSetDescription; - -/** - * @internal - */ -final class SymfonySet extends AbstractRuleSetDescription -{ - public function getRules(): array - { - return [ - '@PSR12' => true, - 'array_syntax' => true, - 'backtick_to_shell_exec' => true, - 'binary_operator_spaces' => true, - 'blank_line_before_statement' => [ - 'statements' => [ - 'return', - ], - ], - 'braces' => [ - 'allow_single_line_anonymous_class_with_empty_body' => true, - 'allow_single_line_closure' => true, - ], - 'cast_spaces' => true, - 'class_attributes_separation' => [ - 'elements' => [ - 'method' => 'one', - ], - ], - 'class_definition' => [ - 'single_line' => true, - ], - 'class_reference_name_casing' => true, - 'clean_namespace' => true, - 'concat_space' => true, - 'echo_tag_syntax' => true, - 'empty_loop_body' => ['style' => 'braces'], - 'empty_loop_condition' => true, - 'fully_qualified_strict_types' => true, - 'function_typehint_space' => true, - 'general_phpdoc_tag_rename' => [ - 'replacements' => [ - 'inheritDocs' => 'inheritDoc', - ], - ], - 'global_namespace_import' => [ - 'import_classes' => false, - 'import_constants' => false, - 'import_functions' => false, - ], - 'include' => true, - 'increment_style' => true, - 'integer_literal_case' => true, - 'lambda_not_used_import' => true, - 'linebreak_after_opening_tag' => true, - 'magic_constant_casing' => true, - 'magic_method_casing' => true, - 'method_argument_space' => [ - 'on_multiline' => 'ignore', - ], - 'native_function_casing' => true, - 'native_function_type_declaration_casing' => true, - 'no_alias_language_construct_call' => true, - 'no_alternative_syntax' => true, - 'no_binary_string' => true, - 'no_blank_lines_after_phpdoc' => true, - 'no_empty_comment' => true, - 'no_empty_phpdoc' => true, - 'no_empty_statement' => true, - 'no_extra_blank_lines' => [ - 'tokens' => [ - 'attribute', - 'case', - 'continue', - 'curly_brace_block', - 'default', - 'extra', - 'parenthesis_brace_block', - 'square_brace_block', - 'switch', - 'throw', - 'use', - ], - ], - 'no_leading_namespace_whitespace' => true, - 'no_mixed_echo_print' => true, - 'no_multiline_whitespace_around_double_arrow' => true, - 'no_short_bool_cast' => true, - 'no_singleline_whitespace_before_semicolons' => true, - 'no_spaces_around_offset' => true, - 'no_superfluous_phpdoc_tags' => [ - 'allow_mixed' => true, - 'allow_unused_params' => true, - ], - 'no_trailing_comma_in_singleline' => true, - 'no_unneeded_control_parentheses' => [ - 'statements' => [ - 'break', - 'clone', - 'continue', - 'echo_print', - 'others', - 'return', - 'switch_case', - 'yield', - 'yield_from', - ], - ], - 'no_unneeded_curly_braces' => [ - 'namespaces' => true, - ], - 'no_unneeded_import_alias' => true, - 'no_unset_cast' => true, - 'no_unused_imports' => true, - 'no_useless_concat_operator' => true, - 'no_useless_nullsafe_operator' => true, - 'no_whitespace_before_comma_in_array' => true, - 'normalize_index_brace' => true, - 'object_operator_without_whitespace' => true, - 'ordered_imports' => true, - 'php_unit_fqcn_annotation' => true, - 'php_unit_method_casing' => true, - 'phpdoc_align' => true, - 'phpdoc_annotation_without_dot' => true, - 'phpdoc_indent' => true, - 'phpdoc_inline_tag_normalizer' => true, - 'phpdoc_no_access' => true, - 'phpdoc_no_alias_tag' => true, - 'phpdoc_no_package' => true, - 'phpdoc_no_useless_inheritdoc' => true, - 'phpdoc_order' => [ - 'order' => [ - 'param', - 'return', - 'throws', - ], - ], - 'phpdoc_return_self_reference' => true, - 'phpdoc_scalar' => true, - 'phpdoc_separation' => true, - 'phpdoc_single_line_var_spacing' => true, - 'phpdoc_summary' => true, - 'phpdoc_tag_type' => [ - 'tags' => [ - 'inheritDoc' => 'inline', - ], - ], - 'phpdoc_to_comment' => true, - 'phpdoc_trim' => true, - 'phpdoc_trim_consecutive_blank_line_separation' => true, - 'phpdoc_types' => true, - 'phpdoc_types_order' => [ - 'null_adjustment' => 'always_last', - 'sort_algorithm' => 'none', - ], - 'phpdoc_var_without_name' => true, - 'protected_to_private' => true, - 'semicolon_after_instruction' => true, - 'simple_to_complex_string_variable' => true, - 'single_class_element_per_statement' => true, - 'single_import_per_statement' => true, - 'single_line_comment_spacing' => true, - 'single_line_comment_style' => [ - 'comment_types' => [ - 'hash', - ], - ], - 'single_line_throw' => true, - 'single_quote' => true, - 'single_space_after_construct' => [ - 'constructs' => [ - 'abstract', - 'as', - 'attribute', - 'break', - 'case', - 'catch', - 'class', - 'clone', - 'comment', - 'const', - 'const_import', - 'continue', - 'do', - 'echo', - 'else', - 'elseif', - 'enum', - 'extends', - 'final', - 'finally', - 'for', - 'foreach', - 'function', - 'function_import', - 'global', - 'goto', - 'if', - 'implements', - 'include', - 'include_once', - 'instanceof', - 'insteadof', - 'interface', - 'match', - 'named_argument', - 'namespace', - 'new', - 'open_tag_with_echo', - 'php_doc', - 'php_open', - 'print', - 'private', - 'protected', - 'public', - 'readonly', - 'require', - 'require_once', - 'return', - 'static', - 'switch', - 'throw', - 'trait', - 'try', - 'type_colon', - 'use', - 'use_lambda', - 'use_trait', - 'var', - 'while', - 'yield', - 'yield_from', - ], - ], - 'space_after_semicolon' => [ - 'remove_in_empty_for_expressions' => true, - ], - 'standardize_increment' => true, - 'standardize_not_equals' => true, - 'switch_continue_to_break' => true, - 'trailing_comma_in_multiline' => true, - 'trim_array_spaces' => true, - 'types_spaces' => true, - 'unary_operator_spaces' => true, - 'whitespace_after_comma_in_array' => true, - 'yoda_style' => true, - ]; - } - - public function getDescription(): string - { - return 'Rules that follow the official `Symfony Coding Standards `_.'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php deleted file mode 100644 index c07dbbd2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingIterator.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Runner; - -use PhpCsFixer\Linter\LinterInterface; -use PhpCsFixer\Linter\LintingResultInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - * - * @extends \CachingIterator> - */ -final class FileCachingLintingIterator extends \CachingIterator -{ - private LinterInterface $linter; - - /** - * @var LintingResultInterface - */ - private $currentResult; - - /** - * @var LintingResultInterface - */ - private $nextResult; - - /** - * @param \Iterator $iterator - */ - public function __construct(\Iterator $iterator, LinterInterface $linter) - { - parent::__construct($iterator); - - $this->linter = $linter; - } - - public function currentLintingResult(): LintingResultInterface - { - return $this->currentResult; - } - - public function next(): void - { - parent::next(); - - $this->currentResult = $this->nextResult; - - if ($this->hasNext()) { - $this->nextResult = $this->handleItem($this->getInnerIterator()->current()); - } - } - - public function rewind(): void - { - parent::rewind(); - - if ($this->valid()) { - $this->currentResult = $this->handleItem($this->current()); - } - - if ($this->hasNext()) { - $this->nextResult = $this->handleItem($this->getInnerIterator()->current()); - } - } - - private function handleItem(\SplFileInfo $file): LintingResultInterface - { - return $this->linter->lintFile($file->getRealPath()); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php deleted file mode 100644 index c0f736fd..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php +++ /dev/null @@ -1,111 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Runner; - -use PhpCsFixer\Cache\CacheManagerInterface; -use PhpCsFixer\FileReader; -use PhpCsFixer\FixerFileProcessedEvent; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Contracts\EventDispatcher\Event; - -/** - * @author Dariusz Rumiński - * - * @internal - * - * @extends \FilterIterator> - */ -final class FileFilterIterator extends \FilterIterator -{ - private ?EventDispatcherInterface $eventDispatcher; - - private CacheManagerInterface $cacheManager; - - /** - * @var array - */ - private array $visitedElements = []; - - /** - * @param \Traversable<\SplFileInfo> $iterator - */ - public function __construct( - \Traversable $iterator, - ?EventDispatcherInterface $eventDispatcher, - CacheManagerInterface $cacheManager - ) { - if (!$iterator instanceof \Iterator) { - $iterator = new \IteratorIterator($iterator); - } - - parent::__construct($iterator); - - $this->eventDispatcher = $eventDispatcher; - $this->cacheManager = $cacheManager; - } - - public function accept(): bool - { - $file = $this->current(); - if (!$file instanceof \SplFileInfo) { - throw new \RuntimeException( - sprintf( - 'Expected instance of "\SplFileInfo", got "%s".', - get_debug_type($file) - ) - ); - } - - $path = $file->isLink() ? $file->getPathname() : $file->getRealPath(); - - if (isset($this->visitedElements[$path])) { - return false; - } - - $this->visitedElements[$path] = true; - - if (!$file->isFile() || $file->isLink()) { - return false; - } - - $content = FileReader::createSingleton()->read($path); - - // mark as skipped: - if ( - // empty file - '' === $content - // file that does not need fixing due to cache - || !$this->cacheManager->needFixing($file->getPathname(), $content) - ) { - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent(FixerFileProcessedEvent::STATUS_SKIPPED) - ); - - return false; - } - - return true; - } - - private function dispatchEvent(string $name, Event $event): void - { - if (null === $this->eventDispatcher) { - return; - } - - $this->eventDispatcher->dispatch($event, $name); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php b/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php deleted file mode 100644 index 09f5913e..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/FileLintingIterator.php +++ /dev/null @@ -1,69 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Runner; - -use PhpCsFixer\Linter\LinterInterface; -use PhpCsFixer\Linter\LintingResultInterface; - -/** - * @author Dariusz Rumiński - * - * @internal - * - * @extends \IteratorIterator> - */ -final class FileLintingIterator extends \IteratorIterator -{ - /** - * @var LintingResultInterface - */ - private $currentResult; - - private LinterInterface $linter; - - /** - * @param \Iterator $iterator - */ - public function __construct(\Iterator $iterator, LinterInterface $linter) - { - parent::__construct($iterator); - - $this->linter = $linter; - } - - public function currentLintingResult(): ?LintingResultInterface - { - return $this->currentResult; - } - - public function next(): void - { - parent::next(); - - $this->currentResult = $this->valid() ? $this->handleItem($this->current()) : null; - } - - public function rewind(): void - { - parent::rewind(); - - $this->currentResult = $this->valid() ? $this->handleItem($this->current()) : null; - } - - private function handleItem(\SplFileInfo $file): LintingResultInterface - { - return $this->linter->lintFile($file->getRealPath()); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/Runner.php b/old_vendor/friendsofphp/php-cs-fixer/src/Runner/Runner.php deleted file mode 100644 index b8133c94..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Runner/Runner.php +++ /dev/null @@ -1,300 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Runner; - -use PhpCsFixer\AbstractFixer; -use PhpCsFixer\Cache\CacheManagerInterface; -use PhpCsFixer\Cache\Directory; -use PhpCsFixer\Cache\DirectoryInterface; -use PhpCsFixer\Differ\DifferInterface; -use PhpCsFixer\Error\Error; -use PhpCsFixer\Error\ErrorsManager; -use PhpCsFixer\FileReader; -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\FixerFileProcessedEvent; -use PhpCsFixer\Linter\LinterInterface; -use PhpCsFixer\Linter\LintingException; -use PhpCsFixer\Linter\LintingResultInterface; -use PhpCsFixer\Tokenizer\Tokens; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Filesystem\Exception\IOException; -use Symfony\Contracts\EventDispatcher\Event; - -/** - * @author Dariusz Rumiński - */ -final class Runner -{ - private DifferInterface $differ; - - private ?DirectoryInterface $directory; - - private ?EventDispatcherInterface $eventDispatcher; - - private ErrorsManager $errorsManager; - - private CacheManagerInterface $cacheManager; - - private bool $isDryRun; - - private LinterInterface $linter; - - /** - * @var \Traversable<\SplFileInfo> - */ - private $finder; - - /** - * @var list - */ - private array $fixers; - - private bool $stopOnViolation; - - /** - * @param \Traversable<\SplFileInfo> $finder - * @param list $fixers - */ - public function __construct( - \Traversable $finder, - array $fixers, - DifferInterface $differ, - ?EventDispatcherInterface $eventDispatcher, - ErrorsManager $errorsManager, - LinterInterface $linter, - bool $isDryRun, - CacheManagerInterface $cacheManager, - ?DirectoryInterface $directory = null, - bool $stopOnViolation = false - ) { - $this->finder = $finder; - $this->fixers = $fixers; - $this->differ = $differ; - $this->eventDispatcher = $eventDispatcher; - $this->errorsManager = $errorsManager; - $this->linter = $linter; - $this->isDryRun = $isDryRun; - $this->cacheManager = $cacheManager; - $this->directory = $directory ?: new Directory(''); - $this->stopOnViolation = $stopOnViolation; - } - - /** - * @return array, diff: string}> - */ - public function fix(): array - { - $changed = []; - - $finder = $this->finder; - $finderIterator = $finder instanceof \IteratorAggregate ? $finder->getIterator() : $finder; - $fileFilteredFileIterator = new FileFilterIterator( - $finderIterator, - $this->eventDispatcher, - $this->cacheManager - ); - - $collection = $this->linter->isAsync() - ? new FileCachingLintingIterator($fileFilteredFileIterator, $this->linter) - : new FileLintingIterator($fileFilteredFileIterator, $this->linter); - - foreach ($collection as $file) { - $fixInfo = $this->fixFile($file, $collection->currentLintingResult()); - - // we do not need Tokens to still caching just fixed file - so clear the cache - Tokens::clearCache(); - - if (null !== $fixInfo) { - $name = $this->directory->getRelativePathTo($file->__toString()); - $changed[$name] = $fixInfo; - - if ($this->stopOnViolation) { - break; - } - } - } - - return $changed; - } - - /** - * @return null|array{appliedFixers: list, diff: string} - */ - private function fixFile(\SplFileInfo $file, LintingResultInterface $lintingResult): ?array - { - $name = $file->getPathname(); - - try { - $lintingResult->check(); - } catch (LintingException $e) { - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent(FixerFileProcessedEvent::STATUS_INVALID) - ); - - $this->errorsManager->report(new Error(Error::TYPE_INVALID, $name, $e)); - - return null; - } - - $old = FileReader::createSingleton()->read($file->getRealPath()); - - $tokens = Tokens::fromCode($old); - $oldHash = $tokens->getCodeHash(); - - $newHash = $oldHash; - $new = $old; - - $appliedFixers = []; - - try { - foreach ($this->fixers as $fixer) { - // for custom fixers we don't know is it safe to run `->fix()` without checking `->supports()` and `->isCandidate()`, - // thus we need to check it and conditionally skip fixing - if ( - !$fixer instanceof AbstractFixer - && (!$fixer->supports($file) || !$fixer->isCandidate($tokens)) - ) { - continue; - } - - $fixer->fix($file, $tokens); - - if ($tokens->isChanged()) { - $tokens->clearEmptyTokens(); - $tokens->clearChanged(); - $appliedFixers[] = $fixer->getName(); - } - } - } catch (\ParseError $e) { - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent(FixerFileProcessedEvent::STATUS_LINT) - ); - - $this->errorsManager->report(new Error(Error::TYPE_LINT, $name, $e)); - - return null; - } catch (\Throwable $e) { - $this->processException($name, $e); - - return null; - } - - $fixInfo = null; - - if (!empty($appliedFixers)) { - $new = $tokens->generateCode(); - $newHash = $tokens->getCodeHash(); - } - - // We need to check if content was changed and then applied changes. - // But we can't simply check $appliedFixers, because one fixer may revert - // work of other and both of them will mark collection as changed. - // Therefore we need to check if code hashes changed. - if ($oldHash !== $newHash) { - $fixInfo = [ - 'appliedFixers' => $appliedFixers, - 'diff' => $this->differ->diff($old, $new, $file), - ]; - - try { - $this->linter->lintSource($new)->check(); - } catch (LintingException $e) { - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent(FixerFileProcessedEvent::STATUS_LINT) - ); - - $this->errorsManager->report(new Error(Error::TYPE_LINT, $name, $e, $fixInfo['appliedFixers'], $fixInfo['diff'])); - - return null; - } - - if (!$this->isDryRun) { - $fileName = $file->getRealPath(); - - if (!file_exists($fileName)) { - throw new IOException( - sprintf('Failed to write file "%s" (no longer) exists.', $file->getPathname()), - 0, - null, - $file->getPathname() - ); - } - - if (is_dir($fileName)) { - throw new IOException( - sprintf('Cannot write file "%s" as the location exists as directory.', $fileName), - 0, - null, - $fileName - ); - } - - if (!is_writable($fileName)) { - throw new IOException( - sprintf('Cannot write to file "%s" as it is not writable.', $fileName), - 0, - null, - $fileName - ); - } - - if (false === @file_put_contents($fileName, $new)) { - $error = error_get_last(); - - throw new IOException( - sprintf('Failed to write file "%s", "%s".', $fileName, $error ? $error['message'] : 'no reason available'), - 0, - null, - $fileName - ); - } - } - } - - $this->cacheManager->setFile($name, $new); - - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent($fixInfo ? FixerFileProcessedEvent::STATUS_FIXED : FixerFileProcessedEvent::STATUS_NO_CHANGES) - ); - - return $fixInfo; - } - - /** - * Process an exception that occurred. - */ - private function processException(string $name, \Throwable $e): void - { - $this->dispatchEvent( - FixerFileProcessedEvent::NAME, - new FixerFileProcessedEvent(FixerFileProcessedEvent::STATUS_EXCEPTION) - ); - - $this->errorsManager->report(new Error(Error::TYPE_EXCEPTION, $name, $e)); - } - - private function dispatchEvent(string $name, Event $event): void - { - if (null === $this->eventDispatcher) { - return; - } - - $this->eventDispatcher->dispatch($event, $name); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/StdinFileInfo.php b/old_vendor/friendsofphp/php-cs-fixer/src/StdinFileInfo.php deleted file mode 100644 index bbb66acf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/StdinFileInfo.php +++ /dev/null @@ -1,174 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @author Davi Koscianski Vidal - * - * @internal - */ -final class StdinFileInfo extends \SplFileInfo -{ - public function __construct() - { - } - - public function __toString(): string - { - return $this->getRealPath(); - } - - public function getRealPath(): string - { - // So file_get_contents & friends will work. - // Warning - this stream is not seekable, so `file_get_contents` will work only once! Consider using `FileReader`. - return 'php://stdin'; - } - - public function getATime(): int - { - return 0; - } - - public function getBasename($suffix = null): string - { - return $this->getFilename(); - } - - public function getCTime(): int - { - return 0; - } - - public function getExtension(): string - { - return '.php'; - } - - public function getFileInfo($className = null): \SplFileInfo - { - throw new \BadMethodCallException(sprintf('Method "%s" is not implemented.', __METHOD__)); - } - - public function getFilename(): string - { - /* - * Useful so fixers depending on PHP-only files still work. - * - * The idea to use STDIN is to parse PHP-only files, so we can - * assume that there will be always a PHP file out there. - */ - - return 'stdin.php'; - } - - public function getGroup(): int - { - return 0; - } - - public function getInode(): int - { - return 0; - } - - public function getLinkTarget(): string - { - return ''; - } - - public function getMTime(): int - { - return 0; - } - - public function getOwner(): int - { - return 0; - } - - public function getPath(): string - { - return ''; - } - - public function getPathInfo($className = null): \SplFileInfo - { - throw new \BadMethodCallException(sprintf('Method "%s" is not implemented.', __METHOD__)); - } - - public function getPathname(): string - { - return $this->getFilename(); - } - - public function getPerms(): int - { - return 0; - } - - public function getSize(): int - { - return 0; - } - - public function getType(): string - { - return 'file'; - } - - public function isDir(): bool - { - return false; - } - - public function isExecutable(): bool - { - return false; - } - - public function isFile(): bool - { - return true; - } - - public function isLink(): bool - { - return false; - } - - public function isReadable(): bool - { - return true; - } - - public function isWritable(): bool - { - return false; - } - - public function openFile($openMode = 'r', $useIncludePath = false, $context = null): \SplFileObject - { - throw new \BadMethodCallException(sprintf('Method "%s" is not implemented.', __METHOD__)); - } - - public function setFileClass($className = null): void - { - } - - public function setInfoClass($className = null): void - { - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php deleted file mode 100644 index 8b0fae82..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTransformer.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -use PhpCsFixer\Utils; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -abstract class AbstractTransformer implements TransformerInterface -{ - /** - * {@inheritdoc} - */ - public function getName(): string - { - $nameParts = explode('\\', static::class); - $name = substr(end($nameParts), 0, -\strlen('Transformer')); - - return Utils::camelCaseToUnderscore($name); - } - - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - return 0; - } - - /** - * {@inheritdoc} - */ - abstract public function getCustomTokens(): array; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php deleted file mode 100644 index 400ed941..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/AbstractTypeTransformer.php +++ /dev/null @@ -1,96 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -abstract class AbstractTypeTransformer extends AbstractTransformer -{ - /** - * @param array{0: int, 1?: string}|string $originalToken - */ - protected function doProcess(Tokens $tokens, int $index, $originalToken): void - { - if (!$tokens[$index]->equals($originalToken)) { - return; - } - - $prevIndex = $this->getPreviousTokenCandidate($tokens, $index); - - /** @var Token $prevToken */ - $prevToken = $tokens[$prevIndex]; - - if ($prevToken->isGivenKind([ - CT::T_TYPE_COLON, // `:` is part of a function return type `foo(): X|Y` - CT::T_TYPE_ALTERNATION, // `|` is part of a union (chain) `X|Y` - CT::T_TYPE_INTERSECTION, - T_STATIC, T_VAR, T_PUBLIC, T_PROTECTED, T_PRIVATE, // `var X|Y $a;`, `private X|Y $a` or `public static X|Y $a` - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, // promoted properties - ])) { - $this->replaceToken($tokens, $index); - - return; - } - - if (\defined('T_READONLY') && $prevToken->isGivenKind(T_READONLY)) { // @TODO: drop condition when PHP 8.1+ is required - $this->replaceToken($tokens, $index); - - return; - } - - if (!$prevToken->equalsAny(['(', ','])) { - return; - } - - $prevPrevTokenIndex = $tokens->getPrevMeaningfulToken($prevIndex); - - if ($tokens[$prevPrevTokenIndex]->isGivenKind(T_CATCH)) { - $this->replaceToken($tokens, $index); - - return; - } - - $functionKinds = [[T_FUNCTION], [T_FN]]; - $functionIndex = $tokens->getPrevTokenOfKind($prevIndex, $functionKinds); - - if (null === $functionIndex) { - return; - } - - $braceOpenIndex = $tokens->getNextTokenOfKind($functionIndex, ['(']); - $braceCloseIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $braceOpenIndex); - - if ($braceCloseIndex < $index) { - return; - } - - $this->replaceToken($tokens, $index); - } - - abstract protected function replaceToken(Tokens $tokens, int $index): void; - - private function getPreviousTokenCandidate(Tokens $tokens, int $index): int - { - $candidateIndex = $tokens->getTokenNotOfKindsSibling($index, -1, [T_CALLABLE, T_NS_SEPARATOR, T_STRING, CT::T_ARRAY_TYPEHINT, T_WHITESPACE, T_COMMENT, T_DOC_COMMENT]); - - return $tokens[$candidateIndex]->isGivenKind(CT::T_ATTRIBUTE_CLOSE) - ? $this->getPreviousTokenCandidate($tokens, $tokens->getPrevTokenOfKind($index, [[T_ATTRIBUTE]])) - : $candidateIndex - ; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php deleted file mode 100644 index 723d4c95..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AlternativeSyntaxAnalyzer.php +++ /dev/null @@ -1,116 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - * - * @TODO 4.0 remove this analyzer and move this logic into a transformer - */ -final class AlternativeSyntaxAnalyzer -{ - private const ALTERNATIVE_SYNTAX_BLOCK_EDGES = [ - T_IF => [T_ENDIF, T_ELSE, T_ELSEIF], - T_ELSE => [T_ENDIF], - T_ELSEIF => [T_ENDIF, T_ELSE, T_ELSEIF], - T_FOR => [T_ENDFOR], - T_FOREACH => [T_ENDFOREACH], - T_WHILE => [T_ENDWHILE], - T_SWITCH => [T_ENDSWITCH], - ]; - - public function belongsToAlternativeSyntax(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->equals(':')) { - return false; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->isGivenKind(T_ELSE)) { - return true; - } - - if (!$tokens[$prevIndex]->equals(')')) { - return false; - } - - $openParenthesisIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $prevIndex); - $beforeOpenParenthesisIndex = $tokens->getPrevMeaningfulToken($openParenthesisIndex); - - return $tokens[$beforeOpenParenthesisIndex]->isGivenKind([ - T_DECLARE, - T_ELSEIF, - T_FOR, - T_FOREACH, - T_IF, - T_SWITCH, - T_WHILE, - ]); - } - - public function findAlternativeSyntaxBlockEnd(Tokens $tokens, int $index): int - { - if (!isset($tokens[$index])) { - throw new \InvalidArgumentException("There is no token at index {$index}."); - } - - if (!$this->isStartOfAlternativeSyntaxBlock($tokens, $index)) { - throw new \InvalidArgumentException("Token at index {$index} is not the start of an alternative syntax block."); - } - - $startTokenKind = $tokens[$index]->getId(); - $endTokenKinds = self::ALTERNATIVE_SYNTAX_BLOCK_EDGES[$startTokenKind]; - - $findKinds = [[$startTokenKind]]; - foreach ($endTokenKinds as $endTokenKind) { - $findKinds[] = [$endTokenKind]; - } - - while (true) { - $index = $tokens->getNextTokenOfKind($index, $findKinds); - - if ($tokens[$index]->isGivenKind($endTokenKinds)) { - return $index; - } - - if ($this->isStartOfAlternativeSyntaxBlock($tokens, $index)) { - $index = $this->findAlternativeSyntaxBlockEnd($tokens, $index); - } - } - } - - private function isStartOfAlternativeSyntaxBlock(Tokens $tokens, int $index): bool - { - $map = self::ALTERNATIVE_SYNTAX_BLOCK_EDGES; - $startTokenKind = $tokens[$index]->getId(); - - if (null === $startTokenKind || !isset($map[$startTokenKind])) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$index]->equals('(')) { - $index = $tokens->getNextMeaningfulToken( - $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index) - ); - } - - return $tokens[$index]->equals(':'); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php deleted file mode 100644 index a2bc675f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -abstract class AbstractControlCaseStructuresAnalysis -{ - private int $index; - - private int $open; - - private int $close; - - public function __construct(int $index, int $open, int $close) - { - $this->index = $index; - $this->open = $open; - $this->close = $close; - } - - public function getIndex(): int - { - return $this->index; - } - - public function getOpenIndex(): int - { - return $this->open; - } - - public function getCloseIndex(): int - { - return $this->close; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php deleted file mode 100644 index b5c3030a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/ArgumentAnalysis.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class ArgumentAnalysis -{ - /** - * The name of the argument. - */ - private string $name; - - /** - * The index where the name is located in the supplied Tokens object. - */ - private int $nameIndex; - - /** - * The default value of the argument. - */ - private ?string $default; - - /** - * The type analysis of the argument. - */ - private ?TypeAnalysis $typeAnalysis; - - public function __construct(string $name, int $nameIndex, ?string $default, ?TypeAnalysis $typeAnalysis = null) - { - $this->name = $name; - $this->nameIndex = $nameIndex; - $this->default = $default ?: null; - $this->typeAnalysis = $typeAnalysis ?: null; - } - - public function getDefault(): ?string - { - return $this->default; - } - - public function hasDefault(): bool - { - return null !== $this->default; - } - - public function getName(): string - { - return $this->name; - } - - public function getNameIndex(): int - { - return $this->nameIndex; - } - - public function getTypeAnalysis(): ?TypeAnalysis - { - return $this->typeAnalysis; - } - - public function hasTypeAnalysis(): bool - { - return null !== $this->typeAnalysis; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php deleted file mode 100644 index df8c0dc3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php +++ /dev/null @@ -1,43 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @author Kuba Werłos - * - * @internal - */ -final class CaseAnalysis -{ - private int $index; - - private int $colonIndex; - - public function __construct(int $index, int $colonIndex) - { - $this->index = $index; - $this->colonIndex = $colonIndex; - } - - public function getIndex(): int - { - return $this->index; - } - - public function getColonIndex(): int - { - return $this->colonIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php deleted file mode 100644 index b742b29a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.php +++ /dev/null @@ -1,41 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class DefaultAnalysis -{ - private int $index; - - private int $colonIndex; - - public function __construct(int $index, int $colonIndex) - { - $this->index = $index; - $this->colonIndex = $colonIndex; - } - - public function getIndex(): int - { - return $this->index; - } - - public function getColonIndex(): int - { - return $this->colonIndex; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php deleted file mode 100644 index 6260cca1..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/EnumAnalysis.php +++ /dev/null @@ -1,44 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class EnumAnalysis extends AbstractControlCaseStructuresAnalysis -{ - /** - * @var list - */ - private array $cases; - - /** - * @param list $cases - */ - public function __construct(int $index, int $open, int $close, array $cases) - { - parent::__construct($index, $open, $close); - - $this->cases = $cases; - } - - /** - * @return list - */ - public function getCases(): array - { - return $this->cases; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php deleted file mode 100644 index 2ac1b977..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php +++ /dev/null @@ -1,35 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class MatchAnalysis extends AbstractControlCaseStructuresAnalysis -{ - private ?DefaultAnalysis $defaultAnalysis; - - public function __construct(int $index, int $open, int $close, ?DefaultAnalysis $defaultAnalysis) - { - parent::__construct($index, $open, $close); - - $this->defaultAnalysis = $defaultAnalysis; - } - - public function getDefaultAnalysis(): ?DefaultAnalysis - { - return $this->defaultAnalysis; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php deleted file mode 100644 index 6702a122..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceAnalysis.php +++ /dev/null @@ -1,96 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class NamespaceAnalysis implements StartEndTokenAwareAnalysis -{ - /** - * The fully qualified namespace name. - */ - private string $fullName; - - /** - * The short version of the namespace. - */ - private string $shortName; - - /** - * The start index of the namespace declaration in the analyzed Tokens. - */ - private int $startIndex; - - /** - * The end index of the namespace declaration in the analyzed Tokens. - */ - private int $endIndex; - - /** - * The start index of the scope of the namespace in the analyzed Tokens. - */ - private int $scopeStartIndex; - - /** - * The end index of the scope of the namespace in the analyzed Tokens. - */ - private int $scopeEndIndex; - - public function __construct(string $fullName, string $shortName, int $startIndex, int $endIndex, int $scopeStartIndex, int $scopeEndIndex) - { - $this->fullName = $fullName; - $this->shortName = $shortName; - $this->startIndex = $startIndex; - $this->endIndex = $endIndex; - $this->scopeStartIndex = $scopeStartIndex; - $this->scopeEndIndex = $scopeEndIndex; - } - - public function getFullName(): string - { - return $this->fullName; - } - - public function getShortName(): string - { - return $this->shortName; - } - - public function getStartIndex(): int - { - return $this->startIndex; - } - - public function getEndIndex(): int - { - return $this->endIndex; - } - - public function getScopeStartIndex(): int - { - return $this->scopeStartIndex; - } - - public function getScopeEndIndex(): int - { - return $this->scopeEndIndex; - } - - public function isGlobalNamespace(): bool - { - return '' === $this->getFullName(); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php deleted file mode 100644 index 59127b2f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/NamespaceUseAnalysis.php +++ /dev/null @@ -1,110 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class NamespaceUseAnalysis implements StartEndTokenAwareAnalysis -{ - public const TYPE_CLASS = 1; // "classy" could be class, interface or trait - public const TYPE_FUNCTION = 2; - public const TYPE_CONSTANT = 3; - - /** - * The fully qualified use namespace. - */ - private string $fullName; - - /** - * The short version of use namespace or the alias name in case of aliased use statements. - */ - private string $shortName; - - /** - * Is the use statement being aliased? - */ - private bool $isAliased; - - /** - * The start index of the namespace declaration in the analyzed Tokens. - */ - private int $startIndex; - - /** - * The end index of the namespace declaration in the analyzed Tokens. - */ - private int $endIndex; - - /** - * The type of import: class, function or constant. - */ - private int $type; - - public function __construct(string $fullName, string $shortName, bool $isAliased, int $startIndex, int $endIndex, int $type) - { - $this->fullName = $fullName; - $this->shortName = $shortName; - $this->isAliased = $isAliased; - $this->startIndex = $startIndex; - $this->endIndex = $endIndex; - $this->type = $type; - } - - public function getFullName(): string - { - return $this->fullName; - } - - public function getShortName(): string - { - return $this->shortName; - } - - public function isAliased(): bool - { - return $this->isAliased; - } - - public function getStartIndex(): int - { - return $this->startIndex; - } - - public function getEndIndex(): int - { - return $this->endIndex; - } - - public function getType(): int - { - return $this->type; - } - - public function isClass(): bool - { - return self::TYPE_CLASS === $this->type; - } - - public function isFunction(): bool - { - return self::TYPE_FUNCTION === $this->type; - } - - public function isConstant(): bool - { - return self::TYPE_CONSTANT === $this->type; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php deleted file mode 100644 index 0b2f318b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/StartEndTokenAwareAnalysis.php +++ /dev/null @@ -1,28 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -interface StartEndTokenAwareAnalysis -{ - /** - * The start index of the analyzed subject inside of the Tokens. - */ - public function getStartIndex(): int; - - /** - * The end index of the analyzed subject inside of the Tokens. - */ - public function getEndIndex(): int; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php deleted file mode 100644 index f81b48e2..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/SwitchAnalysis.php +++ /dev/null @@ -1,52 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class SwitchAnalysis extends AbstractControlCaseStructuresAnalysis -{ - /** - * @var list - */ - private array $cases; - - private ?DefaultAnalysis $defaultAnalysis; - - /** - * @param list $cases - */ - public function __construct(int $index, int $open, int $close, array $cases, ?DefaultAnalysis $defaultAnalysis) - { - parent::__construct($index, $open, $close); - - $this->cases = $cases; - $this->defaultAnalysis = $defaultAnalysis; - } - - /** - * @return list - */ - public function getCases(): array - { - return $this->cases; - } - - public function getDefaultAnalysis(): ?DefaultAnalysis - { - return $this->defaultAnalysis; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php deleted file mode 100644 index 7fe14158..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/TypeAnalysis.php +++ /dev/null @@ -1,96 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer\Analysis; - -/** - * @internal - */ -final class TypeAnalysis implements StartEndTokenAwareAnalysis -{ - /** - * This list contains soft and hard reserved types that can be used or will be used by PHP at some point. - * - * More info: - * - * @see https://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.types - * @see https://php.net/manual/en/reserved.other-reserved-words.php - * @see https://php.net/manual/en/language.pseudo-types.php - * - * @var list - */ - private static array $reservedTypes = [ - 'array', - 'bool', - 'callable', - 'float', - 'int', - 'iterable', - 'mixed', - 'never', - 'numeric', - 'object', - 'resource', - 'self', - 'string', - 'void', - ]; - - private string $name; - - private int $startIndex; - - private int $endIndex; - - private bool $nullable; - - public function __construct(string $name, int $startIndex, int $endIndex) - { - $this->name = $name; - $this->nullable = false; - - if (str_starts_with($name, '?')) { - $this->name = substr($name, 1); - $this->nullable = true; - } - - $this->startIndex = $startIndex; - $this->endIndex = $endIndex; - } - - public function getName(): string - { - return $this->name; - } - - public function getStartIndex(): int - { - return $this->startIndex; - } - - public function getEndIndex(): int - { - return $this->endIndex; - } - - public function isReservedType(): bool - { - return \in_array($this->name, self::$reservedTypes, true); - } - - public function isNullable(): bool - { - return $this->nullable; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php deleted file mode 100644 index 39d9c892..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ArgumentsAnalyzer.php +++ /dev/null @@ -1,157 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Analyzer\Analysis\ArgumentAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Dariusz Rumiński - * @author Vladimir Reznichenko - * - * @internal - */ -final class ArgumentsAnalyzer -{ - /** - * Count amount of parameters in a function/method reference. - */ - public function countArguments(Tokens $tokens, int $openParenthesis, int $closeParenthesis): int - { - return \count($this->getArguments($tokens, $openParenthesis, $closeParenthesis)); - } - - /** - * Returns start and end token indices of arguments. - * - * Returns an array with each key being the first token of an - * argument and the value the last. Including non-function tokens - * such as comments and white space tokens, but without the separation - * tokens like '(', ',' and ')'. - * - * @return array - */ - public function getArguments(Tokens $tokens, int $openParenthesis, int $closeParenthesis): array - { - $arguments = []; - $firstSensibleToken = $tokens->getNextMeaningfulToken($openParenthesis); - - if ($tokens[$firstSensibleToken]->equals(')')) { - return $arguments; - } - - $paramContentIndex = $openParenthesis + 1; - $argumentsStart = $paramContentIndex; - - for (; $paramContentIndex < $closeParenthesis; ++$paramContentIndex) { - $token = $tokens[$paramContentIndex]; - - // skip nested (), [], {} constructs - $blockDefinitionProbe = Tokens::detectBlockType($token); - - if (null !== $blockDefinitionProbe && true === $blockDefinitionProbe['isStart']) { - $paramContentIndex = $tokens->findBlockEnd($blockDefinitionProbe['type'], $paramContentIndex); - - continue; - } - - // if comma matched, increase arguments counter - if ($token->equals(',')) { - if ($tokens->getNextMeaningfulToken($paramContentIndex) === $closeParenthesis) { - break; // trailing ',' in function call (PHP 7.3) - } - - $arguments[$argumentsStart] = $paramContentIndex - 1; - $argumentsStart = $paramContentIndex + 1; - } - } - - $arguments[$argumentsStart] = $paramContentIndex - 1; - - return $arguments; - } - - public function getArgumentInfo(Tokens $tokens, int $argumentStart, int $argumentEnd): ArgumentAnalysis - { - static $skipTypes = null; - - if (null === $skipTypes) { - $skipTypes = [T_ELLIPSIS, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $skipTypes[] = T_READONLY; - } - } - - $info = [ - 'default' => null, - 'name' => null, - 'name_index' => null, - 'type' => null, - 'type_index_start' => null, - 'type_index_end' => null, - ]; - - $sawName = false; - - for ($index = $argumentStart; $index <= $argumentEnd; ++$index) { - $token = $tokens[$index]; - - if (\defined('T_ATTRIBUTE') && $token->isGivenKind(T_ATTRIBUTE)) { - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ATTRIBUTE, $index); - - continue; - } - - if ( - $token->isComment() - || $token->isWhitespace() - || $token->isGivenKind($skipTypes) - || $token->equals('&') - ) { - continue; - } - - if ($token->isGivenKind(T_VARIABLE)) { - $sawName = true; - $info['name_index'] = $index; - $info['name'] = $token->getContent(); - - continue; - } - - if ($token->equals('=')) { - continue; - } - - if ($sawName) { - $info['default'] .= $token->getContent(); - } else { - $info['type_index_start'] = ($info['type_index_start'] > 0) ? $info['type_index_start'] : $index; - $info['type_index_end'] = $index; - $info['type'] .= $token->getContent(); - } - } - - return new ArgumentAnalysis( - $info['name'], - $info['name_index'], - $info['default'], - $info['type'] ? new TypeAnalysis($info['type'], $info['type_index_start'], $info['type_index_end']) : null - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php deleted file mode 100644 index c67b76bc..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/AttributeAnalyzer.php +++ /dev/null @@ -1,70 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class AttributeAnalyzer -{ - private const TOKEN_KINDS_NOT_ALLOWED_IN_ATTRIBUTE = [ - ';', - '{', - [T_ATTRIBUTE], - [T_FUNCTION], - [T_OPEN_TAG], - [T_OPEN_TAG_WITH_ECHO], - [T_PRIVATE], - [T_PROTECTED], - [T_PUBLIC], - [T_RETURN], - [T_VARIABLE], - [CT::T_ATTRIBUTE_CLOSE], - ]; - - /** - * Check if given index is an attribute declaration. - */ - public static function isAttribute(Tokens $tokens, int $index): bool - { - if ( - !\defined('T_ATTRIBUTE') // attributes not available, PHP version lower than 8.0 - || !$tokens[$index]->isGivenKind(T_STRING) // checked token is not a string - || !$tokens->isAnyTokenKindsFound([T_ATTRIBUTE]) // no attributes in the tokens collection - ) { - return false; - } - - $attributeStartIndex = $tokens->getPrevTokenOfKind($index, self::TOKEN_KINDS_NOT_ALLOWED_IN_ATTRIBUTE); - if (!$tokens[$attributeStartIndex]->isGivenKind(T_ATTRIBUTE)) { - return false; - } - - // now, between attribute start and the attribute candidate index cannot be more "(" than ")" - $count = 0; - for ($i = $attributeStartIndex + 1; $i < $index; ++$i) { - if ($tokens[$i]->equals('(')) { - ++$count; - } elseif ($tokens[$i]->equals(')')) { - --$count; - } - } - - return 0 === $count; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php deleted file mode 100644 index 492d7049..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/BlocksAnalyzer.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - * - * @internal - */ -final class BlocksAnalyzer -{ - public function isBlock(Tokens $tokens, ?int $openIndex, ?int $closeIndex): bool - { - if (null === $openIndex || null === $closeIndex) { - return false; - } - - if (!$tokens->offsetExists($openIndex)) { - return false; - } - - if (!$tokens->offsetExists($closeIndex)) { - return false; - } - - $blockType = $this->getBlockType($tokens[$openIndex]); - - if (null === $blockType) { - return false; - } - - return $closeIndex === $tokens->findBlockEnd($blockType, $openIndex); - } - - /** - * @return Tokens::BLOCK_TYPE_* - */ - private function getBlockType(Token $token): ?int - { - foreach (Tokens::getBlockEdgeDefinitions() as $blockType => $definition) { - if ($token->equals($definition['start'])) { - return $blockType; - } - } - - return null; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php deleted file mode 100644 index 8a68d91c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.php +++ /dev/null @@ -1,83 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class ClassyAnalyzer -{ - public function isClassyInvocation(Tokens $tokens, int $index): bool - { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_STRING)) { - throw new \LogicException(sprintf('No T_STRING at given index %d, got "%s".', $index, $tokens[$index]->getName())); - } - - if (\in_array(strtolower($token->getContent()), ['bool', 'float', 'int', 'iterable', 'object', 'parent', 'self', 'string', 'void', 'null', 'false', 'never'], true)) { - return false; - } - - $next = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$next]; - - if ($nextToken->isGivenKind(T_NS_SEPARATOR)) { - return false; - } - - if ($nextToken->isGivenKind([T_DOUBLE_COLON, T_ELLIPSIS, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION, T_VARIABLE])) { - return true; - } - - $prev = $tokens->getPrevMeaningfulToken($index); - - while ($tokens[$prev]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_NS_SEPARATOR, T_STRING])) { - $prev = $tokens->getPrevMeaningfulToken($prev); - } - - $prevToken = $tokens[$prev]; - - if ($prevToken->isGivenKind([T_EXTENDS, T_INSTANCEOF, T_INSTEADOF, T_IMPLEMENTS, T_NEW, CT::T_NULLABLE_TYPE, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION, CT::T_TYPE_COLON, CT::T_USE_TRAIT])) { - return true; - } - - if (AttributeAnalyzer::isAttribute($tokens, $index)) { - return true; - } - - // `Foo & $bar` could be: - // - function reference parameter: function baz(Foo & $bar) {} - // - bit operator: $x = Foo & $bar; - if ($nextToken->equals('&') && $tokens[$tokens->getNextMeaningfulToken($next)]->isGivenKind(T_VARIABLE)) { - $checkIndex = $tokens->getPrevTokenOfKind($prev + 1, [';', '{', '}', [T_FUNCTION], [T_OPEN_TAG], [T_OPEN_TAG_WITH_ECHO]]); - - return $tokens[$checkIndex]->isGivenKind(T_FUNCTION); - } - - if (!$prevToken->equals(',')) { - return false; - } - - do { - $prev = $tokens->getPrevMeaningfulToken($prev); - } while ($tokens[$prev]->equalsAny([',', [T_NS_SEPARATOR], [T_STRING], [CT::T_NAMESPACE_OPERATOR]])); - - return $tokens[$prev]->isGivenKind([T_IMPLEMENTS, CT::T_USE_TRAIT]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php deleted file mode 100644 index 0666a21d..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php +++ /dev/null @@ -1,317 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Preg; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - * - * @internal - */ -final class CommentsAnalyzer -{ - private const TYPE_HASH = 1; - private const TYPE_DOUBLE_SLASH = 2; - private const TYPE_SLASH_ASTERISK = 3; - - public function isHeaderComment(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isGivenKind([T_COMMENT, T_DOC_COMMENT])) { - throw new \InvalidArgumentException('Given index must point to a comment.'); - } - - if (null === $tokens->getNextMeaningfulToken($index)) { - return false; - } - - $prevIndex = $tokens->getPrevNonWhitespace($index); - - if ($tokens[$prevIndex]->equals(';')) { - $braceCloseIndex = $tokens->getPrevMeaningfulToken($prevIndex); - if (!$tokens[$braceCloseIndex]->equals(')')) { - return false; - } - - $braceOpenIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $braceCloseIndex); - $declareIndex = $tokens->getPrevMeaningfulToken($braceOpenIndex); - if (!$tokens[$declareIndex]->isGivenKind(T_DECLARE)) { - return false; - } - - $prevIndex = $tokens->getPrevNonWhitespace($declareIndex); - } - - return $tokens[$prevIndex]->isGivenKind(T_OPEN_TAG); - } - - /** - * Check if comment at given index precedes structural element. - * - * @see https://github.com/php-fig/fig-standards/blob/master/proposed/phpdoc.md#3-definitions - */ - public function isBeforeStructuralElement(Tokens $tokens, int $index): bool - { - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_COMMENT, T_DOC_COMMENT])) { - throw new \InvalidArgumentException('Given index must point to a comment.'); - } - - $nextIndex = $index; - do { - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - - // @TODO: drop condition when PHP 8.0+ is required - if (\defined('T_ATTRIBUTE')) { - while (null !== $nextIndex && $tokens[$nextIndex]->isGivenKind(T_ATTRIBUTE)) { - $nextIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_ATTRIBUTE, $nextIndex); - $nextIndex = $tokens->getNextMeaningfulToken($nextIndex); - } - } - } while (null !== $nextIndex && $tokens[$nextIndex]->equals('(')); - - if (null === $nextIndex || $tokens[$nextIndex]->equals('}')) { - return false; - } - - if ($this->isStructuralElement($tokens, $nextIndex)) { - return true; - } - - if ($this->isValidControl($tokens, $token, $nextIndex)) { - return true; - } - - if ($this->isValidVariable($tokens, $nextIndex)) { - return true; - } - - if ($this->isValidLanguageConstruct($tokens, $token, $nextIndex)) { - return true; - } - - if ($tokens[$nextIndex]->isGivenKind(CT::T_USE_TRAIT)) { - return true; - } - - return false; - } - - /** - * Return array of indices that are part of a comment started at given index. - * - * @param int $index T_COMMENT index - * - * @return list - */ - public function getCommentBlockIndices(Tokens $tokens, int $index): array - { - if (!$tokens[$index]->isGivenKind(T_COMMENT)) { - throw new \InvalidArgumentException('Given index must point to a comment.'); - } - - $commentType = $this->getCommentType($tokens[$index]->getContent()); - $indices = [$index]; - - if (self::TYPE_SLASH_ASTERISK === $commentType) { - return $indices; - } - - $count = \count($tokens); - ++$index; - - for (; $index < $count; ++$index) { - if ($tokens[$index]->isComment()) { - if ($commentType === $this->getCommentType($tokens[$index]->getContent())) { - $indices[] = $index; - - continue; - } - - break; - } - - if (!$tokens[$index]->isWhitespace() || $this->getLineBreakCount($tokens, $index, $index + 1) > 1) { - break; - } - } - - return $indices; - } - - /** - * @see https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md#3-definitions - */ - private function isStructuralElement(Tokens $tokens, int $index): bool - { - static $skip; - - if (null === $skip) { - $skip = [ - T_PRIVATE, - T_PROTECTED, - T_PUBLIC, - T_VAR, - T_FUNCTION, - T_ABSTRACT, - T_CONST, - T_NAMESPACE, - T_REQUIRE, - T_REQUIRE_ONCE, - T_INCLUDE, - T_INCLUDE_ONCE, - T_FINAL, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, - ]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $skip[] = T_READONLY; - } - } - - $token = $tokens[$index]; - - if ($token->isClassy() || $token->isGivenKind($skip)) { - return true; - } - - if ($token->isGivenKind(T_STATIC)) { - return !$tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_DOUBLE_COLON); - } - - return false; - } - - /** - * Checks control structures (for, foreach, if, switch, while) for correct docblock usage. - * - * @param Token $docsToken docs Token - * @param int $controlIndex index of control structure Token - */ - private function isValidControl(Tokens $tokens, Token $docsToken, int $controlIndex): bool - { - static $controlStructures = [ - T_FOR, - T_FOREACH, - T_IF, - T_SWITCH, - T_WHILE, - ]; - - if (!$tokens[$controlIndex]->isGivenKind($controlStructures)) { - return false; - } - - $index = $tokens->getNextMeaningfulToken($controlIndex); - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - $docsContent = $docsToken->getContent(); - - for ($index = $index + 1; $index < $endIndex; ++$index) { - $token = $tokens[$index]; - - if ( - $token->isGivenKind(T_VARIABLE) - && str_contains($docsContent, $token->getContent()) - ) { - return true; - } - } - - return false; - } - - /** - * Checks variable assignments through `list()`, `print()` etc. calls for correct docblock usage. - * - * @param Token $docsToken docs Token - * @param int $languageConstructIndex index of variable Token - */ - private function isValidLanguageConstruct(Tokens $tokens, Token $docsToken, int $languageConstructIndex): bool - { - static $languageStructures = [ - T_LIST, - T_PRINT, - T_ECHO, - CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, - ]; - - if (!$tokens[$languageConstructIndex]->isGivenKind($languageStructures)) { - return false; - } - - $endKind = $tokens[$languageConstructIndex]->isGivenKind(CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN) - ? [CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE] - : ')'; - - $endIndex = $tokens->getNextTokenOfKind($languageConstructIndex, [$endKind]); - - $docsContent = $docsToken->getContent(); - - for ($index = $languageConstructIndex + 1; $index < $endIndex; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_VARIABLE) && str_contains($docsContent, $token->getContent())) { - return true; - } - } - - return false; - } - - /** - * Checks variable assignments for correct docblock usage. - * - * @param int $index index of variable Token - */ - private function isValidVariable(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isGivenKind(T_VARIABLE)) { - return false; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - return $tokens[$nextIndex]->equals('='); - } - - private function getCommentType(string $content): int - { - if (str_starts_with($content, '#')) { - return self::TYPE_HASH; - } - - if ('*' === $content[1]) { - return self::TYPE_SLASH_ASTERISK; - } - - return self::TYPE_DOUBLE_SLASH; - } - - private function getLineBreakCount(Tokens $tokens, int $whiteStart, int $whiteEnd): int - { - $lineCount = 0; - for ($i = $whiteStart; $i < $whiteEnd; ++$i) { - $lineCount += Preg::matchAll('/\R/u', $tokens[$i]->getContent()); - } - - return $lineCount; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php deleted file mode 100644 index 3dd3d1a3..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php +++ /dev/null @@ -1,310 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Analyzer\Analysis\AbstractControlCaseStructuresAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\CaseAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\DefaultAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\EnumAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\MatchAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\SwitchAnalysis; -use PhpCsFixer\Tokenizer\Tokens; - -final class ControlCaseStructuresAnalyzer -{ - /** - * @param list $types Token types of interest of which analyzes must be returned - * - * @return \Generator - */ - public static function findControlStructures(Tokens $tokens, array $types): \Generator - { - if (\count($types) < 1) { - return; // quick skip - } - - $typesWithCaseOrDefault = self::getTypesWithCaseOrDefault(); - - foreach ($types as $type) { - if (!\in_array($type, $typesWithCaseOrDefault, true)) { - throw new \InvalidArgumentException(sprintf('Unexpected type "%d".', $type)); - } - } - - if (!$tokens->isAnyTokenKindsFound($types)) { - return; // quick skip - } - - $depth = -1; - - /** - * @var list, - * default: array{index: int, open: int}|null, - * alternative_syntax: bool, - * }> $stack - */ - $stack = []; - $isTypeOfInterest = false; - - foreach ($tokens as $index => $token) { - if ($token->isGivenKind($typesWithCaseOrDefault)) { - ++$depth; - - $stack[$depth] = [ - 'kind' => $token->getId(), - 'index' => $index, - 'brace_count' => 0, - 'cases' => [], - 'default' => null, - 'alternative_syntax' => false, - ]; - - $isTypeOfInterest = \in_array($stack[$depth]['kind'], $types, true); - - if ($token->isGivenKind(T_SWITCH)) { - $index = $tokens->getNextMeaningfulToken($index); - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - $stack[$depth]['open'] = $tokens->getNextMeaningfulToken($index); - $stack[$depth]['alternative_syntax'] = $tokens[$stack[$depth]['open']]->equals(':'); - } elseif (\defined('T_MATCH') && $token->isGivenKind(T_MATCH)) { // @TODO: drop condition when PHP 8.0+ is required - $index = $tokens->getNextMeaningfulToken($index); - $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - $stack[$depth]['open'] = $tokens->getNextMeaningfulToken($index); - } elseif (\defined('T_ENUM') && $token->isGivenKind(T_ENUM)) { - $stack[$depth]['open'] = $tokens->getNextTokenOfKind($index, ['{']); - } - - continue; - } - - if ($depth < 0) { - continue; - } - - if ($token->equals('{')) { - ++$stack[$depth]['brace_count']; - - continue; - } - - if ($token->equals('}')) { - --$stack[$depth]['brace_count']; - - if (0 === $stack[$depth]['brace_count']) { - if ($stack[$depth]['alternative_syntax']) { - continue; - } - - if ($isTypeOfInterest) { - $stack[$depth]['end'] = $index; - - yield $stack[$depth]['index'] => self::buildControlCaseStructureAnalysis($stack[$depth]); - } - - array_pop($stack); - --$depth; - - if ($depth < -1) { // @phpstan-ignore-line - throw new \RuntimeException('Analysis depth count failure.'); - } - - if (isset($stack[$depth]['kind'])) { - $isTypeOfInterest = \in_array($stack[$depth]['kind'], $types, true); - } - } - - continue; - } - - if ($tokens[$index]->isGivenKind(T_ENDSWITCH)) { - if (!$stack[$depth]['alternative_syntax']) { - throw new \RuntimeException('Analysis syntax failure, unexpected "T_ENDSWITCH".'); - } - - if (T_SWITCH !== $stack[$depth]['kind']) { - throw new \RuntimeException('Analysis type failure, unexpected "T_ENDSWITCH".'); - } - - if (0 !== $stack[$depth]['brace_count']) { - throw new \RuntimeException('Analysis count failure, unexpected "T_ENDSWITCH".'); - } - - $index = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - - if ($isTypeOfInterest) { - $stack[$depth]['end'] = $index; - - yield $stack[$depth]['index'] => self::buildControlCaseStructureAnalysis($stack[$depth]); - } - - array_pop($stack); - --$depth; - - if ($depth < -1) { // @phpstan-ignore-line - throw new \RuntimeException('Analysis depth count failure ("T_ENDSWITCH").'); - } - - if (isset($stack[$depth]['kind'])) { - $isTypeOfInterest = \in_array($stack[$depth]['kind'], $types, true); - } - } - - if (!$isTypeOfInterest) { - continue; // don't bother to analyze stuff that caller is not interested in - } - - if ($token->isGivenKind(T_CASE)) { - $stack[$depth]['cases'][] = ['index' => $index, 'open' => self::findCaseOpen($tokens, $stack[$depth]['kind'], $index)]; - } elseif ($token->isGivenKind(T_DEFAULT)) { - if (null !== $stack[$depth]['default']) { - throw new \RuntimeException('Analysis multiple "default" found.'); - } - - $stack[$depth]['default'] = ['index' => $index, 'open' => self::findDefaultOpen($tokens, $stack[$depth]['kind'], $index)]; - } - } - } - - /** - * @param array{ - * kind: int, - * index: int, - * open: int, - * end: int, - * cases: list, - * default: null|array{index: int, open: int}, - * } $analysis - */ - private static function buildControlCaseStructureAnalysis(array $analysis): AbstractControlCaseStructuresAnalysis - { - $default = null === $analysis['default'] - ? null - : new DefaultAnalysis($analysis['default']['index'], $analysis['default']['open']) - ; - - $cases = []; - - foreach ($analysis['cases'] as $case) { - $cases[$case['index']] = new CaseAnalysis($case['index'], $case['open']); - } - - sort($cases); - - if (T_SWITCH === $analysis['kind']) { - return new SwitchAnalysis( - $analysis['index'], - $analysis['open'], - $analysis['end'], - $cases, - $default - ); - } - - if (\defined('T_ENUM') && T_ENUM === $analysis['kind']) { - return new EnumAnalysis( - $analysis['index'], - $analysis['open'], - $analysis['end'], - $cases - ); - } - - if (\defined('T_MATCH') && T_MATCH === $analysis['kind']) { // @TODO: drop condition when PHP 8.0+ is required - return new MatchAnalysis( - $analysis['index'], - $analysis['open'], - $analysis['end'], - $default - ); - } - - throw new \InvalidArgumentException(sprintf('Unexpected type "%d".', $analysis['kind'])); - } - - private static function findCaseOpen(Tokens $tokens, int $kind, int $index): int - { - if (T_SWITCH === $kind) { - $ternariesCount = 0; - - do { - if ($tokens[$index]->equalsAny(['(', '{'])) { // skip constructs - $type = Tokens::detectBlockType($tokens[$index]); - $index = $tokens->findBlockEnd($type['type'], $index); - - continue; - } - - if ($tokens[$index]->equals('?')) { - ++$ternariesCount; - - continue; - } - - if ($tokens[$index]->equalsAny([':', ';'])) { - if (0 === $ternariesCount) { - break; - } - - --$ternariesCount; - } - } while (++$index); - - return $index; - } - - if (\defined('T_ENUM') && T_ENUM === $kind) { - return $tokens->getNextTokenOfKind($index, ['=', ';']); - } - - throw new \InvalidArgumentException(sprintf('Unexpected case for type "%d".', $kind)); - } - - private static function findDefaultOpen(Tokens $tokens, int $kind, int $index): int - { - if (T_SWITCH === $kind) { - return $tokens->getNextTokenOfKind($index, [':', ';']); - } - - if (\defined('T_MATCH') && T_MATCH === $kind) { // @TODO: drop condition when PHP 8.0+ is required - return $tokens->getNextTokenOfKind($index, [[T_DOUBLE_ARROW]]); - } - - throw new \InvalidArgumentException(sprintf('Unexpected default for type "%d".', $kind)); - } - - /** - * @return list - */ - private static function getTypesWithCaseOrDefault(): array - { - $supportedTypes = [T_SWITCH]; - - if (\defined('T_MATCH')) { // @TODO: drop condition when PHP 8.0+ is required - $supportedTypes[] = T_MATCH; - } - - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - $supportedTypes[] = T_ENUM; - } - - return $supportedTypes; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php deleted file mode 100644 index 988b952f..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php +++ /dev/null @@ -1,269 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Analyzer\Analysis\ArgumentAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class FunctionsAnalyzer -{ - /** - * @var array{tokens: string, imports: list, declarations: list} - */ - private array $functionsAnalysis = ['tokens' => '', 'imports' => [], 'declarations' => []]; - - /** - * Important: risky because of the limited (file) scope of the tool. - */ - public function isGlobalFunctionCall(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->isGivenKind(T_STRING)) { - return false; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$nextIndex]->equals('(')) { - return false; - } - - $previousIsNamespaceSeparator = false; - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - $previousIsNamespaceSeparator = true; - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - } - - $possibleKind = array_merge([T_DOUBLE_COLON, T_FUNCTION, CT::T_NAMESPACE_OPERATOR, T_NEW, CT::T_RETURN_REF, T_STRING], Token::getObjectOperatorKinds()); - - // @TODO: drop condition when PHP 8.0+ is required - if (\defined('T_ATTRIBUTE')) { - $possibleKind[] = T_ATTRIBUTE; - } - - if ($tokens[$prevIndex]->isGivenKind($possibleKind)) { - return false; - } - - if ($previousIsNamespaceSeparator) { - return true; - } - - if ($tokens[$tokens->getNextMeaningfulToken($nextIndex)]->isGivenKind(CT::T_FIRST_CLASS_CALLABLE)) { - return false; - } - - if ($tokens->isChanged() || $tokens->getCodeHash() !== $this->functionsAnalysis['tokens']) { - $this->buildFunctionsAnalysis($tokens); - } - - // figure out in which namespace we are - $namespaceAnalyzer = new NamespacesAnalyzer(); - - $declarations = $namespaceAnalyzer->getDeclarations($tokens); - $scopeStartIndex = 0; - $scopeEndIndex = \count($tokens) - 1; - $inGlobalNamespace = false; - - foreach ($declarations as $declaration) { - $scopeStartIndex = $declaration->getScopeStartIndex(); - $scopeEndIndex = $declaration->getScopeEndIndex(); - - if ($index >= $scopeStartIndex && $index <= $scopeEndIndex) { - $inGlobalNamespace = $declaration->isGlobalNamespace(); - - break; - } - } - - $call = strtolower($tokens[$index]->getContent()); - - // check if the call is to a function declared in the same namespace as the call is done, - // if the call is already in the global namespace than declared functions are in the same - // global namespace and don't need checking - - if (!$inGlobalNamespace) { - /** @var int $functionNameIndex */ - foreach ($this->functionsAnalysis['declarations'] as $functionNameIndex) { - if ($functionNameIndex < $scopeStartIndex || $functionNameIndex > $scopeEndIndex) { - continue; - } - - if (strtolower($tokens[$functionNameIndex]->getContent()) === $call) { - return false; - } - } - } - - /** @var NamespaceUseAnalysis $functionUse */ - foreach ($this->functionsAnalysis['imports'] as $functionUse) { - if ($functionUse->getStartIndex() < $scopeStartIndex || $functionUse->getEndIndex() > $scopeEndIndex) { - continue; - } - - if ($call !== strtolower($functionUse->getShortName())) { - continue; - } - - // global import like `use function \str_repeat;` - return $functionUse->getShortName() === ltrim($functionUse->getFullName(), '\\'); - } - - if (AttributeAnalyzer::isAttribute($tokens, $index)) { - return false; - } - - return true; - } - - /** - * @return array - */ - public function getFunctionArguments(Tokens $tokens, int $functionIndex): array - { - $argumentsStart = $tokens->getNextTokenOfKind($functionIndex, ['(']); - $argumentsEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $argumentsStart); - $argumentAnalyzer = new ArgumentsAnalyzer(); - $arguments = []; - - foreach ($argumentAnalyzer->getArguments($tokens, $argumentsStart, $argumentsEnd) as $start => $end) { - $argumentInfo = $argumentAnalyzer->getArgumentInfo($tokens, $start, $end); - $arguments[$argumentInfo->getName()] = $argumentInfo; - } - - return $arguments; - } - - public function getFunctionReturnType(Tokens $tokens, int $methodIndex): ?TypeAnalysis - { - $argumentsStart = $tokens->getNextTokenOfKind($methodIndex, ['(']); - $argumentsEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $argumentsStart); - $typeColonIndex = $tokens->getNextMeaningfulToken($argumentsEnd); - - if (!$tokens[$typeColonIndex]->isGivenKind(CT::T_TYPE_COLON)) { - return null; - } - - $type = ''; - $typeStartIndex = $tokens->getNextMeaningfulToken($typeColonIndex); - $typeEndIndex = $typeStartIndex; - $functionBodyStart = $tokens->getNextTokenOfKind($typeColonIndex, ['{', ';', [T_DOUBLE_ARROW]]); - - for ($i = $typeStartIndex; $i < $functionBodyStart; ++$i) { - if ($tokens[$i]->isWhitespace() || $tokens[$i]->isComment()) { - continue; - } - - $type .= $tokens[$i]->getContent(); - $typeEndIndex = $i; - } - - return new TypeAnalysis($type, $typeStartIndex, $typeEndIndex); - } - - public function isTheSameClassCall(Tokens $tokens, int $index): bool - { - if (!$tokens->offsetExists($index)) { - return false; - } - - $operatorIndex = $tokens->getPrevMeaningfulToken($index); - - if (null === $operatorIndex) { - return false; - } - - if (!$tokens[$operatorIndex]->isObjectOperator() && !$tokens[$operatorIndex]->isGivenKind(T_DOUBLE_COLON)) { - return false; - } - - $referenceIndex = $tokens->getPrevMeaningfulToken($operatorIndex); - - if (null === $referenceIndex) { - return false; - } - - return $tokens[$referenceIndex]->equalsAny([[T_VARIABLE, '$this'], [T_STRING, 'self'], [T_STATIC, 'static']], false); - } - - private function buildFunctionsAnalysis(Tokens $tokens): void - { - $this->functionsAnalysis = [ - 'tokens' => $tokens->getCodeHash(), - 'imports' => [], - 'declarations' => [], - ]; - - // find declarations - - if ($tokens->isTokenKindFound(T_FUNCTION)) { - $end = \count($tokens); - - for ($i = 0; $i < $end; ++$i) { - // skip classy, we are looking for functions not methods - if ($tokens[$i]->isGivenKind(Token::getClassyTokenKinds())) { - $i = $tokens->getNextTokenOfKind($i, ['(', '{']); - - if ($tokens[$i]->equals('(')) { // anonymous class - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $i); - $i = $tokens->getNextTokenOfKind($i, ['{']); - } - - $i = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $i); - - continue; - } - - if (!$tokens[$i]->isGivenKind(T_FUNCTION)) { - continue; - } - - $i = $tokens->getNextMeaningfulToken($i); - - if ($tokens[$i]->isGivenKind(CT::T_RETURN_REF)) { - $i = $tokens->getNextMeaningfulToken($i); - } - - if (!$tokens[$i]->isGivenKind(T_STRING)) { - continue; - } - - $this->functionsAnalysis['declarations'][] = $i; - } - } - - // find imported functions - - $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); - - if ($tokens->isTokenKindFound(CT::T_FUNCTION_IMPORT)) { - $declarations = $namespaceUsesAnalyzer->getDeclarationsFromTokens($tokens); - - foreach ($declarations as $declaration) { - if ($declaration->isFunction()) { - $this->functionsAnalysis['imports'][] = $declaration; - } - } - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php deleted file mode 100644 index 15d5b066..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php +++ /dev/null @@ -1,40 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class GotoLabelAnalyzer -{ - public function belongsToGoToLabel(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->equals(':')) { - return false; - } - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$prevMeaningfulTokenIndex]->isGivenKind(T_STRING)) { - return false; - } - - $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($prevMeaningfulTokenIndex); - - return $tokens[$prevMeaningfulTokenIndex]->equalsAny([':', ';', '{', '}', [T_OPEN_TAG]]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php deleted file mode 100644 index 40e9053a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php +++ /dev/null @@ -1,121 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; -use PhpCsFixer\Tokenizer\TokensAnalyzer; - -/** - * @internal - */ -final class NamespaceUsesAnalyzer -{ - /** - * @return list - */ - public function getDeclarationsFromTokens(Tokens $tokens): array - { - $tokenAnalyzer = new TokensAnalyzer($tokens); - $useIndices = $tokenAnalyzer->getImportUseIndexes(); - - return $this->getDeclarations($tokens, $useIndices); - } - - /** - * @return list - */ - public function getDeclarationsInNamespace(Tokens $tokens, NamespaceAnalysis $namespace): array - { - $namespaceUses = []; - - foreach ($this->getDeclarationsFromTokens($tokens) as $namespaceUse) { - if ($namespaceUse->getStartIndex() >= $namespace->getScopeStartIndex() && $namespaceUse->getStartIndex() <= $namespace->getScopeEndIndex()) { - $namespaceUses[] = $namespaceUse; - } - } - - return $namespaceUses; - } - - /** - * @param list $useIndices - * - * @return list - */ - private function getDeclarations(Tokens $tokens, array $useIndices): array - { - $uses = []; - - foreach ($useIndices as $index) { - $endIndex = $tokens->getNextTokenOfKind($index, [';', [T_CLOSE_TAG]]); - $analysis = $this->parseDeclaration($tokens, $index, $endIndex); - - if (null !== $analysis) { - $uses[] = $analysis; - } - } - - return $uses; - } - - private function parseDeclaration(Tokens $tokens, int $startIndex, int $endIndex): ?NamespaceUseAnalysis - { - $fullName = $shortName = ''; - $aliased = false; - - $type = NamespaceUseAnalysis::TYPE_CLASS; - for ($i = $startIndex; $i <= $endIndex; ++$i) { - $token = $tokens[$i]; - if ($token->equals(',') || $token->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE)) { - // do not touch group use declarations until the logic of this is added (for example: `use some\a\{ClassD};`) - // ignore multiple use statements that should be split into few separate statements (for example: `use BarB, BarC as C;`) - return null; - } - - if ($token->isGivenKind(CT::T_FUNCTION_IMPORT)) { - $type = NamespaceUseAnalysis::TYPE_FUNCTION; - } elseif ($token->isGivenKind(CT::T_CONST_IMPORT)) { - $type = NamespaceUseAnalysis::TYPE_CONSTANT; - } - - if ($token->isWhitespace() || $token->isComment() || $token->isGivenKind(T_USE)) { - continue; - } - - if ($token->isGivenKind(T_STRING)) { - $shortName = $token->getContent(); - if (!$aliased) { - $fullName .= $shortName; - } - } elseif ($token->isGivenKind(T_NS_SEPARATOR)) { - $fullName .= $token->getContent(); - } elseif ($token->isGivenKind(T_AS)) { - $aliased = true; - } - } - - return new NamespaceUseAnalysis( - trim($fullName), - $shortName, - $aliased, - $startIndex, - $endIndex, - $type - ); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php deleted file mode 100644 index 3890523a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespacesAnalyzer.php +++ /dev/null @@ -1,88 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class NamespacesAnalyzer -{ - /** - * @return list - */ - public function getDeclarations(Tokens $tokens): array - { - $namespaces = []; - - for ($index = 1, $count = \count($tokens); $index < $count; ++$index) { - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_NAMESPACE)) { - continue; - } - - $declarationEndIndex = $tokens->getNextTokenOfKind($index, [';', '{']); - $namespace = trim($tokens->generatePartialCode($index + 1, $declarationEndIndex - 1)); - $declarationParts = explode('\\', $namespace); - $shortName = end($declarationParts); - - if ($tokens[$declarationEndIndex]->equals('{')) { - $scopeEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $declarationEndIndex); - } else { - $scopeEndIndex = $tokens->getNextTokenOfKind($declarationEndIndex, [[T_NAMESPACE]]); - if (null === $scopeEndIndex) { - $scopeEndIndex = \count($tokens); - } - --$scopeEndIndex; - } - - $namespaces[] = new NamespaceAnalysis( - $namespace, - $shortName, - $index, - $declarationEndIndex, - $index, - $scopeEndIndex - ); - - // Continue the analysis after the end of this namespace to find the next one - $index = $scopeEndIndex; - } - - if (0 === \count($namespaces)) { - $namespaces[] = new NamespaceAnalysis('', '', 0, 0, 0, \count($tokens) - 1); - } - - return $namespaces; - } - - public function getNamespaceAt(Tokens $tokens, int $index): NamespaceAnalysis - { - if (!$tokens->offsetExists($index)) { - throw new \InvalidArgumentException(sprintf('Token index %d does not exist.', $index)); - } - - foreach ($this->getDeclarations($tokens) as $namespace) { - if ($namespace->getScopeStartIndex() <= $index && $namespace->getScopeEndIndex() >= $index) { - return $namespace; - } - } - - throw new \LogicException(sprintf('Unable to get the namespace at index %d.', $index)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php deleted file mode 100644 index 51a2abde..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/RangeAnalyzer.php +++ /dev/null @@ -1,90 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class RangeAnalyzer -{ - private function __construct() - { - // cannot create instance of util. class - } - - /** - * Meaningful compare of tokens within ranges. - * - * @param array{start: int, end: int} $range1 - * @param array{start: int, end: int} $range2 - */ - public static function rangeEqualsRange(Tokens $tokens, array $range1, array $range2): bool - { - $leftStart = $range1['start']; - $leftEnd = $range1['end']; - - if ($tokens[$leftStart]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - $leftStart = $tokens->getNextMeaningfulToken($leftStart); - } - - while ($tokens[$leftStart]->equals('(') && $tokens[$leftEnd]->equals(')')) { - $leftStart = $tokens->getNextMeaningfulToken($leftStart); - $leftEnd = $tokens->getPrevMeaningfulToken($leftEnd); - } - - $rightStart = $range2['start']; - $rightEnd = $range2['end']; - - if ($tokens[$rightStart]->isGivenKind([T_WHITESPACE, T_COMMENT, T_DOC_COMMENT])) { - $rightStart = $tokens->getNextMeaningfulToken($rightStart); - } - - while ($tokens[$rightStart]->equals('(') && $tokens[$rightEnd]->equals(')')) { - $rightStart = $tokens->getNextMeaningfulToken($rightStart); - $rightEnd = $tokens->getPrevMeaningfulToken($rightEnd); - } - - $arrayOpenTypes = ['[', [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN]]; - $arrayCloseTypes = [']', [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE]]; - - while (true) { - $leftToken = $tokens[$leftStart]; - $rightToken = $tokens[$rightStart]; - - if ( - !$leftToken->equals($rightToken) - && !($leftToken->equalsAny($arrayOpenTypes) && $rightToken->equalsAny($arrayOpenTypes)) - && !($leftToken->equalsAny($arrayCloseTypes) && $rightToken->equalsAny($arrayCloseTypes)) - ) { - return false; - } - - $leftStart = $tokens->getNextMeaningfulToken($leftStart); - $rightStart = $tokens->getNextMeaningfulToken($rightStart); - - $reachedLeftEnd = null === $leftStart || $leftStart > $leftEnd; // reached end left or moved over - $reachedRightEnd = null === $rightStart || $rightStart > $rightEnd; // reached end right or moved over - - if (!$reachedLeftEnd && !$reachedRightEnd) { - continue; - } - - return $reachedLeftEnd && $reachedRightEnd; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php deleted file mode 100644 index 0c7d4bd9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ReferenceAnalyzer.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @author Kuba Werłos - * - * @internal - */ -final class ReferenceAnalyzer -{ - public function isReference(Tokens $tokens, int $index): bool - { - if ($tokens[$index]->isGivenKind(CT::T_RETURN_REF)) { - return true; - } - - if (!$tokens[$index]->equals('&')) { - return false; - } - - /** @var int $index */ - $index = $tokens->getPrevMeaningfulToken($index); - if ($tokens[$index]->equalsAny(['=', [T_AS], [T_CALLABLE], [T_DOUBLE_ARROW], [CT::T_ARRAY_TYPEHINT]])) { - return true; - } - - if ($tokens[$index]->isGivenKind(T_STRING)) { - $index = $tokens->getPrevMeaningfulToken($index); - } - - return $tokens[$index]->equalsAny(['(', ',', [T_NS_SEPARATOR], [CT::T_NULLABLE_TYPE]]); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php deleted file mode 100644 index 0845ce40..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php +++ /dev/null @@ -1,52 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Analyzer; - -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class WhitespacesAnalyzer -{ - public static function detectIndent(Tokens $tokens, int $index): string - { - while (true) { - $whitespaceIndex = $tokens->getPrevTokenOfKind($index, [[T_WHITESPACE]]); - - if (null === $whitespaceIndex) { - return ''; - } - - $whitespaceToken = $tokens[$whitespaceIndex]; - - if (str_contains($whitespaceToken->getContent(), "\n")) { - break; - } - - $prevToken = $tokens[$whitespaceIndex - 1]; - - if ($prevToken->isGivenKind([T_OPEN_TAG, T_COMMENT]) && "\n" === substr($prevToken->getContent(), -1)) { - break; - } - - $index = $whitespaceIndex; - } - - $explodedContent = explode("\n", $whitespaceToken->getContent()); - - return end($explodedContent); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php deleted file mode 100644 index ebe7a2eb..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php +++ /dev/null @@ -1,104 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -/** - * @author Dariusz Rumiński - */ -final class CT -{ - public const T_ARRAY_INDEX_CURLY_BRACE_CLOSE = 10001; - public const T_ARRAY_INDEX_CURLY_BRACE_OPEN = 10002; - public const T_ARRAY_SQUARE_BRACE_CLOSE = 10003; - public const T_ARRAY_SQUARE_BRACE_OPEN = 10004; - public const T_ARRAY_TYPEHINT = 10005; - public const T_BRACE_CLASS_INSTANTIATION_CLOSE = 10006; - public const T_BRACE_CLASS_INSTANTIATION_OPEN = 10007; - public const T_CLASS_CONSTANT = 10008; - public const T_CONST_IMPORT = 10009; - public const T_CURLY_CLOSE = 10010; - public const T_DESTRUCTURING_SQUARE_BRACE_CLOSE = 10011; - public const T_DESTRUCTURING_SQUARE_BRACE_OPEN = 10012; - public const T_DOLLAR_CLOSE_CURLY_BRACES = 10013; - public const T_DYNAMIC_PROP_BRACE_CLOSE = 10014; - public const T_DYNAMIC_PROP_BRACE_OPEN = 10015; - public const T_DYNAMIC_VAR_BRACE_CLOSE = 10016; - public const T_DYNAMIC_VAR_BRACE_OPEN = 10017; - public const T_FUNCTION_IMPORT = 10018; - public const T_GROUP_IMPORT_BRACE_CLOSE = 10019; - public const T_GROUP_IMPORT_BRACE_OPEN = 10020; - public const T_NAMESPACE_OPERATOR = 10021; - public const T_NULLABLE_TYPE = 10022; - public const T_RETURN_REF = 10023; - public const T_TYPE_ALTERNATION = 10024; - public const T_TYPE_COLON = 10025; - public const T_USE_LAMBDA = 10026; - public const T_USE_TRAIT = 10027; - public const T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC = 10028; - public const T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED = 10029; - public const T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE = 10030; - public const T_ATTRIBUTE_CLOSE = 10031; - public const T_NAMED_ARGUMENT_NAME = 10032; - public const T_NAMED_ARGUMENT_COLON = 10033; - public const T_FIRST_CLASS_CALLABLE = 10034; - public const T_TYPE_INTERSECTION = 10035; - - private function __construct() - { - } - - /** - * Get name for custom token. - * - * @param int $value custom token value - */ - public static function getName(int $value): string - { - if (!self::has($value)) { - throw new \InvalidArgumentException(sprintf('No custom token was found for "%s".', $value)); - } - - $tokens = self::getMapById(); - - return 'CT::'.$tokens[$value]; - } - - /** - * Check if given custom token exists. - * - * @param int $value custom token value - */ - public static function has(int $value): bool - { - $tokens = self::getMapById(); - - return isset($tokens[$value]); - } - - /** - * @return array - */ - private static function getMapById(): array - { - static $constants; - - if (null === $constants) { - $reflection = new \ReflectionClass(__CLASS__); - $constants = array_flip($reflection->getConstants()); - } - - return $constants; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php deleted file mode 100644 index ec316615..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php +++ /dev/null @@ -1,36 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class CodeHasher -{ - private function __construct() - { - // cannot create instance of util. class - } - - /** - * Calculate hash for code. - */ - public static function calculateCodeHash(string $code): string - { - return md5($code); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php deleted file mode 100644 index 0c5e8de6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php +++ /dev/null @@ -1,513 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -/** - * Representation of single token. - * As a token prototype you should understand a single element generated by token_get_all. - * - * @author Dariusz Rumiński - */ -final class Token -{ - /** - * Content of token prototype. - */ - private string $content; - - /** - * ID of token prototype, if available. - */ - private ?int $id = null; - - /** - * If token prototype is an array. - */ - private bool $isArray; - - /** - * Flag is token was changed. - */ - private bool $changed = false; - - /** - * @param array{int, string}|string $token token prototype - */ - public function __construct($token) - { - if (\is_array($token)) { - if (!\is_int($token[0])) { - throw new \InvalidArgumentException(sprintf( - 'Id must be an int, got "%s".', - get_debug_type($token[0]) - )); - } - - if (!\is_string($token[1])) { - throw new \InvalidArgumentException(sprintf( - 'Content must be a string, got "%s".', - get_debug_type($token[1]) - )); - } - - if ('' === $token[1]) { - throw new \InvalidArgumentException('Cannot set empty content for id-based Token.'); - } - - $this->isArray = true; - $this->id = $token[0]; - $this->content = $token[1]; - } elseif (\is_string($token)) { - $this->isArray = false; - $this->content = $token; - } else { - throw new \InvalidArgumentException(sprintf('Cannot recognize input value as valid Token prototype, got "%s".', get_debug_type($token))); - } - } - - /** - * @return list - */ - public static function getCastTokenKinds(): array - { - static $castTokens = [T_ARRAY_CAST, T_BOOL_CAST, T_DOUBLE_CAST, T_INT_CAST, T_OBJECT_CAST, T_STRING_CAST, T_UNSET_CAST]; - - return $castTokens; - } - - /** - * Get classy tokens kinds: T_CLASS, T_INTERFACE and T_TRAIT. - * - * @return list - */ - public static function getClassyTokenKinds(): array - { - static $classTokens; - - if (null === $classTokens) { - $classTokens = [T_CLASS, T_TRAIT, T_INTERFACE]; - - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - $classTokens[] = T_ENUM; - } - } - - return $classTokens; - } - - /** - * Get object operator tokens kinds: T_OBJECT_OPERATOR and (if available) T_NULLSAFE_OBJECT_OPERATOR. - * - * @return list - */ - public static function getObjectOperatorKinds(): array - { - static $objectOperators = null; - - if (null === $objectOperators) { - $objectOperators = [T_OBJECT_OPERATOR]; - if (\defined('T_NULLSAFE_OBJECT_OPERATOR')) { - $objectOperators[] = T_NULLSAFE_OBJECT_OPERATOR; - } - } - - return $objectOperators; - } - - /** - * Check if token is equals to given one. - * - * If tokens are arrays, then only keys defined in parameter token are checked. - * - * @param array{0: int, 1?: string}|string|Token $other token or it's prototype - * @param bool $caseSensitive perform a case sensitive comparison - */ - public function equals($other, bool $caseSensitive = true): bool - { - if (\defined('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG')) { // @TODO: drop condition with new MAJOR release 4.0 - if ('&' === $other) { - return '&' === $this->content && (null === $this->id || $this->isGivenKind([T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG, T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG])); - } - if (null === $this->id && '&' === $this->content) { - return $other instanceof self && '&' === $other->content && (null === $other->id || $other->isGivenKind([T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG, T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG])); - } - } - - if ($other instanceof self) { - // Inlined getPrototype() on this very hot path. - // We access the private properties of $other directly to save function call overhead. - // This is only possible because $other is of the same class as `self`. - if (!$other->isArray) { - $otherPrototype = $other->content; - } else { - $otherPrototype = [ - $other->id, - $other->content, - ]; - } - } else { - $otherPrototype = $other; - } - - if ($this->isArray !== \is_array($otherPrototype)) { - return false; - } - - if (!$this->isArray) { - return $this->content === $otherPrototype; - } - - if ($this->id !== $otherPrototype[0]) { - return false; - } - - if (isset($otherPrototype[1])) { - if ($caseSensitive) { - if ($this->content !== $otherPrototype[1]) { - return false; - } - } elseif (0 !== strcasecmp($this->content, $otherPrototype[1])) { - return false; - } - } - - // detect unknown keys - unset($otherPrototype[0], $otherPrototype[1]); - - /* - * @phpstan-ignore-next-line This validation is required when the method - * is called in a codebase that does not use - * static analysis. - */ - return empty($otherPrototype); - } - - /** - * Check if token is equals to one of given. - * - * @param list $others array of tokens or token prototypes - * @param bool $caseSensitive perform a case sensitive comparison - */ - public function equalsAny(array $others, bool $caseSensitive = true): bool - { - foreach ($others as $other) { - if ($this->equals($other, $caseSensitive)) { - return true; - } - } - - return false; - } - - /** - * A helper method used to find out whether a certain input token has to be case-sensitively matched. - * - * @param bool|list $caseSensitive global case sensitiveness or an array of booleans, whose keys should match - * the ones used in $sequence. If any is missing, the default case-sensitive - * comparison is used - * @param int $key the key of the token that has to be looked up - */ - public static function isKeyCaseSensitive($caseSensitive, int $key): bool - { - if (\is_array($caseSensitive)) { - return $caseSensitive[$key] ?? true; - } - - return $caseSensitive; - } - - /** - * @return array{int, string}|string - */ - public function getPrototype() - { - if (!$this->isArray) { - return $this->content; - } - - return [ - $this->id, - $this->content, - ]; - } - - /** - * Get token's content. - * - * It shall be used only for getting the content of token, not for checking it against excepted value. - */ - public function getContent(): string - { - return $this->content; - } - - /** - * Get token's id. - * - * It shall be used only for getting the internal id of token, not for checking it against excepted value. - */ - public function getId(): ?int - { - return $this->id; - } - - /** - * Get token's name. - * - * It shall be used only for getting the name of token, not for checking it against excepted value. - * - * @return null|string token name - */ - public function getName(): ?string - { - if (null === $this->id) { - return null; - } - - return self::getNameForId($this->id); - } - - /** - * Get token's name. - * - * It shall be used only for getting the name of token, not for checking it against excepted value. - * - * @return null|string token name - */ - public static function getNameForId(int $id): ?string - { - if (CT::has($id)) { - return CT::getName($id); - } - - $name = token_name($id); - - return 'UNKNOWN' === $name ? null : $name; - } - - /** - * Generate array containing all keywords that exists in PHP version in use. - * - * @return array - */ - public static function getKeywords(): array - { - static $keywords = null; - - if (null === $keywords) { - $keywords = self::getTokenKindsForNames(['T_ABSTRACT', 'T_ARRAY', 'T_AS', 'T_BREAK', 'T_CALLABLE', 'T_CASE', - 'T_CATCH', 'T_CLASS', 'T_CLONE', 'T_CONST', 'T_CONTINUE', 'T_DECLARE', 'T_DEFAULT', 'T_DO', - 'T_ECHO', 'T_ELSE', 'T_ELSEIF', 'T_EMPTY', 'T_ENDDECLARE', 'T_ENDFOR', 'T_ENDFOREACH', - 'T_ENDIF', 'T_ENDSWITCH', 'T_ENDWHILE', 'T_EVAL', 'T_EXIT', 'T_EXTENDS', 'T_FINAL', - 'T_FINALLY', 'T_FN', 'T_FOR', 'T_FOREACH', 'T_FUNCTION', 'T_GLOBAL', 'T_GOTO', 'T_HALT_COMPILER', - 'T_IF', 'T_IMPLEMENTS', 'T_INCLUDE', 'T_INCLUDE_ONCE', 'T_INSTANCEOF', 'T_INSTEADOF', - 'T_INTERFACE', 'T_ISSET', 'T_LIST', 'T_LOGICAL_AND', 'T_LOGICAL_OR', 'T_LOGICAL_XOR', - 'T_NAMESPACE', 'T_MATCH', 'T_NEW', 'T_PRINT', 'T_PRIVATE', 'T_PROTECTED', 'T_PUBLIC', 'T_REQUIRE', - 'T_REQUIRE_ONCE', 'T_RETURN', 'T_STATIC', 'T_SWITCH', 'T_THROW', 'T_TRAIT', 'T_TRY', - 'T_UNSET', 'T_USE', 'T_VAR', 'T_WHILE', 'T_YIELD', 'T_YIELD_FROM', 'T_READONLY', 'T_ENUM', - ]) + [ - CT::T_ARRAY_TYPEHINT => CT::T_ARRAY_TYPEHINT, - CT::T_CLASS_CONSTANT => CT::T_CLASS_CONSTANT, - CT::T_CONST_IMPORT => CT::T_CONST_IMPORT, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, - CT::T_FUNCTION_IMPORT => CT::T_FUNCTION_IMPORT, - CT::T_NAMESPACE_OPERATOR => CT::T_NAMESPACE_OPERATOR, - CT::T_USE_LAMBDA => CT::T_USE_LAMBDA, - CT::T_USE_TRAIT => CT::T_USE_TRAIT, - ]; - } - - return $keywords; - } - - /** - * Generate array containing all predefined constants that exists in PHP version in use. - * - * @see https://php.net/manual/en/language.constants.predefined.php - * - * @return array - */ - public static function getMagicConstants(): array - { - static $magicConstants = null; - - if (null === $magicConstants) { - $magicConstants = self::getTokenKindsForNames(['T_CLASS_C', 'T_DIR', 'T_FILE', 'T_FUNC_C', 'T_LINE', 'T_METHOD_C', 'T_NS_C', 'T_TRAIT_C']); - } - - return $magicConstants; - } - - /** - * Check if token prototype is an array. - * - * @return bool is array - */ - public function isArray(): bool - { - return $this->isArray; - } - - /** - * Check if token is one of type cast tokens. - */ - public function isCast(): bool - { - return $this->isGivenKind(self::getCastTokenKinds()); - } - - /** - * Check if token is one of classy tokens: T_CLASS, T_INTERFACE, T_TRAIT or T_ENUM. - */ - public function isClassy(): bool - { - return $this->isGivenKind(self::getClassyTokenKinds()); - } - - /** - * Check if token is one of comment tokens: T_COMMENT or T_DOC_COMMENT. - */ - public function isComment(): bool - { - static $commentTokens = [T_COMMENT, T_DOC_COMMENT]; - - return $this->isGivenKind($commentTokens); - } - - /** - * Check if token is one of object operator tokens: T_OBJECT_OPERATOR or T_NULLSAFE_OBJECT_OPERATOR. - */ - public function isObjectOperator(): bool - { - return $this->isGivenKind(self::getObjectOperatorKinds()); - } - - /** - * Check if token is one of given kind. - * - * @param int|list $possibleKind kind or array of kinds - */ - public function isGivenKind($possibleKind): bool - { - return $this->isArray && (\is_array($possibleKind) ? \in_array($this->id, $possibleKind, true) : $this->id === $possibleKind); - } - - /** - * Check if token is a keyword. - */ - public function isKeyword(): bool - { - $keywords = static::getKeywords(); - - return $this->isArray && isset($keywords[$this->id]); - } - - /** - * Check if token is a native PHP constant: true, false or null. - */ - public function isNativeConstant(): bool - { - static $nativeConstantStrings = ['true', 'false', 'null']; - - return $this->isArray && \in_array(strtolower($this->content), $nativeConstantStrings, true); - } - - /** - * Returns if the token is of a Magic constants type. - * - * @see https://php.net/manual/en/language.constants.predefined.php - */ - public function isMagicConstant(): bool - { - $magicConstants = static::getMagicConstants(); - - return $this->isArray && isset($magicConstants[$this->id]); - } - - /** - * Check if token is whitespace. - * - * @param null|string $whitespaces whitespace characters, default is " \t\n\r\0\x0B" - */ - public function isWhitespace(?string $whitespaces = " \t\n\r\0\x0B"): bool - { - if (null === $whitespaces) { - $whitespaces = " \t\n\r\0\x0B"; - } - - if ($this->isArray && !$this->isGivenKind(T_WHITESPACE)) { - return false; - } - - return '' === trim($this->content, $whitespaces); - } - - /** - * @return array{ - * id: int|null, - * name: string|null, - * content: string, - * isArray: bool, - * changed: bool, - * } - */ - public function toArray(): array - { - return [ - 'id' => $this->id, - 'name' => $this->getName(), - 'content' => $this->content, - 'isArray' => $this->isArray, - 'changed' => $this->changed, - ]; - } - - public function toJson(): string - { - $jsonResult = json_encode($this->toArray(), JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK); - - if (JSON_ERROR_NONE !== json_last_error()) { - $jsonResult = json_encode( - [ - 'errorDescription' => 'Cannot encode Tokens to JSON.', - 'rawErrorMessage' => json_last_error_msg(), - ], - JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK - ); - } - - return $jsonResult; - } - - /** - * @param list $tokenNames - * - * @return array - */ - private static function getTokenKindsForNames(array $tokenNames): array - { - $keywords = []; - foreach ($tokenNames as $keywordName) { - if (\defined($keywordName)) { - $keyword = \constant($keywordName); - $keywords[$keyword] = $keyword; - } - } - - return $keywords; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php deleted file mode 100644 index b8169285..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php +++ /dev/null @@ -1,1402 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -use PhpCsFixer\Preg; - -/** - * Collection of code tokens. - * - * Its role is to provide the ability to manage collection and navigate through it. - * - * As a token prototype you should understand a single element generated by token_get_all. - * - * @author Dariusz Rumiński - * - * @extends \SplFixedArray - * - * @final - */ -class Tokens extends \SplFixedArray -{ - public const BLOCK_TYPE_PARENTHESIS_BRACE = 1; - public const BLOCK_TYPE_CURLY_BRACE = 2; - public const BLOCK_TYPE_INDEX_SQUARE_BRACE = 3; - public const BLOCK_TYPE_ARRAY_SQUARE_BRACE = 4; - public const BLOCK_TYPE_DYNAMIC_PROP_BRACE = 5; - public const BLOCK_TYPE_DYNAMIC_VAR_BRACE = 6; - public const BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE = 7; - public const BLOCK_TYPE_GROUP_IMPORT_BRACE = 8; - public const BLOCK_TYPE_DESTRUCTURING_SQUARE_BRACE = 9; - public const BLOCK_TYPE_BRACE_CLASS_INSTANTIATION = 10; - public const BLOCK_TYPE_ATTRIBUTE = 11; - - /** - * Static class cache. - * - * @var array - */ - private static array $cache = []; - - /** - * Cache of block starts. Any change in collection will invalidate it. - * - * @var array - */ - private array $blockStartCache = []; - - /** - * Cache of block ends. Any change in collection will invalidate it. - * - * @var array - */ - private array $blockEndCache = []; - - /** - * A MD5 hash of the code string. - */ - private ?string $codeHash = null; - - /** - * Flag is collection was changed. - * - * It doesn't know about change of collection's items. To check it run `isChanged` method. - */ - private bool $changed = false; - - /** - * Set of found token kinds. - * - * When the token kind is present in this set it means that given token kind - * was ever seen inside the collection (but may not be part of it any longer). - * The key is token kind and the value is always true. - * - * @var array - */ - private array $foundTokenKinds = []; - - /** - * Clone tokens collection. - */ - public function __clone() - { - foreach ($this as $key => $val) { - $this[$key] = clone $val; - } - } - - /** - * Clear cache - one position or all of them. - * - * @param null|string $key position to clear, when null clear all - */ - public static function clearCache(?string $key = null): void - { - if (null === $key) { - self::$cache = []; - - return; - } - - unset(self::$cache[$key]); - } - - /** - * Detect type of block. - * - * @param Token $token token - * - * @return null|array{type: self::BLOCK_TYPE_*, isStart: bool} - */ - public static function detectBlockType(Token $token): ?array - { - foreach (self::getBlockEdgeDefinitions() as $type => $definition) { - if ($token->equals($definition['start'])) { - return ['type' => $type, 'isStart' => true]; - } - - if ($token->equals($definition['end'])) { - return ['type' => $type, 'isStart' => false]; - } - } - - return null; - } - - /** - * Create token collection from array. - * - * @param Token[] $array the array to import - * @param ?bool $saveIndices save the numeric indices used in the original array, default is yes - */ - public static function fromArray($array, $saveIndices = null): self - { - $tokens = new self(\count($array)); - - if ($saveIndices ?? true) { - foreach ($array as $key => $val) { - $tokens[$key] = $val; - } - } else { - $index = 0; - - foreach ($array as $val) { - $tokens[$index++] = $val; - } - } - - $tokens->generateCode(); // regenerate code to calculate code hash - $tokens->clearChanged(); - - return $tokens; - } - - /** - * Create token collection directly from code. - * - * @param string $code PHP code - */ - public static function fromCode(string $code): self - { - $codeHash = self::calculateCodeHash($code); - - if (self::hasCache($codeHash)) { - $tokens = self::getCache($codeHash); - - // generate the code to recalculate the hash - $tokens->generateCode(); - - if ($codeHash === $tokens->codeHash) { - $tokens->clearEmptyTokens(); - $tokens->clearChanged(); - - return $tokens; - } - } - - $tokens = new self(); - $tokens->setCode($code); - $tokens->clearChanged(); - - return $tokens; - } - - /** - * @return array> - */ - public static function getBlockEdgeDefinitions(): array - { - $definitions = [ - self::BLOCK_TYPE_CURLY_BRACE => [ - 'start' => '{', - 'end' => '}', - ], - self::BLOCK_TYPE_PARENTHESIS_BRACE => [ - 'start' => '(', - 'end' => ')', - ], - self::BLOCK_TYPE_INDEX_SQUARE_BRACE => [ - 'start' => '[', - 'end' => ']', - ], - self::BLOCK_TYPE_ARRAY_SQUARE_BRACE => [ - 'start' => [CT::T_ARRAY_SQUARE_BRACE_OPEN, '['], - 'end' => [CT::T_ARRAY_SQUARE_BRACE_CLOSE, ']'], - ], - self::BLOCK_TYPE_DYNAMIC_PROP_BRACE => [ - 'start' => [CT::T_DYNAMIC_PROP_BRACE_OPEN, '{'], - 'end' => [CT::T_DYNAMIC_PROP_BRACE_CLOSE, '}'], - ], - self::BLOCK_TYPE_DYNAMIC_VAR_BRACE => [ - 'start' => [CT::T_DYNAMIC_VAR_BRACE_OPEN, '{'], - 'end' => [CT::T_DYNAMIC_VAR_BRACE_CLOSE, '}'], - ], - self::BLOCK_TYPE_ARRAY_INDEX_CURLY_BRACE => [ - 'start' => [CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN, '{'], - 'end' => [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE, '}'], - ], - self::BLOCK_TYPE_GROUP_IMPORT_BRACE => [ - 'start' => [CT::T_GROUP_IMPORT_BRACE_OPEN, '{'], - 'end' => [CT::T_GROUP_IMPORT_BRACE_CLOSE, '}'], - ], - self::BLOCK_TYPE_DESTRUCTURING_SQUARE_BRACE => [ - 'start' => [CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, '['], - 'end' => [CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, ']'], - ], - self::BLOCK_TYPE_BRACE_CLASS_INSTANTIATION => [ - 'start' => [CT::T_BRACE_CLASS_INSTANTIATION_OPEN, '('], - 'end' => [CT::T_BRACE_CLASS_INSTANTIATION_CLOSE, ')'], - ], - ]; - - // @TODO: drop condition when PHP 8.0+ is required - if (\defined('T_ATTRIBUTE')) { - $definitions[self::BLOCK_TYPE_ATTRIBUTE] = [ - 'start' => [T_ATTRIBUTE, '#['], - 'end' => [CT::T_ATTRIBUTE_CLOSE, ']'], - ]; - } - - return $definitions; - } - - /** - * Set new size of collection. - * - * @param int $size - */ - public function setSize($size): bool - { - if ($this->getSize() !== $size) { - $this->changed = true; - - return parent::setSize($size); - } - - return true; - } - - /** - * Unset collection item. - * - * @param int $index - */ - public function offsetUnset($index): void - { - $this->changed = true; - $this->unregisterFoundToken($this[$index]); - - parent::offsetUnset($index); - } - - /** - * Set collection item. - * - * Warning! `$newval` must not be typehinted to be compatible with `ArrayAccess::offsetSet` method. - * - * @param int $index - * @param Token $newval - */ - public function offsetSet($index, $newval): void - { - $this->blockStartCache = []; - $this->blockEndCache = []; - - if (!isset($this[$index]) || !$this[$index]->equals($newval)) { - $this->changed = true; - - if (isset($this[$index])) { - $this->unregisterFoundToken($this[$index]); - } - - $this->registerFoundToken($newval); - } - - parent::offsetSet($index, $newval); - } - - /** - * Clear internal flag if collection was changed and flag for all collection's items. - */ - public function clearChanged(): void - { - $this->changed = false; - } - - /** - * Clear empty tokens. - * - * Empty tokens can occur e.g. after calling clear on item of collection. - */ - public function clearEmptyTokens(): void - { - $limit = $this->count(); - - for ($index = 0; $index < $limit; ++$index) { - if ($this->isEmptyAt($index)) { - break; - } - } - - // no empty token found, therefore there is no need to override collection - if ($limit === $index) { - return; - } - - for ($count = $index; $index < $limit; ++$index) { - if (!$this->isEmptyAt($index)) { - // use directly for speed, skip the register of token kinds found etc. - parent::offsetSet($count++, $this[$index]); - } - } - - // we are moving the tokens, we need to clear the indices Cache - $this->blockStartCache = []; - $this->blockEndCache = []; - - $this->setSize($count); - } - - /** - * Ensure that on given index is a whitespace with given kind. - * - * If there is a whitespace then it's content will be modified. - * If not - the new Token will be added. - * - * @param int $index index - * @param int $indexOffset index offset for Token insertion - * @param string $whitespace whitespace to set - * - * @return bool if new Token was added - */ - public function ensureWhitespaceAtIndex(int $index, int $indexOffset, string $whitespace): bool - { - $removeLastCommentLine = static function (self $tokens, int $index, int $indexOffset, string $whitespace): string { - $token = $tokens[$index]; - - if (1 === $indexOffset && $token->isGivenKind(T_OPEN_TAG)) { - if (str_starts_with($whitespace, "\r\n")) { - $tokens[$index] = new Token([T_OPEN_TAG, rtrim($token->getContent())."\r\n"]); - - return \strlen($whitespace) > 2 // @TODO: can be removed on PHP 8; https://php.net/manual/en/function.substr.php - ? substr($whitespace, 2) - : '' - ; - } - - $tokens[$index] = new Token([T_OPEN_TAG, rtrim($token->getContent()).$whitespace[0]]); - - return \strlen($whitespace) > 1 // @TODO: can be removed on PHP 8; https://php.net/manual/en/function.substr.php - ? substr($whitespace, 1) - : '' - ; - } - - return $whitespace; - }; - - if ($this[$index]->isWhitespace()) { - $whitespace = $removeLastCommentLine($this, $index - 1, $indexOffset, $whitespace); - - if ('' === $whitespace) { - $this->clearAt($index); - } else { - $this[$index] = new Token([T_WHITESPACE, $whitespace]); - } - - return false; - } - - $whitespace = $removeLastCommentLine($this, $index, $indexOffset, $whitespace); - - if ('' === $whitespace) { - return false; - } - - $this->insertAt( - $index + $indexOffset, - [new Token([T_WHITESPACE, $whitespace])] - ); - - return true; - } - - /** - * @param self::BLOCK_TYPE_* $type type of block - * @param int $searchIndex index of opening brace - * - * @return int index of closing brace - */ - public function findBlockEnd(int $type, int $searchIndex): int - { - return $this->findOppositeBlockEdge($type, $searchIndex, true); - } - - /** - * @param self::BLOCK_TYPE_* $type type of block - * @param int $searchIndex index of closing brace - * - * @return int index of opening brace - */ - public function findBlockStart(int $type, int $searchIndex): int - { - return $this->findOppositeBlockEdge($type, $searchIndex, false); - } - - /** - * @param int|list $possibleKind kind or array of kinds - * @param int $start optional offset - * @param null|int $end optional limit - * - * @return array>|array - */ - public function findGivenKind($possibleKind, int $start = 0, ?int $end = null): array - { - if (null === $end) { - $end = $this->count(); - } - - $elements = []; - $possibleKinds = (array) $possibleKind; - - foreach ($possibleKinds as $kind) { - $elements[$kind] = []; - } - - $possibleKinds = array_filter($possibleKinds, fn ($kind): bool => $this->isTokenKindFound($kind)); - - if (\count($possibleKinds) > 0) { - for ($i = $start; $i < $end; ++$i) { - $token = $this[$i]; - if ($token->isGivenKind($possibleKinds)) { - $elements[$token->getId()][$i] = $token; - } - } - } - - return \is_array($possibleKind) ? $elements : $elements[$possibleKind]; - } - - public function generateCode(): string - { - $code = $this->generatePartialCode(0, \count($this) - 1); - $this->changeCodeHash(self::calculateCodeHash($code)); - - return $code; - } - - /** - * Generate code from tokens between given indices. - * - * @param int $start start index - * @param int $end end index - */ - public function generatePartialCode(int $start, int $end): string - { - $code = ''; - - for ($i = $start; $i <= $end; ++$i) { - $code .= $this[$i]->getContent(); - } - - return $code; - } - - /** - * Get hash of code. - */ - public function getCodeHash(): string - { - return $this->codeHash; - } - - /** - * Get index for closest next token which is non whitespace. - * - * This method is shorthand for getNonWhitespaceSibling method. - * - * @param int $index token index - * @param null|string $whitespaces whitespaces characters for Token::isWhitespace - */ - public function getNextNonWhitespace(int $index, ?string $whitespaces = null): ?int - { - return $this->getNonWhitespaceSibling($index, 1, $whitespaces); - } - - /** - * Get index for closest next token of given kind. - * - * This method is shorthand for getTokenOfKindSibling method. - * - * @param int $index token index - * @param list $tokens possible tokens - * @param bool $caseSensitive perform a case sensitive comparison - */ - public function getNextTokenOfKind(int $index, array $tokens = [], bool $caseSensitive = true): ?int - { - return $this->getTokenOfKindSibling($index, 1, $tokens, $caseSensitive); - } - - /** - * Get index for closest sibling token which is non whitespace. - * - * @param int $index token index - * @param -1|1 $direction - * @param null|string $whitespaces whitespaces characters for Token::isWhitespace - */ - public function getNonWhitespaceSibling(int $index, int $direction, ?string $whitespaces = null): ?int - { - while (true) { - $index += $direction; - - if (!$this->offsetExists($index)) { - return null; - } - - if (!$this[$index]->isWhitespace($whitespaces)) { - return $index; - } - } - } - - /** - * Get index for closest previous token which is non whitespace. - * - * This method is shorthand for getNonWhitespaceSibling method. - * - * @param int $index token index - * @param null|string $whitespaces whitespaces characters for Token::isWhitespace - */ - public function getPrevNonWhitespace(int $index, ?string $whitespaces = null): ?int - { - return $this->getNonWhitespaceSibling($index, -1, $whitespaces); - } - - /** - * Get index for closest previous token of given kind. - * This method is shorthand for getTokenOfKindSibling method. - * - * @param int $index token index - * @param list $tokens possible tokens - * @param bool $caseSensitive perform a case sensitive comparison - */ - public function getPrevTokenOfKind(int $index, array $tokens = [], bool $caseSensitive = true): ?int - { - return $this->getTokenOfKindSibling($index, -1, $tokens, $caseSensitive); - } - - /** - * Get index for closest sibling token of given kind. - * - * @param int $index token index - * @param -1|1 $direction - * @param list $tokens possible tokens - * @param bool $caseSensitive perform a case sensitive comparison - */ - public function getTokenOfKindSibling(int $index, int $direction, array $tokens = [], bool $caseSensitive = true): ?int - { - $tokens = array_filter($tokens, function ($token): bool { - return $this->isTokenKindFound($this->extractTokenKind($token)); - }); - - if (0 === \count($tokens)) { - return null; - } - - while (true) { - $index += $direction; - - if (!$this->offsetExists($index)) { - return null; - } - - if ($this[$index]->equalsAny($tokens, $caseSensitive)) { - return $index; - } - } - } - - /** - * Get index for closest sibling token not of given kind. - * - * @param int $index token index - * @param -1|1 $direction - * @param list $tokens possible tokens - */ - public function getTokenNotOfKindSibling(int $index, int $direction, array $tokens = []): ?int - { - return $this->getTokenNotOfKind( - $index, - $direction, - fn (int $a): bool => $this[$a]->equalsAny($tokens), - ); - } - - /** - * Get index for closest sibling token not of given kind. - * - * @param int $index token index - * @param -1|1 $direction - * @param list $kinds possible tokens kinds - */ - public function getTokenNotOfKindsSibling(int $index, int $direction, array $kinds = []): ?int - { - return $this->getTokenNotOfKind( - $index, - $direction, - fn (int $index): bool => $this[$index]->isGivenKind($kinds), - ); - } - - /** - * Get index for closest sibling token that is not a whitespace, comment or attribute. - * - * @param int $index token index - * @param -1|1 $direction - */ - public function getMeaningfulTokenSibling(int $index, int $direction): ?int - { - return $this->getTokenNotOfKindsSibling( - $index, - $direction, - [T_WHITESPACE, T_COMMENT, T_DOC_COMMENT] - ); - } - - /** - * Get index for closest sibling token which is not empty. - * - * @param int $index token index - * @param -1|1 $direction - */ - public function getNonEmptySibling(int $index, int $direction): ?int - { - while (true) { - $index += $direction; - - if (!$this->offsetExists($index)) { - return null; - } - - if (!$this->isEmptyAt($index)) { - return $index; - } - } - } - - /** - * Get index for closest next token that is not a whitespace or comment. - * - * @param int $index token index - */ - public function getNextMeaningfulToken(int $index): ?int - { - return $this->getMeaningfulTokenSibling($index, 1); - } - - /** - * Get index for closest previous token that is not a whitespace or comment. - * - * @param int $index token index - */ - public function getPrevMeaningfulToken(int $index): ?int - { - return $this->getMeaningfulTokenSibling($index, -1); - } - - /** - * Find a sequence of meaningful tokens and returns the array of their locations. - * - * @param list $sequence an array of token (kinds) - * @param int $start start index, defaulting to the start of the file - * @param null|int $end end index, defaulting to the end of the file - * @param bool|list $caseSensitive global case sensitiveness or a list of booleans, whose keys should match - * the ones used in $sequence. If any is missing, the default case-sensitive - * comparison is used - * - * @return null|array an array containing the tokens matching the sequence elements, indexed by their position - */ - public function findSequence(array $sequence, int $start = 0, ?int $end = null, $caseSensitive = true): ?array - { - $sequenceCount = \count($sequence); - if (0 === $sequenceCount) { - throw new \InvalidArgumentException('Invalid sequence.'); - } - - // $end defaults to the end of the collection - $end = null === $end ? \count($this) - 1 : min($end, \count($this) - 1); - - if ($start + $sequenceCount - 1 > $end) { - return null; - } - - $nonMeaningFullKind = [T_COMMENT, T_DOC_COMMENT, T_WHITESPACE]; - - // make sure the sequence content is "meaningful" - foreach ($sequence as $key => $token) { - // if not a Token instance already, we convert it to verify the meaningfulness - if (!$token instanceof Token) { - if (\is_array($token) && !isset($token[1])) { - // fake some content as it is required by the Token constructor, - // although optional for search purposes - $token[1] = 'DUMMY'; - } - - $token = new Token($token); - } - - if ($token->isGivenKind($nonMeaningFullKind)) { - throw new \InvalidArgumentException(sprintf('Non-meaningful token at position: "%s".', $key)); - } - - if ('' === $token->getContent()) { - throw new \InvalidArgumentException(sprintf('Non-meaningful (empty) token at position: "%s".', $key)); - } - } - - foreach ($sequence as $token) { - if (!$this->isTokenKindFound($this->extractTokenKind($token))) { - return null; - } - } - - // remove the first token from the sequence, so we can freely iterate through the sequence after a match to - // the first one is found - $key = key($sequence); - $firstCs = Token::isKeyCaseSensitive($caseSensitive, $key); - $firstToken = $sequence[$key]; - unset($sequence[$key]); - - // begin searching for the first token in the sequence (start included) - $index = $start - 1; - while ($index <= $end) { - $index = $this->getNextTokenOfKind($index, [$firstToken], $firstCs); - - // ensure we found a match and didn't get past the end index - if (null === $index || $index > $end) { - return null; - } - - // initialise the result array with the current index - $result = [$index => $this[$index]]; - - // advance cursor to the current position - $currIdx = $index; - - // iterate through the remaining tokens in the sequence - foreach ($sequence as $key => $token) { - $currIdx = $this->getNextMeaningfulToken($currIdx); - - // ensure we didn't go too far - if (null === $currIdx || $currIdx > $end) { - return null; - } - - if (!$this[$currIdx]->equals($token, Token::isKeyCaseSensitive($caseSensitive, $key))) { - // not a match, restart the outer loop - continue 2; - } - - // append index to the result array - $result[$currIdx] = $this[$currIdx]; - } - - // do we have a complete match? - // hint: $result is bigger than $sequence since the first token has been removed from the latter - if (\count($sequence) < \count($result)) { - return $result; - } - } - - return null; - } - - /** - * Insert instances of Token inside collection. - * - * @param int $index start inserting index - * @param list|Token|Tokens $items instances of Token to insert - */ - public function insertAt(int $index, $items): void - { - $this->insertSlices([$index => $items]); - } - - /** - * Insert a slices or individual Tokens into multiple places in a single run. - * - * This approach is kind-of an experiment - it's proven to improve performance a lot for big files that needs plenty of new tickets to be inserted, - * like edge case example of 3.7h vs 4s (https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/3996#issuecomment-455617637), - * yet at same time changing a logic of fixers in not-always easy way. - * - * To be discussed: - * - should we always aim to use this method? - * - should we deprecate `insertAt` method ? - * - * The `$slices` parameter is an assoc array, in which: - * - index: starting point for inserting of individual slice, with indices being relatives to original array collection before any Token inserted - * - value under index: a slice of Tokens to be inserted - * - * @internal - * - * @param array|Token|Tokens> $slices - */ - public function insertSlices(array $slices): void - { - $itemsCount = 0; - - foreach ($slices as $slice) { - $itemsCount += \is_array($slice) || $slice instanceof self ? \count($slice) : 1; - } - - if (0 === $itemsCount) { - return; - } - - $oldSize = \count($this); - $this->changed = true; - $this->blockStartCache = []; - $this->blockEndCache = []; - $this->setSize($oldSize + $itemsCount); - - krsort($slices); - $farthestSliceIndex = key($slices); - - // We check only the farthest index, if it's within the size of collection, other indices will be valid too. - if (!\is_int($farthestSliceIndex) || $farthestSliceIndex > $oldSize) { - throw new \OutOfBoundsException(sprintf('Cannot insert index "%s" outside of collection.', $farthestSliceIndex)); - } - - $previousSliceIndex = $oldSize; - - // since we only move already existing items around, we directly call into SplFixedArray::offset* methods. - // that way we get around additional overhead this class adds with overridden offset* methods. - foreach ($slices as $index => $slice) { - if (!\is_int($index) || $index < 0) { - throw new \OutOfBoundsException(sprintf('Invalid index "%s".', $index)); - } - - $slice = \is_array($slice) || $slice instanceof self ? $slice : [$slice]; - $sliceCount = \count($slice); - - for ($i = $previousSliceIndex - 1; $i >= $index; --$i) { - parent::offsetSet($i + $itemsCount, parent::offsetGet($i)); - } - - $previousSliceIndex = $index; - $itemsCount -= $sliceCount; - - foreach ($slice as $indexItem => $item) { - if ('' === $item->getContent()) { - throw new \InvalidArgumentException('Must not add empty token to collection.'); - } - - $this->registerFoundToken($item); - - parent::offsetSet($index + $itemsCount + $indexItem, $item); - } - } - } - - /** - * Check if collection was change: collection itself (like insert new tokens) or any of collection's elements. - */ - public function isChanged(): bool - { - return $this->changed; - } - - public function isEmptyAt(int $index): bool - { - $token = $this[$index]; - - return null === $token->getId() && '' === $token->getContent(); - } - - public function clearAt(int $index): void - { - $this[$index] = new Token(''); - } - - /** - * Override tokens at given range. - * - * @param int $indexStart start overriding index - * @param int $indexEnd end overriding index - * @param array|Tokens $items tokens to insert - */ - public function overrideRange(int $indexStart, int $indexEnd, iterable $items): void - { - $indexToChange = $indexEnd - $indexStart + 1; - $itemsCount = \count($items); - - // If we want to add more items than passed range contains we need to - // add placeholders for overhead items. - if ($itemsCount > $indexToChange) { - $placeholders = []; - - while ($itemsCount > $indexToChange) { - $placeholders[] = new Token('__PLACEHOLDER__'); - ++$indexToChange; - } - - $this->insertAt($indexEnd + 1, $placeholders); - } - - // Override each items. - foreach ($items as $itemIndex => $item) { - $this[$indexStart + $itemIndex] = $item; - } - - // If we want to add fewer tokens than passed range contains then clear - // not needed tokens. - if ($itemsCount < $indexToChange) { - $this->clearRange($indexStart + $itemsCount, $indexEnd); - } - } - - /** - * @param null|string $whitespaces optional whitespaces characters for Token::isWhitespace - */ - public function removeLeadingWhitespace(int $index, ?string $whitespaces = null): void - { - $this->removeWhitespaceSafely($index, -1, $whitespaces); - } - - /** - * @param null|string $whitespaces optional whitespaces characters for Token::isWhitespace - */ - public function removeTrailingWhitespace(int $index, ?string $whitespaces = null): void - { - $this->removeWhitespaceSafely($index, 1, $whitespaces); - } - - /** - * Set code. Clear all current content and replace it by new Token items generated from code directly. - * - * @param string $code PHP code - */ - public function setCode(string $code): void - { - // No need to work when the code is the same. - // That is how we avoid a lot of work and setting changed flag. - if ($code === $this->generateCode()) { - return; - } - - // clear memory - $this->setSize(0); - - $tokens = token_get_all($code, TOKEN_PARSE); - - $this->setSize(\count($tokens)); - - foreach ($tokens as $index => $token) { - $this[$index] = new Token($token); - } - - $this->applyTransformers(); - - $this->foundTokenKinds = []; - - foreach ($this as $token) { - $this->registerFoundToken($token); - } - - if (\PHP_VERSION_ID < 80000) { - $this->rewind(); - } - - $this->changeCodeHash(self::calculateCodeHash($code)); - $this->changed = true; - } - - public function toJson(): string - { - $output = new \SplFixedArray(\count($this)); - - foreach ($this as $index => $token) { - $output[$index] = $token->toArray(); - } - - if (\PHP_VERSION_ID < 80000) { - $this->rewind(); - } - - return json_encode($output, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK); - } - - /** - * Check if all token kinds given as argument are found. - * - * @param list $tokenKinds - */ - public function isAllTokenKindsFound(array $tokenKinds): bool - { - foreach ($tokenKinds as $tokenKind) { - if (empty($this->foundTokenKinds[$tokenKind])) { - return false; - } - } - - return true; - } - - /** - * Check if any token kind given as argument is found. - * - * @param list $tokenKinds - */ - public function isAnyTokenKindsFound(array $tokenKinds): bool - { - foreach ($tokenKinds as $tokenKind) { - if (!empty($this->foundTokenKinds[$tokenKind])) { - return true; - } - } - - return false; - } - - /** - * Check if token kind given as argument is found. - * - * @param int|string $tokenKind - */ - public function isTokenKindFound($tokenKind): bool - { - return !empty($this->foundTokenKinds[$tokenKind]); - } - - /** - * @param int|string $tokenKind - */ - public function countTokenKind($tokenKind): int - { - return $this->foundTokenKinds[$tokenKind] ?? 0; - } - - /** - * Clear tokens in the given range. - */ - public function clearRange(int $indexStart, int $indexEnd): void - { - for ($i = $indexStart; $i <= $indexEnd; ++$i) { - $this->clearAt($i); - } - } - - /** - * Checks for monolithic PHP code. - * - * Checks that the code is pure PHP code, in a single code block, starting - * with an open tag. - */ - public function isMonolithicPhp(): bool - { - if (0 === $this->count()) { - return false; - } - - if ($this->countTokenKind(T_INLINE_HTML) > 1) { - return false; - } - - if (1 === $this->countTokenKind(T_INLINE_HTML)) { - return 1 === Preg::match('/^#!.+$/', $this[0]->getContent()); - } - - return 1 === ($this->countTokenKind(T_OPEN_TAG) + $this->countTokenKind(T_OPEN_TAG_WITH_ECHO)); - } - - /** - * @param int $start start index - * @param int $end end index - */ - public function isPartialCodeMultiline(int $start, int $end): bool - { - for ($i = $start; $i <= $end; ++$i) { - if (str_contains($this[$i]->getContent(), "\n")) { - return true; - } - } - - return false; - } - - public function hasAlternativeSyntax(): bool - { - return $this->isAnyTokenKindsFound([ - T_ENDDECLARE, - T_ENDFOR, - T_ENDFOREACH, - T_ENDIF, - T_ENDSWITCH, - T_ENDWHILE, - ]); - } - - public function clearTokenAndMergeSurroundingWhitespace(int $index): void - { - $count = \count($this); - $this->clearAt($index); - - if ($index === $count - 1) { - return; - } - - $nextIndex = $this->getNonEmptySibling($index, 1); - - if (null === $nextIndex || !$this[$nextIndex]->isWhitespace()) { - return; - } - - $prevIndex = $this->getNonEmptySibling($index, -1); - - if ($this[$prevIndex]->isWhitespace()) { - $this[$prevIndex] = new Token([T_WHITESPACE, $this[$prevIndex]->getContent().$this[$nextIndex]->getContent()]); - } elseif ($this->isEmptyAt($prevIndex + 1)) { - $this[$prevIndex + 1] = new Token([T_WHITESPACE, $this[$nextIndex]->getContent()]); - } - - $this->clearAt($nextIndex); - } - - /** - * @internal - */ - protected function applyTransformers(): void - { - $transformers = Transformers::createSingleton(); - $transformers->transform($this); - } - - /** - * @param -1|1 $direction - */ - private function removeWhitespaceSafely(int $index, int $direction, ?string $whitespaces = null): void - { - $whitespaceIndex = $this->getNonEmptySibling($index, $direction); - if (isset($this[$whitespaceIndex]) && $this[$whitespaceIndex]->isWhitespace()) { - $newContent = ''; - $tokenToCheck = $this[$whitespaceIndex]; - - // if the token candidate to remove is preceded by single line comment we do not consider the new line after this comment as part of T_WHITESPACE - if (isset($this[$whitespaceIndex - 1]) && $this[$whitespaceIndex - 1]->isComment() && !str_starts_with($this[$whitespaceIndex - 1]->getContent(), '/*')) { - [, $newContent, $whitespacesToCheck] = Preg::split('/^(\R)/', $this[$whitespaceIndex]->getContent(), -1, PREG_SPLIT_DELIM_CAPTURE); - - if ('' === $whitespacesToCheck) { - return; - } - - $tokenToCheck = new Token([T_WHITESPACE, $whitespacesToCheck]); - } - - if (!$tokenToCheck->isWhitespace($whitespaces)) { - return; - } - - if ('' === $newContent) { - $this->clearAt($whitespaceIndex); - } else { - $this[$whitespaceIndex] = new Token([T_WHITESPACE, $newContent]); - } - } - } - - /** - * @param self::BLOCK_TYPE_* $type type of block - * @param int $searchIndex index of starting brace - * @param bool $findEnd if method should find block's end or start - * - * @return int index of opposite brace - */ - private function findOppositeBlockEdge(int $type, int $searchIndex, bool $findEnd): int - { - $blockEdgeDefinitions = self::getBlockEdgeDefinitions(); - - if (!isset($blockEdgeDefinitions[$type])) { - throw new \InvalidArgumentException(sprintf('Invalid param type: "%s".', $type)); - } - - if ($findEnd && isset($this->blockStartCache[$searchIndex])) { - return $this->blockStartCache[$searchIndex]; - } - - if (!$findEnd && isset($this->blockEndCache[$searchIndex])) { - return $this->blockEndCache[$searchIndex]; - } - - $startEdge = $blockEdgeDefinitions[$type]['start']; - $endEdge = $blockEdgeDefinitions[$type]['end']; - $startIndex = $searchIndex; - $endIndex = $this->count() - 1; - $indexOffset = 1; - - if (!$findEnd) { - [$startEdge, $endEdge] = [$endEdge, $startEdge]; - $indexOffset = -1; - $endIndex = 0; - } - - if (!$this[$startIndex]->equals($startEdge)) { - throw new \InvalidArgumentException(sprintf('Invalid param $startIndex - not a proper block "%s".', $findEnd ? 'start' : 'end')); - } - - $blockLevel = 0; - - for ($index = $startIndex; $index !== $endIndex; $index += $indexOffset) { - $token = $this[$index]; - - if ($token->equals($startEdge)) { - ++$blockLevel; - - continue; - } - - if ($token->equals($endEdge)) { - --$blockLevel; - - if (0 === $blockLevel) { - break; - } - } - } - - if (!$this[$index]->equals($endEdge)) { - throw new \UnexpectedValueException(sprintf('Missing block "%s".', $findEnd ? 'end' : 'start')); - } - - if ($startIndex < $index) { - $this->blockStartCache[$startIndex] = $index; - $this->blockEndCache[$index] = $startIndex; - } else { - $this->blockStartCache[$index] = $startIndex; - $this->blockEndCache[$startIndex] = $index; - } - - return $index; - } - - /** - * Calculate hash for code. - */ - private static function calculateCodeHash(string $code): string - { - return CodeHasher::calculateCodeHash($code); - } - - /** - * Get cache value for given key. - * - * @param string $key item key - */ - private static function getCache(string $key): self - { - if (!self::hasCache($key)) { - throw new \OutOfBoundsException(sprintf('Unknown cache key: "%s".', $key)); - } - - return self::$cache[$key]; - } - - /** - * Check if given key exists in cache. - * - * @param string $key item key - */ - private static function hasCache(string $key): bool - { - return isset(self::$cache[$key]); - } - - /** - * @param string $key item key - * @param Tokens $value item value - */ - private static function setCache(string $key, self $value): void - { - self::$cache[$key] = $value; - } - - /** - * Change code hash. - * - * Remove old cache and set new one. - * - * @param string $codeHash new code hash - */ - private function changeCodeHash(string $codeHash): void - { - if (null !== $this->codeHash) { - self::clearCache($this->codeHash); - } - - $this->codeHash = $codeHash; - self::setCache($this->codeHash, $this); - } - - /** - * Register token as found. - * - * @param array{int}|string|Token $token token prototype - */ - private function registerFoundToken($token): void - { - // inlined extractTokenKind() call on the hot path - $tokenKind = $token instanceof Token - ? ($token->isArray() ? $token->getId() : $token->getContent()) - : (\is_array($token) ? $token[0] : $token) - ; - - $this->foundTokenKinds[$tokenKind] ??= 0; - ++$this->foundTokenKinds[$tokenKind]; - } - - /** - * Register token as found. - * - * @param array{int}|string|Token $token token prototype - */ - private function unregisterFoundToken($token): void - { - // inlined extractTokenKind() call on the hot path - $tokenKind = $token instanceof Token - ? ($token->isArray() ? $token->getId() : $token->getContent()) - : (\is_array($token) ? $token[0] : $token) - ; - - if (!isset($this->foundTokenKinds[$tokenKind])) { - return; - } - - --$this->foundTokenKinds[$tokenKind]; - } - - /** - * @param array{int}|string|Token $token token prototype - * - * @return int|string - */ - private function extractTokenKind($token) - { - return $token instanceof Token - ? ($token->isArray() ? $token->getId() : $token->getContent()) - : (\is_array($token) ? $token[0] : $token) - ; - } - - /** - * @param int $index token index - * @param -1|1 $direction - * @param callable(int): bool $filter - */ - private function getTokenNotOfKind(int $index, int $direction, callable $filter): ?int - { - while (true) { - $index += $direction; - - if (!$this->offsetExists($index)) { - return null; - } - - if ($this->isEmptyAt($index) || $filter($index)) { - continue; - } - - return $index; - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php deleted file mode 100644 index 12d21daa..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TokensAnalyzer.php +++ /dev/null @@ -1,766 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer; -use PhpCsFixer\Tokenizer\Analyzer\GotoLabelAnalyzer; - -/** - * Analyzer of Tokens collection. - * - * Its role is to provide the ability to analyze collection. - * - * @author Dariusz Rumiński - * @author Gregor Harlan - * - * @internal - */ -final class TokensAnalyzer -{ - /** - * Tokens collection instance. - */ - private Tokens $tokens; - - private ?GotoLabelAnalyzer $gotoLabelAnalyzer = null; - - public function __construct(Tokens $tokens) - { - $this->tokens = $tokens; - } - - /** - * Get indices of methods and properties in classy code (classes, interfaces and traits). - * - * @return array - */ - public function getClassyElements(): array - { - $elements = []; - - for ($index = 1, $count = \count($this->tokens) - 2; $index < $count; ++$index) { - if ($this->tokens[$index]->isClassy()) { - [$index, $newElements] = $this->findClassyElements($index, $index); - $elements += $newElements; - } - } - - ksort($elements); - - return $elements; - } - - /** - * Get indices of namespace uses. - * - * @param bool $perNamespace Return namespace uses per namespace - * - * @return ($perNamespace is true ? array> : list) - */ - public function getImportUseIndexes(bool $perNamespace = false): array - { - $tokens = $this->tokens; - - $uses = []; - $namespaceIndex = 0; - - for ($index = 0, $limit = $tokens->count(); $index < $limit; ++$index) { - $token = $tokens[$index]; - - if ($token->isGivenKind(T_NAMESPACE)) { - $nextTokenIndex = $tokens->getNextTokenOfKind($index, [';', '{']); - $nextToken = $tokens[$nextTokenIndex]; - - if ($nextToken->equals('{')) { - $index = $nextTokenIndex; - } - - if ($perNamespace) { - ++$namespaceIndex; - } - - continue; - } - - if ($token->isGivenKind(T_USE)) { - $uses[$namespaceIndex][] = $index; - } - } - - if (!$perNamespace && isset($uses[$namespaceIndex])) { - return $uses[$namespaceIndex]; - } - - return $uses; - } - - /** - * Check if there is an array at given index. - */ - public function isArray(int $index): bool - { - return $this->tokens[$index]->isGivenKind([T_ARRAY, CT::T_ARRAY_SQUARE_BRACE_OPEN]); - } - - /** - * Check if the array at index is multiline. - * - * This only checks the root-level of the array. - */ - public function isArrayMultiLine(int $index): bool - { - if (!$this->isArray($index)) { - throw new \InvalidArgumentException(sprintf('Not an array at given index %d.', $index)); - } - - $tokens = $this->tokens; - - // Skip only when it's an array, for short arrays we need the brace for correct - // level counting - if ($tokens[$index]->isGivenKind(T_ARRAY)) { - $index = $tokens->getNextMeaningfulToken($index); - } - - return $this->isBlockMultiline($tokens, $index); - } - - public function isBlockMultiline(Tokens $tokens, int $index): bool - { - $blockType = Tokens::detectBlockType($tokens[$index]); - - if (null === $blockType || !$blockType['isStart']) { - throw new \InvalidArgumentException(sprintf('Not an block start at given index %d.', $index)); - } - - $endIndex = $tokens->findBlockEnd($blockType['type'], $index); - - for (++$index; $index < $endIndex; ++$index) { - $token = $tokens[$index]; - $blockType = Tokens::detectBlockType($token); - - if (null !== $blockType && $blockType['isStart']) { - $index = $tokens->findBlockEnd($blockType['type'], $index); - - continue; - } - - if ( - $token->isWhitespace() - && !$tokens[$index - 1]->isGivenKind(T_END_HEREDOC) - && str_contains($token->getContent(), "\n") - ) { - return true; - } - } - - return false; - } - - /** - * @param int $index Index of the T_FUNCTION token - * - * @return array{visibility: null|T_PRIVATE|T_PROTECTED|T_PUBLIC, static: bool, abstract: bool, final: bool} - */ - public function getMethodAttributes(int $index): array - { - $tokens = $this->tokens; - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_FUNCTION)) { - throw new \LogicException(sprintf('No T_FUNCTION at given index %d, got "%s".', $index, $token->getName())); - } - - $attributes = [ - 'visibility' => null, - 'static' => false, - 'abstract' => false, - 'final' => false, - ]; - - for ($i = $index; $i >= 0; --$i) { - $tokenIndex = $tokens->getPrevMeaningfulToken($i); - - $i = $tokenIndex; - $token = $tokens[$tokenIndex]; - - if ($token->isGivenKind(T_STATIC)) { - $attributes['static'] = true; - - continue; - } - - if ($token->isGivenKind(T_FINAL)) { - $attributes['final'] = true; - - continue; - } - - if ($token->isGivenKind(T_ABSTRACT)) { - $attributes['abstract'] = true; - - continue; - } - - // visibility - - if ($token->isGivenKind(T_PRIVATE)) { - $attributes['visibility'] = T_PRIVATE; - - continue; - } - - if ($token->isGivenKind(T_PROTECTED)) { - $attributes['visibility'] = T_PROTECTED; - - continue; - } - - if ($token->isGivenKind(T_PUBLIC)) { - $attributes['visibility'] = T_PUBLIC; - - continue; - } - - // found a meaningful token that is not part of - // the function signature; stop looking - break; - } - - return $attributes; - } - - /** - * Check if there is an anonymous class under given index. - */ - public function isAnonymousClass(int $index): bool - { - if (!$this->tokens[$index]->isClassy()) { - throw new \LogicException(sprintf('No classy token at given index %d.', $index)); - } - - if (!$this->tokens[$index]->isGivenKind(T_CLASS)) { - return false; - } - - $index = $this->tokens->getPrevMeaningfulToken($index); - - while ($this->tokens[$index]->isGivenKind(CT::T_ATTRIBUTE_CLOSE)) { - $index = $this->tokens->findBlockStart(Tokens::BLOCK_TYPE_ATTRIBUTE, $index); - $index = $this->tokens->getPrevMeaningfulToken($index); - } - - return $this->tokens[$index]->isGivenKind(T_NEW); - } - - /** - * Check if the function under given index is a lambda. - */ - public function isLambda(int $index): bool - { - if (!$this->tokens[$index]->isGivenKind([T_FUNCTION, T_FN])) { - throw new \LogicException(sprintf('No T_FUNCTION or T_FN at given index %d, got "%s".', $index, $this->tokens[$index]->getName())); - } - - $startParenthesisIndex = $this->tokens->getNextMeaningfulToken($index); - $startParenthesisToken = $this->tokens[$startParenthesisIndex]; - - // skip & for `function & () {}` syntax - if ($startParenthesisToken->isGivenKind(CT::T_RETURN_REF)) { - $startParenthesisIndex = $this->tokens->getNextMeaningfulToken($startParenthesisIndex); - $startParenthesisToken = $this->tokens[$startParenthesisIndex]; - } - - return $startParenthesisToken->equals('('); - } - - /** - * Check if the T_STRING under given index is a constant invocation. - */ - public function isConstantInvocation(int $index): bool - { - if (!$this->tokens[$index]->isGivenKind(T_STRING)) { - throw new \LogicException(sprintf('No T_STRING at given index %d, got "%s".', $index, $this->tokens[$index]->getName())); - } - - $nextIndex = $this->tokens->getNextMeaningfulToken($index); - - if ( - $this->tokens[$nextIndex]->equalsAny(['(', '{']) - || $this->tokens[$nextIndex]->isGivenKind([T_AS, T_DOUBLE_COLON, T_ELLIPSIS, T_NS_SEPARATOR, CT::T_RETURN_REF, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION, T_VARIABLE]) - ) { - return false; - } - - $prevIndex = $this->tokens->getPrevMeaningfulToken($index); - - if ($this->tokens[$prevIndex]->isGivenKind([T_AS, T_CLASS, T_CONST, T_DOUBLE_COLON, T_FUNCTION, T_GOTO, CT::T_GROUP_IMPORT_BRACE_OPEN, T_INTERFACE, T_TRAIT, CT::T_TYPE_COLON, CT::T_TYPE_ALTERNATION, CT::T_TYPE_INTERSECTION]) || $this->tokens[$prevIndex]->isObjectOperator()) { - return false; - } - - while ($this->tokens[$prevIndex]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_NS_SEPARATOR, T_STRING])) { - $prevIndex = $this->tokens->getPrevMeaningfulToken($prevIndex); - } - - if ($this->tokens[$prevIndex]->isGivenKind([CT::T_CONST_IMPORT, T_EXTENDS, CT::T_FUNCTION_IMPORT, T_IMPLEMENTS, T_INSTANCEOF, T_INSTEADOF, T_NAMESPACE, T_NEW, CT::T_NULLABLE_TYPE, CT::T_TYPE_COLON, T_USE, CT::T_USE_TRAIT])) { - return false; - } - - // `FOO & $bar` could be: - // - function reference parameter: function baz(Foo & $bar) {} - // - bit operator: $x = FOO & $bar; - if ($this->tokens[$nextIndex]->equals('&') && $this->tokens[$this->tokens->getNextMeaningfulToken($nextIndex)]->isGivenKind(T_VARIABLE)) { - $checkIndex = $this->tokens->getPrevTokenOfKind($prevIndex, [';', '{', '}', [T_FUNCTION], [T_OPEN_TAG], [T_OPEN_TAG_WITH_ECHO]]); - - if ($this->tokens[$checkIndex]->isGivenKind(T_FUNCTION)) { - return false; - } - } - - // check for `extends`/`implements`/`use` list - if ($this->tokens[$prevIndex]->equals(',')) { - $checkIndex = $prevIndex; - - while ($this->tokens[$checkIndex]->equalsAny([',', [T_AS], [CT::T_NAMESPACE_OPERATOR], [T_NS_SEPARATOR], [T_STRING]])) { - $checkIndex = $this->tokens->getPrevMeaningfulToken($checkIndex); - } - - if ($this->tokens[$checkIndex]->isGivenKind([T_EXTENDS, CT::T_GROUP_IMPORT_BRACE_OPEN, T_IMPLEMENTS, T_USE, CT::T_USE_TRAIT])) { - return false; - } - } - - // check for array in double quoted string: `"..$foo[bar].."` - if ($this->tokens[$prevIndex]->equals('[') && $this->tokens[$nextIndex]->equals(']')) { - $checkToken = $this->tokens[$this->tokens->getNextMeaningfulToken($nextIndex)]; - - if ($checkToken->equals('"') || $checkToken->isGivenKind([T_CURLY_OPEN, T_DOLLAR_OPEN_CURLY_BRACES, T_ENCAPSED_AND_WHITESPACE, T_VARIABLE])) { - return false; - } - } - - // check for attribute: `#[Foo]` - if (AttributeAnalyzer::isAttribute($this->tokens, $index)) { - return false; - } - - // check for goto label - if ($this->tokens[$nextIndex]->equals(':')) { - if (null === $this->gotoLabelAnalyzer) { - $this->gotoLabelAnalyzer = new GotoLabelAnalyzer(); - } - - if ($this->gotoLabelAnalyzer->belongsToGoToLabel($this->tokens, $nextIndex)) { - return false; - } - } - - // check for non-capturing catches - - while ($this->tokens[$prevIndex]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_NS_SEPARATOR, T_STRING, CT::T_TYPE_ALTERNATION])) { - $prevIndex = $this->tokens->getPrevMeaningfulToken($prevIndex); - } - - if ($this->tokens[$prevIndex]->equals('(')) { - $prevPrevIndex = $this->tokens->getPrevMeaningfulToken($prevIndex); - - if ($this->tokens[$prevPrevIndex]->isGivenKind(T_CATCH)) { - return false; - } - } - - return true; - } - - /** - * Checks if there is a unary successor operator under given index. - */ - public function isUnarySuccessorOperator(int $index): bool - { - static $allowedPrevToken = [ - ']', - [T_STRING], - [T_VARIABLE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - ]; - - $tokens = $this->tokens; - $token = $tokens[$index]; - - if (!$token->isGivenKind([T_INC, T_DEC])) { - return false; - } - - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - return $prevToken->equalsAny($allowedPrevToken); - } - - /** - * Checks if there is a unary predecessor operator under given index. - */ - public function isUnaryPredecessorOperator(int $index): bool - { - static $potentialSuccessorOperator = [T_INC, T_DEC]; - - static $potentialBinaryOperator = ['+', '-', '&', [CT::T_RETURN_REF]]; - - static $otherOperators; - - if (null === $otherOperators) { - $otherOperators = ['!', '~', '@', [T_ELLIPSIS]]; - } - - static $disallowedPrevTokens; - - if (null === $disallowedPrevTokens) { - $disallowedPrevTokens = [ - ']', - '}', - ')', - '"', - '`', - [CT::T_ARRAY_SQUARE_BRACE_CLOSE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [T_CLASS_C], - [T_CONSTANT_ENCAPSED_STRING], - [T_DEC], - [T_DIR], - [T_DNUMBER], - [T_FILE], - [T_FUNC_C], - [T_INC], - [T_LINE], - [T_LNUMBER], - [T_METHOD_C], - [T_NS_C], - [T_STRING], - [T_TRAIT_C], - [T_VARIABLE], - ]; - } - - $tokens = $this->tokens; - $token = $tokens[$index]; - - if ($token->isGivenKind($potentialSuccessorOperator)) { - return !$this->isUnarySuccessorOperator($index); - } - - if ($token->equalsAny($otherOperators)) { - return true; - } - - if (!$token->equalsAny($potentialBinaryOperator)) { - return false; - } - - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if (!$prevToken->equalsAny($disallowedPrevTokens)) { - return true; - } - - if (!$token->equals('&') || !$prevToken->isGivenKind(T_STRING)) { - return false; - } - - static $searchTokens = [ - ';', - '{', - '}', - [T_FUNCTION], - [T_OPEN_TAG], - [T_OPEN_TAG_WITH_ECHO], - ]; - $prevToken = $tokens[$tokens->getPrevTokenOfKind($index, $searchTokens)]; - - return $prevToken->isGivenKind(T_FUNCTION); - } - - /** - * Checks if there is a binary operator under given index. - */ - public function isBinaryOperator(int $index): bool - { - static $nonArrayOperators = [ - '=' => true, - '*' => true, - '/' => true, - '%' => true, - '<' => true, - '>' => true, - '|' => true, - '^' => true, - '.' => true, - ]; - - static $potentialUnaryNonArrayOperators = [ - '+' => true, - '-' => true, - '&' => true, - ]; - - static $arrayOperators; - - if (null === $arrayOperators) { - $arrayOperators = [ - T_AND_EQUAL => true, // &= - T_BOOLEAN_AND => true, // && - T_BOOLEAN_OR => true, // || - T_CONCAT_EQUAL => true, // .= - T_DIV_EQUAL => true, // /= - T_DOUBLE_ARROW => true, // => - T_IS_EQUAL => true, // == - T_IS_GREATER_OR_EQUAL => true, // >= - T_IS_IDENTICAL => true, // === - T_IS_NOT_EQUAL => true, // !=, <> - T_IS_NOT_IDENTICAL => true, // !== - T_IS_SMALLER_OR_EQUAL => true, // <= - T_LOGICAL_AND => true, // and - T_LOGICAL_OR => true, // or - T_LOGICAL_XOR => true, // xor - T_MINUS_EQUAL => true, // -= - T_MOD_EQUAL => true, // %= - T_MUL_EQUAL => true, // *= - T_OR_EQUAL => true, // |= - T_PLUS_EQUAL => true, // += - T_POW => true, // ** - T_POW_EQUAL => true, // **= - T_SL => true, // << - T_SL_EQUAL => true, // <<= - T_SR => true, // >> - T_SR_EQUAL => true, // >>= - T_XOR_EQUAL => true, // ^= - T_SPACESHIP => true, // <=> - T_COALESCE => true, // ?? - T_COALESCE_EQUAL => true, // ??= - ]; - } - - $tokens = $this->tokens; - $token = $tokens[$index]; - - if ($token->isGivenKind([T_INLINE_HTML, T_ENCAPSED_AND_WHITESPACE, CT::T_TYPE_INTERSECTION])) { - return false; - } - - if (isset($potentialUnaryNonArrayOperators[$token->getContent()])) { - return !$this->isUnaryPredecessorOperator($index); - } - - if ($token->isArray()) { - return isset($arrayOperators[$token->getId()]); - } - - if (isset($nonArrayOperators[$token->getContent()])) { - return true; - } - - return false; - } - - /** - * Check if `T_WHILE` token at given index is `do { ... } while ();` syntax - * and not `while () { ...}`. - */ - public function isWhilePartOfDoWhile(int $index): bool - { - $tokens = $this->tokens; - $token = $tokens[$index]; - - if (!$token->isGivenKind(T_WHILE)) { - throw new \LogicException(sprintf('No T_WHILE at given index %d, got "%s".', $index, $token->getName())); - } - - $endIndex = $tokens->getPrevMeaningfulToken($index); - if (!$tokens[$endIndex]->equals('}')) { - return false; - } - - $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_CURLY_BRACE, $endIndex); - $beforeStartIndex = $tokens->getPrevMeaningfulToken($startIndex); - - return $tokens[$beforeStartIndex]->isGivenKind(T_DO); - } - - public function isSuperGlobal(int $index): bool - { - static $superNames = [ - '$_COOKIE' => true, - '$_ENV' => true, - '$_FILES' => true, - '$_GET' => true, - '$_POST' => true, - '$_REQUEST' => true, - '$_SERVER' => true, - '$_SESSION' => true, - '$GLOBALS' => true, - ]; - - $token = $this->tokens[$index]; - - if (!$token->isGivenKind(T_VARIABLE)) { - return false; - } - - return isset($superNames[strtoupper($token->getContent())]); - } - - /** - * Find classy elements. - * - * Searches in tokens from the classy (start) index till the end (index) of the classy. - * Returns an array; first value is the index until the method has analysed (int), second the found classy elements (array). - * - * @param int $classIndex classy index - * - * @return array{int, array} - */ - private function findClassyElements(int $classIndex, int $index): array - { - $elements = []; - $curlyBracesLevel = 0; - $bracesLevel = 0; - ++$index; // skip the classy index itself - - for ($count = \count($this->tokens); $index < $count; ++$index) { - $token = $this->tokens[$index]; - - if ($token->isGivenKind(T_ENCAPSED_AND_WHITESPACE)) { - continue; - } - - if ($token->isGivenKind(T_CLASS)) { // anonymous class in class - // check for nested anonymous classes inside the new call of an anonymous class, - // for example `new class(function (){new class(function (){new class(function (){}){};}){};}){};` etc. - // if class(XYZ) {} skip till `(` as XYZ might contain functions etc. - - $nestedClassIndex = $index; - $index = $this->tokens->getNextMeaningfulToken($index); - - if ($this->tokens[$index]->equals('(')) { - ++$index; // move after `(` - - for ($nestedBracesLevel = 1; $index < $count; ++$index) { - $token = $this->tokens[$index]; - - if ($token->equals('(')) { - ++$nestedBracesLevel; - - continue; - } - - if ($token->equals(')')) { - --$nestedBracesLevel; - - if (0 === $nestedBracesLevel) { - [$index, $newElements] = $this->findClassyElements($nestedClassIndex, $index); - $elements += $newElements; - - break; - } - - continue; - } - - if ($token->isGivenKind(T_CLASS)) { // anonymous class in class - [$index, $newElements] = $this->findClassyElements($index, $index); - $elements += $newElements; - } - } - } else { - [$index, $newElements] = $this->findClassyElements($nestedClassIndex, $nestedClassIndex); - $elements += $newElements; - } - - continue; - } - - if ($token->equals('(')) { - ++$bracesLevel; - - continue; - } - - if ($token->equals(')')) { - --$bracesLevel; - - continue; - } - - if ($token->equals('{')) { - ++$curlyBracesLevel; - - continue; - } - - if ($token->equals('}')) { - --$curlyBracesLevel; - - if (0 === $curlyBracesLevel) { - break; - } - - continue; - } - - if (1 !== $curlyBracesLevel || !$token->isArray()) { - continue; - } - - if (0 === $bracesLevel && $token->isGivenKind(T_VARIABLE)) { - $elements[$index] = [ - 'classIndex' => $classIndex, - 'token' => $token, - 'type' => 'property', - ]; - - continue; - } - - if ($token->isGivenKind(T_FUNCTION)) { - $elements[$index] = [ - 'classIndex' => $classIndex, - 'token' => $token, - 'type' => 'method', - ]; - } elseif ($token->isGivenKind(T_CONST)) { - $elements[$index] = [ - 'classIndex' => $classIndex, - 'token' => $token, - 'type' => 'const', - ]; - } elseif ($token->isGivenKind(CT::T_USE_TRAIT)) { - $elements[$index] = [ - 'classIndex' => $classIndex, - 'token' => $token, - 'type' => 'trait_import', - ]; - } elseif ($token->isGivenKind(T_CASE)) { - $elements[$index] = [ - 'classIndex' => $classIndex, - 'token' => $token, - 'type' => 'case', - ]; - } - } - - return [$index, $elements]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php deleted file mode 100644 index 69410f7b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.php +++ /dev/null @@ -1,63 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `array` typehint from T_ARRAY into CT::T_ARRAY_TYPEHINT. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ArrayTypehintTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isGivenKind(T_ARRAY)) { - return; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - $nextToken = $tokens[$nextIndex]; - - if (!$nextToken->equals('(')) { - $tokens[$index] = new Token([CT::T_ARRAY_TYPEHINT, $token->getContent()]); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_ARRAY_TYPEHINT]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php deleted file mode 100644 index c099f887..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/AttributeTransformer.php +++ /dev/null @@ -1,79 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transforms attribute related Tokens. - * - * @internal - */ -final class AttributeTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // must run before all other transformers that might touch attributes - return 200; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$tokens[$index]->isGivenKind(T_ATTRIBUTE)) { - return; - } - - $level = 1; - - do { - ++$index; - - if ($tokens[$index]->equals('[')) { - ++$level; - } elseif ($tokens[$index]->equals(']')) { - --$level; - } - } while (0 < $level); - - $tokens[$index] = new Token([CT::T_ATTRIBUTE_CLOSE, ']']); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_ATTRIBUTE_CLOSE, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php deleted file mode 100644 index 2736c83c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php +++ /dev/null @@ -1,90 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform braced class instantiation braces in `(new Foo())` into CT::T_BRACE_CLASS_INSTANTIATION_OPEN - * and CT::T_BRACE_CLASS_INSTANTIATION_CLOSE. - * - * @author Sebastiaans Stok - * - * @internal - */ -final class BraceClassInstantiationTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // must run after CurlyBraceTransformer and SquareBraceTransformer - return -2; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$tokens[$index]->equals('(') || !$tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_NEW)) { - return; - } - - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->equalsAny([ - ']', - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - [CT::T_ARRAY_SQUARE_BRACE_CLOSE], - [T_ARRAY], - [T_CLASS], - [T_ELSEIF], - [T_FOR], - [T_FOREACH], - [T_IF], - [T_STATIC], - [T_STRING], - [T_SWITCH], - [T_VARIABLE], - [T_WHILE], - ])) { - return; - } - - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $index); - - $tokens[$index] = new Token([CT::T_BRACE_CLASS_INSTANTIATION_OPEN, '(']); - $tokens[$closeIndex] = new Token([CT::T_BRACE_CLASS_INSTANTIATION_CLOSE, ')']); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_BRACE_CLASS_INSTANTIATION_OPEN, CT::T_BRACE_CLASS_INSTANTIATION_CLOSE]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php deleted file mode 100644 index 5a600921..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.php +++ /dev/null @@ -1,66 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `class` class' constant from T_CLASS into CT::T_CLASS_CONSTANT. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ClassConstantTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50500; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equalsAny([ - [T_CLASS, 'class'], - [T_STRING, 'class'], - ], false)) { - return; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - - if ($prevToken->isGivenKind(T_DOUBLE_COLON)) { - $tokens[$index] = new Token([CT::T_CLASS_CONSTANT, $token->getContent()]); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_CLASS_CONSTANT]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php deleted file mode 100644 index aa3d495c..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php +++ /dev/null @@ -1,80 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transforms for Constructor Property Promotion. - * - * Transform T_PUBLIC, T_PROTECTED and T_PRIVATE of Constructor Property Promotion into custom tokens. - * - * @internal - */ -final class ConstructorPromotionTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$tokens[$index]->isGivenKind(T_FUNCTION)) { - return; - } - - $index = $tokens->getNextMeaningfulToken($index); - - if (!$tokens[$index]->isGivenKind(T_STRING) || '__construct' !== strtolower($tokens[$index]->getContent())) { - return; - } - - /** @var int $openIndex */ - $openIndex = $tokens->getNextMeaningfulToken($index); // we are @ '(' now - $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex); - - for ($index = $openIndex; $index < $closeIndex; ++$index) { - if ($tokens[$index]->isGivenKind(T_PUBLIC)) { - $tokens[$index] = new Token([CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, $tokens[$index]->getContent()]); - } elseif ($tokens[$index]->isGivenKind(T_PROTECTED)) { - $tokens[$index] = new Token([CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, $tokens[$index]->getContent()]); - } elseif ($tokens[$index]->isGivenKind(T_PRIVATE)) { - $tokens[$index] = new Token([CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, $tokens[$index]->getContent()]); - } - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED, - CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php deleted file mode 100644 index 14333dc0..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/CurlyBraceTransformer.php +++ /dev/null @@ -1,253 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform discriminate overloaded curly braces tokens. - * - * Performed transformations: - * - closing `}` for T_CURLY_OPEN into CT::T_CURLY_CLOSE, - * - closing `}` for T_DOLLAR_OPEN_CURLY_BRACES into CT::T_DOLLAR_CLOSE_CURLY_BRACES, - * - in `$foo->{$bar}` into CT::T_DYNAMIC_PROP_BRACE_OPEN and CT::T_DYNAMIC_PROP_BRACE_CLOSE, - * - in `${$foo}` into CT::T_DYNAMIC_VAR_BRACE_OPEN and CT::T_DYNAMIC_VAR_BRACE_CLOSE, - * - in `$array{$index}` into CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN and CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE, - * - in `use some\a\{ClassA, ClassB, ClassC as C}` into CT::T_GROUP_IMPORT_BRACE_OPEN, CT::T_GROUP_IMPORT_BRACE_CLOSE. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class CurlyBraceTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - $this->transformIntoCurlyCloseBrace($tokens, $token, $index); - $this->transformIntoDollarCloseBrace($tokens, $token, $index); - $this->transformIntoDynamicPropBraces($tokens, $token, $index); - $this->transformIntoDynamicVarBraces($tokens, $token, $index); - $this->transformIntoCurlyIndexBraces($tokens, $token, $index); - $this->transformIntoGroupUseBraces($tokens, $token, $index); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_CURLY_CLOSE, - CT::T_DOLLAR_CLOSE_CURLY_BRACES, - CT::T_DYNAMIC_PROP_BRACE_OPEN, - CT::T_DYNAMIC_PROP_BRACE_CLOSE, - CT::T_DYNAMIC_VAR_BRACE_OPEN, - CT::T_DYNAMIC_VAR_BRACE_CLOSE, - CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN, - CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE, - CT::T_GROUP_IMPORT_BRACE_OPEN, - CT::T_GROUP_IMPORT_BRACE_CLOSE, - ]; - } - - /** - * Transform closing `}` for T_CURLY_OPEN into CT::T_CURLY_CLOSE. - * - * This should be done at very beginning of curly braces transformations. - */ - private function transformIntoCurlyCloseBrace(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isGivenKind(T_CURLY_OPEN)) { - return; - } - - $level = 1; - - do { - ++$index; - - if ($tokens[$index]->equals('{') || $tokens[$index]->isGivenKind(T_CURLY_OPEN)) { // we count all kind of { - ++$level; - } elseif ($tokens[$index]->equals('}')) { // we count all kind of } - --$level; - } - } while (0 < $level); - - $tokens[$index] = new Token([CT::T_CURLY_CLOSE, '}']); - } - - private function transformIntoDollarCloseBrace(Tokens $tokens, Token $token, int $index): void - { - if ($token->isGivenKind(T_DOLLAR_OPEN_CURLY_BRACES)) { - $nextIndex = $tokens->getNextTokenOfKind($index, ['}']); - $tokens[$nextIndex] = new Token([CT::T_DOLLAR_CLOSE_CURLY_BRACES, '}']); - } - } - - private function transformIntoDynamicPropBraces(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isObjectOperator()) { - return; - } - - if (!$tokens[$index + 1]->equals('{')) { - return; - } - - $openIndex = $index + 1; - $closeIndex = $this->naivelyFindCurlyBlockEnd($tokens, $openIndex); - - $tokens[$openIndex] = new Token([CT::T_DYNAMIC_PROP_BRACE_OPEN, '{']); - $tokens[$closeIndex] = new Token([CT::T_DYNAMIC_PROP_BRACE_CLOSE, '}']); - } - - private function transformIntoDynamicVarBraces(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equals('$')) { - return; - } - - $openIndex = $tokens->getNextMeaningfulToken($index); - - if (null === $openIndex) { - return; - } - - $openToken = $tokens[$openIndex]; - - if (!$openToken->equals('{')) { - return; - } - - $closeIndex = $this->naivelyFindCurlyBlockEnd($tokens, $openIndex); - - $tokens[$openIndex] = new Token([CT::T_DYNAMIC_VAR_BRACE_OPEN, '{']); - $tokens[$closeIndex] = new Token([CT::T_DYNAMIC_VAR_BRACE_CLOSE, '}']); - } - - private function transformIntoCurlyIndexBraces(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equals('{')) { - return; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$prevIndex]->equalsAny([ - [T_STRING], - [T_VARIABLE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - ']', - ')', - ])) { - return; - } - - if ( - $tokens[$prevIndex]->isGivenKind(T_STRING) - && !$tokens[$tokens->getPrevMeaningfulToken($prevIndex)]->isObjectOperator() - ) { - return; - } - - if ( - $tokens[$prevIndex]->equals(')') - && !$tokens[$tokens->getPrevMeaningfulToken( - $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $prevIndex) - )]->isGivenKind(T_ARRAY) - ) { - return; - } - - $closeIndex = $this->naivelyFindCurlyBlockEnd($tokens, $index); - - $tokens[$index] = new Token([CT::T_ARRAY_INDEX_CURLY_BRACE_OPEN, '{']); - $tokens[$closeIndex] = new Token([CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE, '}']); - } - - private function transformIntoGroupUseBraces(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equals('{')) { - return; - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$prevIndex]->isGivenKind(T_NS_SEPARATOR)) { - return; - } - - $closeIndex = $this->naivelyFindCurlyBlockEnd($tokens, $index); - - $tokens[$index] = new Token([CT::T_GROUP_IMPORT_BRACE_OPEN, '{']); - $tokens[$closeIndex] = new Token([CT::T_GROUP_IMPORT_BRACE_CLOSE, '}']); - } - - /** - * We do not want to rely on `$tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index)` here, - * as it relies on block types that are assuming that `}` tokens are already transformed to Custom Tokens that are allowing to distinguish different block types. - * As we are just about to transform `{` and `}` into Custom Tokens by this transformer, thus we need to compare those tokens manually by content without using `Tokens::findBlockEnd`. - */ - private function naivelyFindCurlyBlockEnd(Tokens $tokens, int $startIndex): int - { - if (!$tokens->offsetExists($startIndex)) { - throw new \OutOfBoundsException(sprintf('Unavailable index: "%s".', $startIndex)); - } - - if ('{' !== $tokens[$startIndex]->getContent()) { - throw new \InvalidArgumentException(sprintf('Wrong start index: "%s".', $startIndex)); - } - - $blockLevel = 1; - $endIndex = $tokens->count() - 1; - for ($index = $startIndex + 1; $index !== $endIndex; ++$index) { - $token = $tokens[$index]; - - if ('{' === $token->getContent()) { - ++$blockLevel; - - continue; - } - - if ('}' === $token->getContent()) { - --$blockLevel; - - if (0 === $blockLevel) { - if (!$token->equals('}')) { - throw new \UnexpectedValueException(sprintf('Detected block end for index: "%s" was already transformed into other token type: "%s".', $startIndex, $token->getName())); - } - - return $index; - } - } - } - - throw new \UnexpectedValueException(sprintf('Missing block end for index: "%s".', $startIndex)); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php deleted file mode 100644 index f96a3e61..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.php +++ /dev/null @@ -1,58 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * @internal - */ -final class FirstClassCallableTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80100; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if ( - $token->isGivenKind(T_ELLIPSIS) - && $tokens[$tokens->getPrevMeaningfulToken($index)]->equals('(') - && $tokens[$tokens->getNextMeaningfulToken($index)]->equals(')') - ) { - $tokens[$index] = new Token([CT::T_FIRST_CLASS_CALLABLE, '...']); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_FIRST_CLASS_CALLABLE, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php deleted file mode 100644 index 87395664..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ImportTransformer.php +++ /dev/null @@ -1,84 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform const/function import tokens. - * - * Performed transformations: - * - T_CONST into CT::T_CONST_IMPORT - * - T_FUNCTION into CT::T_FUNCTION_IMPORT - * - * @author Gregor Harlan - * - * @internal - */ -final class ImportTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // Should run after CurlyBraceTransformer and ReturnRefTransformer - return -1; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50600; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isGivenKind([T_CONST, T_FUNCTION])) { - return; - } - - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - - if (!$prevToken->isGivenKind(T_USE)) { - $nextToken = $tokens[$tokens->getNextTokenOfKind($index, ['=', '(', [CT::T_RETURN_REF], [CT::T_GROUP_IMPORT_BRACE_CLOSE]])]; - - if (!$nextToken->isGivenKind(CT::T_GROUP_IMPORT_BRACE_CLOSE)) { - return; - } - } - - $tokens[$index] = new Token([ - $token->isGivenKind(T_FUNCTION) ? CT::T_FUNCTION_IMPORT : CT::T_CONST_IMPORT, - $token->getContent(), - ]); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_CONST_IMPORT, CT::T_FUNCTION_IMPORT]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php deleted file mode 100644 index d8403773..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php +++ /dev/null @@ -1,101 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED and T_NAME_RELATIVE into T_NAMESPACE T_NS_SEPARATOR T_STRING. - * - * @internal - */ -final class NameQualifiedTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - return 1; // must run before NamespaceOperatorTransformer - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if ($token->isGivenKind([T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED])) { - $this->transformQualified($tokens, $token, $index); - } elseif ($token->isGivenKind(T_NAME_RELATIVE)) { - $this->transformRelative($tokens, $token, $index); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return []; - } - - private function transformQualified(Tokens $tokens, Token $token, int $index): void - { - $parts = explode('\\', $token->getContent()); - $newTokens = []; - - if ('' === $parts[0]) { - $newTokens[] = new Token([T_NS_SEPARATOR, '\\']); - array_shift($parts); - } - - foreach ($parts as $part) { - $newTokens[] = new Token([T_STRING, $part]); - $newTokens[] = new Token([T_NS_SEPARATOR, '\\']); - } - - array_pop($newTokens); - - $tokens->overrideRange($index, $index, $newTokens); - } - - private function transformRelative(Tokens $tokens, Token $token, int $index): void - { - $parts = explode('\\', $token->getContent()); - $newTokens = [ - new Token([T_NAMESPACE, array_shift($parts)]), - new Token([T_NS_SEPARATOR, '\\']), - ]; - - foreach ($parts as $part) { - $newTokens[] = new Token([T_STRING, $part]); - $newTokens[] = new Token([T_NS_SEPARATOR, '\\']); - } - - array_pop($newTokens); - - $tokens->overrideRange($index, $index, $newTokens); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php deleted file mode 100644 index e72993f5..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamedArgumentTransformer.php +++ /dev/null @@ -1,85 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform named argument tokens. - * - * @internal - */ -final class NamedArgumentTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // needs to run after TypeColonTransformer - return -15; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$tokens[$index]->equals(':')) { - return; - } - - $stringIndex = $tokens->getPrevMeaningfulToken($index); - - if (!$tokens[$stringIndex]->isGivenKind(T_STRING)) { - return; - } - - $preStringIndex = $tokens->getPrevMeaningfulToken($stringIndex); - - // if equals any [';', '{', '}', [T_OPEN_TAG]] than it is a goto label - // if equals ')' than likely it is a type colon, but sure not a name argument - // if equals '?' than it is part of ternary statement - - if (!$tokens[$preStringIndex]->equalsAny([',', '('])) { - return; - } - - $tokens[$stringIndex] = new Token([CT::T_NAMED_ARGUMENT_NAME, $tokens[$stringIndex]->getContent()]); - $tokens[$index] = new Token([CT::T_NAMED_ARGUMENT_COLON, ':']); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_NAMED_ARGUMENT_COLON, - CT::T_NAMED_ARGUMENT_NAME, - ]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php deleted file mode 100644 index fc740e2a..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NamespaceOperatorTransformer.php +++ /dev/null @@ -1,62 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `namespace` operator from T_NAMESPACE into CT::T_NAMESPACE_OPERATOR. - * - * @author Gregor Harlan - * - * @internal - */ -final class NamespaceOperatorTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50300; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isGivenKind(T_NAMESPACE)) { - return; - } - - $nextIndex = $tokens->getNextMeaningfulToken($index); - - if ($tokens[$nextIndex]->isGivenKind(T_NS_SEPARATOR)) { - $tokens[$index] = new Token([CT::T_NAMESPACE_OPERATOR, $token->getContent()]); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_NAMESPACE_OPERATOR]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php deleted file mode 100644 index c8f17ecf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NullableTypeTransformer.php +++ /dev/null @@ -1,94 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `?` operator into CT::T_NULLABLE_TYPE in `function foo(?Bar $b) {}`. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class NullableTypeTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // needs to run after TypeColonTransformer - return -20; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 70100; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equals('?')) { - return; - } - - static $types; - - if (null === $types) { - $types = [ - '(', - ',', - [CT::T_TYPE_COLON], - [CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC], - [CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED], - [CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE], - [CT::T_ATTRIBUTE_CLOSE], - [T_PRIVATE], - [T_PROTECTED], - [T_PUBLIC], - [T_VAR], - [T_STATIC], - ]; - - if (\defined('T_READONLY')) { // @TODO: drop condition when PHP 8.1+ is required - $types[] = [T_READONLY]; - } - } - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - - if ($tokens[$prevIndex]->equalsAny($types)) { - $tokens[$index] = new Token([CT::T_NULLABLE_TYPE, '?']); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_NULLABLE_TYPE]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php deleted file mode 100644 index c2b2b4a8..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ReturnRefTransformer.php +++ /dev/null @@ -1,56 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `&` operator into CT::T_RETURN_REF in `function & foo() {}`. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ReturnRefTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if ($token->equals('&') && $tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind([T_FUNCTION, T_FN])) { - $tokens[$index] = new Token([CT::T_RETURN_REF, '&']); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_RETURN_REF]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php deleted file mode 100644 index c4ace5d9..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/SquareBraceTransformer.php +++ /dev/null @@ -1,199 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform discriminate overloaded square braces tokens. - * - * Performed transformations: - * - in `[1, 2, 3]` into CT::T_ARRAY_SQUARE_BRACE_OPEN and CT::T_ARRAY_SQUARE_BRACE_CLOSE, - * - in `[$a, &$b, [$c]] = array(1, 2, array(3))` into CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN and CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class SquareBraceTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // must run after CurlyBraceTransformer and AttributeTransformer - return -1; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - // Short array syntax was introduced in PHP 5.4, but the fixer is smart - // enough to handle it even before 5.4. - // Same for array destructing syntax sugar `[` introduced in PHP 7.1. - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if ($this->isArrayDestructing($tokens, $index)) { - $this->transformIntoDestructuringSquareBrace($tokens, $index); - - return; - } - - if ($this->isShortArray($tokens, $index)) { - $this->transformIntoArraySquareBrace($tokens, $index); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [ - CT::T_ARRAY_SQUARE_BRACE_OPEN, - CT::T_ARRAY_SQUARE_BRACE_CLOSE, - CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, - CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, - ]; - } - - private function transformIntoArraySquareBrace(Tokens $tokens, int $index): void - { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, $index); - - $tokens[$index] = new Token([CT::T_ARRAY_SQUARE_BRACE_OPEN, '[']); - $tokens[$endIndex] = new Token([CT::T_ARRAY_SQUARE_BRACE_CLOSE, ']']); - } - - private function transformIntoDestructuringSquareBrace(Tokens $tokens, int $index): void - { - $endIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, $index); - - $tokens[$index] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, '[']); - $tokens[$endIndex] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, ']']); - - $previousMeaningfulIndex = $index; - $index = $tokens->getNextMeaningfulToken($index); - - while ($index < $endIndex) { - if ($tokens[$index]->equals('[') && $tokens[$previousMeaningfulIndex]->equalsAny([[CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN], ','])) { - $tokens[$tokens->findBlockEnd(Tokens::BLOCK_TYPE_INDEX_SQUARE_BRACE, $index)] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_CLOSE, ']']); - $tokens[$index] = new Token([CT::T_DESTRUCTURING_SQUARE_BRACE_OPEN, '[']); - } - - $previousMeaningfulIndex = $index; - $index = $tokens->getNextMeaningfulToken($index); - } - } - - /** - * Check if token under given index is short array opening. - */ - private function isShortArray(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->equals('[')) { - return false; - } - - static $disallowedPrevTokens = [ - ')', - ']', - '}', - '"', - [T_CONSTANT_ENCAPSED_STRING], - [T_STRING], - [T_STRING_VARNAME], - [T_VARIABLE], - [CT::T_ARRAY_SQUARE_BRACE_CLOSE], - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - ]; - - $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)]; - if ($prevToken->equalsAny($disallowedPrevTokens)) { - return false; - } - - $nextToken = $tokens[$tokens->getNextMeaningfulToken($index)]; - if ($nextToken->equals(']')) { - return true; - } - - return !$this->isArrayDestructing($tokens, $index); - } - - private function isArrayDestructing(Tokens $tokens, int $index): bool - { - if (!$tokens[$index]->equals('[')) { - return false; - } - - static $disallowedPrevTokens = [ - ')', - ']', - '"', - [T_CONSTANT_ENCAPSED_STRING], - [T_STRING], - [T_STRING_VARNAME], - [T_VARIABLE], - [CT::T_ARRAY_SQUARE_BRACE_CLOSE], - [CT::T_DYNAMIC_PROP_BRACE_CLOSE], - [CT::T_DYNAMIC_VAR_BRACE_CLOSE], - [CT::T_ARRAY_INDEX_CURLY_BRACE_CLOSE], - ]; - - $prevIndex = $tokens->getPrevMeaningfulToken($index); - $prevToken = $tokens[$prevIndex]; - if ($prevToken->equalsAny($disallowedPrevTokens)) { - return false; - } - - if ($prevToken->isGivenKind(T_AS)) { - return true; - } - - if ($prevToken->isGivenKind(T_DOUBLE_ARROW)) { - $variableIndex = $tokens->getPrevMeaningfulToken($prevIndex); - if (!$tokens[$variableIndex]->isGivenKind(T_VARIABLE)) { - return false; - } - - $prevVariableIndex = $tokens->getPrevMeaningfulToken($variableIndex); - if ($tokens[$prevVariableIndex]->isGivenKind(T_AS)) { - return true; - } - } - - $type = Tokens::detectBlockType($tokens[$index]); - $end = $tokens->findBlockEnd($type['type'], $index); - - $nextToken = $tokens[$tokens->getNextMeaningfulToken($end)]; - - return $nextToken->equals('='); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php deleted file mode 100644 index cbbb7a72..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeAlternationTransformer.php +++ /dev/null @@ -1,69 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTypeTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `|` operator into CT::T_TYPE_ALTERNATION in `function foo(Type1 | Type2 $x) {` - * or `} catch (ExceptionType1 | ExceptionType2 $e) {`. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class TypeAlternationTransformer extends AbstractTypeTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // needs to run after ArrayTypehintTransformer, TypeColonTransformer and AttributeTransformer - return -15; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 70100; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - $this->doProcess($tokens, $index, '|'); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_TYPE_ALTERNATION]; - } - - protected function replaceToken(Tokens $tokens, int $index): void - { - $tokens[$index] = new Token([CT::T_TYPE_ALTERNATION, '|']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php deleted file mode 100644 index a7d90caf..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeColonTransformer.php +++ /dev/null @@ -1,95 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `:` operator into CT::T_TYPE_COLON in `function foo() : int {}`. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class TypeColonTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // needs to run after ReturnRefTransformer and UseTransformer - // and before TypeAlternationTransformer - return -10; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 70000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->equals(':')) { - return; - } - - $endIndex = $tokens->getPrevMeaningfulToken($index); - - if ( - \defined('T_ENUM') // @TODO: drop condition when PHP 8.1+ is required - && $tokens[$tokens->getPrevMeaningfulToken($endIndex)]->isGivenKind(T_ENUM) - ) { - $tokens[$index] = new Token([CT::T_TYPE_COLON, ':']); - - return; - } - - if (!$tokens[$endIndex]->equals(')')) { - return; - } - - $startIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $endIndex); - $prevIndex = $tokens->getPrevMeaningfulToken($startIndex); - $prevToken = $tokens[$prevIndex]; - - // if this could be a function name we need to take one more step - if ($prevToken->isGivenKind(T_STRING)) { - $prevIndex = $tokens->getPrevMeaningfulToken($prevIndex); - $prevToken = $tokens[$prevIndex]; - } - - if ($prevToken->isGivenKind([T_FUNCTION, CT::T_RETURN_REF, CT::T_USE_LAMBDA, T_FN])) { - $tokens[$index] = new Token([CT::T_TYPE_COLON, ':']); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_TYPE_COLON]; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php deleted file mode 100644 index be81fe65..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/TypeIntersectionTransformer.php +++ /dev/null @@ -1,67 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTypeTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform `&` operator into CT::T_TYPE_INTERSECTION in `function foo(Type1 & Type2 $x) {` - * or `} catch (ExceptionType1 & ExceptionType2 $e) {`. - * - * @internal - */ -final class TypeIntersectionTransformer extends AbstractTypeTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // needs to run after ArrayTypehintTransformer, TypeColonTransformer and AttributeTransformer - return -15; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 80100; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - $this->doProcess($tokens, $index, [T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, '&']); - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_TYPE_INTERSECTION]; - } - - protected function replaceToken(Tokens $tokens, int $index): void - { - $tokens[$index] = new Token([CT::T_TYPE_INTERSECTION, '&']); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php deleted file mode 100644 index f2e3ce0b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/UseTransformer.php +++ /dev/null @@ -1,114 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\CT; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Transform T_USE into: - * - CT::T_USE_TRAIT for imports, - * - CT::T_USE_LAMBDA for lambda variable uses. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class UseTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getPriority(): int - { - // Should run after CurlyBraceTransformer and before TypeColonTransformer - return -5; - } - - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50300; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if ($token->isGivenKind(T_USE) && $this->isUseForLambda($tokens, $index)) { - $tokens[$index] = new Token([CT::T_USE_LAMBDA, $token->getContent()]); - - return; - } - - // Only search inside class/trait body for `T_USE` for traits. - // Cannot import traits inside interfaces or anywhere else - - $classTypes = [T_TRAIT]; - - if (\defined('T_ENUM')) { // @TODO: drop condition when PHP 8.1+ is required - $classTypes[] = T_ENUM; - } - - if ($token->isGivenKind(T_CLASS)) { - if ($tokens[$tokens->getPrevMeaningfulToken($index)]->isGivenKind(T_DOUBLE_COLON)) { - return; - } - } elseif (!$token->isGivenKind($classTypes)) { - return; - } - - $index = $tokens->getNextTokenOfKind($index, ['{']); - $innerLimit = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $index); - - while ($index < $innerLimit) { - $token = $tokens[++$index]; - - if (!$token->isGivenKind(T_USE)) { - continue; - } - - if ($this->isUseForLambda($tokens, $index)) { - $tokens[$index] = new Token([CT::T_USE_LAMBDA, $token->getContent()]); - } else { - $tokens[$index] = new Token([CT::T_USE_TRAIT, $token->getContent()]); - } - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return [CT::T_USE_TRAIT, CT::T_USE_LAMBDA]; - } - - /** - * Check if token under given index is `use` statement for lambda function. - */ - private function isUseForLambda(Tokens $tokens, int $index): bool - { - $nextToken = $tokens[$tokens->getNextMeaningfulToken($index)]; - - // test `function () use ($foo) {}` case - return $nextToken->equals('('); - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php deleted file mode 100644 index bf81faac..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/WhitespacyCommentTransformer.php +++ /dev/null @@ -1,73 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer\Transformer; - -use PhpCsFixer\Tokenizer\AbstractTransformer; -use PhpCsFixer\Tokenizer\Token; -use PhpCsFixer\Tokenizer\Tokens; - -/** - * Move trailing whitespaces from comments and docs into following T_WHITESPACE token. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class WhitespacyCommentTransformer extends AbstractTransformer -{ - /** - * {@inheritdoc} - */ - public function getRequiredPhpVersionId(): int - { - return 50000; - } - - /** - * {@inheritdoc} - */ - public function process(Tokens $tokens, Token $token, int $index): void - { - if (!$token->isComment()) { - return; - } - - $content = $token->getContent(); - $trimmedContent = rtrim($content); - - // nothing trimmed, nothing to do - if ($content === $trimmedContent) { - return; - } - - $whitespaces = substr($content, \strlen($trimmedContent)); - - $tokens[$index] = new Token([$token->getId(), $trimmedContent]); - - if (isset($tokens[$index + 1]) && $tokens[$index + 1]->isWhitespace()) { - $tokens[$index + 1] = new Token([T_WHITESPACE, $whitespaces.$tokens[$index + 1]->getContent()]); - } else { - $tokens->insertAt($index + 1, new Token([T_WHITESPACE, $whitespaces])); - } - } - - /** - * {@inheritdoc} - */ - public function getCustomTokens(): array - { - return []; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php deleted file mode 100644 index 9d7f8600..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Tokenizer/TransformerInterface.php +++ /dev/null @@ -1,68 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -/** - * Interface for Transformer class. - * - * Transformer role is to register custom tokens and transform Tokens collection to use them. - * - * Custom token is a user defined token type and is used to separate different meaning of original token type. - * For example T_ARRAY is a token for both creating new array and typehinting a parameter. This two meaning should have two token types. - * - * @author Dariusz Rumiński - * - * @internal - */ -interface TransformerInterface -{ - /** - * Get tokens created by Transformer. - * - * @return list - */ - public function getCustomTokens(): array; - - /** - * Return the name of the transformer. - * - * The name must be all lowercase and without any spaces. - * - * @return string The name of the fixer - */ - public function getName(): string; - - /** - * Returns the priority of the transformer. - * - * The default priority is 0 and higher priorities are executed first. - */ - public function getPriority(): int; - - /** - * Return minimal required PHP version id to transform the code. - * - * Custom Token kinds from Transformers are always registered, but sometimes - * there is no need to analyse the Tokens if for sure we cannot find examined - * token kind, e.g. transforming `T_FUNCTION` in ` - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer\Tokenizer; - -use Symfony\Component\Finder\Finder; -use Symfony\Component\Finder\SplFileInfo; - -/** - * Collection of Transformer classes. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class Transformers -{ - /** - * The registered transformers. - * - * @var list - */ - private array $items = []; - - /** - * Register built in Transformers. - */ - private function __construct() - { - $this->registerBuiltInTransformers(); - - usort($this->items, static function (TransformerInterface $a, TransformerInterface $b): int { - return $b->getPriority() <=> $a->getPriority(); - }); - } - - public static function createSingleton(): self - { - static $instance = null; - - if (!$instance) { - $instance = new self(); - } - - return $instance; - } - - /** - * Transform given Tokens collection through all Transformer classes. - * - * @param Tokens $tokens Tokens collection - */ - public function transform(Tokens $tokens): void - { - foreach ($this->items as $transformer) { - foreach ($tokens as $index => $token) { - $transformer->process($tokens, $token, $index); - } - } - } - - /** - * @param TransformerInterface $transformer Transformer - */ - private function registerTransformer(TransformerInterface $transformer): void - { - if (\PHP_VERSION_ID >= $transformer->getRequiredPhpVersionId()) { - $this->items[] = $transformer; - } - } - - private function registerBuiltInTransformers(): void - { - static $registered = false; - - if ($registered) { - return; - } - - $registered = true; - - foreach ($this->findBuiltInTransformers() as $transformer) { - $this->registerTransformer($transformer); - } - } - - /** - * @return \Generator - */ - private function findBuiltInTransformers(): iterable - { - /** @var SplFileInfo $file */ - foreach (Finder::create()->files()->in(__DIR__.'/Transformer') as $file) { - $relativeNamespace = $file->getRelativePath(); - $class = __NAMESPACE__.'\\Transformer\\'.($relativeNamespace ? $relativeNamespace.'\\' : '').$file->getBasename('.php'); - - yield new $class(); - } - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfo.php b/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfo.php deleted file mode 100644 index 36b2c1e6..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfo.php +++ /dev/null @@ -1,113 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Console\Application; - -/** - * Obtain information about using version of tool. - * - * @author Dariusz Rumiński - * - * @internal - */ -final class ToolInfo implements ToolInfoInterface -{ - public const COMPOSER_PACKAGE_NAME = 'friendsofphp/php-cs-fixer'; - - public const COMPOSER_LEGACY_PACKAGE_NAME = 'fabpot/php-cs-fixer'; - - /** - * @var null|array{name: string, version: string, dist: array{reference?: string}} - */ - private $composerInstallationDetails; - - /** - * @var null|bool - */ - private $isInstalledByComposer; - - public function getComposerInstallationDetails(): array - { - if (!$this->isInstalledByComposer()) { - throw new \LogicException('Cannot get composer version for tool not installed by composer.'); - } - - if (null === $this->composerInstallationDetails) { - $composerInstalled = json_decode(file_get_contents($this->getComposerInstalledFile()), true); - - $packages = $composerInstalled['packages'] ?? $composerInstalled; - - foreach ($packages as $package) { - if (\in_array($package['name'], [self::COMPOSER_PACKAGE_NAME, self::COMPOSER_LEGACY_PACKAGE_NAME], true)) { - $this->composerInstallationDetails = $package; - - break; - } - } - } - - return $this->composerInstallationDetails; - } - - public function getComposerVersion(): string - { - $package = $this->getComposerInstallationDetails(); - - $versionSuffix = ''; - - if (isset($package['dist']['reference'])) { - $versionSuffix = '#'.$package['dist']['reference']; - } - - return $package['version'].$versionSuffix; - } - - public function getVersion(): string - { - if ($this->isInstalledByComposer()) { - return Application::VERSION.':'.$this->getComposerVersion(); - } - - return Application::VERSION; - } - - public function isInstalledAsPhar(): bool - { - return str_starts_with(__DIR__, 'phar://'); - } - - public function isInstalledByComposer(): bool - { - if (null === $this->isInstalledByComposer) { - $this->isInstalledByComposer = !$this->isInstalledAsPhar() && file_exists($this->getComposerInstalledFile()); - } - - return $this->isInstalledByComposer; - } - - public function getPharDownloadUri(string $version): string - { - return sprintf( - 'https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/download/%s/php-cs-fixer.phar', - $version - ); - } - - private function getComposerInstalledFile(): string - { - return __DIR__.'/../../../composer/installed.json'; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php b/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php deleted file mode 100644 index 5124292b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/ToolInfoInterface.php +++ /dev/null @@ -1,36 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @internal - */ -interface ToolInfoInterface -{ - /** - * @return array{name: string, version: string, dist: array{reference?: string}} - */ - public function getComposerInstallationDetails(): array; - - public function getComposerVersion(): string; - - public function getVersion(): string; - - public function isInstalledAsPhar(): bool; - - public function isInstalledByComposer(): bool; - - public function getPharDownloadUri(string $version): string; -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/Utils.php b/old_vendor/friendsofphp/php-cs-fixer/src/Utils.php deleted file mode 100644 index fc68cf23..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/Utils.php +++ /dev/null @@ -1,176 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -use PhpCsFixer\Fixer\FixerInterface; -use PhpCsFixer\Tokenizer\Token; - -/** - * @author Dariusz Rumiński - * @author Graham Campbell - * @author Odín del Río - * - * @internal - */ -final class Utils -{ - /** - * @var array - */ - private static array $deprecations = []; - - private function __construct() - { - // cannot create instance of util. class - } - - /** - * Converts a camel cased string to a snake cased string. - */ - public static function camelCaseToUnderscore(string $string): string - { - return mb_strtolower(Preg::replace('/(?isWhitespace()) { - throw new \InvalidArgumentException(sprintf('The given token must be whitespace, got "%s".', $token->getName())); - } - - $str = strrchr( - str_replace(["\r\n", "\r"], "\n", $token->getContent()), - "\n" - ); - - if (false === $str) { - return ''; - } - - return ltrim($str, "\n"); - } - - /** - * Perform stable sorting using provided comparison function. - * - * Stability is ensured by using Schwartzian transform. - * - * @param mixed[] $elements - * @param callable $getComparedValue a callable that takes a single element and returns the value to compare - * @param callable $compareValues a callable that compares two values - * - * @return mixed[] - */ - public static function stableSort(array $elements, callable $getComparedValue, callable $compareValues): array - { - array_walk($elements, static function (&$element, int $index) use ($getComparedValue): void { - $element = [$element, $index, $getComparedValue($element)]; - }); - - usort($elements, static function ($a, $b) use ($compareValues): int { - $comparison = $compareValues($a[2], $b[2]); - - if (0 !== $comparison) { - return $comparison; - } - - return $a[1] <=> $b[1]; - }); - - return array_map(static function (array $item) { - return $item[0]; - }, $elements); - } - - /** - * Sort fixers by their priorities. - * - * @param FixerInterface[] $fixers - * - * @return FixerInterface[] - */ - public static function sortFixers(array $fixers): array - { - // Schwartzian transform is used to improve the efficiency and avoid - // `usort(): Array was modified by the user comparison function` warning for mocked objects. - return self::stableSort( - $fixers, - static function (FixerInterface $fixer): int { - return $fixer->getPriority(); - }, - static function (int $a, int $b): int { - return $b <=> $a; - } - ); - } - - /** - * Join names in natural language wrapped in backticks, e.g. `a`, `b` and `c`. - * - * @param string[] $names - * - * @throws \InvalidArgumentException - */ - public static function naturalLanguageJoinWithBackticks(array $names): string - { - if (0 === \count($names)) { - throw new \InvalidArgumentException('Array of names cannot be empty.'); - } - - $names = array_map(static function (string $name): string { - return sprintf('`%s`', $name); - }, $names); - - $last = array_pop($names); - - if (\count($names) > 0) { - return implode(', ', $names).' and '.$last; - } - - return $last; - } - - public static function triggerDeprecation(\Exception $futureException): void - { - if (getenv('PHP_CS_FIXER_FUTURE_MODE')) { - throw new \RuntimeException( - 'Your are using something deprecated, see previous exception. Aborting execution because `PHP_CS_FIXER_FUTURE_MODE` environment variable is set.', - 0, - $futureException - ); - } - - $message = $futureException->getMessage(); - - self::$deprecations[$message] = true; - @trigger_error($message, E_USER_DEPRECATED); - } - - /** - * @return list - */ - public static function getTriggeredDeprecations(): array - { - $triggeredDeprecations = array_keys(self::$deprecations); - sort($triggeredDeprecations); - - return $triggeredDeprecations; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php b/old_vendor/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php deleted file mode 100644 index e558fd6b..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/WhitespacesFixerConfig.php +++ /dev/null @@ -1,49 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @author Dariusz Rumiński - */ -final class WhitespacesFixerConfig -{ - private string $indent; - - private string $lineEnding; - - public function __construct(string $indent = ' ', string $lineEnding = "\n") - { - if (!\in_array($indent, [' ', ' ', "\t"], true)) { - throw new \InvalidArgumentException('Invalid "indent" param, expected tab or two or four spaces.'); - } - - if (!\in_array($lineEnding, ["\n", "\r\n"], true)) { - throw new \InvalidArgumentException('Invalid "lineEnding" param, expected "\n" or "\r\n".'); - } - - $this->indent = $indent; - $this->lineEnding = $lineEnding; - } - - public function getIndent(): string - { - return $this->indent; - } - - public function getLineEnding(): string - { - return $this->lineEnding; - } -} diff --git a/old_vendor/friendsofphp/php-cs-fixer/src/WordMatcher.php b/old_vendor/friendsofphp/php-cs-fixer/src/WordMatcher.php deleted file mode 100644 index 36265a88..00000000 --- a/old_vendor/friendsofphp/php-cs-fixer/src/WordMatcher.php +++ /dev/null @@ -1,53 +0,0 @@ - - * Dariusz Rumiński - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace PhpCsFixer; - -/** - * @author Dariusz Rumiński - * - * @internal - */ -final class WordMatcher -{ - /** - * @var string[] - */ - private array $candidates; - - /** - * @param string[] $candidates - */ - public function __construct(array $candidates) - { - $this->candidates = $candidates; - } - - public function match(string $needle): ?string - { - $word = null; - $distance = ceil(\strlen($needle) * 0.35); - - foreach ($this->candidates as $candidate) { - $candidateDistance = levenshtein($needle, $candidate); - - if ($candidateDistance < $distance) { - $word = $candidate; - $distance = $candidateDistance; - } - } - - return $word; - } -} diff --git a/old_vendor/kint-php/kint/LICENSE b/old_vendor/kint-php/kint/LICENSE deleted file mode 100644 index 01718d49..00000000 --- a/old_vendor/kint-php/kint/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Jonathan Vollebregt (jnvsor@gmail.com), Rokas Šleinius (raveren@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/old_vendor/kint-php/kint/README.md b/old_vendor/kint-php/kint/README.md deleted file mode 100644 index 3bf799db..00000000 --- a/old_vendor/kint-php/kint/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# Kint - debugging helper for PHP developers - -![Screenshot](https://kint-php.github.io/kint/images/intro.png) - -## What am I looking at? - -At first glance Kint is just a pretty replacement for **[var_dump()](https://secure.php.net/function.var_dump)**, **[print_r()](https://secure.php.net/function.print_r)** and **[debug_backtrace()](https://secure.php.net/function.debug_backtrace)**. - -However, it's much, *much* more than that. You will eventually wonder how you developed without it. - -## Installation - -One of the main goals of Kint is to be **zero setup**. - -[Download the file](https://raw.githubusercontent.com/kint-php/kint/master/build/kint.phar) and simply -```php -+ sign will open/close it and all its children. -* Triple clicking the + sign in will open/close everything on the page. -* Add heavy classes to the blacklist to improve performance: - `Kint\Parser\BlacklistPlugin::$shallow_blacklist[] = 'Psr\Container\ContainerInterface';` -* To see the output in a docked toolbar at the bottom of the page: - `Kint\Renderer\RichRenderer::$folder = true;` -* To change display theme, use `Kint\Renderer\RichRenderer::$theme = 'theme.css';`. You can pass the absolute path to a CSS file, or use one of the built in themes: - * `original.css` (default) - * `solarized.css` - * `solarized-dark.css` - * `aante-light.css` -* Kint has *keyboard shortcuts*! When Kint is visible, press D on the keyboard and you will be able to traverse the tree with arrows, HJKL, and TAB keys - and expand/collapse nodes with SPACE or ENTER. -* You can write plugins and wrapper functions to customize dump behavior! -* Read [the full documentation](https://kint-php.github.io/kint/) for more information - -## Authors - -[**Jonathan Vollebregt** (jnvsor)](https://github.com/jnvsor) -[Contributors](https://github.com/kint-php/kint/graphs/contributors) - -## License - -Licensed under the MIT License diff --git a/old_vendor/kint-php/kint/composer.json b/old_vendor/kint-php/kint/composer.json deleted file mode 100644 index a2fba064..00000000 --- a/old_vendor/kint-php/kint/composer.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "kint-php/kint", - "description": "Kint - debugging tool for PHP developers", - "keywords": ["kint", "php", "debug"], - "type": "library", - "homepage": "https://kint-php.github.io/kint/", - "license": "MIT", - "authors": [ - { - "name": "Jonathan Vollebregt", - "homepage": "https://github.com/jnvsor" - }, - { - "name": "Contributors", - "homepage": "https://github.com/kint-php/kint/graphs/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3", - "phpunit/phpunit": "^9", - "phpspec/prophecy-phpunit": "^2", - "symfony/finder": "^4.0 || ^5.0 || ^6.0", - "seld/phar-utils": "^1", - "vimeo/psalm": "^5@dev" - }, - "autoload": { - "files": ["init.php"], - "psr-4": { - "Kint\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Kint\\Test\\": "tests/" - } - }, - "config": { - "platform": { - "php": "8.1" - } - }, - "scripts": { - "post-update-cmd": "npm ci", - "post-install-cmd": "@post-update-cmd", - "clean": [ - "rm -rf resources/compiled/", - "rm -rf build/" - ], - "format": [ - "@format:php", - "@format:js", - "@format:sass" - ], - "format:php": "php-cs-fixer fix", - "format:js": "npm run format:js", - "format:sass": "npm run format:sass", - "build": [ - "@build:sass", - "@build:js", - "@build:php" - ], - "build:sass": "npm run build:sass", - "build:js": "npm run build:js", - "build:php": "php ./build.php", - "analyze": "psalm --show-info=false" - }, - "suggest": { - "kint-php/kint-helpers": "Provides extra helper functions", - "kint-php/kint-twig": "Provides d() and s() functions in twig templates" - } -} diff --git a/old_vendor/kint-php/kint/init.php b/old_vendor/kint-php/kint/init.php deleted file mode 100644 index 7605415b..00000000 --- a/old_vendor/kint-php/kint/init.php +++ /dev/null @@ -1,72 +0,0 @@ -= 0); -\define('KINT_PHP73', \version_compare(PHP_VERSION, '7.3') >= 0); -\define('KINT_PHP74', \version_compare(PHP_VERSION, '7.4') >= 0); -\define('KINT_PHP80', \version_compare(PHP_VERSION, '8.0') >= 0); -\define('KINT_PHP81', \version_compare(PHP_VERSION, '8.1') >= 0); -\define('KINT_PHP82', \version_compare(PHP_VERSION, '8.2') >= 0); -\define('KINT_PHP83', \version_compare(PHP_VERSION, '8.3') >= 0); - -// Dynamic default settings -if (false !== \ini_get('xdebug.file_link_format')) { - Kint::$file_link_format = \ini_get('xdebug.file_link_format'); -} -if (isset($_SERVER['DOCUMENT_ROOT'])) { - Kint::$app_root_dirs = [ - $_SERVER['DOCUMENT_ROOT'] => '', - ]; - - // Suppressed for unreadable document roots (related to open_basedir) - if (false !== @\realpath($_SERVER['DOCUMENT_ROOT'])) { - Kint::$app_root_dirs[\realpath($_SERVER['DOCUMENT_ROOT'])] = ''; - } -} - -Utils::composerSkipFlags(); - -if ((!\defined('KINT_SKIP_FACADE') || !KINT_SKIP_FACADE) && !\class_exists('Kint')) { - \class_alias(Kint::class, 'Kint'); -} - -if (!\defined('KINT_SKIP_HELPERS') || !KINT_SKIP_HELPERS) { - require_once __DIR__.'/init_helpers.php'; -} diff --git a/old_vendor/kint-php/kint/init_helpers.php b/old_vendor/kint-php/kint/init_helpers.php deleted file mode 100644 index 561425b2..00000000 --- a/old_vendor/kint-php/kint/init_helpers.php +++ /dev/null @@ -1,88 +0,0 @@ -dl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxwYXRoIGQ9Ik02IDdoMThsLTkgMTV6bTAgMzBoMThsLTkgMTV6bTAgNDVoMThsLTktMTV6bTAgMzBoMThsLTktMTV6bTAgMTJsMTggMThtLTE4IDBsMTgtMTgiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNNiAxMjZsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSIjNTU1Ii8+PC9zdmc+") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#06f;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:red}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#f8f8f8;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#f8f8f8}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #d7d7d7;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#f8f8f8;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#f8f8f8;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f8f8f8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#f8f8f8;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint-rich ul.kint-tabs>li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#aaa;color:red}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:red}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #d7d7d7;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#aaa}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-rich table td{background:#f8f8f8;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-rich table tr:hover var{color:red}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #f8f8f8}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #aaa;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#f8f8f8}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #aaa,0 1px #aaa,1px 0 #aaa,0 -1px #aaa;color:#f8f8f8;font-weight:bold}input.kint-note-input{width:100%}.kint-rich .kint-focused{box-shadow:0 0 3px 2px red}.kint-rich dt{font-weight:normal}.kint-rich dt.kint-parent{margin-top:4px}.kint-rich dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint-rich>dl>dt{background:#f8f8f8}.kint-rich ul{margin:0;padding-left:0}.kint-rich ul:not(.kint-tabs)>li{border-left:0}.kint-rich ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint-rich ul.kint-tabs li,.kint-rich ul.kint-tabs li+li{margin:0 0 0 4px}.kint-rich ul.kint-tabs li{border-bottom-width:0;height:25px}.kint-rich ul.kint-tabs li:first-child{margin-left:0}.kint-rich ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}.kint-rich ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint-rich ul>li>pre{border:1px solid #d7d7d7}.kint-rich dt:hover+dd>ul{border-color:#aaa}.kint-rich pre{background:#fff;margin-top:4px;margin-left:25px}.kint-rich .kint-source{margin-left:-1px}.kint-rich .kint-source .kint-highlight{background:#cfc}.kint-rich .kint-parent.kint-show>.kint-search{border-bottom-width:1px}.kint-rich table td{background:#fff}.kint-rich table td>dl{padding:0;margin:0}.kint-rich table td>dl>dt.kint-parent{margin:0}.kint-rich table td:first-child,.kint-rich table td,.kint-rich table th{padding:2px 4px}.kint-rich table dd,.kint-rich table dt{background:#fff}.kint-rich table tr:hover>td{box-shadow:none;background:#cfc} diff --git a/old_vendor/kint-php/kint/resources/compiled/microtime.js b/old_vendor/kint-php/kint/resources/compiled/microtime.js deleted file mode 100644 index 88d4ba92..00000000 --- a/old_vendor/kint-php/kint/resources/compiled/microtime.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintMicrotimeInitialized&&(window.kintMicrotimeInitialized=1,window.addEventListener("load",function(){"use strict";var a={},t=Array.prototype.slice.call(document.querySelectorAll("[data-kint-microtime-group]"),0);t.forEach(function(t){var i,e;t.querySelector(".kint-microtime-lap")&&(i=t.getAttribute("data-kint-microtime-group"),e=parseFloat(t.querySelector(".kint-microtime-lap").innerHTML),t=parseFloat(t.querySelector(".kint-microtime-avg").innerHTML),void 0===a[i]&&(a[i]={}),(void 0===a[i].min||a[i].min>e)&&(a[i].min=e),(void 0===a[i].max||a[i].maxdl dl{padding:0 0 0 12px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAxNTAiPjxnIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0iI0ZGRiI+PHBhdGggZD0iTTEgMWgyOHYyOEgxem01IDE0aDE4bS05IDlWNk0xIDYxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzM3OSIvPjxwYXRoIGQ9Ik0xIDMxaDI4djI4SDF6bTUgMTRoMThtLTkgOVYzNk0xIDkxaDI4djI4SDF6bTUgMTRoMTgiIHN0cm9rZT0iIzVBMyIvPjxwYXRoIGQ9Ik0xIDEyMWgyOHYyOEgxem01IDVsMTggMThtLTE4IDBsMTgtMTgiIHN0cm9rZT0iI0NDQyIvPjwvZz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#0092db;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#5cb730}.kint-rich dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint-rich pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(29,30,30,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#e0eaef;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#1d1e1e;background:#e0eaef}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #b6cedb;border-top-width:0;border-bottom-width:0;padding:4px;float:right !important;margin:-4px 0;color:#1d1e1e;background:#c1d4df;height:24px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#d0d0d0;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#e8e8e8}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#c1d4df;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#1d1e1e}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#1d1e1e;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint-rich ul{list-style:none;padding-left:12px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint-rich ul.kint-tabs>li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:20px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #b6cedb;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#0092db}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #b6cedb;padding:2px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-rich table td{background:#e0eaef;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-rich table tr:hover var{color:#5cb730}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:4px;padding-bottom:4px;border-bottom:1px solid #c1d4df}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #0092db;padding-right:8px;margin-right:8px}.kint-rich pre.kint-source>div.kint-highlight{background:#c1d4df}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #0092db,0 1px #0092db,1px 0 #0092db,0 -1px #0092db;color:#e0eaef;font-weight:bold}input.kint-note-input{width:100%}.kint-rich>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}.kint-rich ul.kint-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint-rich>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint-rich>dl.kint-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}.kint-rich .kint-source .kint-highlight{background:#f0eb96} diff --git a/old_vendor/kint-php/kint/resources/compiled/plain.css b/old_vendor/kint-php/kint/resources/compiled/plain.css deleted file mode 100644 index ba1eba0a..00000000 --- a/old_vendor/kint-php/kint/resources/compiled/plain.css +++ /dev/null @@ -1 +0,0 @@ -.kint-plain{background:rgba(255,255,255,0.9);white-space:pre;display:block;font-family:monospace;color:#222}.kint-plain i{color:#d00;font-style:normal}.kint-plain u{color:#030;text-decoration:none;font-weight:bold}.kint-plain .kint-microtime-lap{font-weight:bold;text-shadow:1px 0 #fff, 0 1px #fff, -1px 0 #fff, 0 -1px #fff} diff --git a/old_vendor/kint-php/kint/resources/compiled/plain.js b/old_vendor/kint-php/kint/resources/compiled/plain.js deleted file mode 100644 index 9791fc9f..00000000 --- a/old_vendor/kint-php/kint/resources/compiled/plain.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintPlain&&(window.kintPlain=function(){"use strict";var i={initLoad:function(){i.style=window.kintShared.dedupe("style.kint-plain-style",i.style),i.script=window.kintShared.dedupe("script.kint-plain-script",i.script)},style:null,script:null};return i}()),window.kintShared.runOnce(window.kintPlain.initLoad); diff --git a/old_vendor/kint-php/kint/resources/compiled/rich.js b/old_vendor/kint-php/kint/resources/compiled/rich.js deleted file mode 100644 index 39db8fb9..00000000 --- a/old_vendor/kint-php/kint/resources/compiled/rich.js +++ /dev/null @@ -1 +0,0 @@ -void 0===window.kintRich&&(window.kintRich=function(){"use strict";var l={selectText:function(e){var t=window.getSelection(),a=document.createRange();a.selectNodeContents(e),t.removeAllRanges(),t.addRange(a)},toggle:function(e,t){var a=l.getChildren(e);a&&(e.classList.toggle("kint-show",t),1===a.childNodes.length)&&(a=a.childNodes[0].childNodes[0])&&a.classList&&a.classList.contains("kint-parent")&&l.toggle(a,t)},toggleChildren:function(e,t){var a=l.getChildren(e);if(a){var o=a.getElementsByClassName("kint-parent"),s=o.length;for(void 0===t&&(t=e.classList.contains("kint-show"));s--;)l.toggle(o[s],t)}},switchTab:function(e){var t=e.previousSibling,a=0;for(e.parentNode.getElementsByClassName("kint-active-tab")[0].classList.remove("kint-active-tab"),e.classList.add("kint-active-tab");t;)1===t.nodeType&&a++,t=t.previousSibling;for(var o=e.parentNode.nextSibling.childNodes,s=0;s"},openInNewWindow:function(e){var t=window.open();t&&(t.document.open(),t.document.write(l.mktag("html")+l.mktag("head")+l.mktag("title")+"Kint ("+(new Date).toISOString()+")"+l.mktag("/title")+l.mktag('meta charset="utf-8"')+l.mktag('script class="kint-rich-script" nonce="'+l.script.nonce+'"')+l.script.innerHTML+l.mktag("/script")+l.mktag('style class="kint-rich-style" nonce="'+l.style.nonce+'"')+l.style.innerHTML+l.mktag("/style")+l.mktag("/head")+l.mktag("body")+'
'+e.parentNode.outerHTML+"
"+l.mktag("/body")),t.document.close())},sortTable:function(e,a){var t=e.tBodies[0];[].slice.call(e.tBodies[0].rows).sort(function(e,t){if(e=e.cells[a].textContent.trim().toLocaleLowerCase(),t=t.cells[a].textContent.trim().toLocaleLowerCase(),isNaN(e)||isNaN(t)){if(isNaN(e)&&!isNaN(t))return 1;if(isNaN(t)&&!isNaN(e))return-1}else e=parseFloat(e),t=parseFloat(t);return eli:not(.kint-active-tab)").forEach(function(e){l.isFolderOpen()&&!l.folder.contains(e)||0===e.offsetWidth&&0===e.offsetHeight||l.keyboardNav.targets.push(e)}),e&&-1!==l.keyboardNav.targets.indexOf(e)&&(l.keyboardNav.target=l.keyboardNav.targets.indexOf(e))},sync:function(e){var t=document.querySelector(".kint-focused");t&&t.classList.remove("kint-focused"),l.keyboardNav.active&&((t=l.keyboardNav.targets[l.keyboardNav.target]).classList.add("kint-focused"),e||l.keyboardNav.scroll(t))},scroll:function(e){var t,a;l.folder&&e===l.folder.querySelector("dt > nav")||(e=(t=function(e){return e.offsetTop+(e.offsetParent?t(e.offsetParent):0)})(e),l.isFolderOpen()?(a=l.folder.querySelector("dd.kint-foldout")).scrollTo(0,e-a.clientHeight/2):window.scrollTo(0,e-window.innerHeight/2))},moveCursor:function(e){for(l.keyboardNav.target+=e;l.keyboardNav.target<0;)l.keyboardNav.target+=l.keyboardNav.targets.length;for(;l.keyboardNav.target>=l.keyboardNav.targets.length;)l.keyboardNav.target-=l.keyboardNav.targets.length;l.keyboardNav.sync()},setCursor:function(e){if(!l.isFolderOpen()||l.folder.contains(e)){l.keyboardNav.fetchTargets();for(var t=0;tdl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzAgMTUwIj48ZGVmcz48cGF0aCBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNCAzYTI0IDMyIDAgMCAxIDAgMjQgNDAgMjAtMTAgMCAxIDIzLTEyQTQwIDIwIDEwIDAgMSA0IDN6IiBpZD0iYSIvPjwvZGVmcz48ZyBmaWxsPSIjOTNhMWExIiBzdHJva2U9IiM5M2ExYTEiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxnIGZpbGw9IiM1ODZlNzUiIHN0cm9rZT0iIzU4NmU3NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzMCkiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxwYXRoIGQ9Ik02IDEyNmwxOCAxOG0tMTggMGwxOC0xOCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiM1ODZlNzUiLz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #586e75}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#93a1a1}.kint-rich pre{color:#839496;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(131,148,150,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#002b36;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#839496;background:#002b36}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #586e75;border-top-width:0;border-bottom-width:0;padding:5px;float:right !important;margin:-5px 0;color:#93a1a1;background:#073642;height:26px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#252525;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#1b1b1b}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#073642;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#839496}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#839496;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #586e75}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}.kint-rich ul.kint-tabs>li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#002b36;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #586e75;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #586e75;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#073642;color:#93a1a1}.kint-rich table td{background:#002b36;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:5px;padding-bottom:5px;border-bottom:1px solid #073642}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #268bd2;padding-right:10px;margin-right:10px}.kint-rich pre.kint-source>div.kint-highlight{background:#073642}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #268bd2,0 1px #268bd2,1px 0 #268bd2,0 -1px #268bd2;color:#002b36;font-weight:bold}input.kint-note-input{width:100%}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px}.kint-rich footer li{color:#ddd} diff --git a/old_vendor/kint-php/kint/resources/compiled/solarized.css b/old_vendor/kint-php/kint/resources/compiled/solarized.css deleted file mode 100644 index 952453ed..00000000 --- a/old_vendor/kint-php/kint/resources/compiled/solarized.css +++ /dev/null @@ -1 +0,0 @@ -.kint-rich{font-size:13px;overflow-x:auto;white-space:nowrap;background:rgba(255,255,255,0.9)}.kint-rich.kint-folder{position:fixed;bottom:0;left:0;right:0;z-index:999999;width:100%;margin:0;display:block}.kint-rich.kint-folder dd.kint-foldout{max-height:calc(100vh - 100px);padding-right:10px;overflow-y:scroll;display:none}.kint-rich.kint-folder dd.kint-foldout.kint-show{display:block}.kint-rich::selection,.kint-rich::-moz-selection,.kint-rich::-webkit-selection{background:#268bd2;color:#657b83}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #2aa198}.kint-rich,.kint-rich::before,.kint-rich::after,.kint-rich *,.kint-rich *::before,.kint-rich *::after{box-sizing:border-box;border-radius:0;color:#657b83;float:none !important;font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;line-height:15px;margin:0;padding:0;text-align:left}.kint-rich{margin:10px 0}.kint-rich dt,.kint-rich dl{width:auto}.kint-rich dt,.kint-rich div.access-path{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:5px}.kint-rich dt:hover,.kint-rich div.access-path:hover{border-color:#268bd2}.kint-rich>dl dl{padding:0 0 0 15px}.kint-rich dt.kint-parent>nav,.kint-rich>footer>nav{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzAgMTUwIj48ZGVmcz48cGF0aCBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNCAzYTI0IDMyIDAgMCAxIDAgMjQgNDAgMjAtMTAgMCAxIDIzLTEyQTQwIDIwIDEwIDAgMSA0IDN6IiBpZD0iYSIvPjwvZGVmcz48ZyBmaWxsPSIjOTNhMWExIiBzdHJva2U9IiM5M2ExYTEiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxnIGZpbGw9IiM1ODZlNzUiIHN0cm9rZT0iIzU4NmU3NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzMCkiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48dXNlIHhsaW5rOmhyZWY9IiNhIiB0cmFuc2Zvcm09InJvdGF0ZSg5MCAtMTUgNDUpIi8+PC9nPjxwYXRoIGQ9Ik02IDEyNmwxOCAxOG0tMTggMGwxOC0xOCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiM1ODZlNzUiLz48L3N2Zz4=") no-repeat scroll 0 0/15px 75px transparent;cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}.kint-rich dt.kint-parent:hover>nav,.kint-rich>footer>nav:hover{background-position:0 25%}.kint-rich dt.kint-parent.kint-show>nav,.kint-rich>footer.kint-show>nav{background-position:0 50%}.kint-rich dt.kint-parent.kint-show:hover>nav,.kint-rich>footer.kint-show>nav:hover{background-position:0 75%}.kint-rich dt.kint-parent.kint-locked>nav{background-position:0 100%}.kint-rich dt.kint-parent+dd{display:none;border-left:1px dashed #93a1a1}.kint-rich dt.kint-parent.kint-show+dd{display:block}.kint-rich var,.kint-rich var a{color:#268bd2;font-style:normal}.kint-rich dt:hover var,.kint-rich dt:hover var a{color:#2aa198}.kint-rich dfn{font-style:normal;font-family:monospace;color:#586e75}.kint-rich pre{color:#657b83;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}.kint-rich .kint-popup-trigger,.kint-rich .kint-access-path-trigger,.kint-rich .kint-search-trigger{background:rgba(101,123,131,0.8);border-radius:3px;height:16px;font-size:16px;margin-left:5px;font-weight:bold;width:16px;text-align:center;float:right !important;cursor:pointer;color:#fdf6e3;position:relative;overflow:hidden;line-height:17.6px}.kint-rich .kint-popup-trigger:hover,.kint-rich .kint-access-path-trigger:hover,.kint-rich .kint-search-trigger:hover{color:#657b83;background:#fdf6e3}.kint-rich dt.kint-parent>.kint-popup-trigger{line-height:19.2px}.kint-rich .kint-search-trigger{font-size:20px}.kint-rich input.kint-search{display:none;border:1px solid #93a1a1;border-top-width:0;border-bottom-width:0;padding:5px;float:right !important;margin:-5px 0;color:#586e75;background:#eee8d5;height:26px;width:160px;position:relative;z-index:100}.kint-rich input.kint-search.kint-show{display:block}.kint-rich .kint-search-root ul.kint-tabs>li:not(.kint-search-match){background:#e2e2e2;opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match){opacity:0.5}.kint-rich .kint-search-root dl:not(.kint-search-match)>dt{background:#f0f0f0}.kint-rich .kint-search-root dl:not(.kint-search-match) dl,.kint-rich .kint-search-root dl:not(.kint-search-match) ul.kint-tabs>li:not(.kint-search-match){opacity:1}.kint-rich div.access-path{background:#eee8d5;display:none;margin-top:5px;padding:4px;white-space:pre}.kint-rich div.access-path.kint-show{display:block}.kint-rich footer{padding:0 3px 3px;font-size:9px;background:transparent}.kint-rich footer>.kint-popup-trigger{background:transparent;color:#657b83}.kint-rich footer nav{height:10px;width:10px;background-size:10px 50px}.kint-rich footer>ol{display:none;margin-left:32px}.kint-rich footer.kint-show>ol{display:block}.kint-rich a{color:#657b83;text-shadow:none;text-decoration:underline}.kint-rich a:hover{color:#586e75;border-bottom:1px dotted #586e75}.kint-rich ul{list-style:none;padding-left:15px}.kint-rich ul:not(.kint-tabs) li{border-left:1px dashed #93a1a1}.kint-rich ul:not(.kint-tabs) li>dl{border-left:none}.kint-rich ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}.kint-rich ul.kint-tabs>li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:30px;margin:3px;padding:0 15px;vertical-align:top}.kint-rich ul.kint-tabs>li:hover,.kint-rich ul.kint-tabs>li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint-rich ul.kint-tabs>li.kint-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;height:27px;line-height:24px}.kint-rich ul.kint-tabs>li:not(.kint-active-tab){line-height:25px}.kint-rich ul.kint-tabs li+li{margin-left:0}.kint-rich ul.kint-tab-contents>li{display:none}.kint-rich ul.kint-tab-contents>li.kint-show{display:block}.kint-rich dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-rich dt>.kint-color-preview{width:16px;height:16px;display:inline-block;vertical-align:middle;margin-left:10px;border:1px solid #93a1a1;background-color:#ccc;background-image:url('data:image/svg+xml;utf8,');background-size:100%}.kint-rich dt>.kint-color-preview:hover{border-color:#268bd2}.kint-rich dt>.kint-color-preview>div{width:100%;height:100%}.kint-rich table{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-rich table *{font-size:12px}.kint-rich table dt{background:none;padding:2.5px}.kint-rich table dt .kint-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-rich table td,.kint-rich table th{border:1px solid #93a1a1;padding:2.5px;vertical-align:center}.kint-rich table th{cursor:alias}.kint-rich table td:first-child,.kint-rich table th{font-weight:bold;background:#eee8d5;color:#586e75}.kint-rich table td{background:#fdf6e3;white-space:pre}.kint-rich table td>dl{padding:0}.kint-rich table pre{border-top:0;border-right:0}.kint-rich table thead th:first-child{background:none;border:0}.kint-rich table tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-rich table tr:hover var{color:#2aa198}.kint-rich table ul.kint-tabs li.kint-active-tab{height:20px;line-height:17px}.kint-rich pre.kint-source{margin-left:-1px}.kint-rich pre.kint-source[data-kint-filename]:before{display:block;content:attr(data-kint-filename);margin-bottom:5px;padding-bottom:5px;border-bottom:1px solid #eee8d5}.kint-rich pre.kint-source>div:before{display:inline-block;content:counter(kint-l);counter-increment:kint-l;border-right:1px solid #268bd2;padding-right:10px;margin-right:10px}.kint-rich pre.kint-source>div.kint-highlight{background:#eee8d5}.kint-rich .kint-microtime-lap{text-shadow:-1px 0 #268bd2,0 1px #268bd2,1px 0 #268bd2,0 -1px #268bd2;color:#fdf6e3;font-weight:bold}input.kint-note-input{width:100%}.kint-rich .kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-rich>dl>dt,.kint-rich ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}.kint-rich ul.kint-tabs li.kint-active-tab{padding-top:7px;height:34px} diff --git a/old_vendor/kint-php/kint/src/CallFinder.php b/old_vendor/kint-php/kint/src/CallFinder.php deleted file mode 100644 index e36e91ea..00000000 --- a/old_vendor/kint-php/kint/src/CallFinder.php +++ /dev/null @@ -1,569 +0,0 @@ - true, - T_COMMENT => true, - T_DOC_COMMENT => true, - T_INLINE_HTML => true, - T_OPEN_TAG => true, - T_OPEN_TAG_WITH_ECHO => true, - T_WHITESPACE => true, - ]; - - /** - * Things we need to do specially for operator tokens: - * - Refuse to strip spaces around them - * - Wrap the access path in parentheses if there - * are any of these in the final short parameter. - */ - private static $operator = [ - T_AND_EQUAL => true, - T_BOOLEAN_AND => true, - T_BOOLEAN_OR => true, - T_ARRAY_CAST => true, - T_BOOL_CAST => true, - T_CLASS => true, - T_CLONE => true, - T_CONCAT_EQUAL => true, - T_DEC => true, - T_DIV_EQUAL => true, - T_DOUBLE_CAST => true, - T_FUNCTION => true, - T_INC => true, - T_INCLUDE => true, - T_INCLUDE_ONCE => true, - T_INSTANCEOF => true, - T_INT_CAST => true, - T_IS_EQUAL => true, - T_IS_GREATER_OR_EQUAL => true, - T_IS_IDENTICAL => true, - T_IS_NOT_EQUAL => true, - T_IS_NOT_IDENTICAL => true, - T_IS_SMALLER_OR_EQUAL => true, - T_LOGICAL_AND => true, - T_LOGICAL_OR => true, - T_LOGICAL_XOR => true, - T_MINUS_EQUAL => true, - T_MOD_EQUAL => true, - T_MUL_EQUAL => true, - T_NEW => true, - T_OBJECT_CAST => true, - T_OR_EQUAL => true, - T_PLUS_EQUAL => true, - T_REQUIRE => true, - T_REQUIRE_ONCE => true, - T_SL => true, - T_SL_EQUAL => true, - T_SR => true, - T_SR_EQUAL => true, - T_STRING_CAST => true, - T_UNSET_CAST => true, - T_XOR_EQUAL => true, - T_POW => true, - T_POW_EQUAL => true, - T_SPACESHIP => true, - T_DOUBLE_ARROW => true, - '!' => true, - '%' => true, - '&' => true, - '*' => true, - '+' => true, - '-' => true, - '.' => true, - '/' => true, - ':' => true, - '<' => true, - '=' => true, - '>' => true, - '?' => true, - '^' => true, - '|' => true, - '~' => true, - ]; - - private static $strip = [ - '(' => true, - ')' => true, - '[' => true, - ']' => true, - '{' => true, - '}' => true, - T_OBJECT_OPERATOR => true, - T_DOUBLE_COLON => true, - T_NS_SEPARATOR => true, - ]; - - private static $classcalls = [ - T_DOUBLE_COLON => true, - T_OBJECT_OPERATOR => true, - ]; - - private static $namespace = [ - T_STRING => true, - ]; - - /** - * @psalm-param callable-array|callable-string $function - * - * @param mixed $function - * - * @return array List of matching calls on the relevant line - */ - public static function getFunctionCalls(string $source, int $line, $function): array - { - static $up = [ - '(' => true, - '[' => true, - '{' => true, - T_CURLY_OPEN => true, - T_DOLLAR_OPEN_CURLY_BRACES => true, - ]; - static $down = [ - ')' => true, - ']' => true, - '}' => true, - ]; - static $modifiers = [ - '!' => true, - '@' => true, - '~' => true, - '+' => true, - '-' => true, - ]; - static $identifier = [ - T_DOUBLE_COLON => true, - T_STRING => true, - T_NS_SEPARATOR => true, - ]; - - if (KINT_PHP74) { - self::$operator[T_FN] = true; - self::$operator[T_COALESCE_EQUAL] = true; - } - - if (KINT_PHP80) { - $up[T_ATTRIBUTE] = true; - self::$operator[T_MATCH] = true; - self::$strip[T_NULLSAFE_OBJECT_OPERATOR] = true; - self::$classcalls[T_NULLSAFE_OBJECT_OPERATOR] = true; - self::$namespace[T_NAME_FULLY_QUALIFIED] = true; - self::$namespace[T_NAME_QUALIFIED] = true; - self::$namespace[T_NAME_RELATIVE] = true; - $identifier[T_NAME_FULLY_QUALIFIED] = true; - $identifier[T_NAME_QUALIFIED] = true; - $identifier[T_NAME_RELATIVE] = true; - } - - $tokens = \token_get_all($source); - $cursor = 1; - $function_calls = []; - - // Performance optimization preventing backwards loops - /** @psalm-var array */ - $prev_tokens = [null, null, null]; - - if (\is_array($function)) { - $class = \explode('\\', $function[0]); - $class = \strtolower(\end($class)); - $function = \strtolower($function[1]); - } else { - $class = null; - /** - * @psalm-suppress RedundantFunctionCallGivenDocblockType - */ - $function = \strtolower($function); - } - - // Loop through tokens - foreach ($tokens as $index => $token) { - if (!\is_array($token)) { - continue; - } - - // Count newlines for line number instead of using $token[2] - // since certain situations (String tokens after whitespace) may - // not have the correct line number unless you do this manually - $cursor += \substr_count($token[1], "\n"); - if ($cursor > $line) { - break; - } - - // Store the last real tokens for later - if (isset(self::$ignore[$token[0]])) { - continue; - } - - $prev_tokens = [$prev_tokens[1], $prev_tokens[2], $token]; - - // Check if it's the right type to be the function we're looking for - if (!isset(self::$namespace[$token[0]])) { - continue; - } - - $ns = \explode('\\', \strtolower($token[1])); - - if (\end($ns) !== $function) { - continue; - } - - // Check if it's a function call - $nextReal = self::realTokenIndex($tokens, $index); - if (!isset($nextReal, $tokens[$nextReal]) || '(' !== $tokens[$nextReal]) { - continue; - } - - // Check if it matches the signature - if (null === $class) { - if ($prev_tokens[1] && isset(self::$classcalls[$prev_tokens[1][0]])) { - continue; - } - } else { - if (!$prev_tokens[1] || T_DOUBLE_COLON !== $prev_tokens[1][0]) { - continue; - } - - if (!$prev_tokens[0] || !isset(self::$namespace[$prev_tokens[0][0]])) { - continue; - } - - // All self::$namespace tokens are T_ constants - /** @psalm-var PhpTokenArray $prev_tokens[0] */ - $ns = \explode('\\', \strtolower($prev_tokens[0][1])); - - if (\end($ns) !== $class) { - continue; - } - } - - $inner_cursor = $cursor; - $depth = 1; // The depth respective to the function call - $offset = $nextReal + 1; // The start of the function call - $instring = false; // Whether we're in a string or not - $realtokens = false; // Whether the current scope contains anything meaningful or not - $paramrealtokens = false; // Whether the current parameter contains anything meaningful - $params = []; // All our collected parameters - $shortparam = []; // The short version of the parameter - $param_start = $offset; // The distance to the start of the parameter - - // Loop through the following tokens until the function call ends - while (isset($tokens[$offset])) { - $token = $tokens[$offset]; - - // Ensure that the $inner_cursor is correct and - // that $token is either a T_ constant or a string - if (\is_array($token)) { - $inner_cursor += \substr_count($token[1], "\n"); - } - - if (!isset(self::$ignore[$token[0]]) && !isset($down[$token[0]])) { - $paramrealtokens = $realtokens = true; - } - - // If it's a token that makes us to up a level, increase the depth - if (isset($up[$token[0]])) { - if (1 === $depth) { - $shortparam[] = $token; - $realtokens = false; - } - - ++$depth; - } elseif (isset($down[$token[0]])) { - --$depth; - - // If this brings us down to the parameter level, and we've had - // real tokens since going up, fill the $shortparam with an ellipsis - if (1 === $depth) { - if ($realtokens) { - $shortparam[] = '...'; - } - $shortparam[] = $token; - } - } elseif ('"' === $token[0]) { - // Strings use the same symbol for up and down, but we can - // only ever be inside one string, so just use a bool for that - if ($instring) { - --$depth; - if (1 === $depth) { - $shortparam[] = '...'; - } - } else { - ++$depth; - } - - $instring = !$instring; - - $shortparam[] = '"'; - } elseif (1 === $depth) { - if (',' === $token[0]) { - $params[] = [ - 'full' => \array_slice($tokens, $param_start, $offset - $param_start), - 'short' => $shortparam, - ]; - $shortparam = []; - $paramrealtokens = false; - $param_start = $offset + 1; - } elseif (T_CONSTANT_ENCAPSED_STRING === $token[0] && \strlen($token[1]) > 2) { - $shortparam[] = $token[1][0].'...'.$token[1][0]; - } else { - $shortparam[] = $token; - } - } - - // Depth has dropped to 0 (So we've hit the closing paren) - if ($depth <= 0) { - if ($paramrealtokens) { - $params[] = [ - 'full' => \array_slice($tokens, $param_start, $offset - $param_start), - 'short' => $shortparam, - ]; - } - - break; - } - - ++$offset; - } - - // If we're not passed (or at) the line at the end - // of the function call, we're too early so skip it - if ($inner_cursor < $line) { - continue; - } - - // Format the final output parameters - foreach ($params as &$param) { - $name = self::tokensFormatted($param['short']); - - $expression = false; - foreach ($name as $token) { - if (self::tokenIsOperator($token)) { - $expression = true; - break; - } - } - - $param = [ - 'name' => self::tokensToString($name), - 'path' => self::tokensToString(self::tokensTrim($param['full'])), - 'expression' => $expression, - ]; - } - - // Skip first-class callables - /** @psalm-var list $params */ - if (KINT_PHP81 && 1 === \count($params) && '...' === \reset($params)['path']) { - continue; - } - - // Get the modifiers - --$index; - - while (isset($tokens[$index])) { - if (!isset(self::$ignore[$tokens[$index][0]]) && !isset($identifier[$tokens[$index][0]])) { - break; - } - - --$index; - } - - $mods = []; - - while (isset($tokens[$index])) { - if (isset(self::$ignore[$tokens[$index][0]])) { - --$index; - continue; - } - - if (isset($modifiers[$tokens[$index][0]])) { - $mods[] = $tokens[$index]; - --$index; - continue; - } - - break; - } - - $function_calls[] = [ - 'parameters' => $params, - 'modifiers' => $mods, - ]; - } - - return $function_calls; - } - - /** - * @psalm-param PhpToken[] $tokens - */ - private static function realTokenIndex(array $tokens, int $index): ?int - { - ++$index; - - while (isset($tokens[$index])) { - if (!isset(self::$ignore[$tokens[$index][0]])) { - return $index; - } - - ++$index; - } - - return null; - } - - /** - * We need a separate method to check if tokens are operators because we - * occasionally add "..." to short parameter versions. If we simply check - * for `$token[0]` then "..." will incorrectly match the "." operator. - * - * @psalm-param PhpToken $token The token to check - * - * @param mixed $token - */ - private static function tokenIsOperator($token): bool - { - return '...' !== $token && isset(self::$operator[$token[0]]); - } - - /** - * @psalm-param PhpToken[] $tokens - */ - private static function tokensToString(array $tokens): string - { - $out = ''; - - foreach ($tokens as $token) { - if (\is_string($token)) { - $out .= $token; - } else { - $out .= $token[1]; - } - } - - return $out; - } - - /** - * @psalm-param PhpToken[] $tokens - */ - private static function tokensTrim(array $tokens): array - { - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - unset($tokens[$index]); - } else { - break; - } - } - - $tokens = \array_reverse($tokens); - - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - unset($tokens[$index]); - } else { - break; - } - } - - return \array_reverse($tokens); - } - - /** - * @psalm-param PhpToken[] $tokens - * - * @psalm-return PhpToken[] - */ - private static function tokensFormatted(array $tokens): array - { - $tokens = self::tokensTrim($tokens); - - $space = false; - $attribute = false; - // Keep space between "strip" symbols for different behavior for matches or closures - // Normally we want to strip spaces between strip tokens: $x{...}[...] - // However with closures and matches we don't: function (...) {...} - $ignorestrip = false; - $output = []; - $last = null; - - if (T_FUNCTION === $tokens[0][0] || - (KINT_PHP74 && T_FN === $tokens[0][0]) || - (KINT_PHP80 && T_MATCH === $tokens[0][0]) - ) { - $ignorestrip = true; - } - - foreach ($tokens as $index => $token) { - if (isset(self::$ignore[$token[0]])) { - if ($space) { - continue; - } - - $next = self::realTokenIndex($tokens, $index); - if (null === $next) { - // This should be impossible, since we always call tokensTrim first - break; // @codeCoverageIgnore - } - $next = $tokens[$next]; - - /** @psalm-var PhpToken $last */ - if ($attribute && ']' === $last[0]) { - $attribute = false; - } elseif (!$ignorestrip && isset(self::$strip[$last[0]]) && !self::tokenIsOperator($next)) { - continue; - } - - if (!$ignorestrip && isset(self::$strip[$next[0]]) && $last && !self::tokenIsOperator($last)) { - continue; - } - - $token = ' '; - $space = true; - } else { - if (KINT_PHP80 && $last && T_ATTRIBUTE == $last[0]) { - $attribute = true; - } - - $space = false; - $last = $token; - } - - $output[] = $token; - } - - return $output; - } -} diff --git a/old_vendor/kint-php/kint/src/FacadeInterface.php b/old_vendor/kint-php/kint/src/FacadeInterface.php deleted file mode 100644 index da4badcd..00000000 --- a/old_vendor/kint-php/kint/src/FacadeInterface.php +++ /dev/null @@ -1,49 +0,0 @@ - '', - * app_path() => '', - * config_path() => '', - * database_path() => '', - * public_path() => '', - * resource_path() => '', - * storage_path() => '', - * ]; - * - * Defaults to [$_SERVER['DOCUMENT_ROOT'] => ''] - */ - public static $app_root_dirs = []; - - /** - * @var int depth limit for array/object traversal. 0 for no limit - */ - public static $depth_limit = 7; - - /** - * @var bool expand all trees by default for rich view - */ - public static $expanded = false; - - /** - * @var bool enable detection when Kint is command line. - * - * Formats output with whitespace only; does not HTML-escape it - */ - public static $cli_detection = true; - - /** - * @var array Kint aliases. Add debug functions in Kint wrappers here to fix modifiers and backtraces - */ - public static $aliases = [ - ['Kint\\Kint', 'dump'], - ['Kint\\Kint', 'trace'], - ['Kint\\Kint', 'dumpArray'], - ]; - - /** - * @psalm-var class-string[] Array of modes to renderer class names - */ - public static $renderers = [ - self::MODE_RICH => \Kint\Renderer\RichRenderer::class, - self::MODE_PLAIN => \Kint\Renderer\PlainRenderer::class, - self::MODE_TEXT => \Kint\Renderer\TextRenderer::class, - self::MODE_CLI => \Kint\Renderer\CliRenderer::class, - ]; - - /** - * @psalm-var class-string[] - */ - public static $plugins = [ - \Kint\Parser\ArrayLimitPlugin::class, - \Kint\Parser\ArrayObjectPlugin::class, - \Kint\Parser\Base64Plugin::class, - \Kint\Parser\BlacklistPlugin::class, - \Kint\Parser\ClassMethodsPlugin::class, - \Kint\Parser\ClassStaticsPlugin::class, - \Kint\Parser\ClosurePlugin::class, - \Kint\Parser\ColorPlugin::class, - \Kint\Parser\DateTimePlugin::class, - \Kint\Parser\EnumPlugin::class, - \Kint\Parser\FsPathPlugin::class, - \Kint\Parser\IteratorPlugin::class, - \Kint\Parser\JsonPlugin::class, - \Kint\Parser\MicrotimePlugin::class, - \Kint\Parser\SimpleXMLElementPlugin::class, - \Kint\Parser\SplFileInfoPlugin::class, - \Kint\Parser\SplObjectStoragePlugin::class, - \Kint\Parser\StreamPlugin::class, - \Kint\Parser\TablePlugin::class, - \Kint\Parser\ThrowablePlugin::class, - \Kint\Parser\TimestampPlugin::class, - \Kint\Parser\TracePlugin::class, - \Kint\Parser\XmlPlugin::class, - ]; - - protected static $plugin_pool = []; - - protected $parser; - protected $renderer; - - public function __construct(Parser $p, RendererInterface $r) - { - $this->parser = $p; - $this->renderer = $r; - } - - public function setParser(Parser $p): void - { - $this->parser = $p; - } - - public function getParser(): Parser - { - return $this->parser; - } - - public function setRenderer(RendererInterface $r): void - { - $this->renderer = $r; - } - - public function getRenderer(): RendererInterface - { - return $this->renderer; - } - - public function setStatesFromStatics(array $statics): void - { - $this->renderer->setStatics($statics); - - $this->parser->setDepthLimit(isset($statics['depth_limit']) ? $statics['depth_limit'] : 0); - $this->parser->clearPlugins(); - - if (!isset($statics['plugins'])) { - return; - } - - $plugins = []; - - foreach ($statics['plugins'] as $plugin) { - if ($plugin instanceof PluginInterface) { - $plugins[] = $plugin; - } elseif (\is_string($plugin) && \is_subclass_of($plugin, ConstructablePluginInterface::class)) { - if (!isset(static::$plugin_pool[$plugin])) { - $p = new $plugin(); - static::$plugin_pool[$plugin] = $p; - } - $plugins[] = static::$plugin_pool[$plugin]; - } - } - - $plugins = $this->renderer->filterParserPlugins($plugins); - - foreach ($plugins as $plugin) { - $this->parser->addPlugin($plugin); - } - } - - public function setStatesFromCallInfo(array $info): void - { - $this->renderer->setCallInfo($info); - - if (isset($info['modifiers']) && \is_array($info['modifiers']) && \in_array('+', $info['modifiers'], true)) { - $this->parser->setDepthLimit(0); - } - - $this->parser->setCallerClass(isset($info['caller']['class']) ? $info['caller']['class'] : null); - } - - public function dumpAll(array $vars, array $base): string - { - if (\array_keys($vars) !== \array_keys($base)) { - throw new InvalidArgumentException('Kint::dumpAll requires arrays of identical size and keys as arguments'); - } - - $output = $this->renderer->preRender(); - - if ([] === $vars) { - $output .= $this->renderer->renderNothing(); - } - - foreach ($vars as $key => $arg) { - if (!$base[$key] instanceof Value) { - throw new InvalidArgumentException('Kint::dumpAll requires all elements of the second argument to be Value instances'); - } - $output .= $this->dumpVar($arg, $base[$key]); - } - - $output .= $this->renderer->postRender(); - - return $output; - } - - /** - * Dumps and renders a var. - * - * @param mixed &$var Data to dump - * @param Value $base Base object - */ - protected function dumpVar(&$var, Value $base): string - { - return $this->renderer->render( - $this->parser->parse($var, $base) - ); - } - - /** - * Gets all static settings at once. - * - * @return array Current static settings - */ - public static function getStatics(): array - { - return [ - 'aliases' => static::$aliases, - 'app_root_dirs' => static::$app_root_dirs, - 'cli_detection' => static::$cli_detection, - 'depth_limit' => static::$depth_limit, - 'display_called_from' => static::$display_called_from, - 'enabled_mode' => static::$enabled_mode, - 'expanded' => static::$expanded, - 'file_link_format' => static::$file_link_format, - 'mode_default' => static::$mode_default, - 'mode_default_cli' => static::$mode_default_cli, - 'plugins' => static::$plugins, - 'renderers' => static::$renderers, - 'return' => static::$return, - ]; - } - - /** - * Creates a Kint instance based on static settings. - * - * @param array $statics array of statics as returned by getStatics - */ - public static function createFromStatics(array $statics): ?FacadeInterface - { - $mode = false; - - if (isset($statics['enabled_mode'])) { - $mode = $statics['enabled_mode']; - - if (true === $mode && isset($statics['mode_default'])) { - $mode = $statics['mode_default']; - - if (PHP_SAPI === 'cli' && !empty($statics['cli_detection']) && isset($statics['mode_default_cli'])) { - $mode = $statics['mode_default_cli']; - } - } - } - - if (false === $mode) { - return null; - } - - /** @psalm-var class-string[] $statics['renderers'] */ - if (isset($statics['renderers'][$mode]) && \is_subclass_of($statics['renderers'][$mode], RendererInterface::class)) { - $renderer = new $statics['renderers'][$mode](); - } else { - $renderer = new TextRenderer(); - } - - return new static(new Parser(), $renderer); - } - - /** - * Creates base objects given parameter info. - * - * @param array $params Parameters as returned from getCallInfo - * @param int $argc Number of arguments the helper was called with - * - * @return Value[] Base objects for the arguments - */ - public static function getBasesFromParamInfo(array $params, int $argc): array - { - static $blacklist = [ - 'null', - 'true', - 'false', - 'array(...)', - 'array()', - '[...]', - '[]', - '(...)', - '()', - '"..."', - 'b"..."', - "'...'", - "b'...'", - ]; - - $params = \array_values($params); - $bases = []; - - for ($i = 0; $i < $argc; ++$i) { - $param = $params[$i] ?? null; - - if (!isset($param['name']) || \is_numeric($param['name'])) { - $name = null; - } elseif (\in_array(\strtolower($param['name']), $blacklist, true)) { - $name = null; - } else { - $name = $param['name']; - } - - if (isset($param['path'])) { - $access_path = $param['path']; - - if (!empty($param['expression'])) { - $access_path = '('.$access_path.')'; - } - } else { - $access_path = '$'.$i; - } - - $bases[] = Value::blank($name, $access_path); - } - - return $bases; - } - - /** - * Gets call info from the backtrace, alias, and argument count. - * - * Aliases must be normalized beforehand (Utils::normalizeAliases) - * - * @param array $aliases Call aliases as found in Kint::$aliases - * @param array[] $trace Backtrace - * @param array $args Arguments - * - * @return array Call info - */ - public static function getCallInfo(array $aliases, array $trace, array $args): array - { - $found = false; - $callee = null; - $caller = null; - $miniTrace = []; - - foreach ($trace as $index => $frame) { - if (Utils::traceFrameIsListed($frame, $aliases)) { - $found = true; - $miniTrace = []; - } - - if (!Utils::traceFrameIsListed($frame, ['spl_autoload_call'])) { - $miniTrace[] = $frame; - } - } - - if ($found) { - $callee = \reset($miniTrace) ?: null; - $caller = \next($miniTrace) ?: null; - } - - foreach ($miniTrace as $index => $frame) { - if ((0 === $index && $callee === $frame) || isset($frame['file'], $frame['line'])) { - unset($frame['object'], $frame['args']); - $miniTrace[$index] = $frame; - } else { - unset($miniTrace[$index]); - } - } - - $miniTrace = \array_values($miniTrace); - - $call = static::getSingleCall($callee ?: [], $args); - - $ret = [ - 'params' => null, - 'modifiers' => [], - 'callee' => $callee, - 'caller' => $caller, - 'trace' => $miniTrace, - ]; - - if ($call) { - $ret['params'] = $call['parameters']; - $ret['modifiers'] = $call['modifiers']; - } - - return $ret; - } - - /** - * Dumps a backtrace. - * - * Functionally equivalent to Kint::dump(1) or Kint::dump(debug_backtrace(true)) - * - * @return int|string - */ - public static function trace() - { - if (false === static::$enabled_mode) { - return 0; - } - - Utils::normalizeAliases(static::$aliases); - - $call_info = static::getCallInfo(static::$aliases, \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), []); - - $statics = static::getStatics(); - - if (\in_array('~', $call_info['modifiers'], true)) { - $statics['enabled_mode'] = static::MODE_TEXT; - } - - $kintstance = static::createFromStatics($statics); - if (!$kintstance) { - return 0; - } - - if (\in_array('-', $call_info['modifiers'], true)) { - while (\ob_get_level()) { - \ob_end_clean(); - } - } - - $kintstance->setStatesFromStatics($statics); - $kintstance->setStatesFromCallInfo($call_info); - - $trimmed_trace = []; - $trace = \debug_backtrace(); - - foreach ($trace as $frame) { - if (Utils::traceFrameIsListed($frame, static::$aliases)) { - $trimmed_trace = []; - } - - $trimmed_trace[] = $frame; - } - - \array_shift($trimmed_trace); - - $output = $kintstance->dumpAll( - [$trimmed_trace], - [Value::blank('Kint\\Kint::trace()', 'debug_backtrace()')] - ); - - if (static::$return || \in_array('@', $call_info['modifiers'], true)) { - return $output; - } - - echo $output; - - if (\in_array('-', $call_info['modifiers'], true)) { - \flush(); // @codeCoverageIgnore - } - - return 0; - } - - /** - * Dumps some data. - * - * Functionally equivalent to Kint::dump(1) or Kint::dump(debug_backtrace()) - * - * @param mixed ...$args - * - * @return int|string - */ - public static function dump(...$args) - { - if (false === static::$enabled_mode) { - return 0; - } - - Utils::normalizeAliases(static::$aliases); - - $call_info = static::getCallInfo(static::$aliases, \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), $args); - - $statics = static::getStatics(); - - if (\in_array('~', $call_info['modifiers'], true)) { - $statics['enabled_mode'] = static::MODE_TEXT; - } - - $kintstance = static::createFromStatics($statics); - if (!$kintstance) { - return 0; - } - - if (\in_array('-', $call_info['modifiers'], true)) { - while (\ob_get_level()) { - \ob_end_clean(); - } - } - - $kintstance->setStatesFromStatics($statics); - $kintstance->setStatesFromCallInfo($call_info); - - $bases = static::getBasesFromParamInfo($call_info['params'] ?? [], \count($args)); - $output = $kintstance->dumpAll(\array_values($args), $bases); - - if (static::$return || \in_array('@', $call_info['modifiers'], true)) { - return $output; - } - - echo $output; - - if (\in_array('-', $call_info['modifiers'], true)) { - \flush(); // @codeCoverageIgnore - } - - return 0; - } - - /** - * generic path display callback, can be configured in app_root_dirs; purpose is - * to show relevant path info and hide as much of the path as possible. - */ - public static function shortenPath(string $file): string - { - $file = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', $file)), 'strlen')); - - $longest_match = 0; - $match = '/'; - - foreach (static::$app_root_dirs as $path => $alias) { - if (empty($path)) { - continue; - } - - $path = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', $path)), 'strlen')); - - if (\array_slice($file, 0, \count($path)) === $path && \count($path) > $longest_match) { - $longest_match = \count($path); - $match = $alias; - } - } - - if ($longest_match) { - $file = \array_merge([$match], \array_slice($file, $longest_match)); - - return \implode('/', $file); - } - - // fallback to find common path with Kint dir - $kint = \array_values(\array_filter(\explode('/', \str_replace('\\', '/', KINT_DIR)), 'strlen')); - - foreach ($file as $i => $part) { - if (!isset($kint[$i]) || $kint[$i] !== $part) { - return ($i ? '.../' : '/').\implode('/', \array_slice($file, $i)); - } - } - - return '/'.\implode('/', $file); - } - - public static function getIdeLink(string $file, int $line): string - { - return \str_replace(['%f', '%l'], [$file, $line], static::$file_link_format); - } - - /** - * Returns specific function call info from a stack trace frame, or null if no match could be found. - * - * @param array $frame The stack trace frame in question - * @param array $args The arguments - * - * @return ?array params and modifiers, or null if a specific call could not be determined - */ - protected static function getSingleCall(array $frame, array $args): ?array - { - if ( - !isset($frame['file'], $frame['line'], $frame['function']) || - !\is_readable($frame['file']) || - !$source = \file_get_contents($frame['file']) - ) { - return null; - } - - if (empty($frame['class'])) { - $callfunc = $frame['function']; - } else { - $callfunc = [$frame['class'], $frame['function']]; - } - - $calls = CallFinder::getFunctionCalls($source, $frame['line'], $callfunc); - - $argc = \count($args); - - $return = null; - - foreach ($calls as $call) { - $is_unpack = false; - - // Handle argument unpacking as a last resort - foreach ($call['parameters'] as $i => &$param) { - if (0 === \strpos($param['name'], '...')) { - $is_unpack = true; - - // If we're on the last param - if ($i < $argc && $i === \count($call['parameters']) - 1) { - unset($call['parameters'][$i]); - - if (Utils::isAssoc($args)) { - // Associated unpacked arrays can be accessed by key - $keys = \array_slice(\array_keys($args), $i); - - foreach ($keys as $key) { - $call['parameters'][] = [ - 'name' => \substr($param['name'], 3).'['.\var_export($key, true).']', - 'path' => \substr($param['path'], 3).'['.\var_export($key, true).']', - 'expression' => false, - ]; - } - } else { - // Numeric unpacked arrays have their order blown away like a pass - // through array_values so we can't access them directly at all - for ($j = 0; $j + $i < $argc; ++$j) { - $call['parameters'][] = [ - 'name' => 'array_values('.\substr($param['name'], 3).')['.$j.']', - 'path' => 'array_values('.\substr($param['path'], 3).')['.$j.']', - 'expression' => false, - ]; - } - } - - $call['parameters'] = \array_values($call['parameters']); - } else { - $call['parameters'] = \array_slice($call['parameters'], 0, $i); - } - - break; - } - - if ($i >= $argc) { - continue 2; - } - } - - if ($is_unpack || \count($call['parameters']) === $argc) { - if (null === $return) { - $return = $call; - } else { - // If we have multiple calls on the same line with the same amount of arguments, - // we can't be sure which it is so just return null and let them figure it out - return null; - } - } - } - - return $return; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/AbstractPlugin.php b/old_vendor/kint-php/kint/src/Parser/AbstractPlugin.php deleted file mode 100644 index a3f89684..00000000 --- a/old_vendor/kint-php/kint/src/Parser/AbstractPlugin.php +++ /dev/null @@ -1,45 +0,0 @@ -parser = $p; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ArrayLimitPlugin.php b/old_vendor/kint-php/kint/src/Parser/ArrayLimitPlugin.php deleted file mode 100644 index 2e7fca93..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ArrayLimitPlugin.php +++ /dev/null @@ -1,144 +0,0 @@ -= self::$trigger) { - throw new InvalidArgumentException('ArrayLimitPlugin::$limit can not be lower than ArrayLimitPlugin::$trigger'); - } - - $depth = $this->parser->getDepthLimit(); - - if (!$depth) { - return; - } - - if ($o->depth >= $depth - 1) { - return; - } - - if (\count($var) < self::$trigger) { - return; - } - - if (self::$numeric_only && Utils::isAssoc($var)) { - return; - } - - $base = clone $o; - $base->depth = $depth - 1; - $obj = $this->parser->parse($var, $base); - - if ('array' != $obj->type) { - return; // @codeCoverageIgnore - } - - $obj->depth = $o->depth; - $i = 0; - - foreach ($obj->value->contents as $child) { - // We only bother setting the correct depth for the first child, - // any deeper children should be cancelled by the depth limit - $child->depth = $o->depth + 1; - $this->recalcDepthLimit($child); - } - - $var2 = \array_slice($var, 0, self::$limit, true); - $base = clone $o; - $slice = $this->parser->parse($var2, $base); - - \array_splice($obj->value->contents, 0, self::$limit, $slice->value->contents); - - $o = $obj; - - $this->parser->haltParse(); - } - - protected function recalcDepthLimit(Value $o): void - { - $hintkey = \array_search('depth_limit', $o->hints, true); - if (false !== $hintkey) { - $o->hints[$hintkey] = 'array_limit'; - } - - $reps = $o->getRepresentations(); - if ($o->value) { - $reps[] = $o->value; - } - - foreach ($reps as $rep) { - if ($rep->contents instanceof Value) { - $this->recalcDepthLimit($rep->contents); - } elseif (\is_array($rep->contents)) { - foreach ($rep->contents as $child) { - if ($child instanceof Value) { - $this->recalcDepthLimit($child); - } - } - } - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ArrayObjectPlugin.php b/old_vendor/kint-php/kint/src/Parser/ArrayObjectPlugin.php deleted file mode 100644 index 82ff7593..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ArrayObjectPlugin.php +++ /dev/null @@ -1,65 +0,0 @@ -getFlags(); - - if (ArrayObject::STD_PROP_LIST === $flags) { - return; - } - - $var->setFlags(ArrayObject::STD_PROP_LIST); - - $o = $this->parser->parse($var, $o); - - $var->setFlags($flags); - - $this->parser->haltParse(); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/Base64Plugin.php b/old_vendor/kint-php/kint/src/Parser/Base64Plugin.php deleted file mode 100644 index a25a7343..00000000 --- a/old_vendor/kint-php/kint/src/Parser/Base64Plugin.php +++ /dev/null @@ -1,96 +0,0 @@ -depth = $o->depth + 1; - $base_obj->name = 'base64_decode('.$o->name.')'; - - if ($o->access_path) { - $base_obj->access_path = 'base64_decode('.$o->access_path.')'; - } - - $r = new Representation('Base64'); - $r->contents = $this->parser->parse($data, $base_obj); - - if (\strlen($var) > self::$min_length_soft) { - $o->addRepresentation($r, 0); - } else { - $o->addRepresentation($r); - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/BinaryPlugin.php b/old_vendor/kint-php/kint/src/Parser/BinaryPlugin.php deleted file mode 100644 index 56cf68a3..00000000 --- a/old_vendor/kint-php/kint/src/Parser/BinaryPlugin.php +++ /dev/null @@ -1,51 +0,0 @@ -encoding, ['ASCII', 'UTF-8'], true)) { - $o->value->hints[] = 'binary'; - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/BlacklistPlugin.php b/old_vendor/kint-php/kint/src/Parser/BlacklistPlugin.php deleted file mode 100644 index 90ec3c22..00000000 --- a/old_vendor/kint-php/kint/src/Parser/BlacklistPlugin.php +++ /dev/null @@ -1,100 +0,0 @@ -blacklistValue($var, $o); - - return; - } - } - - if ($o->depth <= 0) { - return; - } - - foreach (self::$shallow_blacklist as $class) { - if ($var instanceof $class) { - $this->blacklistValue($var, $o); - - return; - } - } - } - - /** - * @param object &$var - */ - protected function blacklistValue(&$var, Value &$o): void - { - $object = new InstanceValue(); - $object->transplant($o); - $object->classname = \get_class($var); - $object->spl_object_hash = \spl_object_hash($var); - $object->clearRepresentations(); - $object->value = null; - $object->size = null; - $object->hints[] = 'blacklist'; - - $o = $object; - - $this->parser->haltParse(); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ClassMethodsPlugin.php b/old_vendor/kint-php/kint/src/Parser/ClassMethodsPlugin.php deleted file mode 100644 index e71d537a..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ClassMethodsPlugin.php +++ /dev/null @@ -1,115 +0,0 @@ -getMethods() as $method) { - $methods[] = new MethodValue($method); - } - - \usort($methods, ['Kint\\Parser\\ClassMethodsPlugin', 'sort']); - - self::$cache[$class] = $methods; - } - - if (!empty(self::$cache[$class])) { - $rep = new Representation('Available methods', 'methods'); - - // Can't cache access paths - foreach (self::$cache[$class] as $m) { - $method = clone $m; - $method->depth = $o->depth + 1; - - if (!$this->parser->childHasPath($o, $method)) { - $method->access_path = null; - } else { - $method->setAccessPathFrom($o); - } - - if ($method->owner_class !== $class && $d = $method->getRepresentation('method_definition')) { - $d = clone $d; - $d->inherited = true; - $method->replaceRepresentation($d); - } - - $rep->contents[] = $method; - } - - $o->addRepresentation($rep); - } - } - - private static function sort(MethodValue $a, MethodValue $b): int - { - $sort = ((int) $a->static) - ((int) $b->static); - if ($sort) { - return $sort; - } - - $sort = Value::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - $sort = InstanceValue::sortByHierarchy($a->owner_class, $b->owner_class); - if ($sort) { - return $sort; - } - - return $a->startline - $b->startline; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ClassStaticsPlugin.php b/old_vendor/kint-php/kint/src/Parser/ClassStaticsPlugin.php deleted file mode 100644 index 5435da93..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ClassStaticsPlugin.php +++ /dev/null @@ -1,154 +0,0 @@ -getConstants() as $name => $val) { - // Skip enum constants - if ($var instanceof UnitEnum && $val instanceof UnitEnum && $o->classname == \get_class($val)) { - continue; - } - - $const = Value::blank($name); - $const->const = true; - $const->depth = $o->depth + 1; - $const->owner_class = $class; - $const->operator = Value::OPERATOR_STATIC; - - $creflection = new ReflectionClassConstant($class, $name); - - $const->access = Value::ACCESS_PUBLIC; - if ($creflection->isProtected()) { - $const->access = Value::ACCESS_PROTECTED; - } elseif ($creflection->isPrivate()) { - $const->access = Value::ACCESS_PRIVATE; - } - - if ($this->parser->childHasPath($o, $const)) { - $const->access_path = '\\'.$class.'::'.$name; - } - - $const = $this->parser->parse($val, $const); - - $consts[] = $const; - } - - self::$cache[$class] = $consts; - } - - $statics = new Representation('Static class properties', 'statics'); - $statics->contents = self::$cache[$class]; - - foreach ($reflection->getProperties(ReflectionProperty::IS_STATIC) as $static) { - $prop = new Value(); - $prop->name = '$'.$static->getName(); - $prop->depth = $o->depth + 1; - $prop->static = true; - $prop->operator = Value::OPERATOR_STATIC; - $prop->owner_class = $static->getDeclaringClass()->name; - - $prop->access = Value::ACCESS_PUBLIC; - if ($static->isProtected()) { - $prop->access = Value::ACCESS_PROTECTED; - } elseif ($static->isPrivate()) { - $prop->access = Value::ACCESS_PRIVATE; - } - - if ($this->parser->childHasPath($o, $prop)) { - $prop->access_path = '\\'.$prop->owner_class.'::'.$prop->name; - } - - $static->setAccessible(true); - - if (KINT_PHP74 && !$static->isInitialized()) { - $prop->type = 'uninitialized'; - $statics->contents[] = $prop; - } else { - $static = $static->getValue(); - $statics->contents[] = $this->parser->parse($static, $prop); - } - } - - if (empty($statics->contents)) { - return; - } - - \usort($statics->contents, ['Kint\\Parser\\ClassStaticsPlugin', 'sort']); - - $o->addRepresentation($statics); - } - - private static function sort(Value $a, Value $b): int - { - $sort = ((int) $a->const) - ((int) $b->const); - if ($sort) { - return $sort; - } - - $sort = Value::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - return InstanceValue::sortByHierarchy($a->owner_class, $b->owner_class); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ClosurePlugin.php b/old_vendor/kint-php/kint/src/Parser/ClosurePlugin.php deleted file mode 100644 index 8b199781..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ClosurePlugin.php +++ /dev/null @@ -1,96 +0,0 @@ -transplant($o); - $o = $object; - $object->removeRepresentation('properties'); - - $closure = new ReflectionFunction($var); - - $o->filename = $closure->getFileName(); - $o->startline = $closure->getStartLine(); - - foreach ($closure->getParameters() as $param) { - $o->parameters[] = new ParameterValue($param); - } - - $p = new Representation('Parameters'); - $p->contents = &$o->parameters; - $o->addRepresentation($p, 0); - - $statics = []; - - if ($v = $closure->getClosureThis()) { - $statics = ['this' => $v]; - } - - if (\count($statics = $statics + $closure->getStaticVariables())) { - $statics_parsed = []; - - foreach ($statics as $name => &$static) { - $obj = Value::blank('$'.$name); - $obj->depth = $o->depth + 1; - $statics_parsed[$name] = $this->parser->parse($static, $obj); - if (null === $statics_parsed[$name]->value) { - $statics_parsed[$name]->access_path = null; - } - } - - $r = new Representation('Uses'); - $r->contents = $statics_parsed; - $o->addRepresentation($r, 0); - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ColorPlugin.php b/old_vendor/kint-php/kint/src/Parser/ColorPlugin.php deleted file mode 100644 index 2a58cb9a..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ColorPlugin.php +++ /dev/null @@ -1,65 +0,0 @@ - 32) { - return; - } - - $trimmed = \strtolower(\trim($var)); - - if (!isset(ColorRepresentation::$color_map[$trimmed]) && !\preg_match('/^(?:(?:rgb|hsl)[^\\)]{6,}\\)|#[0-9a-fA-F]{3,8})$/', $trimmed)) { - return; - } - - $rep = new ColorRepresentation($var); - - if ($rep->variant) { - $o->removeRepresentation($o->value); - $o->addRepresentation($rep, 0); - $o->hints[] = 'color'; - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ConstructablePluginInterface.php b/old_vendor/kint-php/kint/src/Parser/ConstructablePluginInterface.php deleted file mode 100644 index 689b24e6..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ConstructablePluginInterface.php +++ /dev/null @@ -1,33 +0,0 @@ - 'DOMNode', - 'firstChild' => 'DOMNode', - 'lastChild' => 'DOMNode', - 'previousSibling' => 'DOMNode', - 'nextSibling' => 'DOMNode', - 'ownerDocument' => 'DOMDocument', - ]; - - /** - * Show all properties and methods. - * - * @var bool - */ - public static $verbose = false; - - public function getTypes(): array - { - return ['object']; - } - - public function getTriggers(): int - { - return Parser::TRIGGER_SUCCESS; - } - - public function parse(&$var, Value &$o, int $trigger): void - { - if (!$o instanceof InstanceValue) { - return; - } - - if ($var instanceof DOMNamedNodeMap || $var instanceof DOMNodeList) { - $this->parseList($var, $o, $trigger); - - return; - } - - if ($var instanceof DOMNode) { - $this->parseNode($var, $o); - - return; - } - } - - /** - * @param DOMNamedNodeMap|DOMNodeList &$var - */ - protected function parseList($var, InstanceValue &$o, int $trigger): void - { - if (!$var instanceof DOMNamedNodeMap && !$var instanceof DOMNodeList) { - return; - } - - // Recursion should never happen, should always be stopped at the parent - // DOMNode. Depth limit on the other hand we're going to skip since - // that would show an empty iterator and rather useless. Let the depth - // limit hit the children (DOMNodeList only has DOMNode as children) - if ($trigger & Parser::TRIGGER_RECURSION) { - return; - } - - $o->size = $var->length; - if (0 === $o->size) { - $o->replaceRepresentation(new Representation('Iterator')); - $o->size = null; - - return; - } - - // Depth limit - // Make empty iterator representation since we need it in DOMNode to point out depth limits - if ($this->parser->getDepthLimit() && $o->depth + 1 >= $this->parser->getDepthLimit()) { - $b = new Value(); - $b->name = $o->classname.' Iterator Contents'; - $b->access_path = 'iterator_to_array('.$o->access_path.')'; - $b->depth = $o->depth + 1; - $b->hints[] = 'depth_limit'; - - $r = new Representation('Iterator'); - $r->contents = [$b]; - $o->replaceRepresentation($r, 0); - - return; - } - - $r = new Representation('Iterator'); - $o->replaceRepresentation($r, 0); - - foreach ($var as $key => $item) { - $base_obj = new Value(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $item->nodeName; - - if ($o->access_path) { - if ($var instanceof DOMNamedNodeMap) { - // We can't use getNamedItem() for attributes without a - // namespace because it will pick the first matching - // attribute of *any* namespace. - // - // Contrary to the PHP docs, getNamedItemNS takes null - // as a namespace argument for an unnamespaced item. - $base_obj->access_path = $o->access_path.'->getNamedItemNS('; - $base_obj->access_path .= \var_export($item->namespaceURI, true); - $base_obj->access_path .= ', '; - $base_obj->access_path .= \var_export($item->name, true); - $base_obj->access_path .= ')'; - } else { // DOMNodeList - $base_obj->access_path = $o->access_path.'->item('.\var_export($key, true).')'; - } - } - - $r->contents[] = $this->parser->parse($item, $base_obj); - } - } - - /** - * @psalm-param-out Value &$o - */ - protected function parseNode(DOMNode $var, InstanceValue &$o): void - { - // Fill the properties - // They can't be enumerated through reflection or casting, - // so we have to trust the docs and try them one at a time - $known_properties = [ - 'nodeValue', - 'childNodes', - 'attributes', - ]; - - if (self::$verbose) { - $known_properties = [ - 'nodeName', - 'nodeValue', - 'nodeType', - 'parentNode', - 'childNodes', - 'firstChild', - 'lastChild', - 'previousSibling', - 'nextSibling', - 'attributes', - 'ownerDocument', - 'namespaceURI', - 'prefix', - 'localName', - 'baseURI', - 'textContent', - ]; - } - - $childNodes = null; - $attributes = null; - - $rep = $o->value; - - foreach ($known_properties as $prop) { - $prop_obj = $this->parseProperty($o, $prop, $var); - $rep->contents[] = $prop_obj; - - if ('childNodes' === $prop) { - $childNodes = $prop_obj->getRepresentation('iterator'); - } elseif ('attributes' === $prop) { - $attributes = $prop_obj->getRepresentation('iterator'); - } - } - - if (!self::$verbose) { - $o->removeRepresentation('methods'); - $o->removeRepresentation('properties'); - } - - // Attributes and comments and text nodes don't - // need children or attributes of their own - if (\in_array($o->classname, ['DOMAttr', 'DOMText', 'DOMComment'], true)) { - $o = self::textualNodeToString($o); - - return; - } - - // Set the attributes - if ($attributes) { - $a = new Representation('Attributes'); - foreach ($attributes->contents as $attribute) { - $a->contents[] = $attribute; - } - $o->addRepresentation($a, 0); - } - - // Set the children - if ($childNodes) { - $c = new Representation('Children'); - - if (1 === \count($childNodes->contents) && ($node = \reset($childNodes->contents)) && \in_array('depth_limit', $node->hints, true)) { - $n = new InstanceValue(); - $n->transplant($node); - $n->name = 'childNodes'; - $n->classname = 'DOMNodeList'; - $c->contents = [$n]; - } else { - foreach ($childNodes->contents as $node) { - // Remove text nodes if theyre empty - if ($node instanceof BlobValue && '#text' === $node->name && (\ctype_space($node->value->contents) || '' === $node->value->contents)) { - continue; - } - - $c->contents[] = $node; - } - } - - $o->addRepresentation($c, 0); - } - - if ($childNodes) { - $o->size = \count($childNodes->contents); - } - - if (!$o->size) { - $o->size = null; - } - } - - protected function parseProperty(InstanceValue $o, string $prop, DOMNode &$var): Value - { - // Duplicating (And slightly optimizing) the Parser::parseObject() code here - $base_obj = new Value(); - $base_obj->depth = $o->depth + 1; - $base_obj->owner_class = $o->classname; - $base_obj->name = $prop; - $base_obj->operator = Value::OPERATOR_OBJECT; - $base_obj->access = Value::ACCESS_PUBLIC; - - if (null !== $o->access_path) { - $base_obj->access_path = $o->access_path; - - if (\preg_match('/^[A-Za-z0-9_]+$/', $base_obj->name)) { - $base_obj->access_path .= '->'.$base_obj->name; - } else { - $base_obj->access_path .= '->{'.\var_export($base_obj->name, true).'}'; - } - } - - if (!isset($var->{$prop})) { - $base_obj->type = 'null'; - } elseif (isset(self::$blacklist[$prop])) { - $b = new InstanceValue(); - $b->transplant($base_obj); - $base_obj = $b; - - $base_obj->hints[] = 'blacklist'; - $base_obj->classname = self::$blacklist[$prop]; - } elseif ('attributes' === $prop) { - // Attributes are strings. If we're too deep set the - // depth limit to enable parsing them, but no deeper. - if ($this->parser->getDepthLimit() && $this->parser->getDepthLimit() - 2 < $base_obj->depth) { - $base_obj->depth = $this->parser->getDepthLimit() - 2; - } - $base_obj = $this->parser->parse($var->{$prop}, $base_obj); - } else { - $base_obj = $this->parser->parse($var->{$prop}, $base_obj); - } - - return $base_obj; - } - - protected static function textualNodeToString(InstanceValue $o): Value - { - if (empty($o->value) || empty($o->value->contents) || empty($o->classname)) { - throw new InvalidArgumentException('Invalid DOMNode passed to DOMDocumentPlugin::textualNodeToString'); - } - - if (!\in_array($o->classname, ['DOMText', 'DOMAttr', 'DOMComment'], true)) { - throw new InvalidArgumentException('Invalid DOMNode passed to DOMDocumentPlugin::textualNodeToString'); - } - - foreach ($o->value->contents as $property) { - if ('nodeValue' === $property->name) { - $ret = clone $property; - $ret->name = $o->name; - - return $ret; - } - } - - throw new InvalidArgumentException('Invalid DOMNode passed to DOMDocumentPlugin::textualNodeToString'); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/DateTimePlugin.php b/old_vendor/kint-php/kint/src/Parser/DateTimePlugin.php deleted file mode 100644 index 038acea1..00000000 --- a/old_vendor/kint-php/kint/src/Parser/DateTimePlugin.php +++ /dev/null @@ -1,57 +0,0 @@ -transplant($o); - - $o = $object; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/EnumPlugin.php b/old_vendor/kint-php/kint/src/Parser/EnumPlugin.php deleted file mode 100644 index d5d348aa..00000000 --- a/old_vendor/kint-php/kint/src/Parser/EnumPlugin.php +++ /dev/null @@ -1,88 +0,0 @@ -contents = []; - - foreach ($var->cases() as $case) { - $base_obj = Value::blank($class.'::'.$case->name, '\\'.$class.'::'.$case->name); - $base_obj->depth = $o->depth + 1; - - if ($var instanceof BackedEnum) { - $c = $case->value; - $cases->contents[] = $this->parser->parse($c, $base_obj); - } else { - $cases->contents[] = $base_obj; - } - } - - self::$cache[$class] = $cases; - } - - $object = new EnumValue($var); - $object->transplant($o); - - $object->addRepresentation(self::$cache[$class], 0); - - $o = $object; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/FsPathPlugin.php b/old_vendor/kint-php/kint/src/Parser/FsPathPlugin.php deleted file mode 100644 index 7ec49de1..00000000 --- a/old_vendor/kint-php/kint/src/Parser/FsPathPlugin.php +++ /dev/null @@ -1,74 +0,0 @@ - 2048) { - return; - } - - if (!\preg_match('/[\\/\\'.DIRECTORY_SEPARATOR.']/', $var)) { - return; - } - - if (\preg_match('/[?<>"*|]/', $var)) { - return; - } - - if (!@\file_exists($var)) { - return; - } - - if (\in_array($var, self::$blacklist, true)) { - return; - } - - $r = new SplFileInfoRepresentation(new SplFileInfo($var)); - $r->hints[] = 'fspath'; - $o->addRepresentation($r, 0); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/IteratorPlugin.php b/old_vendor/kint-php/kint/src/Parser/IteratorPlugin.php deleted file mode 100644 index 7ebfe73e..00000000 --- a/old_vendor/kint-php/kint/src/Parser/IteratorPlugin.php +++ /dev/null @@ -1,107 +0,0 @@ -name = $class.' Iterator Contents'; - $b->access_path = 'iterator_to_array('.$o->access_path.', true)'; - $b->depth = $o->depth + 1; - $b->hints[] = 'blacklist'; - - $r = new Representation('Iterator'); - $r->contents = [$b]; - - $o->addRepresentation($r); - - return; - } - } - - $data = \iterator_to_array($var); - - $base_obj = new Value(); - $base_obj->depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'iterator_to_array('.$o->access_path.')'; - } - - $r = new Representation('Iterator'); - $r->contents = $this->parser->parse($data, $base_obj); - $r->contents = $r->contents->value->contents; - - $primary = $o->getRepresentations(); - $primary = \reset($primary); - if ($primary && $primary === $o->value && [] === $primary->contents) { - $o->addRepresentation($r, 0); - } else { - $o->addRepresentation($r); - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/JsonPlugin.php b/old_vendor/kint-php/kint/src/Parser/JsonPlugin.php deleted file mode 100644 index 6bcf3a61..00000000 --- a/old_vendor/kint-php/kint/src/Parser/JsonPlugin.php +++ /dev/null @@ -1,75 +0,0 @@ -depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'json_decode('.$o->access_path.', true)'; - } - - $r = new Representation('Json'); - $r->contents = $this->parser->parse($json, $base_obj); - - if (!\in_array('depth_limit', $r->contents->hints, true)) { - $r->contents = $r->contents->value->contents; - } - - $o->addRepresentation($r, 0); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/MicrotimePlugin.php b/old_vendor/kint-php/kint/src/Parser/MicrotimePlugin.php deleted file mode 100644 index 9531bbe7..00000000 --- a/old_vendor/kint-php/kint/src/Parser/MicrotimePlugin.php +++ /dev/null @@ -1,107 +0,0 @@ -depth) { - return; - } - - if (\is_string($var)) { - if ('microtime()' !== $o->name || !\preg_match('/^0\\.[0-9]{8} [0-9]{10}$/', $var)) { - return; - } - - $usec = (int) \substr($var, 2, 6); - $sec = (int) \substr($var, 11, 10); - } else { - if ('microtime(...)' !== $o->name) { - return; - } - - $sec = (int) \floor($var); - $usec = $var - $sec; - $usec = (int) \floor($usec * 1000000); - } - - $time = $sec + ($usec / 1000000); - - if (null !== self::$last) { - $last_time = self::$last[0] + (self::$last[1] / 1000000); - $lap = $time - $last_time; - ++self::$times; - } else { - $lap = null; - self::$start = $time; - } - - self::$last = [$sec, $usec]; - - if (null !== $lap) { - $total = $time - self::$start; - $r = new MicrotimeRepresentation($sec, $usec, self::$group, $lap, $total, self::$times); - } else { - $r = new MicrotimeRepresentation($sec, $usec, self::$group); - } - $r->contents = $var; - $r->implicit_label = true; - - $o->removeRepresentation($o->value); - $o->addRepresentation($r); - $o->hints[] = 'microtime'; - } - - public static function clean(): void - { - self::$last = null; - self::$start = null; - self::$times = 0; - ++self::$group; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/MysqliPlugin.php b/old_vendor/kint-php/kint/src/Parser/MysqliPlugin.php deleted file mode 100644 index 90a4abd6..00000000 --- a/old_vendor/kint-php/kint/src/Parser/MysqliPlugin.php +++ /dev/null @@ -1,193 +0,0 @@ - true, - 'connect_errno' => true, - 'connect_error' => true, - ]; - - // These are readable on empty mysqli objects, but not on failed connections - protected $empty_readable = [ - 'client_info' => true, - 'errno' => true, - 'error' => true, - ]; - - // These are only readable on connected mysqli objects - protected $connected_readable = [ - 'affected_rows' => true, - 'error_list' => true, - 'field_count' => true, - 'host_info' => true, - 'info' => true, - 'insert_id' => true, - 'server_info' => true, - 'server_version' => true, - 'sqlstate' => true, - 'protocol_version' => true, - 'thread_id' => true, - 'warning_count' => true, - ]; - - public function getTypes(): array - { - return ['object']; - } - - public function getTriggers(): int - { - return Parser::TRIGGER_COMPLETE; - } - - public function parse(&$var, Value &$o, int $trigger): void - { - if (!$var instanceof mysqli) { - return; - } - - /** @psalm-var ?string $var->sqlstate */ - try { - $connected = \is_string(@$var->sqlstate); - } catch (Throwable $t) { - $connected = false; - } - - /** @psalm-var ?string $var->client_info */ - try { - $empty = !$connected && \is_string(@$var->client_info); - } catch (Throwable $t) { // @codeCoverageIgnore - // Only possible in PHP 8.0. Before 8.0 there's no exception, - // after 8.1 there are no failed connection objects - $empty = false; // @codeCoverageIgnore - } - - foreach ($o->value->contents as $key => $obj) { - if (isset($this->connected_readable[$obj->name])) { - if (!$connected) { - continue; - } - } elseif (isset($this->empty_readable[$obj->name])) { - // No failed connections after PHP 8.1 - if (!$connected && !$empty) { // @codeCoverageIgnore - continue; // @codeCoverageIgnore - } - } elseif (!isset($this->always_readable[$obj->name])) { - continue; - } - - if ('null' !== $obj->type) { - continue; - } - - // @codeCoverageIgnoreStart - // All of this is irellevant after 8.1, - // we have separate logic for that below - - $param = $var->{$obj->name}; - - if (null === $param) { - continue; - } - - $base = Value::blank($obj->name, $obj->access_path); - - $base->depth = $obj->depth; - $base->owner_class = $obj->owner_class; - $base->operator = $obj->operator; - $base->access = $obj->access; - $base->reference = $obj->reference; - - $o->value->contents[$key] = $this->parser->parse($param, $base); - - // @codeCoverageIgnoreEnd - } - - // PHP81 returns an empty array when casting a mysqli instance - if (KINT_PHP81) { - $r = new ReflectionClass(mysqli::class); - - $basepropvalues = []; - - foreach ($r->getProperties() as $prop) { - if ($prop->isStatic()) { - continue; // @codeCoverageIgnore - } - - $pname = $prop->getName(); - $param = null; - - if (isset($this->connected_readable[$pname])) { - if ($connected) { - $param = $var->{$pname}; - } - } else { - $param = $var->{$pname}; - } - - $child = new Value(); - $child->depth = $o->depth + 1; - $child->owner_class = mysqli::class; - $child->operator = Value::OPERATOR_OBJECT; - $child->name = $pname; - - if ($prop->isPublic()) { - $child->access = Value::ACCESS_PUBLIC; - } elseif ($prop->isProtected()) { // @codeCoverageIgnore - $child->access = Value::ACCESS_PROTECTED; // @codeCoverageIgnore - } elseif ($prop->isPrivate()) { // @codeCoverageIgnore - $child->access = Value::ACCESS_PRIVATE; // @codeCoverageIgnore - } - - // We only do base mysqli properties so we don't need to worry about complex names - if ($this->parser->childHasPath($o, $child)) { - $child->access_path .= $o->access_path.'->'.$child->name; - } - - $basepropvalues[] = $this->parser->parse($param, $child); - } - - $o->value->contents = \array_merge($basepropvalues, $o->value->contents); - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/Parser.php b/old_vendor/kint-php/kint/src/Parser/Parser.php deleted file mode 100644 index 50642b90..00000000 --- a/old_vendor/kint-php/kint/src/Parser/Parser.php +++ /dev/null @@ -1,655 +0,0 @@ -marker = "kint\0".\random_bytes(16); - - $this->depth_limit = $depth_limit; - $this->caller_class = $caller; - } - - /** - * Set the caller class. - */ - public function setCallerClass(?string $caller = null): void - { - $this->noRecurseCall(); - - $this->caller_class = $caller; - } - - public function getCallerClass(): ?string - { - return $this->caller_class; - } - - /** - * Set the depth limit. - * - * @param int $depth_limit Maximum depth to parse data, 0 for none - */ - public function setDepthLimit(int $depth_limit = 0): void - { - $this->noRecurseCall(); - - $this->depth_limit = $depth_limit; - } - - public function getDepthLimit(): int - { - return $this->depth_limit; - } - - /** - * Parses a variable into a Kint object structure. - * - * @param mixed &$var The input variable - * @param Value $o The base object - */ - public function parse(&$var, Value $o): Value - { - $o->type = \strtolower(\gettype($var)); - - if (!$this->applyPlugins($var, $o, self::TRIGGER_BEGIN)) { - return $o; - } - - switch ($o->type) { - case 'array': - return $this->parseArray($var, $o); - case 'boolean': - case 'double': - case 'integer': - case 'null': - return $this->parseGeneric($var, $o); - case 'object': - return $this->parseObject($var, $o); - case 'resource': - return $this->parseResource($var, $o); - case 'string': - return $this->parseString($var, $o); - case 'unknown type': - case 'resource (closed)': - default: - return $this->parseResourceClosed($var, $o); - } - } - - public function addPlugin(PluginInterface $p): bool - { - if (!$types = $p->getTypes()) { - return false; - } - - if (!$triggers = $p->getTriggers()) { - return false; - } - - $p->setParser($this); - - foreach ($types as $type) { - if (!isset($this->plugins[$type])) { - $this->plugins[$type] = [ - self::TRIGGER_BEGIN => [], - self::TRIGGER_SUCCESS => [], - self::TRIGGER_RECURSION => [], - self::TRIGGER_DEPTH_LIMIT => [], - ]; - } - - foreach ($this->plugins[$type] as $trigger => &$pool) { - if ($triggers & $trigger) { - $pool[] = $p; - } - } - } - - return true; - } - - public function clearPlugins(): void - { - $this->plugins = []; - } - - public function haltParse(): void - { - $this->parse_break = true; - } - - public function childHasPath(InstanceValue $parent, Value $child): bool - { - if ('__PHP_Incomplete_Class' === $parent->classname) { - return false; - } - - if ('object' === $parent->type && (null !== $parent->access_path || $child->static || $child->const)) { - if (Value::ACCESS_PUBLIC === $child->access) { - return true; - } - - if (Value::ACCESS_PRIVATE === $child->access && $this->caller_class) { - if ($this->caller_class === $child->owner_class) { - return true; - } - } elseif (Value::ACCESS_PROTECTED === $child->access && $this->caller_class) { - if ($this->caller_class === $child->owner_class) { - return true; - } - - if (\is_subclass_of($this->caller_class, $child->owner_class)) { - return true; - } - - if (\is_subclass_of($child->owner_class, $this->caller_class)) { - return true; - } - } - } - - return false; - } - - /** - * Returns an array without the recursion marker in it. - * - * DO NOT pass an array that has had it's marker removed back - * into the parser, it will result in an extra recursion - * - * @param array $array Array potentially containing a recursion marker - * - * @return array Array with recursion marker removed - */ - public function getCleanArray(array $array): array - { - unset($array[$this->marker]); - - return $array; - } - - protected function noRecurseCall(): void - { - $bt = \debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); - - $caller_frame = [ - 'function' => __FUNCTION__, - ]; - - while (isset($bt[0]['object']) && $bt[0]['object'] === $this) { - $caller_frame = \array_shift($bt); - } - - foreach ($bt as $frame) { - if (isset($frame['object']) && $frame['object'] === $this) { - throw new DomainException(__CLASS__.'::'.$caller_frame['function'].' cannot be called from inside a parse'); - } - } - } - - /** - * @param null|bool|float|int &$var - */ - private function parseGeneric(&$var, Value $o): Value - { - $rep = new Representation('Contents'); - $rep->contents = $var; - $rep->implicit_label = true; - $o->addRepresentation($rep); - $o->value = $rep; - - $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); - - return $o; - } - - /** - * Parses a string into a Kint BlobValue structure. - * - * @param string &$var The input variable - * @param Value $o The base object - */ - private function parseString(string &$var, Value $o): Value - { - $string = new BlobValue(); - $string->transplant($o); - $string->encoding = BlobValue::detectEncoding($var); - $string->size = \strlen($var); - - $rep = new Representation('Contents'); - $rep->contents = $var; - $rep->implicit_label = true; - - $string->addRepresentation($rep); - $string->value = $rep; - - $this->applyPlugins($var, $string, self::TRIGGER_SUCCESS); - - return $string; - } - - /** - * Parses an array into a Kint object structure. - * - * @param array &$var The input variable - * @param Value $o The base object - */ - private function parseArray(array &$var, Value $o): Value - { - $array = new Value(); - $array->transplant($o); - $array->size = \count($var); - - if (isset($var[$this->marker])) { - --$array->size; - $array->hints[] = 'recursion'; - - $this->applyPlugins($var, $array, self::TRIGGER_RECURSION); - - return $array; - } - - $rep = new Representation('Contents'); - $rep->implicit_label = true; - $array->addRepresentation($rep); - $array->value = $rep; - - if (!$array->size) { - $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); - - return $array; - } - - if ($this->depth_limit && $o->depth >= $this->depth_limit) { - $array->hints[] = 'depth_limit'; - - $this->applyPlugins($var, $array, self::TRIGGER_DEPTH_LIMIT); - - return $array; - } - - $copy = \array_values($var); - - // It's really really hard to access numeric string keys in arrays, - // and it's really really hard to access integer properties in - // objects, so we just use array_values and index by counter to get - // at it reliably for reference testing. This also affects access - // paths since it's pretty much impossible to access these things - // without complicated stuff you should never need to do. - $i = 0; - - // Set the marker for recursion - $var[$this->marker] = $array->depth; - - $refmarker = new stdClass(); - - foreach ($var as $key => &$val) { - if ($key === $this->marker) { - continue; - } - - $child = new Value(); - $child->name = $key; - $child->depth = $array->depth + 1; - $child->access = Value::ACCESS_NONE; - $child->operator = Value::OPERATOR_ARRAY; - - if (null !== $array->access_path) { - if (\is_string($key) && (string) (int) $key === $key) { - $child->access_path = 'array_values('.$array->access_path.')['.$i.']'; // @codeCoverageIgnore - } else { - $child->access_path = $array->access_path.'['.\var_export($key, true).']'; - } - } - - $stash = $val; - try { - $copy[$i] = $refmarker; - } catch (TypeError $e) { - $child->reference = true; - } - if ($val === $refmarker) { - $child->reference = true; - $val = $stash; - } - - $rep->contents[] = $this->parse($val, $child); - ++$i; - } - - $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS); - unset($var[$this->marker]); - - return $array; - } - - /** - * Parses an object into a Kint InstanceValue structure. - * - * @param object &$var The input variable - * @param Value $o The base object - */ - private function parseObject(&$var, Value $o): Value - { - $hash = \spl_object_hash($var); - $values = (array) $var; - - $object = new InstanceValue(); - $object->transplant($o); - $object->classname = \get_class($var); - $object->spl_object_hash = $hash; - $object->size = \count($values); - - if (KINT_PHP72) { - $object->spl_object_id = \spl_object_id($var); - } - - if (isset($this->object_hashes[$hash])) { - $object->hints[] = 'recursion'; - - $this->applyPlugins($var, $object, self::TRIGGER_RECURSION); - - return $object; - } - - $this->object_hashes[$hash] = $object; - - if ($this->depth_limit && $o->depth >= $this->depth_limit) { - $object->hints[] = 'depth_limit'; - - $this->applyPlugins($var, $object, self::TRIGGER_DEPTH_LIMIT); - unset($this->object_hashes[$hash]); - - return $object; - } - - $reflector = new ReflectionObject($var); - - if ($reflector->isUserDefined()) { - $object->filename = $reflector->getFileName(); - $object->startline = $reflector->getStartLine(); - } - - $rep = new Representation('Properties'); - - $readonly = []; - - // Reflection is both slower and more painful to use than array casting - // We only use it to identify readonly and uninitialized properties - if (KINT_PHP74 && '__PHP_Incomplete_Class' != $object->classname) { - $rprops = $reflector->getProperties(); - - while ($reflector = $reflector->getParentClass()) { - $rprops = \array_merge($rprops, $reflector->getProperties(ReflectionProperty::IS_PRIVATE)); - } - - foreach ($rprops as $rprop) { - if ($rprop->isStatic()) { - continue; - } - - $rprop->setAccessible(true); - - if (KINT_PHP81 && $rprop->isReadOnly()) { - if ($rprop->isPublic()) { - $readonly[$rprop->getName()] = true; - } elseif ($rprop->isProtected()) { - $readonly["\0*\0".$rprop->getName()] = true; - } elseif ($rprop->isPrivate()) { - $readonly["\0".$rprop->getDeclaringClass()->getName()."\0".$rprop->getName()] = true; - } - } - - if ($rprop->isInitialized($var)) { - continue; - } - - $undefined = null; - - $child = new Value(); - $child->type = 'undefined'; - $child->depth = $object->depth + 1; - $child->owner_class = $rprop->getDeclaringClass()->getName(); - $child->operator = Value::OPERATOR_OBJECT; - $child->name = $rprop->getName(); - $child->readonly = KINT_PHP81 && $rprop->isReadOnly(); - - if ($rprop->isPublic()) { - $child->access = Value::ACCESS_PUBLIC; - } elseif ($rprop->isProtected()) { - $child->access = Value::ACCESS_PROTECTED; - } elseif ($rprop->isPrivate()) { - $child->access = Value::ACCESS_PRIVATE; - } - - // Can't dynamically add undefined properties, so no need to use var_export - if ($this->childHasPath($object, $child)) { - $child->access_path .= $object->access_path.'->'.$child->name; - } - - if ($this->applyPlugins($undefined, $child, self::TRIGGER_BEGIN)) { - $this->applyPlugins($undefined, $child, self::TRIGGER_SUCCESS); - } - $rep->contents[] = $child; - } - } - - $copy = \array_values($values); - $refmarker = new stdClass(); - $i = 0; - - // Reflection will not show parent classes private properties, and if a - // property was unset it will happly trigger a notice looking for it. - foreach ($values as $key => &$val) { - // Casting object to array: - // private properties show in the form "\0$owner_class_name\0$property_name"; - // protected properties show in the form "\0*\0$property_name"; - // public properties show in the form "$property_name"; - // http://www.php.net/manual/en/language.types.array.php#language.types.array.casting - - $child = new Value(); - $child->depth = $object->depth + 1; - $child->owner_class = $object->classname; - $child->operator = Value::OPERATOR_OBJECT; - $child->access = Value::ACCESS_PUBLIC; - if (isset($readonly[$key])) { - $child->readonly = true; - } - - $split_key = \explode("\0", (string) $key, 3); - - if (3 === \count($split_key) && '' === $split_key[0]) { - $child->name = $split_key[2]; - if ('*' === $split_key[1]) { - $child->access = Value::ACCESS_PROTECTED; - } else { - $child->access = Value::ACCESS_PRIVATE; - $child->owner_class = $split_key[1]; - } - } elseif (KINT_PHP72) { - $child->name = (string) $key; - } else { - $child->name = $key; // @codeCoverageIgnore - } - - if ($this->childHasPath($object, $child)) { - $child->access_path = $object->access_path; - - if (!KINT_PHP72 && \is_int($child->name)) { - $child->access_path = 'array_values((array) '.$child->access_path.')['.$i.']'; // @codeCoverageIgnore - } elseif (\preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $child->name)) { - $child->access_path .= '->'.$child->name; - } else { - $child->access_path .= '->{'.\var_export((string) $child->name, true).'}'; - } - } - - $stash = $val; - try { - $copy[$i] = $refmarker; - } catch (TypeError $e) { - $child->reference = true; - } - if ($val === $refmarker) { - $child->reference = true; - $val = $stash; - } - - $rep->contents[] = $this->parse($val, $child); - ++$i; - } - - $object->addRepresentation($rep); - $object->value = $rep; - $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS); - unset($this->object_hashes[$hash]); - - return $object; - } - - /** - * Parses a resource into a Kint ResourceValue structure. - * - * @param resource &$var The input variable - * @param Value $o The base object - */ - private function parseResource(&$var, Value $o): Value - { - $resource = new ResourceValue(); - $resource->transplant($o); - $resource->resource_type = \get_resource_type($var); - - $this->applyPlugins($var, $resource, self::TRIGGER_SUCCESS); - - return $resource; - } - - /** - * Parses a closed resource into a Kint object structure. - * - * @param mixed &$var The input variable - * @param Value $o The base object - */ - private function parseResourceClosed(&$var, Value $o): Value - { - $o->type = 'resource (closed)'; - $this->applyPlugins($var, $o, self::TRIGGER_SUCCESS); - - return $o; - } - - /** - * Applies plugins for an object type. - * - * @param mixed &$var variable - * @param Value $o Kint object parsed so far - * @param int $trigger The trigger to check for the plugins - * - * @return bool Continue parsing - */ - private function applyPlugins(&$var, Value &$o, int $trigger): bool - { - $break_stash = $this->parse_break; - - /** @psalm-var bool */ - $this->parse_break = false; - - $plugins = []; - - if (isset($this->plugins[$o->type][$trigger])) { - $plugins = $this->plugins[$o->type][$trigger]; - } - - foreach ($plugins as $plugin) { - try { - $plugin->parse($var, $o, $trigger); - } catch (Exception $e) { - \trigger_error( - 'An exception ('.\get_class($e).') was thrown in '.$e->getFile().' on line '.$e->getLine().' while executing Kint Parser Plugin "'.\get_class($plugin).'". Error message: '.$e->getMessage(), - E_USER_WARNING - ); - } - - if ($this->parse_break) { - $this->parse_break = $break_stash; - - return false; - } - } - - $this->parse_break = $break_stash; - - return true; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/PluginInterface.php b/old_vendor/kint-php/kint/src/Parser/PluginInterface.php deleted file mode 100644 index ff169fd1..00000000 --- a/old_vendor/kint-php/kint/src/Parser/PluginInterface.php +++ /dev/null @@ -1,44 +0,0 @@ -types = $types; - $this->triggers = $triggers; - $this->callback = $callback; - } - - public function setParser(Parser $p): void - { - $this->parser = $p; - } - - public function getTypes(): array - { - return $this->types; - } - - public function getTriggers(): int - { - return $this->triggers; - } - - public function parse(&$var, Value &$o, int $trigger): void - { - \call_user_func_array($this->callback, [&$var, &$o, $trigger, $this->parser]); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/SerializePlugin.php b/old_vendor/kint-php/kint/src/Parser/SerializePlugin.php deleted file mode 100644 index 49910878..00000000 --- a/old_vendor/kint-php/kint/src/Parser/SerializePlugin.php +++ /dev/null @@ -1,109 +0,0 @@ - Unserialization can result in code being loaded and executed due to - * > object instantiation and autoloading, and a malicious user may be able - * > to exploit this. - * - * The natural way to stop that from happening is to just refuse to unserialize - * stuff by default. Which is what we're doing for anything that's not scalar. - * - * @var bool - */ - public static $safe_mode = true; - - /** - * @var bool|class-string[] - */ - public static $allowed_classes = false; - - public function getTypes(): array - { - return ['string']; - } - - public function getTriggers(): int - { - return Parser::TRIGGER_SUCCESS; - } - - public function parse(&$var, Value &$o, int $trigger): void - { - $trimmed = \rtrim($var); - - if ('N;' !== $trimmed && !\preg_match('/^(?:[COabis]:\\d+[:;]|d:\\d+(?:\\.\\d+);)/', $trimmed)) { - return; - } - - $options = ['allowed_classes' => self::$allowed_classes]; - - if (!self::$safe_mode || !\in_array($trimmed[0], ['C', 'O', 'a'], true)) { - // Suppress warnings on unserializeable variable - $data = @\unserialize($trimmed, $options); - - if (false === $data && 'b:0;' !== \substr($trimmed, 0, 4)) { - return; - } - } - - $base_obj = new Value(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = 'unserialize('.$o->name.')'; - - if ($o->access_path) { - $base_obj->access_path = 'unserialize('.$o->access_path; - if (true === self::$allowed_classes) { - $base_obj->access_path .= ')'; - } else { - $base_obj->access_path .= ', '.\var_export($options, true).')'; - } - } - - $r = new Representation('Serialized'); - - if (isset($data)) { - $r->contents = $this->parser->parse($data, $base_obj); - } else { - $base_obj->hints[] = 'blacklist'; - $r->contents = $base_obj; - } - - $o->addRepresentation($r, 0); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php b/old_vendor/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php deleted file mode 100644 index db6f9b9c..00000000 --- a/old_vendor/kint-php/kint/src/Parser/SimpleXMLElementPlugin.php +++ /dev/null @@ -1,221 +0,0 @@ -removeRepresentation('properties'); - $o->removeRepresentation('iterator'); - $o->removeRepresentation('methods'); - } - - // An invalid SimpleXMLElement can gum up the works with - // warnings if we call stuff children/attributes on it. - if (!$var) { - $o->size = null; - - return; - } - - $x = new SimpleXMLElementValue(); - $x->transplant($o); - - $namespaces = \array_merge([null], $var->getDocNamespaces()); - - // Attributes - $a = new Representation('Attributes'); - - $base_obj = new Value(); - $base_obj->depth = $x->depth; - - if ($x->access_path) { - $base_obj->access_path = '(string) '.$x->access_path; - } - - // Attributes are strings. If we're too deep set the - // depth limit to enable parsing them, but no deeper. - if ($this->parser->getDepthLimit() && $this->parser->getDepthLimit() - 2 < $base_obj->depth) { - $base_obj->depth = $this->parser->getDepthLimit() - 2; - } - - $attribs = []; - - foreach ($namespaces as $nsAlias => $nsUrl) { - if ($nsAttribs = $var->attributes($nsUrl)) { - $cleanAttribs = []; - foreach ($nsAttribs as $name => $attrib) { - $cleanAttribs[(string) $name] = $attrib; - } - - if (null === $nsUrl) { - $obj = clone $base_obj; - if ($obj->access_path) { - $obj->access_path .= '->attributes()'; - } - - $a->contents = $this->parser->parse($cleanAttribs, $obj)->value->contents; - } else { - $obj = clone $base_obj; - if ($obj->access_path) { - $obj->access_path .= '->attributes('.\var_export($nsAlias, true).', true)'; - } - - $cleanAttribs = $this->parser->parse($cleanAttribs, $obj)->value->contents; - - foreach ($cleanAttribs as $attribute) { - $attribute->name = $nsAlias.':'.$attribute->name; - $a->contents[] = $attribute; - } - } - } - } - - if ($a->contents) { - $x->addRepresentation($a, 0); - } - - // Children - $c = new Representation('Children'); - - foreach ($namespaces as $nsAlias => $nsUrl) { - // This is doubling items because of the root namespace - // and the implicit namespace on its children. - $thisNs = $var->getNamespaces(); - if (isset($thisNs['']) && $thisNs[''] === $nsUrl) { - continue; - } - - if ($nsChildren = $var->children($nsUrl)) { - $nsap = []; - foreach ($nsChildren as $name => $child) { - $obj = new Value(); - $obj->depth = $x->depth + 1; - $obj->name = (string) $name; - if ($x->access_path) { - if (null === $nsUrl) { - $obj->access_path = $x->access_path.'->children()->'; - } else { - $obj->access_path = $x->access_path.'->children('.\var_export($nsAlias, true).', true)->'; - } - - if (\preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]+$/', (string) $name)) { - $obj->access_path .= (string) $name; - } else { - $obj->access_path .= '{'.\var_export((string) $name, true).'}'; - } - - if (isset($nsap[$obj->access_path])) { - ++$nsap[$obj->access_path]; - $obj->access_path .= '['.$nsap[$obj->access_path].']'; - } else { - $nsap[$obj->access_path] = 0; - } - } - - $value = $this->parser->parse($child, $obj); - - if ($value->access_path && 'string' === $value->type) { - $value->access_path = '(string) '.$value->access_path; - } - - $c->contents[] = $value; - } - } - } - - $x->size = \count($c->contents); - - if ($x->size) { - $x->addRepresentation($c, 0); - } else { - $x->size = null; - - if (\strlen((string) $var)) { - $base_obj = new BlobValue(); - $base_obj->depth = $x->depth + 1; - $base_obj->name = $x->name; - if ($x->access_path) { - $base_obj->access_path = '(string) '.$x->access_path; - } - - $value = (string) $var; - - $s = $this->parser->parse($value, $base_obj); - $srep = $s->getRepresentation('contents'); - $svalrep = $s->value && 'contents' == $s->value->getName() ? $s->value : null; - - if ($srep || $svalrep) { - $x->setIsStringValue(true); - $x->value = $srep ?: $svalrep; - - if ($srep) { - $x->replaceRepresentation($srep, 0); - } - } - - $reps = \array_reverse($s->getRepresentations()); - - foreach ($reps as $rep) { - $x->addRepresentation($rep, 0); - } - } - } - - $o = $x; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/SplFileInfoPlugin.php b/old_vendor/kint-php/kint/src/Parser/SplFileInfoPlugin.php deleted file mode 100644 index 696f3600..00000000 --- a/old_vendor/kint-php/kint/src/Parser/SplFileInfoPlugin.php +++ /dev/null @@ -1,57 +0,0 @@ -addRepresentation($r, 0); - $o->size = $r->getSize(); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/SplObjectStoragePlugin.php b/old_vendor/kint-php/kint/src/Parser/SplObjectStoragePlugin.php deleted file mode 100644 index bd671ad6..00000000 --- a/old_vendor/kint-php/kint/src/Parser/SplObjectStoragePlugin.php +++ /dev/null @@ -1,56 +0,0 @@ -getRepresentation('iterator'))) { - return; - } - - $r = $o->getRepresentation('iterator'); - if ($r) { - $o->size = !\is_array($r->contents) ? null : \count($r->contents); - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/StreamPlugin.php b/old_vendor/kint-php/kint/src/Parser/StreamPlugin.php deleted file mode 100644 index 748b53c5..00000000 --- a/old_vendor/kint-php/kint/src/Parser/StreamPlugin.php +++ /dev/null @@ -1,83 +0,0 @@ -resource_type) { - return; - } - - // Doublecheck that the resource is open before we get the metadata - if (!\is_resource($var)) { - return; - } - - $meta = \stream_get_meta_data($var); - - $rep = new Representation('Stream'); - $rep->implicit_label = true; - - $base_obj = new Value(); - $base_obj->depth = $o->depth; - - if ($o->access_path) { - $base_obj->access_path = 'stream_get_meta_data('.$o->access_path.')'; - } - - $rep->contents = $this->parser->parse($meta, $base_obj); - - if (!\in_array('depth_limit', $rep->contents->hints, true)) { - $rep->contents = $rep->contents->value->contents; - } - - $o->addRepresentation($rep, 0); - $o->value = $rep; - - $stream = new StreamValue($meta); - $stream->transplant($o); - $o = $stream; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/TablePlugin.php b/old_vendor/kint-php/kint/src/Parser/TablePlugin.php deleted file mode 100644 index 8d7e155c..00000000 --- a/old_vendor/kint-php/kint/src/Parser/TablePlugin.php +++ /dev/null @@ -1,89 +0,0 @@ -value->contents)) { - return; - } - - $array = $this->parser->getCleanArray($var); - - if (\count($array) < 2) { - return; - } - - // Ensure this is an array of arrays and that all child arrays have the - // same keys. We don't care about their children - if there's another - // "table" inside we'll just make another one down the value tab - $keys = null; - foreach ($array as $elem) { - if (!\is_array($elem) || \count($elem) < 2) { - return; - } - - if (null === $keys) { - $keys = \array_keys($elem); - } elseif (\array_keys($elem) !== $keys) { - return; - } - } - - // Ensure none of the child arrays are recursion or depth limit. We - // don't care if their children are since they are the table cells - foreach ($o->value->contents as $childarray) { - if (empty($childarray->value->contents)) { - return; - } - } - - // Objects by reference for the win! We can do a copy-paste of the value - // representation contents and just slap a new hint on there and hey - // presto we have our table representation with no extra memory used! - $table = new Representation('Table'); - $table->contents = $o->value->contents; - $table->hints[] = 'table'; - $o->addRepresentation($table, 0); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ThrowablePlugin.php b/old_vendor/kint-php/kint/src/Parser/ThrowablePlugin.php deleted file mode 100644 index 7fd065f6..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ThrowablePlugin.php +++ /dev/null @@ -1,61 +0,0 @@ -transplant($o); - $r = new SourceRepresentation($var->getFile(), $var->getLine()); - $r->showfilename = true; - $throw->addRepresentation($r, 0); - - $o = $throw; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/TimestampPlugin.php b/old_vendor/kint-php/kint/src/Parser/TimestampPlugin.php deleted file mode 100644 index 9136ca80..00000000 --- a/old_vendor/kint-php/kint/src/Parser/TimestampPlugin.php +++ /dev/null @@ -1,77 +0,0 @@ -value->label = 'Timestamp'; - $o->value->hints[] = 'timestamp'; - } - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/ToStringPlugin.php b/old_vendor/kint-php/kint/src/Parser/ToStringPlugin.php deleted file mode 100644 index 478442be..00000000 --- a/old_vendor/kint-php/kint/src/Parser/ToStringPlugin.php +++ /dev/null @@ -1,69 +0,0 @@ -hasMethod('__toString')) { - return; - } - - foreach (self::$blacklist as $class) { - if ($var instanceof $class) { - return; - } - } - - $r = new Representation('toString'); - $r->contents = (string) $var; - - $o->addRepresentation($r); - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/TracePlugin.php b/old_vendor/kint-php/kint/src/Parser/TracePlugin.php deleted file mode 100644 index a5f47dcf..00000000 --- a/old_vendor/kint-php/kint/src/Parser/TracePlugin.php +++ /dev/null @@ -1,120 +0,0 @@ -value) { - return; - } - - $trace = $this->parser->getCleanArray($var); - - if (\count($trace) !== \count($o->value->contents) || !Utils::isTrace($trace)) { - return; - } - - $traceobj = new TraceValue(); - $traceobj->transplant($o); - $rep = $traceobj->value; - - $old_trace = $rep->contents; - - Utils::normalizeAliases(self::$blacklist); - $path_blacklist = self::normalizePaths(self::$path_blacklist); - - $rep->contents = []; - - foreach ($old_trace as $frame) { - $index = $frame->name; - - if (!isset($trace[$index]['function'])) { - // Something's very very wrong here, but it's probably a plugin's fault - continue; - } - - if (Utils::traceFrameIsListed($trace[$index], self::$blacklist)) { - continue; - } - - if (isset($trace[$index]['file']) && ($realfile = \realpath($trace[$index]['file']))) { - foreach ($path_blacklist as $path) { - if (0 === \strpos($realfile, $path)) { - continue 2; - } - } - } - - $rep->contents[$index] = new TraceFrameValue($frame, $trace[$index]); - } - - \ksort($rep->contents); - $rep->contents = \array_values($rep->contents); - - $traceobj->clearRepresentations(); - $traceobj->addRepresentation($rep); - $traceobj->size = \count($rep->contents); - $o = $traceobj; - } - - protected static function normalizePaths(array $paths): array - { - $normalized = []; - - foreach ($paths as $path) { - $realpath = \realpath($path); - if (\is_dir($realpath)) { - $realpath .= DIRECTORY_SEPARATOR; - } - - $normalized[] = $realpath; - } - - return $normalized; - } -} diff --git a/old_vendor/kint-php/kint/src/Parser/XmlPlugin.php b/old_vendor/kint-php/kint/src/Parser/XmlPlugin.php deleted file mode 100644 index a5a31abd..00000000 --- a/old_vendor/kint-php/kint/src/Parser/XmlPlugin.php +++ /dev/null @@ -1,152 +0,0 @@ -access_path); - - if (empty($xml)) { - return; - } - - [$xml, $access_path, $name] = $xml; - - $base_obj = new Value(); - $base_obj->depth = $o->depth + 1; - $base_obj->name = $name; - $base_obj->access_path = $access_path; - - $r = new Representation('XML'); - $r->contents = $this->parser->parse($xml, $base_obj); - - $o->addRepresentation($r, 0); - } - - protected static function xmlToSimpleXML(string $var, ?string $parent_path): ?array - { - $errors = \libxml_use_internal_errors(true); - try { - $xml = \simplexml_load_string($var); - } catch (Exception $e) { - return null; - } finally { - \libxml_use_internal_errors($errors); - } - - if (false === $xml) { - return null; - } - - if (null === $parent_path) { - $access_path = null; - } else { - $access_path = 'simplexml_load_string('.$parent_path.')'; - } - - $name = $xml->getName(); - - return [$xml, $access_path, $name]; - } - - /** - * Get the DOMDocument info. - * - * If it errors loading then we wouldn't have gotten this far in the first place. - * - * @psalm-param non-empty-string $var The XML string - * - * @param ?string $parent_path The path to the parent, in this case the XML string - * - * @return ?array The root element DOMNode, the access path, and the root element name - */ - protected static function xmlToDOMDocument(string $var, ?string $parent_path): ?array - { - // There's no way to check validity in DOMDocument without making errors. For shame! - if (!self::xmlToSimpleXML($var, $parent_path)) { - return null; - } - - $xml = new DOMDocument(); - $xml->loadXML($var); - - if ($xml->childNodes->count() > 1) { - $xml = $xml->childNodes; - $access_path = 'childNodes'; - } else { - $xml = $xml->firstChild; - $access_path = 'firstChild'; - } - - if (null === $parent_path) { - $access_path = null; - } else { - $access_path = '(function($s){$x = new \\DomDocument(); $x->loadXML($s); return $x;})('.$parent_path.')->'.$access_path; - } - - $name = $xml->nodeName ?? null; - - return [$xml, $access_path, $name]; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/AbstractRenderer.php b/old_vendor/kint-php/kint/src/Renderer/AbstractRenderer.php deleted file mode 100644 index adec8f07..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/AbstractRenderer.php +++ /dev/null @@ -1,175 +0,0 @@ - - * - * @psalm-consistent-constructor - */ -abstract class AbstractRenderer implements RendererInterface -{ - public const SORT_NONE = 0; - public const SORT_VISIBILITY = 1; - public const SORT_FULL = 2; - - protected $call_info = []; - protected $statics = []; - protected $show_trace = true; - - public function setCallInfo(array $info): void - { - if (!isset($info['modifiers']) || !\is_array($info['modifiers'])) { - $info['modifiers'] = []; - } - - if (!isset($info['trace']) || !\is_array($info['trace'])) { - $info['trace'] = []; - } - - $this->call_info = [ - 'params' => $info['params'] ?? null, - 'modifiers' => $info['modifiers'], - 'callee' => $info['callee'] ?? null, - 'caller' => $info['caller'] ?? null, - 'trace' => $info['trace'], - ]; - } - - public function getCallInfo(): array - { - return $this->call_info; - } - - public function setStatics(array $statics): void - { - $this->statics = $statics; - $this->setShowTrace(!empty($statics['display_called_from'])); - } - - public function getStatics(): array - { - return $this->statics; - } - - public function setShowTrace(bool $show_trace): void - { - $this->show_trace = $show_trace; - } - - public function getShowTrace(): bool - { - return $this->show_trace; - } - - public function filterParserPlugins(array $plugins): array - { - return $plugins; - } - - public function preRender(): string - { - return ''; - } - - public function postRender(): string - { - return ''; - } - - /** - * Returns the first compatible plugin available. - * - * @psalm-param PluginMap $plugins Array of hints to class strings - * @psalm-param string[] $hints Array of object hints - * - * @psalm-return PluginMap Array of hints to class strings filtered and sorted by object hints - */ - public function matchPlugins(array $plugins, array $hints): array - { - $out = []; - - foreach ($hints as $key) { - if (isset($plugins[$key])) { - $out[$key] = $plugins[$key]; - } - } - - return $out; - } - - public static function sortPropertiesFull(Value $a, Value $b): int - { - $sort = Value::sortByAccess($a, $b); - if ($sort) { - return $sort; - } - - $sort = Value::sortByName($a, $b); - if ($sort) { - return $sort; - } - - return InstanceValue::sortByHierarchy($a->owner_class, $b->owner_class); - } - - /** - * Sorts an array of Value. - * - * @param Value[] $contents Object properties to sort - * - * @return Value[] - */ - public static function sortProperties(array $contents, int $sort): array - { - switch ($sort) { - case self::SORT_VISIBILITY: - // Containers to quickly stable sort by type - $containers = [ - Value::ACCESS_PUBLIC => [], - Value::ACCESS_PROTECTED => [], - Value::ACCESS_PRIVATE => [], - Value::ACCESS_NONE => [], - ]; - - foreach ($contents as $item) { - $containers[$item->access][] = $item; - } - - return \call_user_func_array('array_merge', $containers); - case self::SORT_FULL: - \usort($contents, [self::class, 'sortPropertiesFull']); - // no break - default: - return $contents; - } - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/CliRenderer.php b/old_vendor/kint-php/kint/src/Renderer/CliRenderer.php deleted file mode 100644 index c2ea103b..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/CliRenderer.php +++ /dev/null @@ -1,182 +0,0 @@ -windows_output = true; - } else { - $stream = self::$windows_stream; - - if (!$stream && \defined('STDOUT')) { - $stream = STDOUT; - } - - if (!$stream) { - $this->windows_output = true; - } else { - $this->windows_output = !\sapi_windows_vt100_support($stream); - } - } - } - - if (!self::$terminal_width) { - if (!KINT_WIN && self::$detect_width) { - try { - self::$terminal_width = (int) \exec('tput cols'); - } catch (Throwable $t) { - self::$terminal_width = self::$default_width; - } - } - - if (self::$terminal_width < self::$min_terminal_width) { - self::$terminal_width = self::$default_width; - } - } - - $this->colors = $this->windows_output ? false : self::$cli_colors; - - $this->header_width = self::$terminal_width; - } - - public function colorValue(string $string): string - { - if (!$this->colors) { - return $string; - } - - return "\x1b[32m".\str_replace("\n", "\x1b[0m\n\x1b[32m", $string)."\x1b[0m"; - } - - public function colorType(string $string): string - { - if (!$this->colors) { - return $string; - } - - return "\x1b[35;1m".\str_replace("\n", "\x1b[0m\n\x1b[35;1m", $string)."\x1b[0m"; - } - - public function colorTitle(string $string): string - { - if (!$this->colors) { - return $string; - } - - return "\x1b[36m".\str_replace("\n", "\x1b[0m\n\x1b[36m", $string)."\x1b[0m"; - } - - public function renderTitle(Value $o): string - { - if ($this->windows_output) { - return $this->utf8ToWindows(parent::renderTitle($o)); - } - - return parent::renderTitle($o); - } - - public function preRender(): string - { - return PHP_EOL; - } - - public function postRender(): string - { - if ($this->windows_output) { - return $this->utf8ToWindows(parent::postRender()); - } - - return parent::postRender(); - } - - public function escape(string $string, $encoding = false): string - { - return \str_replace("\x1b", '\\x1b', $string); - } - - protected function utf8ToWindows(string $string): string - { - return \str_replace( - ['┌', '═', '┐', '│', '└', '─', '┘'], - [' ', '=', ' ', '|', ' ', '-', ' '], - $string - ); - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/PlainRenderer.php b/old_vendor/kint-php/kint/src/Renderer/PlainRenderer.php deleted file mode 100644 index 7210f55f..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/PlainRenderer.php +++ /dev/null @@ -1,237 +0,0 @@ - [ - ['Kint\\Renderer\\PlainRenderer', 'renderJs'], - ['Kint\\Renderer\\Text\\MicrotimePlugin', 'renderJs'], - ], - 'style' => [ - ['Kint\\Renderer\\PlainRenderer', 'renderCss'], - ], - 'raw' => [], - ]; - - /** - * Path to the CSS file to load by default. - * - * @var string - */ - public static $theme = 'plain.css'; - - /** - * Output htmlentities instead of utf8. - * - * @var bool - */ - public static $disable_utf8 = false; - - public static $needs_pre_render = true; - - public static $always_pre_render = false; - - protected $force_pre_render = false; - - public function __construct() - { - parent::__construct(); - $this->setForcePreRender(self::$always_pre_render); - } - - public function setCallInfo(array $info): void - { - parent::setCallInfo($info); - - if (\in_array('@', $this->call_info['modifiers'], true)) { - $this->setForcePreRender(true); - } - } - - public function setStatics(array $statics): void - { - parent::setStatics($statics); - - if (!empty($statics['return'])) { - $this->setForcePreRender(true); - } - } - - public function setForcePreRender(bool $force_pre_render): void - { - $this->force_pre_render = $force_pre_render; - } - - public function getForcePreRender(): bool - { - return $this->force_pre_render; - } - - public function shouldPreRender(): bool - { - return $this->getForcePreRender() || self::$needs_pre_render; - } - - public function colorValue(string $string): string - { - return ''.$string.''; - } - - public function colorType(string $string): string - { - return ''.$string.''; - } - - public function colorTitle(string $string): string - { - return ''.$string.''; - } - - public function renderTitle(Value $o): string - { - if (self::$disable_utf8) { - return $this->utf8ToHtmlentity(parent::renderTitle($o)); - } - - return parent::renderTitle($o); - } - - public function preRender(): string - { - $output = ''; - - if ($this->shouldPreRender()) { - foreach (self::$pre_render_sources as $type => $values) { - $contents = ''; - foreach ($values as $v) { - $contents .= \call_user_func($v, $this); - } - - if (!\strlen($contents)) { - continue; - } - - switch ($type) { - case 'script': - $output .= ''; - break; - case 'style': - $output .= ''; - break; - default: - $output .= $contents; - } - } - - // Don't pre-render on every dump - if (!$this->getForcePreRender()) { - self::$needs_pre_render = false; - } - } - - return $output.'
'; - } - - public function postRender(): string - { - if (self::$disable_utf8) { - return $this->utf8ToHtmlentity(parent::postRender()).'
'; - } - - return parent::postRender().''; - } - - public function ideLink(string $file, int $line): string - { - $path = $this->escape(Kint::shortenPath($file)).':'.$line; - $ideLink = Kint::getIdeLink($file, $line); - - if (!$ideLink) { - return $path; - } - - $class = ''; - - if (\preg_match('/https?:\\/\\//i', $ideLink)) { - $class = 'class="kint-ide-link" '; - } - - return ''.$path.''; - } - - public function escape(string $string, $encoding = false): string - { - if (false === $encoding) { - $encoding = BlobValue::detectEncoding($string); - } - - $original_encoding = $encoding; - - if (false === $encoding || 'ASCII' === $encoding) { - $encoding = 'UTF-8'; - } - - $string = \htmlspecialchars($string, ENT_NOQUOTES, $encoding); - - // this call converts all non-ASCII characters into numeirc htmlentities - if (\function_exists('mb_encode_numericentity') && 'ASCII' !== $original_encoding) { - $string = \mb_encode_numericentity($string, [0x80, 0xFFFF, 0, 0xFFFF], $encoding); - } - - return $string; - } - - protected function utf8ToHtmlentity(string $string): string - { - return \str_replace( - ['┌', '═', '┐', '│', '└', '─', '┘'], - ['┌', '═', '┐', '│', '└', '─', '┘'], - $string - ); - } - - protected static function renderJs(): string - { - return \file_get_contents(KINT_DIR.'/resources/compiled/shared.js').\file_get_contents(KINT_DIR.'/resources/compiled/plain.js'); - } - - protected static function renderCss(): string - { - if (\file_exists(KINT_DIR.'/resources/compiled/'.self::$theme)) { - return \file_get_contents(KINT_DIR.'/resources/compiled/'.self::$theme); - } - - return \file_get_contents(self::$theme); - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/RendererInterface.php b/old_vendor/kint-php/kint/src/Renderer/RendererInterface.php deleted file mode 100644 index 577e9df0..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/RendererInterface.php +++ /dev/null @@ -1,57 +0,0 @@ -renderer = $r; - } - - /** - * @param string $content The replacement for the getValueShort contents - */ - public function renderLockedHeader(Value $o, string $content): string - { - $header = '
'; - - if (RichRenderer::$access_paths && $o->depth > 0 && $ap = $o->getAccessPath()) { - $header .= ''; - } - - $header .= ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).' '; - - if ($s = $o->getOperator()) { - $header .= $this->renderer->escape($s, 'ASCII').' '; - } - } - - if (null !== ($s = $o->getType())) { - if (RichRenderer::$escape_types) { - $s = $this->renderer->escape($s); - } - - if ($o->reference) { - $s = '&'.$s; - } - - $header .= ''.$s.''; - - if ($o instanceof InstanceValue && isset($o->spl_object_id)) { - $header .= '#'.((int) $o->spl_object_id); - } - - $header .= ' '; - } - - if (null !== ($s = $o->getSize())) { - if (RichRenderer::$escape_types) { - $s = $this->renderer->escape($s); - } - $header .= '('.$s.') '; - } - - $header .= $content; - - if (!empty($ap)) { - $header .= '
'.$this->renderer->escape($ap).'
'; - } - - return $header.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php deleted file mode 100644 index 15220e5d..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/ArrayLimitPlugin.php +++ /dev/null @@ -1,38 +0,0 @@ -'.$this->renderLockedHeader($o, 'Array Limit').''; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php deleted file mode 100644 index 4cbce1ae..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/BinaryPlugin.php +++ /dev/null @@ -1,62 +0,0 @@ -contents)) { - return null; - } - - $out = '
';
-
-        $lines = \str_split($r->contents, self::$line_length);
-
-        foreach ($lines as $index => $line) {
-            $out .= \sprintf('%08X', $index * self::$line_length).":\t";
-
-            $chunks = \str_split(\str_pad(\bin2hex($line), 2 * self::$line_length, ' '), self::$chunk_length);
-
-            $out .= \implode(' ', $chunks);
-            $out .= "\t".\preg_replace('/[^\\x20-\\x7E]/', '.', $line)."\n";
-        }
-
-        $out .= '
'; - - return $out; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php deleted file mode 100644 index 78064a7a..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/BlacklistPlugin.php +++ /dev/null @@ -1,38 +0,0 @@ -'.$this->renderLockedHeader($o, 'Blacklisted').''; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/CallablePlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/CallablePlugin.php deleted file mode 100644 index 74438052..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/CallablePlugin.php +++ /dev/null @@ -1,130 +0,0 @@ -renderMethod($o); - } - - if ($o instanceof ClosureValue) { - return parent::renderValue($o); - } - - return null; - } - - protected function renderMethod(MethodValue $o): string - { - if (!empty(self::$method_cache[$o->owner_class][$o->name])) { - $children = self::$method_cache[$o->owner_class][$o->name]['children']; - - $header = $this->renderer->renderHeaderWrapper( - $o, - (bool) \strlen($children), - self::$method_cache[$o->owner_class][$o->name]['header'] - ); - - return '
'.$header.$children.'
'; - } - - $children = $this->renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers()) || $o->return_reference) { - $header .= ''.$s; - - if ($o->return_reference) { - if ($s) { - $header .= ' '; - } - $header .= $this->renderer->escape('&'); - } - - $header .= ' '; - } - - if (null !== ($s = $o->getName())) { - $function = $this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).')'; - - if (null !== ($url = $o->getPhpDocUrl())) { - $function = ''.$function.''; - } - - $header .= ''.$function.''; - } - - if (!empty($o->returntype)) { - $header .= ': '; - - if ($o->return_reference) { - $header .= $this->renderer->escape('&'); - } - - $header .= $this->renderer->escape($o->returntype).''; - } elseif ($o->docstring) { - if (\preg_match('/@return\\s+(.*)\\r?\\n/m', $o->docstring, $matches)) { - if (\trim($matches[1])) { - $header .= ': '.$this->renderer->escape(\trim($matches[1])).''; - } - } - } - - if (null !== ($s = $o->getValueShort())) { - if (RichRenderer::$strlen_max) { - $s = Utils::truncateString($s, RichRenderer::$strlen_max); - } - $header .= ' '.$this->renderer->escape($s); - } - - if (\strlen($o->owner_class) && \strlen($o->name)) { - self::$method_cache[$o->owner_class][$o->name] = [ - 'header' => $header, - 'children' => $children, - ]; - } - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php deleted file mode 100644 index a2b5a7e0..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/ClosurePlugin.php +++ /dev/null @@ -1,64 +0,0 @@ -renderer->renderChildren($o); - - $header = ''; - - if (null !== ($s = $o->getModifiers())) { - $header .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $header .= ''.$this->renderer->escape($s).'('.$this->renderer->escape($o->getParams()).') '; - } - - $header .= 'Closure'; - if (isset($o->spl_object_id)) { - $header .= '#'.((int) $o->spl_object_id); - } - $header .= ' '.$this->renderer->escape(Kint::shortenPath($o->filename)).':'.(int) $o->startline; - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/ColorPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/ColorPlugin.php deleted file mode 100644 index f1de5fe3..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/ColorPlugin.php +++ /dev/null @@ -1,102 +0,0 @@ -getRepresentation('color'); - - if (!$r instanceof ColorRepresentation) { - return null; - } - - $children = $this->renderer->renderChildren($o); - - $header = $this->renderer->renderHeader($o); - $header .= '
'; - - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } - - public function renderTab(Representation $r): ?string - { - if (!$r instanceof ColorRepresentation) { - return null; - } - - $out = ''; - - if ($color = $r->getColor(ColorRepresentation::COLOR_NAME)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_3)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_6)) { - $out .= ''.$color."\n"; - } - - if ($r->hasAlpha()) { - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_4)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HEX_8)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_RGBA)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HSLA)) { - $out .= ''.$color."\n"; - } - } else { - if ($color = $r->getColor(ColorRepresentation::COLOR_RGB)) { - $out .= ''.$color."\n"; - } - if ($color = $r->getColor(ColorRepresentation::COLOR_HSL)) { - $out .= ''.$color."\n"; - } - } - - if (!\strlen($out)) { - return null; - } - - return '
'.$out.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php deleted file mode 100644 index 3b73b6be..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/DepthLimitPlugin.php +++ /dev/null @@ -1,38 +0,0 @@ -'.$this->renderLockedHeader($o, 'Depth Limit').''; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php deleted file mode 100644 index f5ed37b6..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/MethodDefinitionPlugin.php +++ /dev/null @@ -1,76 +0,0 @@ -contents)) { - $docstring = []; - foreach (\explode("\n", $r->contents) as $line) { - $docstring[] = \trim($line); - } - - $docstring = $this->renderer->escape(\implode("\n", $docstring)); - } - - $addendum = []; - if (isset($r->class) && $r->inherited) { - $addendum[] = 'Inherited from '.$this->renderer->escape($r->class); - } - - if (isset($r->file, $r->line)) { - $addendum[] = 'Defined in '.$this->renderer->escape(Kint::shortenPath($r->file)).':'.((int) $r->line); - } - - if ($addendum) { - $addendum = ''.\implode("\n", $addendum).''; - - if (isset($docstring)) { - $docstring .= "\n\n".$addendum; - } else { - $docstring = $addendum; - } - } - - if (!isset($docstring)) { - return null; - } - - return '
'.$docstring.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php deleted file mode 100644 index 086e8144..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/MicrotimePlugin.php +++ /dev/null @@ -1,74 +0,0 @@ -getDateTime())) { - return null; - } - - $out = $dt->format('Y-m-d H:i:s.u'); - if (null !== $r->lap) { - $out .= '
SINCE LAST CALL: '.\round($r->lap, 4).'s.'; - } - if (null !== $r->total) { - $out .= '
SINCE START: '.\round($r->total, 4).'s.'; - } - if (null !== $r->avg) { - $out .= '
AVERAGE DURATION: '.\round($r->avg, 4).'s.'; - } - - $bytes = Utils::getHumanReadableBytes($r->mem); - $out .= '
MEMORY USAGE: '.$r->mem.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_real); - $out .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - $bytes = Utils::getHumanReadableBytes($r->mem_peak); - $out .= '
PEAK MEMORY USAGE: '.$r->mem_peak.' bytes ('.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - $bytes = Utils::getHumanReadableBytes($r->mem_peak_real); - $out .= ' (real '.\round($bytes['value'], 3).' '.$bytes['unit'].')'; - - return '
'.$out.'
'; - } - - public static function renderJs(): string - { - if (\is_string($out = \file_get_contents(KINT_DIR.'/resources/compiled/microtime.js'))) { - return $out; - } - - return ''; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/PluginInterface.php b/old_vendor/kint-php/kint/src/Renderer/Rich/PluginInterface.php deleted file mode 100644 index bbdb8ac5..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/PluginInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -'.$this->renderLockedHeader($o, 'Recursion').''; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php deleted file mode 100644 index 87d98707..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/SimpleXMLElementPlugin.php +++ /dev/null @@ -1,56 +0,0 @@ -isStringValue() || !empty($o->getRepresentation('attributes')->contents)) { - return null; - } - - $b = new BlobValue(); - $b->transplant($o); - $b->type = 'string'; - - $children = $this->renderer->renderChildren($b); - $header = $this->renderer->renderHeader($o); - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/SourcePlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/SourcePlugin.php deleted file mode 100644 index a02f7ec1..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/SourcePlugin.php +++ /dev/null @@ -1,83 +0,0 @@ -source)) { - return null; - } - - $source = $r->source; - - // Trim empty lines from the start and end of the source - foreach ($source as $linenum => $line) { - if (\strlen(\trim($line)) || $linenum === $r->line) { - break; - } - - unset($source[$linenum]); - } - - foreach (\array_reverse($source, true) as $linenum => $line) { - if (\strlen(\trim($line)) || $linenum === $r->line) { - break; - } - - unset($source[$linenum]); - } - - $output = ''; - - foreach ($source as $linenum => $line) { - if ($linenum === $r->line) { - $output .= '
'.$this->renderer->escape($line)."\n".'
'; - } else { - $output .= '
'.$this->renderer->escape($line)."\n".'
'; - } - } - - if ($output) { - \reset($source); - - $data = ''; - if ($r->showfilename) { - $data = ' data-kint-filename="'.$this->renderer->escape($r->filename).'"'; - } - - return '
'.$output.'
'; - } - - return null; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php b/old_vendor/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php deleted file mode 100644 index fb310af5..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/TabPluginInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -'; - - $firstrow = \reset($r->contents); - - foreach ($firstrow->value->contents as $field) { - $out .= ''; - } - - $out .= ''; - - foreach ($r->contents as $row) { - $out .= ''; - - foreach ($row->value->contents as $field) { - $out .= 'getType())) { - $type = $this->renderer->escape($s); - - if ($field->reference) { - $ref = '&'; - $type = $ref.$type; - } - - if (null !== ($s = $field->getSize())) { - $size .= ' ('.$this->renderer->escape($s).')'; - } - } - - if ($type) { - $out .= ' title="'.$type.$size.'"'; - } - - $out .= '>'; - - switch ($field->type) { - case 'boolean': - $out .= $field->value->contents ? ''.$ref.'true' : ''.$ref.'false'; - break; - case 'integer': - case 'double': - $out .= (string) $field->value->contents; - break; - case 'null': - $out .= ''.$ref.'null'; - break; - case 'string': - if ($field->encoding) { - $val = $field->value->contents; - if (RichRenderer::$strlen_max && self::$respect_str_length) { - $val = Utils::truncateString($val, RichRenderer::$strlen_max); - } - - $out .= $this->renderer->escape($val); - } else { - $out .= ''.$type.''; - } - break; - case 'array': - $out .= ''.$ref.'array'.$size; - break; - case 'object': - $out .= ''.$ref.$this->renderer->escape($field->classname).''.$size; - break; - case 'resource': - $out .= ''.$ref.'resource'; - break; - default: - $out .= ''.$ref.'unknown'; - break; - } - - if (\in_array('blacklist', $field->hints, true)) { - $out .= ' Blacklisted'; - } elseif (\in_array('recursion', $field->hints, true)) { - $out .= ' Recursion'; - } elseif (\in_array('depth_limit', $field->hints, true)) { - $out .= ' Depth Limit'; - } - - $out .= ''; - } - - $out .= ''; - } - - $out .= '
'; - if (null !== ($s = $field->getName())) { - $out .= $this->renderer->escape($s); - } - $out .= '
'; - if (null !== ($s = $row->getName())) { - $out .= $this->renderer->escape($s); - } - $out .= '
'; - - return $out; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php deleted file mode 100644 index 43abfb60..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/TimestampPlugin.php +++ /dev/null @@ -1,44 +0,0 @@ -contents)) { - return '
'.$dt->setTimeZone(new DateTimeZone('UTC'))->format('Y-m-d H:i:s T').'
'; - } - - return null; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php b/old_vendor/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php deleted file mode 100644 index 147e2e31..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/TraceFramePlugin.php +++ /dev/null @@ -1,70 +0,0 @@ -trace['file']) && !empty($o->trace['line'])) { - $header = ''.$this->renderer->ideLink($o->trace['file'], (int) $o->trace['line']).' '; - } else { - $header = 'PHP internal call '; - } - - if ($o->trace['class']) { - $header .= $this->renderer->escape($o->trace['class'].$o->trace['type']); - } - - if (\is_string($o->trace['function'])) { - $function = $this->renderer->escape($o->trace['function'].'()'); - } else { - $function = $this->renderer->escape( - $o->trace['function']->getName().'('.$o->trace['function']->getParams().')' - ); - - if (null !== ($url = $o->trace['function']->getPhpDocUrl())) { - $function = ''.$function.''; - } - } - - $header .= ''.$function.''; - - $children = $this->renderer->renderChildren($o); - $header = $this->renderer->renderHeaderWrapper($o, (bool) \strlen($children), $header); - - return '
'.$header.$children.'
'; - } -} diff --git a/old_vendor/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php b/old_vendor/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php deleted file mode 100644 index 112a7f7d..00000000 --- a/old_vendor/kint-php/kint/src/Renderer/Rich/ValuePluginInterface.php +++ /dev/null @@ -1,35 +0,0 @@ - Rich\ArrayLimitPlugin::class, - 'blacklist' => Rich\BlacklistPlugin::class, - 'callable' => Rich\CallablePlugin::class, - 'color' => Rich\ColorPlugin::class, - 'depth_limit' => Rich\DepthLimitPlugin::class, - 'recursion' => Rich\RecursionPlugin::class, - 'simplexml_element' => Rich\SimpleXMLElementPlugin::class, - 'trace_frame' => Rich\TraceFramePlugin::class, - ]; - - /** - * RichRenderer tab plugins should implement TabPluginInterface. - * - * @psalm-var PluginMap - */ - public static $tab_plugins = [ - 'binary' => Rich\BinaryPlugin::class, - 'color' => Rich\ColorPlugin::class, - 'method_definition' => Rich\MethodDefinitionPlugin::class, - 'microtime' => Rich\MicrotimePlugin::class, - 'source' => Rich\SourcePlugin::class, - 'table' => Rich\TablePlugin::class, - 'timestamp' => Rich\TimestampPlugin::class, - ]; - - public static $pre_render_sources = [ - 'script' => [ - [self::class, 'renderJs'], - [Rich\MicrotimePlugin::class, 'renderJs'], - ], - 'style' => [ - [self::class, 'renderCss'], - ], - 'raw' => [], - ]; - - /** - * Whether or not to render access paths. - * - * Access paths can become incredibly heavy with very deep and wide - * structures. Given mostly public variables it will typically make - * up one quarter of the output HTML size. - * - * If this is an unacceptably large amount and your browser is groaning - * under the weight of the access paths - your first order of buisiness - * should be to get a new browser. Failing that, use this to turn them off. - * - * @var bool - */ - public static $access_paths = true; - - /** - * The maximum length of a string before it is truncated. - * - * Falsey to disable - * - * @var int - */ - public static $strlen_max = 80; - - /** - * Path to the CSS file to load by default. - * - * @var string - */ - public static $theme = 'original.css'; - - /** - * Assume types and sizes don't need to be escaped. - * - * Turn this off if you use anything but ascii in your class names, - * but it'll cause a slowdown of around 10% - * - * @var bool - */ - public static $escape_types = false; - - /** - * Move all dumps to a folder at the bottom of the body. - * - * @var bool - */ - public static $folder = false; - - /** - * Sort mode for object properties. - * - * @var int - */ - public static $sort = self::SORT_NONE; - - public static $needs_pre_render = true; - public static $needs_folder_render = true; - - public static $always_pre_render = false; - - public static $js_nonce = null; - public static $css_nonce = null; - - protected $plugin_objs = []; - protected $expand = false; - protected $force_pre_render = false; - protected $use_folder = false; - - public function __construct() - { - $this->setUseFolder(self::$folder); - $this->setForcePreRender(self::$always_pre_render); - } - - public function setCallInfo(array $info): void - { - parent::setCallInfo($info); - - if (\in_array('!', $this->call_info['modifiers'], true)) { - $this->setExpand(true); - $this->setUseFolder(false); - } - - if (\in_array('@', $this->call_info['modifiers'], true)) { - $this->setForcePreRender(true); - } - } - - public function setStatics(array $statics): void - { - parent::setStatics($statics); - - if (!empty($statics['expanded'])) { - $this->setExpand(true); - } - - if (!empty($statics['return'])) { - $this->setForcePreRender(true); - } - } - - public function setExpand(bool $expand): void - { - $this->expand = $expand; - } - - public function getExpand(): bool - { - return $this->expand; - } - - public function setForcePreRender(bool $force_pre_render): void - { - $this->force_pre_render = $force_pre_render; - } - - public function getForcePreRender(): bool - { - return $this->force_pre_render; - } - - public function setUseFolder(bool $use_folder): void - { - $this->use_folder = $use_folder; - } - - public function getUseFolder(): bool - { - return $this->use_folder; - } - - public function shouldPreRender(): bool - { - return $this->getForcePreRender() || self::$needs_pre_render; - } - - public function shouldFolderRender(): bool - { - return $this->getUseFolder() && ($this->getForcePreRender() || self::$needs_folder_render); - } - - public function render(Value $o): string - { - if (($plugin = $this->getPlugin(self::$value_plugins, $o->hints)) && $plugin instanceof ValuePluginInterface) { - $output = $plugin->renderValue($o); - if (null !== $output && \strlen($output)) { - return $output; - } - } - - $children = $this->renderChildren($o); - $header = $this->renderHeaderWrapper($o, (bool) \strlen($children), $this->renderHeader($o)); - - return '
'.$header.$children.'
'; - } - - public function renderNothing(): string - { - return '
No argument
'; - } - - public function renderHeaderWrapper(Value $o, bool $has_children, string $contents): string - { - $out = 'getExpand()) { - $out .= ' kint-show'; - } - - $out .= '"'; - } - - $out .= '>'; - - if (self::$access_paths && $o->depth > 0 && ($ap = $o->getAccessPath())) { - $out .= ''; - } - - if ($has_children) { - $out .= ''; - - if (0 === $o->depth) { - $out .= ''; - $out .= ''; - } - - $out .= ''; - } - - $out .= $contents; - - if (!empty($ap)) { - $out .= '
'.$this->escape($ap).'
'; - } - - return $out.''; - } - - public function renderHeader(Value $o): string - { - $output = ''; - - if (null !== ($s = $o->getModifiers())) { - $output .= ''.$s.' '; - } - - if (null !== ($s = $o->getName())) { - $output .= ''.$this->escape($s).' '; - - if ($s = $o->getOperator()) { - $output .= $this->escape($s, 'ASCII').' '; - } - } - - if (null !== ($s = $o->getType())) { - if (self::$escape_types) { - $s = $this->escape($s); - } - - if ($o->reference) { - $s = '&'.$s; - } - - $output .= ''.$s.''; - - if ($o instanceof InstanceValue && isset($o->spl_object_id)) { - $output .= '#'.((int) $o->spl_object_id); - } - - $output .= ' '; - } - - if (null !== ($s = $o->getSize())) { - if (self::$escape_types) { - $s = $this->escape($s); - } - $output .= '('.$s.') '; - } - - if (null !== ($s = $o->getValueShort())) { - $s = \preg_replace('/\\s+/', ' ', $s); - - if (self::$strlen_max) { - $s = Utils::truncateString($s, self::$strlen_max); - } - - $output .= $this->escape($s); - } - - return \trim($output); - } - - public function renderChildren(Value $o): string - { - $contents = []; - $tabs = []; - - foreach ($o->getRepresentations() as $rep) { - $result = $this->renderTab($o, $rep); - if (\strlen($result)) { - $contents[] = $result; - $tabs[] = $rep; - } - } - - if (empty($tabs)) { - return ''; - } - - $output = '
'; - - if (1 === \count($tabs) && $tabs[0]->labelIsImplicit()) { - $output .= \reset($contents); - } else { - $output .= '
    '; - - foreach ($tabs as $i => $tab) { - if (0 === $i) { - $output .= '
  • '; - } else { - $output .= '
  • '; - } - - $output .= $this->escape($tab->getLabel()).'
  • '; - } - - $output .= '
    '; - - foreach ($contents as $i => $tab) { - if (0 === $i) { - $output .= '
  • '; - } else { - $output .= '
  • '; - } - - $output .= $tab.'
  • '; - } - - $output .= '
'; - } - - return $output.'
'; - } - - public function preRender(): string - { - $output = ''; - - if ($this->shouldPreRender()) { - foreach (self::$pre_render_sources as $type => $values) { - $contents = ''; - foreach ($values as $v) { - $contents .= \call_user_func($v, $this); - } - - if (!\strlen($contents)) { - continue; - } - - switch ($type) { - case 'script': - $output .= ' \ No newline at end of file diff --git a/app/Views/template/footer.php b/app/Views/template/footer.php index d9156580..fdfadf58 100644 --- a/app/Views/template/footer.php +++ b/app/Views/template/footer.php @@ -467,5 +467,12 @@ + + + + + + + diff --git a/app/Views/template/header.php b/app/Views/template/header.php index dd774f1b..619f56c3 100644 --- a/app/Views/template/header.php +++ b/app/Views/template/header.php @@ -29,6 +29,7 @@ " rel="stylesheet" type="text/css" /> + " rel="stylesheet" type="text/css" /> @@ -186,6 +187,12 @@ Address Print +
  • + "> + + Custom Notifications + +
  • From 66a916342263d67488ab58eb93038ca2c8234048 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Sat, 23 Sep 2023 14:29:41 +0530 Subject: [PATCH 07/17] ps --- app/Config/Constants.php | 5 +- app/Config/Routes.php | 7 +- app/Controllers/Notifications.php | 50 ++--- app/Helpers/apiIntegration_helper.php | 12 +- app/Views/dashboard.php | 1 - app/Views/notifications_form.php | 289 ++++++++++++++------------ app/Views/template/header.php | 2 +- 7 files changed, 193 insertions(+), 173 deletions(-) diff --git a/app/Config/Constants.php b/app/Config/Constants.php index deb54d6a..c95970b7 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -114,6 +114,9 @@ define('order_column', ["invoice_id","wp_api_order_id","invoice_child_id"]); define('order_child','invoiceitems'); define('order_child_column', ["invoice_id","wp_api_line_items_id","customer_id"]); - + +define('WAAI_TOKEN', '650be030cedb3'); +define('WAAI_INSTANCE', '650C383B67BC7'); +define('SEND_WAAI_URL', 'https://waai.in/api/send'); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index fda467f0..07751740 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -104,11 +104,10 @@ $routes->add('approve_invoice/(:num)', 'Invoice::approve_invoice/$1'); $routes->get('generate_invoice_pdf/(:num)', 'Invoice::generate_invoice_pdf/$1'); -# Api integration Routes +# Notifications Routes $routes->get('send_whatsapp_message/', 'Notifications::send_whatsapp_message'); -$routes->post('whatsapp_notifications/', 'Notifications::whatsapp_notifications'); - -$routes->match(['post', 'get'], 'custom_notifications', 'Notifications::mail_notifications'); +$routes->post('whatsapp_custom_notifications/', 'Notifications::whatsapp_custom_notifications'); +$routes->match(['post', 'get'], 'mail_custom_notifications', 'Notifications::mail_custom_notifications'); # Api integration Routes $routes->post('api/(:any)', 'ApiIntegration::api_integration/$1'); diff --git a/app/Controllers/Notifications.php b/app/Controllers/Notifications.php index 39ea8f96..de62d695 100755 --- a/app/Controllers/Notifications.php +++ b/app/Controllers/Notifications.php @@ -45,20 +45,23 @@ class Notifications extends BaseController public function send_whatsapp_message() { helper('apiIntegration'); $params = (object) Null; - $this->access_token = "650be030cedb3"; - // $this->instance_id = $this->get_whatsapp_instance(); - $this->instance_id = "650C383B67BC7"; + + + + + + try { $this->logger->info("Whatsapp : sending message instance id = ".$this->instance_id); $params->number = 916369084112; $params->type = "text"; $params->message = "TestingFromVBPYUIO"; - $params->instance_id = $this->instance_id; - $params->access_token = $this->access_token; + $params->instance_id = WAAI_TOKEN; + $params->access_token = WAAI_INSTANCE; $this->logger->info("Whatsapp : sending message request type b4 = ".gettype($params)); //$url = "https://waai.in/api/send?number=916369084112&type=text&message=helper&instance_id=650C383B67BC7&access_token=650be030cedb3"; $url = "https://waai.in/api/send"; - $message = perform_whatsapp_request($url,"POST",$params); + $message = perform_whatsapp_request($url,"POST",$params); // https://waai.in/api/send?number=91639084112&type=text&message=helper&instance_id=650C383B67BC7&access_token=650be030cedb3/r/n{"status":"success","message":{"key":{"remoteJid":"91639084112@c.us","fromMe":true,"id":"BAE540383CE30F06"},"message":{"extendedTextMessage":{"text":"helper"}},"messageTimestamp":"1695362314"}} // {"status":"success","message":{"key":{"remoteJid":"916369084112@c.us","fromMe":true,"id":"BAE500BBE10A0AC0"},"message":{"extendedTextMessage":{"text":"TestingFromVBP"}},"messageTimestamp":"1695362020"}} // {"status":"error","message":"Access token is required"} @@ -72,7 +75,7 @@ class Notifications extends BaseController ## Email Section : - public function mail_notifications() + public function mail_custom_notifications() { $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); $data['page_name'] = 'Custom Notifications'; @@ -106,22 +109,21 @@ class Notifications extends BaseController if ($email->send()) { $this->logger->info('Email sent successfully'); $successMessage = 'Email sent successfully'; + $data['successMessage'] = $successMessage; } else { throw new \Exception('Email not sent. Please try again.'); } } catch (\Exception $e) { $this->logger->error('Error sending email: ' . $e->getMessage()); $validationErrors = 'Error sending email: ' . $e->getMessage(); + $data['validationErrors'] = $validationErrors; } } - $data['successMessage'] = $successMessage; - $data['validationErrors'] = $validationErrors; - $this->render_page('notifications_form', $data); } - public function whatsapp_notifications(){ + public function whatsapp_custom_notifications(){ $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); $data['page_name'] = 'Custom Notifications'; @@ -136,29 +138,21 @@ class Notifications extends BaseController try { $this->logger->info("Whatsapp : sending message instance id = ".$this->instance_id); $params->number = (int)'91'.$records['mobile']; - $params->type = "text"; + $params->type = $records['type'] == "" ? "text" : $records['type']; + $params->instance_id = WAAI_INSTANCE; + $params->access_token = WAAI_TOKEN; $params->message = $records['description']; - $params->instance_id = $this->instance_id; - $params->access_token = $this->access_token; + if($records['type'] == 'media'){ $params->media_url = $records['media_url'];} $this->logger->info("Whatsapp : sending message request type b4 = ".gettype($params)); - //$url = "https://waai.in/api/send?number=916369084112&type=text&message=helper&instance_id=650C383B67BC7&access_token=650be030cedb3"; - $url = "https://waai.in/api/send"; - $successMessage = perform_whatsapp_request($url,"POST",$params); - // https://waai.in/api/send?number=91639084112&type=text&message=helper&instance_id=650C383B67BC7&access_token=650be030cedb3/r/n{"status":"success","message":{"key":{"remoteJid":"91639084112@c.us","fromMe":true,"id":"BAE540383CE30F06"},"message":{"extendedTextMessage":{"text":"helper"}},"messageTimestamp":"1695362314"}} - // {"status":"success","message":{"key":{"remoteJid":"916369084112@c.us","fromMe":true,"id":"BAE500BBE10A0AC0"},"message":{"extendedTextMessage":{"text":"TestingFromVBP"}},"messageTimestamp":"1695362020"}} - // {"status":"error","message":"Access token is required"} - + $successMessage = perform_whatsapp_request(SEND_WAAI_URL,"POST",$params); + $this->logger->info("Whatsapp : Reponse = ".$successMessage); + $data['successMessage'] = $successMessage; } catch (\Exception $e) { $this->logger->error("An error occurred: " . $e->getMessage()); $validationErrors = "An error occurred: " . $e->getMessage(); + $data['validationErrors'] = $validationErrors; } - - } - - - $data['successMessage'] = $successMessage; - $data['validationErrors'] = $validationErrors; - + } $this->render_page('notifications_form', $data); } diff --git a/app/Helpers/apiIntegration_helper.php b/app/Helpers/apiIntegration_helper.php index 731b723c..2456deea 100644 --- a/app/Helpers/apiIntegration_helper.php +++ b/app/Helpers/apiIntegration_helper.php @@ -1,9 +1,9 @@ status === "error") { - log_message('ERROR',"PerformWhatsappRequest : error = ".$result->message); + // log_message('ERROR',"PerformWhatsappRequest : error = ".$result->message); throw new Exception($result->message); }else{ $final_result = "Success"; } }else{ $curl_errno= curl_errno($curl); - log_message('ERROR',"PerformWhatsappRequest : curl error = ".$curl_errno); + // log_message('ERROR',"PerformWhatsappRequest : curl error = ".$curl_errno); throw new Error("Errno returned ".$curl_errno); } curl_close($curl); diff --git a/app/Views/dashboard.php b/app/Views/dashboard.php index ea29ff20..157cc6c0 100644 --- a/app/Views/dashboard.php +++ b/app/Views/dashboard.php @@ -1,6 +1,5 @@
    - " class="btn btn-success waves-effect"> Whatsapp Api integration
    diff --git a/app/Views/notifications_form.php b/app/Views/notifications_form.php index a8723f84..79eae16b 100644 --- a/app/Views/notifications_form.php +++ b/app/Views/notifications_form.php @@ -1,165 +1,190 @@ -
    -
    -
    -
    -
    -
    -
    - " alt="logo" class="avatar-sm rounded-circle"> -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - " alt="logo" class="avatar-sm rounded-circle"> -
    -
    - -
    -
    -
    -
    + + -
    +
    -

    - - -
    -

    -
    -
    - +

    +
    +
    + +
    + +

    + +

    + +

    + -
    "> -
    - -
    -
    -
    -
    - -
    - + +
    +
    + "> +
    + +
    + +
    -
    -
    - -
    - +
    + +
    + +
    -
    -
    - -
    - +
    + +
    + +
    -
    - -
    - -
    - +
    -
    - +
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -

    - - -
    -

    -
    -
    - - -
    "> -
    - -
    - + +
    +
    +
    "> +
    + +
    + +
    -
    -
    - -
    - +
    + +
    + +
    +
    + +
    + +
    + +
    -
    - +
    -
    - + +
    \ No newline at end of file diff --git a/app/Views/template/header.php b/app/Views/template/header.php index 619f56c3..71c83159 100644 --- a/app/Views/template/header.php +++ b/app/Views/template/header.php @@ -188,7 +188,7 @@
  • - "> + "> Custom Notifications From 1eacb6917718cb8d5fd219fa808d1c2215b84fb2 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Sat, 23 Sep 2023 18:40:35 +0530 Subject: [PATCH 08/17] sanjeev --- app/Controllers/Notifications.php | 6 --- app/Controllers/Users.php | 51 +++++++++++------- app/Views/notifications_form.php | 22 +++++--- app/Views/template/footer.php | 9 +++- app/Views/user_list.php | 20 ++++++- public/uploads/2023-06-17_14.png | Bin 142110 -> 0 bytes public/uploads/2023-06-17_15.png | Bin 142110 -> 0 bytes .../uploads/Screenshot 2023-07-14 160403.png | Bin 261749 -> 0 bytes .../Screenshot 2023-07-14 160403_1.png | Bin 261749 -> 0 bytes .../uploads/Screenshot 2023-07-20 120901.png | Bin 374321 -> 0 bytes 10 files changed, 72 insertions(+), 36 deletions(-) delete mode 100644 public/uploads/2023-06-17_14.png delete mode 100644 public/uploads/2023-06-17_15.png delete mode 100644 public/uploads/Screenshot 2023-07-14 160403.png delete mode 100644 public/uploads/Screenshot 2023-07-14 160403_1.png delete mode 100644 public/uploads/Screenshot 2023-07-20 120901.png diff --git a/app/Controllers/Notifications.php b/app/Controllers/Notifications.php index de62d695..475e4cfa 100755 --- a/app/Controllers/Notifications.php +++ b/app/Controllers/Notifications.php @@ -45,12 +45,6 @@ class Notifications extends BaseController public function send_whatsapp_message() { helper('apiIntegration'); $params = (object) Null; - - - - - - try { $this->logger->info("Whatsapp : sending message instance id = ".$this->instance_id); $params->number = 916369084112; diff --git a/app/Controllers/Users.php b/app/Controllers/Users.php index 55d5b105..a60396cf 100755 --- a/app/Controllers/Users.php +++ b/app/Controllers/Users.php @@ -67,10 +67,11 @@ class Users extends BaseController ## For inserting/updating details of user public function insert_users() { + // print_r($this->request->getPost());die(); helper('session'); $session_uid = get_logged_user_id(); $session_bid = get_business_id(); - + try { // print_r($_FILES);die(); $validationRule = [ 'userfile' => [ @@ -85,10 +86,9 @@ class Users extends BaseController ]; if (!$this->validate($validationRule) && $this->request->getPost('profile_picture') === '') { - $data = ['errors' => $this->validator->getErrors()]; - print_r($data); - return 'hello'; - } + $error = $this->validator->getErrors(); + throw new \Exception((string)$error); + } $img = $this->request->getFile('profile_picture'); $user_id = $this->request->getPost('user_id'); $business_id = $this->request->getPost('business_id'); @@ -104,11 +104,11 @@ class Users extends BaseController if ($user_id) { $previousFileName = $this->request->getPost('previous_ufile'); if ($previousFileName && is_file('public/uploads/' . $previousFileName)) { - link('public/uploads/' . $previousFileName); + link('public/uploads/'.$previousFileName,''); } } } else { - $fileName = $this->request->getPost('previous_ufile', ''); // Use the previous filename if no new image is provided + $fileName = $this->request->getPost('previous_ufile')?$this->request->getPost('previous_ufile'):""; // Use the previous filename if no new image is provided } @@ -141,34 +141,45 @@ class Users extends BaseController $data['password'] = $hash_password; $data['created_by'] = $session_uid; //print_r($data);die; - $UsersModel->insert($data); + ($UsersModel->insert($data)) ? session()->setFlashdata('success', 'User has been added successfully.') + : session()->setFlashdata('error', 'User could not be added. Please try again.'); } else { // It's an update operation $isactive = $this->request->getPost('isactive'); $data['isactive'] = ($isactive == 'on') ? 1 : 0; $data['updated_by'] = $session_uid; - $UsersModel->update($user_id, $data); + // $UsersModel->update($user_id, $data); + ($UsersModel->update($user_id, $data)) ? session()->setFlashdata('success', 'User has been updated successfully.') + : session()->setFlashdata('error', 'User update failed. Please try again.'); + } + }catch(\Exception $e) { + session()->setFlashdata('error', 'Message: ' .$e->getMessage()); + } return redirect()->route('user_list'); } ## For delete the user details (Which means inactive the details) public function delete_user($id) { - helper('session'); $session_uid = get_logged_user_id(); - - $model = new UsersModel(); - - $existingBook = $model->find($id); - if (!$existingBook) { - return redirect()->route('user_list'); + try { + $model = new UsersModel(); + $existingBook = $model->find($id); + if ($existingBook) { + // $data=[]; + $data['isactive'] = 0; + $data['updated_by'] = $session_uid; + ($model->update($id, $data)) ? session()->setFlashdata('success', 'Deleted successfully.') + : throw new \Exception("Data Not able to Deleted"); + } + else{ + throw new \Exception("Data Not Available"); + } + }catch(\Exception $e) { + session()->setFlashdata('error', 'Message: ' .$e->getMessage()); } - - $data['isactive'] = 0; - $data['updated_by'] = $session_uid; - $model->update($id, $data); return redirect()->route('user_list'); } } diff --git a/app/Views/notifications_form.php b/app/Views/notifications_form.php index 79eae16b..39eecea5 100644 --- a/app/Views/notifications_form.php +++ b/app/Views/notifications_form.php @@ -38,14 +38,22 @@
    - -

    + + -

    - -

    - - + + +

    diff --git a/app/Views/template/footer.php b/app/Views/template/footer.php index fdfadf58..57229530 100644 --- a/app/Views/template/footer.php +++ b/app/Views/template/footer.php @@ -473,6 +473,13 @@ - + diff --git a/app/Views/user_list.php b/app/Views/user_list.php index ec71cb96..a4a453d1 100644 --- a/app/Views/user_list.php +++ b/app/Views/user_list.php @@ -7,9 +7,25 @@

  • - getFlashdata('success')): ?> -
    getFlashdata('success') ?>
    + getFlashdata('success') || session()->getFlashdata('error')) : ?> + getFlashdata('success')) : ?> + + getFlashdata('error')) : ?> + + + +
    diff --git a/public/uploads/2023-06-17_14.png b/public/uploads/2023-06-17_14.png deleted file mode 100644 index 32a11680c68d05fa2dc9c75b1e7e15d8d44be584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142110 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%0AG1Ywf&Ml3`-B65)Zk26-VX z!*7F3Sv2Yu2W&_|MY*zW)w+QORlok7jK$OyLkhZad_K<>h{BYxl2$ajo%OG0E!Qz81g;E_J=gFtWI55Vbcl&jO<#2Mpe-zJ9zs=L!%0VX(Tm#~Zt~#1k?u7-J zv6($>ndF&ZiQ}s2`W=VUzhgRQC4i|~h`-^sN^s;0nN#HW-+HiGc8=*K~+RboL?i-q4q_1wj)8`A@wCt_ik zUO42u{%xF7tQ9u`E)^5>iK9PUxg%z4_+fulPAIHmEz%r*wmbK2ru3lQ zRx+XT)E~c;8jeauP}8{N@I4a@-EVcKfFkq4wlLH?eb_mscd$jn92n%wGj8$(JXcn| z>qwHneawH{3u4v1{a1)cY_JH%KnxbEi0Ar;!!2^-$pyv!dlG`;W&*Z6*^Tf;2799kchW0gWo}%Vm zU0vnkTStd;ft$*AAK07KVR8DW#3FA&0-=vNixCJkc_cRL@@EGbqPp5FfKj-oBPk7B4723KO zgrEDw#3wPh7Pp|(FjnS5%(O|~`f(k!0zkF?@UZXE*i*F;Ii}L8>x_t?=l(8du?&U6 zy*v+J=DgLljPx4aN@nf}pV{cr5VtW$7#lJ#3W}o{RpS^uUsb#QHwsiYXt9nxS{5q! zN(xjWJ`%loQ)b{SoPj*v+H@Wyo^|d?(<^Lmd+#oHfYAt($Vln(Z}v+K%g-26TJhopOsYaBVq8huggirCCLZ>qqe)qfwAsv8tw+&5005TN1ygtru)dz{SBy>I6x$Mkpl32SD1 zX}t}16xy#QE=G7fEZ_s)5v?l5q2@qV0jRRq=<P19v@XpRNF?>sa`!vma*Ksl9Lt!-i^h# zAwtU46(9Rjwxczyo!p&lnITcZ+MV)KWX-RdQ^Cy_*wIN>7Mufha)PrHezaWtYrg)9 zyB2?i4Q^euvY`gHBr9b>g$+f4%}w*9c> zZyB231R_rw!e;P{KG>aCc5s1P-eH```ew1-q>0~{m2}4WQ!q2OGL5NH%ggWh{_kZ8 zwwtJb>AE~-!n59SnH+eJKZS;6700WuDevh9Uhz=Sui`sg#e=`5pGMq@1@5hi&f5NN zR5pONP^XcDAa4osM=i`FfzXasA~ru>=2{%89k606jyADhyC1gVPk35vubFO;DutP8;|;lDJ_B!N)uZs&#CFlbT@wdu z?HPlm5!~bIx)+0fxStmwE8oILkR84V84CXh`!_P%Z)w}U4=JuCiej2^Pg<(afFJh- zK3t{_+TG|WMV}dxIPX-+7vby(wEoZVma4oEzys^T755{`Ysu^aRKJ2`oRG-e@IMYY zSm~sHcZ|7Nwz_o{qj_|Lg&l72o=--xjSm#RfJ21IODjCz0J=dpvkRT`mGBZ+UN--d z3~Zo!Iqimt_dL7`=!w)94jf>cXLFC{oCT}{&n+T(=(RwZN_(w)RxC^G$vFc;r`IqD zs8otAFZVPwjT(&@Exr^72?H;pA+a9roV|d(jsLDGP_xDT(QYN08U?MlR3>qH0&Rwg za=jgQ8|HzR^rwBtl#g^1Q@peIsF+=mFD3gXU|^T-y(V=&z$z10)u*IEC=~rc`E}H) z|1^;Sus>o3beoJ?#?tn4+&nJDEOV1$S>g%oAj)PoU^CaYb2_D8*+58Vkd(!{VCZJV z$7Ec?q(ga4OT`S2B#XStah8-7$}cnZBPGLDja=Mi;qAiV-_j)vwNIG%r1{vQqz&Lk zY)eX3xHb=_EM9<)ouVp2!cLTm5&$*Ex4j_=^YsY!R)iV4h9)&Vdt`&&?p=X@0D3n7 z69*n2oaxO32Y@Mo&7>*Y!gv3&U-%MQ(R?$$dsY;9+!NFI)Rdhi)^_R)7%0OUL)FE7 zrk1AB=_vOIahNuG?rSw2Z4!o&C zI>=w^(GJ;jqQ=;}Spwa?!^VXjzaM$STsby|BYDEN|36>Qh?UtVEcI3G@2C#2YIus0 zl0voW5VK+W)JuGYy1t?fWa8xFQE-#IyfnysrxbMs50%Y)58X1TAHH>YQPJ3}( z;b{#@uQAaj?KAbV*XQq;dC&g-Yv4S1Ib&8lp(O&X@}vCS{k+>)|K3+p?YQ0oI!b$Vt*~F4_EYy>_egxh( zS=izDBOnA>EZ?bBDAEaV`?8;nt7aSsnlAeIcm1()t%=pa>BxN^k^c;3ZRgO4e8`62 z$Fc&&3ER#Lgw>;%Z*X;Hm`9s0DMrC%=w$%5b33QP#2Y&lT*HmmGU>Ybu&Mmant>}r z%7L7%XTahob{u6c;?wm69g;t(hqKDMBhXbrdUT^Fs{-p2xwL!mH(%OAN8QX3U71~? zi6j08Eewl$xC4*lGahFE!H`IZe*8evsHwN-VcZDC5Uj84()T^stc=zvlUsQ~5=Dx$ zv)~@W^IVZi*at;ordAxef7jUQgDf~UYA3BG)hK{DG?)!gDxHq;MXFFKatkd!1VCfL ztpFnTKkJNUYmbk#2*XL{DN(C`@5yAh`f1GcDAiM&Z`CYC@;~@IU)Qwy8a^plL23_Z z+tEHn*Rug)qQ?3pyxYoOn<8={BC&Q;bp~_}EUcbyPZj#|O4m`J6A#X6ZQH(;N{3I{ zEA+VWcQDA1;bLS>Ngs6+tKsRjL!(9?%G z31x0>#l`keQ@7#8u8V1@wkWhaJ4?#3A|m6VE>^(d;+sr$ zB4JA?7?B7xv0_+K{1co38uHaD)LMS0FFP2E#+rDsUDS2C^^5udHLbuU+abp8m% zA}j>k5m2(WYdc z{&CzE;=ZYRjId9B`$_W%VR;Qtk6Q2KxRoEKLxWc2HVI8ozK057OPg`g+8^n;)35)l zdQAlY#~+BCn2>X?JlED@6gRamE6J7V9N~V(B3(>K`gJXtr$B1f_SiYwK3-Jt^am2e zc8ND#DaV+;ILy6>{hK3{vw(d<%4G}S?vCO9(SJJEOeoKZN9#`{mgkAJ&Sz8zM9dmf zE){XY7hfvA`w5rcQl>od!d4Xov82$MS&E1;G&_j>Ql$m803s0btC+F9?H z9O6;ww7j^k(LyaWZ{^*jsiz_XY{8k50HBnpOjC27(k=s;WH5FBp|*LDras>BhQ;Pa zY*_&zizPB_MDnqqsiJvMUzvVyIq7EZ>%(4^FR*7=7P~Nq83*IFVZVtrDJwNx!=4dQz$8$EQvb zh6$NGZwCn^)_`k{Fo&PWVcq(T{zcE9{99{<6cxU~RTD)}qlAb;d*S)S zhpR3fm$MLCgPrj1PZaoFiJY^AWg0(@y?VF%vx+_YcLIvp2$=4(bC92DQVs0EK_>YGGZ+Ji1+i`EN2SMGZ_Q_%LAKpK6GeKSP$nyW8W(oT&FmSlg?myhlYsvO~-}`DO~A zhM&FTJ@DS5(EsF5ue1b-nt*n_qA;E!Cws|XNOJR5>hvM-lSHmPnW#je$Q1nsOBuuB zG-`_tsllojYHGHk@FiNAoihwIFGMfQQssvB3Ee!9AuQWmN>N#4KsR4Fp0OS0X(@zS z5AW&fT%eJ=$xHPusX(Zjqk58ntuT^VZ zBzUQf-WbCNXUx~y!IXTpiyN)i>2IS~0+IBX4aQLjT8E%H#X3jb|6HkscbG<-F8uMQ zx~xc*wNt|O241fXUeP^}3R4_52`6G@+&S|8$5*)JZ_rz5*fukXS#I=140-UG?8G~> zRt_eR;y-K`hg8rXy&=OJyu}Mr!@W1KQSIp#rMh~(JP_K!twOtj z=Rh(pQVyv7?o9gRWr(BsUc%7n4QpF#-sM zS&tCZI3veoeND?!UT$K_D2*20h@smmjVZp(t|(3J@lH)ia=I?R@H!lqdgqI$UUiNE z=V$vKKA`I{!7J-yYG{(wdehnR zHB~!Ha_ZNZc%Qs{P#cT6haLm_FaH`K)V!2$mOQ6&TzHaA28=hplFqj6+NZ?~)xbMCf zI?C!q{-9=mG#j23ey7gOy+5-xr}Sh)HJ%htXGqD<|1*i4ux2FeiI;67k$I$^K~DM^ zQqQs7nY0vK8tr-C2eP{WUK-M*biI%luFF3ac|QEoH;A+3_0J-IkM)TUSvASrP%BoD z&(K*p?bs^!dSgSr<#nC1N_znU`**_V~}l zR>F6DunwK4%oX=XUl=9*_i7?7c0>K2=HOxt&8}WnxPeCv}TekDdei zevWBj(qdns^lp`Vpw$nhgR>z{M(rWXbu&=RtY!DYq+tl;;tlQ1ccoM}8{YKtA^wUh z7rfpt`R<<+f-~8YTA3i!2=MU&S1#QQ!%@q##>k(p*@I=|QMDeU*|9GIYeY0w5 z2PeGN%EmBr1;>c~Nx?+dL)4bN3wKY83y2G?mKMRp754M4yfw1YGLY*l93`EUe<5lz zD|g1xnU_apuKz_U=AG-C>=E#S=i##{{Mwq&oJn2rxi2W$r`mnsbi_?RrS&XXNyWJp z&@tt#56rfgS2(f(;s=`4*gUPz#boRM3)ymqW$aFcg*qe zcz6O@L(Hf#snM@t!%Yxz?J^m2qU3tJ<%HoHOspuIo=wng-g1f+V=o|i`l&=7%yB#{ zX?1{`)_MfxJI!%XoRHF+bkh<9t51{LS#T!iU}K0^6K zVL5Ttw54_n;g@6Khd=5M`A?h0i;s#D@(Yv8>yg0(BXxo4O4$+d-<-4zp1rT76m_jD zu&{FT2B$3%UyA;~j$F2k;f^uA{~~W$BMyOaGAI=DJVIpA-Gt#|Cc2-RotgI;xq*EN z!%PAz#M7q?lW*w1bE2y5cE>@To>}un#iPKpzqk{g;v~~%wxXl>u`pKZPrJ)0-|HFa zD?g8s5DvU_#EIdzRv&(AGFCUTZj7c0$o`w(W0xh4k3?%Q&)`C&ZN+qe9K0g>AW64oJz zCfq-Ti?04-xIPsw!PGma0ZnRZysBa$9o9T(aEe!UJ`?cZmny~Q4YFeXj{hs1u{dCm zJ7iW|M=ROLH<r!rfkkFK& zSHPQ-@#ca+iM1-DisGK6_7qc!L|g@5<$Z{vYD^8pJRd^ba4eF3GJoPfvI>m)oEMoy z;^=jY>1ZQniJ}Ddio8<-M-zMLODR>RA+J`LugRE8zRz_wz~3YI+b1TI`6Wbz)2A-8 zsqpV)T7D-3`8Aay1yP=FW_3?A8St%jL=}kWa`O~CNH$|yLFO=5Jy5Cp;tcj!YZ<__ zXH3|M;k~oQgoAbsyH8(|1W8D3IxDe-fWF6y^^MB?r2O{EX5EzhQ++Y=lrGZdO_ShJ zd$*@I6NLF%)1pz>=WP$iO#DF0!T6Rh zS=m}$w#`Z&R%kKu*>}j|;f}1hyl-zUSqGT+U%HJ*r=|4b8q8Eab3+Sz;F7xBh1Q`~ zvU@~UQ78JzlScptdGeT@%+<2^xM>U}+aD6?ZROlLEJIUYoS8K8e}4P3sJO#kq4Wy* zlvPv zBKHQTJ0tu8tppPAZ3hcIhvlqznq!#6ic}ioZ+sIf>(9&+vGuPOAZWhHkfM3sRH2_r`YtOF1a8I&p z(Qdsw*D?lgd_{5k zW%-;1q4wDL26d+P1+MY>vYViK%idIAooTz5ZT57`z%>>zyk|TY49A7hQd~t%>?q89 zCaO3F8pZZMwN%0PxAIC2#?A0-QTZPwDrl`fbxj&WY2uM4Q(%V4g;*cg9RMnQ;C_?wFNwp@hCuMv4@&tTGh7OMX^+hS? zr=&1lzSLW(-tPvD;jaS(D`L4n#l&J8oZq3gy5%QcTqo5EzP>(YzSL;zUB|g#Ldvi4 zOT(?5g#h9J%I+YnoCe$hzzgT?`v3C6#WXHV48|a0G7-z%F|fn1gD@=> z2hhe!;7j{u4}Tt#=qf*2*iQ*7UfxUBAKhf0d8-l_D-0aP`KtSD2)l%EqY-yM#Gs+#z z{JlLKX3AINwsw`jVp_KBP33Wq55;#&Kl~JQPO8fqBboDYfsez{6Sfo^pQQf-aW)1w diff --git a/public/uploads/2023-06-17_15.png b/public/uploads/2023-06-17_15.png deleted file mode 100644 index 32a11680c68d05fa2dc9c75b1e7e15d8d44be584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142110 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%0AG1Ywf&Ml3`-B65)Zk26-VX z!*7F3Sv2Yu2W&_|MY*zW)w+QORlok7jK$OyLkhZad_K<>h{BYxl2$ajo%OG0E!Qz81g;E_J=gFtWI55Vbcl&jO<#2Mpe-zJ9zs=L!%0VX(Tm#~Zt~#1k?u7-J zv6($>ndF&ZiQ}s2`W=VUzhgRQC4i|~h`-^sN^s;0nN#HW-+HiGc8=*K~+RboL?i-q4q_1wj)8`A@wCt_ik zUO42u{%xF7tQ9u`E)^5>iK9PUxg%z4_+fulPAIHmEz%r*wmbK2ru3lQ zRx+XT)E~c;8jeauP}8{N@I4a@-EVcKfFkq4wlLH?eb_mscd$jn92n%wGj8$(JXcn| z>qwHneawH{3u4v1{a1)cY_JH%KnxbEi0Ar;!!2^-$pyv!dlG`;W&*Z6*^Tf;2799kchW0gWo}%Vm zU0vnkTStd;ft$*AAK07KVR8DW#3FA&0-=vNixCJkc_cRL@@EGbqPp5FfKj-oBPk7B4723KO zgrEDw#3wPh7Pp|(FjnS5%(O|~`f(k!0zkF?@UZXE*i*F;Ii}L8>x_t?=l(8du?&U6 zy*v+J=DgLljPx4aN@nf}pV{cr5VtW$7#lJ#3W}o{RpS^uUsb#QHwsiYXt9nxS{5q! zN(xjWJ`%loQ)b{SoPj*v+H@Wyo^|d?(<^Lmd+#oHfYAt($Vln(Z}v+K%g-26TJhopOsYaBVq8huggirCCLZ>qqe)qfwAsv8tw+&5005TN1ygtru)dz{SBy>I6x$Mkpl32SD1 zX}t}16xy#QE=G7fEZ_s)5v?l5q2@qV0jRRq=<P19v@XpRNF?>sa`!vma*Ksl9Lt!-i^h# zAwtU46(9Rjwxczyo!p&lnITcZ+MV)KWX-RdQ^Cy_*wIN>7Mufha)PrHezaWtYrg)9 zyB2?i4Q^euvY`gHBr9b>g$+f4%}w*9c> zZyB231R_rw!e;P{KG>aCc5s1P-eH```ew1-q>0~{m2}4WQ!q2OGL5NH%ggWh{_kZ8 zwwtJb>AE~-!n59SnH+eJKZS;6700WuDevh9Uhz=Sui`sg#e=`5pGMq@1@5hi&f5NN zR5pONP^XcDAa4osM=i`FfzXasA~ru>=2{%89k606jyADhyC1gVPk35vubFO;DutP8;|;lDJ_B!N)uZs&#CFlbT@wdu z?HPlm5!~bIx)+0fxStmwE8oILkR84V84CXh`!_P%Z)w}U4=JuCiej2^Pg<(afFJh- zK3t{_+TG|WMV}dxIPX-+7vby(wEoZVma4oEzys^T755{`Ysu^aRKJ2`oRG-e@IMYY zSm~sHcZ|7Nwz_o{qj_|Lg&l72o=--xjSm#RfJ21IODjCz0J=dpvkRT`mGBZ+UN--d z3~Zo!Iqimt_dL7`=!w)94jf>cXLFC{oCT}{&n+T(=(RwZN_(w)RxC^G$vFc;r`IqD zs8otAFZVPwjT(&@Exr^72?H;pA+a9roV|d(jsLDGP_xDT(QYN08U?MlR3>qH0&Rwg za=jgQ8|HzR^rwBtl#g^1Q@peIsF+=mFD3gXU|^T-y(V=&z$z10)u*IEC=~rc`E}H) z|1^;Sus>o3beoJ?#?tn4+&nJDEOV1$S>g%oAj)PoU^CaYb2_D8*+58Vkd(!{VCZJV z$7Ec?q(ga4OT`S2B#XStah8-7$}cnZBPGLDja=Mi;qAiV-_j)vwNIG%r1{vQqz&Lk zY)eX3xHb=_EM9<)ouVp2!cLTm5&$*Ex4j_=^YsY!R)iV4h9)&Vdt`&&?p=X@0D3n7 z69*n2oaxO32Y@Mo&7>*Y!gv3&U-%MQ(R?$$dsY;9+!NFI)Rdhi)^_R)7%0OUL)FE7 zrk1AB=_vOIahNuG?rSw2Z4!o&C zI>=w^(GJ;jqQ=;}Spwa?!^VXjzaM$STsby|BYDEN|36>Qh?UtVEcI3G@2C#2YIus0 zl0voW5VK+W)JuGYy1t?fWa8xFQE-#IyfnysrxbMs50%Y)58X1TAHH>YQPJ3}( z;b{#@uQAaj?KAbV*XQq;dC&g-Yv4S1Ib&8lp(O&X@}vCS{k+>)|K3+p?YQ0oI!b$Vt*~F4_EYy>_egxh( zS=izDBOnA>EZ?bBDAEaV`?8;nt7aSsnlAeIcm1()t%=pa>BxN^k^c;3ZRgO4e8`62 z$Fc&&3ER#Lgw>;%Z*X;Hm`9s0DMrC%=w$%5b33QP#2Y&lT*HmmGU>Ybu&Mmant>}r z%7L7%XTahob{u6c;?wm69g;t(hqKDMBhXbrdUT^Fs{-p2xwL!mH(%OAN8QX3U71~? zi6j08Eewl$xC4*lGahFE!H`IZe*8evsHwN-VcZDC5Uj84()T^stc=zvlUsQ~5=Dx$ zv)~@W^IVZi*at;ordAxef7jUQgDf~UYA3BG)hK{DG?)!gDxHq;MXFFKatkd!1VCfL ztpFnTKkJNUYmbk#2*XL{DN(C`@5yAh`f1GcDAiM&Z`CYC@;~@IU)Qwy8a^plL23_Z z+tEHn*Rug)qQ?3pyxYoOn<8={BC&Q;bp~_}EUcbyPZj#|O4m`J6A#X6ZQH(;N{3I{ zEA+VWcQDA1;bLS>Ngs6+tKsRjL!(9?%G z31x0>#l`keQ@7#8u8V1@wkWhaJ4?#3A|m6VE>^(d;+sr$ zB4JA?7?B7xv0_+K{1co38uHaD)LMS0FFP2E#+rDsUDS2C^^5udHLbuU+abp8m% zA}j>k5m2(WYdc z{&CzE;=ZYRjId9B`$_W%VR;Qtk6Q2KxRoEKLxWc2HVI8ozK057OPg`g+8^n;)35)l zdQAlY#~+BCn2>X?JlED@6gRamE6J7V9N~V(B3(>K`gJXtr$B1f_SiYwK3-Jt^am2e zc8ND#DaV+;ILy6>{hK3{vw(d<%4G}S?vCO9(SJJEOeoKZN9#`{mgkAJ&Sz8zM9dmf zE){XY7hfvA`w5rcQl>od!d4Xov82$MS&E1;G&_j>Ql$m803s0btC+F9?H z9O6;ww7j^k(LyaWZ{^*jsiz_XY{8k50HBnpOjC27(k=s;WH5FBp|*LDras>BhQ;Pa zY*_&zizPB_MDnqqsiJvMUzvVyIq7EZ>%(4^FR*7=7P~Nq83*IFVZVtrDJwNx!=4dQz$8$EQvb zh6$NGZwCn^)_`k{Fo&PWVcq(T{zcE9{99{<6cxU~RTD)}qlAb;d*S)S zhpR3fm$MLCgPrj1PZaoFiJY^AWg0(@y?VF%vx+_YcLIvp2$=4(bC92DQVs0EK_>YGGZ+Ji1+i`EN2SMGZ_Q_%LAKpK6GeKSP$nyW8W(oT&FmSlg?myhlYsvO~-}`DO~A zhM&FTJ@DS5(EsF5ue1b-nt*n_qA;E!Cws|XNOJR5>hvM-lSHmPnW#je$Q1nsOBuuB zG-`_tsllojYHGHk@FiNAoihwIFGMfQQssvB3Ee!9AuQWmN>N#4KsR4Fp0OS0X(@zS z5AW&fT%eJ=$xHPusX(Zjqk58ntuT^VZ zBzUQf-WbCNXUx~y!IXTpiyN)i>2IS~0+IBX4aQLjT8E%H#X3jb|6HkscbG<-F8uMQ zx~xc*wNt|O241fXUeP^}3R4_52`6G@+&S|8$5*)JZ_rz5*fukXS#I=140-UG?8G~> zRt_eR;y-K`hg8rXy&=OJyu}Mr!@W1KQSIp#rMh~(JP_K!twOtj z=Rh(pQVyv7?o9gRWr(BsUc%7n4QpF#-sM zS&tCZI3veoeND?!UT$K_D2*20h@smmjVZp(t|(3J@lH)ia=I?R@H!lqdgqI$UUiNE z=V$vKKA`I{!7J-yYG{(wdehnR zHB~!Ha_ZNZc%Qs{P#cT6haLm_FaH`K)V!2$mOQ6&TzHaA28=hplFqj6+NZ?~)xbMCf zI?C!q{-9=mG#j23ey7gOy+5-xr}Sh)HJ%htXGqD<|1*i4ux2FeiI;67k$I$^K~DM^ zQqQs7nY0vK8tr-C2eP{WUK-M*biI%luFF3ac|QEoH;A+3_0J-IkM)TUSvASrP%BoD z&(K*p?bs^!dSgSr<#nC1N_znU`**_V~}l zR>F6DunwK4%oX=XUl=9*_i7?7c0>K2=HOxt&8}WnxPeCv}TekDdei zevWBj(qdns^lp`Vpw$nhgR>z{M(rWXbu&=RtY!DYq+tl;;tlQ1ccoM}8{YKtA^wUh z7rfpt`R<<+f-~8YTA3i!2=MU&S1#QQ!%@q##>k(p*@I=|QMDeU*|9GIYeY0w5 z2PeGN%EmBr1;>c~Nx?+dL)4bN3wKY83y2G?mKMRp754M4yfw1YGLY*l93`EUe<5lz zD|g1xnU_apuKz_U=AG-C>=E#S=i##{{Mwq&oJn2rxi2W$r`mnsbi_?RrS&XXNyWJp z&@tt#56rfgS2(f(;s=`4*gUPz#boRM3)ymqW$aFcg*qe zcz6O@L(Hf#snM@t!%Yxz?J^m2qU3tJ<%HoHOspuIo=wng-g1f+V=o|i`l&=7%yB#{ zX?1{`)_MfxJI!%XoRHF+bkh<9t51{LS#T!iU}K0^6K zVL5Ttw54_n;g@6Khd=5M`A?h0i;s#D@(Yv8>yg0(BXxo4O4$+d-<-4zp1rT76m_jD zu&{FT2B$3%UyA;~j$F2k;f^uA{~~W$BMyOaGAI=DJVIpA-Gt#|Cc2-RotgI;xq*EN z!%PAz#M7q?lW*w1bE2y5cE>@To>}un#iPKpzqk{g;v~~%wxXl>u`pKZPrJ)0-|HFa zD?g8s5DvU_#EIdzRv&(AGFCUTZj7c0$o`w(W0xh4k3?%Q&)`C&ZN+qe9K0g>AW64oJz zCfq-Ti?04-xIPsw!PGma0ZnRZysBa$9o9T(aEe!UJ`?cZmny~Q4YFeXj{hs1u{dCm zJ7iW|M=ROLH<r!rfkkFK& zSHPQ-@#ca+iM1-DisGK6_7qc!L|g@5<$Z{vYD^8pJRd^ba4eF3GJoPfvI>m)oEMoy z;^=jY>1ZQniJ}Ddio8<-M-zMLODR>RA+J`LugRE8zRz_wz~3YI+b1TI`6Wbz)2A-8 zsqpV)T7D-3`8Aay1yP=FW_3?A8St%jL=}kWa`O~CNH$|yLFO=5Jy5Cp;tcj!YZ<__ zXH3|M;k~oQgoAbsyH8(|1W8D3IxDe-fWF6y^^MB?r2O{EX5EzhQ++Y=lrGZdO_ShJ zd$*@I6NLF%)1pz>=WP$iO#DF0!T6Rh zS=m}$w#`Z&R%kKu*>}j|;f}1hyl-zUSqGT+U%HJ*r=|4b8q8Eab3+Sz;F7xBh1Q`~ zvU@~UQ78JzlScptdGeT@%+<2^xM>U}+aD6?ZROlLEJIUYoS8K8e}4P3sJO#kq4Wy* zlvPv zBKHQTJ0tu8tppPAZ3hcIhvlqznq!#6ic}ioZ+sIf>(9&+vGuPOAZWhHkfM3sRH2_r`YtOF1a8I&p z(Qdsw*D?lgd_{5k zW%-;1q4wDL26d+P1+MY>vYViK%idIAooTz5ZT57`z%>>zyk|TY49A7hQd~t%>?q89 zCaO3F8pZZMwN%0PxAIC2#?A0-QTZPwDrl`fbxj&WY2uM4Q(%V4g;*cg9RMnQ;C_?wFNwp@hCuMv4@&tTGh7OMX^+hS? zr=&1lzSLW(-tPvD;jaS(D`L4n#l&J8oZq3gy5%QcTqo5EzP>(YzSL;zUB|g#Ldvi4 zOT(?5g#h9J%I+YnoCe$hzzgT?`v3C6#WXHV48|a0G7-z%F|fn1gD@=> z2hhe!;7j{u4}Tt#=qf*2*iQ*7UfxUBAKhf0d8-l_D-0aP`KtSD2)l%EqY-yM#Gs+#z z{JlLKX3AINwsw`jVp_KBP33Wq55;#&Kl~JQPO8fqBboDYfsez{6Sfo^pQQf-aW)1w diff --git a/public/uploads/Screenshot 2023-07-14 160403.png b/public/uploads/Screenshot 2023-07-14 160403.png deleted file mode 100644 index f68280688c7f4d05a93dfddf805486e6ec52f27f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261749 zcmYhi1ymc~7p{#IC=SJ?XraX^Rw!1i&;q3tcQ3^~I4Mv{a3{FC7q{SAyhw0&hX4Tr z17cUqJy&+*rLY2|?-|6(%geK|Vs`EE6|hLMYA|a2jM&c-bE<(RfxD`~ zE?9i5Uk{GBjX5_L$&Bo0l7!&d^p_7;cbr_`xhw7J8f{NUt{ASgkYxc*UVLiu6q(5C z8q^atsimL&+{t#L1d@;@RR#g2LPA6GK3;QjbF;8;vI?O2v0wP1%Zx=FWwo5ISBgj? z7uvDHFf(<{PJk?U{D;x+;EYt4kv#hW&GuDeSSty3&M*BKpGSfCPAd%tp1${TFVv4hH?r7?gDLe)E~fc ziQSm8sKzK9E9s=f1%{K5Vm-eI9@dLxptt;f4hEHEVBz58>boZ%b|#*tM$pd3x`DM7 z_)$4VJXWAr$F0X zlR|a*2Dei6w^W<#Fc5}}Wuf!+*YQHYM8y-sfl=RhhaL* zQ1SC3MbAkc2*gWz*jfw+^U~OlA80{$dZctz!B9*8febjRMYNa{)X;g5=NB;yr0O5u z(h!0wb(9%dSn@8DGva^OeHy+ed3z#AiiPdX!&x!kdG&TuS-v0v4l49eC67pg=R6Sz zj9Ic*{1CpZzKVM-Z*Q9KZhbve@Ntig&z37dOIg0ADB~dm`3pnD#ya2 zQ|PXqxC0evJl@+W-w~saM7|(Z5Ba){R$~NYLsgfQfuRgeN~+GppBnj`kZ>+ki2_XX zw}X|%RV(q5zzIqYbT6blW@0G=J^1O7>*!M;cutfn+cQQc;<6Rx<;hFJGcfcKTOZ}+ z0}Esx_4&&%*jQNb$oJyoU6|Qa|5w3*O9E6ztkok5oEhVxhS5gcrQE@_0&Ml_ep%9U z*&xu+T6h+Q{{M>8z0OCfzWzx~?f+Kkc(s8H7Z>+`gR#kIv(=CN&otma919+LMNnu^%???} ztdxoGf2DjyfQIUs|CiK5w%&xMb!KfBk6bgcv?l6tQ$k`e6k2e8MzNEzu=c9!0n}?F zzCNmt>j+E90+V227vp!D#ZlGdq<9H&7xpZ9|IC|~t~(y?1c*_u4rS#ehtSEJQN2Aa zY1ARls^EWFP4(Mu;%rSe%e<^!$!uB+LYzYAri%jHrrw3kcBm>>=s`X+UPfgg!y7BF za%;^*yUk>;GvDaWRkkAK5e7@!fzNAFX+NHu@#_GWk_?f)TB@d zdM-SEEh#S#F7rnachl3C5hrDG;sTjj^WN6>91Y{wjw%+bF|)MRKi(hl{g|z#&~Lm1 zc1IjNIspKbo0~VxPnHq_0{_gK#7QV9Lehlo^7QJ8o=+h~&a+ZMydG>2Uh#-f%n-Q; zoz;f8Fwo!W#ZIW{YJ1Ckoi9~K>OE#pZ|^k+6=l<>ypd)K!^7Kh_HG=|d_{D2UggkOB>`3jf=zwOwHkr`Oa)p|!`EmXRLTI=EY^H;M zVDmn&aF?Pp29taDR|U+N0uI!atzYf^f8mZAkx$`?VClcrjx zY)zdxRh1XuMylX6A$rT z6TH~KFi^O{>e3;E?P}cjY`wg?s6?kTwgF6yR)n{`$5?#i-+{2br1ILjhF&qZ&S#3c zVEFqOCA{9LvxXM$&5F7_H2X}9y@P8A2l9QFtm?qd4v@l%A@u%=QEC}IA$vbkjghQcu5G<;@cm}!hK_kpunyCZW#5X?k;M(L zs=Gi@+&nzxsZgrg?{PbhXn#hOcCfE@ZXi>}8Kj3y{FYere2c*kZQ66c7tGo4a==s} zNQyr8MUD9=CN=jBbp35a7v%-U0b2ByN0GbH3u8*AI09dX{D=oFhA zmy1_?I9nODbiWp97DL=UM2ZZx&JMsEOB2!-rprJ#5v%r#@vEkP4c78AxGPxa3=JL00(9~_s-KF?BP*LH5CE_gYLz0A zK`hQ|(m_BbMIB=?7+p3}*^ZM89~4P{sa;N?9ieb#M|?U2AJXsqv^QP~=QgU9k1FoT zG`UZ^Rqg!Mc@U;V0yU9dS!EFSnK^0boAJ5mRxT4QQhB0B-1HyFg`~p==^tPd?CqDF zm|fs-9GsO1Dq|lkoR~hUdC2)?xtH^~|DmM7d}@3=K}0igM+yb`Gr$}PZ}ob$rX#v( zXz%mT+o=SrKe=DrsZY~QZVyh;K;5OX3+()S$P+(orp-KlLl zvAS~qbv+hpnBSaIwRTP%kSVMfB}hxq{5WTDK01vY;CZ+5lWVa_0n+M0LPHVOS7$xz zo00iY$%+rz_T3TKuHE+H^cNq5ch9PgckB5#n{y%8k^M!6F~ryF@{E4X3XHrK92^|C z9=qK1@BMTcw=y$$_Yz<@uOvg<+HYL5b+b zdymxw&ql`WMfThUDC&nTDParey;leG5MQO=sbV;uYf~nSob$Ut5wpMBeCHPh z6W4FuIYhnA(eAHWWElTuXY8#9E}Jlldmev7i$Pw)LHot3FVaXQ>w!(`X`9tw#n^Rm zn?l(neA`IqR}vF^x~Jc^DjvC24m^_F5W*(xP4z-xO>{~n|q zNBIn{Hd$XEO$@Bc7pJIU=+t85Ol^VfZUqxd4{Y^5ML8@r9a*dlU%0krsEso^U*&vo z)(+Z#VJ7^$+{{Cx63YKvd4)JZ3=81)CUQZaWa)e4Pv%$nQ#eHjHu*GYH!+)Q#hGiD z?;1sDBGd68d{8Ni(Qp2f!2~4Hflsmd$5}_gmD5=+_!w<#y*q$IPu0L9CTU;pO}A6{ zfW`A7b1yUWPc#qy0M0{+y$5cWwPyE<37M}HSAJ?wjvUd?E_{DvH!DI~2u_vp*N|)o z-nJTVK!6JCGXg{lm#z)~tKDbNlt2ZaZ>S z^!om0-t&BX>1=bwbFJ6+Z1~ha(jVb4Q*ENQ!iU((^4?f7!CCEX;bEMs#?^nCk zTyc)_WyBrCQs(pOPwk{5MGMo8kXM!bUmt$Zc=$(3877-gp8oyb71;S_){f1z5)B>l zUQo%CGIm?|zS4X>d$o7D1MddMTF2 z3*7>rB&YNli(YV^ZRKkNBMlm>EX49v# zIKJpI2Zy8D-sFSn#DZVgtx;agMOpss*k#U$Tr^l3GzGy6c%%7A_ZP?X4F$EKMCU%$ zsFMJ-oNK^R-}<6i@YHFS<|yBreK9A_#_+XoEuE=-P6d1SXv#p2nqlh7BHO2K$Ltau z>GWI;#O1AI@(ACW)gbntGv%lAs?LCS&!9FjyhgMvvWz$2aK8!eGq)Z8v+iIVQU=Q3 zZD*}?X1TeWFYM%ZIJM6Ew$w~-HF~F7+^lD+v7d(sHjBJ5)l%~$a_6w z;nMn+Yq7VM^WtCu|D7qvfM4%ny}YJ-rGX8cqLzCd;&NuTCY9>J4yI4u+Ho&6T53E@ zx{UWcWdjz3mK+~FhDWE|$~+OTc%04QmO~w9LV1l>7aOk|@|Bkwpx1q|irHOY z6Tfhz1Ty{>;?^Kl_>gFarW-?5qB(gPlh^w_ST0iK(Hr~Anh)K$)LZh#{6Wog9e~Ki z7U#vELFe5@@!0pijg4rKmoI4&VWdHK;;aa(NO)r*h&wD>NR126BTbjl9%B1U5(wCH+ zJQDlQwToQ#>LKkB!BtUVvDs1MOWO=VNL?L?ic80kStz===ZW@6;z-dyS3FopN(3+K z8AKGLsCak1T#V;p)Bog(R8xRz;X<8YEKQ`pAcmcVo12`5CYAa+d(SPX>r#tobuiv(q)SGQI z6&#>dq;RAj+ow0mY>gIK_YfC@K;kHNCgbll>J2{{M!8mnAQEQ~|LgacxszV64trP0 zjWNZtnHsV@emoUD*uoAQv?YOVhO2shp?(3y`!BZO=!eY9XPP8!qV?;rmF7mjtRarA>jdVZ#p2OUb(S2~{<t6dAtZ* zE_|>3Aka`cHX-fitjuzm9;**+`3bBncvm&0Refu>S>v)^#rW4$ zDrC(I+f@zQ{lmRLQLb9CoM?BtW)W#HhS4B3@g+osK@2JBz|iFJcY3@Ifhf#4iLGP2 z_MWLZ_MDrX6n{jJ*Bhq=HH9?tH0U#qdw7}vR<{Np1+Bmn5(>-J3Y$A#69%Klf5t5L zc3}9czgq^oLJFNWkWY`Vvb=X~+Rry%&nFg4Y_cG17xS0s+z*}-tG1VDXpoz88 zjsygJ2qt-beP#91Z9jXbBib7dPOEY%&lT|Q%22p;6f9!N0(VW^-`4K&Q(o{K5HBMm|dy&C)U= zqUmL~O`H1Ny4t3>$$M#ZzZR+~azDOUPqEe0!pjX8zWBXW!;2H+S7(sC8-Ki3HLl23 zK0YC?m}I>-$Wb}AKlrd>if@>DPO^nx943@(2@XX__!Pf*Rhv~Xym$EhUif;0{%r|s zdU@Cc@O7EyESt~sciHQ8I$7`y^UgB=6PFAMHzfGB?ba}%Wqpk-9>Cj@5o)coK4LA^ z^}E1r{%WV(3pNJ5IFb&LCXa6-TzAiq1`u#;{xhHWEc4N)b%pH_fOa^#4q22 zOad}}Ic(VVo=iPV$Zn1R>3!qf#B~0zPP24vYlE#gEi&J`0W};?PeE&$QInNZKIb9 zIgnz*hE(5EosRZzF9@8&lQYEkw#@B6w;^<05)AINz3X$+Y&PS@V*Z8^Q8dSw%m;)u|6&-djSpmxG4Qkbt+h~M*q&uM3Hm-u`< zZtCVek=&_V_%`3+5fAf^7(5>yOyCcAz@eTyc^;6>Pc?Xb@b{vVf2aIT>C_zuo8Xqp zvGWA5?CxO4MuaC+@vpUb=8?n3UF+Z0=RCxGHb)NQU|y_JixmzWT=MH;Egehn{tzCB(GS?LO@5oc-k`t_3&vb1%< zJ-@u^#(Xdur0KC{N0IyBsJ3ck!0ac%<0t*gs7doUADA)CoF{|Q&)}V z*EQv{8y~-+6Jci-+GfXz4*a*8Qugbzj-K!{j+;z|7EZ61_^iR53=ZVPtcw4lIS#~vICrduu>=uFL3?+4IJKrn}O2ElHcAlX+Amr6fb#m5s@ z>Y&+IL&g z<}~D>)qOsR?6GB1Ud3qfA>6_c{;(nuF^4%=IFwr3ItfUcee!fz(siFew~$ymPi80B<+VMl%*;dUi&GO#&!9J%*%dyv_biWPg0mLPE(sDDhahgw zdZm#M!D+&_d22jPWj4Tv3!He3_)HyJ4@MpYpJDUQHR}m&Ro!87m&*VHRjQG%BhPFvLKG2`1;%`0s5SaPYz zKhO8#YQ|`5C2JLY!cXz8QZKi?P-i;3Z^ApskV0a(2M^qsV_r2FD>GK(u_zJ4s4~XC z?GL|ehYGCX7#=+Ojw5-Rn0VCa{*LcZe5K3z05NvAb89&m6PRzKrn`LREGde=w(3c^ z>tkZQgEncC0vGwWNJyL97CGWHK%&>S@d2|*XmfRLqvv zWgSIs0=HBDG1#{Jx@C>a$-o8C`LY~uPm2DeRnovL$2vE)8lgSz^8-aXFF}n;|c?BPg(495`|HerOfCTAc*F z9(ww~I~1RB^6ANgjD0@E)&l> zQ}r>s21#BYqE}8%t2?E29MR7qnRFu5l#_{<_;-COW4NWeNyF_tnc&qIXD844#Y(lk zXFX*r_i?`I1?FNgAm8O{gxV47{DD%ziS@U`K{dmN=p9d<7AqvmUpTMQX|$r_3-&lnow`#qhFvj4FJx2qAoOw)M7H@wkB_;g4Q zkk6n3KCct#H+kcNf95(t=lxw+MG0eDE>Ro*nEk}Zo;aKYsVo2b6#O#vCmTMtuRxij zw~ngk(sMTTU%qiYXIS!`OG118U8EUru0%dn1Rwcc`wBu6`^QCWS1!6FJ6Ssq z!>k_?xTeN;jQ<=2pRQGx)X$8d0_Vk#Yf>6YZX#@BUIkpQ`rSJ&%f$@MJL=0TTuy;d zgvtV-*3WBJ%jOukc59r_a@+ZuC_-8cbLy==BX?NM4^6xawK!Q+805>RPuhWocU}AK z-oSNP*IHW~-J;)8J}S!B+?_G)#DK9PxBW@xd3%u=)V8_uL3Y(*1b(le;v{inN@kC| zNx-n%K1FWP**jg5Fu2{R&R*q$HN|@bwbq5P9ehCe2el0?R#>=8H8&slmM6(Xz5lhG zKeIRS_%OQEI0@sI*7AY;mf6&P6M9SJ37VJ>nAr+v4aoNNMVf(OZ?Sb^07lj?EAxToN{Vl;!F)`t5C5N{Ea%-beF8**UGqi96CmBbgAV zRXcUx@?j?L04E4QF5!JiRn(hbz($3q(q|Tvr=R~2Cp$V5A0ygLB0fm3!e)NBEWP%& z%ikM>`lnlW?9*-G8_#(4$Xq!r}_K+VgJh@h7X| zOg@sc3o(fa&-b4GSfb8~Evx|TFrr%qu62Gb{q`%(xMwVdt5dV_8zPJP=ZbEval}=r zP)}B%e0BX|;y8Id=ZSr;j40pH*K*ue)UKr(hZd%4!Cim4L;Fw>R>Wh4XT&G0=)b{Z zdN@;yyDV)?jO{a1nvRxu7{&8<|o zFh%qDdY0bX+UDAs{9)eXc2m>Iu$JC-Ro$v6yq98%9tyI_&Tbm;8zrgO?HN}{NJ1iO&dqwsE zzsFi{$UzX5|(g<^XsZ?xenD5X|JcfR-Dn-0L=xkNs}<9xiDh~N7@Xpfj& z1gOn`O3UC$DqbMiMrV9E2tIm9%jxJEJo=qp9H7#0#|9KnQDslj63J}W(eqZbuhTbe z&?BjElHLoBuNCUcEq;K9azdU$==vT_gISaC|(!BQRFeHbGDq`dK9(10bH9?cdkny-(c-O4a+{^%^U`j~Q~KQiy18CJ4w zncg`KyqCEe=1OgUPcu_fr@9_qfC`b7=r>pb5!;9zR}e1+d|8|XpOUASHAbo`hMBXK zRLx`=eLX0s^UKc5XS}E#j=Eo~A^IKJAaB6ckbJrJh3y|*vv+A`O<{Bd5Py@q>@nM5 z1#EVe@4_(|Ivs=T#ybM_Omc5K<72wzvNNLK*VTi&NlMW@Ovyw0>Ar;m&7oWjb-ym0ER!R=Rd2bwaQzie6>>w8vYkwwc3sd!nx=v3d)#Q~SjD`og}m!ea1C+1f&fUXJVBd{Uu96j*eC;SdVSLOaAJ zs;UNdI8Y+f? zW>*<)Y4ieAwX1?N{W=YaQ1XoumxLnScCTEiL}@X#t%2GX{rwZ*^=b`o?7&A&78CbH zCq|wwCN9=rSg9nhe1cRrg@*|0hM5B1&}>(;33skAYsA~aQu@8bV$yU7LL=be3)hUA zuBnGS3W-fO_F*#>TiHQnd9JFMC#g?*Uxg)6UehMJv>^Pb@O~PJm5WMauI{D}0Gn@1 zITCjs28jXbwo>YYZ8w>h3_ADl8OGW-8d_y6+GjihF8& z7!?ZC*41g+zSmRkrXc_T;(HzCd_H1-pO}?>5P__7v9MsMtE(SE6r&k5h<9`?&9pVG zgiXRq_47L}Duz=AlZp8?3x5EdFy~D09{q^*earO4OHh%{!j(k{yt2E)s4|bR)bvm8_jI7 zO8ca@i=B}B)>9ezE%p+-E(qN6FshvUs#;KGb(<{go}Dz^jGzX)X>ix(d)pc-W+5AV zf;r8uc!KhF@(6tQ^AP_McUvran@{|fCO=uZ6qa%6*7;(R>Mk2DCk{TL%>F|QGL(-SQP`MhN!f6#B- zG1alQX&#aso^B3jxr$K(p7t3#OWq~|a7gTh7=unV%Vc7-HLdx`jrnrKo>%~%cAz2H zz)VY$+pSL~>lcbBAy8tJD?S<>Q+8s~L0qJ0dVEv^;>Dl4uP;PiN))#`D2}sEn}@1@ zWbB(@Pe?giPZg?I15&0Fzup-|Oys)RF5kIF;L(n(X=8_0P#Lovp41*iUf)4v3|A>)m>C%u3FQoV~rc}p=mtOH9|>oL-6wI@Z+RZ@)r;hj91AC?5i z>hjJofm9+s31=6loY)?Q-?);)O3FaV4Li|=`>ci;%3ZkfdA3O;{=abY)eV`f^zW82 z=uA|z1jLG&%9X*qjwj&ZC*Dl)@&K`k#Oeq2+f(UFM5E0#o>qQ-zX!AeuTa7!(3B>D ze{-gEnv*s7)76N#6?#gBW8K2V#4bd}_{83A4%}#}<=bKW4Si2d?H#0kecknco2+h6g9`{j`0gh) zqsF5xhov6~t|si-WXc8Bu{u}0Bg*6P*OKmLSMYl#>^H0|F{R5`|`IMV<0c@ zLCs_T!cz_3i4)aew_ND?sGI)zJ0T(Rvra*g;xUsu&d?n%lpFf>9`UPOn%5*R*q@BG zY@W-hV5ZoKDAo)Im4$XtK{th{%fdRZ8Vq{BwiK0N*}MGe`60sGtS>2=cZdn#A}GQK z>A_ye%8n^H{=>2He2g3gJbl{RK|qu)Q1b@tr4MkJ{QQpdHra&fEjBbdKwZ*O?+2}| z(+kQCPnrstJ!igr{bJq_Dy}XSp71 z@qh>FRev?&r{BNUThu3Z>hHKrc53LWgSyP6#H1;@h!vPn($pMBh>vc&JsS~27+;M+ z`xW0zrHKg;+V3!Ov(jAVOYA@N4r&Y~TLKIm$XVs1q=w1I+=i<;cxCd>ESBQ%n~}W@ z&AvUf%fgPrr+22pJ~4W~J--iYdd8!R#~5{;oK^No-b;A4cj9@*m_(tIJq;MiU+iE=J^a;b!)5>u&&fYko2NkG)!%)R!UApvv@^ zeA}%Nk_5E}s^_v_L3*?9JY|G*^_KNUZGiqxN-T9W87BlZ0QJ?%k5?N{7Zw>wMX^l!h%z4;l`X7 z@jU7xb%LL_eiQDas92dEJSaK_&Bb(@ME|s6z`G*u`AbP z@zr3BSJm#Yw*#lupP5lG( zeW>4^kR(?xW0tF2(`#cUsI3H(j#PL51}T~mM#(G9QroY(K0`jTVy`V3%Y3hEi=z#A zS4(%(AAeVVenM48Lgh&g;{4`6?{^o#_iY~X(>Q%zIEDLEy;ubX?M=Y)>o86Llp`ep=U+Fiy-fBg{49Rr!GfSQ~kDgiq;fqzSr}t5Ak1P4M(}$1m zfv3PV@;~fuOplG6fhb19zKNAvNTsr^9R~o=E+<@5MGzS@J_LV^qTMJ3N{1jJBG^t4 zG0GSsZ-NHfIavTeWcTT<&I4rlD}3w_V(#s#XJ%$5W|RAVN&fBtn;@xA$<3+Fz`@+Ihb8{q7tcCs-H-h#~WhEd*=N1=2RTB@dRvoo?UnIohx zrPS0=3dkaqYAho$K59HF|6&cj@+;SS%~^&7qgXw__g~LaNhs~V!T#oSi`T)|=NAZ4 zRIqup+++3H(@eF`1alo5P%@+Hk*PoGR<8=J%Hb3dw!WSczv*2X;fYI8dW$%j{@$&I zIy?7Mx6WS$M}d5vG#dOWQCwP_g!S7F{ua(BKNh4CxeMIx0wxCX-Tq964qsV#vaS|B z>a2nv zQxDt7|GnOoV>r|3hr3FyTG4&Ecxi-j$eFYn(L8*YsriobO;o-Am+PwTSacl>I&1TR z$ZY;2xL!)9`D>P{{ir#Qdh*me0jzRvECpfv{RC>Eee{R51mxV{HXD8mLo*VcfC7g7 z!uw_NX)`3dc^rGM6rCHtwCW&$!r1>pn)>k)c)m>*Q)bsFc%7-T(iyNNed~WCq2t9gEQyM$s0^k5)hp7<5`H1(aP;@|21~U*t*PPO zBExQ}D9?apoE6xB&h7p9fUA1GP#d$18Si+~Lew)~w6&~(+0;qJ*XZ6zT7e^jkC#H( zw{%0cqNBR96vpGc^hsf!xZ`VsJ${Lpf%cK0X^)W5W6zEt`-ehY#?!{k%oCBlMiZ{K zT!f-&vK`*8-+{1=(G9}DORxOyg#Ddq_3nuG*AML`joJ9A(PD5|^-~`1sb`fn^I&L& z%aKZ(;raV!pyJ7`$7A$erNu^c^UL6TXUlD&CjTU|eeG%GWWfCZUDcq49K(PjqsoW$ z5y;voN@;hWA0tt)OH5ugI;|w(L16M&PbBV1FF&n4=DgWw(+)c&c<_7pT+s9~B-{Ei zs-+HWK9Gj5bb29mlU1`dOjL+yNK_#t*#I)0Pkg3r_ z#=hX{fhaMRD@QvVi9@<;WcXmjG5>`sYxxw__8d+c^%bK9L-Q(&E{QFFmkpY$qTieR-ZG0;J zgXvGVw+U)B-^XYR3JTV*Qm2)aRW)Gt3#~LRK8KptHyNBs<)BVU|5?$!+Q%|0X^A=c zGtb#eGZlX%^SS}pP1aq|0^$7-Z6D?+No?9?ouh;O+sd@%Q^gsS%E{bktA)zPtZl@n z;)FBW#>oNgo%eG_BGK>-u_FW}<&7V%h9aDI1*av97k#A--i1;GMxo?TSYv6z(81P( zt(~j3(^i8qwL4Q3oCL!7xv?JS1=JkoOx`c~ycznXSr?z|gKr# z#RAqIXn%9=jdtVu4r49JXY2r|(=Cokz;zVf_TMkj?^0Eo_o~F5w+JEEEpCNHg=Tl* zNw*Hk$#Qz*hF_u0V6jJDsr8##Zs z;Jg7T1@bmlILpbz8S}g9-}LbGaL2VLIer|f%Nlj&pkt~Uk1fac$0-2`v8(UP&KAD* zD?S(#Qi7zx*by7)RRf)&(f^@TeSPvo|WQARu_L z88NZd6M}Es+CC_PgJm`&n2!>i|HrBbKeh8xf&EhYJ~ak@k(YP>^Cm=5*&m#k5q>MU z=fW&TlbcLF8>0J-G(IWP)b}^uIm7#e-^5hMaz*{W#ot4_{UvFcM&nY&tF_!0hRta> zKx(3l=iMeOc^_WmXC4DW@s?LTe1TddY`vHQIb05FE%@n8_WfaGubmCu4I1rx8DUiB zD3z|o+_AK45bhu(b~%>W=KW*WBRtOlI?g?mhqrBBhHluLxs}}$hgh~V zJfmO3k=wh1DP5?rZN$)aT_(d5Vgh=96E02V_FB~}9slt6CNrFc@Yv2(MCzE_z4-Kr z!wdPi;dNMg!P#|we-yK^1C~29J+s*?#F3N4 z@6YO__peEf9=6YF?iv)^>Mf2R9N0CYz%m;A=x5J3uIC2Nw^{S)8_r=w(FxBDzCeM9et{Hd$?90BC6i|1b9t?> zp7ofgfu73O7uQIS{>qn!>+{3%x|Q0(Y6|^m{G@jVHqU;tS)0xLKT>KQxX$z?^L^C% zI!Vf?fLYV5_TB$?An*WhP>f5>BurnyE+31YfgN~V&kp~X%)uULzoQnZSP7;C3wJd- zAkH^o*=Dz(w#ho{*Afrsbmm$5`wQim|NaTocuuH4T!Te-rTwr8(`Tln!}ed~e3Rsx z!^yZm_gr8rsK+2gy=uV_8ylNjw~g%iW*62kS?_V{7Jj|0j*@AxoxNDt%QizqpP&N3 zn3?YZeX8$PDj57cJHVj*Z9BAt*V0`QN4C{rK;+6j>;W59xZ z_LFSl)dp+=IB4W)7@Q1#7u4KZc7Yv?Ssb0+e=KH)lJ{!3AN$eR1DM_n{cI?2w0H`- z_Sy*Pp09U#ms~v`nJahpL1pZX7K_Kj4;Crpv8TlCq$;O^5Xvo@CuEn_vWom}ZEdkv zmH8Z(NQUb|FEurFlfg$2MdRiwL{L5_BGQKa&)#{UMo0<>v~NyPgKqk%F_i2jO*E5W zY`mGAt1G90Iupxfo)Bi&myVe)ri9omd4^BV(G-7$l;AkZ_W57jB?^H}12N5*nKz~M zzFVNhPyd@Ow`XVL7NsV-%c?OgC@NqT5_+cHMnRKGDXb>%1wuI>p`{0@w)Fqecib3+ z?bfI^%apDfsqj#im)|z}fZQA!Z(P4xz!wd;$Kd7v&s0?TaTJ)#P?E+03#}}fS-A|b zfQ8Fx=Gel<*a4Z{CZDh)rUmL^vofO!@JnmvPn14Q4BHTpenMYlc{UaSJ&z&!AywJ(e&mRX&2{$|A=ib~TRa|gM$4sF{ z2A<~cV8zWlop4YIMnna9^r05lksOL-ePb^|7o8=VkHSh(N!?g~f6m0xpdHYb>2Uet zKOzz2El0z}j;hv%8M6-~DJj;AgyBA+NqKqn;2j!N*@v0(8&UqC(zF(H@4|ReeeM_+ zD-`qmCY%~=*F+RGKbec9lQ2-0p)ydBFJrd+seX<dTG#)d?p+7Wc`)hjt9$eqHLB`<3JB=Z z>ioSOB~{93>T{jD9O=Lniz5N>nis!n{%h>+y82%X8wWq&fHoF*W2gGj&=ndR#KQV`X`kx{4&!0(&07&4D z{2$AWfQIV)@38;x#|MPJjP(CCMvVW(Gnm*C0goe+*bZtWvVB9e@FO{m%pYf!zZ3bt#>iMhWuI?f5ZI2@I5+od z1pW>nOkV1>rpPBblF4ME0LA;>D-j!>vs)h}^ws$t;hc4+aS(`9x96Fj7RfrOS`MqC z?M{>b`GWc8$R|p(;P~oGH*lukH<2>xHk`nn`(I<^G>!j~A6O8f2LxxpTzeccxI)Az zxHG=dUvrp4!e8y`!bm&Oh~I}!LTDM%{>((l;}$e78^9$F*hp2;ufjKwz#+t88Po5& z2o2RA0b*Med*p7wv+f+MSO4qN{b$nq&%;yns9rujQkh#|K+Yj0g-2mM7TdMjJ9oN# zP8U*svw5`x5jET@y(;rxEyVVZrm&e^+)R^S4xiWR2Z+?Yom4Fvu%+ooNBVW|_%YE4T$)r_RI#q?6BDl51bwX#j4aJ|R00dWS@Bg2kqNH15|$SQJn z`gaqHdCtdx@;^!1u7WCl2joy)2 z#B6x}aH7%GPGz<0D=ZPfsnk&ldDu-)Z-{)x5#BP?}=7r3yCM{|Ht-)MzN!t4^?}b|i<-6ymyj?L z{AxQ@sLUUQ&!HS8z1$1><1x&cF8y_?5IV7Z*=?g&4IG+34E_e^W|P zpwhwS`{sEmWp-m_wcTjee7Y1Z~iTJO6IT>#-OzQ>MF@3VXv*rVvt}kTe_bOU9!hZ%l41Y>02L}f> ziT48w#u&8i;Mf)R@U5VJuO8h^`&6vSrJd_Ughs^PsPd_fUh@?hRIXk7CG3bRxs1kE z*mxEB0zP!!ETmLETDB(^8v47?WMg<#s4h|EaI=LI!!?=YUg%KwQU0{|R?R9S6nh9! zA>Fp$u5outacye3_2DswS%67&;eOUbh1fV)O#^+JMxrdVEJ#Cl2=I`y6mW$uF;)23 zfLtV#AQuL(Bb+HzV7eD(1UZ3b^KFqsx z7qNbZJL~vxzwQ-t^k%%pjr20V3Xh5^wY6A_d%f3El6Y5t%6Chdz*yQV1iA71djB$0 z-7Y1SkAec)ZOwsT&3j*#pX z_-D8v9F=TpkkkH{1?IcYl9I5TW$W3fkjL}oYO;)pIKI8`j4(CdvSe0Iq}7OxcUy|r zWxL08`1F5Wvf+NLF6V7loAfzuN`fD7?Vbf48qG)k$+v@HkJ zO0fKaBK89@lS&z2#(#JQ2gT^m26iyL?&GNh*5}6Cyt&#VynCxPvFe2OAE%($s%0uD z0yn!@Zu{oxiSEl0%~TauRVl2vd)u`>cBrX%b!up6l&r4Te4LgZ)|{aT;RaEw{Ar!oYT`1*K);~R-fY^}9Mlx)i6!9t$%@L~R6Y9y^8cqZ48|E%DXlysDo z*byHXx&V@h#h?q${cLexIsLb06fV+p2X$;pO0c|O%5Pc+m^dJPSmI~b_H?UIsVgwc z6xf+B(Fbo_=11Fp{UMI!v`|k!R8ggQc;K^?q$Y38)YQ+6O#d?F%hc3>U(*PmWo0F) z=u2STpPGz~!|n?x!x%@S>8+UQHE=qUky}`ZIE`45L^yE+yG`!QtDT`nBm=o^Yj&wY z=EGe#7VD%py<;mgrp_l1_o~b30kepnf1A(9+A&yo9kt za|iqnWt-!Y$;pTDTKPQ3-A~?M!ChV5j!SP0bdE%?2EBTvXe7Sh@@su=VnY=Q>%E|! ztmbVxTOSdt?cN~0BMY8Y)V7`k+f?3id!>K=?EF4pLI>kz_7-3gI)2m*v(SQ{7AHDc zEyefiR8dp+Ta~Q`p+XB^MQL74ZUCiqZ@tl%tpZTTw>btWLd!g_@u?N`FWk*EDAa6h zH=9%O&d!)ya;CXALjQOx2U~x9-+bsbYQ#ydy!GVL-7B1V? zOG$Ry8F-iD84$Tx$j0|?80`-yY$_~tXam`+;T_;_uWGs;`3KF#;9a_}T*!Yq3}KYp z?|OO-_HzQ6L!?0FoY^hhAxm|3F?1D;?`$;dza@xOwm(_2+fCq(9&-s-mR3sSQAJJG zJ*xnELX^DDZ73NPC;ncrYot$Fn>DJyQx}otj?}2aQ`#sp_NN)4ctWoFG0wJNLTk=~ z;%dG4f{H?D9|M_?a5P(DI3R|)u?Yu9%G(?+SpWUk7YKD&Uuv0`hg@W!(peMjVWo-U zrA^ffU#h?}@mLM_5qi84fn;+dr~4_nW;3SVZMPZVNYrod4_6TZr5=UXin+@5Fc@FP zo_22!d9apkyP`^elJ5doyYVxLw100vc_}9;TQhmH9&Libc9KzD$;AqG(&ylP2$#cI zen3j>e=IlPbg}k>bQ1k^=*l4LdGWejFHlsc*r4kj>3OGtM8ZPIwf-IRX>CT$1z5~g zuQ{#eu-=;Q^-3J$zsHO?Yv4>N6Xa8)e`r8WOivd}e-U$^;G0rg*N<4c6C&^I3xE#f5U39guaw0k#w>m@33G zyXc2+PLmiiZ-*ad&(7ht*XH{7-=B@L1^tLcK#hr5>ZS+D-~$BwP}ptU>VCFCb! zwYGNLtTj~~lHxCGwGdg}PaHU9YZ0}J!uEAI2ZH9@nFKRLE@C$+E5G%}U&b#M)ex&Z z&ozw6ac4E1`@>MFHtL(7=zkEfoUV>D8{JA0CZ29da*B^j>4NCQctN+*n7+OkZF)L^ z&xJN1-=*egs6P6PptI2S{uYw&!6wVS`#ZHrg+0iIYw~9LqkY|m$h%UmT~S+JNG*jn znU9zaqn(8$-(!SkTbG_tJzbE9EeKL-#)gxPcGfmD?d&i#+NEoTK9x-! z40fj%*5kjn=1YG$g&SFPmTBuJ)Fe1P!;OSI1t?t6dY{=vh3d*(P@Fszx zgie9^90woJY8%_dk{aLSQ|vr*r;SvY2}7DcUc~m#-#97=w=F208@AM!y^S!!>t@U) zh0>0DPF^f#d)n5#$=M_k2?{N%5d4nvh{p5;p_hmle;&05jh;bsxl(UFERF;^g@xbm zIOPVy`U`m2n0-szS4VTgidW&F-d3Sp#_0RGt8G1mim{2^&6szn|M3SEH}^&|qw1{Y zw?`Y+Ci-_$FRzixG-_ez*X^Nfn~N*uZQ>ZUnvrUIS+(jdfAo|1YLjU38V9#oOcxj& zCze0qo;SN37X(aC-H;R*y*>pf2{%}+qX5-Z0gKji{a8_h#^U11NsfKrHX?HdOxd!& zZzY1 zH1eWrJb-$#>SMh1y&ky@+E{q4x+PL3}2HnGa&;f zi*$E`Me4ihme)rsiI%2nj1S+}fv>h^H^W_@7G6%HmMh=Q)m+-!=?o92=6T*)KCOTg z5_GPpQ&r24dfX~h>q-Rk z!{jPKW*s(CueyPg=d5OV>l)lQ*Y-EQM^=PkCqez0KIkz>t?$cifXew&Kxs$uee?Pv z5r@tjqv>g{8tPiKS%;9{z*x-Y;Rg~>n|GzKb)W9fghNCKM!uPq$sOB>3iOLMLc^8UAJd-u`x zg&51C)^k*PK`l6eit}JP!&C0IH?%vu<)Ghv^Eq`5Vxu+KwH@p4yyhVr%Y%n+E0yPK z8ILH(y5*0@LM>!TfFelux zkzdQ7HY)^)CJSWg*rUs%;p;5%79LN%9z0#%b*0{e7@pj?n~aE5E25-MZ2_T(uRQb% zPtW%YhUejs4Gs1l<{LOO7~u%{G(AlGS?08V=vPv(yQbV7)A915$O1i9#*! zc9S30m=+RLkjpDt(A#FJ-SHg?$tN#MLc*epLNt+&K|b6l2#Z^-xbBD*7SpgcnjGTg zLs!}pF}Gm_jo(Hp8D@vMhjm{r=JwTHS&@)i?z)f#mU1#l5#Y9`CNDfMUjw=o%T2{* zYDpxuMLCb$h(6s#J*0CoOjfCyxO<}jl7RoQD?plyYfHW-&+T0I33n7w*fKg>X`+3g zvwC^Lcu6psl1^gief)jh=(f>T^ex|+E@4m|AT3XSCT51@NyQu))%n@Y+v-dLYA()a zQ+OGCZjztFR1IgcMWBF0J#@Kdz34U0s3JfZ^nOgQXg;D{aa;GM3=bY)z$Q#D^cy?> z8zL#xlTm!F*>eGK-vjqvY|GXY3cL>%Yh^To;2UXcjA!MgW^Xvn21|{X1rdY+^_1i0 z!Q?0=)6uzrzBMcp9toDaw#(1_Nzj;tC2i~VHcOjh%g=cd*Er_hkGtmU?E8OupEsiVqJWF#E;;kq*UX3_Z8-hb9oiKY1JTM37s z(A$;O%V{Ajh|i_<-5arLvwW-jQjH5A2FB|&j`itMoqbc|r(gLFB;SKh`CK;>(`mSy!*p=KY-Xp)LwO?ZmX(4Y2 z=xx?}2`Y1F`TDe%YyG5@mLVW3I3;4nE7d*yEkE3KG+)^l&vvu{wh-DBvbjbaw(btd z60@HbXcC!UxxecPQaR5~5+r@Y@3is@x!-QV8z;RtLNVxjb=!zKbu*d@QJc^q$!fjv zxbgAC<82d^{?2t@uK-L%F=?4^m<+lpp%(W87KV6GJ*;H?`fF+pT^uKw>FL2mpY}s3 zx9$zRnLX>&Lv0L+ZmQ4j4EuaL`o`u^w>d6#oOrB+`?Bksc%D!XBl=>;2!gQ6ULRyf zhFWpDrB;G?8SjzJ_F}ppc4-bC9;|RD#G?m03uxZDBO4X|;J@(0HjJIq)CL*~w0BZz zXk7(^?9&*;WYRtrP;&HlauJL0-FkSA&Ov|tGYjPo2F-cesB9h(wq6ffQgD!j&4=#T zOmmyeinsE>9o!GW?T7+$XabRJoSy z-*|9_3l{Y?mkQ1jdK=Lk;aPg;%_q@fU6_}AeMeC?b`aM8#s#6-MJS>-k2}89AUd=p zf3Y_*(z?Dm@;#EE;T;VT$%lTmu{d^Jt4zKm7o@u0{Yd*~LOfiY_1)hKnvBQx&UXaK ze|X{NqcQe>44>dQhy@OOe)Zys`CwP);9Ux7z4(Bwn}Hsx3bo$1ac4;dyv#@`WD+F& zdGp+fbT|(M->v(W;*BlxVDAyAUs*E0?ik$t}cc{&e{J%V*iyZ-VQN!=ndIueT)~ zzjJ91v1z|9#<2PH1_;%eQs#3eHAr^DRwrNgf9F_vOHBJ4eYRe&Rzj9;SYMKNZUEvW zrDU@Z6>CL!-^PZizMaxOThCg~PPAGW5ynIW@_d395dm>~-O=Zkh?7$e`#;@UkqQW4 z(^%{~oQ+rnk-@8!NaRVjc@B)!e*`}`P-O7H)S@%vny{6jECi6D6JsI`2O}*^*BG!b z>2pDYOyNbMQdz=;s?@YnSRG%)`E?)9kDq?-opR}km8W{zw6dy}*g)txNN6=s3jh+F zfjFaS*rmtr!B#Y`ivSWTnQzM|N6i!`cl9L|f3}Tsl0io@u-aTWmJQA=bFI0#Grr$%lL2la#g{y%b-v&(Xje7j_jmOpfqQ*GEm~TCQ z@D_{MwldxYbbQmgaX|!sB{iQ^oePi?30EbpR}ctAb^%h|QNYXTh!-0BObD#n=~vV> z%lx5g{J_85rb%uH+4!BZsc!!iltW*ha^i3d>}aq4C$`fqfbJL#&Blvzc#iRcy_ICt z%aT1Sdj`@gmW(+oijg6VaYKgEIH&7rxIfz?#EtxKEIm z?lqWJ9oIY^oqQ7n=qs#cl=7W?GE!oXn1Sz0=?tg0GG9eb1Y#QD^mKw;Pxgtq6Ug{- z<=rkN;#>_%+j(BWj~vZ89aNH*f6J)Am>sA26M9b!?$2fBLnM;p2a zdZbb>HM86_ck3>;e4=`)&TdE-@T?KRo6W~shp(CR12+TC7{4%IZYyO<`&Atf!2cxt z6bFl+Tu|;I&O?w1?7=TED=zy)z(N(MO_x~NIW9Eb*@H@DxHC=e#Ea*iFr55!>bCIV zLugL-kl+K|?b)q0zoYIW@uRLUjPLMN8`PQTn-ABa zn1cTr45AZM*Y%tB4$e!$b)wouL+&6}e@OS4LZQ^p!Js9T(k^p$5Ft*%yDqb_bP@4< z`vjO8*NkTF6n6{}14&%bNb`vzQd*VL$UKDp>gNsO&I4fpt5E3BAWx=M3t0WMhdIm+ zC)Js0iB)O9ibgFcPd`FfVkk~&6Vc4wDsV#DAmTwY3t^umM+68KH*v6-e7sukChm@S z^C%ctO;~L{kfz~tv78qzL{YuC7|KHnmYw0Ur>|d zlDGyj+y)6Rp5Ie}aaF?EW@h|4Q9*ntO#7SY+MW7+MPI>h1?Q7ZUAD%VdCaKE5Ze$zJ+kB>w76xmi_6h`Bn9%tvW^!8av(Dk<*TL z&|{}{CoP#amKm3@>W7UwPYo-h)$Ds9cGZQ zq>mCHrW*byVy()a-F)Zm&s=bVb2ncZs&h(~OE<GX$djLtX>o_+0 z8Us?liU4Ra&F7vPqK&Puva*Wu#$RSjA8XsT=_!VU%hU_JWLLFkk2x{k`p6Y4Y1154 z+jB7ScRyS>^Hw8Ot}S76t+QcZ`U*vs@!HrQXS2A!`slsumjkgbX*Hf;4b(OmK-!4R zTkPmwH=fzVGy4wN|KVYW%7a^tWLzcbZMjCpWh;*ar2?dA28QNI>MS_Y^fjltdTO+Qo`~xVqoN=$lHSP>#8(jeZ^AH z$U*eMSv7&Qw?G>-qfSb9E1a{y4IW$TYGdJLTf4;0B(?2;|VaM@Pg-mrRM zF5jfYOMTX2U}kmT=ILD9ImY9^&2+=C)FCdSS6FI?QfHBbMNfWNsN3L+^xegde0If- zep2;bbTcStd06ZxrPIjL=7Ne}bH}#(&X1`D^``MpK}zm>N_KW66qQrvdH>gEKzQYH zee$i>uH&`f8%>O-E0(VJE%u7jxxj&!lHTkf#6>tZU6tuAKL5)=xA|J@36yFkqm>69 zvCo6SEEC;LlPRxD9Cl&4hEymLUI0!Kc0OUVJva;-E1?YG1Rwg2qHxe-z>UMGq|2ZI zL?3;PxF3Jfe_ng}I&%(W_Z!ryq95z5-ufy#Uc!am(nAxhl8i>DIFg0z5bn+vL)U$t zWJjI_P)_)e(q^LpNqi&VmxiOM9q2?DKkTKLf7%4krXrMz!JZ&9hhK6URUOolZi|wY zDAQ(XhuyC^edz0W#-VEE!f{*IXqT-`^n_5q!hx2Prt?Uv^r!j>EXAR8OUE<>Q&oy( zYKo)j0zg>!HGhim7pGbCQJnc?Zi=UX>kIT)CWG#8qv6EUBMxqEZfd_XCc{`XI#?B! zxd`K1b`?Z+N7#{_7w*Vf7*4T_0GRXWo|BVj7LQp^`V1DxNVAKFA!;-WKYzTx2L{jYiRgp1 zwT6v6CA5*Pb>(EEr5v5-@6GBq5_KL*KNSY9X-w2b%`@=q7 z=cS!g=xQNcUWm9KC}7&;c{N*^)$zf}7p-4-qz)I{N8o|y2o;d5CU zFIj+LD+yvrgp0>O_C@MG9u4d7la}m~Q|66Du8XH@)NH#_bBfc{h%a{I!e9iKaGDyH z3WBTmYwjl8umhhSt6h@8W7O(t>)?L}8(BPvL9Her*1F_kBxTxsp$Zc4Q5|M80p{=a zhG!+eFn`-0jzqXr^^t>G^^Udn&s7CLEt0acE8m)#nwH4DM?@5pZIhk8L1Mt!lK(rf zqW%o&*$AxsQh7P8O0GP~e`K-<@i8I+902it#R;{d0}Q)DscY3U6CyxPQ1u(q zm5x4TP}B2p!+zlX4i#?C^ROUYrP6H4WJ&SDm8z*(oEe(?Ny|1<$w&Kapz^V(==05i zPyW%{W+7gqJ!!{;k#3E_b(1f>!s}|~QGu>>yft;x?^I5U$S`;Yo9j4};TbE%1#4G& zjb`mzy|rfSk+IK-dhDXhx?3iPmM6EGw;YIGY7s6dwt*p@*~OlDaz%me^sA~0DEndy zR2`P%1e1$-men|6x3x!66B=cDFH<($IWdkOVos%dpXx3ALv$^%)a< zMp=xVoZhX!>|l(CRm;|X{WyqTRh%&!%r!a|Udtt1p_@kkAd|+03Fn5B&ekGlq_KO0 z>q>NysXFfnFuDvn)T&h6jKt?QW0pf+0x`rF^$ZM#-aAvNdBK^aOF&F!k0Lt!c{n+m zNMOlvjJh*@y-AA$$7Ki7;Uh{g3A(5V$GFvuDovRZDzS>cwLFc3)^)+HE4p$WM}?O? zR)`+8tvD-}fz8-8+7{x|^%SNC9MSoUP$d4sS3<7-D%-rWhO$Xws(;26neX7x)KJ&c z{dr7IcSw%Oa3Zk7acrks(#t`Gfi+w1K*ncRs7&Ls>sz*qQdvzL)tYHk7r0YY-~;vU z#;E&qvH51DP47y+c(V z(_e4*UT8P_kXWu8#lYukV78+B(q<}fcNWq8W13pU+H5n+cWVUDW{5zNkTiwe8%YTS ziW*26ZBfCR)r3C~3Js80yUiUtajpGE4T48g$xw*-^y79*sczcOG`(dRbxfW<1zVv# zJp6cwpn@k11L+k4%>;5SYpEzR`dhXIFKFQD13S*6vWli8)rz(8+}2~4qn#`euEeTT zzy^(q%jP^;|qRFO23P$%&6b;5Rn*`M|{c@-u<{bBo=E+xg_2_T}XnM}+)HUynQ@ z3L1_)A`mF0t^Rht8MS`RDC7VZZ*394C-r*0`=1@)&IXjB=^foN!Jt}%X zukrbEft%(yksPINvdv6Tg&A?`H@Rl$yW&zaLyt^OL!~O0MXH28HH#@CqCEfKvuw;l zYhDxI!cW{YEcG~S_nc2|WLDE0&}wmdAajTubkMEn_J;~bH3}Vd$7g1ps)q6cy!*xu zlW9K8m(VR8MbJf!%PU5m?F}vPU?Li0Eh;$^B}nqxov!p96cM2%H__YWfoQZ6jpB#h z=opxCAv7Wn0oqvA~TYk4t@*%r0bUc!^O#?=cb{9g(y4YfhD8 zHP@PskL`@t-)73KJ_PkEcY~Cu?Qdorf`UReS01moIG|aF-CSL%=sD?fX@kiRNAS`G zU7-`myMCGsc3m3vD^}VHC|7DCPtNA5L|r3pwMo_@TvBhxCdNYMsYjF3BcbF$6?|Mo zsUm`%v_pH%K}SE>Lx-ZJ`(ZY|S!&nbt+pKt)2lb)Diz8~g>d^D zdxpM6;``%seC;S{eKGp9Eb+-xy7vsgTOxF>7BGAx>#bL#4-U*7at4qIB_$+sG-pdJ zTet^9Ryr`(J-Yj3EgNGV@|LT`yk_;R3+Fd#*X#3qDnSQs8jbiS6^jTqwW?ds#qpP~ zC1UU>F_LqSHtN^2?)(CGA9~yf0?&0%&!!~pDKy=z!rIt6`sSxi^_LIrle^h|I-8Rx zdh?+ZUoJ)HJ7U{LMgd%mPt^ZOJVMVXyp(Vn%xO743~1`y~b7j@+KSm@T`|SAzHw?5p4*r z$<`n2?O*vvl6eu2;|wQnOF|}W)yO7uoACI!tU=KoYKF&?>?vX3b~G0n3z8u78eZqdU&XlXxjE=#;jVQcKsk9Lu)5DgUmlA_gyYg* z8(%k=Yo_RNolY`Z3}0Ng^KUzbSlRQI%5GLyeOdCYvYNK^Zo4tEdit6Sltk=dQUm7! zGAK*oy{`{?-?`10vX+C4@TtqW|Ed_@MhrlcyPo$*r^~`_m4ekD!WDQ z({P%Mp1^fOO3B+qPIpPMgof*SshT{y<;>^r^W=sri|L(});MR)ne&efX$6YkRX=|| z>Q)iCQjvVzQbfWMH~3Up1eK;z($YITToc=Y%-@gmHvGB>9;=5yGVIGTuSIs4V^5D9L zV(aj_cD@OK-BbFBOoHc=bcq6A;ZU{)CXLju?|FgDXn9uc=u^cA6rg1jH^kIxb+3yJ zEywFioWTpNnhK?Nx>UM(OZ%Nrkg=;C>S2xZ~q40-QE!l1eMv1)mh#k8q$xRB~{!+GbW z5w${#oQ=3-GnYD(lAzskHIY*L6AoMt0?l6qYuGiu?1{qK_q&u3^w-UEC!7#&uHikC zqrL`vGsO=kcZSw-cHvs!YZO7x=9ZGW1F905CloYa?dceUMG`|WUM-8)Bxid08eYTA zarA^!)_2@tQ(vY6rp~?JIPMqQ2)MX4+*$f|gYP<7Ar@~6AP*Lqq54&sI`5Ty zyGDdmx7F3P_&M*KBHIdMr41MDt5;DCw!?)kU++8g?@nB}@fY96vLwks9~yz3NJh~jLlF+z$%?fXGcqq9(L z1P7EVXW=81#trEsl1?iXxo}?6? z2V9gs8xRhQ-pU|*^+E(SQ(L$E7)adY&;RWXF5_nWs5G=9AmiqrS>#=Y?KW^$DNC|Ubu zKuq@Gz|dOy0v;ld7oUq|d*@7Gq0WfFH6v0uEmJK!dL>(gV`8r)I;_ba&EXj}?9kA| zfjU;DiO06l4y~fN(&qM8hi_L|*CiZ&(luOjQyYXQv@VS zhP&PM=hb(e1|mSKnum`lHp^5M0)}hQY$YzO$lb6mVlGLA1fqsoAE{{MPNoG6Q{ZA% z8we^a6g6Zn86XI)S+{N!9a_(qasQSU3cx>hEnJ`Kxd8NQnO{u8l0&=4&V z8_7g+Nn$v0>t&JRWVM#S0q)M|xFTZ#yWzuf!%Lt5pWDWUe>eB1F>(zJ=kfN}1xnrf zv$d$x=ewVcblD{z=fA_q0iMC2Jk2$tCs#CMiPAHcc$fi5#0uXqlTbb z@{qje1kLLrlf#}L?(}nMcnQWZQ*uO=!U?pyN?Vrp11k-?#%HZCK;O6Z)o)^I?5z5< z%dRRZPh`mxQ<0w!UQx&Q)%ca>W1W-BNQGB(Y*B| zE6|OqLUN>Y{_=CR(&wbO45iDi869(u2OA{Y@|YI$UZb&P5<`~};a0)l8P*962Ph+* zR(jT=BScKwZ_OT+A~OFlD%i^bkBC)eH=(BLtmVdEep3^=7bnPvh#1csP2|73oRDT#9bY?+4(RmT20%3W8(^ue^9e!5vNp8nH4}6(!h%W z9X-8UMGqBg1NwF?^)?eN`*pyRQu6z(5&Xk$1m>wD5?z2X3Swz3ORsyLPiuSg4Otk` zTf4LI*Sk(HvyHk+*W6q3N&{gQH}RJfw~I|n#OAkkx`T0P#Q!GGCMCYW`kA0LP#DV& zZo&S1J-r?ml1eBVI+*VuA){?Fo4NUwm>S;Xv{!;uDHe)6+mEAHW!=I-v7R1A$@!A< zRnMRMmuweU)Oc&Jt#Sv2^9@|KYogh|9!|A}Qa>Y48PlG79}``XD^KGEKsUm%p+@0ZmXIysF+#=P;1^Dt zLcPS@xq021-)*8-@F@NmD3vaOwI5X9+Bcf&!RE%B{xHt(m0`J@@=s|1qaYyK-S6-H ze4Dd{@SZi#jYaA6^YUOkwIZOj45%#idc<($Ydou^ULMoGuyh!Mo?cd#&P`W5ynMZj zfF#aX%YDzG7?^ZgXqbH>AA}b~#CB)X%HqQ>YJ6ncLUbi$WlB|s(~|sU1lKx%g&W?r zRBRT4Q>%89d04YUlAD!*Ikl&B5IQYcgK>PPs{3Q25nGA@%KLytLTI3ut(x8gs;Ir^VQBa4ksV!#?8PIGIVf~5_Kllk?=AhGhqggu>W8X`AvLaEjtQrI) zL#lG?V-2&0`Ly)HhM6Rb2B4EQmz7x~5!!RLKRL%e(Q{rG8$cw#`=;p$YrSPml?wra zuqRH;vtlv2vn1qC@lzIXYU5#tty|U!<*PUkeYmG%YDXib4^ba$&`6Xp~CDLTI=>xYR5eYo>k@^3Ju|t}d5DzN-$gJ~X z{AmjBw+^6FzlJXa>07Ro_pX^0-WW?NXx1`#(ma6Wv$G^mA4E$xN@(wUX;mugIr=)J z(B6O#T_hwm(M7 zL5{2#s~A?SOEjBTn(K1C*H{KD(`Y&XhPcc+zz1-cT~+Gk10y4%!QA@0U$2@0uK2%( z<*x3dwYRf}f{Y-d@KXbTl=H(O^-C0XCR0-~U?Qv`0ABT9d#Cwxu`HmYtn7=j>)#6= zG_55cjvM_0u*Uxy#Y%;9wWVXzB%_^~ zC~q=Mzg7e0yDU|_U}D%1)c-%AI@j_~UG;x9FU_BU$MEm@{(fNDfccNy%z zQ9d^dDrPVC-n}}a^MEM!KADuqUY}Y`d9XI&R6QLInZzQCMlOAS7lLP9q(=jtkruL9 zA=jBOihDy^0?%o^;MeALpX+&h1aK+=tF~&}5uU5AYrMEok`&a`5kDusFOzQyk~N zL*iG=6e7fMZ!^{>K5I@~8Hv*J4g0YBqAq6YrV=E^r;HUf!?#X7j)tBZLc?`}$Ps2; z(jVI*I70H8HlU!#;(@9Z14rYc>2b>j@)2WkYh~_{nxRUbcT{=Es5&P7ZECPT8jeuE zqbUlf@_Vov0^l!@`%LaxHy*!Mfep%NfN@N%9saAtY}Ol&&FyhTLF}=E?)@IU>6bf2H(gvn!}kC-UhZ#;vjVBB9hlO?gQOaA)t=(l8I=(KlDqi24&L8}HqAgrLxc>;SYxH)J>fvr}j zukKl}Cw7Q&&FX_Y`)4v35Gzi= z%|BTPc|{fQg91n>5FFg*NvjZ043h~dp*Ch=sN0{S=eNq$SydWy@YLnANn*3qdo)8B zd9(;eVmlc+JkYe=?_fIfiDKQAfYq)YFY&lC^tSofue1`j*$u9umG%C%q|~v6SYV@Z z58pV#W7liSt{H)*VLiIXp!;W|Q{lWmh*IRVzmWMH=*O#gu%CI`eW-4AVmT8Rqd6XkndQu$9)qik6jLkf_*+C)Z0=&mGwDAt7V? zdE^Zt02+IB`=u+BQQo(Xke zzheq^x9ay#;IZgbok_+CI3G#!|b-KOm-zMmF#AlhYh zv@Ll;vF8F8G)vB|t7S*-`qPlSuP(R&Bf`eGNT!prDTo6dO(tkB43$f3eS)_*@boHxyG0yCN{(`OqEKDHx5>?;kyRa}{a$LNnU!&dhwqu@vWY~$P*9tA zN-j%sDO;q7$A|xjUOTLWfb*l{y=@SQAW~01l-XDqwg4gpg?Z(VA5E2oav=K`ZZcFN z(VYsNBE~hkB=qY=v#K?h4^t?_GeW&?tPq*!J_^sHWB<`4E@^27<$<8`TY?&RP=-4&}bFFzuBZcIWN#hTNwaM5&6s4JuFU~FT zYB-fHGrC%->umJgH}i2uXwI*TWGE^j?!brx3wg-<_a9|_wlj8ay7p+4&jg32VeB{E zKWaNc{Xkk7l7n?qQc_ZxaC^Er1OQeP9C~#>japNKr9T$xZ9vTe0)1fn*gf|%<>L91 z=J!WJHAr-K+O$rGk1$JruJgG?fYwn7sPhkwo*ye_)N8ArdtfLEwd`+AW-t4%=k?F7 z)gsg;+de)?G+g<%IT$@J(SCgS`WDhyYbAE8sx$?I8|6vsn)a|v3)L?|h5K!~S5`ZO zgt(FR$wMu3{+mlQ*2Ch{eeqAoV+>uh9q+3FD0hb^!!m84J?HZA_J19{gE(bNNPRI$ ze0oW?6BL4)NJ(R3Ex)V|sXeQ4kmm`!KC6Yrak_Db44u~tJgcrJO2K+zmuX#Rs>zh4 zl==uW@6>HdgfuEn6ttjL0e19`^R!gi6S#& zMX%;!vTnL?@KJ?&-HNlDG*QLsT({@#r4~%n?qy*ttv|-f1mgv~gAq*!tXC#0+R`Mu zsDI@FhaH%ueFUGHh)A|=Z};I~85boR$T?sVPqp+zkr!(cD?$GIG2T(@noND6sN$P< za;7T_jPTpA!P#brX-oT(UfeZ#U`f>*)P>|mWST_wWTdTyi$FX*ENwq8*E{2piDxF) z==f5!)Og&+9~;l^XVr&L8vG_b8>mCb!yvo_;&{ z(5`nMLU9!EgDAZVJqVSynT50Vzo`h;p)_ngBedLt$(Cwlw3D7U(MiCrW4Ina_Gc(u4UhcW>M)6Cy>t~JB ztHvC+VHM)1FO}~%EVeB1-=RMB_mHua;?^G|ecO+AKDwNhsrUZD=Xyc>w^jTGuJ)(v z7QLsP))yrh-;n#3J}tfK7!G<8F!)8(Z8oBcDVE!{_l8i!?|Wx!Emcgww=YLh-BS0j zp33E##&jo>v#6yI^rx@fj%Mb!-hX1cW#==Xu=tf=Z)&W+Go92?tIn*3$9W39cdhT@ zlxBW!6#YSj6FoOLH|yPT&&p!`af`p90B0t5hBLABH(z_@!r21~>xZ2ORevygeO%Zv zixgpu>h#>%NVS#?XUMj-y2EB@+&JRZ)bwR5--uIMW7i{A@_z5G7)cUFy0fb`Nx@NxQVtrGi`pBxj}^X(H6ZV zzmmEWaeVaB7|EXSQCLntQgwDPTxu-%?8(C!HvTJo)ZaC1O%$82RgJj4AKdJvJIc$) zmr!wr8|KY9Gu6K@QUw(zi@smo4&WhklMQjfd*@i50Au?_lvW$!tJroqW^ZiWKmV;O zFkphiBD`rbtR|1b9*(QLwjUC`m8ik3#PXGM8N+Zvrjn}1HSucbz+u)(Y~*9v?}>pb zywr9d_40S|6(vIv5qmG4vCm+8V>eAt1$0LHV@&M1?ps$n@}u2KI;+*~`@KO}8!ADG zYl{Ar(*vE`A~W_oVL@X&J8$hamAh1htV6(LRpVl@csy=N@>VI-Y&*#(-rCHcOi&&h zxs%#CaJB?haCq6s|4N02tgFEtdGo%O_2K%c(|pV0KX&ClQ&p|>9l!NP=#v=z)>LIF zY4=oxQGd6lD?NBw`(7U~!ayT+_`%C+t5L&H$p(f7nO9c_=Ad2iH=h^A%k??_&2HN{ z?|Q5cKtFao;L*id;rI24LpetW1jA-Xg5EOv_gnd;7izj#BZ?yW<2&NdQf@=>u^cv! znCYJeU%7V3+qJiz>J@tM^ey3>L{W(4uB;HvtoVLF`vCtz5R4Xri_Z*g=pCT!F{aM= z(+MlPK+<$=^#wb3aP;c|LF}~IV-IB*{fn+Xk7YA?#MxsTxewcXfkXRL{6Wi8qF9qg zCjMCaN>$xlq;MmAd3IIc&9muHfm@IgYaP<}QhYCE=blfvR!GA8CZs*f)sKBAYVuWu zG7sF8NBPW~H@3W-dQ%F>PetnPiMd=Bw7k}V7k}00pk+2HHDS>zD1gedyjlPLV3HJL zijzQNMkgFh!`&&ED%}Wn^Z|qV?^&cdeU0 z_=wHDtqWJRxh8-0D@U?k@5ct-77aEx1*JB|t2)5$TcOYLU^dI&L0prpq>bHGLhA7h znF@k!nDp+*bG^62rVbXzk9Vo$iQc~|&KmGj^{XPaOQxtU7*+PLtQ1=C8&4 zc9PU(>gil`xlK5u$NVsT^aMp=r|)-Ld?Y4p(D!({YKPJqc*byTdf`zY=B;drR25FV z#~+oIV=3Jf#+h__UYmIqbip<_Z70!3JGuU*U>FtV4Ordg-bWOlg2^p^v>G#<0>P(N zlpPkHq0+?R53VGVQc@=55tRm&6qO^(oC753_oBKl=%u^Xs?E56Pbyxn#k1)!Z&;^n z64sE{GNCNJR1{2H7G4iIYKYQ6tYUp_Pr=sR8k(R)a;q`&1o-1BtALm>dc4o`P4pWm zh5>`0^bP7*H}9c>`tPs`Hx@rNt?DYQ2s3%NXa+K~>We>61U}}OL7b(I(9uK+UF5?sPS^<;C=CQ4ZF=mIY>y|nlke`TjKTumo)%NmKiQ`J zYEXMY%$~%lo(FU&!bpH$#Q7oChR_5t^nTe+tu5F&H)$F>7<=;%+Rq7jy1;o5#@nX< zBYMM;mZOGgcR0o3(y)NS7*cT@y>u4v!ivMMdPbHWJiO_#wYqQCcZgTp^&gl`I(r&a z%iZ7;4kVq9|5M9{49dwPl((}{ep;}N#~}3Uyo8S`Jh@dSPVagiZZVN=REyshuQABq z&a}5}$f#SeQLvAq>EBM@bMuza&~PtWrxSA`pHL}bx+3;o$VD;p+KY~>AE)8Za(`$u zeoG8K;G6Fx>bU3qmfI5E@DYBMvU&5dA^^Dkn&pC^BK+ZH0X{RAir{pOj>rJs-Iq5ne|WVU=!k5UKkp0q^#w#Jb>>HYnodhK2~`REeG^JS=_u z+FhZe#+Q*;sc%;2%q1~GN70$=K_k%UOpE6Ht>cD22!#5E@nrS#$L`w&iN0Kjp;=Xq zrFBaY{Dz012|7q)ASbqfoTyUFm_oN8Puh5NoDRd!A2u6y(($x_A;vS_L%?fFgGZwx zT>>~|W#xsw;aDZ}2^m$@cb}inIbYr}p~Ttj?+9f}9ZE6YXKQL+$aycc#SN?_T4Ew4 zp^v@w5tDtr5ZcPZ`2IExl9)sW289u@0!!O=$pF)R+(GG?fGa39J~a#%KSpCOL`Qvuk}n- z<-N}t#v9EP*Zz&&EAsB zLzC+$F4+IxF)!GVO>pab9v1W4vm8z4NaYElp|Ek&gNfsMrH5nHI?PuRL-+M}A(dNx z3S&SYHhS2L&EnW-3uT`p;lwXd@$vsyQb&2RT+Si5`62` zV8PW?#n7ssS5kjQJb9e7{Tg~gNwIJB^=BgYF?_N7sK7YOf!&U-o3z9 z(iXeMICyUv507jdYUd3nwSatPXnX80l?-F#Lyi;*d{e4{e6h`RQQsmzp%lDx5WHZT z5>4o(B5e|gRn!v7^?P9DOp$~FRpjSt z&u(35w@`*$27ce)39eZ;^AV6=)eMQ@E$OnGsO;x|F|LC7H)|vT^NJASa|F; z5X|boi=Axucn{@1mA9Aqn$B-<1CW^TLQPG#XKXR8W4-dwc*J%11^|q$QpsGB5~KX!4KcR35SN~&*mL9P?G(&w6ce{!pOZGV3}f(X1KK*yrf zYG_ygC}fP!xF%E%dEN`}k-Xp%$i$S!`;MFhho5;N3;S9}SIiNYSox+u^K*RimJ-g# zK0zrCzLl!g^XN9O-KsJ{9_e6lrK~k{G4EYhSC(_y&D=a;$d@X{!hgEQ{9(nnNW{B7 zyHH4dSAF)nWYKNy`9QeyT_yIQ8%s8yulPw?Gfk{f4QOG8-z?eKTnX8J`BfG#ooIab zy8B4R+K`vzYp0pt0PNY2I-`rogO!HK$xTF8s<6q|?pIv%`UWRS? zBT(e?9*W{gU76a$e2xcC(?I|`J3Adnu;2IIUM@K~%i`#aJVpK@9_qo$bxz+=&$68K zYnP+D^jj|?V4MToFD%JdJ81o?_YRRx+A1vsR~#qtP)7B_4Vv>SQ=iB=^Lpqvy7y&u zL#gI2o1NT3(3 zqNA)&bP=ft!;}Z+lloY^@#I;59PiU`;F$W#bLh1%@nVzwZIR1i7hnLeQ)20WcEP&F zz)G+*Z5(`e?=@|P&xUq7SDmtBDa1cUwWdf0Y9|^ z-q3D@Eslbr_s_)l&OLPHKxGh%35IdBMdgPXLhoSBUr`qO;z`o324iD`Yfo-li{7Ts z%a7ztrSHSBM{TZ2*i@O(=}-vm3CPR}_h(y%lEvUS-u=8s_RW-~tARGf@JBIY4x`Cc zDwBA1S9#a#8ApDaGNszrILE%uS?Vds3_3S-iAdg-47w4xD^;j>k>}%9h<>RbV-f$Yc+IaIMd~e;ZTa!znfBg(Q$MysC+{~cMJw@>aVE;tqZicLm?beEbN<5z7>s+cYcMaH^m~WgG@x1!R ztJ5CG2sAW;@9wqk@vy{?`=V<#G@*#MMg`Jd-de#}im*ma775%d9$W zy1q3DWN@U>bzEve5A$h@T(Q51;UZ5PKQnpzm=2BkbzjYIY(YEeLUrc1_R5Ps2^D2(?-jl8 zH=dYLV$Vp1O-X?6$tp0Iw;_^Kq5pmYjFYW_omHqd43E+ zOAh8!O5-Zbgb7-6)#6#UcJyz?NwQp~^)4ar?r>B9!bkFl{++&}URXgZAdbe@0!Ji8uU&w7KH;Uh zl{6M4VJr;fWNm+H7ZY95`$!=3Dlxc1ChDcY*9JKKuWHJ-$g}I1hq9bopN9Uhcw9!7 z)l(Wb52fLplcaHT(B27J$gl`cwu`cMiR+=;u*hE4x1Om=7{iaTH(aJ&FN?!F*Y7Oi zu^`_c2n4re{M`h4`d}c(rWkFgZdwp^F^qtrbW~8U2KwiZTB&oxS^*7etn_<8YbTtpWpFy>67u-=}u_r$-&txwNaqsh&rdrmJ0p zI&$ok^2xa`p_TFN`fKV>JBUFH8Ib=_e}&fW_H}l$_Qx;C$+it;u2q|M-L|AmOmlN@ zkKgC#=d@g_X#<}pY1n@A)?s>bXWOR_-QPc2R7z75s^rus3k)tL= zB1m2PWQ^3tKw40}LVvEkP}-0F3<+Lp38+K8hO%yaayPE{Ciu9v^JAV$dW1`eEB0B3 zfyd5wXXhDGO@EM!3$)B#5St{x{616bgS)uX^+$n^>HyFTQq!^A_Eet_`}|ip+a~!9 zj*`Q_QZ*jDJgoXv7d%ZmlIx*e$)l?gq#L*awt`d_St@K+C0qdYe4gE6)^1W)6AQfz z_GPB%<6wF+Hc+t}HWUKe{5-P0-LP@F`VKJ&HOD787uJa_0@eEhUNY~@OKyk zIox11ULil6RqXhTzM&+=O};M6nN|I+u`Ah3vO}z*gWe;SL9_PfGQE_FMSCF_-+^sgIIJZf4rSmNuZ zF1?ufE?l-Ba4yTbOEQqlouO7*r*8@>55$b~R*kHDXf9ADip#Mvwigx4jloV2bu)-@ z1K+v%PjXrHua+y)*A?@ud_!At?)1MI$iqvCtcQ`qH;cSq1`%UUzM1qO&3=sQ(bo`9 zcge(n@ynL6hcAKr<-RS&BhY?hnQPcvoD;5sE|;3#l9~`?DD!t3Y1tZIajbkT-Z^fD z2vD_4s*F4*6I>R@jzkOQy&N-K*nCYb;y#De3nIRLblbpM^6}JLQNCLj=}vDeb1Y9w%npS*hGS`RZY+e{GP?xl z)E;vC3yqvfGrd3~$u{^>y%RrOdiK-vNiIERAoT)-atYQ#&CE*--(9;wnem#Y^D4eB z{2QnFPO;EGIb7*ICW1h^2*(JjIXcrdgif@?IX%<7d z16m#``)>Mep>CePRKLlGU3mbr?$iKF=r%K*dwb-*A0rKhk!n3gnjv&wpD9#EqX^d( z6>)y}cM=OOA9h)VCurNI878A%EVs9mc07#^TCtd85^{BspR*|o7iIOcdfwa}37%-T zsRoIE`Di$EG#v9XFPrww9D)%}34=kY#M=!+%6*;0lyBi%DlU#Ecp?nzQmQV{J`+K*6{YD zmH0u);^?h_f3lZ zl;0@y;ZQc;T8Oegb@Q~@2+V};FXM*ihFjqZo>tTLGWq%Vw5-yPjgq%NzW+d_=u~&r zb$M)g3~OZ5Md|7VYnf_Ufuy$tEW2z=y-}PR$OJrx; z8zp+VpA5X?1@Xs|vs@HxcykhtU>w69j*jPHgKqNLh82`>g+6tN(+C|WMY9~;`B}43 zl~vk;E#Tp9?skG)r3NGAY>@+Z2s}=QaL34Ctv|~fSddk+E=v8MquQLnA$qn12A?IRIp1ha|nw>BOrC@$d)N*KZza29jvtkR_%a%LDEj|kH; z|1DKxzC=c>IEumsP@4k#%FkRc%;taFPSw`(`^DaK|7&-X$tx`<1zm~KZxfste_kfS zFyVe4cY0e*EA$hzVI;wFao&Vuj#v}T`x_o1Z&+dIMWJvgALdY|T1$xoluanB!=GO|0 zzZXy@?_Mp2ce2FUc=HK`Df0y~O|>-|&wLQtt`f>_Z+;ZA zb(QBoXezRuc(;u3tBp&L;m6Dwd6Q-?*R+-oWqo*^%WgpD3&iKk^BBD3`Sj>p*?IVE ztn@~JR{o(36p7CJrH4Gjj}^5|A8{KHp<|my?nGUq0?7)2b-!8YDaUa&pxG4Qx`CIL zKgtf@A1B6ZdEl^T0mKt1%#nETMGm)u-ek$`Tx1(3=(fIk80~yXG0J&DQ8I)>6j}w0 zmucw9A}l0?GraopJN%ItV`pG*#?QFPv_0}3ZE)a1Fs z*t2`)8*2&2R+VjSrhq*#v6-;GAr-bGyj=jnJo*X!i8c_P2nfGE3B}@N*E$>3pnl<1 z_M709OuyqyqTzI{+*EBXzHb)&Z5E3Hxb8*+BylDk7%`KltGEs{(Vr~~M>KxJmN(5S zGYbE*Sc2~Hw{)0yW!LcV{pC?yzL?|lQE3r1=4_{xv_WnWC9(MNWO0;9zzFLg-LVb; zY$ZZoRJCWg9&!+cWbc?)pHCrw0|@a}o1wct`NVM}-=$Qm&5={$mw4cLx{nZ{pLo>T zmYB3D?*J(FX%&$6Y?gKW&mWP==qM9N1l^@0xZ}~JNS}gUyr1Xy*l4pZzX0V!D8fU? z^R`pbb`jUDqS28Rbj;>r8+erI6n+@rK;&)M`n-DBrb!&Gg8GsC@lhx)Z`k$(Fm)4d z8u_7?EzY(Cyk(AaijJNhnJp0UwS#hB*n|c9#}e7jWpSAtn?M?(RUXZbqeb|Nr@p|^ z4uvc+3V?F|V74^W8-F%6U43T85&pZFp`HxtV~|$;!LnsG=<-dN+8_GHih;k?#k^ClqgI zTWzLd35}immE)_prGTabZK8q!vSZi;`g&Hj*8ki**TY94oDauDT(*)NKgTc80m`6f zl~Ddxj~x#Gj{r<|C&V_IfI9ZapRE!ttS)kd+gx|gVs_^aw2uhrs$Z(ahs9l17C(@L zZDMI9aZUIrUkqSGd~+ecimmU&~fb) zbZtB&K3_39XmicRVe4d54ka@2hJb#oCcaPbd_n>VlPOo9(?#oT$)9tFZNLRa*yqP* zDq(_Cp<66xMd-Pr_48>hNRNC75h{IwjiX04oXP$pR{a{4tp@DMS?#7O5`1*O5>UxO z=oZ6=5j~Id*LE}YVYr%#J(UbL^Ru4;u*#(X*rqDL2SVtMgO&n1&c^fnTKo*>eUdu& zg^9%k7@Lf5d5zXhB)+Cb-)IZwzXu~YG|a!I4Baux4FZ874WX^PyPamlEe?D#;ZUB? zUvXwcj9c_1uNwg%@%f&cn|?`7v#@PN-~w?w{$$gS`28w@FwOq(ERjIk_BOOyZTPL< zng14G=V;sSEffK2*-nDiqKGR=P3PHwG8FLKNUz%p4!ckjB(c`eX@Pi32f`Ew<9CyY zUYnGF1R|dU9nR$J+(J-eY0eKo?NELe5Z=ET?c{N!WjZwkEpJB=BP(18C7qZ}d-s!6 z`JYJyx};4kSpIYSuE|z-VeVi!PNK8^2tHZ8c=Wy+ryRzZ!vkA94;`Iv-&w5PK_JBd zEC3=)1rcFkO2iExk%?C05#S@gM$L1g&r4$Ps(iV>J*a>hSqs<;aA^uR0L_jq5VQ#x zi6d2i2_v8GY;8-qkW2p&&ZAP5txM+CSi?Ffuz~DlfRI;KTP3u0J+#%HGOKgnuhZD_ zTCc1`KXC$}dt4h{T#G-0oy}PhLAwpWW3wxmTYy1hV@!$baK@%Yz(O%He1+xgSOQv( z4n>FTe)^(<>-%MI)$VUW2q2<8@N}6($b`ivr2w(U5{LAa?vWFolD15djd0h>8*6um zD@K#bj1r(;3$vARsJs?_u_3PyA%Q~xuv)8Ht66Nw{h6(1 zmUj0U&F>y8MzoMJtNR4cvwTXTnSn&}z}b{zMFk-v1HXhfwLAu^;+>*<#Q9vT>kO@X%QT zVS-V8DU28;cXFbK50LNF78b`_Soj3f!r_d&FwB8&TfhX_?f;DH;&4OV`)$(m=?~&B z0)!fYoU7%WtR6~2D>yDpjjeN+@-3SLdB;;!p)PE5c zvU|518I79;cNPm6)nu6wJo8RH!w+-ER!1&W5kGz4iSn!>)`CKhky8?e;YP@_D6umZ z;?%7$M~kS=)BHQL%HxRR1kc|!Yr~*(EdJ~ac&=$%GQy%TKclP>S z6?}|_5<3Y!fD^hl+;01EK037jG%|LyGb5jajByUefcM_|Fvf#*&? ze+mPFqh1Bz*LcG0R*}CYpp8m^AWsFr{ua{ZBCB?;&L*mnj)dBN6Hk5f439MXj1I%O zHgsad4zag^_5YDPNsClGI|)VIk(B(kvWj2Owmnb3V=$~KY!o1xPGP-S7eXkRaL$(v zF$5eN0oKg>8)uxYaBZD_J4R;^sAO&ElttTlNH~7I23b#Z`q5CCdbaRET?_qvd>5mR zv@Dk=tjHVU+x$$M-LkR*dBnfkK|_|MaQu-OoQ?y8oQx zj|M3KI`_cyCWx)Nkf&w`D%JGDn`gY$dgD1e2A+PUkbCec>gmPQOO94c;D>=9YL=L` zcY3C~`Yn|d`BCg4=( ze%yIIDD4i>q;jnhhI?yhHj?(z1`M>S(}J)ze2b+OCGzbK@t~GWyEoB?zY(Lr}Eq0&E(}{)PF_#3kiW$;mz;1%uUk8~Q z+K|Hh#g!}5dxW~FWIgjE2qd#=H8{qYquP>+VG5Pv>d_=s*mZKhf15~IFQAiD=&Ex{hVQX&QpZC>Djx4 z;7n<&9V1kO$v|mZDD36b9%JGrkXEcAR!ojaUXO!Th_O#Jb0PX&xL>~TC zlWx*wZ6XMSzM8|zpkEoBA0#zfTflv_*J^9hddw`uU4xr1!2h-2%GiwIWky+c0|h?6 z-I;1aqh$ea9|L@%oG?muC$J5n*(mgc`21}2eNMq#bxDG3Nt%b-a%PV=##f}~MA#9g zI65tUEYJMNFHK*&kuP=4prS%#0&FB8a!UuR1#SO)?lKE_!39h^+vJ^+y{>~3kVVZl zs<$JtmHUdGjkd1S0!`f=?9K+Or&%{jS5P6gnP-Q7E?(lljgGR}k0D#>OXh3R$y@RRu(|~~15ZVAC7;0Td1q05SN9LhMb$YQm2T~K|CHK$L zo8kG7_iZ$G#<2poSzhHXXgxg@Eg78?MQ3?qoBc-KcyzKY+zFgvaC!I{!%;Jdif~RU z(X7D})Ib)_MjL%f@l{4!EDKtvjtFNMFEk+0U>MZUX#^4u;Fnwo{I6SZAz&|=!0z=R zvkKV=YFRc%ZTsN1F%jnkR;OmvHhaD+sp0S?aB0ng-Y;nJ6iV}>>57r2(&t#WK?YC^ zwXCIj$*+|}C}6;4!E^(&-IP@CIncJ(3T_y9-3Ftotp{H<`3Vexhz_#_ICze4^HpN^ zKZVdbKmf||j0w4+A(d$}Z|7YgU-fmKEed(hQBfiYwUT22DCr&Ev|; zE7S}Q3vw9RS0PM)-}9hoNTlO5s5Lv5`Cn57PiuC|rXw(HeN>1&_+N8|LiGQb76J+Z z2ik-W5)y#R5r3-;$s(=Z6~ejnMiw{|&2qdKXtlHMfw=bfQvsp)AkWYLp zd)L1%{BN4o{=ZMa@A-%K);HEJ6ib5gpNF-wND>m9tQeQWjpUj=rKbJYsFK{;^}ig! zOnT>^*8G<*S^slXcKzQXEL6JwZ#hvZ{#%s)=WjH~SQ;H4?ylhXr2Xd!I@{RIjLQsw zVVG!#2C5n|-RG``>P+h!YvOkMvvhxlQIJff5Ay0WRNLtFn-bww7U38OQXK)g8eHvJC zrwQfuDIdXN^EbRhEjFD)n*NrT=7SyES`dHfRhPTY<4cR@n~HwG^fM%@exG`-Ffvim z#He4aLw>cm8aT=G!StZ^ZF31}O2f?zD zqf*t??Ur6(Q?d2=IfPtsWUM;bOjnB6Q4-RqJ;25qQ)*9ZtAU|gA3}_(?wNO=o0?< zC%tOh!*<9L=J2Mvt*(f(x1tsZ0+n7W-0sv{O?K4Pz|5dhbNs$$;!t)zAjEsjW;%Rl zaMWkBwZ%EnRjN4g*a@plW4cofK3oWQs~XwApB6qU1DylKb!1F`f2O-5pFamr$X?;G zf>-xZy5!qc({AgIZ+@w%$+UIJ87h^L>i$vQ@ECm+B!KzJDt|qz9v}nEW#8287{T0x z{+`(7XvZ~eHFP6(dzc+%jlwTtNi~z|#akC1314YPUm~co{#AJGSG6I@09){#bNXX# znqzjORU86m#V@onzxkyD2`{v$9dUA$_}S;tqCNgSwgjK)mZ^)W0N?makk-k9rzCsd zKVIeW}ZI*aG;x>RlQY-X40N(hmvZ-t&G&Gllr(o(dZXi9&SLb5#sPNhE&= z)fxou8g5+mY^{oru1Ty2XaxTrc(AYkf+j>Gdt+O{I8%3n=i;?ZAXZJm`^18pwKZ9| zQBpQArRV!Mow3ZLM!KlE4ns|0+Ckznxk*OxlC0RBP?uB}jwd*QT?5ExIN+%DDxIg_%9p8Qo-=+ zZ+XKR9tj`YowW)$stkJQ`MkZ1nX29-Y}4^!ZN6Q-5fh$M5YFC|93=YXSo_!&Pk3W8 zt8*+XSu!S+JE_O}!Z;(WL%tGLQc7WPcwWa>^oDKj=@*PO@^0t^Ia-j`KhXM!dTbhqeN#9GMG=TID@vIedF>i+_^!iaqr}HR*J(v-50+uKuysDjZ1Ov^#A+ zayeOv{BlO^x@eawF_BSK&hdCP{f~7MWq@m4iC&Mx!bx}Gb4*r~s_g_eh8$EMv^y~X z+|>PjX@Y=cGrDIp*WLP#FSjhm@<9AA$&(o0Q-4a5_j55<_jRMTDWmS|(o8p*pQR@z zo&@S4E47MBsW0rcD_;N`g%kyquw$j#{K#d?=;(6Ae8d^K&)a6rxQ=CeTg`ZiB)_uo z$bGB(R>M1%30LpG2(%bBbg|c=Tp5Wh`vt$z&=Vq8}vqs$slYuhqTGO}t zf(cM2gCDQC_S_Ww5OXG>Tzedgds62!%d&>}!>Vj@J`dvHqanCnJ=BkDQk0 zvJ%?~LugA6pEeQ?GBt71+rWX^XLpkY$T^%1yB;RxMC1VLupS$|<~MtB1<63Z;SASS z3A3@GWy|dnOBs2OsVuSbC8iRfTE1j*+nW%f6nW>lUxzOb3xYxN6K->bgNVN8QpJH! zzSOL!RJ#?pyCHBRrIUw&rSOpXNt@U4dR`TPW~12VnGb(UIo{EkGGe@M3R+{r<@jLz zPBi;&78PbTvL!Ng!lpG>=gRU!V)!#MqiO#0Krn@_iG?Jq|66(3P0b+L8|o!CDv;wt zjBOOlQ%lRr7lO4QxY-mNi=qGar*GImxL`zT?O;_*fdKn%Q24JBR#WlmtS_`>+}Rg| zc!qV`k7k&~#K8kljRUmgSLzHY#F+G^u6bBANwcBLss7$vDF{B_I?obzM-UZh%3nRl zCPX!7a-tKfWiLd7roKgvcBn+K>foe3xnRX7FC|_`>{}|$x-XSuQUdR99xrO}(R=Dn z^lc6VYie>;W&hfvELQf)OvP$FCZtk`5hhvKPYN7pMoLHGhkqmHL@rH*^XTz#9q@t1 zeJkAa2eGo@)!1KdD?lc{OPzVIi17%&dUwb5qx4!fzN@Lyz{3<}yfN7bay8V5 z^}-XB24stO!Kpd3-6zz8Vih5tGn3Asb3YZM+3#O@A+s#Qd<2Iirbn2{W(}4dc`0*; z-yU#tcQ?X?kYXmyu6)d#{A}gQ6h8a6TP-+{LQ7Jr%{z7U%B$kO$8lfDrZq4bA-}M4 z=%7LQrtywu!LP+FcNfGXHrq}i%$)L3+vz~Kms%-e*8rXv5qgNyl#X=)DhXrD+noYe zPs`{g8OdjAOJ5#igBn$MfAz$L9L_mlsUI3Y)Xdjb+N?kLER{+oHYwC}zQq{sa(4P7 ztbb>tbv;dz7u12MS%_Z9e=iVZIRs??^-9tSAvOy2d9h;GBc0w%HXE*)r(L$u6#@1y z3691vd9~eXYp>mB!HHZgp1&}KcZTp~i(h4LA3j}E6+1|jusRQ2 zTxLHhe=NKxKf&tmb_vHSV>a1Nh+Ovnd(l#NlHoxj37oX%ukzCA3UH_!-`!`Hd2IA( zzj7>XidzEJZ$5+;km>Sd2JtAXGOgA!92Z!uzY7~4vdk7RHtpP4OE}@U=2~IE%KU2i z=o5wEJBA~2hTxLxPc$D85Lq!h9E@%SY%i)?g$rZaRi_SrxJ1*cC#!NJa%NFL_8&h| zCoE)rN<$dRsa*noKAP~!ZZU5fb!f->E~#Fbm>8H?BZD03G!R#cU{@>F(}nLKf=
      C#ckp>+!RK3bs|8=`W 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

      xnHX7GbFyY~z!bVdrlUiLWQ!`)wbe zEv>%RYcP>$Ei9wlssUUCm&ZQSaF^pC|1IH;sW80)}!qU{law4j29qB>juhaGkHK$}#&v||d3do{9;rN9aG zAbKaX@EM|D2*l~RtEX#*Gx6RB0F%k3#b_p*+8D|OZD2@Yu(B)uLO4rgUPV2pR_b@? zu+|K{w51LyZr-#n+{22_jrd~uX%l}W#Yrk*`Dn)Gql<#I5ojprN1)zFFJL7{-|h`q z=~V>&^Prz4*ZUl56!23y)L7i5qUa~Q`^0e1a$`t3HGRg?S}~%BJ(HnmChEu)XuM== z56eYMF>BP9;+&WR&oq-m11kzSy|Slc>?Lh>ue%UjTt?$cC3md{juCM;Gdf=$j}FWq zfl)jY{mstJ-`FApIf) z@4mAF!9>hVa)OR$wy6lSR3O+6qTm-r9=≫VxOo)i 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 Ld_(;@=<5Fg`IoEo diff --git a/public/uploads/Screenshot 2023-07-14 160403_1.png b/public/uploads/Screenshot 2023-07-14 160403_1.png deleted file mode 100644 index f68280688c7f4d05a93dfddf805486e6ec52f27f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261749 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%0DP?6~)qzHh?! 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 Ld_(;@=<5Fg`IoEo diff --git a/public/uploads/Screenshot 2023-07-20 120901.png b/public/uploads/Screenshot 2023-07-20 120901.png deleted file mode 100644 index c07a9646e698c1f5aa588fe9455d23fbe3a5ee05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374321 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 From 1631f719d1df7a8a46ad2eb95cbd427e5968514b Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Sat, 23 Sep 2023 18:44:41 +0530 Subject: [PATCH 09/17] git ignore : ps --- .gitignore | 2 +- public/uploads/index.html | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 public/uploads/index.html diff --git a/.gitignore b/.gitignore index 20d1c153..bdae25d5 100755 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,7 @@ writable/**/*.sqlite php_errors.log public/uploads/* -# !public/uploads/index.html +!public/uploads/index.html #------------------------- # Composer diff --git a/public/uploads/index.html b/public/uploads/index.html new file mode 100755 index 00000000..b702fbc3 --- /dev/null +++ b/public/uploads/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> +<head> + <title>403 Forbidden</title> +</head> +<body> + +<p>Directory access is forbidden.</p> + +</body> +</html> From b170e1adf66923d6679a1ad0764ec9d02f927ece Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Mon, 25 Sep 2023 13:09:25 +0530 Subject: [PATCH 10/17] sanjeev --- app/Controllers/BaseController.php | 4 +- app/Views/auth_confirm_mail.php | 8 +- app/Views/auth_lock_screen.php | 8 +- app/Views/auth_login.php | 8 +- app/Views/auth_logout.php | 8 +- app/Views/auth_reset_password.php | 2 +- app/Views/template/footer.php | 6 +- app/Views/template/header.php | 17 +-- app/Views/template/topbar.php | 44 +++---- .../company/JerryCharlesMiculekPublishing.ico | Bin 58374 -> 0 bytes .../company/JerryCharlesMiculekPublishing.png | Bin 4955 -> 0 bytes .../images/company/LuminaDatamatics.ico | Bin 150014 -> 0 bytes .../images/company/LuminaDatamatics.png | Bin 5484 -> 0 bytes .../assets/images/company/RenaMadhuBalan.ico | Bin 20519 -> 0 bytes .../assets/images/company/RenaMadhuBalan.png | Bin 50594 -> 0 bytes .../company/VijayabharathamPublishing.ico | Bin 58546 -> 0 bytes .../company/VijayabharathamPublishing.png | Bin 7954 -> 0 bytes public/assets/images/company/default.ico | Bin 207494 -> 0 bytes public/assets/images/company/default.png | Bin 22351 -> 0 bytes public/assets/images/file-icons/3ds.svg | 106 ++++++++-------- public/assets/images/file-icons/aac.svg | 108 ++++++++--------- public/assets/images/file-icons/ai.svg | 96 +++++++-------- public/assets/images/file-icons/avi.svg | 100 +++++++-------- public/assets/images/file-icons/bmp.svg | 112 ++++++++--------- public/assets/images/file-icons/cad.svg | 106 ++++++++-------- public/assets/images/file-icons/cdr.svg | 106 ++++++++-------- public/assets/images/file-icons/css.svg | 112 ++++++++--------- public/assets/images/file-icons/dat.svg | 100 +++++++-------- public/assets/images/file-icons/dll.svg | 98 +++++++-------- public/assets/images/file-icons/dmg.svg | 108 ++++++++--------- public/assets/images/file-icons/doc.svg | 108 ++++++++--------- public/assets/images/file-icons/eps.svg | 108 ++++++++--------- public/assets/images/file-icons/fla.svg | 102 ++++++++-------- public/assets/images/file-icons/flv.svg | 102 ++++++++-------- public/assets/images/file-icons/gif.svg | 106 ++++++++-------- public/assets/images/file-icons/html.svg | 108 ++++++++--------- public/assets/images/file-icons/indd.svg | 104 ++++++++-------- public/assets/images/file-icons/iso.svg | 106 ++++++++-------- public/assets/images/file-icons/jpg.svg | 110 ++++++++--------- public/assets/images/file-icons/js.svg | 100 +++++++-------- public/assets/images/file-icons/midi.svg | 106 ++++++++-------- public/assets/images/file-icons/mov.svg | 108 ++++++++--------- public/assets/images/file-icons/mp3.svg | 114 +++++++++--------- public/assets/images/file-icons/mpg.svg | 112 ++++++++--------- public/assets/images/file-icons/pdf.svg | 102 ++++++++-------- public/assets/images/file-icons/php.svg | 108 ++++++++--------- public/assets/images/file-icons/png.svg | 112 ++++++++--------- public/assets/images/file-icons/ppt.svg | 102 ++++++++-------- public/assets/images/file-icons/ps.svg | 102 ++++++++-------- public/assets/images/file-icons/psd.svg | 106 ++++++++-------- public/assets/images/file-icons/raw.svg | 106 ++++++++-------- public/assets/images/file-icons/sql.svg | 110 ++++++++--------- public/assets/images/file-icons/svg.svg | 110 ++++++++--------- public/assets/images/file-icons/tif.svg | 100 +++++++-------- public/assets/images/file-icons/txt.svg | 102 ++++++++-------- public/assets/images/file-icons/wmv.svg | 108 ++++++++--------- public/assets/images/file-icons/xls.svg | 106 ++++++++-------- public/assets/images/file-icons/xml.svg | 106 ++++++++-------- public/assets/images/file-icons/zip.svg | 102 ++++++++-------- public/assets/images/logo-ci.png | Bin 7870 -> 0 bytes 60 files changed, 2159 insertions(+), 2174 deletions(-) delete mode 100644 public/assets/images/company/JerryCharlesMiculekPublishing.ico delete mode 100644 public/assets/images/company/JerryCharlesMiculekPublishing.png delete mode 100644 public/assets/images/company/LuminaDatamatics.ico delete mode 100644 public/assets/images/company/LuminaDatamatics.png delete mode 100755 public/assets/images/company/RenaMadhuBalan.ico delete mode 100755 public/assets/images/company/RenaMadhuBalan.png delete mode 100644 public/assets/images/company/VijayabharathamPublishing.ico delete mode 100644 public/assets/images/company/VijayabharathamPublishing.png delete mode 100644 public/assets/images/company/default.ico delete mode 100644 public/assets/images/company/default.png delete mode 100644 public/assets/images/logo-ci.png diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index 812be8b8..f9eba771 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -74,8 +74,8 @@ abstract class BaseController extends Controller $data['loggedin_person'] = $session_uname; $data['loggedin_person_id'] = $session_uid; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = $details[0]['favicon']; - $data['profile_picture'] = $details[0]['profile_picture']; + $data['favicon'] = file_exists(base_url()."public/uploads/".$details[0]['favicon']) ? base_url()."public/uploads/".$details[0]['favicon'] : base_url()."public/uploads/default.ico"; + $data['profile_picture'] = file_exists(base_url()."public/uploads/".$details[0]['profile_picture']) ? base_url()."public/uploads/".$details[0]['profile_picture'] : base_url()."public/assets/images/users/avatar-9.jpg"; $data['browser_title'] = $data['company_name'] . ' | ' . $data['company_short_name'] . ' ' . $data['page_name']; $data['heading'] = $data['page_name'] == "Dashboard" ? 'Welcome to ' . $data['company_name'] : ""; echo view('template/header.php', $data); diff --git a/app/Views/auth_confirm_mail.php b/app/Views/auth_confirm_mail.php index af6a618c..e36eade1 100644 --- a/app/Views/auth_confirm_mail.php +++ b/app/Views/auth_confirm_mail.php @@ -9,7 +9,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/assets/images/company/default.ico" ?>"> + <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap.min.css" ?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> @@ -37,16 +37,14 @@ <div class="auth-logo"> <a href="javascript:void(0);" class="logo logo-dark text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> <a href="javascript:void(0);" class="logo logo-light text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> </div> </div> diff --git a/app/Views/auth_lock_screen.php b/app/Views/auth_lock_screen.php index 04c39814..2302b587 100644 --- a/app/Views/auth_lock_screen.php +++ b/app/Views/auth_lock_screen.php @@ -8,7 +8,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/assets/images/company/default.ico" ?>"> + <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap.min.css" ?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> <link href="<?= base_url() . "public/assets/css/app.min.css" ?>" rel="stylesheet" type="text/css" id="app-default-stylesheet" /> @@ -35,16 +35,14 @@ <div class="auth-logo"> <a href="javascript:void(0);" class="logo logo-dark text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> <a href="javascript:void(0);" class="logo logo-light text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> </div> </div> diff --git a/app/Views/auth_login.php b/app/Views/auth_login.php index 27d3dbc5..9a45727e 100755 --- a/app/Views/auth_login.php +++ b/app/Views/auth_login.php @@ -9,7 +9,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/assets/images/company/default.ico" ?>"> + <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap.min.css" ?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> @@ -36,16 +36,14 @@ <div class="auth-logo"> <a href="javascript: void(0);" class="logo logo-dark text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="80"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="80"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> <a href="javascript: void(0);" class="logo logo-light text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="80"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="80"> </span> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> </div> <p class="text-muted mb-4 mt-3">Enter your email address and password to access admin panel.</p> diff --git a/app/Views/auth_logout.php b/app/Views/auth_logout.php index 0b3c1d0a..2b709b8a 100755 --- a/app/Views/auth_logout.php +++ b/app/Views/auth_logout.php @@ -8,7 +8,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/assets/images/company/default.ico" ?>"> + <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap.min.css"?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> @@ -36,16 +36,14 @@ <div class="auth-logo"> <a href="javascript:void(0);" class="logo logo-dark text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span><br/> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> <a href="javascript:void(0);" class="logo logo-light text-center"> <span class="logo-lg"> - <img src="<?= base_url() . "public/assets/images/company/default.png" ?>" alt="" height="55"> + <img src="<?= base_url() . "public/uploads/default.png" ?>" alt="" height="55"> </span><br/> - <p class="text-muted"><span>BigBambooBookPublish</p> </a> </div> </div> diff --git a/app/Views/auth_reset_password.php b/app/Views/auth_reset_password.php index ced9118b..6a518ed2 100644 --- a/app/Views/auth_reset_password.php +++ b/app/Views/auth_reset_password.php @@ -9,7 +9,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/assets/images/company/default.ico" ?>"> + <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap-creative.min.css" ?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> <link href="<?= base_url() . "public/assets/css/app-creative.min.css" ?>" rel="stylesheet" type="text/css" id="app-default-stylesheet" /> diff --git a/app/Views/template/footer.php b/app/Views/template/footer.php index 57229530..d6aa8617 100644 --- a/app/Views/template/footer.php +++ b/app/Views/template/footer.php @@ -9,8 +9,10 @@ <div class="container-fluid"> <div class="row"> <div class="col-md-6"> - <p> <?= date('Y') ?> &copy; <?= $company_name; ?>.</p> - <!-- <p> <?= date('Y') ?> &copy; <?= $company_name; ?>. Page rendered in {elapsed_time} seconds</p> --> + <img src="<?= $favicon; ?>" alt="company fav icon for footer" width="25" height="25"> + <script>document.write(new Date().getFullYear())</script> &copy; <?= $company_name; ?> + <!-- <p> <?= date('Y') ?> &copy; <?= $company_name; ?>.</p> + <p> <?= date('Y') ?> &copy; <?= $company_name; ?>. Page rendered in {elapsed_time} seconds</p> --> </div> <div class="col-md-6"> <div class="text-md-right footer-links d-none d-sm-block"> diff --git a/app/Views/template/header.php b/app/Views/template/header.php index 71c83159..61ad4076 100644 --- a/app/Views/template/header.php +++ b/app/Views/template/header.php @@ -8,7 +8,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url()."public/assets/images/company/".$favicon ?>" > + <link rel="shortcut icon" href="<?= $favicon; ?>"> <!-- plugin css --> <link href="<?= base_url()."public/assets/libs/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css" ?>" rel="stylesheet" type="text/css" /> @@ -45,25 +45,21 @@ <div class="logo-box"> <a href="dashboard" class="logo logo-dark text-center"> <span class="logo-sm"> - <p style="color:#FFFFFF"><?= $company_short_name; ?></p> - <!--<img src="./assets/images/logo-sm-vbp-dark.png" alt="BB-VbP" height="24">--> + <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> <!-- <span class="logo-lg-text-light">Minton</span> --> </span> <span class="logo-lg"> - <p style="color:#FFFFFF"><?= $company_name; ?></p> - <!--<img src="./assets/images/logo-vbp-dark.png" alt="BB-VijayabharathamPublishing" height="20">--> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> <!-- <span class="logo-lg-text-light">M</span> --> </span> </a> <a href="dashboard" class="logo logo-light text-center"> <span class="logo-sm"> - <p style="color:#FFFFFF"><?= $company_short_name; ?></p> - <!--<img src="./assets/images/logo-vbp-sm.png" alt="BB-VbP" height="24">--> + <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> </span> <span class="logo-lg"> - <p style="color:#FFFFFF"><?= $company_name; ?></p> - <!--<img src="./assets/images/logo-vbp-light.png" alt="BB-VijayabharathamPublishing" height="20">--> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> </span> </a> </div> @@ -72,8 +68,7 @@ <!-- User box --> <div class="user-box text-center"> - <img src="<?= base_url()."public/assets/images/users/".$profile_picture; ?>" alt="user-img" title="Mat Helme" - class="rounded-circle avatar-md"> + <img src="<?= $profile_picture ?>" alt="user-img" title="Mat Helme" class="rounded-circle avatar-md"> <div class="dropdown"> <a href="javascript: void(0);" class="text-reset dropdown-toggle h5 mt-2 mb-1 d-block" data-toggle="dropdown"><?= $loggedin_person; ?></a> diff --git a/app/Views/template/topbar.php b/app/Views/template/topbar.php index 7a5ad2c8..1db176d2 100644 --- a/app/Views/template/topbar.php +++ b/app/Views/template/topbar.php @@ -221,7 +221,7 @@ <li class="dropdown notification-list topbar-dropdown"> <a class="nav-link dropdown-toggle nav-user mr-0 waves-effect waves-light" data-toggle="dropdown" href="#" role="button" aria-haspopup="false" aria-expanded="false"> - <img src="<?= base_url()."public/assets/images/users/".$profile_picture; ?>" alt="user-image" class="rounded-circle"> + <img src="<?= $profile_picture; ?>" alt="user-image" class="rounded-circle"> <span class="pro-user-name ml-1"><?= $loggedin_person; ?><i class="mdi mdi-chevron-down"></i> </span> </a> @@ -270,30 +270,26 @@ <!-- LOGO --> <div class="logo-box"> - <a href="dashboard" class="logo logo-dark text-center"> - <span class="logo-sm"> - <p style="color:#FFFFFF"><?= $company_short_name; ?></p> - <!--<img src="./assets/images/logo-vbp-sm-dark.png" alt="BB-VBP" height="24"> - <span class="logo-lg-text-light">Minton</span> --> - </span> - <span class="logo-lg"> - <p style="color:#FFFFFF"><?= $company_name; ?></p> - <!-- <img src="./assets/images/logo-vbp-dark.png" alt="BB-VijayabharathamPublishing" height="20"> - <span class="logo-lg-text-light">M</span> --> - </span> - </a> + <a href="dashboard" class="logo logo-dark text-center"> + <span class="logo-sm"> + <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + <!-- <span class="logo-lg-text-light">Minton</span> --> + </span> + <span class="logo-lg"> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> + <!-- <span class="logo-lg-text-light">M</span> --> + </span> + </a> - <a href="dashboard" class="logo logo-light text-center"> - <span class="logo-sm"> - <p style="color:#FFFFFF"><?= $company_short_name; ?></p> - <!--<img src="./assets/images/logo-vbp-sm.png" alt="BB-VBP" height="24">--> - </span> - <span class="logo-lg"> - <p style="color:#FFFFFF"><?= $company_name; ?></p> - <!--<img src="./assets/images/logo--vbp-light.png" alt="BB-VijayabharathamPublishing" height="20">--> - </span> - </a> - </div> + <a href="dashboard" class="logo logo-light text-center"> + <span class="logo-sm"> + <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + </span> + <span class="logo-lg"> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> + </span> + </a> + </div> <ul class="list-unstyled topnav-menu topnav-menu-left m-0"> <li> diff --git a/public/assets/images/company/JerryCharlesMiculekPublishing.ico b/public/assets/images/company/JerryCharlesMiculekPublishing.ico deleted file mode 100644 index cdd99e1a6af08d87726782cb784287e7d78823b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58374 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 diff --git a/public/assets/images/company/JerryCharlesMiculekPublishing.png b/public/assets/images/company/JerryCharlesMiculekPublishing.png deleted file mode 100644 index 599470926647fbbfe98d70c70e425c1519b24ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4955 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 Z{ReqPljZner#1ip002ovPDHLkV1iCawMhT~ diff --git a/public/assets/images/company/LuminaDatamatics.ico b/public/assets/images/company/LuminaDatamatics.ico deleted file mode 100644 index cfdcc29377a9017ece51cfe7dcea7d341ebb4c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150014 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 diff --git a/public/assets/images/company/LuminaDatamatics.png b/public/assets/images/company/LuminaDatamatics.png deleted file mode 100644 index 7b8f17bc9a176e7662aebb69e1152dcd0b0070a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5484 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 diff --git a/public/assets/images/company/RenaMadhuBalan.ico b/public/assets/images/company/RenaMadhuBalan.ico deleted file mode 100755 index 9eb9818b5eb4ff5fe8d31eeabbf4975c3b3c77ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20519 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 CTO<Ym diff --git a/public/assets/images/company/RenaMadhuBalan.png b/public/assets/images/company/RenaMadhuBalan.png deleted file mode 100755 index 447954ac34828250093b179d1b87ec0a0cc827bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50594 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 diff --git a/public/assets/images/company/VijayabharathamPublishing.ico b/public/assets/images/company/VijayabharathamPublishing.ico deleted file mode 100644 index 894eafffac7cdcc14e197c59847661fb49809f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58546 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%0DhoELp- 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 diff --git a/public/assets/images/company/VijayabharathamPublishing.png b/public/assets/images/company/VijayabharathamPublishing.png deleted file mode 100644 index dd0dd3b369c8e4509be3094e49973ec6150f5dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7954 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 IM6N<$f@}d_H~;_u diff --git a/public/assets/images/company/default.ico b/public/assets/images/company/default.ico deleted file mode 100644 index 932f21188cd9bd51f14b558920b4ce42c6645407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207494 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 R$PKMAR|m!?`0IPm{{zT6g1-O& diff --git a/public/assets/images/company/default.png b/public/assets/images/company/default.png deleted file mode 100644 index 4b659d03702465a1ea636ca84ac726571aa6cbc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22351 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 ZLat|Cb*eNLk7<;PrKY5%SSN24{y(Jr2vq<8 diff --git a/public/assets/images/file-icons/3ds.svg b/public/assets/images/file-icons/3ds.svg index 9e01fb73..72440599 100644 --- a/public/assets/images/file-icons/3ds.svg +++ b/public/assets/images/file-icons/3ds.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M133.872,311.472H112c-10.752,0-10.112-16,0-16h39.136c7.808,0,11.392,8.976,5.632,14.72 - l-21.232,19.84c15.616-1.152,27.888,10.464,27.888,24.816c0,15.728-11.12,29.152-34.528,29.152c-10.24,0-20.336-4.224-26.24-13.424 - c-6.144-9.072,7.024-17.792,13.936-8.832c3.344,4.336,8.72,6.528,14.464,6.528c7.792,0,15.472-3.344,15.472-13.44 - c0-13.312-16.24-11.248-25.056-10.368c-10.752,2.064-13.952-9.6-7.68-14.432L133.872,311.472z"/> - <path style="fill:#FFFFFF;" d="M190.032,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H190.032z M198.096,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H198.096z"/> - <path style="fill:#FFFFFF;" d="M277.872,314.672c2.944-24.832,40.416-29.296,58.08-15.728c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 - c-4.24-3.456-4.096-9.072-1.792-12.544c3.328-3.312,7.024-4.464,11.392-0.88c10.48,7.152,37.488,12.528,39.392-5.648 - C327.12,339.632,273.904,351.008,277.872,314.672z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M133.872,311.472H112c-10.752,0-10.112-16,0-16h39.136c7.808,0,11.392,8.976,5.632,14.72 + l-21.232,19.84c15.616-1.152,27.888,10.464,27.888,24.816c0,15.728-11.12,29.152-34.528,29.152c-10.24,0-20.336-4.224-26.24-13.424 + c-6.144-9.072,7.024-17.792,13.936-8.832c3.344,4.336,8.72,6.528,14.464,6.528c7.792,0,15.472-3.344,15.472-13.44 + c0-13.312-16.24-11.248-25.056-10.368c-10.752,2.064-13.952-9.6-7.68-14.432L133.872,311.472z"/> + <path style="fill:#FFFFFF;" d="M190.032,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H190.032z M198.096,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H198.096z"/> + <path style="fill:#FFFFFF;" d="M277.872,314.672c2.944-24.832,40.416-29.296,58.08-15.728c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 + c-4.24-3.456-4.096-9.072-1.792-12.544c3.328-3.312,7.024-4.464,11.392-0.88c10.48,7.152,37.488,12.528,39.392-5.648 + C327.12,339.632,273.904,351.008,277.872,314.672z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/aac.svg b/public/assets/images/file-icons/aac.svg index 61d50bb5..5ecd3e2e 100644 --- a/public/assets/images/file-icons/aac.svg +++ b/public/assets/images/file-icons/aac.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M88.368,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.72-71.744c3.456-6.784,12.656-7.04,15.856,0 - l36.08,71.744c5.248,9.984-10.24,17.904-14.848,7.936l-5.632-11.248h-47.2l-5.52,11.248C97.712,384,92.992,384.912,88.368,384z - M143.392,351.52l-14.464-31.616l-15.744,31.616H143.392z"/> - <path style="fill:#FFFFFF;" d="M189.184,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.744 - c3.456-6.784,12.672-7.04,15.872,0l36.064,71.744c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.248h-47.2l-5.504,11.248 - C198.512,384,193.776,384.912,189.184,384z M244.192,351.52l-14.448-31.616l-15.728,31.616H244.192z"/> - <path style="fill:#FFFFFF;" d="M282.416,339.088c0-24.688,15.488-45.904,44.912-45.904c11.136,0,19.952,3.312,29.296,11.376 - c3.456,3.184,3.84,8.832,0.384,12.4c-3.456,3.056-8.704,2.688-11.76-0.368c-5.248-5.504-10.624-7.024-17.92-7.024 - c-19.696,0-29.168,13.936-29.168,29.536c0,15.872,9.344,30.464,29.168,30.464c7.296,0,14.08-2.96,19.952-8.192 - c3.968-3.072,9.472-1.552,11.776,1.536c2.048,2.816,3.056,7.536-1.408,12.016c-8.96,8.336-19.696,9.984-30.336,9.984 - C296.368,384.912,282.416,363.792,282.416,339.088z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M88.368,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.72-71.744c3.456-6.784,12.656-7.04,15.856,0 + l36.08,71.744c5.248,9.984-10.24,17.904-14.848,7.936l-5.632-11.248h-47.2l-5.52,11.248C97.712,384,92.992,384.912,88.368,384z + M143.392,351.52l-14.464-31.616l-15.744,31.616H143.392z"/> + <path style="fill:#FFFFFF;" d="M189.184,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.744 + c3.456-6.784,12.672-7.04,15.872,0l36.064,71.744c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.248h-47.2l-5.504,11.248 + C198.512,384,193.776,384.912,189.184,384z M244.192,351.52l-14.448-31.616l-15.728,31.616H244.192z"/> + <path style="fill:#FFFFFF;" d="M282.416,339.088c0-24.688,15.488-45.904,44.912-45.904c11.136,0,19.952,3.312,29.296,11.376 + c3.456,3.184,3.84,8.832,0.384,12.4c-3.456,3.056-8.704,2.688-11.76-0.368c-5.248-5.504-10.624-7.024-17.92-7.024 + c-19.696,0-29.168,13.936-29.168,29.536c0,15.872,9.344,30.464,29.168,30.464c7.296,0,14.08-2.96,19.952-8.192 + c3.968-3.072,9.472-1.552,11.776,1.536c2.048,2.816,3.056,7.536-1.408,12.016c-8.96,8.336-19.696,9.984-30.336,9.984 + C296.368,384.912,282.416,363.792,282.416,339.088z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/ai.svg b/public/assets/images/file-icons/ai.svg index 69fd1a31..a8336dff 100644 --- a/public/assets/images/file-icons/ai.svg +++ b/public/assets/images/file-icons/ai.svg @@ -1,48 +1,48 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M164.224,384c-4.096-2.32-6.656-6.912-4.096-12.288l36.704-71.76c3.456-6.784,12.672-7.04,15.872,0 - l36.064,71.76c5.248,9.968-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C173.552,384,168.816,384.912,164.224,384z - M219.216,351.504l-14.448-31.6l-15.728,31.6H219.216z"/> - <path style="fill:#FFFFFF;" d="M264.048,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" - /> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M164.224,384c-4.096-2.32-6.656-6.912-4.096-12.288l36.704-71.76c3.456-6.784,12.672-7.04,15.872,0 + l36.064,71.76c5.248,9.968-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C173.552,384,168.816,384.912,164.224,384z + M219.216,351.504l-14.448-31.6l-15.728,31.6H219.216z"/> + <path style="fill:#FFFFFF;" d="M264.048,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" + /> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/avi.svg b/public/assets/images/file-icons/avi.svg index a4170689..e99eaef3 100644 --- a/public/assets/images/file-icons/avi.svg +++ b/public/assets/images/file-icons/avi.svg @@ -1,50 +1,50 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M121.408,384.016c-4.096-2.32-6.656-6.912-4.096-12.288l36.72-71.76 - c3.456-6.784,12.656-7.04,15.856,0l36.08,71.76c5.248,9.968-10.24,17.904-14.848,7.92l-5.632-11.248h-47.2l-5.488,11.264 - C130.752,384.016,126.016,384.912,121.408,384.016z M176.416,351.52l-14.464-31.6l-15.728,31.6H176.416z"/> - <path style="fill:#FFFFFF;" d="M241.6,378.256l-33.776-70.736c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 - l14.704,33.76l14.448-33.76l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.504 - C255.536,386.32,246.448,388.24,241.6,378.256z"/> - <path style="fill:#FFFFFF;" d="M306.88,303.152c0-10.48,16.896-10.88,16.896,0v73.04c0,10.624-16.896,10.88-16.896,0V303.152z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M121.408,384.016c-4.096-2.32-6.656-6.912-4.096-12.288l36.72-71.76 + c3.456-6.784,12.656-7.04,15.856,0l36.08,71.76c5.248,9.968-10.24,17.904-14.848,7.92l-5.632-11.248h-47.2l-5.488,11.264 + C130.752,384.016,126.016,384.912,121.408,384.016z M176.416,351.52l-14.464-31.6l-15.728,31.6H176.416z"/> + <path style="fill:#FFFFFF;" d="M241.6,378.256l-33.776-70.736c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 + l14.704,33.76l14.448-33.76l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.504 + C255.536,386.32,246.448,388.24,241.6,378.256z"/> + <path style="fill:#FFFFFF;" d="M306.88,303.152c0-10.48,16.896-10.88,16.896,0v73.04c0,10.624-16.896,10.88-16.896,0V303.152z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/bmp.svg b/public/assets/images/file-icons/bmp.svg index 1938e993..66ad4477 100644 --- a/public/assets/images/file-icons/bmp.svg +++ b/public/assets/images/file-icons/bmp.svg @@ -1,56 +1,56 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M99.968,384c-4.608,0-7.808-3.456-7.808-7.936v-72.656c0-4.608,3.2-7.936,7.808-7.936h35.952 - c16.768,0,25.84,11.392,25.84,24.432c0,5.744-1.664,11.392-7.024,16.128c10.096,3.968,14.576,11.76,14.576,21.232 - c-0.016,14.704-10,26.736-29.184,26.736H99.968z M135.904,311.072h-26.992v19.056h26.992c5.504,0,8.96-3.456,8.96-10.24 - C144.864,315.68,141.408,311.072,135.904,311.072z M108.912,368.384h31.216c14.848,0,14.848-22.64,0-22.64 - c-9.712,0-21.104,0-31.216,0V368.384z"/> - <path style="fill:#FFFFFF;" d="M201.456,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 - c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.584,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 - c-4.592,5.648-10.352,5.648-14.576,0L201.456,327.84z"/> - <path style="fill:#FFFFFF;" d="M290.176,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832 - L290.176,303.152L290.176,303.152z M307.056,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488 - c0-8.96-6.784-16.368-15.36-16.368L307.056,310.432L307.056,310.432z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M99.968,384c-4.608,0-7.808-3.456-7.808-7.936v-72.656c0-4.608,3.2-7.936,7.808-7.936h35.952 + c16.768,0,25.84,11.392,25.84,24.432c0,5.744-1.664,11.392-7.024,16.128c10.096,3.968,14.576,11.76,14.576,21.232 + c-0.016,14.704-10,26.736-29.184,26.736H99.968z M135.904,311.072h-26.992v19.056h26.992c5.504,0,8.96-3.456,8.96-10.24 + C144.864,315.68,141.408,311.072,135.904,311.072z M108.912,368.384h31.216c14.848,0,14.848-22.64,0-22.64 + c-9.712,0-21.104,0-31.216,0V368.384z"/> + <path style="fill:#FFFFFF;" d="M201.456,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 + c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.584,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 + c-4.592,5.648-10.352,5.648-14.576,0L201.456,327.84z"/> + <path style="fill:#FFFFFF;" d="M290.176,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832 + L290.176,303.152L290.176,303.152z M307.056,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488 + c0-8.96-6.784-16.368-15.36-16.368L307.056,310.432L307.056,310.432z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/cad.svg b/public/assets/images/file-icons/cad.svg index b6dfe718..07245c98 100644 --- a/public/assets/images/file-icons/cad.svg +++ b/public/assets/images/file-icons/cad.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M85.648,339.088c0-24.688,15.488-45.92,44.912-45.92c11.12,0,19.952,3.328,29.296,11.392 - c3.456,3.184,3.824,8.832,0.368,12.4c-3.456,3.056-8.688,2.688-11.76-0.384c-5.248-5.504-10.624-7.024-17.904-7.024 - c-19.696,0-29.168,13.952-29.168,29.552c0,15.872,9.344,30.448,29.168,30.448c7.28,0,14.064-2.944,19.952-8.192 - c3.968-3.056,9.472-1.536,11.76,1.536c2.048,2.816,3.072,7.552-1.408,12.032c-8.96,8.32-19.696,9.984-30.32,9.984 - C99.6,384.912,85.648,363.792,85.648,339.088z"/> - <path style="fill:#FFFFFF;" d="M181.056,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.76 - c3.456-6.784,12.672-7.024,15.872,0l36.064,71.76c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264 - C190.384,384,185.664,384.912,181.056,384z M236.064,351.52l-14.448-31.616l-15.728,31.616H236.064z"/> - <path style="fill:#FFFFFF;" d="M289.264,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H289.264z M297.328,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H297.328z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M85.648,339.088c0-24.688,15.488-45.92,44.912-45.92c11.12,0,19.952,3.328,29.296,11.392 + c3.456,3.184,3.824,8.832,0.368,12.4c-3.456,3.056-8.688,2.688-11.76-0.384c-5.248-5.504-10.624-7.024-17.904-7.024 + c-19.696,0-29.168,13.952-29.168,29.552c0,15.872,9.344,30.448,29.168,30.448c7.28,0,14.064-2.944,19.952-8.192 + c3.968-3.056,9.472-1.536,11.76,1.536c2.048,2.816,3.072,7.552-1.408,12.032c-8.96,8.32-19.696,9.984-30.32,9.984 + C99.6,384.912,85.648,363.792,85.648,339.088z"/> + <path style="fill:#FFFFFF;" d="M181.056,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.76 + c3.456-6.784,12.672-7.024,15.872,0l36.064,71.76c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264 + C190.384,384,185.664,384.912,181.056,384z M236.064,351.52l-14.448-31.616l-15.728,31.616H236.064z"/> + <path style="fill:#FFFFFF;" d="M289.264,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H289.264z M297.328,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H297.328z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/cdr.svg b/public/assets/images/file-icons/cdr.svg index 0acfc924..9609e82f 100644 --- a/public/assets/images/file-icons/cdr.svg +++ b/public/assets/images/file-icons/cdr.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M90.592,339.088c0-24.688,15.472-45.904,44.912-45.904c11.12,0,19.952,3.312,29.296,11.376 - c3.456,3.184,3.824,8.832,0.368,12.4c-3.456,3.056-8.704,2.688-11.76-0.368c-5.248-5.504-10.624-7.024-17.904-7.024 - c-19.696,0-29.168,13.936-29.168,29.536c0,15.872,9.328,30.464,29.168,30.464c7.28,0,14.064-2.96,19.952-8.192 - c3.968-3.072,9.472-1.552,11.76,1.536c2.048,2.816,3.072,7.536-1.408,12.016c-8.96,8.336-19.696,9.984-30.32,9.984 - C104.544,384.912,90.592,363.792,90.592,339.088z"/> - <path style="fill:#FFFFFF;" d="M195.056,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H195.056z M203.12,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H203.12z"/> - <path style="fill:#FFFFFF;" d="M302.592,375.68c0,11.12-17.008,11.52-17.008,0.256V303.28c0-4.464,3.456-7.808,7.664-7.808h34.032 - c32.496,0,39.152,43.504,12.032,54.368l17.008,20.736c6.656,9.856-6.656,19.312-14.336,9.6l-19.312-27.648h-20.096v23.152H302.592z - M302.592,337.824h24.688c16.64,0,17.664-26.864,0-26.864h-24.688V337.824z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M90.592,339.088c0-24.688,15.472-45.904,44.912-45.904c11.12,0,19.952,3.312,29.296,11.376 + c3.456,3.184,3.824,8.832,0.368,12.4c-3.456,3.056-8.704,2.688-11.76-0.368c-5.248-5.504-10.624-7.024-17.904-7.024 + c-19.696,0-29.168,13.936-29.168,29.536c0,15.872,9.328,30.464,29.168,30.464c7.28,0,14.064-2.96,19.952-8.192 + c3.968-3.072,9.472-1.552,11.76,1.536c2.048,2.816,3.072,7.536-1.408,12.016c-8.96,8.336-19.696,9.984-30.32,9.984 + C104.544,384.912,90.592,363.792,90.592,339.088z"/> + <path style="fill:#FFFFFF;" d="M195.056,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H195.056z M203.12,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H203.12z"/> + <path style="fill:#FFFFFF;" d="M302.592,375.68c0,11.12-17.008,11.52-17.008,0.256V303.28c0-4.464,3.456-7.808,7.664-7.808h34.032 + c32.496,0,39.152,43.504,12.032,54.368l17.008,20.736c6.656,9.856-6.656,19.312-14.336,9.6l-19.312-27.648h-20.096v23.152H302.592z + M302.592,337.824h24.688c16.64,0,17.664-26.864,0-26.864h-24.688V337.824z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/css.svg b/public/assets/images/file-icons/css.svg index 71ed21da..008aefb1 100644 --- a/public/assets/images/file-icons/css.svg +++ b/public/assets/images/file-icons/css.svg @@ -1,56 +1,56 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M103.936,339.088c0-24.688,15.472-45.92,44.912-45.92c11.12,0,19.952,3.328,29.296,11.392 - c3.456,3.184,3.824,8.816,0.368,12.4c-3.456,3.056-8.704,2.688-11.76-0.384c-5.248-5.504-10.624-7.024-17.904-7.024 - c-19.696,0-29.168,13.952-29.168,29.552c0,15.872,9.344,30.448,29.168,30.448c7.28,0,14.064-2.96,19.952-8.192 - c3.968-3.072,9.472-1.552,11.76,1.536c2.048,2.816,3.072,7.552-1.408,12.016c-8.96,8.336-19.696,10-30.32,10 - C117.888,384.912,103.936,363.776,103.936,339.088z"/> - <path style="fill:#FFFFFF;" d="M195.712,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 - C244.976,339.616,191.744,351.008,195.712,314.656z"/> - <path style="fill:#FFFFFF;" d="M276.48,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 - C325.728,339.616,272.512,351.008,276.48,314.656z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M103.936,339.088c0-24.688,15.472-45.92,44.912-45.92c11.12,0,19.952,3.328,29.296,11.392 + c3.456,3.184,3.824,8.816,0.368,12.4c-3.456,3.056-8.704,2.688-11.76-0.384c-5.248-5.504-10.624-7.024-17.904-7.024 + c-19.696,0-29.168,13.952-29.168,29.552c0,15.872,9.344,30.448,29.168,30.448c7.28,0,14.064-2.96,19.952-8.192 + c3.968-3.072,9.472-1.552,11.76,1.536c2.048,2.816,3.072,7.552-1.408,12.016c-8.96,8.336-19.696,10-30.32,10 + C117.888,384.912,103.936,363.776,103.936,339.088z"/> + <path style="fill:#FFFFFF;" d="M195.712,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 + C244.976,339.616,191.744,351.008,195.712,314.656z"/> + <path style="fill:#FFFFFF;" d="M276.48,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 + C325.728,339.616,272.512,351.008,276.48,314.656z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/dat.svg b/public/assets/images/file-icons/dat.svg index cbddf289..6798270e 100644 --- a/public/assets/images/file-icons/dat.svg +++ b/public/assets/images/file-icons/dat.svg @@ -1,50 +1,50 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M110.272,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H110.272z M118.336,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H118.336z"/> - <path style="fill:#FFFFFF;" d="M196.288,384c-4.096-2.304-6.64-6.912-4.096-12.288l36.72-71.76c3.456-6.784,12.672-7.024,15.872,0 - l36.064,71.76c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C205.632,384,200.896,384.912,196.288,384z - M251.296,351.52l-14.448-31.616L221.12,351.52H251.296z"/> - <path style="fill:#FFFFFF;" d="M305.584,311.472H283.2c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 - h-21.232v64.608c0,11.12-16.896,11.376-16.896,0v-64.608H305.584z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M110.272,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H110.272z M118.336,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H118.336z"/> + <path style="fill:#FFFFFF;" d="M196.288,384c-4.096-2.304-6.64-6.912-4.096-12.288l36.72-71.76c3.456-6.784,12.672-7.024,15.872,0 + l36.064,71.76c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C205.632,384,200.896,384.912,196.288,384z + M251.296,351.52l-14.448-31.616L221.12,351.52H251.296z"/> + <path style="fill:#FFFFFF;" d="M305.584,311.472H283.2c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 + h-21.232v64.608c0,11.12-16.896,11.376-16.896,0v-64.608H305.584z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/dll.svg b/public/assets/images/file-icons/dll.svg index 682cd4c6..d73a2118 100644 --- a/public/assets/images/file-icons/dll.svg +++ b/public/assets/images/file-icons/dll.svg @@ -1,49 +1,49 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M118.08,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H118.08z M126.144,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H126.144z"/> - <path style="fill:#FFFFFF;" d="M208.608,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H208.608z"/> - <path style="fill:#FFFFFF;" d="M283.552,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H283.552z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M118.08,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H118.08z M126.144,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H126.144z"/> + <path style="fill:#FFFFFF;" d="M208.608,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H208.608z"/> + <path style="fill:#FFFFFF;" d="M283.552,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H283.552z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/dmg.svg b/public/assets/images/file-icons/dmg.svg index c11b9511..2d503a7a 100644 --- a/public/assets/images/file-icons/dmg.svg +++ b/public/assets/images/file-icons/dmg.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M89.216,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.48,0,57.184,88.528,1.152,88.528H89.216z M97.28,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H97.28z"/> - <path style="fill:#FFFFFF;" d="M196.688,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 - c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864c-4.592,5.648-10.352,5.648-14.576,0 - L196.688,327.84z"/> - <path style="fill:#FFFFFF;" d="M363.712,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 - c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 - c7.792,0,14.448-2.304,19.184-5.76V348.08H332.24c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 - C366.912,369.552,365.888,371.712,363.712,374.16z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M89.216,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.48,0,57.184,88.528,1.152,88.528H89.216z M97.28,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H97.28z"/> + <path style="fill:#FFFFFF;" d="M196.688,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 + c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864c-4.592,5.648-10.352,5.648-14.576,0 + L196.688,327.84z"/> + <path style="fill:#FFFFFF;" d="M363.712,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 + c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 + c7.792,0,14.448-2.304,19.184-5.76V348.08H332.24c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 + C366.912,369.552,365.888,371.712,363.712,374.16z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/doc.svg b/public/assets/images/file-icons/doc.svg index 1f678dfd..a6f1c53a 100644 --- a/public/assets/images/file-icons/doc.svg +++ b/public/assets/images/file-icons/doc.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M92.576,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.168,88.528,1.136,88.528H92.576z M100.64,311.072v57.312h21.232c34.544,0,36.064-57.312,0-57.312H100.64z"/> - <path style="fill:#FFFFFF;" d="M228,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 - c22.384,1.136,45.792,16.624,45.792,46.944C273.792,369.552,250.384,385.28,228,385.28z M226.592,308.912 - c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 - C257.04,319.008,241.312,308.912,226.592,308.912z"/> - <path style="fill:#FFFFFF;" d="M288.848,339.088c0-24.688,15.488-45.92,44.912-45.92c11.136,0,19.968,3.328,29.296,11.392 - c3.456,3.184,3.84,8.816,0.384,12.4c-3.456,3.056-8.704,2.688-11.776-0.384c-5.232-5.504-10.608-7.024-17.904-7.024 - c-19.696,0-29.152,13.952-29.152,29.552c0,15.872,9.328,30.448,29.152,30.448c7.296,0,14.08-2.96,19.968-8.192 - c3.952-3.072,9.456-1.552,11.76,1.536c2.048,2.816,3.056,7.552-1.408,12.016c-8.96,8.336-19.696,10-30.336,10 - C302.8,384.912,288.848,363.776,288.848,339.088z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M92.576,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.168,88.528,1.136,88.528H92.576z M100.64,311.072v57.312h21.232c34.544,0,36.064-57.312,0-57.312H100.64z"/> + <path style="fill:#FFFFFF;" d="M228,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 + c22.384,1.136,45.792,16.624,45.792,46.944C273.792,369.552,250.384,385.28,228,385.28z M226.592,308.912 + c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 + C257.04,319.008,241.312,308.912,226.592,308.912z"/> + <path style="fill:#FFFFFF;" d="M288.848,339.088c0-24.688,15.488-45.92,44.912-45.92c11.136,0,19.968,3.328,29.296,11.392 + c3.456,3.184,3.84,8.816,0.384,12.4c-3.456,3.056-8.704,2.688-11.776-0.384c-5.232-5.504-10.608-7.024-17.904-7.024 + c-19.696,0-29.152,13.952-29.152,29.552c0,15.872,9.328,30.448,29.152,30.448c7.296,0,14.08-2.96,19.968-8.192 + c3.952-3.072,9.456-1.552,11.76,1.536c2.048,2.816,3.056,7.552-1.408,12.016c-8.96,8.336-19.696,10-30.336,10 + C302.8,384.912,288.848,363.776,288.848,339.088z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/eps.svg b/public/assets/images/file-icons/eps.svg index a21ca63c..9196ab43 100644 --- a/public/assets/images/file-icons/eps.svg +++ b/public/assets/images/file-icons/eps.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M116.608,384c-4.48,0-7.936-3.456-7.936-7.936v-72.656c0-4.608,3.456-7.936,7.936-7.936h45.92 - c11.776,0,11.52,16.624,0,16.624h-36.832v19.2h32.24c11.376,0,11.376,16.768,0,16.768h-32.24v19.184h39.024 - c11.648,0,12.528,16.752,0,16.752H116.608z"/> - <path style="fill:#FFFFFF;" d="M190.48,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z - M207.376,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L207.376,310.432 - L207.376,310.432z"/> - <path style="fill:#FFFFFF;" d="M274.8,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 - C324.048,339.616,270.832,351.008,274.8,314.656z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M116.608,384c-4.48,0-7.936-3.456-7.936-7.936v-72.656c0-4.608,3.456-7.936,7.936-7.936h45.92 + c11.776,0,11.52,16.624,0,16.624h-36.832v19.2h32.24c11.376,0,11.376,16.768,0,16.768h-32.24v19.184h39.024 + c11.648,0,12.528,16.752,0,16.752H116.608z"/> + <path style="fill:#FFFFFF;" d="M190.48,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z + M207.376,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L207.376,310.432 + L207.376,310.432z"/> + <path style="fill:#FFFFFF;" d="M274.8,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 + C324.048,339.616,270.832,351.008,274.8,314.656z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/fla.svg b/public/assets/images/file-icons/fla.svg index 3fd6a481..d5bd4450 100644 --- a/public/assets/images/file-icons/fla.svg +++ b/public/assets/images/file-icons/fla.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M124.08,312.112v20.336h32.624c4.608,0,9.2,4.608,9.2,9.072c0,4.224-4.592,7.68-9.2,7.68H124.08 - v26.864c0,4.48-3.2,7.92-7.664,7.92c-5.632,0-9.088-3.44-9.088-7.92v-72.672c0-4.592,3.472-7.936,9.088-7.936h44.912 - c5.632,0,8.96,3.344,8.96,7.936c0,4.096-3.328,8.704-8.96,8.704H124.08V312.112z"/> - <path style="fill:#FFFFFF;" d="M185.824,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.792v-73.056H185.824z"/> - <path style="fill:#FFFFFF;" d="M262.224,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.744 - c3.456-6.784,12.672-7.04,15.872,0l36.064,71.744c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.248h-47.2l-5.488,11.264 - C271.552,384,266.816,384.912,262.224,384z M317.216,351.52l-14.448-31.616L287.04,351.52H317.216z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M124.08,312.112v20.336h32.624c4.608,0,9.2,4.608,9.2,9.072c0,4.224-4.592,7.68-9.2,7.68H124.08 + v26.864c0,4.48-3.2,7.92-7.664,7.92c-5.632,0-9.088-3.44-9.088-7.92v-72.672c0-4.592,3.472-7.936,9.088-7.936h44.912 + c5.632,0,8.96,3.344,8.96,7.936c0,4.096-3.328,8.704-8.96,8.704H124.08V312.112z"/> + <path style="fill:#FFFFFF;" d="M185.824,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.792v-73.056H185.824z"/> + <path style="fill:#FFFFFF;" d="M262.224,384c-4.096-2.304-6.656-6.912-4.096-12.288l36.704-71.744 + c3.456-6.784,12.672-7.04,15.872,0l36.064,71.744c5.248,9.984-10.24,17.904-14.832,7.936l-5.648-11.248h-47.2l-5.488,11.264 + C271.552,384,266.816,384.912,262.224,384z M317.216,351.52l-14.448-31.616L287.04,351.52H317.216z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/flv.svg b/public/assets/images/file-icons/flv.svg index fa08af2e..febd584f 100644 --- a/public/assets/images/file-icons/flv.svg +++ b/public/assets/images/file-icons/flv.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M133.312,312.096v20.336h32.624c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 - h-32.624v26.864c0,4.48-3.184,7.936-7.664,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 - c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688h-37.248V312.096z"/> - <path style="fill:#FFFFFF;" d="M195.072,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H195.072z"/> - <path style="fill:#FFFFFF;" d="M286.88,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 - l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.52 - C300.816,386.32,291.728,388.224,286.88,378.256z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M133.312,312.096v20.336h32.624c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 + h-32.624v26.864c0,4.48-3.184,7.936-7.664,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 + c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688h-37.248V312.096z"/> + <path style="fill:#FFFFFF;" d="M195.072,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H195.072z"/> + <path style="fill:#FFFFFF;" d="M286.88,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 + l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.52 + C300.816,386.32,291.728,388.224,286.88,378.256z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/gif.svg b/public/assets/images/file-icons/gif.svg index 7c47d75b..da585a82 100644 --- a/public/assets/images/file-icons/gif.svg +++ b/public/assets/images/file-icons/gif.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M199.84,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 - c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 - c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 - C203.024,369.552,202.016,371.712,199.84,374.16z"/> - <path style="fill:#FFFFFF;" d="M224.944,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" - /> - <path style="fill:#FFFFFF;" d="M281.12,312.096v20.336h32.608c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 - H281.12v26.864c0,4.48-3.2,7.936-7.68,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 - c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688H281.12V312.096z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M199.84,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 + c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 + c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 + C203.024,369.552,202.016,371.712,199.84,374.16z"/> + <path style="fill:#FFFFFF;" d="M224.944,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" + /> + <path style="fill:#FFFFFF;" d="M281.12,312.096v20.336h32.608c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 + H281.12v26.864c0,4.48-3.2,7.936-7.68,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 + c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688H281.12V312.096z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/html.svg b/public/assets/images/file-icons/html.svg index bfd126d7..9f7c99ef 100644 --- a/public/assets/images/file-icons/html.svg +++ b/public/assets/images/file-icons/html.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M55.68,376.064v-72.656c0-4.608,3.328-7.936,9.072-7.936c4.48,0,7.808,3.328,7.808,7.936v27.888 - h41.696v-27.888c0-4.608,4.096-7.936,8.704-7.936c4.48,0,7.936,3.328,7.936,7.936v72.656c0,4.48-3.456,7.936-7.936,7.936 - c-4.608,0-8.704-3.456-8.704-7.936v-28H72.56v28c0,4.48-3.328,7.936-7.808,7.936C59.008,384,55.68,380.544,55.68,376.064z"/> - <path style="fill:#FFFFFF;" d="M172.784,311.472H150.4c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 - h-21.232v64.592c0,11.12-16.896,11.392-16.896,0v-64.592H172.784z"/> - <path style="fill:#FFFFFF;" d="M248.688,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 - c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864c-4.592,5.648-10.352,5.648-14.576,0 - L248.688,327.84z"/> - <path style="fill:#FFFFFF;" d="M337.264,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H337.264z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M55.68,376.064v-72.656c0-4.608,3.328-7.936,9.072-7.936c4.48,0,7.808,3.328,7.808,7.936v27.888 + h41.696v-27.888c0-4.608,4.096-7.936,8.704-7.936c4.48,0,7.936,3.328,7.936,7.936v72.656c0,4.48-3.456,7.936-7.936,7.936 + c-4.608,0-8.704-3.456-8.704-7.936v-28H72.56v28c0,4.48-3.328,7.936-7.808,7.936C59.008,384,55.68,380.544,55.68,376.064z"/> + <path style="fill:#FFFFFF;" d="M172.784,311.472H150.4c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 + h-21.232v64.592c0,11.12-16.896,11.392-16.896,0v-64.592H172.784z"/> + <path style="fill:#FFFFFF;" d="M248.688,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 + c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864c-4.592,5.648-10.352,5.648-14.576,0 + L248.688,327.84z"/> + <path style="fill:#FFFFFF;" d="M337.264,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H337.264z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/indd.svg b/public/assets/images/file-icons/indd.svg index c01b77e0..49bff958 100644 --- a/public/assets/images/file-icons/indd.svg +++ b/public/assets/images/file-icons/indd.svg @@ -1,52 +1,52 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.616,14.4,32,32,32h320c17.6,0,32-14.384,32-32V128L352,0H128z - "/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M66.4,303.152c0-10.496,16.88-10.88,16.88,0v73.04c0,10.608-16.88,10.88-16.88,0V303.152z"/> - <path style="fill:#FFFFFF;" d="M105.968,304.432c0-4.608,1.024-9.088,7.664-9.088c4.608,0,5.632,1.152,9.088,4.48l42.336,52.96 - v-49.632c0-4.224,3.696-8.832,8.064-8.832c4.592,0,9.072,4.608,9.072,8.832v72.016c0,5.648-3.456,7.808-6.784,8.832 - c-4.464,0-6.656-1.008-10.352-4.464l-42.336-53.744v49.376c0,5.648-3.456,8.832-8.064,8.832s-8.688-3.184-8.688-8.832V304.432z"/> - <path style="fill:#FFFFFF;" d="M213.248,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H213.248z M221.312,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H221.312z"/> - <path style="fill:#FFFFFF;" d="M312.592,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H312.592z M320.656,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H320.656z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.616,14.4,32,32,32h320c17.6,0,32-14.384,32-32V128L352,0H128z + "/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M66.4,303.152c0-10.496,16.88-10.88,16.88,0v73.04c0,10.608-16.88,10.88-16.88,0V303.152z"/> + <path style="fill:#FFFFFF;" d="M105.968,304.432c0-4.608,1.024-9.088,7.664-9.088c4.608,0,5.632,1.152,9.088,4.48l42.336,52.96 + v-49.632c0-4.224,3.696-8.832,8.064-8.832c4.592,0,9.072,4.608,9.072,8.832v72.016c0,5.648-3.456,7.808-6.784,8.832 + c-4.464,0-6.656-1.008-10.352-4.464l-42.336-53.744v49.376c0,5.648-3.456,8.832-8.064,8.832s-8.688-3.184-8.688-8.832V304.432z"/> + <path style="fill:#FFFFFF;" d="M213.248,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H213.248z M221.312,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H221.312z"/> + <path style="fill:#FFFFFF;" d="M312.592,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H312.592z M320.656,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H320.656z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/iso.svg b/public/assets/images/file-icons/iso.svg index edbf06a0..c6cf312c 100644 --- a/public/assets/images/file-icons/iso.svg +++ b/public/assets/images/file-icons/iso.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M119.52,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0 - C119.52,376.176,119.52,303.152,119.52,303.152z"/> - <path style="fill:#FFFFFF;" d="M156.624,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 - C205.872,339.616,152.656,351.008,156.624,314.656z"/> - <path style="fill:#FFFFFF;" d="M285.824,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 - c22.384,1.136,45.792,16.624,45.792,46.944C331.632,369.552,308.224,385.28,285.824,385.28z M284.416,308.912 - c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 - C314.88,319.008,299.136,308.912,284.416,308.912z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M119.52,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0 + C119.52,376.176,119.52,303.152,119.52,303.152z"/> + <path style="fill:#FFFFFF;" d="M156.624,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 + C205.872,339.616,152.656,351.008,156.624,314.656z"/> + <path style="fill:#FFFFFF;" d="M285.824,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 + c22.384,1.136,45.792,16.624,45.792,46.944C331.632,369.552,308.224,385.28,285.824,385.28z M284.416,308.912 + c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 + C314.88,319.008,299.136,308.912,284.416,308.912z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/jpg.svg b/public/assets/images/file-icons/jpg.svg index b0047d78..b525283f 100644 --- a/public/assets/images/file-icons/jpg.svg +++ b/public/assets/images/file-icons/jpg.svg @@ -1,55 +1,55 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M141.968,303.152c0-10.752,16.896-10.752,16.896,0v50.528c0,20.096-9.6,32.256-31.728,32.256 - c-10.88,0-19.952-2.96-27.888-13.184c-6.528-7.808,5.76-19.056,12.416-10.88c5.376,6.656,11.136,8.192,16.752,7.936 - c7.152-0.256,13.44-3.472,13.568-16.128v-50.528H141.968z"/> - <path style="fill:#FFFFFF;" d="M181.344,303.152c0-4.224,3.328-8.832,8.704-8.832H219.6c16.64,0,31.616,11.136,31.616,32.48 - c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816 - L181.344,303.152L181.344,303.152z M198.24,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504 - c0-8.944-6.784-16.368-15.36-16.368H198.24z"/> - <path style="fill:#FFFFFF;" d="M342.576,374.16c-9.088,7.552-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.344-45.936-45.808 - c0-25.824,20.096-45.904,47.072-45.904c10.112,0,21.232,3.44,29.168,11.248c7.792,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.608-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.464,29.296,30.464 - c7.792,0,14.448-2.32,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.616,0-15.616h25.584c4.736,0,9.072,3.584,9.072,7.552v27.248 - C345.76,369.568,344.752,371.712,342.576,374.16z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M141.968,303.152c0-10.752,16.896-10.752,16.896,0v50.528c0,20.096-9.6,32.256-31.728,32.256 + c-10.88,0-19.952-2.96-27.888-13.184c-6.528-7.808,5.76-19.056,12.416-10.88c5.376,6.656,11.136,8.192,16.752,7.936 + c7.152-0.256,13.44-3.472,13.568-16.128v-50.528H141.968z"/> + <path style="fill:#FFFFFF;" d="M181.344,303.152c0-4.224,3.328-8.832,8.704-8.832H219.6c16.64,0,31.616,11.136,31.616,32.48 + c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816 + L181.344,303.152L181.344,303.152z M198.24,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504 + c0-8.944-6.784-16.368-15.36-16.368H198.24z"/> + <path style="fill:#FFFFFF;" d="M342.576,374.16c-9.088,7.552-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.344-45.936-45.808 + c0-25.824,20.096-45.904,47.072-45.904c10.112,0,21.232,3.44,29.168,11.248c7.792,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.608-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.464,29.296,30.464 + c7.792,0,14.448-2.32,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.616,0-15.616h25.584c4.736,0,9.072,3.584,9.072,7.552v27.248 + C345.76,369.568,344.752,371.712,342.576,374.16z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/js.svg b/public/assets/images/file-icons/js.svg index 64323f57..165a6e5f 100644 --- a/public/assets/images/file-icons/js.svg +++ b/public/assets/images/file-icons/js.svg @@ -1,50 +1,50 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M193.744,303.152c0-10.752,16.896-10.752,16.896,0v50.528c0,20.08-9.6,32.24-31.712,32.24 - c-10.88,0-19.968-2.96-27.888-13.168c-6.528-7.808,5.744-19.056,12.4-10.88c5.376,6.656,11.12,8.192,16.752,7.92 - c7.168-0.256,13.44-3.456,13.568-16.112v-50.528H193.744z"/> - <path style="fill:#FFFFFF;" d="M230.272,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 - C279.52,339.616,226.304,351.008,230.272,314.656z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M193.744,303.152c0-10.752,16.896-10.752,16.896,0v50.528c0,20.08-9.6,32.24-31.712,32.24 + c-10.88,0-19.968-2.96-27.888-13.168c-6.528-7.808,5.744-19.056,12.4-10.88c5.376,6.656,11.12,8.192,16.752,7.92 + c7.168-0.256,13.44-3.456,13.568-16.112v-50.528H193.744z"/> + <path style="fill:#FFFFFF;" d="M230.272,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.408-5.648 + C279.52,339.616,226.304,351.008,230.272,314.656z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/midi.svg b/public/assets/images/file-icons/midi.svg index e14b9fa0..961dcfcf 100644 --- a/public/assets/images/file-icons/midi.svg +++ b/public/assets/images/file-icons/midi.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M107.136,327.84v47.328c0,5.648-4.608,8.832-9.216,8.832c-4.096,0-7.664-3.184-7.664-8.832v-72.016 - c0-6.656,5.632-8.848,7.664-8.848c3.712,0,5.888,2.192,8.064,4.624l28.144,37.984l29.168-39.408 - c4.224-5.232,14.576-3.2,14.576,5.648v72.016c0,5.648-3.568,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84 - l-21.232,26.864c-4.608,5.648-10.352,5.648-14.592,0L107.136,327.84z"/> - <path style="fill:#FFFFFF;" d="M200.624,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" - /> - <path style="fill:#FFFFFF;" d="M248.96,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H248.96z M257.008,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H257.008z"/> - <path style="fill:#FFFFFF;" d="M339.952,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" - /> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M107.136,327.84v47.328c0,5.648-4.608,8.832-9.216,8.832c-4.096,0-7.664-3.184-7.664-8.832v-72.016 + c0-6.656,5.632-8.848,7.664-8.848c3.712,0,5.888,2.192,8.064,4.624l28.144,37.984l29.168-39.408 + c4.224-5.232,14.576-3.2,14.576,5.648v72.016c0,5.648-3.568,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84 + l-21.232,26.864c-4.608,5.648-10.352,5.648-14.592,0L107.136,327.84z"/> + <path style="fill:#FFFFFF;" d="M200.624,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" + /> + <path style="fill:#FFFFFF;" d="M248.96,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H248.96z M257.008,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H257.008z"/> + <path style="fill:#FFFFFF;" d="M339.952,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" + /> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/mov.svg b/public/assets/images/file-icons/mov.svg index dbba47ef..22e41fee 100644 --- a/public/assets/images/file-icons/mov.svg +++ b/public/assets/images/file-icons/mov.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M96.928,327.84v47.328c0,5.648-4.608,8.832-9.216,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 - c0-6.656,5.632-8.848,7.68-8.848c3.696,0,5.872,2.192,8.064,4.624l28.128,37.984l29.168-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.568,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 - c-4.592,5.648-10.352,5.648-14.576,0L96.928,327.84z"/> - <path style="fill:#FFFFFF;" d="M234.096,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 - c22.384,1.136,45.792,16.624,45.792,46.944C279.888,369.552,256.48,385.28,234.096,385.28z M232.688,308.912 - c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 - C263.136,319.008,247.408,308.912,232.688,308.912z"/> - <path style="fill:#FFFFFF;" d="M323.664,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 - l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.52 - C337.6,386.32,328.512,388.224,323.664,378.256z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M96.928,327.84v47.328c0,5.648-4.608,8.832-9.216,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 + c0-6.656,5.632-8.848,7.68-8.848c3.696,0,5.872,2.192,8.064,4.624l28.128,37.984l29.168-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.568,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 + c-4.592,5.648-10.352,5.648-14.576,0L96.928,327.84z"/> + <path style="fill:#FFFFFF;" d="M234.096,385.28c-23.664,1.024-48.24-14.72-48.24-46.064c0-31.472,24.56-46.944,48.24-46.944 + c22.384,1.136,45.792,16.624,45.792,46.944C279.888,369.552,256.48,385.28,234.096,385.28z M232.688,308.912 + c-14.336,0-29.936,10.112-29.936,30.32c0,20.096,15.616,30.336,29.936,30.336c14.72,0,30.448-10.24,30.448-30.336 + C263.136,319.008,247.408,308.912,232.688,308.912z"/> + <path style="fill:#FFFFFF;" d="M323.664,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 + l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04l-32.624,71.52 + C337.6,386.32,328.512,388.224,323.664,378.256z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/mp3.svg b/public/assets/images/file-icons/mp3.svg index ed8e31e6..95d93260 100644 --- a/public/assets/images/file-icons/mp3.svg +++ b/public/assets/images/file-icons/mp3.svg @@ -1,57 +1,57 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.616,14.4,32,32,32h320c17.6,0,32-14.384,32-32V128L352,0H128z - "/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M117.184,327.84v47.344c0,5.632-4.592,8.832-9.216,8.832c-4.096,0-7.664-3.2-7.664-8.832v-72.032 - c0-6.64,5.632-8.832,7.664-8.832c3.712,0,5.888,2.192,8.064,4.608l28.16,38l29.152-39.408c4.24-5.248,14.592-3.2,14.592,5.632 - v72.032c0,5.632-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.2-8.192-8.832V327.84l-21.232,26.88c-4.592,5.632-10.352,5.632-14.576,0 - L117.184,327.84z"/> - <path style="fill:#FFFFFF;" d="M210.288,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.632-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.2-8.704-8.832V303.152z - M227.168,310.448v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L227.168,310.448 - L227.168,310.448z"/> - <path style="fill:#FFFFFF;" d="M322.064,311.472h-21.872c-10.736,0-10.096-15.984,0-15.984h39.152c7.792,0,11.376,8.96,5.632,14.72 - l-21.232,19.824c15.616-1.152,27.888,10.48,27.888,24.816c0,15.728-11.136,29.168-34.544,29.168 - c-10.24,0-20.336-4.224-26.224-13.44c-6.144-9.072,7.024-17.776,13.936-8.832c3.328,4.352,8.704,6.528,14.448,6.528 - c7.808,0,15.488-3.328,15.488-13.44c0-13.296-16.256-11.248-25.072-10.352c-10.752,2.048-13.936-9.6-7.664-14.448L322.064,311.472z - "/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.616,14.4,32,32,32h320c17.6,0,32-14.384,32-32V128L352,0H128z + "/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M117.184,327.84v47.344c0,5.632-4.592,8.832-9.216,8.832c-4.096,0-7.664-3.2-7.664-8.832v-72.032 + c0-6.64,5.632-8.832,7.664-8.832c3.712,0,5.888,2.192,8.064,4.608l28.16,38l29.152-39.408c4.24-5.248,14.592-3.2,14.592,5.632 + v72.032c0,5.632-3.6,8.832-7.68,8.832c-4.592,0-8.192-3.2-8.192-8.832V327.84l-21.232,26.88c-4.592,5.632-10.352,5.632-14.576,0 + L117.184,327.84z"/> + <path style="fill:#FFFFFF;" d="M210.288,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.632-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.2-8.704-8.832V303.152z + M227.168,310.448v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L227.168,310.448 + L227.168,310.448z"/> + <path style="fill:#FFFFFF;" d="M322.064,311.472h-21.872c-10.736,0-10.096-15.984,0-15.984h39.152c7.792,0,11.376,8.96,5.632,14.72 + l-21.232,19.824c15.616-1.152,27.888,10.48,27.888,24.816c0,15.728-11.136,29.168-34.544,29.168 + c-10.24,0-20.336-4.224-26.224-13.44c-6.144-9.072,7.024-17.776,13.936-8.832c3.328,4.352,8.704,6.528,14.448,6.528 + c7.808,0,15.488-3.328,15.488-13.44c0-13.296-16.256-11.248-25.072-10.352c-10.752,2.048-13.936-9.6-7.664-14.448L322.064,311.472z + "/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/mpg.svg b/public/assets/images/file-icons/mpg.svg index 5da4e20a..e3806756 100644 --- a/public/assets/images/file-icons/mpg.svg +++ b/public/assets/images/file-icons/mpg.svg @@ -1,56 +1,56 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M103.408,327.84v47.328c0,5.648-4.592,8.832-9.216,8.832c-4.096,0-7.664-3.184-7.664-8.832v-72.016 - c0-6.656,5.632-8.848,7.664-8.848c3.712,0,5.888,2.192,8.064,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.6,8.832-7.696,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864 - c-4.592,5.648-10.352,5.648-14.576,0L103.408,327.84z"/> - <path style="fill:#FFFFFF;" d="M196.496,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z - M213.392,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L213.392,310.432 - L213.392,310.432z"/> - <path style="fill:#FFFFFF;" d="M357.728,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 - c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.792,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 - c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 - C360.928,369.552,359.904,371.712,357.728,374.16z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M103.408,327.84v47.328c0,5.648-4.592,8.832-9.216,8.832c-4.096,0-7.664-3.184-7.664-8.832v-72.016 + c0-6.656,5.632-8.848,7.664-8.848c3.712,0,5.888,2.192,8.064,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.6,8.832-7.696,8.832c-4.592,0-8.192-3.184-8.192-8.832V327.84l-21.232,26.864 + c-4.592,5.648-10.352,5.648-14.576,0L103.408,327.84z"/> + <path style="fill:#FFFFFF;" d="M196.496,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z + M213.392,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L213.392,310.432 + L213.392,310.432z"/> + <path style="fill:#FFFFFF;" d="M357.728,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 + c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.792,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 + c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 + C360.928,369.552,359.904,371.712,357.728,374.16z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/pdf.svg b/public/assets/images/file-icons/pdf.svg index 8c9430a4..dd185d21 100644 --- a/public/assets/images/file-icons/pdf.svg +++ b/public/assets/images/file-icons/pdf.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M101.744,303.152c0-4.224,3.328-8.832,8.688-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 - c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.688-3.184-8.688-8.816V303.152z - M118.624,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H118.624z"/> - <path style="fill:#FFFFFF;" d="M196.656,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 - c58.464,0,57.184,88.528,1.152,88.528H196.656z M204.72,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H204.72z"/> - <path style="fill:#FFFFFF;" d="M303.872,312.112v20.336h32.624c4.608,0,9.216,4.608,9.216,9.072c0,4.224-4.608,7.68-9.216,7.68 - h-32.624v26.864c0,4.48-3.184,7.92-7.664,7.92c-5.632,0-9.072-3.44-9.072-7.92v-72.672c0-4.592,3.456-7.936,9.072-7.936h44.912 - c5.632,0,8.96,3.344,8.96,7.936c0,4.096-3.328,8.704-8.96,8.704h-37.248V312.112z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M101.744,303.152c0-4.224,3.328-8.832,8.688-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 + c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.688-3.184-8.688-8.816V303.152z + M118.624,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H118.624z"/> + <path style="fill:#FFFFFF;" d="M196.656,384c-4.224,0-8.832-2.304-8.832-7.92v-72.672c0-4.592,4.608-7.936,8.832-7.936h29.296 + c58.464,0,57.184,88.528,1.152,88.528H196.656z M204.72,311.088V368.4h21.232c34.544,0,36.08-57.312,0-57.312H204.72z"/> + <path style="fill:#FFFFFF;" d="M303.872,312.112v20.336h32.624c4.608,0,9.216,4.608,9.216,9.072c0,4.224-4.608,7.68-9.216,7.68 + h-32.624v26.864c0,4.48-3.184,7.92-7.664,7.92c-5.632,0-9.072-3.44-9.072-7.92v-72.672c0-4.592,3.456-7.936,9.072-7.936h44.912 + c5.632,0,8.96,3.344,8.96,7.936c0,4.096-3.328,8.704-8.96,8.704h-37.248V312.112z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/php.svg b/public/assets/images/file-icons/php.svg index f9dc468b..ce22d9b6 100644 --- a/public/assets/images/file-icons/php.svg +++ b/public/assets/images/file-icons/php.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M102.912,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.376v16.896c0,5.648-3.568,8.832-8.176,8.832c-4.224,0-8.704-3.184-8.704-8.832 - C102.912,375.168,102.912,303.152,102.912,303.152z M119.792,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488 - c0-8.96-6.784-16.368-15.36-16.368L119.792,310.432L119.792,310.432z"/> - <path style="fill:#FFFFFF;" d="M186.48,376.064v-72.656c0-4.608,3.328-7.936,9.088-7.936c4.464,0,7.792,3.328,7.792,7.936v27.888 - h41.696v-27.888c0-4.608,4.096-7.936,8.704-7.936c4.464,0,7.936,3.328,7.936,7.936v72.656c0,4.48-3.472,7.936-7.936,7.936 - c-4.608,0-8.704-3.456-8.704-7.936v-28H203.36v28c0,4.48-3.328,7.936-7.792,7.936C189.808,384,186.48,380.544,186.48,376.064z"/> - <path style="fill:#FFFFFF;" d="M279.664,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152 - L279.664,303.152z M296.56,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368 - L296.56,310.432L296.56,310.432z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M102.912,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.376v16.896c0,5.648-3.568,8.832-8.176,8.832c-4.224,0-8.704-3.184-8.704-8.832 + C102.912,375.168,102.912,303.152,102.912,303.152z M119.792,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488 + c0-8.96-6.784-16.368-15.36-16.368L119.792,310.432L119.792,310.432z"/> + <path style="fill:#FFFFFF;" d="M186.48,376.064v-72.656c0-4.608,3.328-7.936,9.088-7.936c4.464,0,7.792,3.328,7.792,7.936v27.888 + h41.696v-27.888c0-4.608,4.096-7.936,8.704-7.936c4.464,0,7.936,3.328,7.936,7.936v72.656c0,4.48-3.472,7.936-7.936,7.936 + c-4.608,0-8.704-3.456-8.704-7.936v-28H203.36v28c0,4.48-3.328,7.936-7.792,7.936C189.808,384,186.48,380.544,186.48,376.064z"/> + <path style="fill:#FFFFFF;" d="M279.664,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152 + L279.664,303.152z M296.56,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368 + L296.56,310.432L296.56,310.432z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/png.svg b/public/assets/images/file-icons/png.svg index 5bc975d1..642ef1a8 100644 --- a/public/assets/images/file-icons/png.svg +++ b/public/assets/images/file-icons/png.svg @@ -1,56 +1,56 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M92.816,303.152c0-4.224,3.312-8.848,8.688-8.848h29.568c16.624,0,31.6,11.136,31.6,32.496 - c0,20.224-14.976,31.472-31.6,31.472H109.68v16.896c0,5.648-3.552,8.832-8.176,8.832c-4.224,0-8.688-3.184-8.688-8.832 - C92.816,375.168,92.816,303.152,92.816,303.152z M109.68,310.432v31.856h21.376c8.56,0,15.344-7.552,15.344-15.488 - c0-8.96-6.784-16.368-15.344-16.368L109.68,310.432L109.68,310.432z"/> - <path style="fill:#FFFFFF;" d="M178.976,304.432c0-4.624,1.024-9.088,7.68-9.088c4.592,0,5.632,1.152,9.072,4.464l42.336,52.976 - v-49.632c0-4.224,3.696-8.848,8.064-8.848c4.608,0,9.072,4.624,9.072,8.848v72.016c0,5.648-3.456,7.792-6.784,8.832 - c-4.464,0-6.656-1.024-10.352-4.464l-42.336-53.744v49.392c0,5.648-3.456,8.832-8.064,8.832s-8.704-3.184-8.704-8.832v-70.752 - H178.976z"/> - <path style="fill:#FFFFFF;" d="M351.44,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 - c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 - c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 - C354.624,369.552,353.616,371.712,351.44,374.16z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M92.816,303.152c0-4.224,3.312-8.848,8.688-8.848h29.568c16.624,0,31.6,11.136,31.6,32.496 + c0,20.224-14.976,31.472-31.6,31.472H109.68v16.896c0,5.648-3.552,8.832-8.176,8.832c-4.224,0-8.688-3.184-8.688-8.832 + C92.816,375.168,92.816,303.152,92.816,303.152z M109.68,310.432v31.856h21.376c8.56,0,15.344-7.552,15.344-15.488 + c0-8.96-6.784-16.368-15.344-16.368L109.68,310.432L109.68,310.432z"/> + <path style="fill:#FFFFFF;" d="M178.976,304.432c0-4.624,1.024-9.088,7.68-9.088c4.592,0,5.632,1.152,9.072,4.464l42.336,52.976 + v-49.632c0-4.224,3.696-8.848,8.064-8.848c4.608,0,9.072,4.624,9.072,8.848v72.016c0,5.648-3.456,7.792-6.784,8.832 + c-4.464,0-6.656-1.024-10.352-4.464l-42.336-53.744v49.392c0,5.648-3.456,8.832-8.064,8.832s-8.704-3.184-8.704-8.832v-70.752 + H178.976z"/> + <path style="fill:#FFFFFF;" d="M351.44,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 + c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.808,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 + c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 + C354.624,369.552,353.616,371.712,351.44,374.16z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/ppt.svg b/public/assets/images/file-icons/ppt.svg index 51340109..c9f15706 100644 --- a/public/assets/images/file-icons/ppt.svg +++ b/public/assets/images/file-icons/ppt.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M105.456,303.152c0-4.224,3.328-8.832,8.688-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 - c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.568,8.816-8.176,8.816c-4.224,0-8.688-3.184-8.688-8.816v-72.032 - H105.456z M122.336,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H122.336z"/> - <path style="fill:#FFFFFF;" d="M191.616,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 - c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816V303.152z - M208.496,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H208.496z"/> - <path style="fill:#FFFFFF;" d="M301.68,311.472h-22.368c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 - h-21.232v64.608c0,11.12-16.896,11.392-16.896,0V311.472z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M105.456,303.152c0-4.224,3.328-8.832,8.688-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 + c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.568,8.816-8.176,8.816c-4.224,0-8.688-3.184-8.688-8.816v-72.032 + H105.456z M122.336,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H122.336z"/> + <path style="fill:#FFFFFF;" d="M191.616,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 + c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816V303.152z + M208.496,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504c0-8.944-6.784-16.368-15.36-16.368H208.496z"/> + <path style="fill:#FFFFFF;" d="M301.68,311.472h-22.368c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 + h-21.232v64.608c0,11.12-16.896,11.392-16.896,0V311.472z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/ps.svg b/public/assets/images/file-icons/ps.svg index ff7c1c2b..bffe9abd 100644 --- a/public/assets/images/file-icons/ps.svg +++ b/public/assets/images/file-icons/ps.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M149.696,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z - M166.592,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L166.592,310.432 - L166.592,310.432z"/> - <path style="fill:#FFFFFF;" d="M234.032,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 - C283.28,339.616,230.064,351.008,234.032,314.656z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M149.696,303.152c0-4.224,3.328-8.848,8.704-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.704-3.184-8.704-8.832V303.152z + M166.592,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L166.592,310.432 + L166.592,310.432z"/> + <path style="fill:#FFFFFF;" d="M234.032,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 + C283.28,339.616,230.064,351.008,234.032,314.656z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/psd.svg b/public/assets/images/file-icons/psd.svg index a0716411..e0457492 100644 --- a/public/assets/images/file-icons/psd.svg +++ b/public/assets/images/file-icons/psd.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M100,303.152c0-4.224,3.328-8.848,8.688-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 - c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.688-3.184-8.688-8.832V303.152z - M116.88,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L116.88,310.432L116.88,310.432z - "/> - <path style="fill:#FFFFFF;" d="M184.32,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 - c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 - C233.568,339.616,180.336,351.008,184.32,314.656z"/> - <path style="fill:#FFFFFF;" d="M278.24,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 - C366,295.472,364.72,384,308.688,384H278.24z M286.304,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H286.304z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M100,303.152c0-4.224,3.328-8.848,8.688-8.848h29.552c16.64,0,31.616,11.136,31.616,32.496 + c0,20.224-14.976,31.472-31.616,31.472h-21.36v16.896c0,5.648-3.584,8.832-8.192,8.832c-4.224,0-8.688-3.184-8.688-8.832V303.152z + M116.88,310.432v31.856h21.36c8.576,0,15.36-7.552,15.36-15.488c0-8.96-6.784-16.368-15.36-16.368L116.88,310.432L116.88,310.432z + "/> + <path style="fill:#FFFFFF;" d="M184.32,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,42.992c-0.896,32.496-47.968,33.264-65.632,18.672 + c-4.24-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.024-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 + C233.568,339.616,180.336,351.008,184.32,314.656z"/> + <path style="fill:#FFFFFF;" d="M278.24,384c-4.224,0-8.832-2.32-8.832-7.936v-72.656c0-4.608,4.608-7.936,8.832-7.936h29.296 + C366,295.472,364.72,384,308.688,384H278.24z M286.304,311.072v57.312h21.232c34.544,0,36.08-57.312,0-57.312H286.304z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/raw.svg b/public/assets/images/file-icons/raw.svg index 6a5e37a0..c9d7f60a 100644 --- a/public/assets/images/file-icons/raw.svg +++ b/public/assets/images/file-icons/raw.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M94.912,375.68c0,11.12-17.024,11.504-17.024,0.256V303.28c0-4.48,3.472-7.808,7.68-7.808H119.6 - c32.48,0,39.136,43.504,12.016,54.368l17.008,20.72c6.656,9.856-6.64,19.312-14.336,9.6l-19.312-27.632H94.912V375.68z - M94.912,337.808H119.6c16.624,0,17.664-26.864,0-26.864H94.912V337.808z"/> - <path style="fill:#FFFFFF;" d="M162.624,384c-4.096-2.32-6.656-6.912-4.096-12.288l36.704-71.76c3.456-6.784,12.672-7.04,15.872,0 - l36.064,71.76c5.248,9.968-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C171.952,384,167.216,384.912,162.624,384z - M217.632,351.504l-14.448-31.6l-15.728,31.6H217.632z"/> - <path style="fill:#FFFFFF;" d="M341.248,353.424l19.056-52.704c3.84-10.352,19.312-5.504,15.488,5.632l-25.328,68.704 - c-2.32,7.296-4.48,9.472-8.832,9.472c-4.608,0-6.016-2.832-8.576-7.424L310.8,326.576l-21.248,49.76 - c-2.304,5.36-4.464,8.432-9.072,8.432c-4.464,0-6.784-3.072-8.832-8.704l-24.816-69.712c-3.84-11.504,12.4-15.728,15.728-5.632 - l18.944,52.704l22.64-52.704c3.056-7.808,11.12-8.192,14.448-0.368L341.248,353.424z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M94.912,375.68c0,11.12-17.024,11.504-17.024,0.256V303.28c0-4.48,3.472-7.808,7.68-7.808H119.6 + c32.48,0,39.136,43.504,12.016,54.368l17.008,20.72c6.656,9.856-6.64,19.312-14.336,9.6l-19.312-27.632H94.912V375.68z + M94.912,337.808H119.6c16.624,0,17.664-26.864,0-26.864H94.912V337.808z"/> + <path style="fill:#FFFFFF;" d="M162.624,384c-4.096-2.32-6.656-6.912-4.096-12.288l36.704-71.76c3.456-6.784,12.672-7.04,15.872,0 + l36.064,71.76c5.248,9.968-10.24,17.904-14.832,7.936l-5.648-11.264h-47.2l-5.504,11.264C171.952,384,167.216,384.912,162.624,384z + M217.632,351.504l-14.448-31.6l-15.728,31.6H217.632z"/> + <path style="fill:#FFFFFF;" d="M341.248,353.424l19.056-52.704c3.84-10.352,19.312-5.504,15.488,5.632l-25.328,68.704 + c-2.32,7.296-4.48,9.472-8.832,9.472c-4.608,0-6.016-2.832-8.576-7.424L310.8,326.576l-21.248,49.76 + c-2.304,5.36-4.464,8.432-9.072,8.432c-4.464,0-6.784-3.072-8.832-8.704l-24.816-69.712c-3.84-11.504,12.4-15.728,15.728-5.632 + l18.944,52.704l22.64-52.704c3.056-7.808,11.12-8.192,14.448-0.368L341.248,353.424z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/sql.svg b/public/assets/images/file-icons/sql.svg index 37bd1cf9..2404deec 100644 --- a/public/assets/images/file-icons/sql.svg +++ b/public/assets/images/file-icons/sql.svg @@ -1,55 +1,55 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M98.128,314.672c2.944-24.832,40.416-29.296,58.064-15.728c8.704,7.024-0.496,18.16-8.192,12.528 - c-9.456-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.208,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 - c-4.224-3.456-4.096-9.072-1.776-12.544c3.312-3.312,7.024-4.464,11.376-0.88c10.496,7.152,37.488,12.528,39.408-5.648 - C147.376,339.632,94.16,351.008,98.128,314.672z"/> - <path style="fill:#FFFFFF;" d="M265.488,369.424l2.048,2.416c8.432,7.68-2.56,20.224-11.136,12.16l-4.336-3.44 - c-6.656,4.592-14.448,6.784-24.816,6.784c-22.512,0-48.24-15.504-48.24-46.976s25.584-47.456,48.24-47.456 - c23.776,0,47.072,15.984,47.072,47.456C274.32,352.528,271.232,361.504,265.488,369.424z M257.792,340.368 - c0-20.336-15.984-30.688-30.56-30.688c-15.728,0-31.216,10.336-31.216,30.688c0,15.504,13.168,30.208,31.216,30.208 - c4.592,0,9.072-1.152,13.552-2.304l-14.576-13.44c-6.784-8.192,3.968-19.84,12.528-12.288l14.464,14.448 - C256.384,352.528,257.792,347.024,257.792,340.368z"/> - <path style="fill:#FFFFFF;" d="M293.168,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.792v-73.056H293.168z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F15642;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M98.128,314.672c2.944-24.832,40.416-29.296,58.064-15.728c8.704,7.024-0.496,18.16-8.192,12.528 + c-9.456-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.208,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 + c-4.224-3.456-4.096-9.072-1.776-12.544c3.312-3.312,7.024-4.464,11.376-0.88c10.496,7.152,37.488,12.528,39.408-5.648 + C147.376,339.632,94.16,351.008,98.128,314.672z"/> + <path style="fill:#FFFFFF;" d="M265.488,369.424l2.048,2.416c8.432,7.68-2.56,20.224-11.136,12.16l-4.336-3.44 + c-6.656,4.592-14.448,6.784-24.816,6.784c-22.512,0-48.24-15.504-48.24-46.976s25.584-47.456,48.24-47.456 + c23.776,0,47.072,15.984,47.072,47.456C274.32,352.528,271.232,361.504,265.488,369.424z M257.792,340.368 + c0-20.336-15.984-30.688-30.56-30.688c-15.728,0-31.216,10.336-31.216,30.688c0,15.504,13.168,30.208,31.216,30.208 + c4.592,0,9.072-1.152,13.552-2.304l-14.576-13.44c-6.784-8.192,3.968-19.84,12.528-12.288l14.464,14.448 + C256.384,352.528,257.792,347.024,257.792,340.368z"/> + <path style="fill:#FFFFFF;" d="M293.168,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.792v-73.056H293.168z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/svg.svg b/public/assets/images/file-icons/svg.svg index 5a05dcfd..ca692289 100644 --- a/public/assets/images/file-icons/svg.svg +++ b/public/assets/images/file-icons/svg.svg @@ -1,55 +1,55 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M96.816,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.312,42.992c-0.896,32.496-47.984,33.264-65.648,18.672 - c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.04-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 - C146.064,339.616,92.848,351.008,96.816,314.656z"/> - <path style="fill:#FFFFFF;" d="M209.12,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 - l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04L226,378.256 - C223.056,386.32,213.984,388.224,209.12,378.256z"/> - <path style="fill:#FFFFFF;" d="M345.76,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 - c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.792,7.664-3.456,19.056-11.12,12.288 - c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 - c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 - C348.96,369.552,347.936,371.712,345.76,374.16z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#F7B84E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M96.816,314.656c2.944-24.816,40.416-29.28,58.08-15.712c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6.016-30.96-8.832-33.648,4.464c-3.456,20.992,52.192,8.976,51.312,42.992c-0.896,32.496-47.984,33.264-65.648,18.672 + c-4.224-3.44-4.096-9.056-1.792-12.528c3.328-3.312,7.04-4.464,11.392-0.896c10.48,7.168,37.488,12.544,39.392-5.648 + C146.064,339.616,92.848,351.008,96.816,314.656z"/> + <path style="fill:#FFFFFF;" d="M209.12,378.256l-33.776-70.752c-4.992-10.112,10.112-18.416,15.728-7.808l11.392,25.712 + l14.704,33.776l14.448-33.776l11.392-25.712c5.12-9.712,19.952-3.584,15.616,7.04L226,378.256 + C223.056,386.32,213.984,388.224,209.12,378.256z"/> + <path style="fill:#FFFFFF;" d="M345.76,374.16c-9.088,7.536-20.224,10.752-31.472,10.752c-26.88,0-45.936-15.36-45.936-45.808 + c0-25.84,20.096-45.92,47.072-45.92c10.112,0,21.232,3.456,29.168,11.264c7.792,7.664-3.456,19.056-11.12,12.288 + c-4.736-4.624-11.392-8.064-18.048-8.064c-15.472,0-30.432,12.4-30.432,30.432c0,18.944,12.528,30.448,29.296,30.448 + c7.792,0,14.448-2.304,19.184-5.76V348.08h-19.184c-11.392,0-10.24-15.632,0-15.632h25.584c4.736,0,9.072,3.6,9.072,7.568v27.248 + C348.96,369.552,347.936,371.712,345.76,374.16z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/tif.svg b/public/assets/images/file-icons/tif.svg index 174e2763..6527fe7d 100644 --- a/public/assets/images/file-icons/tif.svg +++ b/public/assets/images/file-icons/tif.svg @@ -1,50 +1,50 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M155.824,311.472H133.44c-11.12,0-11.12-16.368,0-16.368h60.512c11.376,0,11.376,16.368,0,16.368 - H172.72v64.592c0,11.12-16.896,11.392-16.896,0C155.824,376.064,155.824,311.472,155.824,311.472z"/> - <path style="fill:#FFFFFF;" d="M217.536,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" - /> - <path style="fill:#FFFFFF;" d="M273.712,312.096v20.336h32.608c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 - h-32.608v26.864c0,4.48-3.2,7.936-7.68,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 - c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688h-37.232V312.096z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#A066AA;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M155.824,311.472H133.44c-11.12,0-11.12-16.368,0-16.368h60.512c11.376,0,11.376,16.368,0,16.368 + H172.72v64.592c0,11.12-16.896,11.392-16.896,0C155.824,376.064,155.824,311.472,155.824,311.472z"/> + <path style="fill:#FFFFFF;" d="M217.536,303.152c0-10.496,16.896-10.88,16.896,0v73.024c0,10.624-16.896,10.88-16.896,0V303.152z" + /> + <path style="fill:#FFFFFF;" d="M273.712,312.096v20.336h32.608c4.608,0,9.216,4.608,9.216,9.088c0,4.224-4.608,7.664-9.216,7.664 + h-32.608v26.864c0,4.48-3.2,7.936-7.68,7.936c-5.632,0-9.072-3.456-9.072-7.936v-72.656c0-4.608,3.456-7.936,9.072-7.936h44.912 + c5.632,0,8.96,3.328,8.96,7.936c0,4.096-3.328,8.688-8.96,8.688h-37.232V312.096z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/txt.svg b/public/assets/images/file-icons/txt.svg index bbaf6939..f05b33ba 100644 --- a/public/assets/images/file-icons/txt.svg +++ b/public/assets/images/file-icons/txt.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M132.784,311.472H110.4c-11.136,0-11.136-16.368,0-16.368h60.512c11.392,0,11.392,16.368,0,16.368 - h-21.248v64.592c0,11.12-16.896,11.392-16.896,0v-64.592H132.784z"/> - <path style="fill:#FFFFFF;" d="M224.416,326.176l22.272-27.888c6.656-8.688,19.568,2.432,12.288,10.752 - c-7.68,9.088-15.728,18.944-23.424,29.024l26.112,32.496c7.024,9.6-7.04,18.816-13.952,9.344l-23.536-30.192l-23.152,30.832 - c-6.528,9.328-20.992-1.152-13.68-9.856l25.696-32.624c-8.048-10.096-15.856-19.936-23.664-29.024 - c-8.064-9.6,6.912-19.44,12.784-10.48L224.416,326.176z"/> - <path style="fill:#FFFFFF;" d="M298.288,311.472H275.92c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 - h-21.232v64.592c0,11.12-16.896,11.392-16.896,0V311.472z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#576D7E;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M132.784,311.472H110.4c-11.136,0-11.136-16.368,0-16.368h60.512c11.392,0,11.392,16.368,0,16.368 + h-21.248v64.592c0,11.12-16.896,11.392-16.896,0v-64.592H132.784z"/> + <path style="fill:#FFFFFF;" d="M224.416,326.176l22.272-27.888c6.656-8.688,19.568,2.432,12.288,10.752 + c-7.68,9.088-15.728,18.944-23.424,29.024l26.112,32.496c7.024,9.6-7.04,18.816-13.952,9.344l-23.536-30.192l-23.152,30.832 + c-6.528,9.328-20.992-1.152-13.68-9.856l25.696-32.624c-8.048-10.096-15.856-19.936-23.664-29.024 + c-8.064-9.6,6.912-19.44,12.784-10.48L224.416,326.176z"/> + <path style="fill:#FFFFFF;" d="M298.288,311.472H275.92c-11.136,0-11.136-16.368,0-16.368h60.496c11.392,0,11.392,16.368,0,16.368 + h-21.232v64.592c0,11.12-16.896,11.392-16.896,0V311.472z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/wmv.svg b/public/assets/images/file-icons/wmv.svg index 5a03f483..bb1a919a 100644 --- a/public/assets/images/file-icons/wmv.svg +++ b/public/assets/images/file-icons/wmv.svg @@ -1,54 +1,54 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M153.216,353.44l19.056-52.72c3.824-10.336,19.312-5.504,15.472,5.632l-25.328,68.72 - c-2.304,7.28-4.464,9.472-8.832,9.472c-4.592,0-6.016-2.832-8.56-7.44l-22.256-50.544l-21.232,49.776 - c-2.32,5.36-4.464,8.432-9.088,8.432c-4.464,0-6.784-3.072-8.816-8.704l-24.816-69.728c-3.84-11.504,12.4-15.712,15.712-5.632 - l18.944,52.72l22.656-52.72c3.056-7.792,11.12-8.192,14.432-0.368L153.216,353.44z"/> - <path style="fill:#FFFFFF;" d="M219.744,327.84v47.344c0,5.632-4.608,8.816-9.2,8.816c-4.096,0-7.68-3.184-7.68-8.816v-72.032 - c0-6.656,5.648-8.832,7.68-8.832c3.696,0,5.872,2.176,8.048,4.608l28.16,38l29.152-39.408c4.24-5.248,14.592-3.2,14.592,5.632 - v72.032c0,5.632-3.6,8.816-7.68,8.816c-4.592,0-8.192-3.184-8.192-8.816V327.84l-21.232,26.88c-4.592,5.632-10.352,5.632-14.576,0 - L219.744,327.84z"/> - <path style="fill:#FFFFFF;" d="M339.776,378.256L306,307.504c-4.992-10.096,10.112-18.4,15.728-7.792l11.392,25.696l14.704,33.776 - l14.448-33.776l11.392-25.696c5.12-9.728,19.952-3.584,15.616,7.04l-32.624,71.504C353.712,386.32,344.64,388.224,339.776,378.256z - "/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M153.216,353.44l19.056-52.72c3.824-10.336,19.312-5.504,15.472,5.632l-25.328,68.72 + c-2.304,7.28-4.464,9.472-8.832,9.472c-4.592,0-6.016-2.832-8.56-7.44l-22.256-50.544l-21.232,49.776 + c-2.32,5.36-4.464,8.432-9.088,8.432c-4.464,0-6.784-3.072-8.816-8.704l-24.816-69.728c-3.84-11.504,12.4-15.712,15.712-5.632 + l18.944,52.72l22.656-52.72c3.056-7.792,11.12-8.192,14.432-0.368L153.216,353.44z"/> + <path style="fill:#FFFFFF;" d="M219.744,327.84v47.344c0,5.632-4.608,8.816-9.2,8.816c-4.096,0-7.68-3.184-7.68-8.816v-72.032 + c0-6.656,5.648-8.832,7.68-8.832c3.696,0,5.872,2.176,8.048,4.608l28.16,38l29.152-39.408c4.24-5.248,14.592-3.2,14.592,5.632 + v72.032c0,5.632-3.6,8.816-7.68,8.816c-4.592,0-8.192-3.184-8.192-8.816V327.84l-21.232,26.88c-4.592,5.632-10.352,5.632-14.576,0 + L219.744,327.84z"/> + <path style="fill:#FFFFFF;" d="M339.776,378.256L306,307.504c-4.992-10.096,10.112-18.4,15.728-7.792l11.392,25.696l14.704,33.776 + l14.448-33.776l11.392-25.696c5.12-9.728,19.952-3.584,15.616,7.04l-32.624,71.504C353.712,386.32,344.64,388.224,339.776,378.256z + "/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/xls.svg b/public/assets/images/file-icons/xls.svg index 325f9742..86989e7c 100644 --- a/public/assets/images/file-icons/xls.svg +++ b/public/assets/images/file-icons/xls.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M144.336,326.192l22.256-27.888c6.656-8.704,19.584,2.416,12.288,10.736 - c-7.664,9.088-15.728,18.944-23.408,29.04l26.096,32.496c7.04,9.6-7.024,18.8-13.936,9.328l-23.552-30.192l-23.152,30.848 - c-6.528,9.328-20.992-1.152-13.696-9.856l25.712-32.624c-8.064-10.112-15.872-19.952-23.664-29.04 - c-8.048-9.6,6.912-19.44,12.8-10.464L144.336,326.192z"/> - <path style="fill:#FFFFFF;" d="M197.36,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752H205.44c-4.48,0-8.064-3.184-8.064-7.792v-73.056H197.36z"/> - <path style="fill:#FFFFFF;" d="M272.032,314.672c2.944-24.832,40.416-29.296,58.08-15.728c8.704,7.024-0.512,18.16-8.192,12.528 - c-9.472-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 - c-4.24-3.456-4.096-9.072-1.792-12.544c3.328-3.312,7.024-4.464,11.392-0.88c10.48,7.152,37.488,12.528,39.392-5.648 - C321.28,339.632,268.064,351.008,272.032,314.672z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M144.336,326.192l22.256-27.888c6.656-8.704,19.584,2.416,12.288,10.736 + c-7.664,9.088-15.728,18.944-23.408,29.04l26.096,32.496c7.04,9.6-7.024,18.8-13.936,9.328l-23.552-30.192l-23.152,30.848 + c-6.528,9.328-20.992-1.152-13.696-9.856l25.712-32.624c-8.064-10.112-15.872-19.952-23.664-29.04 + c-8.048-9.6,6.912-19.44,12.8-10.464L144.336,326.192z"/> + <path style="fill:#FFFFFF;" d="M197.36,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752H205.44c-4.48,0-8.064-3.184-8.064-7.792v-73.056H197.36z"/> + <path style="fill:#FFFFFF;" d="M272.032,314.672c2.944-24.832,40.416-29.296,58.08-15.728c8.704,7.024-0.512,18.16-8.192,12.528 + c-9.472-6-30.96-8.816-33.648,4.464c-3.456,20.992,52.192,8.976,51.296,43.008c-0.896,32.496-47.968,33.248-65.632,18.672 + c-4.24-3.456-4.096-9.072-1.792-12.544c3.328-3.312,7.024-4.464,11.392-0.88c10.48,7.152,37.488,12.528,39.392-5.648 + C321.28,339.632,268.064,351.008,272.032,314.672z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/xml.svg b/public/assets/images/file-icons/xml.svg index 12d4f2ef..0ff9e4b7 100644 --- a/public/assets/images/file-icons/xml.svg +++ b/public/assets/images/file-icons/xml.svg @@ -1,53 +1,53 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M131.28,326.176l22.272-27.888c6.64-8.688,19.568,2.432,12.288,10.752 - c-7.664,9.088-15.728,18.944-23.424,29.024l26.112,32.496c7.024,9.6-7.04,18.816-13.952,9.344l-23.536-30.192l-23.152,30.832 - c-6.528,9.328-20.992-1.152-13.68-9.856l25.712-32.624c-8.064-10.096-15.872-19.936-23.664-29.024 - c-8.064-9.6,6.912-19.44,12.784-10.48L131.28,326.176z"/> - <path style="fill:#FFFFFF;" d="M201.264,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 - c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 - v72.016c0,5.648-3.584,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 - c-4.592,5.648-10.352,5.648-14.576,0L201.264,327.84z"/> - <path style="fill:#FFFFFF;" d="M294.288,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 - c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H294.288z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#50BEE8;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M131.28,326.176l22.272-27.888c6.64-8.688,19.568,2.432,12.288,10.752 + c-7.664,9.088-15.728,18.944-23.424,29.024l26.112,32.496c7.024,9.6-7.04,18.816-13.952,9.344l-23.536-30.192l-23.152,30.832 + c-6.528,9.328-20.992-1.152-13.68-9.856l25.712-32.624c-8.064-10.096-15.872-19.936-23.664-29.024 + c-8.064-9.6,6.912-19.44,12.784-10.48L131.28,326.176z"/> + <path style="fill:#FFFFFF;" d="M201.264,327.84v47.328c0,5.648-4.608,8.832-9.2,8.832c-4.096,0-7.68-3.184-7.68-8.832v-72.016 + c0-6.656,5.648-8.848,7.68-8.848c3.696,0,5.872,2.192,8.048,4.624l28.16,37.984l29.152-39.408c4.24-5.232,14.592-3.2,14.592,5.648 + v72.016c0,5.648-3.584,8.832-7.664,8.832c-4.608,0-8.192-3.184-8.192-8.832V327.84l-21.248,26.864 + c-4.592,5.648-10.352,5.648-14.576,0L201.264,327.84z"/> + <path style="fill:#FFFFFF;" d="M294.288,303.152c0-4.224,3.584-7.808,8.064-7.808c4.096,0,7.552,3.6,7.552,7.808v64.096h34.8 + c12.528,0,12.8,16.752,0,16.752h-42.336c-4.48,0-8.064-3.184-8.064-7.808v-73.04H294.288z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/file-icons/zip.svg b/public/assets/images/file-icons/zip.svg index 9aaaf6ba..9da6c239 100644 --- a/public/assets/images/file-icons/zip.svg +++ b/public/assets/images/file-icons/zip.svg @@ -1,51 +1,51 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> -<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> -<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> -<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> -<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 - V416z"/> -<g> - <path style="fill:#FFFFFF;" d="M132.64,384c-8.064,0-11.264-7.792-6.656-13.296l45.552-60.512h-37.76 - c-11.12,0-10.224-15.712,0-15.712h51.568c9.712,0,12.528,9.184,5.632,16.624l-43.632,56.656h41.584 - c10.24,0,11.52,16.256-1.008,16.256h-55.28V384z"/> - <path style="fill:#FFFFFF;" d="M212.048,303.152c0-10.496,16.896-10.88,16.896,0v73.04c0,10.608-16.896,10.88-16.896,0V303.152z"/> - <path style="fill:#FFFFFF;" d="M251.616,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 - c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816 - L251.616,303.152L251.616,303.152z M268.496,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504 - c0-8.944-6.784-16.368-15.36-16.368H268.496z"/> -</g> -<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -<g> -</g> -</svg> +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path style="fill:#E2E5E7;" d="M128,0c-17.6,0-32,14.4-32,32v448c0,17.6,14.4,32,32,32h320c17.6,0,32-14.4,32-32V128L352,0H128z"/> +<path style="fill:#B0B7BD;" d="M384,128h96L352,0v96C352,113.6,366.4,128,384,128z"/> +<polygon style="fill:#CAD1D8;" points="480,224 384,128 480,128 "/> +<path style="fill:#84BD5A;" d="M416,416c0,8.8-7.2,16-16,16H48c-8.8,0-16-7.2-16-16V256c0-8.8,7.2-16,16-16h352c8.8,0,16,7.2,16,16 + V416z"/> +<g> + <path style="fill:#FFFFFF;" d="M132.64,384c-8.064,0-11.264-7.792-6.656-13.296l45.552-60.512h-37.76 + c-11.12,0-10.224-15.712,0-15.712h51.568c9.712,0,12.528,9.184,5.632,16.624l-43.632,56.656h41.584 + c10.24,0,11.52,16.256-1.008,16.256h-55.28V384z"/> + <path style="fill:#FFFFFF;" d="M212.048,303.152c0-10.496,16.896-10.88,16.896,0v73.04c0,10.608-16.896,10.88-16.896,0V303.152z"/> + <path style="fill:#FFFFFF;" d="M251.616,303.152c0-4.224,3.328-8.832,8.704-8.832h29.552c16.64,0,31.616,11.136,31.616,32.48 + c0,20.224-14.976,31.488-31.616,31.488h-21.36v16.896c0,5.632-3.584,8.816-8.192,8.816c-4.224,0-8.704-3.184-8.704-8.816 + L251.616,303.152L251.616,303.152z M268.496,310.432v31.872h21.36c8.576,0,15.36-7.568,15.36-15.504 + c0-8.944-6.784-16.368-15.36-16.368H268.496z"/> +</g> +<path style="fill:#CAD1D8;" d="M400,432H96v16h304c8.8,0,16-7.2,16-16v-16C416,424.8,408.8,432,400,432z"/> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/public/assets/images/logo-ci.png b/public/assets/images/logo-ci.png deleted file mode 100644 index 5157ea11a163b1a14412ce835280e46ddf37bf0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7870 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 From 3d704a6e06a17360d4be4eee3123be364dcb2bcd Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Mon, 25 Sep 2023 13:15:22 +0530 Subject: [PATCH 11/17] sanjeev --- public/uploads/default.ico | Bin 0 -> 392030 bytes public/uploads/default.png | Bin 0 -> 2270 bytes public/uploads/default_logo.png | Bin 0 -> 160206 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/uploads/default.ico create mode 100644 public/uploads/default.png create mode 100644 public/uploads/default_logo.png diff --git a/public/uploads/default.ico b/public/uploads/default.ico new file mode 100644 index 0000000000000000000000000000000000000000..1418270522941356aebe4f33b3a6d4b11505c69f GIT binary patch literal 392030 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 U_aCEZ3&WuPZeJ&UrThN>0wQDZQ2+n{ literal 0 HcmV?d00001 diff --git a/public/uploads/default.png b/public/uploads/default.png new file mode 100644 index 0000000000000000000000000000000000000000..8118ecade87c20ba9dfe160b67c5db0a1be3ff0a GIT binary patch literal 2270 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 GqyGl2<0G~J literal 0 HcmV?d00001 diff --git a/public/uploads/default_logo.png b/public/uploads/default_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ca12970b002070f07009253c687be9fd5d18fdd0 GIT binary patch literal 160206 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 P5wC^53(kHTy!(Fu$h0pU literal 0 HcmV?d00001 From de10490b4e23f7c66d065f1cbe33f489f81317f2 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Mon, 25 Sep 2023 13:47:49 +0530 Subject: [PATCH 12/17] sanjeev --- app/Controllers/Authentication.php | 4 ++-- app/Views/auth_lock_screen.php | 4 ++-- app/Views/template/header.php | 6 ++++-- app/Views/template/topbar.php | 6 ++++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/Controllers/Authentication.php b/app/Controllers/Authentication.php index 699f3af7..78392676 100755 --- a/app/Controllers/Authentication.php +++ b/app/Controllers/Authentication.php @@ -264,8 +264,8 @@ class Authentication extends BaseController $details = $auth_model->getheringDetailsForHeader($session_uid); $data['loggedin_person'] = $session_uname; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = $details[0]['favicon']; - $data['profile_picture'] = $details[0]['profile_picture']; + $data['favicon'] = file_exists(base_url()."public/uploads/".$details[0]['favicon']) ? base_url()."public/uploads/".$details[0]['favicon'] : base_url()."public/uploads/default.ico"; + $data['profile_picture'] = file_exists(base_url()."public/uploads/".$details[0]['profile_picture']) ? base_url()."public/uploads/".$details[0]['profile_picture'] : base_url()."public/assets/images/users/avatar-9.jpg"; $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); // Load and display the form view with the above data diff --git a/app/Views/auth_lock_screen.php b/app/Views/auth_lock_screen.php index 2302b587..953ed9ac 100644 --- a/app/Views/auth_lock_screen.php +++ b/app/Views/auth_lock_screen.php @@ -8,7 +8,7 @@ <meta content="Coderthemes" name="author" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- App favicon --> - <link rel="shortcut icon" href="<?= base_url() . "public/uploads/default.ico" ?>"> + <link rel="shortcut icon" href="<?= $favicon; ?>"> <!-- App css --> <link href="<?= base_url() . "public/assets/css/bootstrap.min.css" ?>" rel="stylesheet" type="text/css" id="bs-default-stylesheet" /> <link href="<?= base_url() . "public/assets/css/app.min.css" ?>" rel="stylesheet" type="text/css" id="app-default-stylesheet" /> @@ -48,7 +48,7 @@ </div> <div class="text-center w-75 m-auto"> - <img src="<?= base_url()."public/assets/images/users/".$profile_picture; ?>" alt="user-image" class="rounded-circle avatar-lg img-thumbnail"> + <img src="<?= $profile_picture; ?>" alt="user-image" class="rounded-circle avatar-lg img-thumbnail"> <h4 class="text-dark-50 text-center mt-3"><?= 'Hi ! '.$loggedin_person; ?></h4> <p class="text-muted mb-4">Enter your password to access the <?= $loggedin_person_role; ?></p> </div> diff --git a/app/Views/template/header.php b/app/Views/template/header.php index 61ad4076..e2a2ccc5 100644 --- a/app/Views/template/header.php +++ b/app/Views/template/header.php @@ -49,7 +49,8 @@ <!-- <span class="logo-lg-text-light">Minton</span> --> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> --> <!-- <span class="logo-lg-text-light">M</span> --> </span> </a> @@ -59,7 +60,8 @@ <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> + <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> --> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> </span> </a> </div> diff --git a/app/Views/template/topbar.php b/app/Views/template/topbar.php index 1db176d2..37fa1f4d 100644 --- a/app/Views/template/topbar.php +++ b/app/Views/template/topbar.php @@ -276,7 +276,8 @@ <!-- <span class="logo-lg-text-light">Minton</span> --> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> --> <!-- <span class="logo-lg-text-light">M</span> --> </span> </a> @@ -286,7 +287,8 @@ <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> + <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> --> + <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> </span> </a> </div> From c1a0c5b1a9215ea7c5d745cb5810a65f314d1e89 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Tue, 26 Sep 2023 16:40:20 +0530 Subject: [PATCH 13/17] bug fixes : ps --- app/Controllers/Authentication.php | 9 +- app/Controllers/BaseController.php | 4 +- app/Controllers/Users.php | 165 ++++++++++++++++++++--------- app/Models/AuthenticationModel.php | 2 +- app/Views/template/footer.php | 4 +- app/Views/user_form.php | 110 +++++++++---------- app/Views/user_list.php | 2 +- public/uploads/default.ico | Bin public/uploads/default.png | Bin public/uploads/default_logo.png | Bin 10 files changed, 176 insertions(+), 120 deletions(-) mode change 100644 => 100755 public/uploads/default.ico mode change 100644 => 100755 public/uploads/default.png mode change 100644 => 100755 public/uploads/default_logo.png diff --git a/app/Controllers/Authentication.php b/app/Controllers/Authentication.php index 78392676..02a87ca0 100755 --- a/app/Controllers/Authentication.php +++ b/app/Controllers/Authentication.php @@ -36,7 +36,7 @@ class Authentication extends BaseController $username = $this->request->getPost('username'); $password = $this->request->getPost('password'); - $user = $auth_model->where('email', $username)->first(); + $user = $auth_model->where(['email'=>$username,'isactive'=>1])->first(); // $this->logger->info("Authenticate: Function Called."); if (is_null($user)) { @@ -260,12 +260,13 @@ class Authentication extends BaseController $session_uid = get_logged_user_id(); $session_uname = get_logged_name(); $auth_model = new AuthenticationModel(); - + + $details = $auth_model->getheringDetailsForHeader($session_uid); $data['loggedin_person'] = $session_uname; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = file_exists(base_url()."public/uploads/".$details[0]['favicon']) ? base_url()."public/uploads/".$details[0]['favicon'] : base_url()."public/uploads/default.ico"; - $data['profile_picture'] = file_exists(base_url()."public/uploads/".$details[0]['profile_picture']) ? base_url()."public/uploads/".$details[0]['profile_picture'] : base_url()."public/assets/images/users/avatar-9.jpg"; + $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); + $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); // Load and display the form view with the above data diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index f9eba771..b88adb39 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -74,8 +74,8 @@ abstract class BaseController extends Controller $data['loggedin_person'] = $session_uname; $data['loggedin_person_id'] = $session_uid; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = file_exists(base_url()."public/uploads/".$details[0]['favicon']) ? base_url()."public/uploads/".$details[0]['favicon'] : base_url()."public/uploads/default.ico"; - $data['profile_picture'] = file_exists(base_url()."public/uploads/".$details[0]['profile_picture']) ? base_url()."public/uploads/".$details[0]['profile_picture'] : base_url()."public/assets/images/users/avatar-9.jpg"; + $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); + $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); $data['browser_title'] = $data['company_name'] . ' | ' . $data['company_short_name'] . ' ' . $data['page_name']; $data['heading'] = $data['page_name'] == "Dashboard" ? 'Welcome to ' . $data['company_name'] : ""; echo view('template/header.php', $data); diff --git a/app/Controllers/Users.php b/app/Controllers/Users.php index a60396cf..c4df248a 100755 --- a/app/Controllers/Users.php +++ b/app/Controllers/Users.php @@ -12,17 +12,21 @@ class Users extends BaseController public function index() { helper('session'); + $session_role = get_user_role(); $session_bid = get_business_id(); if (!empty($session_role) && $session_role !== "sadmin") { + $this->logger->info("Users: Listing In admin role ."); $where = ['users.business_id' => (int)$session_bid, 'users.isactive' => 1]; } else { + $this->logger->info("Users: Listing In Super-admin role ."); $where = ['users.isactive !=' => NULL]; } $model = new UsersModel(); $model->setTable('users'); $user_details = $model->where($where)->orderBy('user_id', 'DESC')->findAll(); + $this->logger->info("Users: Listing Count .".count($user_details)); $data['page_name'] = 'User Details'; $data['details'] = $user_details; $this->render_page('user_list', $data); @@ -35,9 +39,11 @@ class Users extends BaseController $session_role = get_user_role(); $session_bid = get_business_id(); if ($id === '0') { + $this->logger->info("Users: In Add page"); $data['page_name'] = 'Add User'; $data['details'] = []; } else if ($id !== '0') { + $this->logger->info("Users: In Edit page"); $data['page_name'] = 'Edit User'; $model = new UsersModel(); $model->setTable('users'); @@ -67,56 +73,81 @@ class Users extends BaseController ## For inserting/updating details of user public function insert_users() { - // print_r($this->request->getPost());die(); - helper('session'); - $session_uid = get_logged_user_id(); - $session_bid = get_business_id(); + $this->logger->info("Users: Inserting/Updating Details"); try { - // print_r($_FILES);die(); + ## CI validation rule for profile_picture $validationRule = [ - 'userfile' => [ + 'profile_picture' => [ 'label' => 'Image File', - 'rules' => [ - 'uploaded[profile_picture]', - 'is_image[profile_picture]', - 'mime_in[profile_picture,image/jpg,image/jpeg,image/gif,image/png,image/webp]', - - ], - ], + 'rules' => 'uploaded[profile_picture]|is_image[profile_picture]|mime_in[profile_picture,image/jpg,image/jpeg,image/gif,image/png,image/webp]' + ] ]; - if (!$this->validate($validationRule) && $this->request->getPost('profile_picture') === '') { - $error = $this->validator->getErrors(); - throw new \Exception((string)$error); - } - $img = $this->request->getFile('profile_picture'); + ## Declarions + helper('session'); + $UsersModel = new UsersModel(); + $session_uid = get_logged_user_id(); + $session_bid = get_business_id(); $user_id = $this->request->getPost('user_id'); - $business_id = $this->request->getPost('business_id'); - $filePath = 'public/uploads/' . $this->request->getPost('profile_picture'); - - ## File Already Existing or not - if ($img->isValid() && !$img->hasMoved()) { - $fileName = $img->getName(); - $img->move('public/uploads/', $fileName); - - - // Delete the previous image file if it exists - if ($user_id) { - $previousFileName = $this->request->getPost('previous_ufile'); - if ($previousFileName && is_file('public/uploads/' . $previousFileName)) { - link('public/uploads/'.$previousFileName,''); + $business_id = $this->request->getPost('business_id')?$this->request->getPost('business_id'):$session_bid; + $img_details = $this->request->getFile('profile_picture'); // Here I Have Image details ; + $final_img_name = NULL;//Just flag + $existing_img_name = $this->request->getPost('existing_profile_picture_name'); // HiddenField for if have any pic name means; + $img_path = 'public/uploads/'; + + ##Step 1 : image details available + if($img_details){ + $this->logger->info("Users: image details avaiable"); + ##Step 2 : i have image details .<br/> + if ($img_details->isValid()) { + ##Step 3 : image Name.$new_img_name."<br/>"; + $new_img_name = $img_details->getName(); // before movement name + $this->logger->info("Users: Image Name B4 Upload".$new_img_name); + ##Step 4 : Validation Rule Apply here.if not throw the error"<br/>"; + if (!$this->validate($validationRule)) { + if($new_img_name !== ''){ + + $error = $this->validator->getErrors(); + // echo "Error : ".(string)$error."<br/>"; + $this->logger->error("Users: Err on image upload".$error['profile_picture']); + throw new \Exception((string)$error['profile_picture']); + } } + ##Step 5 : Check Existing and New Image Name Same Or not same no use to move on target folder + if($new_img_name !== $existing_img_name){ + $this->logger->info("Users: Image Name are Differ".$new_img_name." & ".$existing_img_name); + ## Step 6 : Different Image Name means removed on target folder using Unlink; + if ($existing_img_name && is_file($img_path.$existing_img_name)) { + $this->logger->info("Users: already Image Available on target Folder Path : ".$img_path.$existing_img_name." So, Deleted."); + // echo "Deleted_file : ".(string)$img_path.$existing_img_name."<br/>"; + unlink($img_path.$existing_img_name); + } + ## Step 7 : Moved to target; + $img_details->move($img_path, $new_img_name); + $final_img_name = $img_details->getName(); // after movement name + $this->logger->info("Users: Image Name After Upload".$final_img_name); + }else{ + $final_img_name = $existing_img_name; + $this->logger->info("Users: Image Name are same".$new_img_name." & ".$existing_img_name." Can't Upload"); + } + } + else{ + ## Step 8 : Not a Vaild Image File so replace Existing file name; + $final_img_name = $existing_img_name; + $this->logger->info("Users: Not a Vaild Image File Nothing To Update/Upload"); + // throw new \Exception("Not a Vaild Image File"); } - } else { - $fileName = $this->request->getPost('previous_ufile')?$this->request->getPost('previous_ufile'):""; // Use the previous filename if no new image is provided + } + else{ + ## Step 9 : Testing Purpose File Details Not Available. so i can't move it.; + $this->logger->info("Users: Testing Purpose Image Details Not Available. so i can't move it."); + $final_img_name = $existing_img_name; + //throw new \Exception("Testing Purpose File Details Not Available so i can't move it if you have existing filee means save it or your choice"); } - - $UsersModel = new UsersModel(); $data = [ - 'user_name' => $this->request->getPost('user_name'), - 'profile_picture' => $fileName, + 'profile_picture' => $final_img_name, 'city' => $this->request->getPost('city'), 'state' => $this->request->getPost('state'), 'email' => $this->request->getPost('email'), @@ -131,7 +162,6 @@ class Users extends BaseController 'gender' => $this->request->getPost('gender'), 'business_id' => $business_id ]; - $user_id = $this->request->getPost('user_id'); // Get the business ID for update if (empty($user_id)) { // It's an insert operation @@ -141,19 +171,36 @@ class Users extends BaseController $data['password'] = $hash_password; $data['created_by'] = $session_uid; //print_r($data);die; - ($UsersModel->insert($data)) ? session()->setFlashdata('success', 'User has been added successfully.') - : session()->setFlashdata('error', 'User could not be added. Please try again.'); + // ($UsersModel->insert($data)) ? session()->setFlashdata('success', 'User has been added successfully.') + // : session()->setFlashdata('error', 'User could not be added. Please try again.'); + if ($UsersModel->insert($data)) { + session()->setFlashdata('success', 'User has been added successfully.'); + $this->logger->info("Users: has been added successfully. Inserted ID = ".$UsersModel->insertID()); + } else { + session()->setFlashdata('error', 'User could not be added. Please try again.'); + $this->logger->error("Users: Err could not be added. Please try again."); + } + + } else { // It's an update operation $isactive = $this->request->getPost('isactive'); $data['isactive'] = ($isactive == 'on') ? 1 : 0; + if($session_uid == $user_id && $data['isactive'] == 0){ + throw new \Exception("Cant able to Update Because logged-In persons can't remove. Please Contact your Admin!...."); + } $data['updated_by'] = $session_uid; // $UsersModel->update($user_id, $data); - ($UsersModel->update($user_id, $data)) ? session()->setFlashdata('success', 'User has been updated successfully.') - : session()->setFlashdata('error', 'User update failed. Please try again.'); - + if ($UsersModel->update($user_id, $data)) { + session()->setFlashdata('success', 'User has been updated successfully.'); + $this->logger->info("Users: has been updated successfully. Updated ID = ".$user_id); + } else { + session()->setFlashdata('error', 'User update failed. Please try again.'); + $this->logger->error("Users: Err Failed to update ID =".$user_id); + } } }catch(\Exception $e) { + $this->logger->error("Users: Err Occur =".$e->getMessage()); session()->setFlashdata('error', 'Message: ' .$e->getMessage()); } return redirect()->route('user_list'); @@ -165,19 +212,37 @@ class Users extends BaseController helper('session'); $session_uid = get_logged_user_id(); try { + if($id == $session_uid){ + throw new \Exception("Your Logged-In, Can't able delete"); + } $model = new UsersModel(); - $existingBook = $model->find($id); - if ($existingBook) { - // $data=[]; + $where = ['users.user_id' => $id, 'users.isactive =' => 1]; + $existingUser = $model->where($where)->find($id); + $this->logger->Info("Users: Going to Inactive ID = ".$id); + + if ($existingUser) { $data['isactive'] = 0; $data['updated_by'] = $session_uid; - ($model->update($id, $data)) ? session()->setFlashdata('success', 'Deleted successfully.') - : throw new \Exception("Data Not able to Deleted"); + if(!empty($existingUser['profile_picture']) && file_exists(FCPATH."public/uploads/".$existingUser['profile_picture'])){ + unlink('public/uploads/'.$existingUser['profile_picture']); + $data['profile_picture'] = NULL; + } + + + if ($model->update($id, $data)) { + session()->setFlashdata('success', 'Deleted successfully.'); + $this->logger->info("Users: has been Inactived successfully. Inactived ID = ".$id); + } else { + $this->logger->error("Users: Not able to Inactive ID =".$id); + throw new \Exception("Data Not able to Deleted"); + } } else{ - throw new \Exception("Data Not Available"); + $this->logger->error("Users: Does Not Exist To Inactive, ID = ".$id); + throw new \Exception("User Already Deleted"); } }catch(\Exception $e) { + $this->logger->error("Users: Err Occur = ".$e->getMessage()); session()->setFlashdata('error', 'Message: ' .$e->getMessage()); } return redirect()->route('user_list'); diff --git a/app/Models/AuthenticationModel.php b/app/Models/AuthenticationModel.php index e6a3a95d..2e31c064 100644 --- a/app/Models/AuthenticationModel.php +++ b/app/Models/AuthenticationModel.php @@ -11,7 +11,7 @@ class AuthenticationModel extends Model { $builder = $this->db->table('users'); $builder->select('user_id,user_name,email,first_name,last_name,password,mobile_no,date_of_birth,address,gender,profile_picture,city,state,postal_code,users.country,role,setting_id,site_name,site_title,favicon,logo,terms_service,footer_about,admin_email,mobile,copyright,pagination_limit,site_info,about_info,mail_protocol,mail_title,mail_host,mail_port,mail_encryption,mail_username,mail_password,currency,settings.country'); - $builder->join('settings', 'settings.admin_email = users.email', 'left'); + $builder->join('settings', 'settings.business_id = users.business_id', 'left'); $builder->where('user_id', $user_id); //$template_mapping_details['fk_entity_id']; $query = $builder->get(); diff --git a/app/Views/template/footer.php b/app/Views/template/footer.php index d6aa8617..428f21fc 100644 --- a/app/Views/template/footer.php +++ b/app/Views/template/footer.php @@ -466,6 +466,9 @@ <!-- Datatables init --> <script src="<?= base_url()."public/assets/js/pages/datatables.init.js" ?>"></script> + <script src="<?= base_url()."public/assets/libs/parsleyjs/parsley.min.js" ?>"></script> + <script src="<?= base_url()."public/assets/js/pages/form-validation.init.js"?>"></script> + <!-- App js --> <script src="<?= base_url()."public/assets/js/app.min.js" ?>"></script> @@ -474,7 +477,6 @@ <!-- Init js --> <script src="<?= base_url()."public/assets/js/pages/form-summernote.init.js" ?>"></script> - <script> // Automatically close both success and error messages after 5 seconds (5000 milliseconds) setTimeout(function () { diff --git a/app/Views/user_form.php b/app/Views/user_form.php index 4cb3599d..90802542 100644 --- a/app/Views/user_form.php +++ b/app/Views/user_form.php @@ -6,37 +6,36 @@ <!-- <?php if (session()->getFlashdata('success')) : ?> <div class="alert alert-success"><?= session()->getFlashdata('success') ?></div> <?php endif; ?> --> - <form class="needs-validation" novalidate action="<?= base_url() . "insert_users"; ?>" method="post" enctype="multipart/form-data"> + <form class="parsley-examples" action="<?= base_url() . "insert_users"; ?>" method="post" enctype="multipart/form-data"> <div class="form-group"> <div class="form-row"> <div class="form-group col-md-4"> <label for="user_name" class="col-form-label">User Name<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="user_name" name="user_name" value="<?= isset($details['user_name']) ? $details['user_name'] : '' ?>" placeholder="User Name" required /> - <div class="invalid-feedback"> Please provide. </div> + <input type="text" class="form-control" id="user_name" name="user_name" value="<?= isset($details['user_name']) ? $details['user_name'] : '' ?>" placeholder="User Name" required autofocus /> + </div> <div class="form-group col-md-4"> <label for="email" class="col-form-label">Email<span class="text-danger">*</span></label> <input type="email" class="form-control" id="email" name="email" placeholder="Email" value="<?= isset($details['email']) ? $details['email'] : '' ?>" required /> - <div class="invalid-feedback"> Please provide. </div> + </div> + <?php if (empty($details)) { ?> <div class="form-group col-md-4"> <label for="password" class="col-form-label">Password<span class="text-danger">*</span></label> <input type="text" class="form-control" id="password" name="password" placeholder="Password" value="<?= isset($details['password']) ? $details['password'] : '' ?>" required /> - <div class="invalid-feedback"> Please provide. </div> + </div> <?php } ?> </div> <div class="form-row"> <div class="form-group col-md-4"> <label for="first_name" class="col-form-label">First Name<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="first_name" name="first_name" placeholder="First Name" value="<?= isset($details['first_name']) ? $details['first_name'] : '' ?>" required /> - <div class="invalid-feedback"> Please provide. </div> + <input data-parsley-type="alphanum" type="text" class="form-control" id="first_name" name="first_name" placeholder="First Name" value="<?= isset($details['first_name']) ? $details['first_name'] : '' ?>" required /> </div> <div class="form-group col-md-4"> <label for="last_name" class="col-form-label">Last Name<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="last_name" name="last_name" placeholder="Last Name" value="<?= isset($details['last_name']) ? $details['last_name'] : '' ?>" required /> - <div class="invalid-feedback"> Please provide. </div> + <input data-parsley-type="alphanum" type="text" class="form-control" id="last_name" name="last_name" placeholder="Last Name" value="<?= isset($details['last_name']) ? $details['last_name'] : '' ?>" required /> </div> <div class="form-group col-md-4"> <label for="date_of_birth" class="col-form-label">Date Of Birth<span class="text-danger"></span></label> @@ -48,8 +47,8 @@ <div class="form-group col-md-4"> <label for="mobile_no" class="col-form-label">Mobile Number<span class="text-danger">*</span></label> - <input type="number" class="form-control" id="mobile_no" name="mobile_no" placeholder="Mobile Number (Enter only numbers)" required data-parsley-type="number" value="<?= isset($details['mobile_no']) ? $details['mobile_no'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> + <input data-parsley-type="number" type="text" class="form-control" id="mobile_no" name="mobile_no" placeholder="Mobile Number (Enter only numbers)" required data-parsley-type="number" value="<?= isset($details['mobile_no']) ? $details['mobile_no'] : '' ?>" pattern="[0-9]{10}" maxlength="10" autofocus /> + </div> <div class="form-group col-md-4"> @@ -58,71 +57,61 @@ </div> <div class="form-group col-md-4"> <label for="role" class="col-form-label">Role<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="role" name="role" placeholder="Role" required value="<?= isset($details['role']) ? $details['role'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> + <input type="text" class="form-control" id="role" name="role" placeholder="Role" required value="<?= isset($details['role']) ? $details['role'] : '' ?>" autofocus /> + </div> </div> - <div class="form-row"> - <div class="form-group col-md-4"> - <label for="address" class="col-form-label">Address<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="address" name="address" placeholder="Address (eg : 1234 Main St)" required value="<?= isset($details['address']) ? $details['address'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> - </div> + <div class="form-group col-md-4"> + <label for="address" class="col-form-label">Address<span class="text-danger">*</span></label> + <input type="text" class="form-control" id="address" name="address" placeholder="Address (eg : 1234 Main St)" required value="<?= isset($details['address']) ? $details['address'] : '' ?>" /> + </div> <div class="form-group col-md-4"> <label for="city" class="col-form-label">City<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="city" name="city" placeholder="City" required value="<?= isset($details['city']) ? $details['city'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> - </div> - + <input type="text" class="form-control" id="city" name="city" placeholder="City" required value="<?= isset($details['city']) ? $details['city'] : '' ?>" /> + </div> <div class="form-group col-md-4"> <label for="state" class="col-form-label">State<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="state" name="state" placeholder="State" required value="<?= isset($details['state']) ? $details['state'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> - </div> - <div class="form-group col-md-4"> - <label for="postal_code" class="col-form-label">Postal Code<span class="text-danger">*</span></label> - <input type="text" class="form-control" id="postal_code" name="postal_code" placeholder="Postal Code (PIN)" required value="<?= isset($details['postal_code']) ? $details['postal_code'] : '' ?>" /> - <div class="invalid-feedback"> Please provide. </div> - </div> - - - <?php if (!empty($details['profile_picture'])) { ?> - <div class="form-group col-md-4"> - <label for="profile_picture" class="col-form-label">Current Business Logo</label> - <img src="<?= base_url('public/uploads/' . $details['profile_picture']) ?>" alt="Business Logo" class="preview-image" /> - </div> - <?php } ?> - - - <div class="form-group col-md-4"> - <label for="profile_picture" class="col-form-label">Profile Picture<span class="text-danger">*</span></label> - - <!-- <input type="text" class="form-control" id="profile_picture" name="profile_picture" placeholder="Profile picture Name" readonly value="<?= isset($details['profile_picture']) ? $details['profile_picture'] : '' ?>" /> --> - - <input type="file" name="profile_picture" placeholder="hidden Field for profile picture" readonly value="<?= isset($details['profile_picture']) ? $details['profile_picture'] : '' ?>" /> - + <input type="text" class="form-control" id="state" name="state" placeholder="State" required value="<?= isset($details['state']) ? $details['state'] : '' ?>" /> </div> </div> + <div class="form-row"> + <div class="form-group col-md-4"> + <label for="postal_code" class="col-form-label">Postal Code<span class="text-danger">*</span></label> + <input data-parsley-type="number" type="text" class="form-control" id="postal_code" name="postal_code" placeholder="Postal Code (PIN)" required value="<?= isset($details['postal_code']) ? $details['postal_code'] : '' ?>" pattern="[0-9]{6}" maxlength="6" /> + </div> + <?php if (!empty($details['profile_picture'])) { ?> + <div class="form-group col-md-4 mt-3"> + <div class="media"> + <img src="<?= base_url('public/uploads/' . $details['profile_picture']) ?>" alt="Business Logo" height="50" class="preview-image d-flex align-self-start rounded mr-2"> + <div class="media-body"> + <h5 class="mt-0">Existing Profile Picture</h5> + <p class="mb-1"><?= $details['profile_picture']; ?></p> + <input type="hidden" id="existing_profile_picture_name" name="existing_profile_picture_name" placeholder="hidden Field for profile picture name" readonly value="<?= $details['profile_picture']; ?>" /> + </div> + </div> + </div> + <?php } ?> + <div class="form-group col-md-4"> + <label for="profile_picture" class="col-form-label">Profile Picture</label> + <input type="file" name="profile_picture" value="<?= isset($details['profile_picture']) ? $details['profile_picture'] : '' ?>" /> + </div> - <?php if ($loggedin_person_role === 'sadmin') { ?> - <div class="form-row"> - <div class="form-group col-md-6"> - <label for="postal_code" class="col-form-label">Buiness<span class="text-danger">*</span></label> - <select id="business_id" name="business_id" class="form-control"> - <option value=null>Choose your Buiness</option> + <?php if ($loggedin_person_role === 'sadmin') { ?> + <div class="form-group col-md-4"> + <label for="business_id" class="col-form-label">Buiness<span class="text-danger">*</span></label> + <select id="business_id" name="business_id" class="form-control" required> + <option value="">Choose your Buiness</option> <?php foreach ($business_details as $value) { ?> <option value="<?php echo $value['business_id']; ?>" <?php if (isset($details['business_id']) && ($details['business_id'] === $value['business_id'])) echo "selected"; ?>> <?php echo $value['title']; ?></option> <?php } ?> </select> - </div> - </div> - <?php } else { ?> - <input type="hidden" id="business_id" name="business_id" placeholder="hidden for business id" value="<?= isset($details['business_id']) ? $details['business_id'] : $session_bid ?>" /> - <?php } ?> + </div> + <?php } ?> + </div> <input type="hidden" id="user_id" name="user_id" placeholder="hidden for user id" value="<?= isset($details['user_id']) ? $details['user_id'] : '' ?>" /> <?php if (!empty($details)) { ?> <div class="form-group text-right m-b-0 checkbox checkbox-purple"> @@ -140,8 +129,7 @@ </button> <a href="<?= base_url() . "user_list"; ?>" class="btn btn-secondary waves-effect">Cancel </a> - <!-- <button id="cancelButton" type="button" class="btn btn-secondary waves-effect">Cancel</button> --> - </div> + </div> </div> </form> </div> <!-- end card-body--> diff --git a/app/Views/user_list.php b/app/Views/user_list.php index a4a453d1..5805451f 100644 --- a/app/Views/user_list.php +++ b/app/Views/user_list.php @@ -3,7 +3,7 @@ <div class="card"> <div class="card-body"> <div class="float-right"> - <a href="<?= base_url()."user_page/0"; ?>" class="btn btn-primary"><i class="ri-user-add-line"></i> Add New </a> + <a href="<?= base_url()."user_page/0"; ?>" class="btn btn-primary"><i class="ri-user-add-line"></i> Add User </a> </div><!-- end col--> <br> <h4 class="header-title mb-3"><?= $page_name; ?></h4> diff --git a/public/uploads/default.ico b/public/uploads/default.ico old mode 100644 new mode 100755 diff --git a/public/uploads/default.png b/public/uploads/default.png old mode 100644 new mode 100755 diff --git a/public/uploads/default_logo.png b/public/uploads/default_logo.png old mode 100644 new mode 100755 From 1f7915d5034cb232c03613418594d22a76976300 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Wed, 27 Sep 2023 11:28:57 +0530 Subject: [PATCH 14/17] logo fixes : ps --- app/Controllers/Authentication.php | 2 ++ app/Controllers/BaseController.php | 2 ++ app/Models/AuthenticationModel.php | 3 ++- app/Views/template/header.php | 8 ++++---- app/Views/template/topbar.php | 8 ++++---- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/Controllers/Authentication.php b/app/Controllers/Authentication.php index 02a87ca0..874c3ee8 100755 --- a/app/Controllers/Authentication.php +++ b/app/Controllers/Authentication.php @@ -267,6 +267,8 @@ class Authentication extends BaseController $data['loggedin_person_role'] = $details[0]['role']; $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); + $data['company_logo_small'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); + $data['company_logo_large'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); // Load and display the form view with the above data diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index b88adb39..9217c5af 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -76,6 +76,8 @@ abstract class BaseController extends Controller $data['loggedin_person_role'] = $details[0]['role']; $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); + $data['company_logo_small'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); + $data['company_logo_large'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); $data['browser_title'] = $data['company_name'] . ' | ' . $data['company_short_name'] . ' ' . $data['page_name']; $data['heading'] = $data['page_name'] == "Dashboard" ? 'Welcome to ' . $data['company_name'] : ""; echo view('template/header.php', $data); diff --git a/app/Models/AuthenticationModel.php b/app/Models/AuthenticationModel.php index 2e31c064..04acf241 100644 --- a/app/Models/AuthenticationModel.php +++ b/app/Models/AuthenticationModel.php @@ -10,8 +10,9 @@ class AuthenticationModel extends Model public function getheringDetailsForHeader($user_id) { $builder = $this->db->table('users'); - $builder->select('user_id,user_name,email,first_name,last_name,password,mobile_no,date_of_birth,address,gender,profile_picture,city,state,postal_code,users.country,role,setting_id,site_name,site_title,favicon,logo,terms_service,footer_about,admin_email,mobile,copyright,pagination_limit,site_info,about_info,mail_protocol,mail_title,mail_host,mail_port,mail_encryption,mail_username,mail_password,currency,settings.country'); + $builder->select('user_id,user_name,users.email,users.first_name,users.last_name,users.password,users.mobile_no,date_of_birth,users.address,gender,profile_picture,users.city,users.state,users.postal_code,users.country,role,setting_id,site_name,site_title,favicon,logo,terms_service,footer_about,admin_email,mobile,copyright,pagination_limit,site_info,about_info,mail_protocol,mail_title,mail_host,mail_port,mail_encryption,mail_username,mail_password,currency,settings.country,settings.logo as company_logo_large,business.business_logo as company_logo_small'); $builder->join('settings', 'settings.business_id = users.business_id', 'left'); + $builder->join('business', 'business.business_id = users.business_id', 'left'); $builder->where('user_id', $user_id); //$template_mapping_details['fk_entity_id']; $query = $builder->get(); diff --git a/app/Views/template/header.php b/app/Views/template/header.php index e2a2ccc5..2af77f23 100644 --- a/app/Views/template/header.php +++ b/app/Views/template/header.php @@ -45,11 +45,11 @@ <div class="logo-box"> <a href="dashboard" class="logo logo-dark text-center"> <span class="logo-sm"> - <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + <img src="<?= $company_logo_small; ?>" alt="<?= $company_short_name; ?>" height="24"> <!-- <span class="logo-lg-text-light">Minton</span> --> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <img src="<?= $company_logo_large; ?>" alt="<?= $company_name; ?>" height="50"> <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> --> <!-- <span class="logo-lg-text-light">M</span> --> </span> @@ -57,11 +57,11 @@ <a href="dashboard" class="logo logo-light text-center"> <span class="logo-sm"> - <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + <img src="<?= $company_logo_small; ?>" alt="<?= $company_short_name; ?>" height="24"> </span> <span class="logo-lg"> <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> --> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <img src="<?= $company_logo_large; ?>" alt="<?= $company_name; ?>" height="50"> </span> </a> </div> diff --git a/app/Views/template/topbar.php b/app/Views/template/topbar.php index 37fa1f4d..561a4fe9 100644 --- a/app/Views/template/topbar.php +++ b/app/Views/template/topbar.php @@ -272,11 +272,11 @@ <div class="logo-box"> <a href="dashboard" class="logo logo-dark text-center"> <span class="logo-sm"> - <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + <img src="<?= $company_logo_small; ?>" alt="<?= $company_short_name; ?>" height="24"> <!-- <span class="logo-lg-text-light">Minton</span> --> </span> <span class="logo-lg"> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <img src="<?= $company_logo_large; ?>" alt="<?= $company_name; ?>" height="50"> <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="20"> --> <!-- <span class="logo-lg-text-light">M</span> --> </span> @@ -284,11 +284,11 @@ <a href="dashboard" class="logo logo-light text-center"> <span class="logo-sm"> - <img src="<?= base_url()."public/uploads/default_logo.png" ?>" alt="<?= $company_short_name; ?>" height="24"> + <img src="<?= $company_logo_small; ?>" alt="<?= $company_short_name; ?>" height="24"> </span> <span class="logo-lg"> <!-- <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="24"> --> - <img src="<?= base_url()."public/uploads/default.png" ?>" alt="<?= $company_name; ?>" height="50"> + <img src="<?= $company_logo_large; ?>" alt="<?= $company_name; ?>" height="50"> </span> </a> </div> From 1ef43f0bd7798aa3677e0c42b0046ac12f64eb22 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Wed, 27 Sep 2023 13:00:57 +0530 Subject: [PATCH 15/17] vaild buiness : ps --- app/Controllers/Business.php | 17 ++++++++++++++--- app/Views/business_form.php | 2 +- app/Views/business_list.php | 6 +++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/Controllers/Business.php b/app/Controllers/Business.php index d254fa19..8df4e8db 100644 --- a/app/Controllers/Business.php +++ b/app/Controllers/Business.php @@ -12,9 +12,19 @@ class Business extends BaseController { helper('session'); if (is_session_active()) { + $session_role = get_user_role(); + if (!empty($session_role) && $session_role !== "sadmin") { + $this->logger->info("Buiness: Listing In admin role ."); + $where = ['business_id' => (int)get_business_id(), 'isactive' => 1]; + } else { + $this->logger->info("Buiness: Listing In Super-admin role ."); + $where = ['isactive !=' => NULL]; + } $BusinessModel = new BusinessModel(); $data['page_name'] = 'Buiness Listing'; - $data['businesses'] = $BusinessModel->where(['isactive' => 1])->findAll(); + $data['businesses'] = $BusinessModel->where($where)->findAll(); + // $data['lastQuery'] = $BusinessModel->getLastQuery(); + // print_r($data);die; $this->render_page('business_list', $data); } else { return redirect()->to('login'); @@ -43,7 +53,7 @@ class Business extends BaseController { helper('session'); $session_uid = get_logged_user_id(); - + $session_role = get_user_role(); $validationRule = [ 'user' => [ 'label' => 'Image File', @@ -103,8 +113,9 @@ class Business extends BaseController $BusinessModel->insert($data); } else { // It's an update operation + if($session_role === 'sadmin'){ $isactive = $this->request->getPost('bcheckbox'); - $data['isactive'] = ($isactive == 'on') ? 1 : 0; + $data['isactive'] = ($isactive == 'on') ? 1 : 0; } $data['updated_by'] = $session_uid; $BusinessModel->update($business_id, $data); } diff --git a/app/Views/business_form.php b/app/Views/business_form.php index df8f22be..9df8b961 100644 --- a/app/Views/business_form.php +++ b/app/Views/business_form.php @@ -95,7 +95,7 @@ </div> <input type="hidden" id="business_id" name="business_id" placeholder="hidden for business id" value="<?= isset($businesses['business_id']) ? $businesses['business_id'] : '' ?>" /> - <?php if (!empty($businesses)) { ?> + <?php if (!empty($businesses) && ($loggedin_person_role === 'sadmin')) { ?> <div class="form-group text-right m-b-0 checkbox checkbox-purple"> <input type="checkbox" id="bcheckbox" name="bcheckbox" class="form-control" <?= isset($businesses) && $businesses['isactive'] == 1 ? 'checked' : '' ?>> <label for="bcheckbox"> Is Active</label> diff --git a/app/Views/business_list.php b/app/Views/business_list.php index 0b752a22..ca85f8e2 100644 --- a/app/Views/business_list.php +++ b/app/Views/business_list.php @@ -3,7 +3,9 @@ <div class="card"> <div class="card-body"> <div class="float-right"> - <a href="new_bussiness/0" class="btn btn-primary"><i class="ri-briefcase-4-fill"></i> Add New </a> + <?php if($loggedin_person_role === 'sadmin'): ?> + <a href="<?= base_url()."new_bussiness/0"; ?>" class="btn btn-primary"><i class="ri-briefcase-4-fill"></i> Add Bussiness </a> + <?php endif; ?> </div><!-- end col--> <br> <h4 class="header-title mb-3"><?= $page_name; ?></h4> @@ -38,7 +40,9 @@ <td><?= $business['business_logo']; ?></td> <td> <a href="<?= "new_bussiness/" . $business['business_id']; ?>" class="edit-button"><i class="ri-pencil-line"></i></a> + <?php if($loggedin_person_role === 'sadmin'): ?> <a href="<?= "delete_business/" . $business['business_id']; ?>" class="delete-button"><i class="ri-delete-bin-line"></i></a> + <?php endif; ?> </td> </tr> <?php endforeach; ?> From a3c5f907af104340dd2ff83c56a7ee9c46b3843c Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Wed, 27 Sep 2023 13:10:41 +0530 Subject: [PATCH 16/17] fixes : ps --- app/Views/business_list.php | 4 ++-- app/Views/user_list.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Views/business_list.php b/app/Views/business_list.php index ca85f8e2..ce4b6a3d 100644 --- a/app/Views/business_list.php +++ b/app/Views/business_list.php @@ -39,9 +39,9 @@ <td><?= $business['postal_code']; ?></td> <td><?= $business['business_logo']; ?></td> <td> - <a href="<?= "new_bussiness/" . $business['business_id']; ?>" class="edit-button"><i class="ri-pencil-line"></i></a> + <a href="<?= "new_bussiness/" . $business['business_id']; ?>" class="edit-button" title="Click to Edit Business"><i class="ri-pencil-line"></i></a> <?php if($loggedin_person_role === 'sadmin'): ?> - <a href="<?= "delete_business/" . $business['business_id']; ?>" class="delete-button"><i class="ri-delete-bin-line"></i></a> + <a href="<?= "delete_business/" . $business['business_id']; ?>" class="delete-button" title="Click to Delete Business"><i class="ri-delete-bin-line"></i></a> <?php endif; ?> </td> </tr> diff --git a/app/Views/user_list.php b/app/Views/user_list.php index 5805451f..cd71a842 100644 --- a/app/Views/user_list.php +++ b/app/Views/user_list.php @@ -67,8 +67,8 @@ <span class="<?php echo $class; ?>"><?php echo $message; ?></span> </td> <td> - <a href="<?= $edit_page_route; ?>" class="edit-button"><i class="ri-pencil-line"></i></a> - <a href="<?php echo "delete_user/".$row['user_id']; ?>" class="delete-button"><i class="ri-delete-bin-line"></i></a> + <a href="<?= $edit_page_route; ?>" class="edit-button" title="Click to Edit User" ><i class="ri-pencil-line"></i></a> + <a href="<?php echo "delete_user/".$row['user_id']; ?>" class="delete-button" title="Click to Delete User" ><i class="ri-delete-bin-line"></i></a> </td> </tr> <?php endforeach; ?> From cdf73ab9e1558052f18cf9f771144cab89f6952d Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev <sanjeev.p@venbainfotech.com> Date: Wed, 27 Sep 2023 17:16:16 +0530 Subject: [PATCH 17/17] Log Message Added : ps --- app/Controllers/ApiIntegration.php | 66 ++++++++++++++++++++---------- app/Controllers/Authentication.php | 8 ++-- app/Controllers/BaseController.php | 8 ++-- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/app/Controllers/ApiIntegration.php b/app/Controllers/ApiIntegration.php index 15e9fd8e..36d6e33a 100644 --- a/app/Controllers/ApiIntegration.php +++ b/app/Controllers/ApiIntegration.php @@ -20,12 +20,13 @@ class ApiIntegration extends ResourceController if(count($request_data)>0){ $this->logger->info("Api Integration : Request data count = ".count($request_data)); + $this->logger->info("Api Integration : Request data = ".json_encode($request_data)); $i = 0; $final_response = []; foreach($request_data as $row_data) { $get_response[$i] = $this->call_methods((array)$row_data, $api_request_text); - $final_response[$i] = $get_response[$i]['message']; + $final_response[$i] = isset($get_response[$i]['message'])?$get_response[$i]['message']:$get_response[$i]; $i++; } // return $this->respond(['status' => 200, 'message' => $final_response,'references'=>$get_response]); @@ -36,7 +37,8 @@ class ApiIntegration extends ResourceController } } catch (\Exception $e) { - $this->logger->error("Api Integration : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api Integration : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api Integration : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); return $this->fail('request failed, An error occurred on line ' . $e->getline() . ' : ' . $e->getMessage()); } @@ -63,36 +65,55 @@ class ApiIntegration extends ResourceController case "books": try { $records = (array)$row_data; - $wordpress_book_id = $records['id']; - $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Product Ref ID = ".$wordpress_book_id); - $response = $this->save_book_details($records, $wordpress_book_id); - $this->logger->info("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." response = ".$response['status']); + $this->logger->info("Api CallMethods : method name = ".$method.", data type =".gettype($records)); + if (isset($records['id']) && !empty($records['id'])) { + $wordpress_book_id = $records['id']; + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Product Ref ID = ".$wordpress_book_id); + $response = $this->save_book_details($records, $wordpress_book_id); + $this->logger->info("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." response = ".$response['status']); + } else { + throw new \Exception('The "id" field is not set or empty.'); + } } catch (\Exception $e) { - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception} ", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); } break; case "customers": try { $records = (array)$row_data; - $wordpress_customer_id = $records['id']; - $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Customer Ref ID = ".$wordpress_customer_id); - $response = $this->save_customer_details($records, $wordpress_customer_id); - $this->logger->info("Api CallMethods : response = ".$response['status']); + $this->logger->info("Api CallMethods : method name = ".$method.", data type =".gettype($records)); + if (isset($records['id']) && !empty($records['id'])) { + $wordpress_customer_id = $records['id']; + $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Customer Ref ID = ".$wordpress_customer_id); + $response = $this->save_customer_details($records, $wordpress_customer_id); + $this->logger->info("Api CallMethods : response = ".$response['status']); + } else { + throw new \Exception('The "id" field is not set or empty.'); + } + } catch (\Exception $e) { - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); } break; case "invoice": try { $records = (array)$row_data; + $this->logger->info("Api CallMethods : method name = ".$method.", data type =".gettype($records)); + if (isset($records['id']) && !empty($records['id'])) { $wordpress_order_id = $records['id']; $this->logger->info("Api CallMethods : method name = ".$method.", row data count = ".count($records).", wordpress Order Ref ID = ".$wordpress_order_id); $response = $this->save_sales_details($records, $wordpress_order_id); $this->logger->info("Api CallMethods : response = ".$response['status']); + } else { + throw new \Exception('The "id" field is not set or empty.'); + } } catch (\Exception $e) { - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); return $this->fail('request failed, An error occurred on line ' . $e->getline() . ': ' . $e->getMessage()); } break; @@ -103,7 +124,8 @@ class ApiIntegration extends ResourceController } catch (\Exception $e) { $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); return $this->fail(ucwords($method).' request failed, An error occurred ' .$exception_ends_with); - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); } break; case 'delete': @@ -135,7 +157,8 @@ class ApiIntegration extends ResourceController $response = ['status' => 200, 'message' => $basic_message]; } catch (\Exception $e) { $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." Exception Message: " . $e->getMessage() . "<br> File: " . $e->getFile() . "<br> Line: " . $e->getLine() . "<br>"); return $this->fail('DELETE request failed, An error occurred' . $exception_ends_with); } break; @@ -149,7 +172,8 @@ class ApiIntegration extends ResourceController } catch (\Exception $e) { // Handle the exception, you can log it or return an error response $exception_ends_with = $e->getline() ? 'on line ' . $e->getline() . ': ' . $e->getMessage() : $e->getMessage(); - $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + // $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text))." {exception}", ['exception' => $e]); + $this->logger->error("Api CallMethods : ".str_replace("_", " ",ucwords($api_request_text)).$exception_ends_with); return $this->fail('An error occurred ' . $exception_ends_with); } } @@ -291,7 +315,7 @@ class ApiIntegration extends ResourceController $this->logger->info("Api SaveBookDetails : Image Data = $i "); $i++; } // image loop closed - $extensive_correspondence .= (!empty($book_image_data) ? $api_model->insertAndUpdateChildDetails($book_image_data, 'book_images', 'book_img_id') : []); + $extensive_correspondence .= (!empty($book_image_data) ? $api_model->insertAndUpdateChildDetails($book_image_data, 'book_images', 'book_img_id') : ""); $this->logger->info("Api SaveBookDetails : ".$extensive_correspondence); } //image count closed else{ @@ -444,7 +468,7 @@ class ApiIntegration extends ResourceController // echo "&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; Keys are available but Billing address has no value; <br/>"; } } - $extensive_correspondence .= (!empty($customer_billing_address_data) ? $api_model->insertAndUpdateChildDetails($customer_billing_address_data, 'customer_addresses', 'customer_address_id') : []); + $extensive_correspondence .= (!empty($customer_billing_address_data) ? $api_model->insertAndUpdateChildDetails($customer_billing_address_data, 'customer_addresses', 'customer_address_id') : ""); $this->logger->info("Api SaveCustomerDetails : ".$extensive_correspondence); } @@ -528,7 +552,7 @@ class ApiIntegration extends ResourceController // echo "&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; Keys are available but Shipping address has no value <br/>"; } } - $extensive_correspondence .= (!empty($customer_shipping_address_data) ? $api_model->insertAndUpdateChildDetails($customer_shipping_address_data, 'customer_addresses', 'customer_address_id') : []); + $extensive_correspondence .= (!empty($customer_shipping_address_data) ? $api_model->insertAndUpdateChildDetails($customer_shipping_address_data, 'customer_addresses', 'customer_address_id') : ""); $this->logger->info("Api SaveCustomerDetails : ".$extensive_correspondence); }else{ $this->logger->error("Api SaveCustomerDetails : Err = Address Data Not Found"); @@ -710,7 +734,7 @@ class ApiIntegration extends ResourceController $this->logger->info("Api SaveSalesDetails : Invoiceitem Data inx = $i "); $i++; } // line item loop closed - $extensive_correspondence .= (!empty($line_item_data) ? $api_model->insertAndUpdateChildDetails($line_item_data, 'invoiceitems', 'invoice_child_id') : []); + $extensive_correspondence .= (!empty($line_item_data) ? $api_model->insertAndUpdateChildDetails($line_item_data, 'invoiceitems', 'invoice_child_id') : ""); $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); } @@ -794,7 +818,7 @@ class ApiIntegration extends ResourceController $this->logger->info("Api SaveSalesDetails : Invoiceitem Data For Shipping inx = $j "); $j++; } // line item loop closed - $extensive_correspondence .= (!empty($shipping_line_item_data) ? $api_model->insertAndUpdateChildDetails($shipping_line_item_data, 'invoiceitems', 'invoice_child_id') : []); + $extensive_correspondence .= (!empty($shipping_line_item_data) ? $api_model->insertAndUpdateChildDetails($shipping_line_item_data, 'invoiceitems', 'invoice_child_id') : ""); $this->logger->info("Api SaveSalesDetails : ".$extensive_correspondence); } else{ diff --git a/app/Controllers/Authentication.php b/app/Controllers/Authentication.php index 874c3ee8..d67b1165 100755 --- a/app/Controllers/Authentication.php +++ b/app/Controllers/Authentication.php @@ -265,10 +265,10 @@ class Authentication extends BaseController $details = $auth_model->getheringDetailsForHeader($session_uid); $data['loggedin_person'] = $session_uname; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); - $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); - $data['company_logo_small'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); - $data['company_logo_large'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); + $data['favicon'] = !empty($details[0]['favicon']) && file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); + $data['profile_picture'] = !empty($details[0]['profile_picture']) && file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); + $data['company_logo_small'] = !empty($details[0]['company_logo_small']) && file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); + $data['company_logo_large'] = !empty($details[0]['company_logo_large']) && file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); $successMessage = session()->getFlashdata('success'); $validationErrors = session()->getFlashdata('error'); // Load and display the form view with the above data diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index 9217c5af..b3960e33 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -74,10 +74,10 @@ abstract class BaseController extends Controller $data['loggedin_person'] = $session_uname; $data['loggedin_person_id'] = $session_uid; $data['loggedin_person_role'] = $details[0]['role']; - $data['favicon'] = file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); - $data['profile_picture'] = file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); - $data['company_logo_small'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); - $data['company_logo_large'] = file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); + $data['favicon'] = !empty($details[0]['favicon']) && file_exists(FCPATH."public/uploads/".$details[0]['favicon']) ? base_url("public/uploads/".$details[0]['favicon']) : base_url("public/uploads/default.ico"); + $data['profile_picture'] = !empty($details[0]['profile_picture']) && file_exists(FCPATH."public/uploads/".$details[0]['profile_picture']) ? base_url("public/uploads/" . $details[0]['profile_picture']) : base_url("public/assets/images/users/avatar-9.jpg"); + $data['company_logo_small'] = !empty($details[0]['company_logo_small']) && file_exists(FCPATH."public/uploads/".$details[0]['company_logo_small']) ? base_url("public/uploads/" . $details[0]['company_logo_small']) : base_url("public/uploads/default_logo.png"); + $data['company_logo_large'] = !empty($details[0]['company_logo_large']) && file_exists(FCPATH."public/uploads/".$details[0]['company_logo_large']) ? base_url("public/uploads/" . $details[0]['company_logo_large']) : base_url("public/uploads/default.png"); $data['browser_title'] = $data['company_name'] . ' | ' . $data['company_short_name'] . ' ' . $data['page_name']; $data['heading'] = $data['page_name'] == "Dashboard" ? 'Welcome to ' . $data['company_name'] : ""; echo view('template/header.php', $data);