This commit is contained in:
heama 2023-11-06 12:02:18 +05:30
parent 55c6dfd028
commit 6a17e08181
195 changed files with 1944 additions and 3615 deletions

View File

@ -19,7 +19,7 @@ class App extends BaseConfig
* http://example.com/ * http://example.com/
*/ */
// public string $baseURL = 'http://localhost:8080/'; // public string $baseURL = 'http://localhost:8080/';
public string $baseURL = 'http://localhost/vb_book/'; public string $baseURL = 'http://localhost/vb_book_new/';
// public string $baseURL = 'http://localhost/vb_book/public/'; // public string $baseURL = 'http://localhost/vb_book/public/';
/** /**

View File

@ -1,88 +0,0 @@
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="float-right">
<a href="<?= base_url()."campaign_creation_form/0"; ?>" class="btn btn-primary"><i class="ri-file-edit-line"></i> Add campaign </a>
</div><!-- end col-->
<br>
<h4 class="header-title mb-3"><?= $page_name; ?></h4>
<?php if (session()->getFlashdata('success') || session()->getFlashdata('error')) : ?>
<?php if (session()->getFlashdata('success')) : ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?= session('success') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php if (session()->getFlashdata('error')) : ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?= session('error') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php endif; ?>
<div class="table-responsive">
<table id="scroll-horizontal-datatable_customer" class="table w-100 nowrap">
<thead class="thead-light">
<tr>
<th hidden></th>
<th>Campaign Name</th>
<th>Template Name</th>
<th>Group Name</th>
<th>Total Customer</th>
<th>Scheduled at</th>
<th>Created at</th>
<th>Created by</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<?php foreach ($campaign as $c) :
if ($c['isactive']) {
$class = 'badge badge-soft-success';
$message = 'Active';
} else {
$class = 'badge badge-soft-danger';
$message = 'In-Active';
}
$scheduled_date = date('d/m/Y', strtotime($c['scheduled_date']));
$scheduled_time = date('h:i A', strtotime($c['scheduled_time']));
?>
<tr>
<td hidden><?= $c['campaign_id']; ?></td>
<td><?= $c['campaign_name']; ?></td>
<td><?= $c['template_name']; ?></td>
<td><?= $c['group_name']; ?></td>
<td><?= $c['customer_group_count']; ?></td>
<td><?= $scheduled_date." ".$scheduled_time; ?></td>
<td><?= $c['formatted_created_on']; ?></td>
<td><?= $c['created_by_name']; ?></td>
<td><span class="<?php echo $class; ?>"><?php echo $message; ?></span></td>
<td>
<a href="<?= base_url()."campaign_creation_form/".$c['campaign_id']; ?>" class="edit-button" title="Click to Edit Campaign" ><i class="ri-pencil-line"></i></a>
<?php if ($c['isactive']) { ?> <a href="<?= base_url() . "campaign_creation_delete/".$c['campaign_id']; ?>" class="delete-button" title="Click to Delete Campaign" ><i class="ri-delete-bin-line"></i></a> <?php } ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div><!-- end row-->
<script>
$(document).ready(function() {
$('#scroll-horizontal-datatable_customer').DataTable({
"order": [
[0, "desc"]
] // 4 is the column index of "created_on" in your table
// Other DataTables configuration options
});
});
</script>

View File

@ -1,154 +0,0 @@
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h4 class="header-title"><?= $page_name; ?></h4>
<form class="parsley-examples" action="<?= base_url() . "campaign_creation_insert"; ?>" method="post" enctype="multipart/form-data" id="myForm">
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-6">
<label for="campaign_name" class="col-form-label">Campaign Name<span class="text-danger"> *</span></label>
<input type="text" class="form-control" id="campaign_name" name="campaign_name" value="<?= isset($campaign_details['campaign_name']) ? $campaign_details['campaign_name'] : '' ?>" placeholder="Campaign Name" required />
<div class="invalid-feedback"> Please provide. </div>
</div>
<div class="form-group col-md-6">
<label for="group_id" class="col-form-label">Group<span class="text-danger"></span></label>
<!-- <select id="group_id" name="group_id[]" class="form-control select2-multiple" data-toggle="select2" multiple="multiple" data-placeholder="Choose ..." required> -->
<select id="group_id" name="group_id[]" class="form-control" multiple="multiple" required>
<option value="">Choose the Group</option>
<?php foreach ($group_details as $value) { ?>
<option value="<?php echo $value['group_id']; ?>"
<?php if (isset($campaign_details['group_id']) && in_array($value['group_id'], $campaign_details['group_id'])) echo "selected"; ?>>
<?php echo $value['group_name']; ?>
</option>
<?php } ?>
</select>
</div>
<div class="form-group col-md-4">
<label for="mode" class="col-form-label col-md-3">Mode<span class="text-danger"></span></label>
<div class="col-md-9 mt-1">
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="emailRadio" name="mode" class="custom-control-input" value="Email" checked>
<label class="custom-control-label" for="emailRadio">Email</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="whatsappRadio" name="mode" class="custom-control-input" value="Whatsapp">
<label class="custom-control-label" for="whatsappRadio">Whatsapp</label>
</div>
</div>
</div>
<div class="form-group col-md-8">
<label for="scheduled" class="col-form-label">Scheduled Date/Time<span class="text-danger"></span></label>
<div class="row">
<div class="col-6">
<input class="form-control" type="date" name="scheduled_date" id="example-date" value="<?= isset($campaign_details['scheduled_date']) ? $campaign_details['scheduled_date'] : '' ?>">
</div>
<div class="col-6">
<input class="form-control" type="time" name="scheduled_time" id="example-time" value="<?= isset($campaign_details['scheduled_time']) ? $campaign_details['scheduled_time'] : '' ?>">
</div>
</div>
</div>
<div class="form-group col-md-12">
<label for="load_templateid" class="col-form-label">Template<span class="text-danger"></span></label>
<select id="load_templateid" name="template_id" class="form-control" required>
<option value="">Choose the Template</option>
<!-- <?php foreach ($template_details as $value) { ?>
<option value="<?php echo $value['template_id']; ?>" <?php if (isset($campaign_details['template_id']) && ($campaign_details['template_id'] === $value['template_id'])) echo "selected"; ?>>
<?php echo $value['template_name']; ?></option>
<?php } ?> -->
</select>
</div>
<!-- <div class="form-group col-md-12">
<label for="templatemessage" class="col-form-label">Template Message<span class="text-danger"> *</span></label>
<textarea id="summernote-basic" name="templatemessage" class="form-control" rows="7">
<?php if(isset($campaign_details['message'])){ echo $campaign_details['message']; }else{ ?>
<h5>Hello {User}, </h5>
<p>Please, write text here!</p>
<?php } ?>
</textarea>
</div> -->
</div>
<input type="hidden" id="campaign_id" name="campaign_id" placeholder="hidden for template id" value="<?= isset($campaign_details['campaign_id']) ? $campaign_details['campaign_id'] : '' ?>" />
<?php if (!empty($campaign_details)) { ?>
<div class="form-group text-right m-b-0 checkbox checkbox-purple">
<input type="checkbox" id="isactive" name="isactive" class="form-control" <?= isset($campaign_details) && $campaign_details['isactive'] == 1 ? 'checked' : '' ?>>
<label for="isactive"> Is Active</label>
</div>
<br>
<?php } ?>
<div class="form-group text-right m-b-0">
<button class="btn btn-success waves-effect waves-light mr-1" type="submit" id="submitBtn">
Submit
</button>
<button type="reset" class="btn btn-primary waves-effect mr-1">
Reset
</button>
<a href="<?= base_url() . "campaign_creation"; ?>" class="btn btn-secondary waves-effect">Cancel</a>
</div>
</div>
</form>
</div> <!-- end card-body-->
</div> <!-- end card-->
</div> <!-- end col-->
</div><!-- end row -->
<script>
$(document).ready(function() {
// Listen for changes in the radio buttons
var mode = "<?= isset($campaign_details['mode']) ? $campaign_details['mode'] : ""; ?>";
var template = "<?= isset($campaign_details['template_id']) ? $campaign_details['template_id'] : ""; ?>";
load_details(mode,template);
$('input[name="mode"]').on('change', function() {
var selectedValue = $(this).val();
console.log('selectedValue',selectedValue);
load_details(selectedValue,template);
});
if(mode != ""){
var emailRadio = document.getElementById("emailRadio");
var whatsappRadio = document.getElementById("whatsappRadio");
if(mode == 'Email'){
emailRadio.checked = true;
whatsappRadio.checked = false;
}
if(mode == 'Whatsapp'){
emailRadio.checked = false;
whatsappRadio.checked = true;
}
load_details(mode,template);
}
});
function load_details(mode,template) {
var mode = (mode != "") ? mode : 'Email';
var temp_arr = <?php echo json_encode($template_details); ?>;
var filtered_data = $.grep(temp_arr, function(item) {
return item['mode'] === mode;
});
$('#load_templateid').empty();
$('#load_templateid').append($('<option>', { value: "", text: "Choose the Template" }));
$.each(filtered_data, function(k, v) {
$('#load_templateid').append($('<option>', {
value: v.template_id,
text: v.template_name,
selected: (v.template_id == template) ? true : false
}));
});
}
</script>
<script>
document.getElementById('myForm').addEventListener('submit', function(event) {
var form = event.target;
if (form.checkValidity() === false) {
form.reportValidity(); // Display validation error messages
event.preventDefault(); // Prevent form submission if it's not valid
$('#submitBtn').prop('disabled', false);
} else {
$('#submitBtn').prop('disabled', true);
}
});
</script>

View File

@ -1,153 +0,0 @@
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="float-right">
<a href="<?= base_url()."view_customer_group/0"; ?>" class="btn btn-primary"><i class="ri-team-line"></i> Add Customer Group </a>
</div><!-- end col-->
<br>
<h4 class="header-title mb-3"><?= $page_name; ?></h4>
<?php if (session()->getFlashdata('success') || session()->getFlashdata('error')) : ?>
<?php if (session()->getFlashdata('success')) : ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?= session('success') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php if (session()->getFlashdata('error')) : ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?= session('error') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php endif; ?>
<div class="table-responsive">
<table id="scroll-horizontal-datatable_customer" class="table w-100 nowrap">
<thead class="thead-light">
<tr>
<th hidden></th>
<th>Group Name</th>
<th>Created at</th>
<th>Created by</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<?php foreach ($customer_group as $group) :
if ($group['isactive']) {
$class = 'badge badge-soft-success';
$message = 'Active';
} else {
$class = 'badge badge-soft-danger';
$message = 'In-Active';
} ?>
<tr>
<td hidden><?= $group['group_id']; ?></td>
<td><?= $group['group_name']; ?></td>
<td><?= $group['formatted_created_on']; ?></td>
<td><?= $group['created_by_name']; ?></td>
<td><span class="<?php echo $class; ?>"><?php echo $message; ?></span></td>
<td>
<a href="<?= base_url() . "view_customer_group/" . $group['group_id']; ?>" class="edit-button" title="Edit" ><i class="ri-pencil-line"></i></a>
<a class="preview-button" title="Customer list" data-toggle="modal" data-target="#scrollable-modal" data-primary-key="<?php echo $group['group_id']; ?>" data-group-name="<?php echo $group['group_name']; ?>"><i class="ri-pages-line"></i></a>
<?php if ($group['isactive']) { ?> <a href="<?= base_url() . "delete_customer_group/" . $group['group_id']; ?>" class="delete-button" title="Delete" ><i class="ri-delete-bin-line"></i></a> <?php } ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div>
<div class="modal" id="scrollable-modal" tabindex="-1" role="dialog" aria-labelledby="scrollableModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="scrollableModalTitle">Customer list</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="ajax-content">
<table class="table table-bordered" id="data-table">
<thead>
<tr>
<th style="width:10%;">#</th>
<th style="width:30%;">Name</th>
<th style="width:30%;">Email</th>
<th style="width:30%;">Mobile</th>
</tr>
</thead>
<tbody>
<!-- Table rows will be populated here -->
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- end row-->
<script>
$(document).ready(function() {
$('#scroll-horizontal-datatable_customer').DataTable({
"order": [[0, "desc"]] // 4 is the column index of "created_on" in your table
// Other DataTables configuration options
});
});
</script>
<script>
$(document).ready(function() {
$('#scrollable-modal').on('show.bs.modal', function(event) {
// Get the data-primary-key attribute from the modal trigger
var primaryKey = $(event.relatedTarget).data('primary-key');
var groupName = $(event.relatedTarget).data('group-name');
$('#scrollableModalTitle').text(groupName + ' - Customer list');
// Get the table reference
var table = $("#data-table tbody");
var route = "<?= base_url().'preview_customer_group/'?>"+primaryKey;
$.ajax({
method: 'GET',
url: route,
success: function(response) {
if (response.length > 0) {
// Clear existing rows
table.empty();
$x=0;
// Loop through the response and create table rows
$.each(response, function (index, item) {
var row = $("<tr>");
row.append($("<td style='width:10%;'>").text(++$x));
row.append($("<td style='width:30%;'>").text(item.customer_name));
row.append($("<td style='width:30%;'>").text(item.email));
row.append($("<td style='width:30%;'>").text(item.mobile_no));
table.append(row);
});
} else {
// Handle the case where there is no data
table.empty();
table.append("<tr><td colspan='4' style='width:100%; text-align: center; vertical-align: middle;'>No data available</td></tr>");
}
},
error: function () {
// alert("An error occurred.");
console.log("CG Preview List - An error occurred.");
table.empty();
table.append("<tr><td colspan='4' style='width:100%; text-align: center; vertical-align: middle;'>No data available</td></tr>");
}
});
});
});
</script>

View File

@ -1,589 +0,0 @@
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h4 class="header-title"><?= $page_name; ?></h4>
<p class="sub-header"></p>
<form id="myForm" class="needs-validation" novalidate method="POST" enctype="multipart/form-data" action="<?= base_url() . "insert_customer_group"; ?>" >
<div class="form-row">
<div class="form-group col-md-12">
<label for="groupname" class="col-form-label">Group Name<span class="text-danger"> *</span></label>
<input type="text" class="form-control" id="groupname" name="groupname" value="<?= isset($customer_group['groupname']) ? $customer_group['groupname'] : '' ?>" placeholder="Group Name" required />
<div class="invalid-feedback"> Please provide. </div>
</div>
</div>
<br />
<div class="form-row">
<div class="form-group col-md-12">
<h4 class="header-title">Select Criteria</h4>
<table class="table table-borderless" id="itemTable">
<thead>
<tr>
<th>Field</th>
<th>Condition</th>
<th>Value</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php if(!empty($customer_group) && !empty($customer_group['column'])){ for ($i = 0; $i < count($customer_group['column']); $i++) { ?>
<tr>
<td style="width:30%;">
<select class="form-control" data-toggle="select2" id=<?= "column".$i; ?> name="column[]" >
<?php foreach ($field as $f) : ?>
<option value="<?= $f['value']; ?>"
fieldflag="<?= $f['fieldflag']; ?>"
<?php if ($f['disable']) echo 'disabled'; ?>
<?php if(isset($customer_group['column'][$i]) && $customer_group['column'][$i] == $f['value'] ){echo "selected";}?>>
<?= $f['text']; ?></option>
<?php endforeach; ?>
</select>
</td>
<td style="width:30%;">
<select class="form-control" data-toggle="select2" id=<?= "operator".$i; ?> name="operator[]" onchange="FieldChange(this,<?= $i; ?>)">
<?php foreach ($operator as $value => $label) { ?>
<option value="<?php echo $value; ?>" <?php if(isset($customer_group['operator'][$i]) && $customer_group['operator'][$i] == $value ){echo "selected";}?> >
<?php echo $label; ?>
</option>
<?php } ?>
</select>
</td>
<td style="width:30%;">
<?php if ($customer_group['operator'][$i] == 'greater than' || $customer_group['operator'][$i] == 'greater than or equal to' || $customer_group['operator'][$i] == 'less than' || $customer_group['operator'][$i] == 'less than or equal to') { ?>
<input type="date" class="form-control" id=<?= "values".$i; ?> name="values[]" placeholder="Enter the Date" value="<?= (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? $customer_group['values'][$i] : '' ?>" />
<?php }else if($customer_group['operator'][$i] === 'between') {
$dates = (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? explode(',', $customer_group['values'][$i]) : [] ;
?>
<div style="display: inline-flex;">
<input type="date" class="form-control" id=<?= "values".$i.'1'; ?> placeholder="Enter the Start Date" onchange="concatBetween(<?= $i ?>)" value="<?= (isset($dates[0]) && $dates[0] != "" ) ? str_replace(' ', '', $dates[0]) : '' ?>" />
<input type="date" class="form-control ml-1" id=<?= "values".$i.'2'; ?> placeholder="Enter the End Date" onchange="concatBetween(<?= $i ?>)" value="<?= (isset($dates[1]) && $dates[1] != "" ) ? str_replace(' ', '', $dates[1]) : '' ?>" />
</div>
<input type="hidden" class="form-control" id=<?= "values".$i; ?> name="values[]" placeholder="values" value="<?= (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? $customer_group['values'][$i] : '' ?>" />
<?php } else if(($customer_group['operator'][$i] === 'contain' || $customer_group['operator'][$i] == 'not contain')) { ?>
<input type="text" class="form-control" id=<?= "values".$i; ?> name="values[]" placeholder="Enter the Multiple Values with comma Seprator" onkeypress="return restriction(event,'M')" value="<?= (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? $customer_group['values'][$i] : '' ?>" />
<?php }else if($customer_group['operator'][$i] === 'is null' || $customer_group['operator'][$i] == 'is not null') { ?>
<input type="hidden" class="form-control" id=<?= "values".$i; ?> name="values[]" placeholder="Enter the Values" value="<?= (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? $customer_group['values'][$i] : '' ?>" />
<?php } else { ?>
<input type="text" class="form-control" id=<?= "values".$i; ?> name="values[]" placeholder="Enter the Values" onkeypress="return restriction(event,2)"
value="<?= (isset($customer_group['values'][$i]) && $customer_group['values'][$i] != "" ) ? $customer_group['values'][$i] : '' ?>" />
<?php } ?>
</td>
<td style="width:10%;">
<button type="button" class="btn btn-soft-danger btn-rounded waves-effect waves-light mr-1 remove-item "><i class="fa fa-trash"></i></button>
</td>
</tr>
<?php } }else{ ?>
<tr>
<td style="width:30%;">
<select class="form-control" data-toggle="select2" id="column0" name="column[]" >
<?php foreach ($field as $f) : ?>
<option value="<?= $f['value']; ?>"
fieldflag="<?= $f['fieldflag']; ?>"
<?php if ($f['disable']) echo 'disabled'; ?> >
<?= $f['text']; ?></option>
<?php endforeach; ?>
</select>
</td>
<td style="width:30%;">
<select class="form-control" data-toggle="select2" id="operator0" name="operator[]" onchange="FieldChange(this,0)">
<?php foreach ($operator as $value => $label) { ?>
<option value="<?php echo $value; ?>">
<?php echo $label; ?>
</option>
<?php } ?>
</select>
</td>
<td style="width:30%;">
<input type="text" class="form-control" id="values0" name="values[]" placeholder="Enter the Values" onkeypress="return restriction(event,1)" />
</td>
<td style="width:10%;">
<button type="button" class="btn btn-soft-danger btn-rounded waves-effect waves-light mr-1 remove-item "><i class="fa fa-trash"></i></button>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<div class="form-group text-right m-b-0">
<button type="button" id="addItem" class="btn btn-soft-dark btn-rounded waves-effect waves-light mr-3 add-item"> + Add New Criteria</button>
</div>
<?php if (!empty($customer_group)) { ?>
<div class="form-group text-right checkbox checkbox-purple mr-3">
<input type="checkbox" id="isactive" name="isactive" class="form-control" <?= isset($customer_group) && $customer_group['isactive'] == 1 ? 'checked' : '' ?>>
<label for="isactive"> Is Active</label>
</div>
<?php } ?>
<input type="hidden" id="string_flag" name="string_flag" placeholder="hidden" value="preview" />
<input type="hidden" id="group_id" name="group_id" placeholder="hidden for primary id" value="<?= isset($customer_group['group_id']) ? $customer_group['group_id'] : '' ?>" />
</div>
</div>
<div class="form-group text-right m-b-0">
<button type="button" class="btn btn-purple waves-effect mr-1" data-toggle="modal" data-target="#scrollable-modal">Save</button>
<button type="button" class="btn btn-primary waves-effect mr-1" onclick="refreshPage()">Reset</button>
<a href="<?= base_url() . "customer_group"; ?>" class="btn btn-secondary waves-effect mr-3">Cancel</a>
</div>
<div class="modal" id="scrollable-modal" tabindex="-1" role="dialog" aria-labelledby="scrollableModalTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="scrollableModalTitle">Customer list</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="ajax-content">
<table class="table table-bordered" id="data-table">
<thead>
<tr>
<th style="width:10%;">#</th>
<th style="width:30%;">Name</th>
<th style="width:30%;">Email</th>
<th style="width:30%;">Mobile</th>
</tr>
</thead>
<tbody>
<!-- Table rows will be populated here -->
</tbody>
</table>
</div>
<div class="modal-footer">
<button id="save" class="btn btn-success waves-effect waves-light mr-1" type="submit" id="submitBtn"> Submit </button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<!-- <button type="button" class="btn btn-primary">Save changes</button> -->
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</form>
</div>
</div>
</div>
</div>
<!-- <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> -->
<script>
const myArray = [];
document.getElementById("addItem").addEventListener("click", function() {
var fieldArray = <?php echo json_encode($field); ?>;
var operatorArray = <?php echo json_encode($operator); ?>;
var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
var rows = table.getElementsByTagName("tr");
var hasValue = false;
var rowCounter = rows.length; // Get the current number of rows
// Check if any existing fields are empty
for (var i = 0; i < rows.length; i++) {
var cells = rows[i].getElementsByTagName("td");
for (var j = 0; j < cells.length; j++) {
var input = cells[j].querySelector('input, select');
if (input && input.value.trim() === "") {
alert("Field in row " + (i + 1) + " is empty.");
return; // Exit the loop after the first empty field is found.
} else {
hasValue = true;
}
}
}
if (!hasValue) {
alert("At least one row should contain a value.");
return; // Exit the function to prevent adding a new row.
}
var newRow = table.insertRow(rowCounter);
var cell1 = newRow.insertCell(0);
var cell2 = newRow.insertCell(1);
var cell3 = newRow.insertCell(2);
var cell4 = newRow.insertCell(3);
const select1 = document.createElement('select');
select1.className = 'form-control';
select1.name = 'column[]';
select1.setAttribute("data-toggle", "select2");
select1.id = 'column' + rowCounter; // Set a dynamic ID for the select input
// select1.onchange = function() {
// disableSelectedOptions(this,rowCounter);
// };
const select2 = document.createElement('select');
select2.className = 'form-control';
select2.name = 'operator[]';
select2.setAttribute("data-toggle", "select2");
select2.id = 'operator' + rowCounter; // Set a dynamic ID for the select input
select2.onchange = function() {
FieldChange(this, rowCounter);
};
exstingColumnId = 'column'+(rowCounter-1);
// if($('#' + exstingColumnId).val() != ""){
// myArray.push($('#' + exstingColumnId).val());
// }
// console.log(myArray);
fieldArray.forEach((option) => {
const fieldoption = document.createElement('option');
fieldoption.value = option.value;
fieldoption.setAttribute("fieldflag", option.fieldflag);
fieldoption.text = option.text;
// fieldoption.disabled = option.disable ? true : (option.disable == myArray[0] ? true : false);
// if (myArray.includes(option.value)) {
// fieldoption.disabled = true;
// }
// else{
// fieldoption.disabled = false;
// }
select1.appendChild(fieldoption);
});
for (const value in operatorArray) {
const optionElement = document.createElement('option');
optionElement.value = value;
optionElement.text = operatorArray[value];
select2.appendChild(optionElement);
}
const inputElement = document.createElement('input');
inputElement.type = 'text';
inputElement.className = 'form-control';
inputElement.name = 'values[]';
inputElement.placeholder = 'Enter the Values';
inputElement.id = 'values' + rowCounter; // Set a dynamic ID for the input field
cell1.appendChild(select1);
cell2.appendChild(select2);
cell3.appendChild(inputElement);
cell4.innerHTML = '<button type="button" class="btn btn-soft-danger btn-rounded waves-effect waves-light mr-1 remove-item"><i class="fa fa-trash"></i></button>';
$(select1).select2();
$(select2).select2();
});
// document.getElementById("addItemold").addEventListener("click", function() {
// var fieldArray = <?php echo json_encode($field); ?>;
// var operatorArray = <?php echo json_encode($operator); ?>;
// var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
// var rows = table.getElementsByTagName("tr");
// var hasValue = false;
// // Check if any existing fields are empty
// for (var i = 0; i < rows.length; i++) {
// var cells = rows[i].getElementsByTagName("td");
// for (var j = 0; j < cells.length; j++) {
// var input = cells[j].querySelector('input, select');
// if (input && input.value.trim() === "") {
// alert("Field in row " + (i + 1) + " is empty.");
// return; // Exit the loop after the first empty field is found.
// }else {
// hasValue = true;
// }
// }
// }
// if (!hasValue) {
// alert("At least one row should contain a value.");
// return; // Exit the function to prevent adding a new row.
// }
// var newRow = table.insertRow(table.rows.length);
// var cell1 = newRow.insertCell(0);
// var cell2 = newRow.insertCell(1);
// var cell3 = newRow.insertCell(2);
// var cell4 = newRow.insertCell(3);
// const select1 = document.createElement('select');
// select1.className = 'form-control';
// select1.name = 'column[]';
// select1.setAttribute("data-toggle", "select2");
// const select2 = document.createElement('select');
// select2.className = 'form-control';
// select2.name = 'operator[]';
// select2.setAttribute("data-toggle", "select2");
// for (const fieldvalue in fieldArray) {
// const fieldoption = document.createElement('option');
// fieldoption.value = fieldvalue;
// fieldoption.text = fieldArray[fieldvalue];
// select1.appendChild(fieldoption);
// }
// for (const value in operatorArray) {
// const optionElement = document.createElement('option');
// optionElement.value = value;
// optionElement.text = operatorArray[value];
// select2.appendChild(optionElement);
// }
// const inputElement = document.createElement('input');
// inputElement.type = 'text';
// inputElement.className = 'form-control';
// inputElement.name = 'values[]';
// inputElement.placeholder = 'Enter the Values';
// cell1.appendChild(select1);
// cell2.appendChild(select2);
// cell3.appendChild(inputElement);
// cell4.innerHTML = '<button type="button" class="btn btn-soft-danger btn-rounded waves-effect waves-light mr-1 remove-item"><i class="fa fa-trash"></i></button>';
// $(select1).select2();
// $(select2).select2();
// });
</script>
<script>
// Function to remove a row from the table
function removeItem(row) {
var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
var rows = table.getElementsByTagName("tr");
if (rows.length > 1) {
var rowIndex = row.rowIndex; // Get the row index
console.log(rowIndex);
var exstingColumnId = 'column' + (rowIndex-1);
var valueToRemove = $('#' + exstingColumnId).val();
// var indexToRemove = myArray.indexOf(valueToRemove);
// if (indexToRemove !== -1) {
// myArray.splice(indexToRemove, 1); // Remove the element at the specified index
// }
// console.log('myArray',myArray);
table.removeChild(row);
} else {
alert('At least one row should contain a value.');
}
}
// Attach the removeItem function to the Remove buttons using event delegation
document.querySelector("#itemTable tbody").addEventListener("click", function(event) {
if (event.target.classList.contains("remove-item")) {
var row = event.target.closest("tr"); // Find the closest row to the clicked button
removeItem(row);
}
});
</script>
<!-- function removeItem(row) {
var table = document.getElementById("itemTable").getElementsByTagName("tbody")[0];
var rows = table.getElementsByTagName("tr");
var hasValue = false; // Flag to track if the row to be removed has a value.
// Check if the row to be removed has values
var cells = row.getElementsByTagName("td");
for (var j = 0; j < cells.length; j++) {
var input = cells[j].querySelector('input, select');
if (input && input.value.trim() !== "") {
hasValue = true;
break; // Exit the loop after the first value is found in the row.
}
}
if (hasValue || rows.length > 1) {
table.removeChild(row);
} else {
alert('At least one row should contain a value.');
}
} -->
<!-- <script>
document.getElementById('previewButton').addEventListener('click', function() {
const name = "sanjeev";
const email = "document.getElementById('email').value";
// Update the modal with the preview data
// document.getElementById('previewName').textContent = name;
// document.getElementById('previewEmail').textContent = email;
// Show the modal
const modal = document.getElementById('previewModal');
modal.style.display = 'block';
// Close the modal when the close button is clicked
document.getElementById('closeModal').addEventListener('click', function() {
modal.style.display = 'none';
});
// Close the modal when clicking outside of it
window.onclick = function(event) {
if (event.target === modal) {
modal.style.display = 'none';
}
};
});
</script> -->
<script>
$(document).ready(function() {
$('#scrollable-modal').on('show.bs.modal', function() {
var formData = $("#myForm").serialize();
var groupName = $("#groupname").val();
// Use AJAX to load content into the modal
// Get the table reference
var table = $("#data-table tbody");
$.ajax({
type: "POST",
url: "<?= base_url() . 'insert_customer_group' ?>",
data: formData,
dataType: "json", // Expect JSON response
success: function(response) {
if (response.length > 0) {
$('#scrollableModalTitle').text(groupName + ' - Customer list');
// Clear existing rows
table.empty();
$x=0;
// Loop through the response and create table rows
$.each(response, function (index, item) {
var row = $("<tr>");
row.append($("<td style='width:10%;'>").text(++$x));
row.append($("<td style='width:30%;'>").text(item.customer_name));
row.append($("<td style='width:30%;'>").text(item.email));
row.append($("<td style='width:30%;'>").text(item.mobile_no));
table.append(row);
});
} else {
// Handle the case where there is no data
table.empty();
table.append("<tr><td colspan='4' style='width:100%; text-align: center; vertical-align: middle;'>No data available</td></tr>");
}
},
error: function () {
// alert("An error occurred.");
console.log("CG Preview Form - An error occurred.");
table.empty();
table.append("<tr><td colspan='4' style='width:100%; text-align: center; vertical-align: middle;'>No data available</td></tr>");
}
});
});
});
</script>
<script>
$("#save").on("click", function () {
$("#string_flag").val("save");
});
function FieldChange(selectElement, rowCounter) {
var id = selectElement.id;
var selectedOperator = selectElement.value;
var inputId = 'values' + rowCounter;
var column = $("#column"+rowCounter).find(':selected').attr('fieldflag');
if (column == 2 && (selectedOperator == 'greater than' || selectedOperator == 'greater than or equal to' || selectedOperator == 'less than' || selectedOperator == 'less than or equal to')) {
$('#' + inputId).replaceWith('<input type="date" class="form-control" id="' + inputId + '" name="values[]" placeholder="Enter the Date" />');
}else if(column == 2 && selectedOperator === 'between') {
var inputHtml = '<div style="display: inline-flex;"><input type="date" class="form-control" id="' + inputId + '1" placeholder="Enter the Start Date" onchange="concatBetween(' + rowCounter + ')" />' +
'<input type="date" class="form-control ml-1" id="' + inputId + '2" placeholder="Enter the End Date" onchange="concatBetween(' + rowCounter + ')" /></div>'+
'<input type="hidden" class="form-control" id="' + inputId + '" name="values[]" placeholder="values" />';
$('#' + inputId).replaceWith(inputHtml);
}
else if(column == 1 && (selectedOperator === 'contain' || selectedOperator == 'not contain')) {
$('#' + inputId).replaceWith('<input type="text" class="form-control" id="' + inputId + '" name="values[]" placeholder="Enter the Multiple Values with comma Seprator" onkeypress="return restriction(event,2)" />');
}else if(selectedOperator === 'is null' || selectedOperator == 'is not null') {
$('#' + inputId).replaceWith('<input type="hidden" class="form-control" id="' + inputId + '" name="values[]" placeholder="Enter the Values" value="0" />');
} else {
$('#' + inputId).replaceWith('<input type="text" class="form-control" id="' + inputId + '" name="values[]" placeholder="Enter the Values" onkeypress="return restriction(event,1)" />');
}
}
function concatBetween(Counter) {
// This function will be called when the date input changes
var Id = 'values' + Counter;
var started = $('#' +Id+'1').val();
var ended = $('#' +Id+'2').val();
if(started != "" && ended != ""){
$("#"+Id).val(started + ',' + ended);
}
// console.log("id: " + Id);
// console.log("counter: " + Counter);
// console.log("sv: " + started);
// console.log("ev: " + ended);
}
</script>
<script>
function restriction(event,temporary_flag) {
var charCode = event.which || event.keyCode;
if (Number(temporary_flag) == 2 &&
((charCode >= 65 && charCode <= 90) || // A-Z
(charCode >= 97 && charCode <= 122) || // a-z
(charCode >= 48 && charCode <= 57) || // 0-9
charCode == 44 // comma
)){
return true;
}
else if (Number(temporary_flag) == 1 &&
((charCode >= 48 && charCode <= 57) || // 0-9
(charCode >= 65 && charCode <= 90) || // A-Z
(charCode >= 97 && charCode <= 122) // a-z
)) {
return true;
} else {
event.preventDefault(); // Prevent the character from being entered
return false;
}
}
</script>
<script>
// // Function to disable options in the "Choose the Field" dropdowns
// function disableOptions(selectId) {
// console.log('inside');
// // Get all select elements with the specified name attribute
// var selectElements = document.querySelectorAll('select[name="column[]"]');
// // Iterate through the select elements
// selectElements.forEach(function (select) {
// console.log(select.id,selectId);
// if (select.id !== selectId) {
// console.log('if');
// // Find the "Choose the Field" option and disable it
// var chooseOption = select.querySelector('option[value=""]');
// if (chooseOption) {
// console.log('if-if');
// chooseOption.disabled = true;
// }
// }
// });
// }
// // Event listener for changes in the "Choose the Field" dropdowns
// document.addEventListener('change', function (e) {
// var target = e.target;
// console.log(target,'target');
// if (target.name === 'column[]' && target.value === '') {
// console.log('if');
// // Disable the "Choose the Field" option in other dropdowns
// disableOptions(target.id);
// }else{
// console.log('else');
// }
// });
// function disableSelectedOptions(selectElement, rowCounter) {
// var id = selectElement.id;
// var selectedOperator = selectElement.value;
// }
</script>
<script>
document.getElementById('myForm').addEventListener('submit', function(event) {
var form = event.target;
if (form.checkValidity() === false) {
form.reportValidity(); // Display validation error messages
event.preventDefault(); // Prevent form submission if it's not valid
$('#submitBtn').prop('disabled', false);
} else {
$('#submitBtn').prop('disabled', true);
}
});
</script>

View File

@ -1,89 +0,0 @@
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="float-right">
<a href="<?= base_url()."template_creation_form/0"; ?>" class="btn btn-primary"><i class="ri-file-edit-line"></i> Add Template </a>
</div><!-- end col-->
<br>
<h4 class="header-title mb-3"><?= $page_name; ?></h4>
<?php if (session()->getFlashdata('success') || session()->getFlashdata('error')) : ?>
<?php if (session()->getFlashdata('success')) : ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?= session('success') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php if (session()->getFlashdata('error')) : ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<?= session('error') ?>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php endif; ?>
<?php endif; ?>
<div class="table-responsive">
<table id="scroll-horizontal-datatable_customer" class="table w-100 nowrap">
<thead class="thead-light">
<tr>
<th hidden></th>
<th>Template Name</th>
<th>Mode</th>
<th>Created at</th>
<th>Created by</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<?php foreach ($template as $temp) :
if ($temp['isactive']) {
$class = 'badge badge-soft-success';
$message = 'Active';
} else {
$class = 'badge badge-soft-danger';
$message = 'In-Active';
} ?>
<tr>
<td hidden><?= $temp['template_id']; ?></td>
<td><?= $temp['template_name']; ?></td>
<td><?= $temp['mode']; ?></td>
<td><?= $temp['formatted_created_on']; ?></td>
<td><?= $temp['created_by_name']; ?></td>
<td><span class="<?php echo $class; ?>"><?php echo $message; ?></span></td>
<td>
<a href="<?= base_url()."template_creation_form/".$temp['template_id']; ?>" class="edit-button" title="Click to Edit Template" ><i class="ri-pencil-line"></i></a>
<?php if ($temp['isactive']) { ?> <a href="<?php echo "template_creation_delete/".$temp['template_id']; ?>" class="delete-button" title="Click to Delete Template" ><i class="ri-delete-bin-line"></i></a> <?php } ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div><!-- end row-->
<script>
$(document).ready(function() {
$('#scroll-horizontal-datatable_customer').DataTable({
"order": [
[0, "desc"]
] // 4 is the column index of "created_on" in your table
// Other DataTables configuration options
});
});
</script>
<!-- <script>
$(document).ready(function() {
$('#bs-example-modal-lg').on('show.bs.modal', function(event) {
var primaryKey = $(event.relatedTarget).data('primary-key');
console.log(primaryKey);
var groupName = $(event.relatedTarget).data('modal-title');
$('#myLargeModalLabel').text(groupName);
});
});
</script> -->

View File

@ -1,106 +0,0 @@
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<h4 class="header-title"><?= $page_name; ?></h4>
<form class="parsley-examples" action="<?= base_url() . "template_creation_insert"; ?>" method="post" enctype="multipart/form-data" id="myForm">
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-12">
<label for="templatename" class="col-form-label">Template Name<span class="text-danger"> *</span></label>
<input type="text" class="form-control" id="templatename" name="templatename" value="<?= isset($template_details['template_name']) ? $template_details['template_name'] : '' ?>" placeholder="Template Name" required />
<div class="invalid-feedback"> Please provide. </div>
</div>
<div class="form-group col-md-6">
<label for="mode" class="col-form-label col-md-3">Mode<span class="text-danger"></span></label>
<div class="col-md-9 mt-1">
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="emailRadio" name="mode" class="custom-control-input" value="Email" checked>
<label class="custom-control-label" for="emailRadio">Email</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="whatsappRadio" name="mode" class="custom-control-input" value="Whatsapp">
<label class="custom-control-label" for="whatsappRadio">Whatsapp</label>
</div>
</div>
</div>
<div class="form-group col-md-6" id="emailSubject" style="display: block;">
<label for="templatename" class="col-form-label">subject</label>
<input type="text" class="form-control" id="subject" name="subject" value="<?= isset($template_details['subject']) ? $template_details['subject'] : '' ?>" placeholder="Subject" />
</div>
<div class="form-group col-md-12">
<label for="templatemessage" class="col-form-label">Template Message<span class="text-danger"> *</span></label>
<textarea id="summernote-basic" name="templatemessage" class="form-control" rows="7">
<?php if(isset($template_details['message'])){ echo $template_details['message']; }else{ ?>
<h5>Hello {User}, </h5>
<p>Please, write text here!</p>
<?php } ?>
</textarea>
</div>
</div>
<input type="hidden" id="template_id" name="template_id" placeholder="hidden for template id" value="<?= isset($template_details['template_id']) ? $template_details['template_id'] : '' ?>" />
<?php if (!empty($template_details)) { ?>
<div class="form-group text-right m-b-0 checkbox checkbox-purple">
<input type="checkbox" id="isactive" name="isactive" class="form-control" <?= isset($template_details) && $template_details['isactive'] == 1 ? 'checked' : '' ?>>
<label for="isactive"> Is Active</label>
</div>
<br>
<?php } ?>
<div class="form-group text-right m-b-0">
<button class="btn btn-success waves-effect waves-light mr-1" type="submit" id="submitBtn">
Submit
</button>
<button type="reset" class="btn btn-primary waves-effect mr-1">
Reset
</button>
<a href="<?= base_url() . "template_creation"; ?>" class="btn btn-secondary waves-effect">Cancel</a>
</div>
</div>
</form>
</div> <!-- end card-body-->
</div> <!-- end card-->
</div> <!-- end col-->
</div><!-- end row -->
<script>
$(document).ready(function() {
// Listen for changes in the radio buttons
$('input[name="mode"]').on('change', function() {
var selectedValue = $(this).val();
if (selectedValue === 'Email') {
$('#emailSubject').show();
} else {
$('#emailSubject').hide();
}
});
var mode = "<?= isset($template_details['mode']) ? $template_details['mode'] : ""; ?>";
if(mode != ""){
var emailRadio = document.getElementById("emailRadio");
var whatsappRadio = document.getElementById("whatsappRadio");
if(mode == 'Email'){
emailRadio.checked = true;
whatsappRadio.checked = false;
$('#emailSubject').show();
}else if(mode == 'Whatsapp'){
emailRadio.checked = false;
whatsappRadio.checked = true;
$('#emailSubject').hide();
}
}
});
</script>
<script>
document.getElementById('myForm').addEventListener('submit', function(event) {
var form = event.target;
if (form.checkValidity() === false) {
form.reportValidity(); // Display validation error messages
event.preventDefault(); // Prevent form submission if it's not valid
$('#submitBtn').prop('disabled', false);
} else {
$('#submitBtn').prop('disabled', true);
}
});
</script>

253
composer.lock generated
View File

@ -8,33 +8,33 @@
"packages": [ "packages": [
{ {
"name": "laminas/laminas-escaper", "name": "laminas/laminas-escaper",
"version": "2.13.0", "version": "2.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laminas/laminas-escaper.git", "url": "https://github.com/laminas/laminas-escaper.git",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba" "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba", "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba", "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-ctype": "*", "ext-ctype": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0" "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0"
}, },
"conflict": { "conflict": {
"zendframework/zend-escaper": "*" "zendframework/zend-escaper": "*"
}, },
"require-dev": { "require-dev": {
"infection/infection": "^0.27.0", "infection/infection": "^0.26.6",
"laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-coding-standard": "~2.4.0",
"maglnet/composer-require-checker": "^3.8.0", "maglnet/composer-require-checker": "^3.8.0",
"phpunit/phpunit": "^9.6.7", "phpunit/phpunit": "^9.5.18",
"psalm/plugin-phpunit": "^0.18.4", "psalm/plugin-phpunit": "^0.17.0",
"vimeo/psalm": "^5.9" "vimeo/psalm": "^4.22.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -66,7 +66,7 @@
"type": "community_bridge" "type": "community_bridge"
} }
], ],
"time": "2023-10-10T08:35:13+00:00" "time": "2022-10-10T10:11:09+00:00"
}, },
{ {
"name": "mpdf/mpdf", "name": "mpdf/mpdf",
@ -801,30 +801,30 @@
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
"version": "2.0.0", "version": "1.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/instantiator.git", "url": "https://github.com/doctrine/instantiator.git",
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^8.1" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^11", "doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*", "ext-pdo": "*",
"ext-phar": "*", "ext-phar": "*",
"phpbench/phpbench": "^1.2", "phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.9.4", "phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1.3", "phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^9.5.27", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^5.4" "vimeo/psalm": "^4.30 || ^5.4"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -851,7 +851,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/instantiator/issues", "issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/2.0.0" "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
}, },
"funding": [ "funding": [
{ {
@ -867,7 +867,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-12-30T00:23:10+00:00" "time": "2022-12-30T00:15:36+00:00"
}, },
{ {
"name": "fakerphp/faker", "name": "fakerphp/faker",
@ -2934,23 +2934,22 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v6.3.4", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
"reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^1.1|^2|^3",
"symfony/string": "^5.4|^6.0" "symfony/string": "^5.4|^6.0"
}, },
"conflict": { "conflict": {
@ -2972,6 +2971,12 @@
"symfony/process": "^5.4|^6.0", "symfony/process": "^5.4|^6.0",
"symfony/var-dumper": "^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", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -2999,12 +3004,12 @@
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [ "keywords": [
"cli", "cli",
"command-line", "command line",
"console", "console",
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v6.3.4" "source": "https://github.com/symfony/console/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3020,29 +3025,29 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-08-16T10:10:12+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -3071,7 +3076,7 @@
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -3087,29 +3092,28 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-23T14:45:45+00:00" "time": "2022-01-02T09:55:41+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v6.3.2", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/event-dispatcher-contracts": "^2.5|^3" "symfony/event-dispatcher-contracts": "^2|^3"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<5.4"
"symfony/service-contracts": "<2.5"
}, },
"provide": { "provide": {
"psr/event-dispatcher-implementation": "1.0", "psr/event-dispatcher-implementation": "1.0",
@ -3122,9 +3126,13 @@
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0",
"symfony/expression-language": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0",
"symfony/http-foundation": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^1.1|^2|^3",
"symfony/stopwatch": "^5.4|^6.0" "symfony/stopwatch": "^5.4|^6.0"
}, },
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -3151,7 +3159,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3167,30 +3175,33 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-07-06T06:56:43+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df" "reference": "7bc61cc2db649b4637d331240c5346dcc7708051"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "reference": "7bc61cc2db649b4637d331240c5346dcc7708051",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"psr/event-dispatcher": "^1" "psr/event-dispatcher": "^1"
}, },
"suggest": {
"symfony/event-dispatcher-implementation": ""
},
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -3227,7 +3238,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -3243,24 +3254,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-23T14:45:45+00:00" "time": "2022-01-02T09:55:41+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v6.3.1", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8" "symfony/polyfill-mbstring": "~1.8"
}, },
@ -3290,7 +3301,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v6.3.1" "source": "https://github.com/symfony/filesystem/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3306,27 +3317,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-06-01T08:30:39+00:00" "time": "2023-01-20T17:44:14+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v6.3.5", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
},
"require-dev": {
"symfony/filesystem": "^6.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -3354,7 +3362,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v6.3.5" "source": "https://github.com/symfony/finder/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3370,25 +3378,25 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-09-26T12:56:25+00:00" "time": "2023-01-20T17:44:14+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v6.3.0", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3" "symfony/deprecation-contracts": "^2.1|^3"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -3421,7 +3429,7 @@
"options" "options"
], ],
"support": { "support": {
"source": "https://github.com/symfony/options-resolver/tree/v6.3.0" "source": "https://github.com/symfony/options-resolver/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3437,7 +3445,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-12T14:21:09+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@ -3933,20 +3941,20 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v6.3.4", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" "reference": "2114fd60f26a296cc403a7939ab91478475a33d4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "reference": "2114fd60f26a296cc403a7939ab91478475a33d4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -3974,7 +3982,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v6.3.4" "source": "https://github.com/symfony/process/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3990,33 +3998,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-08-07T10:39:22+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"psr/container": "^2.0" "psr/container": "^2.0"
}, },
"conflict": { "conflict": {
"ext-psr": "<1.1|>=2" "ext-psr": "<1.1|>=2"
}, },
"suggest": {
"symfony/service-implementation": ""
},
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -4026,10 +4037,7 @@
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Symfony\\Contracts\\Service\\": "" "Symfony\\Contracts\\Service\\": ""
}, }
"exclude-from-classmap": [
"/Test/"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -4056,7 +4064,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.3.0" "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -4072,25 +4080,25 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-23T14:45:45+00:00" "time": "2022-05-30T19:17:58+00:00"
}, },
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",
"version": "v6.3.0", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/stopwatch.git", "url": "https://github.com/symfony/stopwatch.git",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" "reference": "011e781839dd1d2eb8119f65ac516a530f60226d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "reference": "011e781839dd1d2eb8119f65ac516a530f60226d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/service-contracts": "^2.5|^3" "symfony/service-contracts": "^1|^2|^3"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -4118,7 +4126,7 @@
"description": "Provides a way to profile code", "description": "Provides a way to profile code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/stopwatch/tree/v6.3.0" "source": "https://github.com/symfony/stopwatch/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -4134,37 +4142,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-02-16T10:14:28+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v6.3.5", "version": "v6.0.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a",
"reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0" "symfony/polyfill-mbstring": "~1.0"
}, },
"conflict": { "conflict": {
"symfony/translation-contracts": "<2.5" "symfony/translation-contracts": "<2.0"
}, },
"require-dev": { "require-dev": {
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0",
"symfony/http-client": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0",
"symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^5.4|^6.0" "symfony/var-exporter": "^5.4|^6.0"
}, },
"type": "library", "type": "library",
@ -4204,7 +4211,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v6.3.5" "source": "https://github.com/symfony/string/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -4220,7 +4227,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-09-18T10:38:32+00:00" "time": "2023-01-01T08:36:10+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",

BIN
vendor.zip Normal file

Binary file not shown.

View File

@ -1264,7 +1264,6 @@ return array(
'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php', 'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php',
'Nexus\\CsConfig\\Ruleset\\Nexus80' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus80.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\\Nexus81' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus81.php',
'Nexus\\CsConfig\\Ruleset\\Nexus82' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/Nexus82.php',
'Nexus\\CsConfig\\Ruleset\\RulesetInterface' => $vendorDir . '/nexusphp/cs-config/src/Ruleset/RulesetInterface.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\\AbstractCustomFixerTestCase' => $vendorDir . '/nexusphp/cs-config/src/Test/AbstractCustomFixerTestCase.php',
'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => $vendorDir . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php', 'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => $vendorDir . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php',
@ -1715,7 +1714,6 @@ return array(
'PhpCsFixer\\ConfigurationException\\InvalidForEnvFixerConfigurationException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.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\\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\\Application' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Application.php',
'PhpCsFixer\\Console\\Command\\CheckCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/CheckCommand.php',
'PhpCsFixer\\Console\\Command\\DescribeCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.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\\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\\DocumentationCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php',
@ -1727,12 +1725,6 @@ return array(
'PhpCsFixer\\Console\\Command\\SelfUpdateCommand' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.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\\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\\ErrorOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php',
'PhpCsFixer\\Console\\Output\\OutputContext' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/OutputContext.php',
'PhpCsFixer\\Console\\Output\\Progress\\DotsOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php',
'PhpCsFixer\\Console\\Output\\Progress\\NullOutput' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/NullOutput.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputFactory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputInterface.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputType' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputType.php',
'PhpCsFixer\\Console\\Report\\FixReport\\CheckstyleReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.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\\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\\JsonReporter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php',
@ -1764,7 +1756,6 @@ return array(
'PhpCsFixer\\DocBlock\\Tag' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/Tag.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\\TagComparator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php',
'PhpCsFixer\\DocBlock\\TypeExpression' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php', 'PhpCsFixer\\DocBlock\\TypeExpression' => $vendorDir . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php',
'PhpCsFixer\\Doctrine\\Annotation\\DocLexer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php',
'PhpCsFixer\\Doctrine\\Annotation\\Token' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.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\\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\\DocumentationLocator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php',
@ -1787,7 +1778,6 @@ return array(
'PhpCsFixer\\FixerConfiguration\\FixerOption' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.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\\FixerOptionBuilder' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php',
'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php', 'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php',
'PhpCsFixer\\FixerConfiguration\\FixerOptionSorter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionSorter.php',
'PhpCsFixer\\FixerConfiguration\\InvalidOptionsForEnvException' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.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\\CodeSample' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php',
'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php', 'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php',
@ -1804,7 +1794,6 @@ return array(
'PhpCsFixer\\FixerNameValidator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.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\\AbstractIncrementOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php',
'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php', 'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php',
'PhpCsFixer\\Fixer\\AbstractShortOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractShortOperatorFixer.php',
'PhpCsFixer\\Fixer\\Alias\\ArrayPushFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.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\\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\\EregToPregFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php',
@ -1821,13 +1810,9 @@ return array(
'PhpCsFixer\\Fixer\\ArrayNotation\\NoTrailingCommaInSinglelineArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.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\\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\\NormalizeIndexBraceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\ReturnToYieldFromFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ReturnToYieldFromFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\TrimArraySpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.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\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\YieldFromArrayToYieldsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/YieldFromArrayToYieldsFixer.php',
'PhpCsFixer\\Fixer\\AttributeNotation\\AttributeEmptyParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php', 'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php',
'PhpCsFixer\\Fixer\\Basic\\BracesPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php',
'PhpCsFixer\\Fixer\\Basic\\CurlyBracesPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.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\\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\\NoMultipleStatementsPerLineFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php',
@ -1835,7 +1820,6 @@ return array(
'PhpCsFixer\\Fixer\\Basic\\NonPrintableCharacterFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.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\\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\\Basic\\PsrAutoloadingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php',
'PhpCsFixer\\Fixer\\Basic\\SingleLineEmptyBodyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/SingleLineEmptyBodyFixer.php',
'PhpCsFixer\\Fixer\\Casing\\ClassReferenceNameCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.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\\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\\IntegerLiteralCaseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php',
@ -1845,7 +1829,6 @@ return array(
'PhpCsFixer\\Fixer\\Casing\\MagicMethodCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.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\\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\\Casing\\NativeFunctionTypeDeclarationCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php',
'PhpCsFixer\\Fixer\\Casing\\NativeTypeDeclarationCasingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeTypeDeclarationCasingFixer.php',
'PhpCsFixer\\Fixer\\CastNotation\\CastSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.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\\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\\ModernizeTypesCastingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php',
@ -1864,8 +1847,6 @@ return array(
'PhpCsFixer\\Fixer\\ClassNotation\\OrderedClassElementsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.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\\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\\OrderedTraitsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\OrderedTypesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTypesFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\PhpdocReadonlyClassCommentToKeywordFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/PhpdocReadonlyClassCommentToKeywordFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\ProtectedToPrivateFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.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\\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\\SelfStaticAccessorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php',
@ -1892,7 +1873,6 @@ return array(
'PhpCsFixer\\Fixer\\ControlStructure\\NoBreakCommentFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.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\\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\\NoTrailingCommaInListCallFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php',
'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededBracesFixer.php',
'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededControlParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.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\\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\\NoUselessElseFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php',
@ -1954,12 +1934,9 @@ return array(
'PhpCsFixer\\Fixer\\LanguageConstruct\\GetClassToClassKeywordFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.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\\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\\NoUnsetOnPropertyFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\NullableTypeDeclarationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NullableTypeDeclarationFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php', 'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAroundConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAroundConstructFixer.php',
'PhpCsFixer\\Fixer\\ListNotation\\ListSyntaxFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.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\\BlankLineAfterNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php',
'PhpCsFixer\\Fixer\\NamespaceNotation\\BlankLinesBeforeNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLinesBeforeNamespaceFixer.php',
'PhpCsFixer\\Fixer\\NamespaceNotation\\CleanNamespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.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\\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\\NoLeadingNamespaceWhitespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php',
@ -1970,9 +1947,7 @@ return array(
'PhpCsFixer\\Fixer\\Operator\\ConcatSpaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.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\\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\\LogicalOperatorsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php',
'PhpCsFixer\\Fixer\\Operator\\LongToShorthandOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LongToShorthandOperatorFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php', 'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NewWithParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NoSpaceAroundDoubleColonFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.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\\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\\NoUselessNullsafeOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php',
@ -1992,9 +1967,6 @@ return array(
'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.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\\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\\PhpUnitConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderReturnTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderReturnTypeFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderStaticFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderStaticFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertFixer.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\\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\\PhpUnitExpectationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitExpectationFixer.php',
@ -2031,7 +2003,6 @@ return array(
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoUselessInheritdocFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.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\\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\\PhpdocOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php',
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocParamOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocParamOrderFixer.php',
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocReturnSelfReferenceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.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\\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\\PhpdocSeparationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php',
@ -2069,7 +2040,6 @@ return array(
'PhpCsFixer\\Fixer\\Whitespace\\ArrayIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.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\\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\\BlankLineBetweenImportGroupsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypeDeclarationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypeDeclarationFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypehintFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.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\\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\\IndentationTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php',
@ -2081,9 +2051,7 @@ return array(
'PhpCsFixer\\Fixer\\Whitespace\\NoTrailingWhitespaceFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.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\\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\\SingleBlankLineAtEofFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\SpacesInsideParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SpacesInsideParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php', 'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\TypeDeclarationSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypeDeclarationSpacesFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.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\\Fixer\\WhitespacesAwareFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php',
'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php', 'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php',
@ -2109,12 +2077,6 @@ return array(
'PhpCsFixer\\RuleSet\\RuleSetInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.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\\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\\DoctrineAnnotationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS1x0RiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS1x0RiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS1x0Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS1x0Set.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS2x0RiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS2x0RiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS2x0Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS2x0Set.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCSRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCSRiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCSSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCSSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.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\\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\\PHP54MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php',
@ -2130,7 +2092,6 @@ return array(
'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.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\\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\\PHP82MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PHPUnit100MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit100MigrationRiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PHPUnit30MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.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\\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\\PHPUnit35MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php',
@ -2164,7 +2125,6 @@ return array(
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\AbstractControlCaseStructuresAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.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\\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\\CaseAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DataProviderAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DataProviderAnalysis.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DefaultAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.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\\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\\MatchAnalysis' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php',
@ -2179,7 +2139,6 @@ return array(
'PhpCsFixer\\Tokenizer\\Analyzer\\ClassyAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.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\\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\\ControlCaseStructuresAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\DataProviderAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/DataProviderAnalyzer.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.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\\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\\NamespaceUsesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php',
@ -2196,10 +2155,8 @@ return array(
'PhpCsFixer\\Tokenizer\\Transformer\\ArrayTypehintTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.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\\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\\BraceClassInstantiationTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\BraceTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\ClassConstantTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.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\\ConstructorPromotionTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\DisjunctiveNormalFormTypeParenthesisTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/DisjunctiveNormalFormTypeParenthesisTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\FirstClassCallableTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.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\\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\\NameQualifiedTransformer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php',
@ -3428,6 +3385,7 @@ return array(
'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php',
'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $vendorDir . '/symfony/service-contracts/Test/ServiceLocatorTest.php',
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.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\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.php',
'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php',

View File

@ -7,8 +7,8 @@ $baseDir = dirname($vendorDir);
return array( return array(
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',

View File

@ -8,8 +8,8 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
{ {
public static $files = array ( public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
@ -1516,7 +1516,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php', 'Nexus\\CsConfig\\Ruleset\\AbstractRuleset' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/AbstractRuleset.php',
'Nexus\\CsConfig\\Ruleset\\Nexus80' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus80.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\\Nexus81' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus81.php',
'Nexus\\CsConfig\\Ruleset\\Nexus82' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/Nexus82.php',
'Nexus\\CsConfig\\Ruleset\\RulesetInterface' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Ruleset/RulesetInterface.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\\AbstractCustomFixerTestCase' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/AbstractCustomFixerTestCase.php',
'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php', 'Nexus\\CsConfig\\Test\\AbstractRulesetTestCase' => __DIR__ . '/..' . '/nexusphp/cs-config/src/Test/AbstractRulesetTestCase.php',
@ -1967,7 +1966,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\ConfigurationException\\InvalidForEnvFixerConfigurationException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidForEnvFixerConfigurationException.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\\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\\Application' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Application.php',
'PhpCsFixer\\Console\\Command\\CheckCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/CheckCommand.php',
'PhpCsFixer\\Console\\Command\\DescribeCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.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\\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\\DocumentationCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php',
@ -1979,12 +1977,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Console\\Command\\SelfUpdateCommand' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.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\\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\\ErrorOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php',
'PhpCsFixer\\Console\\Output\\OutputContext' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/OutputContext.php',
'PhpCsFixer\\Console\\Output\\Progress\\DotsOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php',
'PhpCsFixer\\Console\\Output\\Progress\\NullOutput' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/NullOutput.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputFactory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputInterface.php',
'PhpCsFixer\\Console\\Output\\Progress\\ProgressOutputType' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputType.php',
'PhpCsFixer\\Console\\Report\\FixReport\\CheckstyleReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.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\\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\\JsonReporter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php',
@ -2016,7 +2008,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\DocBlock\\Tag' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/Tag.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\\TagComparator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/TagComparator.php',
'PhpCsFixer\\DocBlock\\TypeExpression' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php', 'PhpCsFixer\\DocBlock\\TypeExpression' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php',
'PhpCsFixer\\Doctrine\\Annotation\\DocLexer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php',
'PhpCsFixer\\Doctrine\\Annotation\\Token' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Token.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\\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\\DocumentationLocator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php',
@ -2039,7 +2030,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\FixerConfiguration\\FixerOption' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOption.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\\FixerOptionBuilder' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionBuilder.php',
'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php', 'PhpCsFixer\\FixerConfiguration\\FixerOptionInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionInterface.php',
'PhpCsFixer\\FixerConfiguration\\FixerOptionSorter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/FixerOptionSorter.php',
'PhpCsFixer\\FixerConfiguration\\InvalidOptionsForEnvException' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerConfiguration/InvalidOptionsForEnvException.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\\CodeSample' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSample.php',
'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php', 'PhpCsFixer\\FixerDefinition\\CodeSampleInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/CodeSampleInterface.php',
@ -2056,7 +2046,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\FixerNameValidator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.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\\AbstractIncrementOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php',
'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php', 'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php',
'PhpCsFixer\\Fixer\\AbstractShortOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractShortOperatorFixer.php',
'PhpCsFixer\\Fixer\\Alias\\ArrayPushFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/ArrayPushFixer.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\\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\\EregToPregFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php',
@ -2073,13 +2062,9 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\ArrayNotation\\NoTrailingCommaInSinglelineArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoTrailingCommaInSinglelineArrayFixer.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\\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\\NormalizeIndexBraceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\ReturnToYieldFromFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ReturnToYieldFromFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\TrimArraySpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/TrimArraySpacesFixer.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\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php',
'PhpCsFixer\\Fixer\\ArrayNotation\\YieldFromArrayToYieldsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/YieldFromArrayToYieldsFixer.php',
'PhpCsFixer\\Fixer\\AttributeNotation\\AttributeEmptyParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php', 'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php',
'PhpCsFixer\\Fixer\\Basic\\BracesPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php',
'PhpCsFixer\\Fixer\\Basic\\CurlyBracesPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.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\\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\\NoMultipleStatementsPerLineFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php',
@ -2087,7 +2072,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Basic\\NonPrintableCharacterFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.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\\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\\Basic\\PsrAutoloadingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php',
'PhpCsFixer\\Fixer\\Basic\\SingleLineEmptyBodyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/SingleLineEmptyBodyFixer.php',
'PhpCsFixer\\Fixer\\Casing\\ClassReferenceNameCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/ClassReferenceNameCasingFixer.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\\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\\IntegerLiteralCaseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/IntegerLiteralCaseFixer.php',
@ -2097,7 +2081,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Casing\\MagicMethodCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.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\\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\\Casing\\NativeFunctionTypeDeclarationCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeFunctionTypeDeclarationCasingFixer.php',
'PhpCsFixer\\Fixer\\Casing\\NativeTypeDeclarationCasingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeTypeDeclarationCasingFixer.php',
'PhpCsFixer\\Fixer\\CastNotation\\CastSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.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\\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\\ModernizeTypesCastingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/ModernizeTypesCastingFixer.php',
@ -2116,8 +2099,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\ClassNotation\\OrderedClassElementsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedClassElementsFixer.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\\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\\OrderedTraitsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTraitsFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\OrderedTypesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/OrderedTypesFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\PhpdocReadonlyClassCommentToKeywordFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/PhpdocReadonlyClassCommentToKeywordFixer.php',
'PhpCsFixer\\Fixer\\ClassNotation\\ProtectedToPrivateFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ProtectedToPrivateFixer.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\\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\\SelfStaticAccessorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/SelfStaticAccessorFixer.php',
@ -2144,7 +2125,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\ControlStructure\\NoBreakCommentFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoBreakCommentFixer.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\\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\\NoTrailingCommaInListCallFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoTrailingCommaInListCallFixer.php',
'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededBracesFixer.php',
'PhpCsFixer\\Fixer\\ControlStructure\\NoUnneededControlParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUnneededControlParenthesesFixer.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\\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\\NoUselessElseFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/NoUselessElseFixer.php',
@ -2206,12 +2186,9 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\LanguageConstruct\\GetClassToClassKeywordFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/GetClassToClassKeywordFixer.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\\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\\NoUnsetOnPropertyFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NoUnsetOnPropertyFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\NullableTypeDeclarationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/NullableTypeDeclarationFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php', 'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAfterConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAfterConstructFixer.php',
'PhpCsFixer\\Fixer\\LanguageConstruct\\SingleSpaceAroundConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/SingleSpaceAroundConstructFixer.php',
'PhpCsFixer\\Fixer\\ListNotation\\ListSyntaxFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ListNotation/ListSyntaxFixer.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\\BlankLineAfterNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLineAfterNamespaceFixer.php',
'PhpCsFixer\\Fixer\\NamespaceNotation\\BlankLinesBeforeNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/BlankLinesBeforeNamespaceFixer.php',
'PhpCsFixer\\Fixer\\NamespaceNotation\\CleanNamespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/CleanNamespaceFixer.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\\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\\NoLeadingNamespaceWhitespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/NamespaceNotation/NoLeadingNamespaceWhitespaceFixer.php',
@ -2222,9 +2199,7 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Operator\\ConcatSpaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/ConcatSpaceFixer.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\\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\\LogicalOperatorsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LogicalOperatorsFixer.php',
'PhpCsFixer\\Fixer\\Operator\\LongToShorthandOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/LongToShorthandOperatorFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php', 'PhpCsFixer\\Fixer\\Operator\\NewWithBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithBracesFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NewWithParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NewWithParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Operator\\NoSpaceAroundDoubleColonFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoSpaceAroundDoubleColonFixer.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\\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\\NoUselessNullsafeOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Operator/NoUselessNullsafeOperatorFixer.php',
@ -2244,9 +2219,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.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\\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\\PhpUnitConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderReturnTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderReturnTypeFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderStaticFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderStaticFixer.php',
'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDedicateAssertFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDedicateAssertFixer.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\\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\\PhpUnitExpectationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitExpectationFixer.php',
@ -2283,7 +2255,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocNoUselessInheritdocFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocNoUselessInheritdocFixer.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\\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\\PhpdocOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocOrderFixer.php',
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocParamOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocParamOrderFixer.php',
'PhpCsFixer\\Fixer\\Phpdoc\\PhpdocReturnSelfReferenceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocReturnSelfReferenceFixer.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\\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\\PhpdocSeparationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Phpdoc/PhpdocSeparationFixer.php',
@ -2321,7 +2292,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Whitespace\\ArrayIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/ArrayIndentationFixer.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\\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\\BlankLineBetweenImportGroupsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/BlankLineBetweenImportGroupsFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypeDeclarationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypeDeclarationFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\CompactNullableTypehintFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/CompactNullableTypehintFixer.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\\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\\IndentationTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/IndentationTypeFixer.php',
@ -2333,9 +2303,7 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Fixer\\Whitespace\\NoTrailingWhitespaceFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/NoTrailingWhitespaceFixer.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\\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\\SingleBlankLineAtEofFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SingleBlankLineAtEofFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\SpacesInsideParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/SpacesInsideParenthesesFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php', 'PhpCsFixer\\Fixer\\Whitespace\\StatementIndentationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/StatementIndentationFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\TypeDeclarationSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypeDeclarationSpacesFixer.php',
'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.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\\Fixer\\WhitespacesAwareFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php',
'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php', 'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php',
@ -2361,12 +2329,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\RuleSet\\RuleSetInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/RuleSetInterface.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\\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\\DoctrineAnnotationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/DoctrineAnnotationSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS1x0RiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS1x0RiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS1x0Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS1x0Set.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS2x0RiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS2x0RiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCS2x0Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCS2x0Set.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCSRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCSRiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERCSSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERCSSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PERRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PERRiskySet.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\\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\\PHP54MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP54MigrationSet.php',
@ -2382,7 +2344,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.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\\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\\PHP82MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php',
'PhpCsFixer\\RuleSet\\Sets\\PHPUnit100MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit100MigrationRiskySet.php',
'PhpCsFixer\\RuleSet\\Sets\\PHPUnit30MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit30MigrationRiskySet.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\\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\\PHPUnit35MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit35MigrationRiskySet.php',
@ -2416,7 +2377,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\AbstractControlCaseStructuresAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/AbstractControlCaseStructuresAnalysis.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\\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\\CaseAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/CaseAnalysis.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DataProviderAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DataProviderAnalysis.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\Analysis\\DefaultAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/DefaultAnalysis.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\\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\\MatchAnalysis' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/Analysis/MatchAnalysis.php',
@ -2431,7 +2391,6 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Tokenizer\\Analyzer\\ClassyAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ClassyAnalyzer.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\\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\\ControlCaseStructuresAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\DataProviderAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/DataProviderAnalyzer.php',
'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.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\\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\\NamespaceUsesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php',
@ -2448,10 +2407,8 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'PhpCsFixer\\Tokenizer\\Transformer\\ArrayTypehintTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ArrayTypehintTransformer.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\\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\\BraceClassInstantiationTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceClassInstantiationTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\BraceTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/BraceTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\ClassConstantTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ClassConstantTransformer.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\\ConstructorPromotionTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/ConstructorPromotionTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\DisjunctiveNormalFormTypeParenthesisTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/DisjunctiveNormalFormTypeParenthesisTransformer.php',
'PhpCsFixer\\Tokenizer\\Transformer\\FirstClassCallableTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/FirstClassCallableTransformer.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\\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\\NameQualifiedTransformer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Transformer/NameQualifiedTransformer.php',
@ -3680,6 +3637,7 @@ class ComposerStaticInitaf5d45949d7526726de1c031a6bdb085
'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php', 'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php',
'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => __DIR__ . '/..' . '/symfony/service-contracts/Test/ServiceLocatorTest.php',
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.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\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.php',
'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php',

View File

@ -286,33 +286,33 @@
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
"version": "2.0.0", "version": "1.5.0",
"version_normalized": "2.0.0.0", "version_normalized": "1.5.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/instantiator.git", "url": "https://github.com/doctrine/instantiator.git",
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
"reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^8.1" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^11", "doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*", "ext-pdo": "*",
"ext-phar": "*", "ext-phar": "*",
"phpbench/phpbench": "^1.2", "phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.9.4", "phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1.3", "phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^9.5.27", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^5.4" "vimeo/psalm": "^4.30 || ^5.4"
}, },
"time": "2022-12-30T00:23:10+00:00", "time": "2022-12-30T00:15:36+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -339,7 +339,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/instantiator/issues", "issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/2.0.0" "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
}, },
"funding": [ "funding": [
{ {
@ -594,36 +594,36 @@
}, },
{ {
"name": "laminas/laminas-escaper", "name": "laminas/laminas-escaper",
"version": "2.13.0", "version": "2.12.0",
"version_normalized": "2.13.0.0", "version_normalized": "2.12.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laminas/laminas-escaper.git", "url": "https://github.com/laminas/laminas-escaper.git",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba" "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba", "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490",
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba", "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-ctype": "*", "ext-ctype": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0" "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0"
}, },
"conflict": { "conflict": {
"zendframework/zend-escaper": "*" "zendframework/zend-escaper": "*"
}, },
"require-dev": { "require-dev": {
"infection/infection": "^0.27.0", "infection/infection": "^0.26.6",
"laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-coding-standard": "~2.4.0",
"maglnet/composer-require-checker": "^3.8.0", "maglnet/composer-require-checker": "^3.8.0",
"phpunit/phpunit": "^9.6.7", "phpunit/phpunit": "^9.5.18",
"psalm/plugin-phpunit": "^0.18.4", "psalm/plugin-phpunit": "^0.17.0",
"vimeo/psalm": "^5.9" "vimeo/psalm": "^4.22.0"
}, },
"time": "2023-10-10T08:35:13+00:00", "time": "2022-10-10T10:11:09+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3067,24 +3067,23 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v6.3.4", "version": "v6.0.19",
"version_normalized": "6.3.4.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
"reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^1.1|^2|^3",
"symfony/string": "^5.4|^6.0" "symfony/string": "^5.4|^6.0"
}, },
"conflict": { "conflict": {
@ -3106,7 +3105,13 @@
"symfony/process": "^5.4|^6.0", "symfony/process": "^5.4|^6.0",
"symfony/var-dumper": "^5.4|^6.0" "symfony/var-dumper": "^5.4|^6.0"
}, },
"time": "2023-08-16T10:10:12+00:00", "suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
},
"time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3135,12 +3140,12 @@
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [ "keywords": [
"cli", "cli",
"command-line", "command line",
"console", "console",
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v6.3.4" "source": "https://github.com/symfony/console/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3160,27 +3165,27 @@
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"version_normalized": "3.3.0.0", "version_normalized": "3.0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
}, },
"time": "2023-05-23T14:45:45+00:00", "time": "2022-01-02T09:55:41+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -3210,7 +3215,7 @@
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -3230,26 +3235,25 @@
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v6.3.2", "version": "v6.0.19",
"version_normalized": "6.3.2.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
"reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/event-dispatcher-contracts": "^2.5|^3" "symfony/event-dispatcher-contracts": "^2|^3"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<5.4"
"symfony/service-contracts": "<2.5"
}, },
"provide": { "provide": {
"psr/event-dispatcher-implementation": "1.0", "psr/event-dispatcher-implementation": "1.0",
@ -3262,10 +3266,14 @@
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0",
"symfony/expression-language": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0",
"symfony/http-foundation": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^1.1|^2|^3",
"symfony/stopwatch": "^5.4|^6.0" "symfony/stopwatch": "^5.4|^6.0"
}, },
"time": "2023-07-06T06:56:43+00:00", "suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3293,7 +3301,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3313,28 +3321,31 @@
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"version_normalized": "3.3.0.0", "version_normalized": "3.0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df" "reference": "7bc61cc2db649b4637d331240c5346dcc7708051"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "reference": "7bc61cc2db649b4637d331240c5346dcc7708051",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"psr/event-dispatcher": "^1" "psr/event-dispatcher": "^1"
}, },
"time": "2023-05-23T14:45:45+00:00", "suggest": {
"symfony/event-dispatcher-implementation": ""
},
"time": "2022-01-02T09:55:41+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -3372,7 +3383,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -3392,25 +3403,25 @@
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v6.3.1", "version": "v6.0.19",
"version_normalized": "6.3.1.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
"reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8" "symfony/polyfill-mbstring": "~1.8"
}, },
"time": "2023-06-01T08:30:39+00:00", "time": "2023-01-20T17:44:14+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3438,7 +3449,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v6.3.1" "source": "https://github.com/symfony/filesystem/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3458,26 +3469,23 @@
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v6.3.5", "version": "v6.0.19",
"version_normalized": "6.3.5.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11",
"reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
}, },
"require-dev": { "time": "2023-01-20T17:44:14+00:00",
"symfony/filesystem": "^6.0"
},
"time": "2023-09-26T12:56:25+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3505,7 +3513,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v6.3.5" "source": "https://github.com/symfony/finder/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -3525,24 +3533,24 @@
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v6.3.0", "version": "v6.0.19",
"version_normalized": "6.3.0.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3",
"reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3" "symfony/deprecation-contracts": "^2.1|^3"
}, },
"time": "2023-05-12T14:21:09+00:00", "time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -3575,7 +3583,7 @@
"options" "options"
], ],
"support": { "support": {
"source": "https://github.com/symfony/options-resolver/tree/v6.3.0" "source": "https://github.com/symfony/options-resolver/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -4105,23 +4113,23 @@
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v6.3.4", "version": "v6.0.19",
"version_normalized": "6.3.4.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" "reference": "2114fd60f26a296cc403a7939ab91478475a33d4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4",
"reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "reference": "2114fd60f26a296cc403a7939ab91478475a33d4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.0.2"
}, },
"time": "2023-08-07T10:39:22+00:00", "time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -4149,7 +4157,7 @@
"description": "Executes commands in sub-processes", "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/process/tree/v6.3.4" "source": "https://github.com/symfony/process/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -4169,31 +4177,34 @@
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v3.3.0", "version": "v3.0.2",
"version_normalized": "3.3.0.0", "version_normalized": "3.0.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"psr/container": "^2.0" "psr/container": "^2.0"
}, },
"conflict": { "conflict": {
"ext-psr": "<1.1|>=2" "ext-psr": "<1.1|>=2"
}, },
"time": "2023-05-23T14:45:45+00:00", "suggest": {
"symfony/service-implementation": ""
},
"time": "2022-05-30T19:17:58+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "3.4-dev" "dev-main": "3.0-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/contracts", "name": "symfony/contracts",
@ -4204,10 +4215,7 @@
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Symfony\\Contracts\\Service\\": "" "Symfony\\Contracts\\Service\\": ""
}, }
"exclude-from-classmap": [
"/Test/"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -4234,7 +4242,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.3.0" "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
}, },
"funding": [ "funding": [
{ {
@ -4254,24 +4262,24 @@
}, },
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",
"version": "v6.3.0", "version": "v6.0.19",
"version_normalized": "6.3.0.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/stopwatch.git", "url": "https://github.com/symfony/stopwatch.git",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" "reference": "011e781839dd1d2eb8119f65ac516a530f60226d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d",
"reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "reference": "011e781839dd1d2eb8119f65ac516a530f60226d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/service-contracts": "^2.5|^3" "symfony/service-contracts": "^1|^2|^3"
}, },
"time": "2023-02-16T10:14:28+00:00", "time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -4299,7 +4307,7 @@
"description": "Provides a way to profile code", "description": "Provides a way to profile code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/stopwatch/tree/v6.3.0" "source": "https://github.com/symfony/stopwatch/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {
@ -4319,37 +4327,36 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v6.3.5", "version": "v6.0.19",
"version_normalized": "6.3.5.0", "version_normalized": "6.0.19.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a",
"reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.0.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0" "symfony/polyfill-mbstring": "~1.0"
}, },
"conflict": { "conflict": {
"symfony/translation-contracts": "<2.5" "symfony/translation-contracts": "<2.0"
}, },
"require-dev": { "require-dev": {
"symfony/error-handler": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0",
"symfony/http-client": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0",
"symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^5.4|^6.0" "symfony/var-exporter": "^5.4|^6.0"
}, },
"time": "2023-09-18T10:38:32+00:00", "time": "2023-01-01T08:36:10+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {
@ -4388,7 +4395,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v6.3.5" "source": "https://github.com/symfony/string/tree/v6.0.19"
}, },
"funding": [ "funding": [
{ {

View File

@ -1,9 +1,9 @@
<?php return array( <?php return array(
'root' => array( 'root' => array(
'name' => 'codeigniter4/framework', 'name' => 'codeigniter4/framework',
'pretty_version' => 'dev-uat', 'pretty_version' => '1.0.0+no-version-set',
'version' => 'dev-uat', 'version' => '1.0.0.0',
'reference' => 'b2c2793df29c417b538cbf497cc89349f8161000', 'reference' => NULL,
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
@ -20,9 +20,9 @@
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'codeigniter4/framework' => array( 'codeigniter4/framework' => array(
'pretty_version' => 'dev-uat', 'pretty_version' => '1.0.0+no-version-set',
'version' => 'dev-uat', 'version' => '1.0.0.0',
'reference' => 'b2c2793df29c417b538cbf497cc89349f8161000', 'reference' => NULL,
'type' => 'project', 'type' => 'project',
'install_path' => __DIR__ . '/../../', 'install_path' => __DIR__ . '/../../',
'aliases' => array(), 'aliases' => array(),
@ -56,9 +56,9 @@
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'doctrine/instantiator' => array( 'doctrine/instantiator' => array(
'pretty_version' => '2.0.0', 'pretty_version' => '1.5.0',
'version' => '2.0.0.0', 'version' => '1.5.0.0',
'reference' => 'c6222283fa3f4ac679f8b9ced9a4e23f163e80d0', 'reference' => '0a0fa9780f5d4e507415a065172d26a98d02047b',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/instantiator', 'install_path' => __DIR__ . '/../doctrine/instantiator',
'aliases' => array(), 'aliases' => array(),
@ -92,9 +92,9 @@
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'laminas/laminas-escaper' => array( 'laminas/laminas-escaper' => array(
'pretty_version' => '2.13.0', 'pretty_version' => '2.12.0',
'version' => '2.13.0.0', 'version' => '2.12.0.0',
'reference' => 'af459883f4018d0f8a0c69c7a209daef3bf973ba', 'reference' => 'ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../laminas/laminas-escaper', 'install_path' => __DIR__ . '/../laminas/laminas-escaper',
'aliases' => array(), 'aliases' => array(),
@ -455,36 +455,36 @@
'dev_requirement' => false, 'dev_requirement' => false,
), ),
'symfony/console' => array( 'symfony/console' => array(
'pretty_version' => 'v6.3.4', 'pretty_version' => 'v6.0.19',
'version' => '6.3.4.0', 'version' => '6.0.19.0',
'reference' => 'eca495f2ee845130855ddf1cf18460c38966c8b6', 'reference' => 'c3ebc83d031b71c39da318ca8b7a07ecc67507ed',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/console', 'install_path' => __DIR__ . '/../symfony/console',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/deprecation-contracts' => array( 'symfony/deprecation-contracts' => array(
'pretty_version' => 'v3.3.0', 'pretty_version' => 'v3.0.2',
'version' => '3.3.0.0', 'version' => '3.0.2.0',
'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', 'reference' => '26954b3d62a6c5fd0ea8a2a00c0353a14978d05c',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/event-dispatcher' => array( 'symfony/event-dispatcher' => array(
'pretty_version' => 'v6.3.2', 'pretty_version' => 'v6.0.19',
'version' => '6.3.2.0', 'version' => '6.0.19.0',
'reference' => 'adb01fe097a4ee930db9258a3cc906b5beb5cf2e', 'reference' => '2eaf8e63bc5b8cefabd4a800157f0d0c094f677a',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/event-dispatcher', 'install_path' => __DIR__ . '/../symfony/event-dispatcher',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/event-dispatcher-contracts' => array( 'symfony/event-dispatcher-contracts' => array(
'pretty_version' => 'v3.3.0', 'pretty_version' => 'v3.0.2',
'version' => '3.3.0.0', 'version' => '3.0.2.0',
'reference' => 'a76aed96a42d2b521153fb382d418e30d18b59df', 'reference' => '7bc61cc2db649b4637d331240c5346dcc7708051',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts',
'aliases' => array(), 'aliases' => array(),
@ -497,27 +497,27 @@
), ),
), ),
'symfony/filesystem' => array( 'symfony/filesystem' => array(
'pretty_version' => 'v6.3.1', 'pretty_version' => 'v6.0.19',
'version' => '6.3.1.0', 'version' => '6.0.19.0',
'reference' => 'edd36776956f2a6fcf577edb5b05eb0e3bdc52ae', 'reference' => '3d49eec03fda1f0fc19b7349fbbe55ebc1004214',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/filesystem', 'install_path' => __DIR__ . '/../symfony/filesystem',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/finder' => array( 'symfony/finder' => array(
'pretty_version' => 'v6.3.5', 'pretty_version' => 'v6.0.19',
'version' => '6.3.5.0', 'version' => '6.0.19.0',
'reference' => 'a1b31d88c0e998168ca7792f222cbecee47428c4', 'reference' => '5cc9cac6586fc0c28cd173780ca696e419fefa11',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/finder', 'install_path' => __DIR__ . '/../symfony/finder',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/options-resolver' => array( 'symfony/options-resolver' => array(
'pretty_version' => 'v6.3.0', 'pretty_version' => 'v6.0.19',
'version' => '6.3.0.0', 'version' => '6.0.19.0',
'reference' => 'a10f19f5198d589d5c33333cffe98dc9820332dd', 'reference' => '6a180d1c45e0d9797470ca9eb46215692de00fa3',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/options-resolver', 'install_path' => __DIR__ . '/../symfony/options-resolver',
'aliases' => array(), 'aliases' => array(),
@ -578,36 +578,36 @@
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/process' => array( 'symfony/process' => array(
'pretty_version' => 'v6.3.4', 'pretty_version' => 'v6.0.19',
'version' => '6.3.4.0', 'version' => '6.0.19.0',
'reference' => '0b5c29118f2e980d455d2e34a5659f4579847c54', 'reference' => '2114fd60f26a296cc403a7939ab91478475a33d4',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/process', 'install_path' => __DIR__ . '/../symfony/process',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/service-contracts' => array( 'symfony/service-contracts' => array(
'pretty_version' => 'v3.3.0', 'pretty_version' => 'v3.0.2',
'version' => '3.3.0.0', 'version' => '3.0.2.0',
'reference' => '40da9cc13ec349d9e4966ce18b5fbcd724ab10a4', 'reference' => 'd78d39c1599bd1188b8e26bb341da52c3c6d8a66',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/service-contracts', 'install_path' => __DIR__ . '/../symfony/service-contracts',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/stopwatch' => array( 'symfony/stopwatch' => array(
'pretty_version' => 'v6.3.0', 'pretty_version' => 'v6.0.19',
'version' => '6.3.0.0', 'version' => '6.0.19.0',
'reference' => 'fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2', 'reference' => '011e781839dd1d2eb8119f65ac516a530f60226d',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/stopwatch', 'install_path' => __DIR__ . '/../symfony/stopwatch',
'aliases' => array(), 'aliases' => array(),
'dev_requirement' => true, 'dev_requirement' => true,
), ),
'symfony/string' => array( 'symfony/string' => array(
'pretty_version' => 'v6.3.5', 'pretty_version' => 'v6.0.19',
'version' => '6.3.5.0', 'version' => '6.0.19.0',
'reference' => '13d76d0fb049051ed12a04bef4f9de8715bea339', 'reference' => 'd9e72497367c23e08bf94176d2be45b00a9d232a',
'type' => 'library', 'type' => 'library',
'install_path' => __DIR__ . '/../symfony/string', 'install_path' => __DIR__ . '/../symfony/string',
'aliases' => array(), 'aliases' => array(),

View File

@ -4,8 +4,8 @@
$issues = array(); $issues = array();
if (!(PHP_VERSION_ID >= 80100)) { if (!(PHP_VERSION_ID >= 70400)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
} }
if ($issues) { if ($issues) {

View File

@ -16,17 +16,17 @@
} }
], ],
"require": { "require": {
"php": "^8.1" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"ext-phar": "*", "ext-phar": "*",
"ext-pdo": "*", "ext-pdo": "*",
"doctrine/coding-standard": "^11", "doctrine/coding-standard": "^9 || ^11",
"phpbench/phpbench": "^1.2", "phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.9.4", "phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1.3", "phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^9.5.27", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^5.4" "vimeo/psalm": "^4.30 || ^5.4"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

View File

@ -1,7 +1,5 @@
<?php <?php
declare(strict_types=1);
namespace Doctrine\Instantiator\Exception; namespace Doctrine\Instantiator\Exception;
use Throwable; use Throwable;

View File

@ -1,7 +1,5 @@
<?php <?php
declare(strict_types=1);
namespace Doctrine\Instantiator\Exception; namespace Doctrine\Instantiator\Exception;
use InvalidArgumentException as BaseInvalidArgumentException; use InvalidArgumentException as BaseInvalidArgumentException;
@ -38,7 +36,7 @@ class InvalidArgumentException extends BaseInvalidArgumentException implements E
{ {
return new self(sprintf( return new self(sprintf(
'The provided class "%s" is abstract, and cannot be instantiated', 'The provided class "%s" is abstract, and cannot be instantiated',
$reflectionClass->getName(), $reflectionClass->getName()
)); ));
} }
@ -46,7 +44,7 @@ class InvalidArgumentException extends BaseInvalidArgumentException implements E
{ {
return new self(sprintf( return new self(sprintf(
'The provided class "%s" is an enum, and cannot be instantiated', 'The provided class "%s" is an enum, and cannot be instantiated',
$className, $className
)); ));
} }
} }

View File

@ -1,7 +1,5 @@
<?php <?php
declare(strict_types=1);
namespace Doctrine\Instantiator\Exception; namespace Doctrine\Instantiator\Exception;
use Exception; use Exception;
@ -22,15 +20,15 @@ class UnexpectedValueException extends BaseUnexpectedValueException implements E
*/ */
public static function fromSerializationTriggeredException( public static function fromSerializationTriggeredException(
ReflectionClass $reflectionClass, ReflectionClass $reflectionClass,
Exception $exception, Exception $exception
): self { ): self {
return new self( return new self(
sprintf( sprintf(
'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization',
$reflectionClass->getName(), $reflectionClass->getName()
), ),
0, 0,
$exception, $exception
); );
} }
@ -44,7 +42,7 @@ class UnexpectedValueException extends BaseUnexpectedValueException implements E
string $errorString, string $errorString,
int $errorCode, int $errorCode,
string $errorFile, string $errorFile,
int $errorLine, int $errorLine
): self { ): self {
return new self( return new self(
sprintf( sprintf(
@ -52,10 +50,10 @@ class UnexpectedValueException extends BaseUnexpectedValueException implements E
. 'in file "%s" at line "%d"', . 'in file "%s" at line "%d"',
$reflectionClass->getName(), $reflectionClass->getName(),
$errorFile, $errorFile,
$errorLine, $errorLine
), ),
0, 0,
new Exception($errorString, $errorCode), new Exception($errorString, $errorCode)
); );
} }
} }

View File

@ -1,7 +1,5 @@
<?php <?php
declare(strict_types=1);
namespace Doctrine\Instantiator; namespace Doctrine\Instantiator;
use ArrayIterator; use ArrayIterator;
@ -22,6 +20,8 @@ use function sprintf;
use function strlen; use function strlen;
use function unserialize; use function unserialize;
use const PHP_VERSION_ID;
final class Instantiator implements InstantiatorInterface final class Instantiator implements InstantiatorInterface
{ {
/** /**
@ -31,33 +31,37 @@ final class Instantiator implements InstantiatorInterface
* *
* @deprecated This constant will be private in 2.0 * @deprecated This constant will be private in 2.0
*/ */
private const SERIALIZATION_FORMAT_USE_UNSERIALIZER = 'C'; public const SERIALIZATION_FORMAT_USE_UNSERIALIZER = 'C';
private const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O';
/** @deprecated This constant will be private in 2.0 */
public const SERIALIZATION_FORMAT_AVOID_UNSERIALIZER = 'O';
/** /**
* Used to instantiate specific classes, indexed by class name. * Used to instantiate specific classes, indexed by class name.
* *
* @var callable[] * @var callable[]
*/ */
private static array $cachedInstantiators = []; private static $cachedInstantiators = [];
/** /**
* Array of objects that can directly be cloned, indexed by class name. * Array of objects that can directly be cloned, indexed by class name.
* *
* @var object[] * @var object[]
*/ */
private static array $cachedCloneables = []; private static $cachedCloneables = [];
/** /**
* @param string $className
* @phpstan-param class-string<T> $className * @phpstan-param class-string<T> $className
* *
* @return object
* @phpstan-return T * @phpstan-return T
* *
* @throws ExceptionInterface * @throws ExceptionInterface
* *
* @template T of object * @template T of object
*/ */
public function instantiate(string $className): object public function instantiate($className)
{ {
if (isset(self::$cachedCloneables[$className])) { if (isset(self::$cachedCloneables[$className])) {
/** @phpstan-var T */ /** @phpstan-var T */
@ -80,11 +84,12 @@ final class Instantiator implements InstantiatorInterface
* *
* @phpstan-param class-string<T> $className * @phpstan-param class-string<T> $className
* *
* @return object
* @phpstan-return T * @phpstan-return T
* *
* @template T of object * @template T of object
*/ */
private function buildAndCacheFromFactory(string $className): object private function buildAndCacheFromFactory(string $className)
{ {
$factory = self::$cachedInstantiators[$className] = $this->buildFactory($className); $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className);
$instance = $factory(); $instance = $factory();
@ -122,12 +127,14 @@ final class Instantiator implements InstantiatorInterface
'%s:%d:"%s":0:{}', '%s:%d:"%s":0:{}',
is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER,
strlen($className), strlen($className),
$className, $className
); );
$this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString); $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString);
return static fn () => unserialize($serializedString); return static function () use ($serializedString) {
return unserialize($serializedString);
};
} }
/** /**
@ -146,7 +153,7 @@ final class Instantiator implements InstantiatorInterface
throw InvalidArgumentException::fromNonExistingClass($className); throw InvalidArgumentException::fromNonExistingClass($className);
} }
if (enum_exists($className, false)) { if (PHP_VERSION_ID >= 80100 && enum_exists($className, false)) {
throw InvalidArgumentException::fromEnum($className); throw InvalidArgumentException::fromEnum($className);
} }
@ -174,7 +181,7 @@ final class Instantiator implements InstantiatorInterface
$message, $message,
$code, $code,
$file, $file,
$line, $line
); );
return true; return true;

View File

@ -1,7 +1,5 @@
<?php <?php
declare(strict_types=1);
namespace Doctrine\Instantiator; namespace Doctrine\Instantiator;
use Doctrine\Instantiator\Exception\ExceptionInterface; use Doctrine\Instantiator\Exception\ExceptionInterface;
@ -12,13 +10,15 @@ use Doctrine\Instantiator\Exception\ExceptionInterface;
interface InstantiatorInterface interface InstantiatorInterface
{ {
/** /**
* @param string $className
* @phpstan-param class-string<T> $className * @phpstan-param class-string<T> $className
* *
* @return object
* @phpstan-return T * @phpstan-return T
* *
* @throws ExceptionInterface * @throws ExceptionInterface
* *
* @template T of object * @template T of object
*/ */
public function instantiate(string $className): object; public function instantiate($className);
} }

View File

@ -18,7 +18,7 @@
"config": { "config": {
"sort-packages": true, "sort-packages": true,
"platform": { "platform": {
"php": "8.1.99" "php": "7.4.99"
}, },
"allow-plugins": { "allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true, "dealerdirect/phpcodesniffer-composer-installer": true,
@ -29,17 +29,17 @@
"extra": { "extra": {
}, },
"require": { "require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0",
"ext-ctype": "*", "ext-ctype": "*",
"ext-mbstring": "*" "ext-mbstring": "*"
}, },
"require-dev": { "require-dev": {
"infection/infection": "^0.27.0", "infection/infection": "^0.26.6",
"laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-coding-standard": "~2.4.0",
"maglnet/composer-require-checker": "^3.8.0", "maglnet/composer-require-checker": "^3.8.0",
"phpunit/phpunit": "^9.6.7", "phpunit/phpunit": "^9.5.18",
"psalm/plugin-phpunit": "^0.18.4", "psalm/plugin-phpunit": "^0.17.0",
"vimeo/psalm": "^5.9" "vimeo/psalm": "^4.22.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

View File

@ -157,21 +157,9 @@ class Escaper
$this->htmlSpecialCharsFlags = ENT_QUOTES | ENT_SUBSTITUTE; $this->htmlSpecialCharsFlags = ENT_QUOTES | ENT_SUBSTITUTE;
// set matcher callbacks // set matcher callbacks
$this->htmlAttrMatcher = $this->htmlAttrMatcher = [$this, 'htmlAttrMatcher'];
/** @param array<array-key, string> $matches */ $this->jsMatcher = [$this, 'jsMatcher'];
function (array $matches): string { $this->cssMatcher = [$this, 'cssMatcher'];
return $this->htmlAttrMatcher($matches);
};
$this->jsMatcher =
/** @param array<array-key, string> $matches */
function (array $matches): string {
return $this->jsMatcher($matches);
};
$this->cssMatcher =
/** @param array<array-key, string> $matches */
function (array $matches): string {
return $this->cssMatcher($matches);
};
} }
/** /**

View File

@ -21,7 +21,6 @@ use Symfony\Component\Console\Command\SignalableCommandInterface;
use Symfony\Component\Console\CommandLoader\CommandLoaderInterface; use Symfony\Component\Console\CommandLoader\CommandLoaderInterface;
use Symfony\Component\Console\Completion\CompletionInput; use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Suggestion;
use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\Event\ConsoleErrorEvent; use Symfony\Component\Console\Event\ConsoleErrorEvent;
use Symfony\Component\Console\Event\ConsoleSignalEvent; use Symfony\Component\Console\Event\ConsoleSignalEvent;
@ -33,7 +32,6 @@ use Symfony\Component\Console\Exception\NamespaceNotFoundException;
use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Helper\DebugFormatterHelper; use Symfony\Component\Console\Helper\DebugFormatterHelper;
use Symfony\Component\Console\Helper\DescriptorHelper;
use Symfony\Component\Console\Helper\FormatterHelper; use Symfony\Component\Console\Helper\FormatterHelper;
use Symfony\Component\Console\Helper\Helper; use Symfony\Component\Console\Helper\Helper;
use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\HelperSet;
@ -74,20 +72,20 @@ class Application implements ResetInterface
{ {
private array $commands = []; private array $commands = [];
private bool $wantHelps = false; private bool $wantHelps = false;
private ?Command $runningCommand = null; private $runningCommand = null;
private string $name; private string $name;
private string $version; private string $version;
private ?CommandLoaderInterface $commandLoader = null; private $commandLoader = null;
private bool $catchExceptions = true; private bool $catchExceptions = true;
private bool $autoExit = true; private bool $autoExit = true;
private InputDefinition $definition; private $definition;
private HelperSet $helperSet; private $helperSet;
private ?EventDispatcherInterface $dispatcher = null; private $dispatcher = null;
private Terminal $terminal; private $terminal;
private string $defaultCommand; private string $defaultCommand;
private bool $singleCommand = false; private bool $singleCommand = false;
private bool $initialized = false; private bool $initialized = false;
private ?SignalRegistry $signalRegistry = null; private $signalRegistry;
private array $signalsToDispatchEvent = []; private array $signalsToDispatchEvent = [];
public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN') public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN')
@ -105,14 +103,11 @@ class Application implements ResetInterface
/** /**
* @final * @final
*/ */
public function setDispatcher(EventDispatcherInterface $dispatcher): void public function setDispatcher(EventDispatcherInterface $dispatcher)
{ {
$this->dispatcher = $dispatcher; $this->dispatcher = $dispatcher;
} }
/**
* @return void
*/
public function setCommandLoader(CommandLoaderInterface $commandLoader) public function setCommandLoader(CommandLoaderInterface $commandLoader)
{ {
$this->commandLoader = $commandLoader; $this->commandLoader = $commandLoader;
@ -121,15 +116,12 @@ class Application implements ResetInterface
public function getSignalRegistry(): SignalRegistry public function getSignalRegistry(): SignalRegistry
{ {
if (!$this->signalRegistry) { if (!$this->signalRegistry) {
throw new RuntimeException('Signals are not supported. Make sure that the "pcntl" extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); throw new RuntimeException('Signals are not supported. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.');
} }
return $this->signalRegistry; return $this->signalRegistry;
} }
/**
* @return void
*/
public function setSignalsToDispatchEvent(int ...$signalsToDispatchEvent) public function setSignalsToDispatchEvent(int ...$signalsToDispatchEvent)
{ {
$this->signalsToDispatchEvent = $signalsToDispatchEvent; $this->signalsToDispatchEvent = $signalsToDispatchEvent;
@ -149,8 +141,13 @@ class Application implements ResetInterface
@putenv('COLUMNS='.$this->terminal->getWidth()); @putenv('COLUMNS='.$this->terminal->getWidth());
} }
$input ??= new ArgvInput(); if (null === $input) {
$output ??= new ConsoleOutput(); $input = new ArgvInput();
}
if (null === $output) {
$output = new ConsoleOutput();
}
$renderException = function (\Throwable $e) use ($output) { $renderException = function (\Throwable $e) use ($output) {
if ($output instanceof ConsoleOutputInterface) { if ($output instanceof ConsoleOutputInterface) {
@ -231,7 +228,7 @@ class Application implements ResetInterface
try { try {
// Makes ArgvInput::getFirstArgument() able to distinguish an option from an argument. // Makes ArgvInput::getFirstArgument() able to distinguish an option from an argument.
$input->bind($this->getDefinition()); $input->bind($this->getDefinition());
} catch (ExceptionInterface) { } catch (ExceptionInterface $e) {
// Errors must be ignored, full binding/validation happens later when the command is known. // Errors must be ignored, full binding/validation happens later when the command is known.
} }
@ -261,7 +258,21 @@ class Application implements ResetInterface
// the command name MUST be the first element of the input // the command name MUST be the first element of the input
$command = $this->find($name); $command = $this->find($name);
} catch (\Throwable $e) { } catch (\Throwable $e) {
if (($e instanceof CommandNotFoundException && !$e instanceof NamespaceNotFoundException) && 1 === \count($alternatives = $e->getAlternatives()) && $input->isInteractive()) { if (!($e instanceof CommandNotFoundException && !$e instanceof NamespaceNotFoundException) || 1 !== \count($alternatives = $e->getAlternatives()) || !$input->isInteractive()) {
if (null !== $this->dispatcher) {
$event = new ConsoleErrorEvent($input, $output, $e);
$this->dispatcher->dispatch($event, ConsoleEvents::ERROR);
if (0 === $event->getExitCode()) {
return 0;
}
$e = $event->getError();
}
throw $e;
}
$alternative = $alternatives[0]; $alternative = $alternatives[0];
$style = new SymfonyStyle($input, $output); $style = new SymfonyStyle($input, $output);
@ -280,36 +291,6 @@ class Application implements ResetInterface
} }
$command = $this->find($alternative); $command = $this->find($alternative);
} else {
if (null !== $this->dispatcher) {
$event = new ConsoleErrorEvent($input, $output, $e);
$this->dispatcher->dispatch($event, ConsoleEvents::ERROR);
if (0 === $event->getExitCode()) {
return 0;
}
$e = $event->getError();
}
try {
if ($e instanceof CommandNotFoundException && $namespace = $this->findNamespace($name)) {
$helper = new DescriptorHelper();
$helper->describe($output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output, $this, [
'format' => 'txt',
'raw_text' => false,
'namespace' => $namespace,
'short' => false,
]);
return isset($event) ? $event->getExitCode() : 1;
}
throw $e;
} catch (NamespaceNotFoundException) {
throw $e;
}
}
} }
if ($command instanceof LazyCommand) { if ($command instanceof LazyCommand) {
@ -324,15 +305,12 @@ class Application implements ResetInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function reset() public function reset()
{ {
} }
/**
* @return void
*/
public function setHelperSet(HelperSet $helperSet) public function setHelperSet(HelperSet $helperSet)
{ {
$this->helperSet = $helperSet; $this->helperSet = $helperSet;
@ -346,9 +324,6 @@ class Application implements ResetInterface
return $this->helperSet ??= $this->getDefaultHelperSet(); return $this->helperSet ??= $this->getDefaultHelperSet();
} }
/**
* @return void
*/
public function setDefinition(InputDefinition $definition) public function setDefinition(InputDefinition $definition)
{ {
$this->definition = $definition; $this->definition = $definition;
@ -380,16 +355,18 @@ class Application implements ResetInterface
CompletionInput::TYPE_ARGUMENT_VALUE === $input->getCompletionType() CompletionInput::TYPE_ARGUMENT_VALUE === $input->getCompletionType()
&& 'command' === $input->getCompletionName() && 'command' === $input->getCompletionName()
) { ) {
$commandNames = [];
foreach ($this->all() as $name => $command) { foreach ($this->all() as $name => $command) {
// skip hidden commands and aliased commands as they already get added below // skip hidden commands and aliased commands as they already get added below
if ($command->isHidden() || $command->getName() !== $name) { if ($command->isHidden() || $command->getName() !== $name) {
continue; continue;
} }
$suggestions->suggestValue(new Suggestion($command->getName(), $command->getDescription())); $commandNames[] = $command->getName();
foreach ($command->getAliases() as $name) { foreach ($command->getAliases() as $name) {
$suggestions->suggestValue(new Suggestion($name, $command->getDescription())); $commandNames[] = $name;
} }
} }
$suggestions->suggestValues(array_filter($commandNames));
return; return;
} }
@ -419,8 +396,6 @@ class Application implements ResetInterface
/** /**
* Sets whether to catch exceptions or not during commands execution. * Sets whether to catch exceptions or not during commands execution.
*
* @return void
*/ */
public function setCatchExceptions(bool $boolean) public function setCatchExceptions(bool $boolean)
{ {
@ -437,8 +412,6 @@ class Application implements ResetInterface
/** /**
* Sets whether to automatically exit after a command execution or not. * Sets whether to automatically exit after a command execution or not.
*
* @return void
*/ */
public function setAutoExit(bool $boolean) public function setAutoExit(bool $boolean)
{ {
@ -455,9 +428,7 @@ class Application implements ResetInterface
/** /**
* Sets the application name. * Sets the application name.
* **/
* @return void
*/
public function setName(string $name) public function setName(string $name)
{ {
$this->name = $name; $this->name = $name;
@ -473,8 +444,6 @@ class Application implements ResetInterface
/** /**
* Sets the application version. * Sets the application version.
*
* @return void
*/ */
public function setVersion(string $version) public function setVersion(string $version)
{ {
@ -513,8 +482,6 @@ class Application implements ResetInterface
* If a Command is not enabled it will not be added. * If a Command is not enabled it will not be added.
* *
* @param Command[] $commands An array of commands * @param Command[] $commands An array of commands
*
* @return void
*/ */
public function addCommands(array $commands) public function addCommands(array $commands)
{ {
@ -602,7 +569,7 @@ class Application implements ResetInterface
{ {
$this->init(); $this->init();
return isset($this->commands[$name]) || ($this->commandLoader?->has($name) && $this->add($this->commandLoader->get($name))); return isset($this->commands[$name]) || ($this->commandLoader && $this->commandLoader->has($name) && $this->add($this->commandLoader->get($name)));
} }
/** /**
@ -712,7 +679,9 @@ class Application implements ResetInterface
if ($alternatives = $this->findAlternatives($name, $allCommands)) { if ($alternatives = $this->findAlternatives($name, $allCommands)) {
// remove hidden commands // remove hidden commands
$alternatives = array_filter($alternatives, fn ($name) => !$this->get($name)->isHidden()); $alternatives = array_filter($alternatives, function ($name) {
return !$this->get($name)->isHidden();
});
if (1 == \count($alternatives)) { if (1 == \count($alternatives)) {
$message .= "\n\nDid you mean this?\n "; $message .= "\n\nDid you mean this?\n ";
@ -863,7 +832,9 @@ class Application implements ResetInterface
} }
if (str_contains($message, "@anonymous\0")) { if (str_contains($message, "@anonymous\0")) {
$message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', fn ($m) => class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0], $message); $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) {
return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0];
}, $message);
} }
$width = $this->terminal->getWidth() ? $this->terminal->getWidth() - 1 : \PHP_INT_MAX; $width = $this->terminal->getWidth() ? $this->terminal->getWidth() - 1 : \PHP_INT_MAX;
@ -924,8 +895,6 @@ class Application implements ResetInterface
/** /**
* Configures the input and output instances based on the user arguments and options. * Configures the input and output instances based on the user arguments and options.
*
* @return void
*/ */
protected function configureIO(InputInterface $input, OutputInterface $output) protected function configureIO(InputInterface $input, OutputInterface $output)
{ {
@ -1000,62 +969,44 @@ class Application implements ResetInterface
} }
} }
if ($this->signalsToDispatchEvent) {
$commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : []; $commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : [];
if ($commandSignals || $this->dispatcher && $this->signalsToDispatchEvent) {
if ($commandSignals || null !== $this->dispatcher) {
if (!$this->signalRegistry) { if (!$this->signalRegistry) {
throw new RuntimeException('Unable to subscribe to signal events. Make sure that the "pcntl" extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); throw new RuntimeException('Unable to subscribe to signal events. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.');
} }
if (Terminal::hasSttyAvailable()) { if (Terminal::hasSttyAvailable()) {
$sttyMode = shell_exec('stty -g'); $sttyMode = shell_exec('stty -g');
foreach ([\SIGINT, \SIGTERM] as $signal) { foreach ([\SIGINT, \SIGTERM] as $signal) {
$this->signalRegistry->register($signal, static fn () => shell_exec('stty '.$sttyMode)); $this->signalRegistry->register($signal, static function () use ($sttyMode) {
shell_exec('stty '.$sttyMode);
});
}
} }
} }
if ($this->dispatcher) { if (null !== $this->dispatcher) {
// We register application signals, so that we can dispatch the event
foreach ($this->signalsToDispatchEvent as $signal) { foreach ($this->signalsToDispatchEvent as $signal) {
$event = new ConsoleSignalEvent($command, $input, $output, $signal); $event = new ConsoleSignalEvent($command, $input, $output, $signal);
$this->signalRegistry->register($signal, function ($signal) use ($event, $command, $commandSignals) { $this->signalRegistry->register($signal, function ($signal, $hasNext) use ($event) {
$this->dispatcher->dispatch($event, ConsoleEvents::SIGNAL); $this->dispatcher->dispatch($event, ConsoleEvents::SIGNAL);
$exitCode = $event->getExitCode();
// If the command is signalable, we call the handleSignal() method // No more handlers, we try to simulate PHP default behavior
if (\in_array($signal, $commandSignals, true)) { if (!$hasNext) {
$exitCode = $command->handleSignal($signal, $exitCode); if (!\in_array($signal, [\SIGUSR1, \SIGUSR2], true)) {
// BC layer for Symfony <= 5 exit(0);
if (null === $exitCode) {
trigger_deprecation('symfony/console', '6.3', 'Not returning an exit code from "%s::handleSignal()" is deprecated, return "false" to keep the command running or "0" to exit successfully.', get_debug_type($command));
$exitCode = 0;
} }
} }
if (false !== $exitCode) {
exit($exitCode);
}
}); });
} }
// then we register command signals, but not if already handled after the dispatcher
$commandSignals = array_diff($commandSignals, $this->signalsToDispatchEvent);
} }
foreach ($commandSignals as $signal) { foreach ($commandSignals as $signal) {
$this->signalRegistry->register($signal, function (int $signal) use ($command): void { $this->signalRegistry->register($signal, [$command, 'handleSignal']);
$exitCode = $command->handleSignal($signal);
// BC layer for Symfony <= 5
if (null === $exitCode) {
trigger_deprecation('symfony/console', '6.3', 'Not returning an exit code from "%s::handleSignal()" is deprecated, return "false" to keep the command running or "0" to exit successfully.', get_debug_type($command));
$exitCode = 0;
}
if (false !== $exitCode) {
exit($exitCode);
}
});
} }
} }
@ -1067,7 +1018,7 @@ class Application implements ResetInterface
try { try {
$command->mergeApplicationDefinition(); $command->mergeApplicationDefinition();
$input->bind($command->getDefinition()); $input->bind($command->getDefinition());
} catch (ExceptionInterface) { } catch (ExceptionInterface $e) {
// ignore invalid options/arguments for now, to allow the event listeners to customize the InputDefinition // ignore invalid options/arguments for now, to allow the event listeners to customize the InputDefinition
} }
@ -1211,7 +1162,7 @@ class Application implements ResetInterface
} }
} }
$alternatives = array_filter($alternatives, fn ($lev) => $lev < 2 * $threshold); $alternatives = array_filter($alternatives, function ($lev) use ($threshold) { return $lev < 2 * $threshold; });
ksort($alternatives, \SORT_NATURAL | \SORT_FLAG_CASE); ksort($alternatives, \SORT_NATURAL | \SORT_FLAG_CASE);
return array_keys($alternatives); return array_keys($alternatives);
@ -1302,7 +1253,7 @@ class Application implements ResetInterface
return $namespaces; return $namespaces;
} }
private function init(): void private function init()
{ {
if ($this->initialized) { if ($this->initialized) {
return; return;

View File

@ -1,32 +1,6 @@
CHANGELOG CHANGELOG
========= =========
6.3
---
* Add support for choosing exit code while handling signal, or to not exit at all
* Add `ProgressBar::setPlaceholderFormatter` to set a placeholder attached to a instance, instead of being global.
* Add `ReStructuredTextDescriptor`
6.2
---
* Improve truecolor terminal detection in some cases
* Add support for 256 color terminals (conversion from Ansi24 to Ansi8 if terminal is capable of it)
* Deprecate calling `*Command::setApplication()`, `*FormatterStyle::setForeground/setBackground()`, `Helper::setHelpSet()`, `Input*::setDefault()`, `Question::setAutocompleterCallback/setValidator()`without any arguments
* Change the signature of `OutputFormatterStyleInterface::setForeground/setBackground()` to `setForeground/setBackground(?string)`
* Change the signature of `HelperInterface::setHelperSet()` to `setHelperSet(?HelperSet)`
6.1
---
* Add support to display table vertically when calling setVertical()
* Add method `__toString()` to `InputInterface`
* Added `OutputWrapper` to prevent truncated URL in `SymfonyStyle::createBlock`.
* Deprecate `Command::$defaultName` and `Command::$defaultDescription`, use the `AsCommand` attribute instead
* Add suggested values for arguments and options in input definition, for input completion
* Add `$resumeAt` parameter to `ProgressBar#start()`, so that one can easily 'resume' progress on longer tasks, and still get accurate `getEstimate()` and `getRemaining()` results.
6.0 6.0
--- ---

View File

@ -20,7 +20,7 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
class GithubActionReporter class GithubActionReporter
{ {
private OutputInterface $output; private $output;
/** /**
* @see https://github.com/actions/toolkit/blob/5e5e1b7aacba68a53836a34db4a288c3c1c1585b/packages/core/src/command.ts#L80-L85 * @see https://github.com/actions/toolkit/blob/5e5e1b7aacba68a53836a34db4a288c3c1c1585b/packages/core/src/command.ts#L80-L85

View File

@ -117,7 +117,17 @@ final class Color
} }
if ('#' === $color[0]) { if ('#' === $color[0]) {
return ($background ? '4' : '3').Terminal::getColorMode()->convertFromHexToAnsiColorCode($color); $color = substr($color, 1);
if (3 === \strlen($color)) {
$color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2];
}
if (6 !== \strlen($color)) {
throw new InvalidArgumentException(sprintf('Invalid "%s" color.', $color));
}
return ($background ? '4' : '3').$this->convertHexColorToAnsi(hexdec($color));
} }
if (isset(self::COLORS[$color])) { if (isset(self::COLORS[$color])) {
@ -130,4 +140,41 @@ final class Color
throw new InvalidArgumentException(sprintf('Invalid "%s" color; expected one of (%s).', $color, implode(', ', array_merge(array_keys(self::COLORS), array_keys(self::BRIGHT_COLORS))))); throw new InvalidArgumentException(sprintf('Invalid "%s" color; expected one of (%s).', $color, implode(', ', array_merge(array_keys(self::COLORS), array_keys(self::BRIGHT_COLORS)))));
} }
private function convertHexColorToAnsi(int $color): string
{
$r = ($color >> 16) & 255;
$g = ($color >> 8) & 255;
$b = $color & 255;
// see https://github.com/termstandard/colors/ for more information about true color support
if ('truecolor' !== getenv('COLORTERM')) {
return (string) $this->degradeHexColorToAnsi($r, $g, $b);
}
return sprintf('8;2;%d;%d;%d', $r, $g, $b);
}
private function degradeHexColorToAnsi(int $r, int $g, int $b): int
{
if (0 === round($this->getSaturation($r, $g, $b) / 50)) {
return 0;
}
return (round($b / 255) << 2) | (round($g / 255) << 1) | round($r / 255);
}
private function getSaturation(int $r, int $g, int $b): int
{
$r = $r / 255;
$g = $g / 255;
$b = $b / 255;
$v = max($r, $g, $b);
if (0 === $diff = $v - min($r, $g, $b)) {
return 0;
}
return (int) $diff * 100 / $v;
}
} }

View File

@ -15,11 +15,9 @@ use Symfony\Component\Console\Application;
use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Completion\CompletionInput; use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Suggestion;
use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\ExceptionInterface;
use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Console\Helper\HelperInterface;
use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputDefinition;
@ -41,32 +39,28 @@ class Command
/** /**
* @var string|null The default command name * @var string|null The default command name
*
* @deprecated since Symfony 6.1, use the AsCommand attribute instead
*/ */
protected static $defaultName; protected static $defaultName;
/** /**
* @var string|null The default command description * @var string|null The default command description
*
* @deprecated since Symfony 6.1, use the AsCommand attribute instead
*/ */
protected static $defaultDescription; protected static $defaultDescription;
private ?Application $application = null; private $application = null;
private ?string $name = null; private ?string $name = null;
private ?string $processTitle = null; private ?string $processTitle = null;
private array $aliases = []; private array $aliases = [];
private InputDefinition $definition; private $definition;
private bool $hidden = false; private bool $hidden = false;
private string $help = ''; private string $help = '';
private string $description = ''; private string $description = '';
private ?InputDefinition $fullDefinition = null; private $fullDefinition = null;
private bool $ignoreValidationErrors = false; private bool $ignoreValidationErrors = false;
private ?\Closure $code = null; private ?\Closure $code = null;
private array $synopsis = []; private array $synopsis = [];
private array $usages = []; private array $usages = [];
private ?HelperSet $helperSet = null; private $helperSet = null;
public static function getDefaultName(): ?string public static function getDefaultName(): ?string
{ {
@ -78,13 +72,7 @@ class Command
$r = new \ReflectionProperty($class, 'defaultName'); $r = new \ReflectionProperty($class, 'defaultName');
if ($class !== $r->class || null === static::$defaultName) { return $class === $r->class ? static::$defaultName : null;
return null;
}
trigger_deprecation('symfony/console', '6.1', 'Relying on the static property "$defaultName" for setting a command name is deprecated. Add the "%s" attribute to the "%s" class instead.', AsCommand::class, static::class);
return static::$defaultName;
} }
public static function getDefaultDescription(): ?string public static function getDefaultDescription(): ?string
@ -97,13 +85,7 @@ class Command
$r = new \ReflectionProperty($class, 'defaultDescription'); $r = new \ReflectionProperty($class, 'defaultDescription');
if ($class !== $r->class || null === static::$defaultDescription) { return $class === $r->class ? static::$defaultDescription : null;
return null;
}
trigger_deprecation('symfony/console', '6.1', 'Relying on the static property "$defaultDescription" for setting a command description is deprecated. Add the "%s" attribute to the "%s" class instead.', AsCommand::class, static::class);
return static::$defaultDescription;
} }
/** /**
@ -141,22 +123,14 @@ class Command
* Ignores validation errors. * Ignores validation errors.
* *
* This is mainly useful for the help command. * This is mainly useful for the help command.
*
* @return void
*/ */
public function ignoreValidationErrors() public function ignoreValidationErrors()
{ {
$this->ignoreValidationErrors = true; $this->ignoreValidationErrors = true;
} }
/**
* @return void
*/
public function setApplication(Application $application = null) public function setApplication(Application $application = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
$this->application = $application; $this->application = $application;
if ($application) { if ($application) {
$this->setHelperSet($application->getHelperSet()); $this->setHelperSet($application->getHelperSet());
@ -167,9 +141,6 @@ class Command
$this->fullDefinition = null; $this->fullDefinition = null;
} }
/**
* @return void
*/
public function setHelperSet(HelperSet $helperSet) public function setHelperSet(HelperSet $helperSet)
{ {
$this->helperSet = $helperSet; $this->helperSet = $helperSet;
@ -206,8 +177,6 @@ class Command
/** /**
* Configures the current command. * Configures the current command.
*
* @return void
*/ */
protected function configure() protected function configure()
{ {
@ -238,8 +207,6 @@ class Command
* This method is executed before the InputDefinition is validated. * This method is executed before the InputDefinition is validated.
* This means that this is the only place where the command can * This means that this is the only place where the command can
* interactively ask for values of missing required arguments. * interactively ask for values of missing required arguments.
*
* @return void
*/ */
protected function interact(InputInterface $input, OutputInterface $output) protected function interact(InputInterface $input, OutputInterface $output)
{ {
@ -254,8 +221,6 @@ class Command
* *
* @see InputInterface::bind() * @see InputInterface::bind()
* @see InputInterface::validate() * @see InputInterface::validate()
*
* @return void
*/ */
protected function initialize(InputInterface $input, OutputInterface $output) protected function initialize(InputInterface $input, OutputInterface $output)
{ {
@ -338,12 +303,6 @@ class Command
*/ */
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{ {
$definition = $this->getDefinition();
if (CompletionInput::TYPE_OPTION_VALUE === $input->getCompletionType() && $definition->hasOption($input->getCompletionName())) {
$definition->getOption($input->getCompletionName())->complete($input, $suggestions);
} elseif (CompletionInput::TYPE_ARGUMENT_VALUE === $input->getCompletionType() && $definition->hasArgument($input->getCompletionName())) {
$definition->getArgument($input->getCompletionName())->complete($input, $suggestions);
}
} }
/** /**
@ -375,7 +334,7 @@ class Command
} }
} }
} else { } else {
$code = $code(...); $code = \Closure::fromCallable($code);
} }
$this->code = $code; $this->code = $code;
@ -392,7 +351,7 @@ class Command
* *
* @internal * @internal
*/ */
public function mergeApplicationDefinition(bool $mergeArgs = true): void public function mergeApplicationDefinition(bool $mergeArgs = true)
{ {
if (null === $this->application) { if (null === $this->application) {
return; return;
@ -452,22 +411,19 @@ class Command
/** /**
* Adds an argument. * Adds an argument.
* *
* @param $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL * @param int|null $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
* @param $default The default value (for InputArgument::OPTIONAL mode only) * @param mixed $default The default value (for InputArgument::OPTIONAL mode only)
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
*
* @return $this
* *
* @throws InvalidArgumentException When argument mode is not valid * @throws InvalidArgumentException When argument mode is not valid
*
* @return $this
*/ */
public function addArgument(string $name, int $mode = null, string $description = '', mixed $default = null /* array|\Closure $suggestedValues = null */): static public function addArgument(string $name, int $mode = null, string $description = '', mixed $default = null): static
{ {
$suggestedValues = 5 <= \func_num_args() ? func_get_arg(4) : []; $this->definition->addArgument(new InputArgument($name, $mode, $description, $default));
if (!\is_array($suggestedValues) && !$suggestedValues instanceof \Closure) { if (null !== $this->fullDefinition) {
throw new \TypeError(sprintf('Argument 5 passed to "%s()" must be array or \Closure, "%s" given.', __METHOD__, get_debug_type($suggestedValues))); $this->fullDefinition->addArgument(new InputArgument($name, $mode, $description, $default));
} }
$this->definition->addArgument(new InputArgument($name, $mode, $description, $default, $suggestedValues));
$this->fullDefinition?->addArgument(new InputArgument($name, $mode, $description, $default, $suggestedValues));
return $this; return $this;
} }
@ -478,20 +434,17 @@ class Command
* @param $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts * @param $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
* @param $mode The option mode: One of the InputOption::VALUE_* constants * @param $mode The option mode: One of the InputOption::VALUE_* constants
* @param $default The default value (must be null for InputOption::VALUE_NONE) * @param $default The default value (must be null for InputOption::VALUE_NONE)
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
*
* @return $this
* *
* @throws InvalidArgumentException If option mode is invalid or incompatible * @throws InvalidArgumentException If option mode is invalid or incompatible
*
* @return $this
*/ */
public function addOption(string $name, string|array $shortcut = null, int $mode = null, string $description = '', mixed $default = null /* array|\Closure $suggestedValues = [] */): static public function addOption(string $name, string|array $shortcut = null, int $mode = null, string $description = '', mixed $default = null): static
{ {
$suggestedValues = 6 <= \func_num_args() ? func_get_arg(5) : []; $this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default));
if (!\is_array($suggestedValues) && !$suggestedValues instanceof \Closure) { if (null !== $this->fullDefinition) {
throw new \TypeError(sprintf('Argument 5 passed to "%s()" must be array or \Closure, "%s" given.', __METHOD__, get_debug_type($suggestedValues))); $this->fullDefinition->addOption(new InputOption($name, $shortcut, $mode, $description, $default));
} }
$this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default, $suggestedValues));
$this->fullDefinition?->addOption(new InputOption($name, $shortcut, $mode, $description, $default, $suggestedValues));
return $this; return $this;
} }
@ -607,7 +560,7 @@ class Command
public function getProcessedHelp(): string public function getProcessedHelp(): string
{ {
$name = $this->name; $name = $this->name;
$isSingleCommand = $this->application?->isSingleCommand(); $isSingleCommand = $this->application && $this->application->isSingleCommand();
$placeholders = [ $placeholders = [
'%command.name%', '%command.name%',
@ -695,8 +648,6 @@ class Command
/** /**
* Gets a helper instance by name. * Gets a helper instance by name.
* *
* @return HelperInterface
*
* @throws LogicException if no HelperSet is defined * @throws LogicException if no HelperSet is defined
* @throws InvalidArgumentException if the helper is not defined * @throws InvalidArgumentException if the helper is not defined
*/ */
@ -716,7 +667,7 @@ class Command
* *
* @throws InvalidArgumentException When the name is invalid * @throws InvalidArgumentException When the name is invalid
*/ */
private function validateName(string $name): void private function validateName(string $name)
{ {
if (!preg_match('/^[^\:]++(\:[^\:]++)*$/', $name)) { if (!preg_match('/^[^\:]++(\:[^\:]++)*$/', $name)) {
throw new InvalidArgumentException(sprintf('Command name "%s" is invalid.', $name)); throw new InvalidArgumentException(sprintf('Command name "%s" is invalid.', $name));

View File

@ -11,13 +11,10 @@
namespace Symfony\Component\Console\Command; namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Completion\CompletionInput; use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Output\BashCompletionOutput; use Symfony\Component\Console\Completion\Output\BashCompletionOutput;
use Symfony\Component\Console\Completion\Output\CompletionOutputInterface; use Symfony\Component\Console\Completion\Output\CompletionOutputInterface;
use Symfony\Component\Console\Completion\Output\FishCompletionOutput;
use Symfony\Component\Console\Completion\Output\ZshCompletionOutput;
use Symfony\Component\Console\Exception\CommandNotFoundException; use Symfony\Component\Console\Exception\CommandNotFoundException;
use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\ExceptionInterface;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
@ -29,19 +26,9 @@ use Symfony\Component\Console\Output\OutputInterface;
* *
* @author Wouter de Jong <wouter@wouterj.nl> * @author Wouter de Jong <wouter@wouterj.nl>
*/ */
#[AsCommand(name: '|_complete', description: 'Internal command to provide shell completion suggestions')]
final class CompleteCommand extends Command final class CompleteCommand extends Command
{ {
public const COMPLETION_API_VERSION = '1';
/**
* @deprecated since Symfony 6.1
*/
protected static $defaultName = '|_complete'; protected static $defaultName = '|_complete';
/**
* @deprecated since Symfony 6.1
*/
protected static $defaultDescription = 'Internal command to provide shell completion suggestions'; protected static $defaultDescription = 'Internal command to provide shell completion suggestions';
private $completionOutputs; private $completionOutputs;
@ -54,11 +41,7 @@ final class CompleteCommand extends Command
public function __construct(array $completionOutputs = []) public function __construct(array $completionOutputs = [])
{ {
// must be set before the parent constructor, as the property value is used in configure() // must be set before the parent constructor, as the property value is used in configure()
$this->completionOutputs = $completionOutputs + [ $this->completionOutputs = $completionOutputs + ['bash' => BashCompletionOutput::class];
'bash' => BashCompletionOutput::class,
'fish' => FishCompletionOutput::class,
'zsh' => ZshCompletionOutput::class,
];
parent::__construct(); parent::__construct();
} }
@ -69,29 +52,28 @@ final class CompleteCommand extends Command
->addOption('shell', 's', InputOption::VALUE_REQUIRED, 'The shell type ("'.implode('", "', array_keys($this->completionOutputs)).'")') ->addOption('shell', 's', InputOption::VALUE_REQUIRED, 'The shell type ("'.implode('", "', array_keys($this->completionOutputs)).'")')
->addOption('input', 'i', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'An array of input tokens (e.g. COMP_WORDS or argv)') ->addOption('input', 'i', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'An array of input tokens (e.g. COMP_WORDS or argv)')
->addOption('current', 'c', InputOption::VALUE_REQUIRED, 'The index of the "input" array that the cursor is in (e.g. COMP_CWORD)') ->addOption('current', 'c', InputOption::VALUE_REQUIRED, 'The index of the "input" array that the cursor is in (e.g. COMP_CWORD)')
->addOption('api-version', 'a', InputOption::VALUE_REQUIRED, 'The API version of the completion script') ->addOption('symfony', 'S', InputOption::VALUE_REQUIRED, 'The version of the completion script')
->addOption('symfony', 'S', InputOption::VALUE_REQUIRED, 'deprecated')
; ;
} }
protected function initialize(InputInterface $input, OutputInterface $output): void protected function initialize(InputInterface $input, OutputInterface $output)
{ {
$this->isDebug = filter_var(getenv('SYMFONY_COMPLETION_DEBUG'), \FILTER_VALIDATE_BOOL); $this->isDebug = filter_var(getenv('SYMFONY_COMPLETION_DEBUG'), \FILTER_VALIDATE_BOOLEAN);
} }
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
try { try {
// "symfony" must be kept for compat with the shell scripts generated by Symfony Console 5.4 - 6.1 // uncomment when a bugfix or BC break has been introduced in the shell completion scripts
$version = $input->getOption('symfony') ? '1' : $input->getOption('api-version'); // $version = $input->getOption('symfony');
if ($version && version_compare($version, self::COMPLETION_API_VERSION, '<')) { // if ($version && version_compare($version, 'x.y', '>=')) {
$message = sprintf('Completion script version is not supported ("%s" given, ">=%s" required).', $version, self::COMPLETION_API_VERSION); // $message = sprintf('Completion script version is not supported ("%s" given, ">=x.y" required).', $version);
$this->log($message); // $this->log($message);
$output->writeln($message.' Install the Symfony completion script again by using the "completion" command.'); // $output->writeln($message.' Install the Symfony completion script again by using the "completion" command.');
return 126; // return 126;
} // }
$shell = $input->getOption('shell'); $shell = $input->getOption('shell');
if (!$shell) { if (!$shell) {
@ -134,12 +116,12 @@ final class CompleteCommand extends Command
$completionInput->bind($command->getDefinition()); $completionInput->bind($command->getDefinition());
if (CompletionInput::TYPE_OPTION_NAME === $completionInput->getCompletionType()) { if (CompletionInput::TYPE_OPTION_NAME === $completionInput->getCompletionType()) {
$this->log(' Completing option names for the <comment>'.($command instanceof LazyCommand ? $command->getCommand() : $command)::class.'</> command.'); $this->log(' Completing option names for the <comment>'.\get_class($command instanceof LazyCommand ? $command->getCommand() : $command).'</> command.');
$suggestions->suggestOptions($command->getDefinition()->getOptions()); $suggestions->suggestOptions($command->getDefinition()->getOptions());
} else { } else {
$this->log([ $this->log([
' Completing using the <comment>'.($command instanceof LazyCommand ? $command->getCommand() : $command)::class.'</> class.', ' Completing using the <comment>'.\get_class($command instanceof LazyCommand ? $command->getCommand() : $command).'</> class.',
' Completing <comment>'.$completionInput->getCompletionType().'</> for <comment>'.$completionInput->getCompletionName().'</>', ' Completing <comment>'.$completionInput->getCompletionType().'</> for <comment>'.$completionInput->getCompletionName().'</>',
]); ]);
if (null !== $compval = $completionInput->getCompletionValue()) { if (null !== $compval = $completionInput->getCompletionValue()) {
@ -155,7 +137,7 @@ final class CompleteCommand extends Command
$this->log('<info>Suggestions:</>'); $this->log('<info>Suggestions:</>');
if ($options = $suggestions->getOptionSuggestions()) { if ($options = $suggestions->getOptionSuggestions()) {
$this->log(' --'.implode(' --', array_map(fn ($o) => $o->getName(), $options))); $this->log(' --'.implode(' --', array_map(function ($o) { return $o->getName(); }, $options)));
} elseif ($values = $suggestions->getValueSuggestions()) { } elseif ($values = $suggestions->getValueSuggestions()) {
$this->log(' '.implode(' ', $values)); $this->log(' '.implode(' ', $values));
} else { } else {
@ -173,10 +155,10 @@ final class CompleteCommand extends Command
throw $e; throw $e;
} }
return 2; return self::FAILURE;
} }
return 0; return self::SUCCESS;
} }
private function createCompletionInput(InputInterface $input): CompletionInput private function createCompletionInput(InputInterface $input): CompletionInput
@ -190,7 +172,7 @@ final class CompleteCommand extends Command
try { try {
$completionInput->bind($this->getApplication()->getDefinition()); $completionInput->bind($this->getApplication()->getDefinition());
} catch (ExceptionInterface) { } catch (ExceptionInterface $e) {
} }
return $completionInput; return $completionInput;
@ -205,7 +187,7 @@ final class CompleteCommand extends Command
} }
return $this->getApplication()->find($inputName); return $this->getApplication()->find($inputName);
} catch (CommandNotFoundException) { } catch (CommandNotFoundException $e) {
} }
return null; return null;

View File

@ -11,7 +11,8 @@
namespace Symfony\Component\Console\Command; namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
@ -24,67 +25,55 @@ use Symfony\Component\Process\Process;
* *
* @author Wouter de Jong <wouter@wouterj.nl> * @author Wouter de Jong <wouter@wouterj.nl>
*/ */
#[AsCommand(name: 'completion', description: 'Dump the shell completion script')]
final class DumpCompletionCommand extends Command final class DumpCompletionCommand extends Command
{ {
/**
* @deprecated since Symfony 6.1
*/
protected static $defaultName = 'completion'; protected static $defaultName = 'completion';
/**
* @deprecated since Symfony 6.1
*/
protected static $defaultDescription = 'Dump the shell completion script'; protected static $defaultDescription = 'Dump the shell completion script';
private array $supportedShells; public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor('shell')) {
$suggestions->suggestValues($this->getSupportedShells());
}
}
protected function configure(): void protected function configure()
{ {
$fullCommand = $_SERVER['PHP_SELF']; $fullCommand = $_SERVER['PHP_SELF'];
$commandName = basename($fullCommand); $commandName = basename($fullCommand);
$fullCommand = @realpath($fullCommand) ?: $fullCommand; $fullCommand = @realpath($fullCommand) ?: $fullCommand;
$shell = $this->guessShell();
[$rcFile, $completionFile] = match ($shell) {
'fish' => ['~/.config/fish/config.fish', "/etc/fish/completions/$commandName.fish"],
'zsh' => ['~/.zshrc', '$fpath[1]/_'.$commandName],
default => ['~/.bashrc', "/etc/bash_completion.d/$commandName"],
};
$supportedShells = implode(', ', $this->getSupportedShells());
$this $this
->setHelp(<<<EOH ->setHelp(<<<EOH
The <info>%command.name%</> command dumps the shell completion script required The <info>%command.name%</> command dumps the shell completion script required
to use shell autocompletion (currently, {$supportedShells} completion are supported). to use shell autocompletion (currently only bash completion is supported).
<comment>Static installation <comment>Static installation
-------------------</> -------------------</>
Dump the script to a global completion file and restart your shell: Dump the script to a global completion file and restart your shell:
<info>%command.full_name% {$shell} | sudo tee {$completionFile}</> <info>%command.full_name% bash | sudo tee /etc/bash_completion.d/{$commandName}</>
Or dump the script to a local file and source it: Or dump the script to a local file and source it:
<info>%command.full_name% {$shell} > completion.sh</> <info>%command.full_name% bash > completion.sh</>
<comment># source the file whenever you use the project</> <comment># source the file whenever you use the project</>
<info>source completion.sh</> <info>source completion.sh</>
<comment># or add this line at the end of your "{$rcFile}" file:</> <comment># or add this line at the end of your "~/.bashrc" file:</>
<info>source /path/to/completion.sh</> <info>source /path/to/completion.sh</>
<comment>Dynamic installation <comment>Dynamic installation
--------------------</> --------------------</>
Add this to the end of your shell configuration file (e.g. <info>"{$rcFile}"</>): Add this to the end of your shell configuration file (e.g. <info>"~/.bashrc"</>):
<info>eval "$({$fullCommand} completion {$shell})"</> <info>eval "$({$fullCommand} completion bash)"</>
EOH EOH
) )
->addArgument('shell', InputArgument::OPTIONAL, 'The shell type (e.g. "bash"), the value of the "$SHELL" env var will be used if this is not given', null, $this->getSupportedShells(...)) ->addArgument('shell', InputArgument::OPTIONAL, 'The shell type (e.g. "bash"), the value of the "$SHELL" env var will be used if this is not given')
->addOption('debug', null, InputOption::VALUE_NONE, 'Tail the completion debug log') ->addOption('debug', null, InputOption::VALUE_NONE, 'Tail the completion debug log')
; ;
} }
@ -96,7 +85,7 @@ EOH
if ($input->getOption('debug')) { if ($input->getOption('debug')) {
$this->tailDebugLog($commandName, $output); $this->tailDebugLog($commandName, $output);
return 0; return self::SUCCESS;
} }
$shell = $input->getArgument('shell') ?? self::guessShell(); $shell = $input->getArgument('shell') ?? self::guessShell();
@ -113,12 +102,12 @@ EOH
$output->writeln(sprintf('<error>Shell not detected, Symfony shell completion only supports "%s").</>', implode('", "', $supportedShells))); $output->writeln(sprintf('<error>Shell not detected, Symfony shell completion only supports "%s").</>', implode('", "', $supportedShells)));
} }
return 2; return self::INVALID;
} }
$output->write(str_replace(['{{ COMMAND_NAME }}', '{{ VERSION }}'], [$commandName, CompleteCommand::COMPLETION_API_VERSION], file_get_contents($completionFile))); $output->write(str_replace(['{{ COMMAND_NAME }}', '{{ VERSION }}'], [$commandName, $this->getApplication()->getVersion()], file_get_contents($completionFile)));
return 0; return self::SUCCESS;
} }
private static function guessShell(): string private static function guessShell(): string
@ -143,19 +132,8 @@ EOH
*/ */
private function getSupportedShells(): array private function getSupportedShells(): array
{ {
if (isset($this->supportedShells)) { return array_map(function ($f) {
return $this->supportedShells; return pathinfo($f, \PATHINFO_EXTENSION);
} }, glob(__DIR__.'/../Resources/completion.*'));
$shells = [];
foreach (new \DirectoryIterator(__DIR__.'/../Resources/') as $file) {
if (str_starts_with($file->getBasename(), 'completion.') && $file->isFile()) {
$shells[] = $file->getExtension();
}
}
sort($shells);
return $this->supportedShells = $shells;
} }
} }

View File

@ -11,6 +11,8 @@
namespace Symfony\Component\Console\Command; namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Descriptor\ApplicationDescription; use Symfony\Component\Console\Descriptor\ApplicationDescription;
use Symfony\Component\Console\Helper\DescriptorHelper; use Symfony\Component\Console\Helper\DescriptorHelper;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@ -25,10 +27,10 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
class HelpCommand extends Command class HelpCommand extends Command
{ {
private Command $command; private $command;
/** /**
* @return void * {@inheritdoc}
*/ */
protected function configure() protected function configure()
{ {
@ -37,8 +39,8 @@ class HelpCommand extends Command
$this $this
->setName('help') ->setName('help')
->setDefinition([ ->setDefinition([
new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help', fn () => array_keys((new ApplicationDescription($this->getApplication()))->getCommands())), new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help'),
new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', fn () => (new DescriptorHelper())->getFormats()), new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'),
new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command help'), new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command help'),
]) ])
->setDescription('Display help for a command') ->setDescription('Display help for a command')
@ -57,14 +59,14 @@ EOF
; ;
} }
/**
* @return void
*/
public function setCommand(Command $command) public function setCommand(Command $command)
{ {
$this->command = $command; $this->command = $command;
} }
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$this->command ??= $this->getApplication()->find($input->getArgument('command_name')); $this->command ??= $this->getApplication()->find($input->getArgument('command_name'));
@ -79,4 +81,19 @@ EOF
return 0; return 0;
} }
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor('command_name')) {
$descriptor = new ApplicationDescription($this->getApplication());
$suggestions->suggestValues(array_keys($descriptor->getCommands()));
return;
}
if ($input->mustSuggestOptionValuesFor('format')) {
$helper = new DescriptorHelper();
$suggestions->suggestValues($helper->getFormats());
}
}
} }

View File

@ -14,8 +14,6 @@ namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
use Symfony\Component\Console\Completion\CompletionInput; use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Suggestion;
use Symfony\Component\Console\Helper\HelperInterface;
use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
@ -26,7 +24,7 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
final class LazyCommand extends Command final class LazyCommand extends Command
{ {
private \Closure|Command $command; private $command;
private ?bool $isEnabled; private ?bool $isEnabled;
public function __construct(string $name, array $aliases, string $description, bool $isHidden, \Closure $commandFactory, ?bool $isEnabled = true) public function __construct(string $name, array $aliases, string $description, bool $isHidden, \Closure $commandFactory, ?bool $isEnabled = true)
@ -47,9 +45,6 @@ final class LazyCommand extends Command
public function setApplication(Application $application = null): void public function setApplication(Application $application = null): void
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
if ($this->command instanceof parent) { if ($this->command instanceof parent) {
$this->command->setApplication($application); $this->command->setApplication($application);
} }
@ -113,24 +108,16 @@ final class LazyCommand extends Command
return $this->getCommand()->getNativeDefinition(); return $this->getCommand()->getNativeDefinition();
} }
/** public function addArgument(string $name, int $mode = null, string $description = '', mixed $default = null): static
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
*/
public function addArgument(string $name, int $mode = null, string $description = '', mixed $default = null /* array|\Closure $suggestedValues = [] */): static
{ {
$suggestedValues = 5 <= \func_num_args() ? func_get_arg(4) : []; $this->getCommand()->addArgument($name, $mode, $description, $default);
$this->getCommand()->addArgument($name, $mode, $description, $default, $suggestedValues);
return $this; return $this;
} }
/** public function addOption(string $name, string|array $shortcut = null, int $mode = null, string $description = '', mixed $default = null): static
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
*/
public function addOption(string $name, string|array $shortcut = null, int $mode = null, string $description = '', mixed $default = null /* array|\Closure $suggestedValues = [] */): static
{ {
$suggestedValues = 6 <= \func_num_args() ? func_get_arg(5) : []; $this->getCommand()->addOption($name, $shortcut, $mode, $description, $default);
$this->getCommand()->addOption($name, $shortcut, $mode, $description, $default, $suggestedValues);
return $this; return $this;
} }
@ -176,7 +163,7 @@ final class LazyCommand extends Command
return $this->getCommand()->getUsages(); return $this->getCommand()->getUsages();
} }
public function getHelper(string $name): HelperInterface public function getHelper(string $name): mixed
{ {
return $this->getCommand()->getHelper($name); return $this->getCommand()->getHelper($name);
} }

View File

@ -11,6 +11,8 @@
namespace Symfony\Component\Console\Command; namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Descriptor\ApplicationDescription; use Symfony\Component\Console\Descriptor\ApplicationDescription;
use Symfony\Component\Console\Helper\DescriptorHelper; use Symfony\Component\Console\Helper\DescriptorHelper;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@ -26,16 +28,16 @@ use Symfony\Component\Console\Output\OutputInterface;
class ListCommand extends Command class ListCommand extends Command
{ {
/** /**
* @return void * {@inheritdoc}
*/ */
protected function configure() protected function configure()
{ {
$this $this
->setName('list') ->setName('list')
->setDefinition([ ->setDefinition([
new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name', null, fn () => array_keys((new ApplicationDescription($this->getApplication()))->getNamespaces())), new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'),
new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'),
new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', fn () => (new DescriptorHelper())->getFormats()), new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'),
new InputOption('short', null, InputOption::VALUE_NONE, 'To skip describing commands\' arguments'), new InputOption('short', null, InputOption::VALUE_NONE, 'To skip describing commands\' arguments'),
]) ])
->setDescription('List commands') ->setDescription('List commands')
@ -60,6 +62,9 @@ EOF
; ;
} }
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$helper = new DescriptorHelper(); $helper = new DescriptorHelper();
@ -72,4 +77,19 @@ EOF
return 0; return 0;
} }
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor('namespace')) {
$descriptor = new ApplicationDescription($this->getApplication());
$suggestions->suggestValues(array_keys($descriptor->getNamespaces()));
return;
}
if ($input->mustSuggestOptionValuesFor('format')) {
$helper = new DescriptorHelper();
$suggestions->suggestValues($helper->getFormats());
}
}
} }

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\Console\Command;
use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\LogicException;
use Symfony\Component\Lock\LockFactory; use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\LockInterface;
use Symfony\Component\Lock\Store\FlockStore; use Symfony\Component\Lock\Store\FlockStore;
use Symfony\Component\Lock\Store\SemaphoreStore; use Symfony\Component\Lock\Store\SemaphoreStore;
@ -24,7 +23,7 @@ use Symfony\Component\Lock\Store\SemaphoreStore;
*/ */
trait LockableTrait trait LockableTrait
{ {
private ?LockInterface $lock = null; private $lock = null;
/** /**
* Locks a command. * Locks a command.
@ -32,7 +31,7 @@ trait LockableTrait
private function lock(string $name = null, bool $blocking = false): bool private function lock(string $name = null, bool $blocking = false): bool
{ {
if (!class_exists(SemaphoreStore::class)) { if (!class_exists(SemaphoreStore::class)) {
throw new LogicException('To enable the locking feature you must install the symfony/lock component. Try running "composer require symfony/lock".'); throw new LogicException('To enable the locking feature you must install the symfony/lock component.');
} }
if (null !== $this->lock) { if (null !== $this->lock) {
@ -58,7 +57,7 @@ trait LockableTrait
/** /**
* Releases the command lock if there is one. * Releases the command lock if there is one.
*/ */
private function release(): void private function release()
{ {
if ($this->lock) { if ($this->lock) {
$this->lock->release(); $this->lock->release();

View File

@ -25,10 +25,6 @@ interface SignalableCommandInterface
/** /**
* The method will be called when the application is signaled. * The method will be called when the application is signaled.
*
* @param int|false $previousExitCode
* @return int|false The exit code to return or false to continue the normal execution
*/ */
public function handleSignal(int $signal, /* int|false $previousExitCode = 0 */); public function handleSignal(int $signal): void;
} }

View File

@ -22,7 +22,7 @@ use Symfony\Component\Console\Exception\CommandNotFoundException;
*/ */
class ContainerCommandLoader implements CommandLoaderInterface class ContainerCommandLoader implements CommandLoaderInterface
{ {
private ContainerInterface $container; private $container;
private array $commandMap; private array $commandMap;
/** /**
@ -34,6 +34,9 @@ class ContainerCommandLoader implements CommandLoaderInterface
$this->commandMap = $commandMap; $this->commandMap = $commandMap;
} }
/**
* {@inheritdoc}
*/
public function get(string $name): Command public function get(string $name): Command
{ {
if (!$this->has($name)) { if (!$this->has($name)) {
@ -43,11 +46,17 @@ class ContainerCommandLoader implements CommandLoaderInterface
return $this->container->get($this->commandMap[$name]); return $this->container->get($this->commandMap[$name]);
} }
/**
* {@inheritdoc}
*/
public function has(string $name): bool public function has(string $name): bool
{ {
return isset($this->commandMap[$name]) && $this->container->has($this->commandMap[$name]); return isset($this->commandMap[$name]) && $this->container->has($this->commandMap[$name]);
} }
/**
* {@inheritdoc}
*/
public function getNames(): array public function getNames(): array
{ {
return array_keys($this->commandMap); return array_keys($this->commandMap);

View File

@ -31,11 +31,17 @@ class FactoryCommandLoader implements CommandLoaderInterface
$this->factories = $factories; $this->factories = $factories;
} }
/**
* {@inheritdoc}
*/
public function has(string $name): bool public function has(string $name): bool
{ {
return isset($this->factories[$name]); return isset($this->factories[$name]);
} }
/**
* {@inheritdoc}
*/
public function get(string $name): Command public function get(string $name): Command
{ {
if (!isset($this->factories[$name])) { if (!isset($this->factories[$name])) {
@ -47,6 +53,9 @@ class FactoryCommandLoader implements CommandLoaderInterface
return $factory(); return $factory();
} }
/**
* {@inheritdoc}
*/
public function getNames(): array public function getNames(): array
{ {
return array_keys($this->factories); return array_keys($this->factories);

View File

@ -34,7 +34,7 @@ final class CompletionInput extends ArgvInput
private $tokens; private $tokens;
private $currentIndex; private $currentIndex;
private $completionType; private $completionType;
private $completionName; private $completionName = null;
private $completionValue = ''; private $completionValue = '';
/** /**
@ -64,6 +64,9 @@ final class CompletionInput extends ArgvInput
return $input; return $input;
} }
/**
* {@inheritdoc}
*/
public function bind(InputDefinition $definition): void public function bind(InputDefinition $definition): void
{ {
parent::bind($definition); parent::bind($definition);
@ -81,7 +84,7 @@ final class CompletionInput extends ArgvInput
return; return;
} }
if ($option?->acceptValue()) { if (null !== $option && $option->acceptValue()) {
$this->completionType = self::TYPE_OPTION_VALUE; $this->completionType = self::TYPE_OPTION_VALUE;
$this->completionName = $option->getName(); $this->completionName = $option->getName();
$this->completionValue = $optionValue ?: (!str_starts_with($optionToken, '--') ? substr($optionToken, 2) : ''); $this->completionValue = $optionValue ?: (!str_starts_with($optionToken, '--') ? substr($optionToken, 2) : '');
@ -94,7 +97,7 @@ final class CompletionInput extends ArgvInput
if ('-' === $previousToken[0] && '' !== trim($previousToken, '-')) { if ('-' === $previousToken[0] && '' !== trim($previousToken, '-')) {
// check if previous option accepted a value // check if previous option accepted a value
$previousOption = $this->getOptionFromToken($previousToken); $previousOption = $this->getOptionFromToken($previousToken);
if ($previousOption?->acceptValue()) { if (null !== $previousOption && $previousOption->acceptValue()) {
$this->completionType = self::TYPE_OPTION_VALUE; $this->completionType = self::TYPE_OPTION_VALUE;
$this->completionName = $previousOption->getName(); $this->completionName = $previousOption->getName();
$this->completionValue = $relevantToken; $this->completionValue = $relevantToken;
@ -180,7 +183,7 @@ final class CompletionInput extends ArgvInput
{ {
try { try {
return parent::parseToken($token, $parseOptions); return parent::parseToken($token, $parseOptions);
} catch (RuntimeException) { } catch (RuntimeException $e) {
// suppress errors, completed input is almost never valid // suppress errors, completed input is almost never valid
} }

View File

@ -16,12 +16,13 @@ namespace Symfony\Component\Console\Completion;
* *
* @author Wouter de Jong <wouter@wouterj.nl> * @author Wouter de Jong <wouter@wouterj.nl>
*/ */
class Suggestion implements \Stringable class Suggestion
{ {
public function __construct( private string $value;
private readonly string $value,
private readonly string $description = '' public function __construct(string $value)
) { {
$this->value = $value;
} }
public function getValue(): string public function getValue(): string
@ -29,11 +30,6 @@ class Suggestion implements \Stringable
return $this->value; return $this->value;
} }
public function getDescription(): string
{
return $this->description;
}
public function __toString(): string public function __toString(): string
{ {
return $this->getValue(); return $this->getValue();

View File

@ -18,7 +18,7 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
final class Cursor final class Cursor
{ {
private OutputInterface $output; private $output;
private $input; private $input;
/** /**
@ -183,7 +183,11 @@ final class Cursor
{ {
static $isTtySupported; static $isTtySupported;
if (!$isTtySupported ??= '/' === \DIRECTORY_SEPARATOR && stream_isatty(\STDOUT)) { if (null === $isTtySupported && \function_exists('proc_open')) {
$isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes);
}
if (!$isTtySupported) {
return [1, 1]; return [1, 1];
} }

View File

@ -29,9 +29,6 @@ use Symfony\Component\DependencyInjection\TypedReference;
*/ */
class AddConsoleCommandPass implements CompilerPassInterface class AddConsoleCommandPass implements CompilerPassInterface
{ {
/**
* @return void
*/
public function process(ContainerBuilder $container) public function process(ContainerBuilder $container)
{ {
$commandServices = $container->findTaggedServiceIds('console.command', true); $commandServices = $container->findTaggedServiceIds('console.command', true);
@ -90,7 +87,7 @@ class AddConsoleCommandPass implements CompilerPassInterface
$lazyCommandMap[$tag['command']] = $id; $lazyCommandMap[$tag['command']] = $id;
} }
$description ??= $tag['description'] ?? null; $description = $description ?? $tag['description'] ?? null;
} }
$definition->addMethodCall('setName', [$commandName]); $definition->addMethodCall('setName', [$commandName]);

View File

@ -24,7 +24,7 @@ class ApplicationDescription
{ {
public const GLOBAL_NAMESPACE = '_global'; public const GLOBAL_NAMESPACE = '_global';
private Application $application; private $application;
private ?string $namespace; private ?string $namespace;
private bool $showHidden; private bool $showHidden;
private array $namespaces; private array $namespaces;
@ -79,7 +79,7 @@ class ApplicationDescription
return $this->commands[$name] ?? $this->aliases[$name]; return $this->commands[$name] ?? $this->aliases[$name];
} }
private function inspectApplication(): void private function inspectApplication()
{ {
$this->commands = []; $this->commands = [];
$this->namespaces = []; $this->namespaces = [];

View File

@ -26,23 +26,43 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
abstract class Descriptor implements DescriptorInterface abstract class Descriptor implements DescriptorInterface
{ {
protected OutputInterface $output; /**
* @var OutputInterface
*/
protected $output;
public function describe(OutputInterface $output, object $object, array $options = []): void /**
* {@inheritdoc}
*/
public function describe(OutputInterface $output, object $object, array $options = [])
{ {
$this->output = $output; $this->output = $output;
match (true) { switch (true) {
$object instanceof InputArgument => $this->describeInputArgument($object, $options), case $object instanceof InputArgument:
$object instanceof InputOption => $this->describeInputOption($object, $options), $this->describeInputArgument($object, $options);
$object instanceof InputDefinition => $this->describeInputDefinition($object, $options), break;
$object instanceof Command => $this->describeCommand($object, $options), case $object instanceof InputOption:
$object instanceof Application => $this->describeApplication($object, $options), $this->describeInputOption($object, $options);
default => throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_debug_type($object))), break;
}; case $object instanceof InputDefinition:
$this->describeInputDefinition($object, $options);
break;
case $object instanceof Command:
$this->describeCommand($object, $options);
break;
case $object instanceof Application:
$this->describeApplication($object, $options);
break;
default:
throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_debug_type($object)));
}
} }
protected function write(string $content, bool $decorated = false): void /**
* Writes content to output.
*/
protected function write(string $content, bool $decorated = false)
{ {
$this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW);
} }
@ -50,25 +70,25 @@ abstract class Descriptor implements DescriptorInterface
/** /**
* Describes an InputArgument instance. * Describes an InputArgument instance.
*/ */
abstract protected function describeInputArgument(InputArgument $argument, array $options = []): void; abstract protected function describeInputArgument(InputArgument $argument, array $options = []);
/** /**
* Describes an InputOption instance. * Describes an InputOption instance.
*/ */
abstract protected function describeInputOption(InputOption $option, array $options = []): void; abstract protected function describeInputOption(InputOption $option, array $options = []);
/** /**
* Describes an InputDefinition instance. * Describes an InputDefinition instance.
*/ */
abstract protected function describeInputDefinition(InputDefinition $definition, array $options = []): void; abstract protected function describeInputDefinition(InputDefinition $definition, array $options = []);
/** /**
* Describes a Command instance. * Describes a Command instance.
*/ */
abstract protected function describeCommand(Command $command, array $options = []): void; abstract protected function describeCommand(Command $command, array $options = []);
/** /**
* Describes an Application instance. * Describes an Application instance.
*/ */
abstract protected function describeApplication(Application $application, array $options = []): void; abstract protected function describeApplication(Application $application, array $options = []);
} }

View File

@ -20,8 +20,5 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
interface DescriptorInterface interface DescriptorInterface
{ {
/**
* @return void
*/
public function describe(OutputInterface $output, object $object, array $options = []); public function describe(OutputInterface $output, object $object, array $options = []);
} }

View File

@ -26,12 +26,18 @@ use Symfony\Component\Console\Input\InputOption;
*/ */
class JsonDescriptor extends Descriptor class JsonDescriptor extends Descriptor
{ {
protected function describeInputArgument(InputArgument $argument, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = [])
{ {
$this->writeData($this->getInputArgumentData($argument), $options); $this->writeData($this->getInputArgumentData($argument), $options);
} }
protected function describeInputOption(InputOption $option, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = [])
{ {
$this->writeData($this->getInputOptionData($option), $options); $this->writeData($this->getInputOptionData($option), $options);
if ($option->isNegatable()) { if ($option->isNegatable()) {
@ -39,17 +45,26 @@ class JsonDescriptor extends Descriptor
} }
} }
protected function describeInputDefinition(InputDefinition $definition, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = [])
{ {
$this->writeData($this->getInputDefinitionData($definition), $options); $this->writeData($this->getInputDefinitionData($definition), $options);
} }
protected function describeCommand(Command $command, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = [])
{ {
$this->writeData($this->getCommandData($command, $options['short'] ?? false), $options); $this->writeData($this->getCommandData($command, $options['short'] ?? false), $options);
} }
protected function describeApplication(Application $application, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = [])
{ {
$describedNamespace = $options['namespace'] ?? null; $describedNamespace = $options['namespace'] ?? null;
$description = new ApplicationDescription($application, $describedNamespace, true); $description = new ApplicationDescription($application, $describedNamespace, true);
@ -81,7 +96,7 @@ class JsonDescriptor extends Descriptor
/** /**
* Writes data as json. * Writes data as json.
*/ */
private function writeData(array $data, array $options): void private function writeData(array $data, array $options)
{ {
$flags = $options['json_encoding'] ?? 0; $flags = $options['json_encoding'] ?? 0;

View File

@ -28,7 +28,10 @@ use Symfony\Component\Console\Output\OutputInterface;
*/ */
class MarkdownDescriptor extends Descriptor class MarkdownDescriptor extends Descriptor
{ {
public function describe(OutputInterface $output, object $object, array $options = []): void /**
* {@inheritdoc}
*/
public function describe(OutputInterface $output, object $object, array $options = [])
{ {
$decorated = $output->isDecorated(); $decorated = $output->isDecorated();
$output->setDecorated(false); $output->setDecorated(false);
@ -38,12 +41,18 @@ class MarkdownDescriptor extends Descriptor
$output->setDecorated($decorated); $output->setDecorated($decorated);
} }
protected function write(string $content, bool $decorated = true): void /**
* {@inheritdoc}
*/
protected function write(string $content, bool $decorated = true)
{ {
parent::write($content, $decorated); parent::write($content, $decorated);
} }
protected function describeInputArgument(InputArgument $argument, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = [])
{ {
$this->write( $this->write(
'#### `'.($argument->getName() ?: '<none>')."`\n\n" '#### `'.($argument->getName() ?: '<none>')."`\n\n"
@ -54,7 +63,10 @@ class MarkdownDescriptor extends Descriptor
); );
} }
protected function describeInputOption(InputOption $option, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = [])
{ {
$name = '--'.$option->getName(); $name = '--'.$option->getName();
if ($option->isNegatable()) { if ($option->isNegatable()) {
@ -75,13 +87,18 @@ class MarkdownDescriptor extends Descriptor
); );
} }
protected function describeInputDefinition(InputDefinition $definition, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = [])
{ {
if ($showArguments = \count($definition->getArguments()) > 0) { if ($showArguments = \count($definition->getArguments()) > 0) {
$this->write('### Arguments'); $this->write('### Arguments');
foreach ($definition->getArguments() as $argument) { foreach ($definition->getArguments() as $argument) {
$this->write("\n\n"); $this->write("\n\n");
$this->describeInputArgument($argument); if (null !== $describeInputArgument = $this->describeInputArgument($argument)) {
$this->write($describeInputArgument);
}
} }
} }
@ -93,12 +110,17 @@ class MarkdownDescriptor extends Descriptor
$this->write('### Options'); $this->write('### Options');
foreach ($definition->getOptions() as $option) { foreach ($definition->getOptions() as $option) {
$this->write("\n\n"); $this->write("\n\n");
$this->describeInputOption($option); if (null !== $describeInputOption = $this->describeInputOption($option)) {
$this->write($describeInputOption);
}
} }
} }
} }
protected function describeCommand(Command $command, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = [])
{ {
if ($options['short'] ?? false) { if ($options['short'] ?? false) {
$this->write( $this->write(
@ -106,7 +128,9 @@ class MarkdownDescriptor extends Descriptor
.str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n"
.($command->getDescription() ? $command->getDescription()."\n\n" : '') .($command->getDescription() ? $command->getDescription()."\n\n" : '')
.'### Usage'."\n\n" .'### Usage'."\n\n"
.array_reduce($command->getAliases(), fn ($carry, $usage) => $carry.'* `'.$usage.'`'."\n") .array_reduce($command->getAliases(), function ($carry, $usage) {
return $carry.'* `'.$usage.'`'."\n";
})
); );
return; return;
@ -119,7 +143,9 @@ class MarkdownDescriptor extends Descriptor
.str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n"
.($command->getDescription() ? $command->getDescription()."\n\n" : '') .($command->getDescription() ? $command->getDescription()."\n\n" : '')
.'### Usage'."\n\n" .'### Usage'."\n\n"
.array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), fn ($carry, $usage) => $carry.'* `'.$usage.'`'."\n") .array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), function ($carry, $usage) {
return $carry.'* `'.$usage.'`'."\n";
})
); );
if ($help = $command->getProcessedHelp()) { if ($help = $command->getProcessedHelp()) {
@ -134,7 +160,10 @@ class MarkdownDescriptor extends Descriptor
} }
} }
protected function describeApplication(Application $application, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = [])
{ {
$describedNamespace = $options['namespace'] ?? null; $describedNamespace = $options['namespace'] ?? null;
$description = new ApplicationDescription($application, $describedNamespace); $description = new ApplicationDescription($application, $describedNamespace);
@ -149,12 +178,16 @@ class MarkdownDescriptor extends Descriptor
} }
$this->write("\n\n"); $this->write("\n\n");
$this->write(implode("\n", array_map(fn ($commandName) => sprintf('* [`%s`](#%s)', $commandName, str_replace(':', '', $description->getCommand($commandName)->getName())), $namespace['commands']))); $this->write(implode("\n", array_map(function ($commandName) use ($description) {
return sprintf('* [`%s`](#%s)', $commandName, str_replace(':', '', $description->getCommand($commandName)->getName()));
}, $namespace['commands'])));
} }
foreach ($description->getCommands() as $command) { foreach ($description->getCommands() as $command) {
$this->write("\n\n"); $this->write("\n\n");
$this->describeCommand($command, $options); if (null !== $describeCommand = $this->describeCommand($command, $options)) {
$this->write($describeCommand);
}
} }
} }

View File

@ -28,7 +28,10 @@ use Symfony\Component\Console\Input\InputOption;
*/ */
class TextDescriptor extends Descriptor class TextDescriptor extends Descriptor
{ {
protected function describeInputArgument(InputArgument $argument, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = [])
{ {
if (null !== $argument->getDefault() && (!\is_array($argument->getDefault()) || \count($argument->getDefault()))) { if (null !== $argument->getDefault() && (!\is_array($argument->getDefault()) || \count($argument->getDefault()))) {
$default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($argument->getDefault())); $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($argument->getDefault()));
@ -48,7 +51,10 @@ class TextDescriptor extends Descriptor
), $options); ), $options);
} }
protected function describeInputOption(InputOption $option, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = [])
{ {
if ($option->acceptValue() && null !== $option->getDefault() && (!\is_array($option->getDefault()) || \count($option->getDefault()))) { if ($option->acceptValue() && null !== $option->getDefault() && (!\is_array($option->getDefault()) || \count($option->getDefault()))) {
$default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($option->getDefault())); $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($option->getDefault()));
@ -83,7 +89,10 @@ class TextDescriptor extends Descriptor
), $options); ), $options);
} }
protected function describeInputDefinition(InputDefinition $definition, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = [])
{ {
$totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions()); $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions());
foreach ($definition->getArguments() as $argument) { foreach ($definition->getArguments() as $argument) {
@ -122,7 +131,10 @@ class TextDescriptor extends Descriptor
} }
} }
protected function describeCommand(Command $command, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = [])
{ {
$command->mergeApplicationDefinition(false); $command->mergeApplicationDefinition(false);
@ -157,7 +169,10 @@ class TextDescriptor extends Descriptor
} }
} }
protected function describeApplication(Application $application, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = [])
{ {
$describedNamespace = $options['namespace'] ?? null; $describedNamespace = $options['namespace'] ?? null;
$description = new ApplicationDescription($application, $describedNamespace); $description = new ApplicationDescription($application, $describedNamespace);
@ -193,7 +208,9 @@ class TextDescriptor extends Descriptor
} }
// calculate max. width based on available commands per namespace // calculate max. width based on available commands per namespace
$width = $this->getColumnWidth(array_merge(...array_values(array_map(fn ($namespace) => array_intersect($namespace['commands'], array_keys($commands)), array_values($namespaces))))); $width = $this->getColumnWidth(array_merge(...array_values(array_map(function ($namespace) use ($commands) {
return array_intersect($namespace['commands'], array_keys($commands));
}, array_values($namespaces)))));
if ($describedNamespace) { if ($describedNamespace) {
$this->writeText(sprintf('<comment>Available commands for the "%s" namespace:</comment>', $describedNamespace), $options); $this->writeText(sprintf('<comment>Available commands for the "%s" namespace:</comment>', $describedNamespace), $options);
@ -202,7 +219,9 @@ class TextDescriptor extends Descriptor
} }
foreach ($namespaces as $namespace) { foreach ($namespaces as $namespace) {
$namespace['commands'] = array_filter($namespace['commands'], fn ($name) => isset($commands[$name])); $namespace['commands'] = array_filter($namespace['commands'], function ($name) use ($commands) {
return isset($commands[$name]);
});
if (!$namespace['commands']) { if (!$namespace['commands']) {
continue; continue;
@ -226,7 +245,10 @@ class TextDescriptor extends Descriptor
} }
} }
private function writeText(string $content, array $options = []): void /**
* {@inheritdoc}
*/
private function writeText(string $content, array $options = [])
{ {
$this->write( $this->write(
isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content, isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content,

View File

@ -120,27 +120,42 @@ class XmlDescriptor extends Descriptor
return $dom; return $dom;
} }
protected function describeInputArgument(InputArgument $argument, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputArgument(InputArgument $argument, array $options = [])
{ {
$this->writeDocument($this->getInputArgumentDocument($argument)); $this->writeDocument($this->getInputArgumentDocument($argument));
} }
protected function describeInputOption(InputOption $option, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputOption(InputOption $option, array $options = [])
{ {
$this->writeDocument($this->getInputOptionDocument($option)); $this->writeDocument($this->getInputOptionDocument($option));
} }
protected function describeInputDefinition(InputDefinition $definition, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeInputDefinition(InputDefinition $definition, array $options = [])
{ {
$this->writeDocument($this->getInputDefinitionDocument($definition)); $this->writeDocument($this->getInputDefinitionDocument($definition));
} }
protected function describeCommand(Command $command, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeCommand(Command $command, array $options = [])
{ {
$this->writeDocument($this->getCommandDocument($command, $options['short'] ?? false)); $this->writeDocument($this->getCommandDocument($command, $options['short'] ?? false));
} }
protected function describeApplication(Application $application, array $options = []): void /**
* {@inheritdoc}
*/
protected function describeApplication(Application $application, array $options = [])
{ {
$this->writeDocument($this->getApplicationDocument($application, $options['namespace'] ?? null, $options['short'] ?? false)); $this->writeDocument($this->getApplicationDocument($application, $options['namespace'] ?? null, $options['short'] ?? false));
} }
@ -148,7 +163,7 @@ class XmlDescriptor extends Descriptor
/** /**
* Appends document children to parent node. * Appends document children to parent node.
*/ */
private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent): void private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent)
{ {
foreach ($importedParent->childNodes as $childNode) { foreach ($importedParent->childNodes as $childNode) {
$parentNode->appendChild($parentNode->ownerDocument->importNode($childNode, true)); $parentNode->appendChild($parentNode->ownerDocument->importNode($childNode, true));
@ -158,7 +173,7 @@ class XmlDescriptor extends Descriptor
/** /**
* Writes DOM document. * Writes DOM document.
*/ */
private function writeDocument(\DOMDocument $dom): void private function writeDocument(\DOMDocument $dom)
{ {
$dom->formatOutput = true; $dom->formatOutput = true;
$this->write($dom->saveXML()); $this->write($dom->saveXML());

View File

@ -47,6 +47,7 @@ final class ConsoleErrorEvent extends ConsoleEvent
$this->exitCode = $exitCode; $this->exitCode = $exitCode;
$r = new \ReflectionProperty($this->error, 'code'); $r = new \ReflectionProperty($this->error, 'code');
$r->setAccessible(true);
$r->setValue($this->error, $this->exitCode); $r->setValue($this->error, $this->exitCode);
} }

View File

@ -25,8 +25,8 @@ class ConsoleEvent extends Event
{ {
protected $command; protected $command;
private InputInterface $input; private $input;
private OutputInterface $output; private $output;
public function __construct(?Command $command, InputInterface $input, OutputInterface $output) public function __construct(?Command $command, InputInterface $input, OutputInterface $output)
{ {

View File

@ -21,36 +21,15 @@ use Symfony\Component\Console\Output\OutputInterface;
final class ConsoleSignalEvent extends ConsoleEvent final class ConsoleSignalEvent extends ConsoleEvent
{ {
private int $handlingSignal; private int $handlingSignal;
private int|false $exitCode;
public function __construct(Command $command, InputInterface $input, OutputInterface $output, int $handlingSignal, int|false $exitCode = 0) public function __construct(Command $command, InputInterface $input, OutputInterface $output, int $handlingSignal)
{ {
parent::__construct($command, $input, $output); parent::__construct($command, $input, $output);
$this->handlingSignal = $handlingSignal; $this->handlingSignal = $handlingSignal;
$this->exitCode = $exitCode;
} }
public function getHandlingSignal(): int public function getHandlingSignal(): int
{ {
return $this->handlingSignal; return $this->handlingSignal;
} }
public function setExitCode(int $exitCode): void
{
if ($exitCode < 0 || $exitCode > 255) {
throw new \InvalidArgumentException('Exit code must be between 0 and 255.');
}
$this->exitCode = $exitCode;
}
public function abortExit(): void
{
$this->exitCode = false;
}
public function getExitCode(): int|false
{
return $this->exitCode;
}
} }

View File

@ -24,16 +24,13 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
*/ */
class ErrorListener implements EventSubscriberInterface class ErrorListener implements EventSubscriberInterface
{ {
private ?LoggerInterface $logger; private $logger;
public function __construct(LoggerInterface $logger = null) public function __construct(LoggerInterface $logger = null)
{ {
$this->logger = $logger; $this->logger = $logger;
} }
/**
* @return void
*/
public function onConsoleError(ConsoleErrorEvent $event) public function onConsoleError(ConsoleErrorEvent $event)
{ {
if (null === $this->logger) { if (null === $this->logger) {
@ -51,9 +48,6 @@ class ErrorListener implements EventSubscriberInterface
$this->logger->critical('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]); $this->logger->critical('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]);
} }
/**
* @return void
*/
public function onConsoleTerminate(ConsoleTerminateEvent $event) public function onConsoleTerminate(ConsoleTerminateEvent $event)
{ {
if (null === $this->logger) { if (null === $this->logger) {
@ -85,7 +79,7 @@ class ErrorListener implements EventSubscriberInterface
private static function getInputString(ConsoleEvent $event): ?string private static function getInputString(ConsoleEvent $event): ?string
{ {
$commandName = $event->getCommand()?->getName(); $commandName = $event->getCommand() ? $event->getCommand()->getName() : null;
$input = $event->getInput(); $input = $event->getInput();
if ($input instanceof \Stringable) { if ($input instanceof \Stringable) {

View File

@ -16,34 +16,52 @@ namespace Symfony\Component\Console\Formatter;
*/ */
final class NullOutputFormatter implements OutputFormatterInterface final class NullOutputFormatter implements OutputFormatterInterface
{ {
private NullOutputFormatterStyle $style; private $style;
/**
* {@inheritdoc}
*/
public function format(?string $message): ?string public function format(?string $message): ?string
{ {
return null; return null;
} }
/**
* {@inheritdoc}
*/
public function getStyle(string $name): OutputFormatterStyleInterface public function getStyle(string $name): OutputFormatterStyleInterface
{ {
// to comply with the interface we must return a OutputFormatterStyleInterface // to comply with the interface we must return a OutputFormatterStyleInterface
return $this->style ??= new NullOutputFormatterStyle(); return $this->style ?? $this->style = new NullOutputFormatterStyle();
} }
/**
* {@inheritdoc}
*/
public function hasStyle(string $name): bool public function hasStyle(string $name): bool
{ {
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function isDecorated(): bool public function isDecorated(): bool
{ {
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function setDecorated(bool $decorated): void public function setDecorated(bool $decorated): void
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function setStyle(string $name, OutputFormatterStyleInterface $style): void public function setStyle(string $name, OutputFormatterStyleInterface $style): void
{ {
// do nothing // do nothing

View File

@ -16,37 +16,49 @@ namespace Symfony\Component\Console\Formatter;
*/ */
final class NullOutputFormatterStyle implements OutputFormatterStyleInterface final class NullOutputFormatterStyle implements OutputFormatterStyleInterface
{ {
/**
* {@inheritdoc}
*/
public function apply(string $text): string public function apply(string $text): string
{ {
return $text; return $text;
} }
/**
* {@inheritdoc}
*/
public function setBackground(string $color = null): void public function setBackground(string $color = null): void
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function setForeground(string $color = null): void public function setForeground(string $color = null): void
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function setOption(string $option): void public function setOption(string $option): void
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function setOptions(array $options): void public function setOptions(array $options): void
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function unsetOption(string $option): void public function unsetOption(string $option): void
{ {
// do nothing // do nothing

View File

@ -13,8 +13,6 @@ namespace Symfony\Component\Console\Formatter;
use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\InvalidArgumentException;
use function Symfony\Component\String\b;
/** /**
* Formatter class for console output. * Formatter class for console output.
* *
@ -25,7 +23,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface
{ {
private bool $decorated; private bool $decorated;
private array $styles = []; private array $styles = [];
private OutputFormatterStyleStack $styleStack; private $styleStack;
public function __clone() public function __clone()
{ {
@ -84,31 +82,40 @@ class OutputFormatter implements WrappableOutputFormatterInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setDecorated(bool $decorated) public function setDecorated(bool $decorated)
{ {
$this->decorated = $decorated; $this->decorated = $decorated;
} }
/**
* {@inheritdoc}
*/
public function isDecorated(): bool public function isDecorated(): bool
{ {
return $this->decorated; return $this->decorated;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setStyle(string $name, OutputFormatterStyleInterface $style) public function setStyle(string $name, OutputFormatterStyleInterface $style)
{ {
$this->styles[strtolower($name)] = $style; $this->styles[strtolower($name)] = $style;
} }
/**
* {@inheritdoc}
*/
public function hasStyle(string $name): bool public function hasStyle(string $name): bool
{ {
return isset($this->styles[strtolower($name)]); return isset($this->styles[strtolower($name)]);
} }
/**
* {@inheritdoc}
*/
public function getStyle(string $name): OutputFormatterStyleInterface public function getStyle(string $name): OutputFormatterStyleInterface
{ {
if (!$this->hasStyle($name)) { if (!$this->hasStyle($name)) {
@ -118,13 +125,16 @@ class OutputFormatter implements WrappableOutputFormatterInterface
return $this->styles[strtolower($name)]; return $this->styles[strtolower($name)];
} }
/**
* {@inheritdoc}
*/
public function format(?string $message): ?string public function format(?string $message): ?string
{ {
return $this->formatAndWrap($message, 0); return $this->formatAndWrap($message, 0);
} }
/** /**
* @return string * {@inheritdoc}
*/ */
public function formatAndWrap(?string $message, int $width) public function formatAndWrap(?string $message, int $width)
{ {
@ -151,7 +161,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface
$offset = $pos + \strlen($text); $offset = $pos + \strlen($text);
// opening tag? // opening tag?
if ($open = '/' !== $text[1]) { if ($open = '/' != $text[1]) {
$tag = $matches[1][$i][0]; $tag = $matches[1][$i][0];
} else { } else {
$tag = $matches[3][$i][0] ?? ''; $tag = $matches[3][$i][0] ?? '';
@ -243,10 +253,10 @@ class OutputFormatter implements WrappableOutputFormatterInterface
} }
preg_match('~(\\n)$~', $text, $matches); preg_match('~(\\n)$~', $text, $matches);
$text = $prefix.$this->addLineBreaks($text, $width); $text = $prefix.preg_replace('~([^\\n]{'.$width.'})\\ *~', "\$1\n", $text);
$text = rtrim($text, "\n").($matches[1] ?? ''); $text = rtrim($text, "\n").($matches[1] ?? '');
if (!$currentLineLength && '' !== $current && !str_ends_with($current, "\n")) { if (!$currentLineLength && '' !== $current && "\n" !== substr($current, -1)) {
$text = "\n".$text; $text = "\n".$text;
} }
@ -267,11 +277,4 @@ class OutputFormatter implements WrappableOutputFormatterInterface
return implode("\n", $lines); return implode("\n", $lines);
} }
private function addLineBreaks(string $text, int $width): string
{
$encoding = mb_detect_encoding($text, null, true) ?: 'UTF-8';
return b($text)->toCodePointString($encoding)->wordwrap($width, "\n", true)->toByteString($encoding);
}
} }

View File

@ -20,8 +20,6 @@ interface OutputFormatterInterface
{ {
/** /**
* Sets the decorated flag. * Sets the decorated flag.
*
* @return void
*/ */
public function setDecorated(bool $decorated); public function setDecorated(bool $decorated);
@ -32,8 +30,6 @@ interface OutputFormatterInterface
/** /**
* Sets a new style. * Sets a new style.
*
* @return void
*/ */
public function setStyle(string $name, OutputFormatterStyleInterface $style); public function setStyle(string $name, OutputFormatterStyleInterface $style);

View File

@ -20,7 +20,7 @@ use Symfony\Component\Console\Color;
*/ */
class OutputFormatterStyle implements OutputFormatterStyleInterface class OutputFormatterStyle implements OutputFormatterStyleInterface
{ {
private Color $color; private $color;
private string $foreground; private string $foreground;
private string $background; private string $background;
private array $options; private array $options;
@ -39,24 +39,18 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setForeground(string $color = null) public function setForeground(string $color = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
$this->color = new Color($this->foreground = $color ?: '', $this->background, $this->options); $this->color = new Color($this->foreground = $color ?: '', $this->background, $this->options);
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setBackground(string $color = null) public function setBackground(string $color = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
$this->color = new Color($this->foreground, $this->background = $color ?: '', $this->options); $this->color = new Color($this->foreground, $this->background = $color ?: '', $this->options);
} }
@ -66,7 +60,7 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setOption(string $option) public function setOption(string $option)
{ {
@ -75,7 +69,7 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function unsetOption(string $option) public function unsetOption(string $option)
{ {
@ -88,18 +82,20 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setOptions(array $options) public function setOptions(array $options)
{ {
$this->color = new Color($this->foreground, $this->background, $this->options = $options); $this->color = new Color($this->foreground, $this->background, $this->options = $options);
} }
/**
* {@inheritdoc}
*/
public function apply(string $text): string public function apply(string $text): string
{ {
$this->handlesHrefGracefully ??= 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR') $this->handlesHrefGracefully ??= 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR')
&& (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100) && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100);
&& !isset($_SERVER['IDEA_INITIAL_DIRECTORY']);
if (null !== $this->href && $this->handlesHrefGracefully) { if (null !== $this->href && $this->handlesHrefGracefully) {
$text = "\033]8;;$this->href\033\\$text\033]8;;\033\\"; $text = "\033]8;;$this->href\033\\$text\033]8;;\033\\";

View File

@ -20,36 +20,26 @@ interface OutputFormatterStyleInterface
{ {
/** /**
* Sets style foreground color. * Sets style foreground color.
*
* @return void
*/ */
public function setForeground(?string $color); public function setForeground(string $color = null);
/** /**
* Sets style background color. * Sets style background color.
*
* @return void
*/ */
public function setBackground(?string $color); public function setBackground(string $color = null);
/** /**
* Sets some specific style option. * Sets some specific style option.
*
* @return void
*/ */
public function setOption(string $option); public function setOption(string $option);
/** /**
* Unsets some specific style option. * Unsets some specific style option.
*
* @return void
*/ */
public function unsetOption(string $option); public function unsetOption(string $option);
/** /**
* Sets multiple style options at once. * Sets multiple style options at once.
*
* @return void
*/ */
public function setOptions(array $options); public function setOptions(array $options);

View File

@ -24,7 +24,7 @@ class OutputFormatterStyleStack implements ResetInterface
*/ */
private array $styles = []; private array $styles = [];
private OutputFormatterStyleInterface $emptyStyle; private $emptyStyle;
public function __construct(OutputFormatterStyleInterface $emptyStyle = null) public function __construct(OutputFormatterStyleInterface $emptyStyle = null)
{ {
@ -34,8 +34,6 @@ class OutputFormatterStyleStack implements ResetInterface
/** /**
* Resets stack (ie. empty internal arrays). * Resets stack (ie. empty internal arrays).
*
* @return void
*/ */
public function reset() public function reset()
{ {
@ -44,8 +42,6 @@ class OutputFormatterStyleStack implements ResetInterface
/** /**
* Pushes a style in the stack. * Pushes a style in the stack.
*
* @return void
*/ */
public function push(OutputFormatterStyleInterface $style) public function push(OutputFormatterStyleInterface $style)
{ {
@ -59,7 +55,7 @@ class OutputFormatterStyleStack implements ResetInterface
*/ */
public function pop(OutputFormatterStyleInterface $style = null): OutputFormatterStyleInterface public function pop(OutputFormatterStyleInterface $style = null): OutputFormatterStyleInterface
{ {
if (!$this->styles) { if (empty($this->styles)) {
return $this->emptyStyle; return $this->emptyStyle;
} }
@ -83,7 +79,7 @@ class OutputFormatterStyleStack implements ResetInterface
*/ */
public function getCurrent(): OutputFormatterStyleInterface public function getCurrent(): OutputFormatterStyleInterface
{ {
if (!$this->styles) { if (empty($this->styles)) {
return $this->emptyStyle; return $this->emptyStyle;
} }

View File

@ -20,8 +20,6 @@ interface WrappableOutputFormatterInterface extends OutputFormatterInterface
{ {
/** /**
* Formats a message according to the given styles, wrapping at `$width` (0 means no wrapping). * Formats a message according to the given styles, wrapping at `$width` (0 means no wrapping).
*
* @return string
*/ */
public function formatAndWrap(?string $message, int $width); public function formatAndWrap(?string $message, int $width);
} }

View File

@ -91,6 +91,9 @@ class DebugFormatterHelper extends Helper
return sprintf('<bg=%s> </>', self::COLORS[$this->started[$id]['border']]); return sprintf('<bg=%s> </>', self::COLORS[$this->started[$id]['border']]);
} }
/**
* {@inheritdoc}
*/
public function getName(): string public function getName(): string
{ {
return 'debug_formatter'; return 'debug_formatter';

View File

@ -14,7 +14,6 @@ namespace Symfony\Component\Console\Helper;
use Symfony\Component\Console\Descriptor\DescriptorInterface; use Symfony\Component\Console\Descriptor\DescriptorInterface;
use Symfony\Component\Console\Descriptor\JsonDescriptor; use Symfony\Component\Console\Descriptor\JsonDescriptor;
use Symfony\Component\Console\Descriptor\MarkdownDescriptor; use Symfony\Component\Console\Descriptor\MarkdownDescriptor;
use Symfony\Component\Console\Descriptor\ReStructuredTextDescriptor;
use Symfony\Component\Console\Descriptor\TextDescriptor; use Symfony\Component\Console\Descriptor\TextDescriptor;
use Symfony\Component\Console\Descriptor\XmlDescriptor; use Symfony\Component\Console\Descriptor\XmlDescriptor;
use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\InvalidArgumentException;
@ -39,7 +38,6 @@ class DescriptorHelper extends Helper
->register('xml', new XmlDescriptor()) ->register('xml', new XmlDescriptor())
->register('json', new JsonDescriptor()) ->register('json', new JsonDescriptor())
->register('md', new MarkdownDescriptor()) ->register('md', new MarkdownDescriptor())
->register('rst', new ReStructuredTextDescriptor())
; ;
} }
@ -50,8 +48,6 @@ class DescriptorHelper extends Helper
* * format: string, the output format name * * format: string, the output format name
* * raw_text: boolean, sets output type as raw * * raw_text: boolean, sets output type as raw
* *
* @return void
*
* @throws InvalidArgumentException when the given format is not supported * @throws InvalidArgumentException when the given format is not supported
*/ */
public function describe(OutputInterface $output, ?object $object, array $options = []) public function describe(OutputInterface $output, ?object $object, array $options = [])
@ -81,6 +77,9 @@ class DescriptorHelper extends Helper
return $this; return $this;
} }
/**
* {@inheritdoc}
*/
public function getName(): string public function getName(): string
{ {
return 'descriptor'; return 'descriptor';

View File

@ -21,9 +21,9 @@ use Symfony\Component\VarDumper\Dumper\CliDumper;
*/ */
final class Dumper final class Dumper
{ {
private OutputInterface $output; private $output;
private ?CliDumper $dumper; private $dumper;
private ?ClonerInterface $cloner; private $cloner;
private \Closure $handler; private \Closure $handler;
public function __construct(OutputInterface $output, CliDumper $dumper = null, ClonerInterface $cloner = null) public function __construct(OutputInterface $output, CliDumper $dumper = null, ClonerInterface $cloner = null)
@ -34,18 +34,25 @@ final class Dumper
if (class_exists(CliDumper::class)) { if (class_exists(CliDumper::class)) {
$this->handler = function ($var): string { $this->handler = function ($var): string {
$dumper = $this->dumper ??= new CliDumper(null, null, CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR); $dumper = $this->dumper ?? $this->dumper = new CliDumper(null, null, CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR);
$dumper->setColors($this->output->isDecorated()); $dumper->setColors($this->output->isDecorated());
return rtrim($dumper->dump(($this->cloner ??= new VarCloner())->cloneVar($var)->withRefHandles(false), true)); return rtrim($dumper->dump(($this->cloner ?? $this->cloner = new VarCloner())->cloneVar($var)->withRefHandles(false), true));
}; };
} else { } else {
$this->handler = fn ($var): string => match (true) { $this->handler = function ($var): string {
null === $var => 'null', switch (true) {
true === $var => 'true', case null === $var:
false === $var => 'false', return 'null';
\is_string($var) => '"'.$var.'"', case true === $var:
default => rtrim(print_r($var, true)), return 'true';
case false === $var:
return 'false';
case \is_string($var):
return '"'.$var.'"';
default:
return rtrim(print_r($var, true));
}
}; };
} }
} }

View File

@ -74,6 +74,9 @@ class FormatterHelper extends Helper
return self::substr($message, 0, $length).$suffix; return self::substr($message, 0, $length).$suffix;
} }
/**
* {@inheritdoc}
*/
public function getName(): string public function getName(): string
{ {
return 'formatter'; return 'formatter';

View File

@ -21,19 +21,19 @@ use Symfony\Component\String\UnicodeString;
*/ */
abstract class Helper implements HelperInterface abstract class Helper implements HelperInterface
{ {
protected $helperSet; protected $helperSet = null;
/** /**
* @return void * {@inheritdoc}
*/ */
public function setHelperSet(HelperSet $helperSet = null) public function setHelperSet(HelperSet $helperSet = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
$this->helperSet = $helperSet; $this->helperSet = $helperSet;
} }
/**
* {@inheritdoc}
*/
public function getHelperSet(): ?HelperSet public function getHelperSet(): ?HelperSet
{ {
return $this->helperSet; return $this->helperSet;
@ -45,7 +45,7 @@ abstract class Helper implements HelperInterface
*/ */
public static function width(?string $string): int public static function width(?string $string): int
{ {
$string ??= ''; $string ?? $string = '';
if (preg_match('//u', $string)) { if (preg_match('//u', $string)) {
return (new UnicodeString($string))->width(false); return (new UnicodeString($string))->width(false);
@ -64,7 +64,7 @@ abstract class Helper implements HelperInterface
*/ */
public static function length(?string $string): int public static function length(?string $string): int
{ {
$string ??= ''; $string ?? $string = '';
if (preg_match('//u', $string)) { if (preg_match('//u', $string)) {
return (new UnicodeString($string))->length(); return (new UnicodeString($string))->length();
@ -82,7 +82,7 @@ abstract class Helper implements HelperInterface
*/ */
public static function substr(?string $string, int $from, int $length = null): string public static function substr(?string $string, int $from, int $length = null): string
{ {
$string ??= ''; $string ?? $string = '';
if (false === $encoding = mb_detect_encoding($string, null, true)) { if (false === $encoding = mb_detect_encoding($string, null, true)) {
return substr($string, $from, $length); return substr($string, $from, $length);
@ -91,9 +91,6 @@ abstract class Helper implements HelperInterface
return mb_substr($string, $from, $length, $encoding); return mb_substr($string, $from, $length, $encoding);
} }
/**
* @return string
*/
public static function formatTime(int|float $secs) public static function formatTime(int|float $secs)
{ {
static $timeFormats = [ static $timeFormats = [
@ -123,9 +120,6 @@ abstract class Helper implements HelperInterface
} }
} }
/**
* @return string
*/
public static function formatMemory(int $memory) public static function formatMemory(int $memory)
{ {
if ($memory >= 1024 * 1024 * 1024) { if ($memory >= 1024 * 1024 * 1024) {
@ -143,9 +137,6 @@ abstract class Helper implements HelperInterface
return sprintf('%d B', $memory); return sprintf('%d B', $memory);
} }
/**
* @return string
*/
public static function removeDecoration(OutputFormatterInterface $formatter, ?string $string) public static function removeDecoration(OutputFormatterInterface $formatter, ?string $string)
{ {
$isDecorated = $formatter->isDecorated(); $isDecorated = $formatter->isDecorated();

View File

@ -20,10 +20,8 @@ interface HelperInterface
{ {
/** /**
* Sets the helper set associated with this helper. * Sets the helper set associated with this helper.
*
* @return void
*/ */
public function setHelperSet(?HelperSet $helperSet); public function setHelperSet(HelperSet $helperSet = null);
/** /**
* Gets the helper set associated with this helper. * Gets the helper set associated with this helper.

View File

@ -18,15 +18,15 @@ use Symfony\Component\Console\Exception\InvalidArgumentException;
* *
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
* *
* @implements \IteratorAggregate<string, HelperInterface> * @implements \IteratorAggregate<string, Helper>
*/ */
class HelperSet implements \IteratorAggregate class HelperSet implements \IteratorAggregate
{ {
/** @var array<string, HelperInterface> */ /** @var array<string, Helper> */
private array $helpers = []; private array $helpers = [];
/** /**
* @param HelperInterface[] $helpers * @param Helper[] $helpers An array of helper
*/ */
public function __construct(array $helpers = []) public function __construct(array $helpers = [])
{ {
@ -35,9 +35,6 @@ class HelperSet implements \IteratorAggregate
} }
} }
/**
* @return void
*/
public function set(HelperInterface $helper, string $alias = null) public function set(HelperInterface $helper, string $alias = null)
{ {
$this->helpers[$helper->getName()] = $helper; $this->helpers[$helper->getName()] = $helper;

View File

@ -24,7 +24,7 @@ abstract class InputAwareHelper extends Helper implements InputAwareInterface
protected $input; protected $input;
/** /**
* @return void * {@inheritdoc}
*/ */
public function setInput(InputInterface $input) public function setInput(InputInterface $input)
{ {

View File

@ -130,6 +130,9 @@ class ProcessHelper extends Helper
return str_replace('<', '\\<', $str); return str_replace('<', '\\<', $str);
} }
/**
* {@inheritdoc}
*/
public function getName(): string public function getName(): string
{ {
return 'process'; return 'process';

View File

@ -47,19 +47,17 @@ final class ProgressBar
private float $lastWriteTime = 0; private float $lastWriteTime = 0;
private float $minSecondsBetweenRedraws = 0; private float $minSecondsBetweenRedraws = 0;
private float $maxSecondsBetweenRedraws = 1; private float $maxSecondsBetweenRedraws = 1;
private OutputInterface $output; private $output;
private int $step = 0; private int $step = 0;
private int $startingStep = 0;
private ?int $max = null; private ?int $max = null;
private int $startTime; private int $startTime;
private int $stepWidth; private int $stepWidth;
private float $percent = 0.0; private float $percent = 0.0;
private array $messages = []; private array $messages = [];
private bool $overwrite = true; private bool $overwrite = true;
private Terminal $terminal; private $terminal;
private ?string $previousMessage = null; private ?string $previousMessage = null;
private Cursor $cursor; private $cursor;
private array $placeholders = [];
private static array $formatters; private static array $formatters;
private static array $formats; private static array $formats;
@ -95,12 +93,12 @@ final class ProgressBar
} }
/** /**
* Sets a placeholder formatter for a given name, globally for all instances of ProgressBar. * Sets a placeholder formatter for a given name.
* *
* This method also allow you to override an existing placeholder. * This method also allow you to override an existing placeholder.
* *
* @param string $name The placeholder name (including the delimiter char like %) * @param string $name The placeholder name (including the delimiter char like %)
* @param callable(ProgressBar):string $callable A PHP callable * @param callable $callable A PHP callable
*/ */
public static function setPlaceholderFormatterDefinition(string $name, callable $callable): void public static function setPlaceholderFormatterDefinition(string $name, callable $callable): void
{ {
@ -121,26 +119,6 @@ final class ProgressBar
return self::$formatters[$name] ?? null; return self::$formatters[$name] ?? null;
} }
/**
* Sets a placeholder formatter for a given name, for this instance only.
*
* @param callable(ProgressBar):string $callable A PHP callable
*/
public function setPlaceholderFormatter(string $name, callable $callable): void
{
$this->placeholders[$name] = $callable;
}
/**
* Gets the placeholder formatter for a given name.
*
* @param string $name The placeholder name (including the delimiter char like %)
*/
public function getPlaceholderFormatter(string $name): ?callable
{
return $this->placeholders[$name] ?? $this::getPlaceholderFormatterDefinition($name);
}
/** /**
* Sets a format for a given name. * Sets a format for a given name.
* *
@ -178,12 +156,12 @@ final class ProgressBar
* @param string $message The text to associate with the placeholder * @param string $message The text to associate with the placeholder
* @param string $name The name of the placeholder * @param string $name The name of the placeholder
*/ */
public function setMessage(string $message, string $name = 'message'): void public function setMessage(string $message, string $name = 'message')
{ {
$this->messages[$name] = $message; $this->messages[$name] = $message;
} }
public function getMessage(string $name = 'message'): string public function getMessage(string $name = 'message')
{ {
return $this->messages[$name]; return $this->messages[$name];
} }
@ -220,11 +198,11 @@ final class ProgressBar
public function getEstimated(): float public function getEstimated(): float
{ {
if (0 === $this->step || $this->step === $this->startingStep) { if (!$this->step) {
return 0; return 0;
} }
return round((time() - $this->startTime) / ($this->step - $this->startingStep) * $this->max); return round((time() - $this->startTime) / $this->step * $this->max);
} }
public function getRemaining(): float public function getRemaining(): float
@ -233,10 +211,10 @@ final class ProgressBar
return 0; return 0;
} }
return round((time() - $this->startTime) / ($this->step - $this->startingStep) * ($this->max - $this->step)); return round((time() - $this->startTime) / $this->step * ($this->max - $this->step));
} }
public function setBarWidth(int $size): void public function setBarWidth(int $size)
{ {
$this->barWidth = max(1, $size); $this->barWidth = max(1, $size);
} }
@ -246,7 +224,7 @@ final class ProgressBar
return $this->barWidth; return $this->barWidth;
} }
public function setBarCharacter(string $char): void public function setBarCharacter(string $char)
{ {
$this->barChar = $char; $this->barChar = $char;
} }
@ -256,7 +234,7 @@ final class ProgressBar
return $this->barChar ?? ($this->max ? '=' : $this->emptyBarChar); return $this->barChar ?? ($this->max ? '=' : $this->emptyBarChar);
} }
public function setEmptyBarCharacter(string $char): void public function setEmptyBarCharacter(string $char)
{ {
$this->emptyBarChar = $char; $this->emptyBarChar = $char;
} }
@ -266,7 +244,7 @@ final class ProgressBar
return $this->emptyBarChar; return $this->emptyBarChar;
} }
public function setProgressCharacter(string $char): void public function setProgressCharacter(string $char)
{ {
$this->progressChar = $char; $this->progressChar = $char;
} }
@ -276,7 +254,7 @@ final class ProgressBar
return $this->progressChar; return $this->progressChar;
} }
public function setFormat(string $format): void public function setFormat(string $format)
{ {
$this->format = null; $this->format = null;
$this->internalFormat = $format; $this->internalFormat = $format;
@ -287,7 +265,7 @@ final class ProgressBar
* *
* @param int|null $freq The frequency in steps * @param int|null $freq The frequency in steps
*/ */
public function setRedrawFrequency(?int $freq): void public function setRedrawFrequency(?int $freq)
{ {
$this->redrawFreq = null !== $freq ? max(1, $freq) : null; $this->redrawFreq = null !== $freq ? max(1, $freq) : null;
} }
@ -324,15 +302,12 @@ final class ProgressBar
* Starts the progress output. * Starts the progress output.
* *
* @param int|null $max Number of steps to complete the bar (0 if indeterminate), null to leave unchanged * @param int|null $max Number of steps to complete the bar (0 if indeterminate), null to leave unchanged
* @param int $startAt The starting point of the bar (useful e.g. when resuming a previously started bar)
*/ */
public function start(int $max = null, int $startAt = 0): void public function start(int $max = null)
{ {
$this->startTime = time(); $this->startTime = time();
$this->step = $startAt; $this->step = 0;
$this->startingStep = $startAt; $this->percent = 0.0;
$startAt > 0 ? $this->setProgress($startAt) : $this->percent = 0.0;
if (null !== $max) { if (null !== $max) {
$this->setMaxSteps($max); $this->setMaxSteps($max);
@ -346,7 +321,7 @@ final class ProgressBar
* *
* @param int $step Number of steps to advance * @param int $step Number of steps to advance
*/ */
public function advance(int $step = 1): void public function advance(int $step = 1)
{ {
$this->setProgress($this->step + $step); $this->setProgress($this->step + $step);
} }
@ -354,12 +329,12 @@ final class ProgressBar
/** /**
* Sets whether to overwrite the progressbar, false for new line. * Sets whether to overwrite the progressbar, false for new line.
*/ */
public function setOverwrite(bool $overwrite): void public function setOverwrite(bool $overwrite)
{ {
$this->overwrite = $overwrite; $this->overwrite = $overwrite;
} }
public function setProgress(int $step): void public function setProgress(int $step)
{ {
if ($this->max && $step > $this->max) { if ($this->max && $step > $this->max) {
$this->max = $step; $this->max = $step;
@ -392,7 +367,7 @@ final class ProgressBar
} }
} }
public function setMaxSteps(int $max): void public function setMaxSteps(int $max)
{ {
$this->format = null; $this->format = null;
$this->max = max(0, $max); $this->max = max(0, $max);
@ -452,7 +427,7 @@ final class ProgressBar
$this->overwrite(''); $this->overwrite('');
} }
private function setRealFormat(string $format): void private function setRealFormat(string $format)
{ {
// try to use the _nomax variant if available // try to use the _nomax variant if available
if (!$this->max && null !== self::getFormatDefinition($format.'_nomax')) { if (!$this->max && null !== self::getFormatDefinition($format.'_nomax')) {
@ -512,13 +487,17 @@ final class ProgressBar
private function determineBestFormat(): string private function determineBestFormat(): string
{ {
return match ($this->output->getVerbosity()) { switch ($this->output->getVerbosity()) {
// OutputInterface::VERBOSITY_QUIET: display is disabled anyway // OutputInterface::VERBOSITY_QUIET: display is disabled anyway
OutputInterface::VERBOSITY_VERBOSE => $this->max ? self::FORMAT_VERBOSE : self::FORMAT_VERBOSE_NOMAX, case OutputInterface::VERBOSITY_VERBOSE:
OutputInterface::VERBOSITY_VERY_VERBOSE => $this->max ? self::FORMAT_VERY_VERBOSE : self::FORMAT_VERY_VERBOSE_NOMAX, return $this->max ? self::FORMAT_VERBOSE : self::FORMAT_VERBOSE_NOMAX;
OutputInterface::VERBOSITY_DEBUG => $this->max ? self::FORMAT_DEBUG : self::FORMAT_DEBUG_NOMAX, case OutputInterface::VERBOSITY_VERY_VERBOSE:
default => $this->max ? self::FORMAT_NORMAL : self::FORMAT_NORMAL_NOMAX, return $this->max ? self::FORMAT_VERY_VERBOSE : self::FORMAT_VERY_VERBOSE_NOMAX;
}; case OutputInterface::VERBOSITY_DEBUG:
return $this->max ? self::FORMAT_DEBUG : self::FORMAT_DEBUG_NOMAX;
default:
return $this->max ? self::FORMAT_NORMAL : self::FORMAT_NORMAL_NOMAX;
}
} }
private static function initPlaceholderFormatters(): array private static function initPlaceholderFormatters(): array
@ -534,7 +513,9 @@ final class ProgressBar
return $display; return $display;
}, },
'elapsed' => fn (self $bar) => Helper::formatTime(time() - $bar->getStartTime()), 'elapsed' => function (self $bar) {
return Helper::formatTime(time() - $bar->getStartTime());
},
'remaining' => function (self $bar) { 'remaining' => function (self $bar) {
if (!$bar->getMaxSteps()) { if (!$bar->getMaxSteps()) {
throw new LogicException('Unable to display the remaining time if the maximum number of steps is not set.'); throw new LogicException('Unable to display the remaining time if the maximum number of steps is not set.');
@ -549,10 +530,18 @@ final class ProgressBar
return Helper::formatTime($bar->getEstimated()); return Helper::formatTime($bar->getEstimated());
}, },
'memory' => fn (self $bar) => Helper::formatMemory(memory_get_usage(true)), 'memory' => function (self $bar) {
'current' => fn (self $bar) => str_pad($bar->getProgress(), $bar->getStepWidth(), ' ', \STR_PAD_LEFT), return Helper::formatMemory(memory_get_usage(true));
'max' => fn (self $bar) => $bar->getMaxSteps(), },
'percent' => fn (self $bar) => floor($bar->getProgressPercent() * 100), 'current' => function (self $bar) {
return str_pad($bar->getProgress(), $bar->getStepWidth(), ' ', \STR_PAD_LEFT);
},
'max' => function (self $bar) {
return $bar->getMaxSteps();
},
'percent' => function (self $bar) {
return floor($bar->getProgressPercent() * 100);
},
]; ];
} }
@ -579,7 +568,7 @@ final class ProgressBar
$regex = "{%([a-z\-_]+)(?:\:([^%]+))?%}i"; $regex = "{%([a-z\-_]+)(?:\:([^%]+))?%}i";
$callback = function ($matches) { $callback = function ($matches) {
if ($formatter = $this->getPlaceholderFormatter($matches[1])) { if ($formatter = $this::getPlaceholderFormatterDefinition($matches[1])) {
$text = $formatter($this, $this->output); $text = $formatter($this, $this->output);
} elseif (isset($this->messages[$matches[1]])) { } elseif (isset($this->messages[$matches[1]])) {
$text = $this->messages[$matches[1]]; $text = $this->messages[$matches[1]];
@ -596,7 +585,9 @@ final class ProgressBar
$line = preg_replace_callback($regex, $callback, $this->format); $line = preg_replace_callback($regex, $callback, $this->format);
// gets string length for each sub line with multiline format // gets string length for each sub line with multiline format
$linesLength = array_map(fn ($subLine) => Helper::width(Helper::removeDecoration($this->output->getFormatter(), rtrim($subLine, "\r"))), explode("\n", $line)); $linesLength = array_map(function ($subLine) {
return Helper::width(Helper::removeDecoration($this->output->getFormatter(), rtrim($subLine, "\r")));
}, explode("\n", $line));
$linesWidth = max($linesLength); $linesWidth = max($linesLength);

View File

@ -31,7 +31,7 @@ class ProgressIndicator
'very_verbose_no_ansi' => ' %message% (%elapsed:6s%, %memory:6s%)', 'very_verbose_no_ansi' => ' %message% (%elapsed:6s%, %memory:6s%)',
]; ];
private OutputInterface $output; private $output;
private int $startTime; private int $startTime;
private ?string $format = null; private ?string $format = null;
private ?string $message = null; private ?string $message = null;
@ -54,8 +54,14 @@ class ProgressIndicator
{ {
$this->output = $output; $this->output = $output;
$format ??= $this->determineBestFormat(); if (null === $format) {
$indicatorValues ??= ['-', '\\', '|', '/']; $format = $this->determineBestFormat();
}
if (null === $indicatorValues) {
$indicatorValues = ['-', '\\', '|', '/'];
}
$indicatorValues = array_values($indicatorValues); $indicatorValues = array_values($indicatorValues);
if (2 > \count($indicatorValues)) { if (2 > \count($indicatorValues)) {
@ -70,8 +76,6 @@ class ProgressIndicator
/** /**
* Sets the current indicator message. * Sets the current indicator message.
*
* @return void
*/ */
public function setMessage(?string $message) public function setMessage(?string $message)
{ {
@ -82,8 +86,6 @@ class ProgressIndicator
/** /**
* Starts the indicator output. * Starts the indicator output.
*
* @return void
*/ */
public function start(string $message) public function start(string $message)
{ {
@ -102,8 +104,6 @@ class ProgressIndicator
/** /**
* Advances the indicator. * Advances the indicator.
*
* @return void
*/ */
public function advance() public function advance()
{ {
@ -130,7 +130,7 @@ class ProgressIndicator
/** /**
* Finish the indicator with message. * Finish the indicator with message.
* *
* @return void * @param $message
*/ */
public function finish(string $message) public function finish(string $message)
{ {
@ -156,8 +156,6 @@ class ProgressIndicator
* Sets a placeholder formatter for a given name. * Sets a placeholder formatter for a given name.
* *
* This method also allow you to override an existing placeholder. * This method also allow you to override an existing placeholder.
*
* @return void
*/ */
public static function setPlaceholderFormatterDefinition(string $name, callable $callable) public static function setPlaceholderFormatterDefinition(string $name, callable $callable)
{ {
@ -176,7 +174,7 @@ class ProgressIndicator
return self::$formatters[$name] ?? null; return self::$formatters[$name] ?? null;
} }
private function display(): void private function display()
{ {
if (OutputInterface::VERBOSITY_QUIET === $this->output->getVerbosity()) { if (OutputInterface::VERBOSITY_QUIET === $this->output->getVerbosity()) {
return; return;
@ -193,19 +191,22 @@ class ProgressIndicator
private function determineBestFormat(): string private function determineBestFormat(): string
{ {
return match ($this->output->getVerbosity()) { switch ($this->output->getVerbosity()) {
// OutputInterface::VERBOSITY_QUIET: display is disabled anyway // OutputInterface::VERBOSITY_QUIET: display is disabled anyway
OutputInterface::VERBOSITY_VERBOSE => $this->output->isDecorated() ? 'verbose' : 'verbose_no_ansi', case OutputInterface::VERBOSITY_VERBOSE:
OutputInterface::VERBOSITY_VERY_VERBOSE, return $this->output->isDecorated() ? 'verbose' : 'verbose_no_ansi';
OutputInterface::VERBOSITY_DEBUG => $this->output->isDecorated() ? 'very_verbose' : 'very_verbose_no_ansi', case OutputInterface::VERBOSITY_VERY_VERBOSE:
default => $this->output->isDecorated() ? 'normal' : 'normal_no_ansi', case OutputInterface::VERBOSITY_DEBUG:
}; return $this->output->isDecorated() ? 'very_verbose' : 'very_verbose_no_ansi';
default:
return $this->output->isDecorated() ? 'normal' : 'normal_no_ansi';
}
} }
/** /**
* Overwrites a previous message to the output. * Overwrites a previous message to the output.
*/ */
private function overwrite(string $message): void private function overwrite(string $message)
{ {
if ($this->output->isDecorated()) { if ($this->output->isDecorated()) {
$this->output->write("\x0D\x1B[2K"); $this->output->write("\x0D\x1B[2K");
@ -226,10 +227,18 @@ class ProgressIndicator
private static function initPlaceholderFormatters(): array private static function initPlaceholderFormatters(): array
{ {
return [ return [
'indicator' => fn (self $indicator) => $indicator->indicatorValues[$indicator->indicatorCurrent % \count($indicator->indicatorValues)], 'indicator' => function (self $indicator) {
'message' => fn (self $indicator) => $indicator->message, return $indicator->indicatorValues[$indicator->indicatorCurrent % \count($indicator->indicatorValues)];
'elapsed' => fn (self $indicator) => Helper::formatTime(time() - $indicator->startTime), },
'memory' => fn () => Helper::formatMemory(memory_get_usage(true)), 'message' => function (self $indicator) {
return $indicator->message;
},
'elapsed' => function (self $indicator) {
return Helper::formatTime(time() - $indicator->startTime);
},
'memory' => function () {
return Helper::formatMemory(memory_get_usage(true));
},
]; ];
} }
} }

View File

@ -68,7 +68,9 @@ class QuestionHelper extends Helper
return $this->doAsk($output, $question); return $this->doAsk($output, $question);
} }
$interviewer = fn () => $this->doAsk($output, $question); $interviewer = function () use ($output, $question) {
return $this->doAsk($output, $question);
};
return $this->validateAttempts($interviewer, $output, $question); return $this->validateAttempts($interviewer, $output, $question);
} catch (MissingInputException $exception) { } catch (MissingInputException $exception) {
@ -82,6 +84,9 @@ class QuestionHelper extends Helper
} }
} }
/**
* {@inheritdoc}
*/
public function getName(): string public function getName(): string
{ {
return 'question'; return 'question';
@ -89,8 +94,6 @@ class QuestionHelper extends Helper
/** /**
* Prevents usage of stty. * Prevents usage of stty.
*
* @return void
*/ */
public static function disableStty() public static function disableStty()
{ {
@ -123,18 +126,7 @@ class QuestionHelper extends Helper
} }
if (false === $ret) { if (false === $ret) {
$isBlocked = stream_get_meta_data($inputStream)['blocked'] ?? true;
if (!$isBlocked) {
stream_set_blocking($inputStream, true);
}
$ret = $this->readInput($inputStream, $question); $ret = $this->readInput($inputStream, $question);
if (!$isBlocked) {
stream_set_blocking($inputStream, false);
}
if (false === $ret) { if (false === $ret) {
throw new MissingInputException('Aborted.'); throw new MissingInputException('Aborted.');
} }
@ -148,7 +140,6 @@ class QuestionHelper extends Helper
} }
if ($output instanceof ConsoleSectionOutput) { if ($output instanceof ConsoleSectionOutput) {
$output->addContent(''); // add EOL to the question
$output->addContent($ret); $output->addContent($ret);
} }
@ -170,7 +161,7 @@ class QuestionHelper extends Helper
} }
if ($validator = $question->getValidator()) { if ($validator = $question->getValidator()) {
return \call_user_func($validator, $default); return \call_user_func($question->getValidator(), $default);
} elseif ($question instanceof ChoiceQuestion) { } elseif ($question instanceof ChoiceQuestion) {
$choices = $question->getChoices(); $choices = $question->getChoices();
@ -190,8 +181,6 @@ class QuestionHelper extends Helper
/** /**
* Outputs the question prompt. * Outputs the question prompt.
*
* @return void
*/ */
protected function writePrompt(OutputInterface $output, Question $question) protected function writePrompt(OutputInterface $output, Question $question)
{ {
@ -228,8 +217,6 @@ class QuestionHelper extends Helper
/** /**
* Outputs an error message. * Outputs an error message.
*
* @return void
*/ */
protected function writeError(OutputInterface $output, \Exception $error) protected function writeError(OutputInterface $output, \Exception $error)
{ {
@ -329,7 +316,9 @@ class QuestionHelper extends Helper
$matches = array_filter( $matches = array_filter(
$autocomplete($ret), $autocomplete($ret),
fn ($match) => '' === $ret || str_starts_with($match, $ret) function ($match) use ($ret) {
return '' === $ret || str_starts_with($match, $ret);
}
); );
$numMatches = \count($matches); $numMatches = \count($matches);
$ofs = -1; $ofs = -1;
@ -417,7 +406,7 @@ class QuestionHelper extends Helper
$exe = __DIR__.'/../Resources/bin/hiddeninput.exe'; $exe = __DIR__.'/../Resources/bin/hiddeninput.exe';
// handle code running from a phar // handle code running from a phar
if (str_starts_with(__FILE__, 'phar:')) { if ('phar:' === substr(__FILE__, 0, 5)) {
$tmpExe = sys_get_temp_dir().'/hiddeninput.exe'; $tmpExe = sys_get_temp_dir().'/hiddeninput.exe';
copy($exe, $tmpExe); copy($exe, $tmpExe);
$exe = $tmpExe; $exe = $tmpExe;
@ -443,11 +432,6 @@ class QuestionHelper extends Helper
$value = fgets($inputStream, 4096); $value = fgets($inputStream, 4096);
if (4095 === \strlen($value)) {
$errOutput = $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output;
$errOutput->warning('The value was possibly truncated by your shell or terminal emulator');
}
if (self::$stty && Terminal::hasSttyAvailable()) { if (self::$stty && Terminal::hasSttyAvailable()) {
shell_exec('stty '.$sttyMode); shell_exec('stty '.$sttyMode);
} }
@ -509,11 +493,13 @@ class QuestionHelper extends Helper
return self::$stdinIsInteractive = @posix_isatty(fopen('php://stdin', 'r')); return self::$stdinIsInteractive = @posix_isatty(fopen('php://stdin', 'r'));
} }
if (!\function_exists('shell_exec')) { if (!\function_exists('exec')) {
return self::$stdinIsInteractive = true; return self::$stdinIsInteractive = true;
} }
return self::$stdinIsInteractive = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null')); exec('stty 2> /dev/null', $output, $status);
return self::$stdinIsInteractive = 1 !== $status;
} }
/** /**

View File

@ -26,7 +26,7 @@ use Symfony\Component\Console\Style\SymfonyStyle;
class SymfonyQuestionHelper extends QuestionHelper class SymfonyQuestionHelper extends QuestionHelper
{ {
/** /**
* @return void * {@inheritdoc}
*/ */
protected function writePrompt(OutputInterface $output, Question $question) protected function writePrompt(OutputInterface $output, Question $question)
{ {
@ -84,7 +84,7 @@ class SymfonyQuestionHelper extends QuestionHelper
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function writeError(OutputInterface $output, \Exception $error) protected function writeError(OutputInterface $output, \Exception $error)
{ {

View File

@ -35,23 +35,20 @@ class Table
private const SEPARATOR_BOTTOM = 3; private const SEPARATOR_BOTTOM = 3;
private const BORDER_OUTSIDE = 0; private const BORDER_OUTSIDE = 0;
private const BORDER_INSIDE = 1; private const BORDER_INSIDE = 1;
private const DISPLAY_ORIENTATION_DEFAULT = 'default';
private const DISPLAY_ORIENTATION_HORIZONTAL = 'horizontal';
private const DISPLAY_ORIENTATION_VERTICAL = 'vertical';
private ?string $headerTitle = null; private ?string $headerTitle = null;
private ?string $footerTitle = null; private ?string $footerTitle = null;
private array $headers = []; private array $headers = [];
private array $rows = []; private array $rows = [];
private bool $horizontal = false;
private array $effectiveColumnWidths = []; private array $effectiveColumnWidths = [];
private int $numberOfColumns; private int $numberOfColumns;
private OutputInterface $output; private $output;
private TableStyle $style; private $style;
private array $columnStyles = []; private array $columnStyles = [];
private array $columnWidths = []; private array $columnWidths = [];
private array $columnMaxWidths = []; private array $columnMaxWidths = [];
private bool $rendered = false; private bool $rendered = false;
private string $displayOrientation = self::DISPLAY_ORIENTATION_DEFAULT;
private static array $styles; private static array $styles;
@ -66,8 +63,6 @@ class Table
/** /**
* Sets a style definition. * Sets a style definition.
*
* @return void
*/ */
public static function setStyleDefinition(string $name, TableStyle $style) public static function setStyleDefinition(string $name, TableStyle $style)
{ {
@ -182,7 +177,7 @@ class Table
public function setHeaders(array $headers): static public function setHeaders(array $headers): static
{ {
$headers = array_values($headers); $headers = array_values($headers);
if ($headers && !\is_array($headers[0])) { if (!empty($headers) && !\is_array($headers[0])) {
$headers = [$headers]; $headers = [$headers];
} }
@ -191,9 +186,6 @@ class Table
return $this; return $this;
} }
/**
* @return $this
*/
public function setRows(array $rows) public function setRows(array $rows)
{ {
$this->rows = []; $this->rows = [];
@ -285,17 +277,7 @@ class Table
*/ */
public function setHorizontal(bool $horizontal = true): static public function setHorizontal(bool $horizontal = true): static
{ {
$this->displayOrientation = $horizontal ? self::DISPLAY_ORIENTATION_HORIZONTAL : self::DISPLAY_ORIENTATION_DEFAULT; $this->horizontal = $horizontal;
return $this;
}
/**
* @return $this
*/
public function setVertical(bool $vertical = true): static
{
$this->displayOrientation = $vertical ? self::DISPLAY_ORIENTATION_VERTICAL : self::DISPLAY_ORIENTATION_DEFAULT;
return $this; return $this;
} }
@ -312,19 +294,12 @@ class Table
* | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
* | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien | * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
* +---------------+-----------------------+------------------+ * +---------------+-----------------------+------------------+
*
* @return void
*/ */
public function render() public function render()
{ {
$divider = new TableSeparator(); $divider = new TableSeparator();
$isCellWithColspan = static fn ($cell) => $cell instanceof TableCell && $cell->getColspan() >= 2; if ($this->horizontal) {
$horizontal = self::DISPLAY_ORIENTATION_HORIZONTAL === $this->displayOrientation;
$vertical = self::DISPLAY_ORIENTATION_VERTICAL === $this->displayOrientation;
$rows = []; $rows = [];
if ($horizontal) {
foreach ($this->headers[0] ?? [] as $i => $header) { foreach ($this->headers[0] ?? [] as $i => $header) {
$rows[$i] = [$header]; $rows[$i] = [$header];
foreach ($this->rows as $row) { foreach ($this->rows as $row) {
@ -333,48 +308,13 @@ class Table
} }
if (isset($row[$i])) { if (isset($row[$i])) {
$rows[$i][] = $row[$i]; $rows[$i][] = $row[$i];
} elseif ($isCellWithColspan($rows[$i][0])) { } elseif ($rows[$i][0] instanceof TableCell && $rows[$i][0]->getColspan() >= 2) {
// Noop, there is a "title" // Noop, there is a "title"
} else { } else {
$rows[$i][] = null; $rows[$i][] = null;
} }
} }
} }
} elseif ($vertical) {
$formatter = $this->output->getFormatter();
$maxHeaderLength = array_reduce($this->headers[0] ?? [], static fn ($max, $header) => max($max, Helper::width(Helper::removeDecoration($formatter, $header))), 0);
foreach ($this->rows as $row) {
if ($row instanceof TableSeparator) {
continue;
}
if ($rows) {
$rows[] = [$divider];
}
$containsColspan = false;
foreach ($row as $cell) {
if ($containsColspan = $isCellWithColspan($cell)) {
break;
}
}
$headers = $this->headers[0] ?? [];
$maxRows = max(\count($headers), \count($row));
for ($i = 0; $i < $maxRows; ++$i) {
$cell = (string) ($row[$i] ?? '');
if ($headers && !$containsColspan) {
$rows[] = [sprintf(
'<comment>%s</>: %s',
str_pad($headers[$i] ?? '', $maxHeaderLength, ' ', \STR_PAD_LEFT),
$cell
)];
} elseif ('' !== $cell) {
$rows[] = [$cell];
}
}
}
} else { } else {
$rows = array_merge($this->headers, [$divider], $this->rows); $rows = array_merge($this->headers, [$divider], $this->rows);
} }
@ -384,8 +324,8 @@ class Table
$rowGroups = $this->buildTableRows($rows); $rowGroups = $this->buildTableRows($rows);
$this->calculateColumnsWidth($rowGroups); $this->calculateColumnsWidth($rowGroups);
$isHeader = !$horizontal; $isHeader = !$this->horizontal;
$isFirstRow = $horizontal; $isFirstRow = $this->horizontal;
$hasTitle = (bool) $this->headerTitle; $hasTitle = (bool) $this->headerTitle;
foreach ($rowGroups as $rowGroup) { foreach ($rowGroups as $rowGroup) {
@ -429,12 +369,7 @@ class Table
$hasTitle = false; $hasTitle = false;
} }
if ($vertical) { if ($this->horizontal) {
$isHeader = false;
$isFirstRow = false;
}
if ($horizontal) {
$this->renderRow($row, $this->style->getCellRowFormat(), $this->style->getCellHeaderFormat()); $this->renderRow($row, $this->style->getCellRowFormat(), $this->style->getCellHeaderFormat());
} else { } else {
$this->renderRow($row, $isHeader ? $this->style->getCellHeaderFormat() : $this->style->getCellRowFormat()); $this->renderRow($row, $isHeader ? $this->style->getCellHeaderFormat() : $this->style->getCellRowFormat());
@ -454,9 +389,9 @@ class Table
* *
* +-----+-----------+-------+ * +-----+-----------+-------+
*/ */
private function renderRowSeparator(int $type = self::SEPARATOR_MID, string $title = null, string $titleFormat = null): void private function renderRowSeparator(int $type = self::SEPARATOR_MID, string $title = null, string $titleFormat = null)
{ {
if (!$count = $this->numberOfColumns) { if (0 === $count = $this->numberOfColumns) {
return; return;
} }
@ -519,7 +454,7 @@ class Table
* *
* | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
*/ */
private function renderRow(array $row, string $cellFormat, string $firstCellFormat = null): void private function renderRow(array $row, string $cellFormat, string $firstCellFormat = null)
{ {
$rowContent = $this->renderColumnSeparator(self::BORDER_OUTSIDE); $rowContent = $this->renderColumnSeparator(self::BORDER_OUTSIDE);
$columns = $this->getRowColumns($row); $columns = $this->getRowColumns($row);
@ -573,11 +508,11 @@ class Table
$cellFormat = '<'.$tag.'>%s</>'; $cellFormat = '<'.$tag.'>%s</>';
} }
if (str_contains($content, '</>')) { if (strstr($content, '</>')) {
$content = str_replace('</>', '', $content); $content = str_replace('</>', '', $content);
$width -= 3; $width -= 3;
} }
if (str_contains($content, '<fg=default;bg=default>')) { if (strstr($content, '<fg=default;bg=default>')) {
$content = str_replace('<fg=default;bg=default>', '', $content); $content = str_replace('<fg=default;bg=default>', '', $content);
$width -= \strlen('<fg=default;bg=default>'); $width -= \strlen('<fg=default;bg=default>');
} }
@ -592,7 +527,7 @@ class Table
/** /**
* Calculate number of columns for this table. * Calculate number of columns for this table.
*/ */
private function calculateNumberOfColumns(array $rows): void private function calculateNumberOfColumns(array $rows)
{ {
$columns = [0]; $columns = [0];
foreach ($rows as $row) { foreach ($rows as $row) {
@ -621,10 +556,10 @@ class Table
if (isset($this->columnMaxWidths[$column]) && Helper::width(Helper::removeDecoration($formatter, $cell)) > $this->columnMaxWidths[$column]) { if (isset($this->columnMaxWidths[$column]) && Helper::width(Helper::removeDecoration($formatter, $cell)) > $this->columnMaxWidths[$column]) {
$cell = $formatter->formatAndWrap($cell, $this->columnMaxWidths[$column] * $colspan); $cell = $formatter->formatAndWrap($cell, $this->columnMaxWidths[$column] * $colspan);
} }
if (!str_contains($cell ?? '', "\n")) { if (!strstr($cell ?? '', "\n")) {
continue; continue;
} }
$escaped = implode("\n", array_map(OutputFormatter::escapeTrailingBackslash(...), explode("\n", $cell))); $escaped = implode("\n", array_map([OutputFormatter::class, 'escapeTrailingBackslash'], explode("\n", $cell)));
$cell = $cell instanceof TableCell ? new TableCell($escaped, ['colspan' => $cell->getColspan()]) : $escaped; $cell = $cell instanceof TableCell ? new TableCell($escaped, ['colspan' => $cell->getColspan()]) : $escaped;
$lines = explode("\n", str_replace("\n", "<fg=default;bg=default></>\n", $cell)); $lines = explode("\n", str_replace("\n", "<fg=default;bg=default></>\n", $cell));
foreach ($lines as $lineKey => $line) { foreach ($lines as $lineKey => $line) {
@ -665,7 +600,7 @@ class Table
++$numberOfRows; // Add row for header separator ++$numberOfRows; // Add row for header separator
} }
if ($this->rows) { if (\count($this->rows) > 0) {
++$numberOfRows; // Add row for footer separator ++$numberOfRows; // Add row for footer separator
} }
@ -687,7 +622,7 @@ class Table
if ($cell instanceof TableCell && $cell->getRowspan() > 1) { if ($cell instanceof TableCell && $cell->getRowspan() > 1) {
$nbLines = $cell->getRowspan() - 1; $nbLines = $cell->getRowspan() - 1;
$lines = [$cell]; $lines = [$cell];
if (str_contains($cell, "\n")) { if (strstr($cell, "\n")) {
$lines = explode("\n", str_replace("\n", "<fg=default;bg=default>\n</>", $cell)); $lines = explode("\n", str_replace("\n", "<fg=default;bg=default>\n</>", $cell));
$nbLines = \count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines; $nbLines = \count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines;
@ -731,7 +666,7 @@ class Table
/** /**
* fill cells for a row that contains colspan > 1. * fill cells for a row that contains colspan > 1.
*/ */
private function fillCells(iterable $row): iterable private function fillCells(iterable $row)
{ {
$newRow = []; $newRow = [];
@ -793,7 +728,7 @@ class Table
/** /**
* Calculates columns widths. * Calculates columns widths.
*/ */
private function calculateColumnsWidth(iterable $groups): void private function calculateColumnsWidth(iterable $groups)
{ {
for ($column = 0; $column < $this->numberOfColumns; ++$column) { for ($column = 0; $column < $this->numberOfColumns; ++$column) {
$lengths = []; $lengths = [];
@ -808,7 +743,7 @@ class Table
$textContent = Helper::removeDecoration($this->output->getFormatter(), $cell); $textContent = Helper::removeDecoration($this->output->getFormatter(), $cell);
$textLength = Helper::width($textContent); $textLength = Helper::width($textContent);
if ($textLength > 0) { if ($textLength > 0) {
$contentColumns = mb_str_split($textContent, ceil($textLength / $cell->getColspan())); $contentColumns = str_split($textContent, ceil($textLength / $cell->getColspan()));
foreach ($contentColumns as $position => $content) { foreach ($contentColumns as $position => $content) {
$row[$i + $position] = $content; $row[$i + $position] = $content;
} }
@ -847,7 +782,7 @@ class Table
/** /**
* Called after rendering to cleanup cache data. * Called after rendering to cleanup cache data.
*/ */
private function cleanup(): void private function cleanup()
{ {
$this->effectiveColumnWidths = []; $this->effectiveColumnWidths = [];
unset($this->numberOfColumns); unset($this->numberOfColumns);

View File

@ -67,7 +67,9 @@ class TableCellStyle
{ {
return array_filter( return array_filter(
$this->getOptions(), $this->getOptions(),
fn ($key) => \in_array($key, self::TAG_OPTIONS) && isset($this->options[$key]), function ($key) {
return \in_array($key, self::TAG_OPTIONS) && isset($this->options[$key]);
},
\ARRAY_FILTER_USE_KEY \ARRAY_FILTER_USE_KEY
); );
} }

View File

@ -45,7 +45,7 @@ class ArgvInput extends Input
public function __construct(array $argv = null, InputDefinition $definition = null) public function __construct(array $argv = null, InputDefinition $definition = null)
{ {
$argv ??= $_SERVER['argv'] ?? []; $argv = $argv ?? $_SERVER['argv'] ?? [];
// strip the application name // strip the application name
array_shift($argv); array_shift($argv);
@ -55,16 +55,13 @@ class ArgvInput extends Input
parent::__construct($definition); parent::__construct($definition);
} }
/**
* @return void
*/
protected function setTokens(array $tokens) protected function setTokens(array $tokens)
{ {
$this->tokens = $tokens; $this->tokens = $tokens;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function parse() protected function parse()
{ {
@ -95,7 +92,7 @@ class ArgvInput extends Input
/** /**
* Parses a short option. * Parses a short option.
*/ */
private function parseShortOption(string $token): void private function parseShortOption(string $token)
{ {
$name = substr($token, 1); $name = substr($token, 1);
@ -116,7 +113,7 @@ class ArgvInput extends Input
* *
* @throws RuntimeException When option given doesn't exist * @throws RuntimeException When option given doesn't exist
*/ */
private function parseShortOptionSet(string $name): void private function parseShortOptionSet(string $name)
{ {
$len = \strlen($name); $len = \strlen($name);
for ($i = 0; $i < $len; ++$i) { for ($i = 0; $i < $len; ++$i) {
@ -139,7 +136,7 @@ class ArgvInput extends Input
/** /**
* Parses a long option. * Parses a long option.
*/ */
private function parseLongOption(string $token): void private function parseLongOption(string $token)
{ {
$name = substr($token, 2); $name = substr($token, 2);
@ -158,7 +155,7 @@ class ArgvInput extends Input
* *
* @throws RuntimeException When too many arguments are given * @throws RuntimeException When too many arguments are given
*/ */
private function parseArgument(string $token): void private function parseArgument(string $token)
{ {
$c = \count($this->arguments); $c = \count($this->arguments);
@ -202,7 +199,7 @@ class ArgvInput extends Input
* *
* @throws RuntimeException When option given doesn't exist * @throws RuntimeException When option given doesn't exist
*/ */
private function addShortOption(string $shortcut, mixed $value): void private function addShortOption(string $shortcut, mixed $value)
{ {
if (!$this->definition->hasShortcut($shortcut)) { if (!$this->definition->hasShortcut($shortcut)) {
throw new RuntimeException(sprintf('The "-%s" option does not exist.', $shortcut)); throw new RuntimeException(sprintf('The "-%s" option does not exist.', $shortcut));
@ -216,7 +213,7 @@ class ArgvInput extends Input
* *
* @throws RuntimeException When option given doesn't exist * @throws RuntimeException When option given doesn't exist
*/ */
private function addLongOption(string $name, mixed $value): void private function addLongOption(string $name, mixed $value)
{ {
if (!$this->definition->hasOption($name)) { if (!$this->definition->hasOption($name)) {
if (!$this->definition->hasNegation($name)) { if (!$this->definition->hasNegation($name)) {
@ -266,6 +263,9 @@ class ArgvInput extends Input
} }
} }
/**
* {@inheritdoc}
*/
public function getFirstArgument(): ?string public function getFirstArgument(): ?string
{ {
$isOption = false; $isOption = false;
@ -298,6 +298,9 @@ class ArgvInput extends Input
return null; return null;
} }
/**
* {@inheritdoc}
*/
public function hasParameterOption(string|array $values, bool $onlyParams = false): bool public function hasParameterOption(string|array $values, bool $onlyParams = false): bool
{ {
$values = (array) $values; $values = (array) $values;
@ -320,6 +323,9 @@ class ArgvInput extends Input
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function getParameterOption(string|array $values, string|bool|int|float|array|null $default = false, bool $onlyParams = false): mixed public function getParameterOption(string|array $values, string|bool|int|float|array|null $default = false, bool $onlyParams = false): mixed
{ {
$values = (array) $values; $values = (array) $values;

View File

@ -34,6 +34,9 @@ class ArrayInput extends Input
parent::__construct($definition); parent::__construct($definition);
} }
/**
* {@inheritdoc}
*/
public function getFirstArgument(): ?string public function getFirstArgument(): ?string
{ {
foreach ($this->parameters as $param => $value) { foreach ($this->parameters as $param => $value) {
@ -47,6 +50,9 @@ class ArrayInput extends Input
return null; return null;
} }
/**
* {@inheritdoc}
*/
public function hasParameterOption(string|array $values, bool $onlyParams = false): bool public function hasParameterOption(string|array $values, bool $onlyParams = false): bool
{ {
$values = (array) $values; $values = (array) $values;
@ -68,6 +74,9 @@ class ArrayInput extends Input
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function getParameterOption(string|array $values, string|bool|int|float|array|null $default = false, bool $onlyParams = false): mixed public function getParameterOption(string|array $values, string|bool|int|float|array|null $default = false, bool $onlyParams = false): mixed
{ {
$values = (array) $values; $values = (array) $values;
@ -106,7 +115,7 @@ class ArrayInput extends Input
$params[] = $param.('' != $val ? $glue.$this->escapeToken($val) : ''); $params[] = $param.('' != $val ? $glue.$this->escapeToken($val) : '');
} }
} else { } else {
$params[] = \is_array($val) ? implode(' ', array_map($this->escapeToken(...), $val)) : $this->escapeToken($val); $params[] = \is_array($val) ? implode(' ', array_map([$this, 'escapeToken'], $val)) : $this->escapeToken($val);
} }
} }
@ -114,7 +123,7 @@ class ArrayInput extends Input
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function parse() protected function parse()
{ {
@ -137,7 +146,7 @@ class ArrayInput extends Input
* *
* @throws InvalidOptionException When option given doesn't exist * @throws InvalidOptionException When option given doesn't exist
*/ */
private function addShortOption(string $shortcut, mixed $value): void private function addShortOption(string $shortcut, mixed $value)
{ {
if (!$this->definition->hasShortcut($shortcut)) { if (!$this->definition->hasShortcut($shortcut)) {
throw new InvalidOptionException(sprintf('The "-%s" option does not exist.', $shortcut)); throw new InvalidOptionException(sprintf('The "-%s" option does not exist.', $shortcut));
@ -152,7 +161,7 @@ class ArrayInput extends Input
* @throws InvalidOptionException When option given doesn't exist * @throws InvalidOptionException When option given doesn't exist
* @throws InvalidOptionException When a required value is missing * @throws InvalidOptionException When a required value is missing
*/ */
private function addLongOption(string $name, mixed $value): void private function addLongOption(string $name, mixed $value)
{ {
if (!$this->definition->hasOption($name)) { if (!$this->definition->hasOption($name)) {
if (!$this->definition->hasNegation($name)) { if (!$this->definition->hasNegation($name)) {
@ -185,7 +194,7 @@ class ArrayInput extends Input
* *
* @throws InvalidArgumentException When argument given doesn't exist * @throws InvalidArgumentException When argument given doesn't exist
*/ */
private function addArgument(string|int $name, mixed $value): void private function addArgument(string|int $name, mixed $value)
{ {
if (!$this->definition->hasArgument($name)) { if (!$this->definition->hasArgument($name)) {
throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name));

View File

@ -44,7 +44,7 @@ abstract class Input implements InputInterface, StreamableInputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function bind(InputDefinition $definition) public function bind(InputDefinition $definition)
{ {
@ -57,44 +57,53 @@ abstract class Input implements InputInterface, StreamableInputInterface
/** /**
* Processes command line arguments. * Processes command line arguments.
*
* @return void
*/ */
abstract protected function parse(); abstract protected function parse();
/** /**
* @return void * {@inheritdoc}
*/ */
public function validate() public function validate()
{ {
$definition = $this->definition; $definition = $this->definition;
$givenArguments = $this->arguments; $givenArguments = $this->arguments;
$missingArguments = array_filter(array_keys($definition->getArguments()), fn ($argument) => !\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired()); $missingArguments = array_filter(array_keys($definition->getArguments()), function ($argument) use ($definition, $givenArguments) {
return !\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired();
});
if (\count($missingArguments) > 0) { if (\count($missingArguments) > 0) {
throw new RuntimeException(sprintf('Not enough arguments (missing: "%s").', implode(', ', $missingArguments))); throw new RuntimeException(sprintf('Not enough arguments (missing: "%s").', implode(', ', $missingArguments)));
} }
} }
/**
* {@inheritdoc}
*/
public function isInteractive(): bool public function isInteractive(): bool
{ {
return $this->interactive; return $this->interactive;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setInteractive(bool $interactive) public function setInteractive(bool $interactive)
{ {
$this->interactive = $interactive; $this->interactive = $interactive;
} }
/**
* {@inheritdoc}
*/
public function getArguments(): array public function getArguments(): array
{ {
return array_merge($this->definition->getArgumentDefaults(), $this->arguments); return array_merge($this->definition->getArgumentDefaults(), $this->arguments);
} }
/**
* {@inheritdoc}
*/
public function getArgument(string $name): mixed public function getArgument(string $name): mixed
{ {
if (!$this->definition->hasArgument($name)) { if (!$this->definition->hasArgument($name)) {
@ -105,7 +114,7 @@ abstract class Input implements InputInterface, StreamableInputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setArgument(string $name, mixed $value) public function setArgument(string $name, mixed $value)
{ {
@ -116,16 +125,25 @@ abstract class Input implements InputInterface, StreamableInputInterface
$this->arguments[$name] = $value; $this->arguments[$name] = $value;
} }
/**
* {@inheritdoc}
*/
public function hasArgument(string $name): bool public function hasArgument(string $name): bool
{ {
return $this->definition->hasArgument($name); return $this->definition->hasArgument($name);
} }
/**
* {@inheritdoc}
*/
public function getOptions(): array public function getOptions(): array
{ {
return array_merge($this->definition->getOptionDefaults(), $this->options); return array_merge($this->definition->getOptionDefaults(), $this->options);
} }
/**
* {@inheritdoc}
*/
public function getOption(string $name): mixed public function getOption(string $name): mixed
{ {
if ($this->definition->hasNegation($name)) { if ($this->definition->hasNegation($name)) {
@ -144,7 +162,7 @@ abstract class Input implements InputInterface, StreamableInputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setOption(string $name, mixed $value) public function setOption(string $name, mixed $value)
{ {
@ -159,6 +177,9 @@ abstract class Input implements InputInterface, StreamableInputInterface
$this->options[$name] = $value; $this->options[$name] = $value;
} }
/**
* {@inheritdoc}
*/
public function hasOption(string $name): bool public function hasOption(string $name): bool
{ {
return $this->definition->hasOption($name) || $this->definition->hasNegation($name); return $this->definition->hasOption($name) || $this->definition->hasNegation($name);
@ -173,9 +194,7 @@ abstract class Input implements InputInterface, StreamableInputInterface
} }
/** /**
* @param resource $stream * {@inheritdoc}
*
* @return void
*/ */
public function setStream($stream) public function setStream($stream)
{ {
@ -183,7 +202,7 @@ abstract class Input implements InputInterface, StreamableInputInterface
} }
/** /**
* @return resource * {@inheritdoc}
*/ */
public function getStream() public function getStream()
{ {

View File

@ -11,10 +11,6 @@
namespace Symfony\Component\Console\Input; namespace Symfony\Component\Console\Input;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Suggestion;
use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\LogicException;
@ -32,19 +28,17 @@ class InputArgument
private string $name; private string $name;
private int $mode; private int $mode;
private string|int|bool|array|null|float $default; private string|int|bool|array|null|float $default;
private array|\Closure $suggestedValues;
private string $description; private string $description;
/** /**
* @param string $name The argument name * @param string $name The argument name
* @param int|null $mode The argument mode: a bit mask of self::REQUIRED, self::OPTIONAL and self::IS_ARRAY * @param int|null $mode The argument mode: self::REQUIRED or self::OPTIONAL
* @param string $description A description text * @param string $description A description text
* @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only) * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only)
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
* *
* @throws InvalidArgumentException When argument mode is not valid * @throws InvalidArgumentException When argument mode is not valid
*/ */
public function __construct(string $name, int $mode = null, string $description = '', string|bool|int|float|array $default = null, \Closure|array $suggestedValues = []) public function __construct(string $name, int $mode = null, string $description = '', string|bool|int|float|array $default = null)
{ {
if (null === $mode) { if (null === $mode) {
$mode = self::OPTIONAL; $mode = self::OPTIONAL;
@ -55,7 +49,6 @@ class InputArgument
$this->name = $name; $this->name = $name;
$this->mode = $mode; $this->mode = $mode;
$this->description = $description; $this->description = $description;
$this->suggestedValues = $suggestedValues;
$this->setDefault($default); $this->setDefault($default);
} }
@ -91,15 +84,10 @@ class InputArgument
/** /**
* Sets the default value. * Sets the default value.
* *
* @return void
*
* @throws LogicException When incorrect default value is given * @throws LogicException When incorrect default value is given
*/ */
public function setDefault(string|bool|int|float|array $default = null) public function setDefault(string|bool|int|float|array $default = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
if ($this->isRequired() && null !== $default) { if ($this->isRequired() && null !== $default) {
throw new LogicException('Cannot set a default value except for InputArgument::OPTIONAL mode.'); throw new LogicException('Cannot set a default value except for InputArgument::OPTIONAL mode.');
} }
@ -123,27 +111,6 @@ class InputArgument
return $this->default; return $this->default;
} }
public function hasCompletion(): bool
{
return [] !== $this->suggestedValues;
}
/**
* Adds suggestions to $suggestions for the current completion input.
*
* @see Command::complete()
*/
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
$values = $this->suggestedValues;
if ($values instanceof \Closure && !\is_array($values = $values($input))) {
throw new LogicException(sprintf('Closure for argument "%s" must return an array. Got "%s".', $this->name, get_debug_type($values)));
}
if ($values) {
$suggestions->suggestValues($values);
}
}
/** /**
* Returns the description text. * Returns the description text.
*/ */

View File

@ -21,8 +21,6 @@ interface InputAwareInterface
{ {
/** /**
* Sets the Console Input. * Sets the Console Input.
*
* @return void
*/ */
public function setInput(InputInterface $input); public function setInput(InputInterface $input);
} }

View File

@ -30,8 +30,8 @@ class InputDefinition
{ {
private array $arguments = []; private array $arguments = [];
private int $requiredCount = 0; private int $requiredCount = 0;
private ?InputArgument $lastArrayArgument = null; private $lastArrayArgument = null;
private ?InputArgument $lastOptionalArgument = null; private $lastOptionalArgument = null;
private array $options = []; private array $options = [];
private array $negations = []; private array $negations = [];
private array $shortcuts = []; private array $shortcuts = [];
@ -46,8 +46,6 @@ class InputDefinition
/** /**
* Sets the definition of the input. * Sets the definition of the input.
*
* @return void
*/ */
public function setDefinition(array $definition) public function setDefinition(array $definition)
{ {
@ -69,8 +67,6 @@ class InputDefinition
* Sets the InputArgument objects. * Sets the InputArgument objects.
* *
* @param InputArgument[] $arguments An array of InputArgument objects * @param InputArgument[] $arguments An array of InputArgument objects
*
* @return void
*/ */
public function setArguments(array $arguments = []) public function setArguments(array $arguments = [])
{ {
@ -85,8 +81,6 @@ class InputDefinition
* Adds an array of InputArgument objects. * Adds an array of InputArgument objects.
* *
* @param InputArgument[] $arguments An array of InputArgument objects * @param InputArgument[] $arguments An array of InputArgument objects
*
* @return void
*/ */
public function addArguments(?array $arguments = []) public function addArguments(?array $arguments = [])
{ {
@ -98,8 +92,6 @@ class InputDefinition
} }
/** /**
* @return void
*
* @throws LogicException When incorrect argument is given * @throws LogicException When incorrect argument is given
*/ */
public function addArgument(InputArgument $argument) public function addArgument(InputArgument $argument)
@ -198,8 +190,6 @@ class InputDefinition
* Sets the InputOption objects. * Sets the InputOption objects.
* *
* @param InputOption[] $options An array of InputOption objects * @param InputOption[] $options An array of InputOption objects
*
* @return void
*/ */
public function setOptions(array $options = []) public function setOptions(array $options = [])
{ {
@ -213,8 +203,6 @@ class InputDefinition
* Adds an array of InputOption objects. * Adds an array of InputOption objects.
* *
* @param InputOption[] $options An array of InputOption objects * @param InputOption[] $options An array of InputOption objects
*
* @return void
*/ */
public function addOptions(array $options = []) public function addOptions(array $options = [])
{ {
@ -224,8 +212,6 @@ class InputDefinition
} }
/** /**
* @return void
*
* @throws LogicException When option given already exist * @throws LogicException When option given already exist
*/ */
public function addOption(InputOption $option) public function addOption(InputOption $option)

View File

@ -18,9 +18,6 @@ use Symfony\Component\Console\Exception\RuntimeException;
* InputInterface is the interface implemented by all input classes. * InputInterface is the interface implemented by all input classes.
* *
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
*
* @method string __toString() Returns a stringified representation of the args passed to the command.
* InputArguments MUST be escaped as well as the InputOption values passed to the command.
*/ */
interface InputInterface interface InputInterface
{ {
@ -61,8 +58,6 @@ interface InputInterface
/** /**
* Binds the current Input instance with the given arguments and options. * Binds the current Input instance with the given arguments and options.
* *
* @return void
*
* @throws RuntimeException * @throws RuntimeException
*/ */
public function bind(InputDefinition $definition); public function bind(InputDefinition $definition);
@ -70,8 +65,6 @@ interface InputInterface
/** /**
* Validates the input. * Validates the input.
* *
* @return void
*
* @throws RuntimeException When not enough arguments are given * @throws RuntimeException When not enough arguments are given
*/ */
public function validate(); public function validate();
@ -95,8 +88,6 @@ interface InputInterface
/** /**
* Sets an argument value by name. * Sets an argument value by name.
* *
* @return void
*
* @throws InvalidArgumentException When argument given doesn't exist * @throws InvalidArgumentException When argument given doesn't exist
*/ */
public function setArgument(string $name, mixed $value); public function setArgument(string $name, mixed $value);
@ -125,8 +116,6 @@ interface InputInterface
/** /**
* Sets an option value by name. * Sets an option value by name.
* *
* @return void
*
* @throws InvalidArgumentException When option given doesn't exist * @throws InvalidArgumentException When option given doesn't exist
*/ */
public function setOption(string $name, mixed $value); public function setOption(string $name, mixed $value);
@ -143,8 +132,6 @@ interface InputInterface
/** /**
* Sets the input interactivity. * Sets the input interactivity.
*
* @return void
*/ */
public function setInteractive(bool $interactive); public function setInteractive(bool $interactive);
} }

View File

@ -11,10 +11,6 @@
namespace Symfony\Component\Console\Input; namespace Symfony\Component\Console\Input;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Completion\CompletionInput;
use Symfony\Component\Console\Completion\CompletionSuggestions;
use Symfony\Component\Console\Completion\Suggestion;
use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\LogicException;
@ -54,18 +50,16 @@ class InputOption
private string|array|null $shortcut; private string|array|null $shortcut;
private int $mode; private int $mode;
private string|int|bool|array|null|float $default; private string|int|bool|array|null|float $default;
private array|\Closure $suggestedValues;
private string $description; private string $description;
/** /**
* @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
* @param int|null $mode The option mode: One of the VALUE_* constants * @param int|null $mode The option mode: One of the VALUE_* constants
* @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE) * @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE)
* @param array|\Closure(CompletionInput,CompletionSuggestions):list<string|Suggestion> $suggestedValues The values used for input completion
* *
* @throws InvalidArgumentException If option mode is invalid or incompatible * @throws InvalidArgumentException If option mode is invalid or incompatible
*/ */
public function __construct(string $name, string|array $shortcut = null, int $mode = null, string $description = '', string|bool|int|float|array $default = null, array|\Closure $suggestedValues = []) public function __construct(string $name, string|array $shortcut = null, int $mode = null, string $description = '', string|bool|int|float|array $default = null)
{ {
if (str_starts_with($name, '--')) { if (str_starts_with($name, '--')) {
$name = substr($name, 2); $name = substr($name, 2);
@ -102,11 +96,7 @@ class InputOption
$this->shortcut = $shortcut; $this->shortcut = $shortcut;
$this->mode = $mode; $this->mode = $mode;
$this->description = $description; $this->description = $description;
$this->suggestedValues = $suggestedValues;
if ($suggestedValues && !$this->acceptValue()) {
throw new LogicException('Cannot set suggested values if the option does not accept a value.');
}
if ($this->isArray() && !$this->acceptValue()) { if ($this->isArray() && !$this->acceptValue()) {
throw new InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.'); throw new InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.');
} }
@ -178,14 +168,8 @@ class InputOption
return self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode); return self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode);
} }
/**
* @return void
*/
public function setDefault(string|bool|int|float|array $default = null) public function setDefault(string|bool|int|float|array $default = null)
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) { if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) {
throw new LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.'); throw new LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.');
} }
@ -217,27 +201,6 @@ class InputOption
return $this->description; return $this->description;
} }
public function hasCompletion(): bool
{
return [] !== $this->suggestedValues;
}
/**
* Adds suggestions to $suggestions for the current completion input.
*
* @see Command::complete()
*/
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
$values = $this->suggestedValues;
if ($values instanceof \Closure && !\is_array($values = $values($input))) {
throw new LogicException(sprintf('Closure for option "%s" must return an array. Got "%s".', $this->name, get_debug_type($values)));
}
if ($values) {
$suggestions->suggestValues($values);
}
}
/** /**
* Checks whether the given option equals this one. * Checks whether the given option equals this one.
*/ */

View File

@ -25,8 +25,6 @@ interface StreamableInputInterface extends InputInterface
* This is mainly useful for testing purpose. * This is mainly useful for testing purpose.
* *
* @param resource $stream The input stream * @param resource $stream The input stream
*
* @return void
*/ */
public function setStream($stream); public function setStream($stream);

View File

@ -24,9 +24,6 @@ use Symfony\Component\Console\Exception\InvalidArgumentException;
*/ */
class StringInput extends ArgvInput class StringInput extends ArgvInput
{ {
/**
* @deprecated since Symfony 6.1
*/
public const REGEX_STRING = '([^\s]+?)(?:\s|(?<!\\\\)"|(?<!\\\\)\'|$)'; public const REGEX_STRING = '([^\s]+?)(?:\s|(?<!\\\\)"|(?<!\\\\)\'|$)';
public const REGEX_UNQUOTED_STRING = '([^\s\\\\]+?)'; public const REGEX_UNQUOTED_STRING = '([^\s\\\\]+?)';
public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\')'; public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\')';

View File

@ -1,4 +1,4 @@
Copyright (c) 2004-present Fabien Potencier Copyright (c) 2004-2023 Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -29,7 +29,7 @@ class ConsoleLogger extends AbstractLogger
public const INFO = 'info'; public const INFO = 'info';
public const ERROR = 'error'; public const ERROR = 'error';
private OutputInterface $output; private $output;
private array $verbosityLevelMap = [ private array $verbosityLevelMap = [
LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL, LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL,
LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL, LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL,
@ -59,6 +59,9 @@ class ConsoleLogger extends AbstractLogger
$this->formatLevelMap = $formatLevelMap + $this->formatLevelMap; $this->formatLevelMap = $formatLevelMap + $this->formatLevelMap;
} }
/**
* {@inheritdoc}
*/
public function log($level, $message, array $context = []): void public function log($level, $message, array $context = []): void
{ {
if (!isset($this->verbosityLevelMap[$level])) { if (!isset($this->verbosityLevelMap[$level])) {
@ -106,9 +109,9 @@ class ConsoleLogger extends AbstractLogger
if (null === $val || \is_scalar($val) || $val instanceof \Stringable) { if (null === $val || \is_scalar($val) || $val instanceof \Stringable) {
$replacements["{{$key}}"] = $val; $replacements["{{$key}}"] = $val;
} elseif ($val instanceof \DateTimeInterface) { } elseif ($val instanceof \DateTimeInterface) {
$replacements["{{$key}}"] = $val->format(\DateTimeInterface::RFC3339); $replacements["{{$key}}"] = $val->format(\DateTime::RFC3339);
} elseif (\is_object($val)) { } elseif (\is_object($val)) {
$replacements["{{$key}}"] = '[object '.$val::class.']'; $replacements["{{$key}}"] = '[object '.\get_class($val).']';
} else { } else {
$replacements["{{$key}}"] = '['.\gettype($val).']'; $replacements["{{$key}}"] = '['.\gettype($val).']';
} }

View File

@ -30,7 +30,7 @@ class BufferedOutput extends Output
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function doWrite(string $message, bool $newline) protected function doWrite(string $message, bool $newline)
{ {

View File

@ -29,7 +29,7 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface;
*/ */
class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
{ {
private OutputInterface $stderr; private $stderr;
private array $consoleSectionOutputs = []; private array $consoleSectionOutputs = [];
/** /**
@ -65,7 +65,7 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setDecorated(bool $decorated) public function setDecorated(bool $decorated)
{ {
@ -74,7 +74,7 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setFormatter(OutputFormatterInterface $formatter) public function setFormatter(OutputFormatterInterface $formatter)
{ {
@ -83,7 +83,7 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setVerbosity(int $level) public function setVerbosity(int $level)
{ {
@ -91,13 +91,16 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
$this->stderr->setVerbosity($level); $this->stderr->setVerbosity($level);
} }
/**
* {@inheritdoc}
*/
public function getErrorOutput(): OutputInterface public function getErrorOutput(): OutputInterface
{ {
return $this->stderr; return $this->stderr;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setErrorOutput(OutputInterface $error) public function setErrorOutput(OutputInterface $error)
{ {

View File

@ -24,9 +24,6 @@ interface ConsoleOutputInterface extends OutputInterface
*/ */
public function getErrorOutput(): OutputInterface; public function getErrorOutput(): OutputInterface;
/**
* @return void
*/
public function setErrorOutput(OutputInterface $error); public function setErrorOutput(OutputInterface $error);
public function section(): ConsoleSectionOutput; public function section(): ConsoleSectionOutput;

View File

@ -24,8 +24,7 @@ class ConsoleSectionOutput extends StreamOutput
private array $content = []; private array $content = [];
private int $lines = 0; private int $lines = 0;
private array $sections; private array $sections;
private Terminal $terminal; private $terminal;
private int $maxHeight = 0;
/** /**
* @param resource $stream * @param resource $stream
@ -39,29 +38,10 @@ class ConsoleSectionOutput extends StreamOutput
$this->terminal = new Terminal(); $this->terminal = new Terminal();
} }
/**
* Defines a maximum number of lines for this section.
*
* When more lines are added, the section will automatically scroll to the
* end (i.e. remove the first lines to comply with the max height).
*/
public function setMaxHeight(int $maxHeight): void
{
// when changing max height, clear output of current section and redraw again with the new height
$previousMaxHeight = $this->maxHeight;
$this->maxHeight = $maxHeight;
$existingContent = $this->popStreamContentUntilCurrentSection($previousMaxHeight ? min($previousMaxHeight, $this->lines) : $this->lines);
parent::doWrite($this->getVisibleContent(), false);
parent::doWrite($existingContent, false);
}
/** /**
* Clears previous output for this section. * Clears previous output for this section.
* *
* @param int $lines Number of lines to clear. If null, then the entire output of this section is cleared * @param int $lines Number of lines to clear. If null, then the entire output of this section is cleared
*
* @return void
*/ */
public function clear(int $lines = null) public function clear(int $lines = null)
{ {
@ -70,7 +50,7 @@ class ConsoleSectionOutput extends StreamOutput
} }
if ($lines) { if ($lines) {
array_splice($this->content, -$lines); array_splice($this->content, -($lines * 2)); // Multiply lines by 2 to cater for each new line added between content
} else { } else {
$lines = $this->lines; $lines = $this->lines;
$this->content = []; $this->content = [];
@ -78,13 +58,11 @@ class ConsoleSectionOutput extends StreamOutput
$this->lines -= $lines; $this->lines -= $lines;
parent::doWrite($this->popStreamContentUntilCurrentSection($this->maxHeight ? min($this->maxHeight, $lines) : $lines), false); parent::doWrite($this->popStreamContentUntilCurrentSection($lines), false);
} }
/** /**
* Overwrites the previous output with a new message. * Overwrites the previous output with a new message.
*
* @return void
*/ */
public function overwrite(string|iterable $message) public function overwrite(string|iterable $message)
{ {
@ -97,110 +75,34 @@ class ConsoleSectionOutput extends StreamOutput
return implode('', $this->content); return implode('', $this->content);
} }
public function getVisibleContent(): string
{
if (0 === $this->maxHeight) {
return $this->getContent();
}
return implode('', \array_slice($this->content, -$this->maxHeight));
}
/** /**
* @internal * @internal
*/ */
public function addContent(string $input, bool $newline = true): int public function addContent(string $input)
{ {
$width = $this->terminal->getWidth(); foreach (explode(\PHP_EOL, $input) as $lineContent) {
$lines = explode(\PHP_EOL, $input); $this->lines += ceil($this->getDisplayLength($lineContent) / $this->terminal->getWidth()) ?: 1;
$linesAdded = 0;
$count = \count($lines) - 1;
foreach ($lines as $i => $lineContent) {
// re-add the line break (that has been removed in the above `explode()` for
// - every line that is not the last line
// - if $newline is required, also add it to the last line
if ($i < $count || $newline) {
$lineContent .= \PHP_EOL;
}
// skip line if there is no text (or newline for that matter)
if ('' === $lineContent) {
continue;
}
// For the first line, check if the previous line (last entry of `$this->content`)
// needs to be continued (i.e. does not end with a line break).
if (0 === $i
&& (false !== $lastLine = end($this->content))
&& !str_ends_with($lastLine, \PHP_EOL)
) {
// deduct the line count of the previous line
$this->lines -= (int) ceil($this->getDisplayLength($lastLine) / $width) ?: 1;
// concatenate previous and new line
$lineContent = $lastLine.$lineContent;
// replace last entry of `$this->content` with the new expanded line
array_splice($this->content, -1, 1, $lineContent);
} else {
// otherwise just add the new content
$this->content[] = $lineContent; $this->content[] = $lineContent;
}
$linesAdded += (int) ceil($this->getDisplayLength($lineContent) / $width) ?: 1;
}
$this->lines += $linesAdded;
return $linesAdded;
}
/**
* @internal
*/
public function addNewLineOfInputSubmit(): void
{
$this->content[] = \PHP_EOL; $this->content[] = \PHP_EOL;
++$this->lines; }
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function doWrite(string $message, bool $newline) protected function doWrite(string $message, bool $newline)
{ {
// Simulate newline behavior for consistent output formatting, avoiding extra logic
if (!$newline && str_ends_with($message, \PHP_EOL)) {
$message = substr($message, 0, -\strlen(\PHP_EOL));
$newline = true;
}
if (!$this->isDecorated()) { if (!$this->isDecorated()) {
parent::doWrite($message, $newline); parent::doWrite($message, $newline);
return; return;
} }
// Check if the previous line (last entry of `$this->content`) needs to be continued $erasedContent = $this->popStreamContentUntilCurrentSection();
// (i.e. does not end with a line break). In which case, it needs to be erased first.
$linesToClear = $deleteLastLine = ($lastLine = end($this->content) ?: '') && !str_ends_with($lastLine, \PHP_EOL) ? 1 : 0;
$linesAdded = $this->addContent($message, $newline); $this->addContent($message);
if ($lineOverflow = $this->maxHeight > 0 && $this->lines > $this->maxHeight) { parent::doWrite($message, true);
// on overflow, clear the whole section and redraw again (to remove the first lines)
$linesToClear = $this->maxHeight;
}
$erasedContent = $this->popStreamContentUntilCurrentSection($linesToClear);
if ($lineOverflow) {
// redraw existing lines of the section
$previousLinesOfSection = \array_slice($this->content, $this->lines - $this->maxHeight, $this->maxHeight - $linesAdded);
parent::doWrite(implode('', $previousLinesOfSection), false);
}
// if the last line was removed, re-print its content together with the new content.
// otherwise, just print the new content.
parent::doWrite($deleteLastLine ? $lastLine.$message : $message, true);
parent::doWrite($erasedContent, false); parent::doWrite($erasedContent, false);
} }
@ -218,13 +120,8 @@ class ConsoleSectionOutput extends StreamOutput
break; break;
} }
$numberOfLinesToClear += $section->maxHeight ? min($section->lines, $section->maxHeight) : $section->lines; $numberOfLinesToClear += $section->lines;
if ('' !== $sectionContent = $section->getVisibleContent()) { $erasedContent[] = $section->getContent();
if (!str_ends_with($sectionContent, \PHP_EOL)) {
$sectionContent .= \PHP_EOL;
}
$erasedContent[] = $sectionContent;
}
} }
if ($numberOfLinesToClear > 0) { if ($numberOfLinesToClear > 0) {

View File

@ -24,16 +24,19 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface;
*/ */
class NullOutput implements OutputInterface class NullOutput implements OutputInterface
{ {
private NullOutputFormatter $formatter; private $formatter;
/** /**
* @return void * {@inheritdoc}
*/ */
public function setFormatter(OutputFormatterInterface $formatter) public function setFormatter(OutputFormatterInterface $formatter)
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function getFormatter(): OutputFormatterInterface public function getFormatter(): OutputFormatterInterface
{ {
// to comply with the interface we must return a OutputFormatterInterface // to comply with the interface we must return a OutputFormatterInterface
@ -41,53 +44,71 @@ class NullOutput implements OutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setDecorated(bool $decorated) public function setDecorated(bool $decorated)
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function isDecorated(): bool public function isDecorated(): bool
{ {
return false; return false;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setVerbosity(int $level) public function setVerbosity(int $level)
{ {
// do nothing // do nothing
} }
/**
* {@inheritdoc}
*/
public function getVerbosity(): int public function getVerbosity(): int
{ {
return self::VERBOSITY_QUIET; return self::VERBOSITY_QUIET;
} }
/**
* {@inheritdoc}
*/
public function isQuiet(): bool public function isQuiet(): bool
{ {
return true; return true;
} }
/**
* {@inheritdoc}
*/
public function isVerbose(): bool public function isVerbose(): bool
{ {
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function isVeryVerbose(): bool public function isVeryVerbose(): bool
{ {
return false; return false;
} }
/**
* {@inheritdoc}
*/
public function isDebug(): bool public function isDebug(): bool
{ {
return false; return false;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL) public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL)
{ {
@ -95,7 +116,7 @@ class NullOutput implements OutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL)
{ {

View File

@ -30,7 +30,7 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface;
abstract class Output implements OutputInterface abstract class Output implements OutputInterface
{ {
private int $verbosity; private int $verbosity;
private OutputFormatterInterface $formatter; private $formatter;
/** /**
* @param int|null $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) * @param int|null $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface)
@ -45,66 +45,87 @@ abstract class Output implements OutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setFormatter(OutputFormatterInterface $formatter) public function setFormatter(OutputFormatterInterface $formatter)
{ {
$this->formatter = $formatter; $this->formatter = $formatter;
} }
/**
* {@inheritdoc}
*/
public function getFormatter(): OutputFormatterInterface public function getFormatter(): OutputFormatterInterface
{ {
return $this->formatter; return $this->formatter;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setDecorated(bool $decorated) public function setDecorated(bool $decorated)
{ {
$this->formatter->setDecorated($decorated); $this->formatter->setDecorated($decorated);
} }
/**
* {@inheritdoc}
*/
public function isDecorated(): bool public function isDecorated(): bool
{ {
return $this->formatter->isDecorated(); return $this->formatter->isDecorated();
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function setVerbosity(int $level) public function setVerbosity(int $level)
{ {
$this->verbosity = $level; $this->verbosity = $level;
} }
/**
* {@inheritdoc}
*/
public function getVerbosity(): int public function getVerbosity(): int
{ {
return $this->verbosity; return $this->verbosity;
} }
/**
* {@inheritdoc}
*/
public function isQuiet(): bool public function isQuiet(): bool
{ {
return self::VERBOSITY_QUIET === $this->verbosity; return self::VERBOSITY_QUIET === $this->verbosity;
} }
/**
* {@inheritdoc}
*/
public function isVerbose(): bool public function isVerbose(): bool
{ {
return self::VERBOSITY_VERBOSE <= $this->verbosity; return self::VERBOSITY_VERBOSE <= $this->verbosity;
} }
/**
* {@inheritdoc}
*/
public function isVeryVerbose(): bool public function isVeryVerbose(): bool
{ {
return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity; return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity;
} }
/**
* {@inheritdoc}
*/
public function isDebug(): bool public function isDebug(): bool
{ {
return self::VERBOSITY_DEBUG <= $this->verbosity; return self::VERBOSITY_DEBUG <= $this->verbosity;
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL) public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL)
{ {
@ -112,7 +133,7 @@ abstract class Output implements OutputInterface
} }
/** /**
* @return void * {@inheritdoc}
*/ */
public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL)
{ {
@ -148,8 +169,6 @@ abstract class Output implements OutputInterface
/** /**
* Writes a message to the output. * Writes a message to the output.
*
* @return void
*/ */
abstract protected function doWrite(string $message, bool $newline); abstract protected function doWrite(string $message, bool $newline);
} }

View File

@ -33,28 +33,20 @@ interface OutputInterface
/** /**
* Writes a message to the output. * Writes a message to the output.
* *
* @param bool $newline Whether to add a newline * @param $newline Whether to add a newline
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), * @param $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
* 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @return void
*/ */
public function write(string|iterable $messages, bool $newline = false, int $options = 0); public function write(string|iterable $messages, bool $newline = false, int $options = 0);
/** /**
* Writes a message to the output and adds a newline at the end. * Writes a message to the output and adds a newline at the end.
* *
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), * @param $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
* 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @return void
*/ */
public function writeln(string|iterable $messages, int $options = 0); public function writeln(string|iterable $messages, int $options = 0);
/** /**
* Sets the verbosity of the output. * Sets the verbosity of the output.
*
* @return void
*/ */
public function setVerbosity(int $level); public function setVerbosity(int $level);
@ -85,8 +77,6 @@ interface OutputInterface
/** /**
* Sets the decorated flag. * Sets the decorated flag.
*
* @return void
*/ */
public function setDecorated(bool $decorated); public function setDecorated(bool $decorated);
@ -95,9 +85,6 @@ interface OutputInterface
*/ */
public function isDecorated(): bool; public function isDecorated(): bool;
/**
* @return void
*/
public function setFormatter(OutputFormatterInterface $formatter); public function setFormatter(OutputFormatterInterface $formatter);
/** /**

View File

@ -47,7 +47,9 @@ class StreamOutput extends Output
$this->stream = $stream; $this->stream = $stream;
$decorated ??= $this->hasColorSupport(); if (null === $decorated) {
$decorated = $this->hasColorSupport();
}
parent::__construct($verbosity, $decorated, $formatter); parent::__construct($verbosity, $decorated, $formatter);
} }
@ -63,7 +65,7 @@ class StreamOutput extends Output
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function doWrite(string $message, bool $newline) protected function doWrite(string $message, bool $newline)
{ {

View File

@ -46,7 +46,7 @@ class TrimmedBufferOutput extends Output
} }
/** /**
* @return void * {@inheritdoc}
*/ */
protected function doWrite(string $message, bool $newline) protected function doWrite(string $message, bool $newline)
{ {

View File

@ -146,12 +146,13 @@ class Question
if (\is_array($values)) { if (\is_array($values)) {
$values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values); $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values);
$callback = static fn () => $values;
} elseif ($values instanceof \Traversable) {
$callback = static function () use ($values) { $callback = static function () use ($values) {
static $valueCache; return $values;
};
return $valueCache ??= iterator_to_array($values, false); } elseif ($values instanceof \Traversable) {
$valueCache = null;
$callback = static function () use ($values, &$valueCache) {
return $valueCache ?? $valueCache = iterator_to_array($values, false);
}; };
} else { } else {
$callback = null; $callback = null;
@ -177,14 +178,11 @@ class Question
*/ */
public function setAutocompleterCallback(callable $callback = null): static public function setAutocompleterCallback(callable $callback = null): static
{ {
if (1 > \func_num_args()) {
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
if ($this->hidden && null !== $callback) { if ($this->hidden && null !== $callback) {
throw new LogicException('A hidden question cannot use the autocompleter.'); throw new LogicException('A hidden question cannot use the autocompleter.');
} }
$this->autocompleterCallback = null === $callback ? null : $callback(...); $this->autocompleterCallback = null === $callback || $callback instanceof \Closure ? $callback : \Closure::fromCallable($callback);
return $this; return $this;
} }
@ -196,10 +194,7 @@ class Question
*/ */
public function setValidator(callable $validator = null): static public function setValidator(callable $validator = null): static
{ {
if (1 > \func_num_args()) { $this->validator = null === $validator || $validator instanceof \Closure ? $validator : \Closure::fromCallable($validator);
trigger_deprecation('symfony/console', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
$this->validator = null === $validator ? null : $validator(...);
return $this; return $this;
} }
@ -251,7 +246,7 @@ class Question
*/ */
public function setNormalizer(callable $normalizer): static public function setNormalizer(callable $normalizer): static
{ {
$this->normalizer = $normalizer(...); $this->normalizer = $normalizer instanceof \Closure ? $normalizer : \Closure::fromCallable($normalizer);
return $this; return $this;
} }
@ -266,9 +261,6 @@ class Question
return $this->normalizer; return $this->normalizer;
} }
/**
* @return bool
*/
protected function isAssoc(array $array) protected function isAssoc(array $array)
{ {
return (bool) \count(array_filter(array_keys($array), 'is_string')); return (bool) \count(array_filter(array_keys($array), 'is_string'));

View File

@ -7,12 +7,12 @@ interfaces.
Sponsor Sponsor
------- -------
The Console component for Symfony 6.3 is [backed][1] by [Les-Tilleuls.coop][2]. The Console component for Symfony 5.4/6.0 is [backed][1] by [Les-Tilleuls.coop][2].
Les-Tilleuls.coop is a team of 70+ Symfony experts who can help you design, develop and Les-Tilleuls.coop is a team of 50+ Symfony experts who can help you design, develop and
fix your projects. They provide a wide range of professional services including development, fix your projects. We provide a wide range of professional services including development,
consulting, coaching, training and audits. They also are highly skilled in JS, Go and DevOps. consulting, coaching, training and audits. We also are highly skilled in JS, Go and DevOps.
They are a worker cooperative! We are a worker cooperative!
Help Symfony by [sponsoring][3] its development! Help Symfony by [sponsoring][3] its development!

View File

@ -6,16 +6,6 @@
# https://symfony.com/doc/current/contributing/code/license.html # https://symfony.com/doc/current/contributing/code/license.html
_sf_{{ COMMAND_NAME }}() { _sf_{{ COMMAND_NAME }}() {
# Use the default completion for shell redirect operators.
for w in '>' '>>' '&>' '<'; do
if [[ $w = "${COMP_WORDS[COMP_CWORD-1]}" ]]; then
compopt -o filenames
COMPREPLY=($(compgen -f -- "${COMP_WORDS[COMP_CWORD]}"))
return 0
fi
done
# Use newline as only separator to allow space in completion values # Use newline as only separator to allow space in completion values
IFS=$'\n' IFS=$'\n'
local sf_cmd="${COMP_WORDS[0]}" local sf_cmd="${COMP_WORDS[0]}"
@ -35,7 +25,7 @@ _sf_{{ COMMAND_NAME }}() {
local cur prev words cword local cur prev words cword
_get_comp_words_by_ref -n := cur prev words cword _get_comp_words_by_ref -n := cur prev words cword
local completecmd=("$sf_cmd" "_complete" "--no-interaction" "-sbash" "-c$cword" "-a{{ VERSION }}") local completecmd=("$sf_cmd" "_complete" "--no-interaction" "-sbash" "-c$cword" "-S{{ VERSION }}")
for w in ${words[@]}; do for w in ${words[@]}; do
w=$(printf -- '%b' "$w") w=$(printf -- '%b' "$w")
# remove quotes from typed values # remove quotes from typed values

View File

@ -34,12 +34,20 @@ final class SignalRegistry
$this->signalHandlers[$signal][] = $signalHandler; $this->signalHandlers[$signal][] = $signalHandler;
pcntl_signal($signal, $this->handle(...)); pcntl_signal($signal, [$this, 'handle']);
} }
public static function isSupported(): bool public static function isSupported(): bool
{ {
return \function_exists('pcntl_signal'); if (!\function_exists('pcntl_signal')) {
return false;
}
if (\in_array('pcntl_signal', explode(',', \ini_get('disable_functions')))) {
return false;
}
return true;
} }
/** /**

Some files were not shown because too many files have changed in this diff Show More