├── .dockerignore
├── .gitignore
├── screenshots
├── Homepage.png
├── UnknownDevices.png
├── InitializeDevice.png
├── UpdateRequestURLPHP.png
├── BrowserToBrowserCall.png
├── ConfigurePhoneNumber.png
└── ConfigurePhoneNumberWithTwiMLApps.png
├── docker-compose.yml
├── CONTRIBUTING.md
├── Makefile
├── .github
├── dependabot.yml
└── workflows
│ └── composer.yml
├── .mergify.yml
├── composer.json
├── Dockerfile
├── .env.example
├── LICENSE
├── tests
└── ClientQuickstartTest.php
├── token.php
├── voice.php
├── randos.php
├── site.css
├── index.html
├── CODE_OF_CONDUCT.md
├── quickstart.js
├── README.md
└── composer.lock
/.dockerignore:
--------------------------------------------------------------------------------
1 | vendor
2 | node_modules
3 | .sqlite
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | vendor
3 | .env
4 | bin
5 | node_modules/
6 |
--------------------------------------------------------------------------------
/screenshots/Homepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/Homepage.png
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.8"
2 | services:
3 | app:
4 | restart: always
5 | build: .
6 | ports:
7 | - "8000:8000"
8 |
--------------------------------------------------------------------------------
/screenshots/UnknownDevices.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/UnknownDevices.png
--------------------------------------------------------------------------------
/screenshots/InitializeDevice.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/InitializeDevice.png
--------------------------------------------------------------------------------
/screenshots/UpdateRequestURLPHP.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/UpdateRequestURLPHP.png
--------------------------------------------------------------------------------
/screenshots/BrowserToBrowserCall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/BrowserToBrowserCall.png
--------------------------------------------------------------------------------
/screenshots/ConfigurePhoneNumber.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/ConfigurePhoneNumber.png
--------------------------------------------------------------------------------
/screenshots/ConfigurePhoneNumberWithTwiMLApps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TwilioDevEd/voice-javascript-sdk-quickstart-php/HEAD/screenshots/ConfigurePhoneNumberWithTwiMLApps.png
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Twilio
2 |
3 | All third party contributors acknowledge that any contributions they provide will be made under the same open source license that the open source project is provided under.
4 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: install serve
2 |
3 | install:
4 | composer install
5 |
6 | serve-setup:
7 | php -S localhost:8000
8 | open-browser:
9 | python3 -m webbrowser "http://localhost:8000";
10 | serve: open-browser serve-setup
11 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: composer
4 | directory: "/"
5 | schedule:
6 | interval: daily
7 | open-pull-requests-limit: 10
8 | ignore:
9 | - dependency-name: twilio/sdk
10 | versions:
11 | - 6.16.1
12 |
--------------------------------------------------------------------------------
/.mergify.yml:
--------------------------------------------------------------------------------
1 | pull_request_rules:
2 | - name: automatic merge for Dependabot pull requests
3 | conditions:
4 | - author=dependabot-preview[bot]
5 | - status-success=build (macos-latest)
6 | - status-success=build (windows-latest)
7 | - status-success=build (ubuntu-latest)
8 | actions:
9 | merge:
10 | method: squash
11 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "twilio-deved/client-quickstart-php",
3 | "require": {
4 | "php": "^7.2.5 || ^8.0",
5 | "twilio/sdk": "^6.1.0",
6 | "vlucas/phpdotenv": "^5.2"
7 | },
8 | "require-dev": {
9 | "friendsofphp/php-cs-fixer": "^2.16",
10 | "phpunit/phpunit": "^9.1",
11 | "mockery/mockery": "^1.3"
12 | },
13 | "config": {
14 | "bin-dir": "bin"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM php:8.0
2 |
3 | WORKDIR /usr/src/app
4 |
5 | RUN apt-get update && \
6 | apt-get upgrade -y && \
7 | apt-get install -y git
8 | RUN apt-get install -y zip unzip
9 |
10 | COPY composer* ./
11 | RUN curl --silent --show-error https://getcomposer.org/installer | php
12 | RUN mv composer.phar /usr/local/bin/composer
13 |
14 |
15 | COPY . .
16 | RUN make install
17 |
18 | EXPOSE 8000
19 |
20 | CMD [ "php", "-S", "0.0.0.0:8000"]
21 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2 |
3 | # The Twilio number for making outbound and receiving inbound calls
4 | # Purchase a Twilio phone number in the console
5 | # https://www.twilio.com/console/phone-numbers/search
6 | TWILIO_CALLER_ID=+1XXXYYYZZZZ
7 |
8 | # SID of your TwiML Application
9 | # Create a new TwiML app in the console
10 | # https://www.twilio.com/console/voice/twiml/apps
11 | # OR with the Twilio CLI
12 | # twilio api:core:applications:create --friendly-name=voice-client-javascript
13 | TWILIO_TWIML_APP_SID=APXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
14 |
15 | # Your REST API Key information
16 | # Create a new key in the console and copy the SID and secret.
17 | # https://www.twilio.com/console/project/api-keys
18 | # NOTE: Make sure to copy the secret, it will only be displayed once
19 | API_KEY=SKXXXXXXXXXXXX # the SID of the key
20 | API_SECRET=XXXXXXXXXXXXXX
21 |
--------------------------------------------------------------------------------
/.github/workflows/composer.yml:
--------------------------------------------------------------------------------
1 |
2 | name: Composer
3 |
4 | on:
5 | push:
6 | branches: [ master, next ]
7 | pull_request:
8 | branches: [ master, next ]
9 |
10 | jobs:
11 | build:
12 |
13 | runs-on: ${{ matrix.platform }}
14 | strategy:
15 | max-parallel: 3
16 | matrix:
17 | platform: [windows-latest, macos-latest, ubuntu-latest]
18 |
19 | steps:
20 | - uses: actions/checkout@v2
21 | - name: Setup PHP
22 | uses: shivammathur/setup-php@v2
23 | with:
24 | php-version: 7.4
25 | extensions: mbstring, fileinfo, pdo_sqlite
26 | coverage: none
27 | - name: Copy .env
28 | run: php -r "file_exists('.env') || copy('.env.example', '.env');"
29 | - name: Install Dependencies
30 | run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
31 | - name: Execute tests (Unit and Feature tests) via PHPUnit
32 | run: |
33 | bin/phpunit tests --stderr
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Twilio Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/tests/ClientQuickstartTest.php:
--------------------------------------------------------------------------------
1 | setOutputCallback(function() {});
11 | }
12 |
13 | public function tearDown(): void
14 | {
15 | Mockery::close();
16 | }
17 |
18 | public function testVoiceResponseHasToParameter()
19 | {
20 | include_once('./voice.php');
21 |
22 | $response = get_voice_response("+5939999999");
23 | $this->assertStringContainsString('+5939999999', $response);
24 | }
25 |
26 | public function testVoiceResponseHasNoParameters()
27 | {
28 | include_once('./voice.php');
29 |
30 | $response = get_voice_response(null);
31 | $this->assertStringContainsString('Thanks for calling!', $response);
32 | }
33 |
34 | public function testTokenGeneration()
35 | {
36 | include_once('./token.php');
37 | $response = get_access_token('nezuko');
38 |
39 | $this->assertStringContainsString('"identity":"nezuko"', $response);
40 | $this->assertStringContainsString('"token":"', $response);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/token.php:
--------------------------------------------------------------------------------
1 | load();
10 |
11 | function get_access_token($identity) {
12 | $access_token = new AccessToken(
13 | $_ENV['TWILIO_ACCOUNT_SID'],
14 | $_ENV['API_KEY'],
15 | $_ENV['API_SECRET'],
16 | 3600,
17 | $identity
18 | );
19 |
20 | // Create Voice grant
21 | $voiceGrant = new VoiceGrant();
22 | $voiceGrant->setOutgoingApplicationSid($_ENV['TWILIO_TWIML_APP_SID']);
23 |
24 | // Optional: add to allow incoming calls
25 | $voiceGrant->setIncomingAllow(true);
26 |
27 | // Add grant to token
28 | $access_token->addGrant($voiceGrant);
29 |
30 | // render token to string
31 | $token = $access_token->toJWT();
32 |
33 | return json_encode(array(
34 | 'identity' => $identity,
35 | 'token' => $token,
36 | ));
37 | }
38 |
39 | // choose a random username for the connecting user
40 | $identity = randomUsername();
41 | if(!session_id()) session_start();
42 | $_SESSION['identity'] = $identity;
43 |
44 | // return serialized token and the user's randomly generated ID
45 | header('Content-Type: application/json');
46 | echo get_access_token($_SESSION['identity']);
47 |
--------------------------------------------------------------------------------
/voice.php:
--------------------------------------------------------------------------------
1 | load();
8 |
9 | function get_voice_response($phone) {
10 | $response = new VoiceResponse();
11 | if ($phone == $_ENV['TWILIO_CALLER_ID']) {
12 | # Receiving an incoming call to the browser from an external phone
13 | $response = new VoiceResponse();
14 | $dial = $response->dial('');
15 | $dial->client($_SESSION['identity']);
16 | } else if (!empty($phone) && strlen($phone) > 0) {
17 | $number = htmlspecialchars($phone);
18 | $dial = $response->dial('', ['callerId' => $_ENV['TWILIO_CALLER_ID']]);
19 |
20 | // wrap the phone number or client name in the appropriate TwiML verb
21 | // by checking if the number given has only digits and format symbols
22 | if (preg_match("/^[\d\+\-\(\) ]+$/", $number)) {
23 | $dial->number($number);
24 | } else {
25 | $dial->client($number);
26 | }
27 | } else {
28 | $response->say("Thanks for calling!");
29 | }
30 | return (string)$response;
31 | }
32 |
33 |
34 | // get the phone number from the page request parameters, if given
35 | header('Content-Type: text/xml');
36 | $phone = $_REQUEST['To'] ?? null;
37 |
38 | echo get_voice_response($_REQUEST['To'] ?? null);
39 |
--------------------------------------------------------------------------------
/randos.php:
--------------------------------------------------------------------------------
1 | div {
87 | display: block;
88 | height: 20px;
89 | width: 0;
90 | }
91 |
92 | /* Right Column */
93 | .right-column {
94 | padding: 0 1.5em;
95 | }
96 |
97 | #log {
98 | text-align: left;
99 | border: 1px solid #686865;
100 | padding: 10px;
101 | height: 9.5em;
102 | overflow-y: scroll;
103 | }
104 |
105 | .log-entry {
106 | color: #686865;
107 | font-family: "Share Tech Mono", "Courier New", Courier, fixed-width;
108 | font-size: 1.25em;
109 | line-height: 1.25em;
110 | margin-left: 1em;
111 | text-indent: -1.25em;
112 | width: 90%;
113 | }
114 |
115 | /* Other Styles */
116 | .hide {
117 | position: absolute !important;
118 | top: -9999px !important;
119 | left: -9999px !important;
120 | }
121 |
122 | button:disabled {
123 | cursor: not-allowed;
124 | }
125 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Twilio Voice JavaScript SDK Quickstart
5 |
6 |
7 |
8 |
9 | Twilio Voice JavaScript SDK Quickstart
10 |
11 |
12 |
13 |
14 | Your Device Info
15 |
16 |
17 |
18 |
19 |
20 |
22 |
23 |
24 |
25 |
26 | Make a Call
27 |
28 |
35 |
36 |
37 |
Incoming Call Controls
38 |
39 | Incoming Call from
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | - Using welcoming and inclusive language
18 | - Being respectful of differing viewpoints and experiences
19 | - Gracefully accepting constructive criticism
20 | - Focusing on what is best for the community
21 | - Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | - The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | - Trolling, insulting/derogatory comments, and personal or political attacks
28 | - Public or private harassment
29 | - Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | - Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at open-source@twilio.com. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
--------------------------------------------------------------------------------
/quickstart.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | const speakerDevices = document.getElementById("speaker-devices");
3 | const ringtoneDevices = document.getElementById("ringtone-devices");
4 | const outputVolumeBar = document.getElementById("output-volume");
5 | const inputVolumeBar = document.getElementById("input-volume");
6 | const volumeIndicators = document.getElementById("volume-indicators");
7 | const callButton = document.getElementById("button-call");
8 | const outgoingCallHangupButton = document.getElementById("button-hangup-outgoing");
9 | const callControlsDiv = document.getElementById("call-controls");
10 | const audioSelectionDiv = document.getElementById("output-selection");
11 | const getAudioDevicesButton = document.getElementById("get-devices");
12 | const logDiv = document.getElementById("log");
13 | const incomingCallDiv = document.getElementById("incoming-call");
14 | const incomingCallHangupButton = document.getElementById(
15 | "button-hangup-incoming"
16 | );
17 | const incomingCallAcceptButton = document.getElementById(
18 | "button-accept-incoming"
19 | );
20 | const incomingCallRejectButton = document.getElementById(
21 | "button-reject-incoming"
22 | );
23 | const phoneNumberInput = document.getElementById("phone-number");
24 | const incomingPhoneNumberEl = document.getElementById("incoming-number");
25 | const startupButton = document.getElementById("startup-button");
26 |
27 | let device;
28 | let token;
29 |
30 | // Event Listeners
31 |
32 | callButton.onclick = (e) => {
33 | e.preventDefault();
34 | makeOutgoingCall();
35 | };
36 | getAudioDevicesButton.onclick = getAudioDevices;
37 | speakerDevices.addEventListener("change", updateOutputDevice);
38 | ringtoneDevices.addEventListener("change", updateRingtoneDevice);
39 |
40 |
41 | // SETUP STEP 1:
42 | // Browser client should be started after a user gesture
43 | // to avoid errors in the browser console re: AudioContext
44 | startupButton.addEventListener("click", startupClient);
45 |
46 | // SETUP STEP 2: Request an Access Token
47 | async function startupClient() {
48 | log("Requesting Access Token...");
49 |
50 | try {
51 | const data = await $.getJSON("/token.php");
52 | log("Got a token.");
53 | token = data.token;
54 | setClientNameUI(data.identity);
55 | intitializeDevice();
56 | } catch (err) {
57 | console.log(err);
58 | log("An error occurred. See your browser console for more information.");
59 | }
60 | }
61 |
62 | // SETUP STEP 3:
63 | // Instantiate a new Twilio.Device
64 | function intitializeDevice() {
65 | logDiv.classList.remove("hide");
66 | log("Initializing device");
67 | device = new Twilio.Device(token, {
68 | logLevel: 1,
69 | // Set Opus as our preferred codec. Opus generally performs better, requiring less bandwidth and
70 | // providing better audio quality in restrained network conditions.
71 | codecPreferences: ["opus", "pcmu"]
72 | });
73 |
74 | addDeviceListeners(device);
75 |
76 | // Device must be registered in order to receive incoming calls
77 | device.register();
78 | }
79 |
80 | // SETUP STEP 4:
81 | // Listen for Twilio.Device states
82 | function addDeviceListeners(device) {
83 | device.on("registered", function () {
84 | log("Twilio.Device Ready to make and receive calls!");
85 | callControlsDiv.classList.remove("hide");
86 | });
87 |
88 | device.on("error", function (error) {
89 | log("Twilio.Device Error: " + error.message);
90 | });
91 |
92 | device.on("incoming", handleIncomingCall);
93 |
94 | device.audio.on("deviceChange", updateAllAudioDevices.bind(device));
95 |
96 | // Show audio selection UI if it is supported by the browser.
97 | if (device.audio.isOutputSelectionSupported) {
98 | audioSelectionDiv.classList.remove("hide");
99 | }
100 | }
101 |
102 | // MAKE AN OUTGOING CALL
103 |
104 | async function makeOutgoingCall() {
105 | var params = {
106 | // get the phone number to call from the DOM
107 | To: phoneNumberInput.value,
108 | };
109 |
110 | if (device) {
111 | log(`Attempting to call ${params.To} ...`);
112 |
113 | // Twilio.Device.connect() returns a Call object
114 | const call = await device.connect({ params });
115 |
116 | // add listeners to the Call
117 | // "accepted" means the call has finished connecting and the state is now "open"
118 | call.on("accept", updateUIAcceptedOutgoingCall);
119 | call.on("disconnect", updateUIDisconnectedOutgoingCall);
120 | call.on("cancel", updateUIDisconnectedOutgoingCall);
121 |
122 | outgoingCallHangupButton.onclick = () => {
123 | log("Hanging up ...");
124 | call.disconnect();
125 | };
126 |
127 | } else {
128 | log("Unable to make call.");
129 | }
130 | }
131 |
132 | function updateUIAcceptedOutgoingCall(call) {
133 | log("Call in progress ...");
134 | callButton.disabled = true;
135 | outgoingCallHangupButton.classList.remove("hide");
136 | volumeIndicators.classList.remove("hide");
137 | bindVolumeIndicators(call);
138 | }
139 |
140 | function updateUIDisconnectedOutgoingCall() {
141 | log("Call disconnected.");
142 | callButton.disabled = false;
143 | outgoingCallHangupButton.classList.add("hide");
144 | volumeIndicators.classList.add("hide");
145 | }
146 |
147 | // HANDLE INCOMING CALL
148 |
149 | function handleIncomingCall(call) {
150 | log(`Incoming call from ${call.parameters.From}`);
151 |
152 | //show incoming call div and incoming phone number
153 | incomingCallDiv.classList.remove("hide");
154 | incomingPhoneNumberEl.innerHTML = call.parameters.From;
155 |
156 | //add event listeners for Accept, Reject, and Hangup buttons
157 | incomingCallAcceptButton.onclick = () => {
158 | acceptIncomingCall(call);
159 | };
160 |
161 | incomingCallRejectButton.onclick = () => {
162 | rejectIncomingCall(call);
163 | };
164 |
165 | incomingCallHangupButton.onclick = () => {
166 | hangupIncomingCall(call);
167 | };
168 |
169 | // add event listener to call object
170 | call.on("cancel", handleDisconnectedIncomingCall);
171 | call.on("disconnect", handleDisconnectedIncomingCall);
172 | call.on("reject", handleDisconnectedIncomingCall);
173 | }
174 |
175 | // ACCEPT INCOMING CALL
176 |
177 | function acceptIncomingCall(call) {
178 | call.accept();
179 |
180 | //update UI
181 | log("Accepted incoming call.");
182 | incomingCallAcceptButton.classList.add("hide");
183 | incomingCallRejectButton.classList.add("hide");
184 | incomingCallHangupButton.classList.remove("hide");
185 | }
186 |
187 | // REJECT INCOMING CALL
188 |
189 | function rejectIncomingCall(call) {
190 | call.reject();
191 | log("Rejected incoming call");
192 | resetIncomingCallUI();
193 | }
194 |
195 | // HANG UP INCOMING CALL
196 |
197 | function hangupIncomingCall(call) {
198 | call.disconnect();
199 | log("Hanging up incoming call");
200 | resetIncomingCallUI();
201 | }
202 |
203 | // HANDLE CANCELLED INCOMING CALL
204 |
205 | function handleDisconnectedIncomingCall() {
206 | log("Incoming call ended.");
207 | resetIncomingCallUI();
208 | }
209 |
210 | // MISC USER INTERFACE
211 |
212 | // Activity log
213 | function log(message) {
214 | logDiv.innerHTML += `> ${message}
`;
215 | logDiv.scrollTop = logDiv.scrollHeight;
216 | }
217 |
218 | function setClientNameUI(clientName) {
219 | var div = document.getElementById("client-name");
220 | div.innerHTML = `Your client name: ${clientName}`;
221 | }
222 |
223 | function resetIncomingCallUI() {
224 | incomingPhoneNumberEl.innerHTML = "";
225 | incomingCallAcceptButton.classList.remove("hide");
226 | incomingCallRejectButton.classList.remove("hide");
227 | incomingCallHangupButton.classList.add("hide");
228 | incomingCallDiv.classList.add("hide");
229 | }
230 |
231 | // AUDIO CONTROLS
232 |
233 | async function getAudioDevices() {
234 | await navigator.mediaDevices.getUserMedia({ audio: true });
235 | updateAllAudioDevices.bind(device);
236 | }
237 |
238 | function updateAllAudioDevices() {
239 | if (device) {
240 | updateDevices(speakerDevices, device.audio.speakerDevices.get());
241 | updateDevices(ringtoneDevices, device.audio.ringtoneDevices.get());
242 | }
243 | }
244 |
245 | function updateOutputDevice() {
246 | const selectedDevices = Array.from(speakerDevices.children)
247 | .filter((node) => node.selected)
248 | .map((node) => node.getAttribute("data-id"));
249 |
250 | device.audio.speakerDevices.set(selectedDevices);
251 | }
252 |
253 | function updateRingtoneDevice() {
254 | const selectedDevices = Array.from(ringtoneDevices.children)
255 | .filter((node) => node.selected)
256 | .map((node) => node.getAttribute("data-id"));
257 |
258 | device.audio.ringtoneDevices.set(selectedDevices);
259 | }
260 |
261 | function bindVolumeIndicators(call) {
262 | call.on("volume", function (inputVolume, outputVolume) {
263 | var inputColor = "red";
264 | if (inputVolume < 0.5) {
265 | inputColor = "green";
266 | } else if (inputVolume < 0.75) {
267 | inputColor = "yellow";
268 | }
269 |
270 | inputVolumeBar.style.width = Math.floor(inputVolume * 300) + "px";
271 | inputVolumeBar.style.background = inputColor;
272 |
273 | var outputColor = "red";
274 | if (outputVolume < 0.5) {
275 | outputColor = "green";
276 | } else if (outputVolume < 0.75) {
277 | outputColor = "yellow";
278 | }
279 |
280 | outputVolumeBar.style.width = Math.floor(outputVolume * 300) + "px";
281 | outputVolumeBar.style.background = outputColor;
282 | });
283 | }
284 |
285 | // Update the available ringtone and speaker devices
286 | function updateDevices(selectEl, selectedDevices) {
287 | selectEl.innerHTML = "";
288 |
289 | device.audio.availableOutputDevices.forEach(function (device, id) {
290 | var isActive = selectedDevices.size === 0 && id === "default";
291 | selectedDevices.forEach(function (device) {
292 | if (device.deviceId === id) {
293 | isActive = true;
294 | }
295 | });
296 |
297 | var option = document.createElement("option");
298 | option.label = device.label;
299 | option.setAttribute("data-id", id);
300 | if (isActive) {
301 | option.setAttribute("selected", "selected");
302 | }
303 | selectEl.appendChild(option);
304 | });
305 | }
306 | });
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Twilio Client Quickstart for PHP
6 |
7 | 
8 |
9 | > This template is part of Twilio CodeExchange. If you encounter any issues with this code, please open an issue at [github.com/twilio-labs/code-exchange/issues](https://github.com/twilio-labs/code-exchange/issues).
10 |
11 | ## About
12 |
13 | This application should give you a ready-made starting point for writing your own voice apps with the Twilio Voice JavaScript SDK (formerly known as Twilio Client).
14 |
15 | Once you set up the application, you will be able to make and receive calls from your browser. You will also be able to switch between audio input/output devices and see dynamic volume levels on the call.
16 |
17 | 
18 |
19 | Implementations in other languages:
20 |
21 | | .NET | Java | Python | Ruby | Node |
22 | | :--- | :--- | :----- | :-- | :--- |
23 | | [Done](https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-csharp) | [Done](https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-java) | [Done](https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-python) | [Done](https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-ruby) | [Done](https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-node) |
24 |
25 | ## Set up
26 |
27 | ### Requirements
28 |
29 | - [PHP >= 7.2.5](https://www.php.net/) and [composer](https://getcomposer.org/)
30 | - [ngrok](https://ngrok.com/download)
31 | - A Twilio account - [sign up](https://www.twilio.com/try-twilio)
32 |
33 | ### Twilio Account Settings
34 |
35 | Before we begin, we need to collect all the config values we need to run the application.
36 |
37 | | Config Value | Description |
38 | | :------------- |:------------- |
39 | `TWILIO_ACCOUNT_SID` | Your primary Twilio account identifier - find this [in the console here](https://www.twilio.com/console).
40 | `TWILIO_TWIML_APP_SID` | The TwiML application with a voice URL configured to access your server running this app - create one [in the console here](https://www.twilio.com/console/voice/twiml/apps). Also, you will need to configure the Voice "REQUEST URL" on the TwiML app once you've got your server up and running.
41 | `TWILIO_CALLER_ID` | A Twilio phone number in [E.164 format](https://www.twilio.com/docs/glossary/what-e164) - you can [get one here](https://www.twilio.com/console/phone-numbers/incoming)
42 | `API_KEY` / `API_SECRET` | Your REST API Key information needed to create an [Access Token](https://www.twilio.com/docs/iam/access-tokens) - create [an API key here](https://www.twilio.com/console/project/api-keys). The `API_KEY` value should be the key's `SID`.
43 |
44 | ### Local Development
45 |
46 | 1. Clone this repository and `cd` into it
47 |
48 | ```bash
49 | git clone https://github.com/TwilioDevEd/voice-javascript-sdk-quickstart-php.git
50 | cd voice-javascript-sdk-quickstart-php
51 | ```
52 |
53 | 1. Install PHP dependencies
54 |
55 | ```bash
56 | make install
57 | ```
58 |
59 | 1. Download the Twilio Voice JavaScript SDK code from GitHub.
60 |
61 | In a production environment, we recommend using `npm` to install the SDK. However, for the purposes of this quickstart,
62 | we are not introducing Node or build tools, and are instead getting the SDK code directly from GitHub.
63 |
64 | See the instructions [here](https://github.com/twilio/twilio-voice.js#github) for downloading the SDK code from GitHub.
65 | You will download a zip or tarball for a specific release version of the Voice JavaScript SDK (ex: `2.0.0`), extract the
66 | files, and retrieve the `twilio.min.js` file from the `dist/` folder. Move that `twilio.min.js` file into this directory (the main `voice-javascript-sdk-quickstart-php` directory).
67 |
68 | 1. Create a configuration file for your application by copying the `.env.example` file to a new file called `.env`. Then, edit the `.env` file to include your account and application details.
69 |
70 | ```bash
71 | cp .env.example .env
72 | ```
73 |
74 | See [Twilio Account Settings](#twilio-account-settings) to locate the necessary environment variables.
75 |
76 | 1. Run the application. It will run locally on port 8000.
77 |
78 | ```bash
79 | make serve
80 | ```
81 |
82 | 1. Expose your application to the wider internet using [ngrok](https://ngrok.com/download). You can click [here](https://www.twilio.com/blog/2015/09/6-awesome-reasons-to-use-ngrok-when-testing-webhooks.html) for more details. This step **is important** and your application won't work if you only run the server on localhost.
83 |
84 | ```bash
85 | ngrok http 8000
86 | ```
87 |
88 | 1. When ngrok starts up, it will assign a unique URL to your tunnel. It might be something like `https://asdf456.ngrok.io`. Take note of this.
89 |
90 | 1. [Configure your TwiML app](https://www.twilio.com/console/voice/twiml/apps)'s Voice "REQUEST URL" to be your ngrok URL plus `/voice.php`. For example:
91 |
92 | 
93 |
94 | > **Note:** You must set your webhook urls to the `https` ngrok tunnel created.
95 |
96 | You should now be ready to rock! Open a browser to `localhost:8000` and make some phone calls. Open it on another device and call yourself. Note that Twilio Client requires WebRTC enabled browsers, so Edge and Internet Explorer will not work for testing. We'd recommend Google Chrome or Mozilla Firefox instead.
97 |
98 | ## Your Web Application
99 |
100 | When you navigate to `localhost:8000`, you should see the web application containing a "Start up the Device" button. Click this button to initialize a `Twilio.Device`.
101 |
102 | 
103 |
104 | When the `Twilio.Device` is initialized, you will be assigned a random client name, which will appear in the top left corner of the homepage.
105 | This client name is used as the identity field when generating an access token for the client, and is also used to route incoming calls to the correct client device.
106 |
107 | ### To make an outbound call to a phone number:
108 |
109 | Under "Make a Call", enter a phone number in [E.164 format](https://www.twilio.com/docs/glossary/what-e164) and press the "Call" button.
110 |
111 | ### To make a browser-to-browser call:
112 |
113 | Open two browser windows to `localhost:8000` and click "Start up the Device" button in both windows. You should see a different client name in each window.
114 |
115 | Enter one client's name in the other client's "Make a Call" input field, and press the "Call" button.
116 |
117 | 
118 |
119 | ### Receiving incoming calls from a non-browser device:
120 |
121 | You will first need to configure your Twilio Voice phone number (the phone number you used as the `TWILIO_CALLER_ID` configuration value) to route to your TwiML app. This tells Twilio how to handle an incoming call directed to your Twilio Voice number.
122 |
123 | 1. Log in to the [Twilio Console](https://www.twilio.com/console)
124 | 2. Navigate to your [Active Number list](https://www.twilio.com/console/phone-numbers/incoming)
125 | 3. Click on the number you are using as your `TWILIO_CALLER_ID`.
126 | 4. Scroll down to find the "Voice & Fax" section and look for "CONFIGURE WITH".
127 | 5. Select "TwiML App".
128 | 6. Under "TwiML App", choose the TwiML App you created earlier for this quickstart.
129 | 7. Click the "Save" button at the bottom of the browser window.
130 |
131 | 
132 |
133 | You can now call your Twilio Voice phone number from your phone.
134 |
135 | **Note:** Since this is a quickstart with limited functionality, incoming calls will only be routed to your most recently created `Twilio.Device`.
136 |
137 | ### Unknown Devices
138 |
139 | If you see "Unknown Audio Output Device 1" in the "Ringtone" or "Speaker" devices lists, click the button below the boxes (Seeing "Unknown" Devices?) to have your browser identify your input and output devices.
140 | 
141 |
142 | ### Docker
143 |
144 | If you have [Docker](https://www.docker.com/) already installed on your machine, you can use our `docker-compose.yml` to setup your project.
145 |
146 | 1. Make sure you have the project cloned and that Docker is running on your machine.
147 | 2. Retrieve the `twilio.min.js` file and move it to the project's root directory as outlined in Step 3 of the [Local Development](#local-development) steps.
148 | 3. Setup the `.env` file as outlined in Step 4 of the [Local Development](#local-development) steps.
149 | 4. Run `docker-compose up`.
150 | 5. Follow the steps in [Local Development](#local-development) on how to expose your port to Twilio using [ngrok](https://ngrok.com/) and configure the remaining parts of your application.
151 |
152 | ### Unit and Integration Tests
153 |
154 | You can run the Unit and Feature tests locally by typing:
155 | ```bash
156 | bin/phpunit tests
157 | ```
158 |
159 | ### Cloud deployment
160 |
161 | Additionally to trying out this application locally, you can deploy it to a variety of host services. Here is a small selection of them.
162 |
163 | Please be aware that some of these might charge you for the usage or might make the source code for this application visible to the public. When in doubt research the respective hosting service first.
164 |
165 | | Service | |
166 | | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
167 | | [Heroku](https://www.heroku.com/) | [](https://heroku.com/deploy) |
168 |
169 | ## Resources
170 |
171 | - The CodeExchange repository can be found [here](https://github.com/twilio-labs/code-exchange/).
172 |
173 | ## Contributing
174 |
175 | This template is open source and welcomes contributions. All contributions are subject to our [Code of Conduct](https://github.com/twilio-labs/.github/blob/master/CODE_OF_CONDUCT.md).
176 |
177 | [Visit the project on GitHub](https://github.com/twilio-labs/sample-template-nodejs)
178 |
179 | ## License
180 |
181 | [MIT](http://www.opensource.org/licenses/mit-license.html)
182 |
183 | ## Disclaimer
184 |
185 | No warranty expressed or implied. Software is as is.
186 |
187 | [twilio]: https://www.twilio.com
188 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "99a97f30e30b97ebc159259238478bfb",
8 | "packages": [
9 | {
10 | "name": "graham-campbell/result-type",
11 | "version": "v1.0.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/GrahamCampbell/Result-Type.git",
15 | "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb",
20 | "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": "^7.0|^8.0",
25 | "phpoption/phpoption": "^1.7.3"
26 | },
27 | "require-dev": {
28 | "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0"
29 | },
30 | "type": "library",
31 | "extra": {
32 | "branch-alias": {
33 | "dev-master": "1.0-dev"
34 | }
35 | },
36 | "autoload": {
37 | "psr-4": {
38 | "GrahamCampbell\\ResultType\\": "src/"
39 | }
40 | },
41 | "notification-url": "https://packagist.org/downloads/",
42 | "license": [
43 | "MIT"
44 | ],
45 | "authors": [
46 | {
47 | "name": "Graham Campbell",
48 | "email": "graham@alt-three.com"
49 | }
50 | ],
51 | "description": "An Implementation Of The Result Type",
52 | "keywords": [
53 | "Graham Campbell",
54 | "GrahamCampbell",
55 | "Result Type",
56 | "Result-Type",
57 | "result"
58 | ],
59 | "support": {
60 | "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
61 | "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1"
62 | },
63 | "funding": [
64 | {
65 | "url": "https://github.com/GrahamCampbell",
66 | "type": "github"
67 | },
68 | {
69 | "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
70 | "type": "tidelift"
71 | }
72 | ],
73 | "time": "2020-04-13T13:17:36+00:00"
74 | },
75 | {
76 | "name": "phpoption/phpoption",
77 | "version": "1.7.5",
78 | "source": {
79 | "type": "git",
80 | "url": "https://github.com/schmittjoh/php-option.git",
81 | "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525"
82 | },
83 | "dist": {
84 | "type": "zip",
85 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525",
86 | "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525",
87 | "shasum": ""
88 | },
89 | "require": {
90 | "php": "^5.5.9 || ^7.0 || ^8.0"
91 | },
92 | "require-dev": {
93 | "bamarni/composer-bin-plugin": "^1.4.1",
94 | "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0"
95 | },
96 | "type": "library",
97 | "extra": {
98 | "branch-alias": {
99 | "dev-master": "1.7-dev"
100 | }
101 | },
102 | "autoload": {
103 | "psr-4": {
104 | "PhpOption\\": "src/PhpOption/"
105 | }
106 | },
107 | "notification-url": "https://packagist.org/downloads/",
108 | "license": [
109 | "Apache-2.0"
110 | ],
111 | "authors": [
112 | {
113 | "name": "Johannes M. Schmitt",
114 | "email": "schmittjoh@gmail.com"
115 | },
116 | {
117 | "name": "Graham Campbell",
118 | "email": "graham@alt-three.com"
119 | }
120 | ],
121 | "description": "Option Type for PHP",
122 | "keywords": [
123 | "language",
124 | "option",
125 | "php",
126 | "type"
127 | ],
128 | "support": {
129 | "issues": "https://github.com/schmittjoh/php-option/issues",
130 | "source": "https://github.com/schmittjoh/php-option/tree/1.7.5"
131 | },
132 | "funding": [
133 | {
134 | "url": "https://github.com/GrahamCampbell",
135 | "type": "github"
136 | },
137 | {
138 | "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
139 | "type": "tidelift"
140 | }
141 | ],
142 | "time": "2020-07-20T17:29:33+00:00"
143 | },
144 | {
145 | "name": "symfony/polyfill-ctype",
146 | "version": "v1.23.0",
147 | "source": {
148 | "type": "git",
149 | "url": "https://github.com/symfony/polyfill-ctype.git",
150 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
151 | },
152 | "dist": {
153 | "type": "zip",
154 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
155 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
156 | "shasum": ""
157 | },
158 | "require": {
159 | "php": ">=7.1"
160 | },
161 | "suggest": {
162 | "ext-ctype": "For best performance"
163 | },
164 | "type": "library",
165 | "extra": {
166 | "branch-alias": {
167 | "dev-main": "1.23-dev"
168 | },
169 | "thanks": {
170 | "name": "symfony/polyfill",
171 | "url": "https://github.com/symfony/polyfill"
172 | }
173 | },
174 | "autoload": {
175 | "psr-4": {
176 | "Symfony\\Polyfill\\Ctype\\": ""
177 | },
178 | "files": [
179 | "bootstrap.php"
180 | ]
181 | },
182 | "notification-url": "https://packagist.org/downloads/",
183 | "license": [
184 | "MIT"
185 | ],
186 | "authors": [
187 | {
188 | "name": "Gert de Pagter",
189 | "email": "BackEndTea@gmail.com"
190 | },
191 | {
192 | "name": "Symfony Community",
193 | "homepage": "https://symfony.com/contributors"
194 | }
195 | ],
196 | "description": "Symfony polyfill for ctype functions",
197 | "homepage": "https://symfony.com",
198 | "keywords": [
199 | "compatibility",
200 | "ctype",
201 | "polyfill",
202 | "portable"
203 | ],
204 | "support": {
205 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
206 | },
207 | "funding": [
208 | {
209 | "url": "https://symfony.com/sponsor",
210 | "type": "custom"
211 | },
212 | {
213 | "url": "https://github.com/fabpot",
214 | "type": "github"
215 | },
216 | {
217 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
218 | "type": "tidelift"
219 | }
220 | ],
221 | "time": "2021-02-19T12:13:01+00:00"
222 | },
223 | {
224 | "name": "symfony/polyfill-mbstring",
225 | "version": "v1.23.0",
226 | "source": {
227 | "type": "git",
228 | "url": "https://github.com/symfony/polyfill-mbstring.git",
229 | "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1"
230 | },
231 | "dist": {
232 | "type": "zip",
233 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
234 | "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
235 | "shasum": ""
236 | },
237 | "require": {
238 | "php": ">=7.1"
239 | },
240 | "suggest": {
241 | "ext-mbstring": "For best performance"
242 | },
243 | "type": "library",
244 | "extra": {
245 | "branch-alias": {
246 | "dev-main": "1.23-dev"
247 | },
248 | "thanks": {
249 | "name": "symfony/polyfill",
250 | "url": "https://github.com/symfony/polyfill"
251 | }
252 | },
253 | "autoload": {
254 | "psr-4": {
255 | "Symfony\\Polyfill\\Mbstring\\": ""
256 | },
257 | "files": [
258 | "bootstrap.php"
259 | ]
260 | },
261 | "notification-url": "https://packagist.org/downloads/",
262 | "license": [
263 | "MIT"
264 | ],
265 | "authors": [
266 | {
267 | "name": "Nicolas Grekas",
268 | "email": "p@tchwork.com"
269 | },
270 | {
271 | "name": "Symfony Community",
272 | "homepage": "https://symfony.com/contributors"
273 | }
274 | ],
275 | "description": "Symfony polyfill for the Mbstring extension",
276 | "homepage": "https://symfony.com",
277 | "keywords": [
278 | "compatibility",
279 | "mbstring",
280 | "polyfill",
281 | "portable",
282 | "shim"
283 | ],
284 | "support": {
285 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0"
286 | },
287 | "funding": [
288 | {
289 | "url": "https://symfony.com/sponsor",
290 | "type": "custom"
291 | },
292 | {
293 | "url": "https://github.com/fabpot",
294 | "type": "github"
295 | },
296 | {
297 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
298 | "type": "tidelift"
299 | }
300 | ],
301 | "time": "2021-05-27T09:27:20+00:00"
302 | },
303 | {
304 | "name": "symfony/polyfill-php80",
305 | "version": "v1.23.0",
306 | "source": {
307 | "type": "git",
308 | "url": "https://github.com/symfony/polyfill-php80.git",
309 | "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0"
310 | },
311 | "dist": {
312 | "type": "zip",
313 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0",
314 | "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0",
315 | "shasum": ""
316 | },
317 | "require": {
318 | "php": ">=7.1"
319 | },
320 | "type": "library",
321 | "extra": {
322 | "branch-alias": {
323 | "dev-main": "1.23-dev"
324 | },
325 | "thanks": {
326 | "name": "symfony/polyfill",
327 | "url": "https://github.com/symfony/polyfill"
328 | }
329 | },
330 | "autoload": {
331 | "psr-4": {
332 | "Symfony\\Polyfill\\Php80\\": ""
333 | },
334 | "files": [
335 | "bootstrap.php"
336 | ],
337 | "classmap": [
338 | "Resources/stubs"
339 | ]
340 | },
341 | "notification-url": "https://packagist.org/downloads/",
342 | "license": [
343 | "MIT"
344 | ],
345 | "authors": [
346 | {
347 | "name": "Ion Bazan",
348 | "email": "ion.bazan@gmail.com"
349 | },
350 | {
351 | "name": "Nicolas Grekas",
352 | "email": "p@tchwork.com"
353 | },
354 | {
355 | "name": "Symfony Community",
356 | "homepage": "https://symfony.com/contributors"
357 | }
358 | ],
359 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
360 | "homepage": "https://symfony.com",
361 | "keywords": [
362 | "compatibility",
363 | "polyfill",
364 | "portable",
365 | "shim"
366 | ],
367 | "support": {
368 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0"
369 | },
370 | "funding": [
371 | {
372 | "url": "https://symfony.com/sponsor",
373 | "type": "custom"
374 | },
375 | {
376 | "url": "https://github.com/fabpot",
377 | "type": "github"
378 | },
379 | {
380 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
381 | "type": "tidelift"
382 | }
383 | ],
384 | "time": "2021-02-19T12:13:01+00:00"
385 | },
386 | {
387 | "name": "twilio/sdk",
388 | "version": "6.24.1",
389 | "source": {
390 | "type": "git",
391 | "url": "https://github.com/twilio/twilio-php.git",
392 | "reference": "3438bcdb42a8fabcfaa081670d5924b868016148"
393 | },
394 | "dist": {
395 | "type": "zip",
396 | "url": "https://api.github.com/repos/twilio/twilio-php/zipball/3438bcdb42a8fabcfaa081670d5924b868016148",
397 | "reference": "3438bcdb42a8fabcfaa081670d5924b868016148",
398 | "shasum": ""
399 | },
400 | "require": {
401 | "php": ">=7.1.0"
402 | },
403 | "require-dev": {
404 | "guzzlehttp/guzzle": "^6.3 || ^7.0",
405 | "phpunit/phpunit": ">=4.5",
406 | "theseer/phpdox": "^0.12.0"
407 | },
408 | "suggest": {
409 | "guzzlehttp/guzzle": "An HTTP client to execute the API requests"
410 | },
411 | "type": "library",
412 | "autoload": {
413 | "psr-4": {
414 | "Twilio\\": "src/Twilio/"
415 | }
416 | },
417 | "notification-url": "https://packagist.org/downloads/",
418 | "license": [
419 | "MIT"
420 | ],
421 | "authors": [
422 | {
423 | "name": "Twilio API Team",
424 | "email": "api@twilio.com"
425 | }
426 | ],
427 | "description": "A PHP wrapper for Twilio's API",
428 | "homepage": "http://github.com/twilio/twilio-php",
429 | "keywords": [
430 | "api",
431 | "sms",
432 | "twilio"
433 | ],
434 | "support": {
435 | "issues": "https://github.com/twilio/twilio-php/issues",
436 | "source": "https://github.com/twilio/twilio-php/tree/6.24.1"
437 | },
438 | "time": "2021-06-02T20:26:58+00:00"
439 | },
440 | {
441 | "name": "vlucas/phpdotenv",
442 | "version": "v5.3.0",
443 | "source": {
444 | "type": "git",
445 | "url": "https://github.com/vlucas/phpdotenv.git",
446 | "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56"
447 | },
448 | "dist": {
449 | "type": "zip",
450 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
451 | "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
452 | "shasum": ""
453 | },
454 | "require": {
455 | "ext-pcre": "*",
456 | "graham-campbell/result-type": "^1.0.1",
457 | "php": "^7.1.3 || ^8.0",
458 | "phpoption/phpoption": "^1.7.4",
459 | "symfony/polyfill-ctype": "^1.17",
460 | "symfony/polyfill-mbstring": "^1.17",
461 | "symfony/polyfill-php80": "^1.17"
462 | },
463 | "require-dev": {
464 | "bamarni/composer-bin-plugin": "^1.4.1",
465 | "ext-filter": "*",
466 | "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1"
467 | },
468 | "suggest": {
469 | "ext-filter": "Required to use the boolean validator."
470 | },
471 | "type": "library",
472 | "extra": {
473 | "branch-alias": {
474 | "dev-master": "5.3-dev"
475 | }
476 | },
477 | "autoload": {
478 | "psr-4": {
479 | "Dotenv\\": "src/"
480 | }
481 | },
482 | "notification-url": "https://packagist.org/downloads/",
483 | "license": [
484 | "BSD-3-Clause"
485 | ],
486 | "authors": [
487 | {
488 | "name": "Graham Campbell",
489 | "email": "graham@alt-three.com",
490 | "homepage": "https://gjcampbell.co.uk/"
491 | },
492 | {
493 | "name": "Vance Lucas",
494 | "email": "vance@vancelucas.com",
495 | "homepage": "https://vancelucas.com/"
496 | }
497 | ],
498 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
499 | "keywords": [
500 | "dotenv",
501 | "env",
502 | "environment"
503 | ],
504 | "support": {
505 | "issues": "https://github.com/vlucas/phpdotenv/issues",
506 | "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0"
507 | },
508 | "funding": [
509 | {
510 | "url": "https://github.com/GrahamCampbell",
511 | "type": "github"
512 | },
513 | {
514 | "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
515 | "type": "tidelift"
516 | }
517 | ],
518 | "time": "2021-01-20T15:23:13+00:00"
519 | }
520 | ],
521 | "packages-dev": [
522 | {
523 | "name": "composer/semver",
524 | "version": "3.2.5",
525 | "source": {
526 | "type": "git",
527 | "url": "https://github.com/composer/semver.git",
528 | "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9"
529 | },
530 | "dist": {
531 | "type": "zip",
532 | "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9",
533 | "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9",
534 | "shasum": ""
535 | },
536 | "require": {
537 | "php": "^5.3.2 || ^7.0 || ^8.0"
538 | },
539 | "require-dev": {
540 | "phpstan/phpstan": "^0.12.54",
541 | "symfony/phpunit-bridge": "^4.2 || ^5"
542 | },
543 | "type": "library",
544 | "extra": {
545 | "branch-alias": {
546 | "dev-main": "3.x-dev"
547 | }
548 | },
549 | "autoload": {
550 | "psr-4": {
551 | "Composer\\Semver\\": "src"
552 | }
553 | },
554 | "notification-url": "https://packagist.org/downloads/",
555 | "license": [
556 | "MIT"
557 | ],
558 | "authors": [
559 | {
560 | "name": "Nils Adermann",
561 | "email": "naderman@naderman.de",
562 | "homepage": "http://www.naderman.de"
563 | },
564 | {
565 | "name": "Jordi Boggiano",
566 | "email": "j.boggiano@seld.be",
567 | "homepage": "http://seld.be"
568 | },
569 | {
570 | "name": "Rob Bast",
571 | "email": "rob.bast@gmail.com",
572 | "homepage": "http://robbast.nl"
573 | }
574 | ],
575 | "description": "Semver library that offers utilities, version constraint parsing and validation.",
576 | "keywords": [
577 | "semantic",
578 | "semver",
579 | "validation",
580 | "versioning"
581 | ],
582 | "support": {
583 | "irc": "irc://irc.freenode.org/composer",
584 | "issues": "https://github.com/composer/semver/issues",
585 | "source": "https://github.com/composer/semver/tree/3.2.5"
586 | },
587 | "funding": [
588 | {
589 | "url": "https://packagist.com",
590 | "type": "custom"
591 | },
592 | {
593 | "url": "https://github.com/composer",
594 | "type": "github"
595 | },
596 | {
597 | "url": "https://tidelift.com/funding/github/packagist/composer/composer",
598 | "type": "tidelift"
599 | }
600 | ],
601 | "time": "2021-05-24T12:41:47+00:00"
602 | },
603 | {
604 | "name": "composer/xdebug-handler",
605 | "version": "2.0.1",
606 | "source": {
607 | "type": "git",
608 | "url": "https://github.com/composer/xdebug-handler.git",
609 | "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496"
610 | },
611 | "dist": {
612 | "type": "zip",
613 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496",
614 | "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496",
615 | "shasum": ""
616 | },
617 | "require": {
618 | "php": "^5.3.2 || ^7.0 || ^8.0",
619 | "psr/log": "^1.0"
620 | },
621 | "require-dev": {
622 | "phpstan/phpstan": "^0.12.55",
623 | "symfony/phpunit-bridge": "^4.2 || ^5"
624 | },
625 | "type": "library",
626 | "autoload": {
627 | "psr-4": {
628 | "Composer\\XdebugHandler\\": "src"
629 | }
630 | },
631 | "notification-url": "https://packagist.org/downloads/",
632 | "license": [
633 | "MIT"
634 | ],
635 | "authors": [
636 | {
637 | "name": "John Stevenson",
638 | "email": "john-stevenson@blueyonder.co.uk"
639 | }
640 | ],
641 | "description": "Restarts a process without Xdebug.",
642 | "keywords": [
643 | "Xdebug",
644 | "performance"
645 | ],
646 | "support": {
647 | "irc": "irc://irc.freenode.org/composer",
648 | "issues": "https://github.com/composer/xdebug-handler/issues",
649 | "source": "https://github.com/composer/xdebug-handler/tree/2.0.1"
650 | },
651 | "funding": [
652 | {
653 | "url": "https://packagist.com",
654 | "type": "custom"
655 | },
656 | {
657 | "url": "https://github.com/composer",
658 | "type": "github"
659 | },
660 | {
661 | "url": "https://tidelift.com/funding/github/packagist/composer/composer",
662 | "type": "tidelift"
663 | }
664 | ],
665 | "time": "2021-05-05T19:37:51+00:00"
666 | },
667 | {
668 | "name": "doctrine/annotations",
669 | "version": "1.13.1",
670 | "source": {
671 | "type": "git",
672 | "url": "https://github.com/doctrine/annotations.git",
673 | "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f"
674 | },
675 | "dist": {
676 | "type": "zip",
677 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f",
678 | "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f",
679 | "shasum": ""
680 | },
681 | "require": {
682 | "doctrine/lexer": "1.*",
683 | "ext-tokenizer": "*",
684 | "php": "^7.1 || ^8.0",
685 | "psr/cache": "^1 || ^2 || ^3"
686 | },
687 | "require-dev": {
688 | "doctrine/cache": "^1.11 || ^2.0",
689 | "doctrine/coding-standard": "^6.0 || ^8.1",
690 | "phpstan/phpstan": "^0.12.20",
691 | "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5",
692 | "symfony/cache": "^4.4 || ^5.2"
693 | },
694 | "type": "library",
695 | "autoload": {
696 | "psr-4": {
697 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
698 | }
699 | },
700 | "notification-url": "https://packagist.org/downloads/",
701 | "license": [
702 | "MIT"
703 | ],
704 | "authors": [
705 | {
706 | "name": "Guilherme Blanco",
707 | "email": "guilhermeblanco@gmail.com"
708 | },
709 | {
710 | "name": "Roman Borschel",
711 | "email": "roman@code-factory.org"
712 | },
713 | {
714 | "name": "Benjamin Eberlei",
715 | "email": "kontakt@beberlei.de"
716 | },
717 | {
718 | "name": "Jonathan Wage",
719 | "email": "jonwage@gmail.com"
720 | },
721 | {
722 | "name": "Johannes Schmitt",
723 | "email": "schmittjoh@gmail.com"
724 | }
725 | ],
726 | "description": "Docblock Annotations Parser",
727 | "homepage": "https://www.doctrine-project.org/projects/annotations.html",
728 | "keywords": [
729 | "annotations",
730 | "docblock",
731 | "parser"
732 | ],
733 | "support": {
734 | "issues": "https://github.com/doctrine/annotations/issues",
735 | "source": "https://github.com/doctrine/annotations/tree/1.13.1"
736 | },
737 | "time": "2021-05-16T18:07:53+00:00"
738 | },
739 | {
740 | "name": "doctrine/instantiator",
741 | "version": "1.4.0",
742 | "source": {
743 | "type": "git",
744 | "url": "https://github.com/doctrine/instantiator.git",
745 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
746 | },
747 | "dist": {
748 | "type": "zip",
749 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
750 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
751 | "shasum": ""
752 | },
753 | "require": {
754 | "php": "^7.1 || ^8.0"
755 | },
756 | "require-dev": {
757 | "doctrine/coding-standard": "^8.0",
758 | "ext-pdo": "*",
759 | "ext-phar": "*",
760 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
761 | "phpstan/phpstan": "^0.12",
762 | "phpstan/phpstan-phpunit": "^0.12",
763 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
764 | },
765 | "type": "library",
766 | "autoload": {
767 | "psr-4": {
768 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
769 | }
770 | },
771 | "notification-url": "https://packagist.org/downloads/",
772 | "license": [
773 | "MIT"
774 | ],
775 | "authors": [
776 | {
777 | "name": "Marco Pivetta",
778 | "email": "ocramius@gmail.com",
779 | "homepage": "https://ocramius.github.io/"
780 | }
781 | ],
782 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
783 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
784 | "keywords": [
785 | "constructor",
786 | "instantiate"
787 | ],
788 | "support": {
789 | "issues": "https://github.com/doctrine/instantiator/issues",
790 | "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
791 | },
792 | "funding": [
793 | {
794 | "url": "https://www.doctrine-project.org/sponsorship.html",
795 | "type": "custom"
796 | },
797 | {
798 | "url": "https://www.patreon.com/phpdoctrine",
799 | "type": "patreon"
800 | },
801 | {
802 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
803 | "type": "tidelift"
804 | }
805 | ],
806 | "time": "2020-11-10T18:47:58+00:00"
807 | },
808 | {
809 | "name": "doctrine/lexer",
810 | "version": "1.2.1",
811 | "source": {
812 | "type": "git",
813 | "url": "https://github.com/doctrine/lexer.git",
814 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
815 | },
816 | "dist": {
817 | "type": "zip",
818 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
819 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
820 | "shasum": ""
821 | },
822 | "require": {
823 | "php": "^7.2 || ^8.0"
824 | },
825 | "require-dev": {
826 | "doctrine/coding-standard": "^6.0",
827 | "phpstan/phpstan": "^0.11.8",
828 | "phpunit/phpunit": "^8.2"
829 | },
830 | "type": "library",
831 | "extra": {
832 | "branch-alias": {
833 | "dev-master": "1.2.x-dev"
834 | }
835 | },
836 | "autoload": {
837 | "psr-4": {
838 | "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
839 | }
840 | },
841 | "notification-url": "https://packagist.org/downloads/",
842 | "license": [
843 | "MIT"
844 | ],
845 | "authors": [
846 | {
847 | "name": "Guilherme Blanco",
848 | "email": "guilhermeblanco@gmail.com"
849 | },
850 | {
851 | "name": "Roman Borschel",
852 | "email": "roman@code-factory.org"
853 | },
854 | {
855 | "name": "Johannes Schmitt",
856 | "email": "schmittjoh@gmail.com"
857 | }
858 | ],
859 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
860 | "homepage": "https://www.doctrine-project.org/projects/lexer.html",
861 | "keywords": [
862 | "annotations",
863 | "docblock",
864 | "lexer",
865 | "parser",
866 | "php"
867 | ],
868 | "support": {
869 | "issues": "https://github.com/doctrine/lexer/issues",
870 | "source": "https://github.com/doctrine/lexer/tree/1.2.1"
871 | },
872 | "funding": [
873 | {
874 | "url": "https://www.doctrine-project.org/sponsorship.html",
875 | "type": "custom"
876 | },
877 | {
878 | "url": "https://www.patreon.com/phpdoctrine",
879 | "type": "patreon"
880 | },
881 | {
882 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
883 | "type": "tidelift"
884 | }
885 | ],
886 | "time": "2020-05-25T17:44:05+00:00"
887 | },
888 | {
889 | "name": "friendsofphp/php-cs-fixer",
890 | "version": "v2.19.0",
891 | "source": {
892 | "type": "git",
893 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
894 | "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b"
895 | },
896 | "dist": {
897 | "type": "zip",
898 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d5b8a9d852b292c2f8a035200fa6844b1f82300b",
899 | "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b",
900 | "shasum": ""
901 | },
902 | "require": {
903 | "composer/semver": "^1.4 || ^2.0 || ^3.0",
904 | "composer/xdebug-handler": "^1.2 || ^2.0",
905 | "doctrine/annotations": "^1.2",
906 | "ext-json": "*",
907 | "ext-tokenizer": "*",
908 | "php": "^5.6 || ^7.0 || ^8.0",
909 | "php-cs-fixer/diff": "^1.3",
910 | "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
911 | "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
912 | "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
913 | "symfony/finder": "^3.0 || ^4.0 || ^5.0",
914 | "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
915 | "symfony/polyfill-php70": "^1.0",
916 | "symfony/polyfill-php72": "^1.4",
917 | "symfony/process": "^3.0 || ^4.0 || ^5.0",
918 | "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
919 | },
920 | "require-dev": {
921 | "justinrainbow/json-schema": "^5.0",
922 | "keradus/cli-executor": "^1.4",
923 | "mikey179/vfsstream": "^1.6",
924 | "php-coveralls/php-coveralls": "^2.4.2",
925 | "php-cs-fixer/accessible-object": "^1.0",
926 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
927 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
928 | "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
929 | "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
930 | "phpunitgoodpractices/polyfill": "^1.5",
931 | "phpunitgoodpractices/traits": "^1.9.1",
932 | "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
933 | "symfony/phpunit-bridge": "^5.2.1",
934 | "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
935 | },
936 | "suggest": {
937 | "ext-dom": "For handling output formats in XML",
938 | "ext-mbstring": "For handling non-UTF8 characters.",
939 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
940 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
941 | "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
942 | },
943 | "bin": [
944 | "php-cs-fixer"
945 | ],
946 | "type": "application",
947 | "extra": {
948 | "branch-alias": {
949 | "dev-master": "2.19-dev"
950 | }
951 | },
952 | "autoload": {
953 | "psr-4": {
954 | "PhpCsFixer\\": "src/"
955 | },
956 | "classmap": [
957 | "tests/Test/AbstractFixerTestCase.php",
958 | "tests/Test/AbstractIntegrationCaseFactory.php",
959 | "tests/Test/AbstractIntegrationTestCase.php",
960 | "tests/Test/Assert/AssertTokensTrait.php",
961 | "tests/Test/IntegrationCase.php",
962 | "tests/Test/IntegrationCaseFactory.php",
963 | "tests/Test/IntegrationCaseFactoryInterface.php",
964 | "tests/Test/InternalIntegrationCaseFactory.php",
965 | "tests/Test/IsIdenticalConstraint.php",
966 | "tests/Test/TokensWithObservedTransformers.php",
967 | "tests/TestCase.php"
968 | ]
969 | },
970 | "notification-url": "https://packagist.org/downloads/",
971 | "license": [
972 | "MIT"
973 | ],
974 | "authors": [
975 | {
976 | "name": "Fabien Potencier",
977 | "email": "fabien@symfony.com"
978 | },
979 | {
980 | "name": "Dariusz Rumiński",
981 | "email": "dariusz.ruminski@gmail.com"
982 | }
983 | ],
984 | "description": "A tool to automatically fix PHP code style",
985 | "support": {
986 | "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
987 | "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.0"
988 | },
989 | "funding": [
990 | {
991 | "url": "https://github.com/keradus",
992 | "type": "github"
993 | }
994 | ],
995 | "time": "2021-05-03T21:43:24+00:00"
996 | },
997 | {
998 | "name": "hamcrest/hamcrest-php",
999 | "version": "v2.0.1",
1000 | "source": {
1001 | "type": "git",
1002 | "url": "https://github.com/hamcrest/hamcrest-php.git",
1003 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
1004 | },
1005 | "dist": {
1006 | "type": "zip",
1007 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
1008 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
1009 | "shasum": ""
1010 | },
1011 | "require": {
1012 | "php": "^5.3|^7.0|^8.0"
1013 | },
1014 | "replace": {
1015 | "cordoval/hamcrest-php": "*",
1016 | "davedevelopment/hamcrest-php": "*",
1017 | "kodova/hamcrest-php": "*"
1018 | },
1019 | "require-dev": {
1020 | "phpunit/php-file-iterator": "^1.4 || ^2.0",
1021 | "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
1022 | },
1023 | "type": "library",
1024 | "extra": {
1025 | "branch-alias": {
1026 | "dev-master": "2.1-dev"
1027 | }
1028 | },
1029 | "autoload": {
1030 | "classmap": [
1031 | "hamcrest"
1032 | ]
1033 | },
1034 | "notification-url": "https://packagist.org/downloads/",
1035 | "license": [
1036 | "BSD-3-Clause"
1037 | ],
1038 | "description": "This is the PHP port of Hamcrest Matchers",
1039 | "keywords": [
1040 | "test"
1041 | ],
1042 | "support": {
1043 | "issues": "https://github.com/hamcrest/hamcrest-php/issues",
1044 | "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
1045 | },
1046 | "time": "2020-07-09T08:09:16+00:00"
1047 | },
1048 | {
1049 | "name": "mockery/mockery",
1050 | "version": "1.4.3",
1051 | "source": {
1052 | "type": "git",
1053 | "url": "https://github.com/mockery/mockery.git",
1054 | "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea"
1055 | },
1056 | "dist": {
1057 | "type": "zip",
1058 | "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea",
1059 | "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea",
1060 | "shasum": ""
1061 | },
1062 | "require": {
1063 | "hamcrest/hamcrest-php": "^2.0.1",
1064 | "lib-pcre": ">=7.0",
1065 | "php": "^7.3 || ^8.0"
1066 | },
1067 | "conflict": {
1068 | "phpunit/phpunit": "<8.0"
1069 | },
1070 | "require-dev": {
1071 | "phpunit/phpunit": "^8.5 || ^9.3"
1072 | },
1073 | "type": "library",
1074 | "extra": {
1075 | "branch-alias": {
1076 | "dev-master": "1.4.x-dev"
1077 | }
1078 | },
1079 | "autoload": {
1080 | "psr-0": {
1081 | "Mockery": "library/"
1082 | }
1083 | },
1084 | "notification-url": "https://packagist.org/downloads/",
1085 | "license": [
1086 | "BSD-3-Clause"
1087 | ],
1088 | "authors": [
1089 | {
1090 | "name": "Pádraic Brady",
1091 | "email": "padraic.brady@gmail.com",
1092 | "homepage": "http://blog.astrumfutura.com"
1093 | },
1094 | {
1095 | "name": "Dave Marshall",
1096 | "email": "dave.marshall@atstsolutions.co.uk",
1097 | "homepage": "http://davedevelopment.co.uk"
1098 | }
1099 | ],
1100 | "description": "Mockery is a simple yet flexible PHP mock object framework",
1101 | "homepage": "https://github.com/mockery/mockery",
1102 | "keywords": [
1103 | "BDD",
1104 | "TDD",
1105 | "library",
1106 | "mock",
1107 | "mock objects",
1108 | "mockery",
1109 | "stub",
1110 | "test",
1111 | "test double",
1112 | "testing"
1113 | ],
1114 | "support": {
1115 | "issues": "https://github.com/mockery/mockery/issues",
1116 | "source": "https://github.com/mockery/mockery/tree/1.4.3"
1117 | },
1118 | "time": "2021-02-24T09:51:49+00:00"
1119 | },
1120 | {
1121 | "name": "myclabs/deep-copy",
1122 | "version": "1.10.2",
1123 | "source": {
1124 | "type": "git",
1125 | "url": "https://github.com/myclabs/DeepCopy.git",
1126 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
1127 | },
1128 | "dist": {
1129 | "type": "zip",
1130 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
1131 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
1132 | "shasum": ""
1133 | },
1134 | "require": {
1135 | "php": "^7.1 || ^8.0"
1136 | },
1137 | "replace": {
1138 | "myclabs/deep-copy": "self.version"
1139 | },
1140 | "require-dev": {
1141 | "doctrine/collections": "^1.0",
1142 | "doctrine/common": "^2.6",
1143 | "phpunit/phpunit": "^7.1"
1144 | },
1145 | "type": "library",
1146 | "autoload": {
1147 | "psr-4": {
1148 | "DeepCopy\\": "src/DeepCopy/"
1149 | },
1150 | "files": [
1151 | "src/DeepCopy/deep_copy.php"
1152 | ]
1153 | },
1154 | "notification-url": "https://packagist.org/downloads/",
1155 | "license": [
1156 | "MIT"
1157 | ],
1158 | "description": "Create deep copies (clones) of your objects",
1159 | "keywords": [
1160 | "clone",
1161 | "copy",
1162 | "duplicate",
1163 | "object",
1164 | "object graph"
1165 | ],
1166 | "support": {
1167 | "issues": "https://github.com/myclabs/DeepCopy/issues",
1168 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
1169 | },
1170 | "funding": [
1171 | {
1172 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
1173 | "type": "tidelift"
1174 | }
1175 | ],
1176 | "time": "2020-11-13T09:40:50+00:00"
1177 | },
1178 | {
1179 | "name": "nikic/php-parser",
1180 | "version": "v4.10.5",
1181 | "source": {
1182 | "type": "git",
1183 | "url": "https://github.com/nikic/PHP-Parser.git",
1184 | "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f"
1185 | },
1186 | "dist": {
1187 | "type": "zip",
1188 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f",
1189 | "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f",
1190 | "shasum": ""
1191 | },
1192 | "require": {
1193 | "ext-tokenizer": "*",
1194 | "php": ">=7.0"
1195 | },
1196 | "require-dev": {
1197 | "ircmaxell/php-yacc": "^0.0.7",
1198 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
1199 | },
1200 | "bin": [
1201 | "bin/php-parse"
1202 | ],
1203 | "type": "library",
1204 | "extra": {
1205 | "branch-alias": {
1206 | "dev-master": "4.9-dev"
1207 | }
1208 | },
1209 | "autoload": {
1210 | "psr-4": {
1211 | "PhpParser\\": "lib/PhpParser"
1212 | }
1213 | },
1214 | "notification-url": "https://packagist.org/downloads/",
1215 | "license": [
1216 | "BSD-3-Clause"
1217 | ],
1218 | "authors": [
1219 | {
1220 | "name": "Nikita Popov"
1221 | }
1222 | ],
1223 | "description": "A PHP parser written in PHP",
1224 | "keywords": [
1225 | "parser",
1226 | "php"
1227 | ],
1228 | "support": {
1229 | "issues": "https://github.com/nikic/PHP-Parser/issues",
1230 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5"
1231 | },
1232 | "time": "2021-05-03T19:11:20+00:00"
1233 | },
1234 | {
1235 | "name": "phar-io/manifest",
1236 | "version": "2.0.1",
1237 | "source": {
1238 | "type": "git",
1239 | "url": "https://github.com/phar-io/manifest.git",
1240 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
1241 | },
1242 | "dist": {
1243 | "type": "zip",
1244 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
1245 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
1246 | "shasum": ""
1247 | },
1248 | "require": {
1249 | "ext-dom": "*",
1250 | "ext-phar": "*",
1251 | "ext-xmlwriter": "*",
1252 | "phar-io/version": "^3.0.1",
1253 | "php": "^7.2 || ^8.0"
1254 | },
1255 | "type": "library",
1256 | "extra": {
1257 | "branch-alias": {
1258 | "dev-master": "2.0.x-dev"
1259 | }
1260 | },
1261 | "autoload": {
1262 | "classmap": [
1263 | "src/"
1264 | ]
1265 | },
1266 | "notification-url": "https://packagist.org/downloads/",
1267 | "license": [
1268 | "BSD-3-Clause"
1269 | ],
1270 | "authors": [
1271 | {
1272 | "name": "Arne Blankerts",
1273 | "email": "arne@blankerts.de",
1274 | "role": "Developer"
1275 | },
1276 | {
1277 | "name": "Sebastian Heuer",
1278 | "email": "sebastian@phpeople.de",
1279 | "role": "Developer"
1280 | },
1281 | {
1282 | "name": "Sebastian Bergmann",
1283 | "email": "sebastian@phpunit.de",
1284 | "role": "Developer"
1285 | }
1286 | ],
1287 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
1288 | "support": {
1289 | "issues": "https://github.com/phar-io/manifest/issues",
1290 | "source": "https://github.com/phar-io/manifest/tree/master"
1291 | },
1292 | "time": "2020-06-27T14:33:11+00:00"
1293 | },
1294 | {
1295 | "name": "phar-io/version",
1296 | "version": "3.1.0",
1297 | "source": {
1298 | "type": "git",
1299 | "url": "https://github.com/phar-io/version.git",
1300 | "reference": "bae7c545bef187884426f042434e561ab1ddb182"
1301 | },
1302 | "dist": {
1303 | "type": "zip",
1304 | "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
1305 | "reference": "bae7c545bef187884426f042434e561ab1ddb182",
1306 | "shasum": ""
1307 | },
1308 | "require": {
1309 | "php": "^7.2 || ^8.0"
1310 | },
1311 | "type": "library",
1312 | "autoload": {
1313 | "classmap": [
1314 | "src/"
1315 | ]
1316 | },
1317 | "notification-url": "https://packagist.org/downloads/",
1318 | "license": [
1319 | "BSD-3-Clause"
1320 | ],
1321 | "authors": [
1322 | {
1323 | "name": "Arne Blankerts",
1324 | "email": "arne@blankerts.de",
1325 | "role": "Developer"
1326 | },
1327 | {
1328 | "name": "Sebastian Heuer",
1329 | "email": "sebastian@phpeople.de",
1330 | "role": "Developer"
1331 | },
1332 | {
1333 | "name": "Sebastian Bergmann",
1334 | "email": "sebastian@phpunit.de",
1335 | "role": "Developer"
1336 | }
1337 | ],
1338 | "description": "Library for handling version information and constraints",
1339 | "support": {
1340 | "issues": "https://github.com/phar-io/version/issues",
1341 | "source": "https://github.com/phar-io/version/tree/3.1.0"
1342 | },
1343 | "time": "2021-02-23T14:00:09+00:00"
1344 | },
1345 | {
1346 | "name": "php-cs-fixer/diff",
1347 | "version": "v1.3.1",
1348 | "source": {
1349 | "type": "git",
1350 | "url": "https://github.com/PHP-CS-Fixer/diff.git",
1351 | "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
1352 | },
1353 | "dist": {
1354 | "type": "zip",
1355 | "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
1356 | "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
1357 | "shasum": ""
1358 | },
1359 | "require": {
1360 | "php": "^5.6 || ^7.0 || ^8.0"
1361 | },
1362 | "require-dev": {
1363 | "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
1364 | "symfony/process": "^3.3"
1365 | },
1366 | "type": "library",
1367 | "autoload": {
1368 | "classmap": [
1369 | "src/"
1370 | ]
1371 | },
1372 | "notification-url": "https://packagist.org/downloads/",
1373 | "license": [
1374 | "BSD-3-Clause"
1375 | ],
1376 | "authors": [
1377 | {
1378 | "name": "Sebastian Bergmann",
1379 | "email": "sebastian@phpunit.de"
1380 | },
1381 | {
1382 | "name": "Kore Nordmann",
1383 | "email": "mail@kore-nordmann.de"
1384 | },
1385 | {
1386 | "name": "SpacePossum"
1387 | }
1388 | ],
1389 | "description": "sebastian/diff v2 backport support for PHP5.6",
1390 | "homepage": "https://github.com/PHP-CS-Fixer",
1391 | "keywords": [
1392 | "diff"
1393 | ],
1394 | "support": {
1395 | "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
1396 | "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
1397 | },
1398 | "time": "2020-10-14T08:39:05+00:00"
1399 | },
1400 | {
1401 | "name": "phpdocumentor/reflection-common",
1402 | "version": "2.2.0",
1403 | "source": {
1404 | "type": "git",
1405 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
1406 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
1407 | },
1408 | "dist": {
1409 | "type": "zip",
1410 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
1411 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
1412 | "shasum": ""
1413 | },
1414 | "require": {
1415 | "php": "^7.2 || ^8.0"
1416 | },
1417 | "type": "library",
1418 | "extra": {
1419 | "branch-alias": {
1420 | "dev-2.x": "2.x-dev"
1421 | }
1422 | },
1423 | "autoload": {
1424 | "psr-4": {
1425 | "phpDocumentor\\Reflection\\": "src/"
1426 | }
1427 | },
1428 | "notification-url": "https://packagist.org/downloads/",
1429 | "license": [
1430 | "MIT"
1431 | ],
1432 | "authors": [
1433 | {
1434 | "name": "Jaap van Otterdijk",
1435 | "email": "opensource@ijaap.nl"
1436 | }
1437 | ],
1438 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
1439 | "homepage": "http://www.phpdoc.org",
1440 | "keywords": [
1441 | "FQSEN",
1442 | "phpDocumentor",
1443 | "phpdoc",
1444 | "reflection",
1445 | "static analysis"
1446 | ],
1447 | "support": {
1448 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
1449 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
1450 | },
1451 | "time": "2020-06-27T09:03:43+00:00"
1452 | },
1453 | {
1454 | "name": "phpdocumentor/reflection-docblock",
1455 | "version": "5.2.2",
1456 | "source": {
1457 | "type": "git",
1458 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
1459 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
1460 | },
1461 | "dist": {
1462 | "type": "zip",
1463 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
1464 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
1465 | "shasum": ""
1466 | },
1467 | "require": {
1468 | "ext-filter": "*",
1469 | "php": "^7.2 || ^8.0",
1470 | "phpdocumentor/reflection-common": "^2.2",
1471 | "phpdocumentor/type-resolver": "^1.3",
1472 | "webmozart/assert": "^1.9.1"
1473 | },
1474 | "require-dev": {
1475 | "mockery/mockery": "~1.3.2"
1476 | },
1477 | "type": "library",
1478 | "extra": {
1479 | "branch-alias": {
1480 | "dev-master": "5.x-dev"
1481 | }
1482 | },
1483 | "autoload": {
1484 | "psr-4": {
1485 | "phpDocumentor\\Reflection\\": "src"
1486 | }
1487 | },
1488 | "notification-url": "https://packagist.org/downloads/",
1489 | "license": [
1490 | "MIT"
1491 | ],
1492 | "authors": [
1493 | {
1494 | "name": "Mike van Riel",
1495 | "email": "me@mikevanriel.com"
1496 | },
1497 | {
1498 | "name": "Jaap van Otterdijk",
1499 | "email": "account@ijaap.nl"
1500 | }
1501 | ],
1502 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1503 | "support": {
1504 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
1505 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
1506 | },
1507 | "time": "2020-09-03T19:13:55+00:00"
1508 | },
1509 | {
1510 | "name": "phpdocumentor/type-resolver",
1511 | "version": "1.4.0",
1512 | "source": {
1513 | "type": "git",
1514 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
1515 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
1516 | },
1517 | "dist": {
1518 | "type": "zip",
1519 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
1520 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
1521 | "shasum": ""
1522 | },
1523 | "require": {
1524 | "php": "^7.2 || ^8.0",
1525 | "phpdocumentor/reflection-common": "^2.0"
1526 | },
1527 | "require-dev": {
1528 | "ext-tokenizer": "*"
1529 | },
1530 | "type": "library",
1531 | "extra": {
1532 | "branch-alias": {
1533 | "dev-1.x": "1.x-dev"
1534 | }
1535 | },
1536 | "autoload": {
1537 | "psr-4": {
1538 | "phpDocumentor\\Reflection\\": "src"
1539 | }
1540 | },
1541 | "notification-url": "https://packagist.org/downloads/",
1542 | "license": [
1543 | "MIT"
1544 | ],
1545 | "authors": [
1546 | {
1547 | "name": "Mike van Riel",
1548 | "email": "me@mikevanriel.com"
1549 | }
1550 | ],
1551 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
1552 | "support": {
1553 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
1554 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
1555 | },
1556 | "time": "2020-09-17T18:55:26+00:00"
1557 | },
1558 | {
1559 | "name": "phpspec/prophecy",
1560 | "version": "1.13.0",
1561 | "source": {
1562 | "type": "git",
1563 | "url": "https://github.com/phpspec/prophecy.git",
1564 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
1565 | },
1566 | "dist": {
1567 | "type": "zip",
1568 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
1569 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
1570 | "shasum": ""
1571 | },
1572 | "require": {
1573 | "doctrine/instantiator": "^1.2",
1574 | "php": "^7.2 || ~8.0, <8.1",
1575 | "phpdocumentor/reflection-docblock": "^5.2",
1576 | "sebastian/comparator": "^3.0 || ^4.0",
1577 | "sebastian/recursion-context": "^3.0 || ^4.0"
1578 | },
1579 | "require-dev": {
1580 | "phpspec/phpspec": "^6.0",
1581 | "phpunit/phpunit": "^8.0 || ^9.0"
1582 | },
1583 | "type": "library",
1584 | "extra": {
1585 | "branch-alias": {
1586 | "dev-master": "1.11.x-dev"
1587 | }
1588 | },
1589 | "autoload": {
1590 | "psr-4": {
1591 | "Prophecy\\": "src/Prophecy"
1592 | }
1593 | },
1594 | "notification-url": "https://packagist.org/downloads/",
1595 | "license": [
1596 | "MIT"
1597 | ],
1598 | "authors": [
1599 | {
1600 | "name": "Konstantin Kudryashov",
1601 | "email": "ever.zet@gmail.com",
1602 | "homepage": "http://everzet.com"
1603 | },
1604 | {
1605 | "name": "Marcello Duarte",
1606 | "email": "marcello.duarte@gmail.com"
1607 | }
1608 | ],
1609 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1610 | "homepage": "https://github.com/phpspec/prophecy",
1611 | "keywords": [
1612 | "Double",
1613 | "Dummy",
1614 | "fake",
1615 | "mock",
1616 | "spy",
1617 | "stub"
1618 | ],
1619 | "support": {
1620 | "issues": "https://github.com/phpspec/prophecy/issues",
1621 | "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
1622 | },
1623 | "time": "2021-03-17T13:42:18+00:00"
1624 | },
1625 | {
1626 | "name": "phpunit/php-code-coverage",
1627 | "version": "9.2.6",
1628 | "source": {
1629 | "type": "git",
1630 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1631 | "reference": "f6293e1b30a2354e8428e004689671b83871edde"
1632 | },
1633 | "dist": {
1634 | "type": "zip",
1635 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
1636 | "reference": "f6293e1b30a2354e8428e004689671b83871edde",
1637 | "shasum": ""
1638 | },
1639 | "require": {
1640 | "ext-dom": "*",
1641 | "ext-libxml": "*",
1642 | "ext-xmlwriter": "*",
1643 | "nikic/php-parser": "^4.10.2",
1644 | "php": ">=7.3",
1645 | "phpunit/php-file-iterator": "^3.0.3",
1646 | "phpunit/php-text-template": "^2.0.2",
1647 | "sebastian/code-unit-reverse-lookup": "^2.0.2",
1648 | "sebastian/complexity": "^2.0",
1649 | "sebastian/environment": "^5.1.2",
1650 | "sebastian/lines-of-code": "^1.0.3",
1651 | "sebastian/version": "^3.0.1",
1652 | "theseer/tokenizer": "^1.2.0"
1653 | },
1654 | "require-dev": {
1655 | "phpunit/phpunit": "^9.3"
1656 | },
1657 | "suggest": {
1658 | "ext-pcov": "*",
1659 | "ext-xdebug": "*"
1660 | },
1661 | "type": "library",
1662 | "extra": {
1663 | "branch-alias": {
1664 | "dev-master": "9.2-dev"
1665 | }
1666 | },
1667 | "autoload": {
1668 | "classmap": [
1669 | "src/"
1670 | ]
1671 | },
1672 | "notification-url": "https://packagist.org/downloads/",
1673 | "license": [
1674 | "BSD-3-Clause"
1675 | ],
1676 | "authors": [
1677 | {
1678 | "name": "Sebastian Bergmann",
1679 | "email": "sebastian@phpunit.de",
1680 | "role": "lead"
1681 | }
1682 | ],
1683 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1684 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1685 | "keywords": [
1686 | "coverage",
1687 | "testing",
1688 | "xunit"
1689 | ],
1690 | "support": {
1691 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
1692 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
1693 | },
1694 | "funding": [
1695 | {
1696 | "url": "https://github.com/sebastianbergmann",
1697 | "type": "github"
1698 | }
1699 | ],
1700 | "time": "2021-03-28T07:26:59+00:00"
1701 | },
1702 | {
1703 | "name": "phpunit/php-file-iterator",
1704 | "version": "3.0.5",
1705 | "source": {
1706 | "type": "git",
1707 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1708 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
1709 | },
1710 | "dist": {
1711 | "type": "zip",
1712 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
1713 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
1714 | "shasum": ""
1715 | },
1716 | "require": {
1717 | "php": ">=7.3"
1718 | },
1719 | "require-dev": {
1720 | "phpunit/phpunit": "^9.3"
1721 | },
1722 | "type": "library",
1723 | "extra": {
1724 | "branch-alias": {
1725 | "dev-master": "3.0-dev"
1726 | }
1727 | },
1728 | "autoload": {
1729 | "classmap": [
1730 | "src/"
1731 | ]
1732 | },
1733 | "notification-url": "https://packagist.org/downloads/",
1734 | "license": [
1735 | "BSD-3-Clause"
1736 | ],
1737 | "authors": [
1738 | {
1739 | "name": "Sebastian Bergmann",
1740 | "email": "sebastian@phpunit.de",
1741 | "role": "lead"
1742 | }
1743 | ],
1744 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1745 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1746 | "keywords": [
1747 | "filesystem",
1748 | "iterator"
1749 | ],
1750 | "support": {
1751 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
1752 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
1753 | },
1754 | "funding": [
1755 | {
1756 | "url": "https://github.com/sebastianbergmann",
1757 | "type": "github"
1758 | }
1759 | ],
1760 | "time": "2020-09-28T05:57:25+00:00"
1761 | },
1762 | {
1763 | "name": "phpunit/php-invoker",
1764 | "version": "3.1.1",
1765 | "source": {
1766 | "type": "git",
1767 | "url": "https://github.com/sebastianbergmann/php-invoker.git",
1768 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
1769 | },
1770 | "dist": {
1771 | "type": "zip",
1772 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1773 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1774 | "shasum": ""
1775 | },
1776 | "require": {
1777 | "php": ">=7.3"
1778 | },
1779 | "require-dev": {
1780 | "ext-pcntl": "*",
1781 | "phpunit/phpunit": "^9.3"
1782 | },
1783 | "suggest": {
1784 | "ext-pcntl": "*"
1785 | },
1786 | "type": "library",
1787 | "extra": {
1788 | "branch-alias": {
1789 | "dev-master": "3.1-dev"
1790 | }
1791 | },
1792 | "autoload": {
1793 | "classmap": [
1794 | "src/"
1795 | ]
1796 | },
1797 | "notification-url": "https://packagist.org/downloads/",
1798 | "license": [
1799 | "BSD-3-Clause"
1800 | ],
1801 | "authors": [
1802 | {
1803 | "name": "Sebastian Bergmann",
1804 | "email": "sebastian@phpunit.de",
1805 | "role": "lead"
1806 | }
1807 | ],
1808 | "description": "Invoke callables with a timeout",
1809 | "homepage": "https://github.com/sebastianbergmann/php-invoker/",
1810 | "keywords": [
1811 | "process"
1812 | ],
1813 | "support": {
1814 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
1815 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
1816 | },
1817 | "funding": [
1818 | {
1819 | "url": "https://github.com/sebastianbergmann",
1820 | "type": "github"
1821 | }
1822 | ],
1823 | "time": "2020-09-28T05:58:55+00:00"
1824 | },
1825 | {
1826 | "name": "phpunit/php-text-template",
1827 | "version": "2.0.4",
1828 | "source": {
1829 | "type": "git",
1830 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1831 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
1832 | },
1833 | "dist": {
1834 | "type": "zip",
1835 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1836 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1837 | "shasum": ""
1838 | },
1839 | "require": {
1840 | "php": ">=7.3"
1841 | },
1842 | "require-dev": {
1843 | "phpunit/phpunit": "^9.3"
1844 | },
1845 | "type": "library",
1846 | "extra": {
1847 | "branch-alias": {
1848 | "dev-master": "2.0-dev"
1849 | }
1850 | },
1851 | "autoload": {
1852 | "classmap": [
1853 | "src/"
1854 | ]
1855 | },
1856 | "notification-url": "https://packagist.org/downloads/",
1857 | "license": [
1858 | "BSD-3-Clause"
1859 | ],
1860 | "authors": [
1861 | {
1862 | "name": "Sebastian Bergmann",
1863 | "email": "sebastian@phpunit.de",
1864 | "role": "lead"
1865 | }
1866 | ],
1867 | "description": "Simple template engine.",
1868 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1869 | "keywords": [
1870 | "template"
1871 | ],
1872 | "support": {
1873 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
1874 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
1875 | },
1876 | "funding": [
1877 | {
1878 | "url": "https://github.com/sebastianbergmann",
1879 | "type": "github"
1880 | }
1881 | ],
1882 | "time": "2020-10-26T05:33:50+00:00"
1883 | },
1884 | {
1885 | "name": "phpunit/php-timer",
1886 | "version": "5.0.3",
1887 | "source": {
1888 | "type": "git",
1889 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1890 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
1891 | },
1892 | "dist": {
1893 | "type": "zip",
1894 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1895 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1896 | "shasum": ""
1897 | },
1898 | "require": {
1899 | "php": ">=7.3"
1900 | },
1901 | "require-dev": {
1902 | "phpunit/phpunit": "^9.3"
1903 | },
1904 | "type": "library",
1905 | "extra": {
1906 | "branch-alias": {
1907 | "dev-master": "5.0-dev"
1908 | }
1909 | },
1910 | "autoload": {
1911 | "classmap": [
1912 | "src/"
1913 | ]
1914 | },
1915 | "notification-url": "https://packagist.org/downloads/",
1916 | "license": [
1917 | "BSD-3-Clause"
1918 | ],
1919 | "authors": [
1920 | {
1921 | "name": "Sebastian Bergmann",
1922 | "email": "sebastian@phpunit.de",
1923 | "role": "lead"
1924 | }
1925 | ],
1926 | "description": "Utility class for timing",
1927 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1928 | "keywords": [
1929 | "timer"
1930 | ],
1931 | "support": {
1932 | "issues": "https://github.com/sebastianbergmann/php-timer/issues",
1933 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
1934 | },
1935 | "funding": [
1936 | {
1937 | "url": "https://github.com/sebastianbergmann",
1938 | "type": "github"
1939 | }
1940 | ],
1941 | "time": "2020-10-26T13:16:10+00:00"
1942 | },
1943 | {
1944 | "name": "phpunit/phpunit",
1945 | "version": "9.5.5",
1946 | "source": {
1947 | "type": "git",
1948 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1949 | "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276"
1950 | },
1951 | "dist": {
1952 | "type": "zip",
1953 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276",
1954 | "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276",
1955 | "shasum": ""
1956 | },
1957 | "require": {
1958 | "doctrine/instantiator": "^1.3.1",
1959 | "ext-dom": "*",
1960 | "ext-json": "*",
1961 | "ext-libxml": "*",
1962 | "ext-mbstring": "*",
1963 | "ext-xml": "*",
1964 | "ext-xmlwriter": "*",
1965 | "myclabs/deep-copy": "^1.10.1",
1966 | "phar-io/manifest": "^2.0.1",
1967 | "phar-io/version": "^3.0.2",
1968 | "php": ">=7.3",
1969 | "phpspec/prophecy": "^1.12.1",
1970 | "phpunit/php-code-coverage": "^9.2.3",
1971 | "phpunit/php-file-iterator": "^3.0.5",
1972 | "phpunit/php-invoker": "^3.1.1",
1973 | "phpunit/php-text-template": "^2.0.3",
1974 | "phpunit/php-timer": "^5.0.2",
1975 | "sebastian/cli-parser": "^1.0.1",
1976 | "sebastian/code-unit": "^1.0.6",
1977 | "sebastian/comparator": "^4.0.5",
1978 | "sebastian/diff": "^4.0.3",
1979 | "sebastian/environment": "^5.1.3",
1980 | "sebastian/exporter": "^4.0.3",
1981 | "sebastian/global-state": "^5.0.1",
1982 | "sebastian/object-enumerator": "^4.0.3",
1983 | "sebastian/resource-operations": "^3.0.3",
1984 | "sebastian/type": "^2.3.2",
1985 | "sebastian/version": "^3.0.2"
1986 | },
1987 | "require-dev": {
1988 | "ext-pdo": "*",
1989 | "phpspec/prophecy-phpunit": "^2.0.1"
1990 | },
1991 | "suggest": {
1992 | "ext-soap": "*",
1993 | "ext-xdebug": "*"
1994 | },
1995 | "bin": [
1996 | "phpunit"
1997 | ],
1998 | "type": "library",
1999 | "extra": {
2000 | "branch-alias": {
2001 | "dev-master": "9.5-dev"
2002 | }
2003 | },
2004 | "autoload": {
2005 | "classmap": [
2006 | "src/"
2007 | ],
2008 | "files": [
2009 | "src/Framework/Assert/Functions.php"
2010 | ]
2011 | },
2012 | "notification-url": "https://packagist.org/downloads/",
2013 | "license": [
2014 | "BSD-3-Clause"
2015 | ],
2016 | "authors": [
2017 | {
2018 | "name": "Sebastian Bergmann",
2019 | "email": "sebastian@phpunit.de",
2020 | "role": "lead"
2021 | }
2022 | ],
2023 | "description": "The PHP Unit Testing framework.",
2024 | "homepage": "https://phpunit.de/",
2025 | "keywords": [
2026 | "phpunit",
2027 | "testing",
2028 | "xunit"
2029 | ],
2030 | "support": {
2031 | "issues": "https://github.com/sebastianbergmann/phpunit/issues",
2032 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5"
2033 | },
2034 | "funding": [
2035 | {
2036 | "url": "https://phpunit.de/donate.html",
2037 | "type": "custom"
2038 | },
2039 | {
2040 | "url": "https://github.com/sebastianbergmann",
2041 | "type": "github"
2042 | }
2043 | ],
2044 | "time": "2021-06-05T04:49:07+00:00"
2045 | },
2046 | {
2047 | "name": "psr/cache",
2048 | "version": "3.0.0",
2049 | "source": {
2050 | "type": "git",
2051 | "url": "https://github.com/php-fig/cache.git",
2052 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
2053 | },
2054 | "dist": {
2055 | "type": "zip",
2056 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
2057 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
2058 | "shasum": ""
2059 | },
2060 | "require": {
2061 | "php": ">=8.0.0"
2062 | },
2063 | "type": "library",
2064 | "extra": {
2065 | "branch-alias": {
2066 | "dev-master": "1.0.x-dev"
2067 | }
2068 | },
2069 | "autoload": {
2070 | "psr-4": {
2071 | "Psr\\Cache\\": "src/"
2072 | }
2073 | },
2074 | "notification-url": "https://packagist.org/downloads/",
2075 | "license": [
2076 | "MIT"
2077 | ],
2078 | "authors": [
2079 | {
2080 | "name": "PHP-FIG",
2081 | "homepage": "https://www.php-fig.org/"
2082 | }
2083 | ],
2084 | "description": "Common interface for caching libraries",
2085 | "keywords": [
2086 | "cache",
2087 | "psr",
2088 | "psr-6"
2089 | ],
2090 | "support": {
2091 | "source": "https://github.com/php-fig/cache/tree/3.0.0"
2092 | },
2093 | "time": "2021-02-03T23:26:27+00:00"
2094 | },
2095 | {
2096 | "name": "psr/container",
2097 | "version": "1.1.1",
2098 | "source": {
2099 | "type": "git",
2100 | "url": "https://github.com/php-fig/container.git",
2101 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
2102 | },
2103 | "dist": {
2104 | "type": "zip",
2105 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
2106 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
2107 | "shasum": ""
2108 | },
2109 | "require": {
2110 | "php": ">=7.2.0"
2111 | },
2112 | "type": "library",
2113 | "autoload": {
2114 | "psr-4": {
2115 | "Psr\\Container\\": "src/"
2116 | }
2117 | },
2118 | "notification-url": "https://packagist.org/downloads/",
2119 | "license": [
2120 | "MIT"
2121 | ],
2122 | "authors": [
2123 | {
2124 | "name": "PHP-FIG",
2125 | "homepage": "https://www.php-fig.org/"
2126 | }
2127 | ],
2128 | "description": "Common Container Interface (PHP FIG PSR-11)",
2129 | "homepage": "https://github.com/php-fig/container",
2130 | "keywords": [
2131 | "PSR-11",
2132 | "container",
2133 | "container-interface",
2134 | "container-interop",
2135 | "psr"
2136 | ],
2137 | "support": {
2138 | "issues": "https://github.com/php-fig/container/issues",
2139 | "source": "https://github.com/php-fig/container/tree/1.1.1"
2140 | },
2141 | "time": "2021-03-05T17:36:06+00:00"
2142 | },
2143 | {
2144 | "name": "psr/event-dispatcher",
2145 | "version": "1.0.0",
2146 | "source": {
2147 | "type": "git",
2148 | "url": "https://github.com/php-fig/event-dispatcher.git",
2149 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
2150 | },
2151 | "dist": {
2152 | "type": "zip",
2153 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
2154 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
2155 | "shasum": ""
2156 | },
2157 | "require": {
2158 | "php": ">=7.2.0"
2159 | },
2160 | "type": "library",
2161 | "extra": {
2162 | "branch-alias": {
2163 | "dev-master": "1.0.x-dev"
2164 | }
2165 | },
2166 | "autoload": {
2167 | "psr-4": {
2168 | "Psr\\EventDispatcher\\": "src/"
2169 | }
2170 | },
2171 | "notification-url": "https://packagist.org/downloads/",
2172 | "license": [
2173 | "MIT"
2174 | ],
2175 | "authors": [
2176 | {
2177 | "name": "PHP-FIG",
2178 | "homepage": "http://www.php-fig.org/"
2179 | }
2180 | ],
2181 | "description": "Standard interfaces for event handling.",
2182 | "keywords": [
2183 | "events",
2184 | "psr",
2185 | "psr-14"
2186 | ],
2187 | "support": {
2188 | "issues": "https://github.com/php-fig/event-dispatcher/issues",
2189 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
2190 | },
2191 | "time": "2019-01-08T18:20:26+00:00"
2192 | },
2193 | {
2194 | "name": "psr/log",
2195 | "version": "1.1.4",
2196 | "source": {
2197 | "type": "git",
2198 | "url": "https://github.com/php-fig/log.git",
2199 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
2200 | },
2201 | "dist": {
2202 | "type": "zip",
2203 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
2204 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
2205 | "shasum": ""
2206 | },
2207 | "require": {
2208 | "php": ">=5.3.0"
2209 | },
2210 | "type": "library",
2211 | "extra": {
2212 | "branch-alias": {
2213 | "dev-master": "1.1.x-dev"
2214 | }
2215 | },
2216 | "autoload": {
2217 | "psr-4": {
2218 | "Psr\\Log\\": "Psr/Log/"
2219 | }
2220 | },
2221 | "notification-url": "https://packagist.org/downloads/",
2222 | "license": [
2223 | "MIT"
2224 | ],
2225 | "authors": [
2226 | {
2227 | "name": "PHP-FIG",
2228 | "homepage": "https://www.php-fig.org/"
2229 | }
2230 | ],
2231 | "description": "Common interface for logging libraries",
2232 | "homepage": "https://github.com/php-fig/log",
2233 | "keywords": [
2234 | "log",
2235 | "psr",
2236 | "psr-3"
2237 | ],
2238 | "support": {
2239 | "source": "https://github.com/php-fig/log/tree/1.1.4"
2240 | },
2241 | "time": "2021-05-03T11:20:27+00:00"
2242 | },
2243 | {
2244 | "name": "sebastian/cli-parser",
2245 | "version": "1.0.1",
2246 | "source": {
2247 | "type": "git",
2248 | "url": "https://github.com/sebastianbergmann/cli-parser.git",
2249 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
2250 | },
2251 | "dist": {
2252 | "type": "zip",
2253 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
2254 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
2255 | "shasum": ""
2256 | },
2257 | "require": {
2258 | "php": ">=7.3"
2259 | },
2260 | "require-dev": {
2261 | "phpunit/phpunit": "^9.3"
2262 | },
2263 | "type": "library",
2264 | "extra": {
2265 | "branch-alias": {
2266 | "dev-master": "1.0-dev"
2267 | }
2268 | },
2269 | "autoload": {
2270 | "classmap": [
2271 | "src/"
2272 | ]
2273 | },
2274 | "notification-url": "https://packagist.org/downloads/",
2275 | "license": [
2276 | "BSD-3-Clause"
2277 | ],
2278 | "authors": [
2279 | {
2280 | "name": "Sebastian Bergmann",
2281 | "email": "sebastian@phpunit.de",
2282 | "role": "lead"
2283 | }
2284 | ],
2285 | "description": "Library for parsing CLI options",
2286 | "homepage": "https://github.com/sebastianbergmann/cli-parser",
2287 | "support": {
2288 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
2289 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
2290 | },
2291 | "funding": [
2292 | {
2293 | "url": "https://github.com/sebastianbergmann",
2294 | "type": "github"
2295 | }
2296 | ],
2297 | "time": "2020-09-28T06:08:49+00:00"
2298 | },
2299 | {
2300 | "name": "sebastian/code-unit",
2301 | "version": "1.0.8",
2302 | "source": {
2303 | "type": "git",
2304 | "url": "https://github.com/sebastianbergmann/code-unit.git",
2305 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
2306 | },
2307 | "dist": {
2308 | "type": "zip",
2309 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
2310 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
2311 | "shasum": ""
2312 | },
2313 | "require": {
2314 | "php": ">=7.3"
2315 | },
2316 | "require-dev": {
2317 | "phpunit/phpunit": "^9.3"
2318 | },
2319 | "type": "library",
2320 | "extra": {
2321 | "branch-alias": {
2322 | "dev-master": "1.0-dev"
2323 | }
2324 | },
2325 | "autoload": {
2326 | "classmap": [
2327 | "src/"
2328 | ]
2329 | },
2330 | "notification-url": "https://packagist.org/downloads/",
2331 | "license": [
2332 | "BSD-3-Clause"
2333 | ],
2334 | "authors": [
2335 | {
2336 | "name": "Sebastian Bergmann",
2337 | "email": "sebastian@phpunit.de",
2338 | "role": "lead"
2339 | }
2340 | ],
2341 | "description": "Collection of value objects that represent the PHP code units",
2342 | "homepage": "https://github.com/sebastianbergmann/code-unit",
2343 | "support": {
2344 | "issues": "https://github.com/sebastianbergmann/code-unit/issues",
2345 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
2346 | },
2347 | "funding": [
2348 | {
2349 | "url": "https://github.com/sebastianbergmann",
2350 | "type": "github"
2351 | }
2352 | ],
2353 | "time": "2020-10-26T13:08:54+00:00"
2354 | },
2355 | {
2356 | "name": "sebastian/code-unit-reverse-lookup",
2357 | "version": "2.0.3",
2358 | "source": {
2359 | "type": "git",
2360 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
2361 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
2362 | },
2363 | "dist": {
2364 | "type": "zip",
2365 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
2366 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
2367 | "shasum": ""
2368 | },
2369 | "require": {
2370 | "php": ">=7.3"
2371 | },
2372 | "require-dev": {
2373 | "phpunit/phpunit": "^9.3"
2374 | },
2375 | "type": "library",
2376 | "extra": {
2377 | "branch-alias": {
2378 | "dev-master": "2.0-dev"
2379 | }
2380 | },
2381 | "autoload": {
2382 | "classmap": [
2383 | "src/"
2384 | ]
2385 | },
2386 | "notification-url": "https://packagist.org/downloads/",
2387 | "license": [
2388 | "BSD-3-Clause"
2389 | ],
2390 | "authors": [
2391 | {
2392 | "name": "Sebastian Bergmann",
2393 | "email": "sebastian@phpunit.de"
2394 | }
2395 | ],
2396 | "description": "Looks up which function or method a line of code belongs to",
2397 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
2398 | "support": {
2399 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
2400 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
2401 | },
2402 | "funding": [
2403 | {
2404 | "url": "https://github.com/sebastianbergmann",
2405 | "type": "github"
2406 | }
2407 | ],
2408 | "time": "2020-09-28T05:30:19+00:00"
2409 | },
2410 | {
2411 | "name": "sebastian/comparator",
2412 | "version": "4.0.6",
2413 | "source": {
2414 | "type": "git",
2415 | "url": "https://github.com/sebastianbergmann/comparator.git",
2416 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
2417 | },
2418 | "dist": {
2419 | "type": "zip",
2420 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
2421 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
2422 | "shasum": ""
2423 | },
2424 | "require": {
2425 | "php": ">=7.3",
2426 | "sebastian/diff": "^4.0",
2427 | "sebastian/exporter": "^4.0"
2428 | },
2429 | "require-dev": {
2430 | "phpunit/phpunit": "^9.3"
2431 | },
2432 | "type": "library",
2433 | "extra": {
2434 | "branch-alias": {
2435 | "dev-master": "4.0-dev"
2436 | }
2437 | },
2438 | "autoload": {
2439 | "classmap": [
2440 | "src/"
2441 | ]
2442 | },
2443 | "notification-url": "https://packagist.org/downloads/",
2444 | "license": [
2445 | "BSD-3-Clause"
2446 | ],
2447 | "authors": [
2448 | {
2449 | "name": "Sebastian Bergmann",
2450 | "email": "sebastian@phpunit.de"
2451 | },
2452 | {
2453 | "name": "Jeff Welch",
2454 | "email": "whatthejeff@gmail.com"
2455 | },
2456 | {
2457 | "name": "Volker Dusch",
2458 | "email": "github@wallbash.com"
2459 | },
2460 | {
2461 | "name": "Bernhard Schussek",
2462 | "email": "bschussek@2bepublished.at"
2463 | }
2464 | ],
2465 | "description": "Provides the functionality to compare PHP values for equality",
2466 | "homepage": "https://github.com/sebastianbergmann/comparator",
2467 | "keywords": [
2468 | "comparator",
2469 | "compare",
2470 | "equality"
2471 | ],
2472 | "support": {
2473 | "issues": "https://github.com/sebastianbergmann/comparator/issues",
2474 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
2475 | },
2476 | "funding": [
2477 | {
2478 | "url": "https://github.com/sebastianbergmann",
2479 | "type": "github"
2480 | }
2481 | ],
2482 | "time": "2020-10-26T15:49:45+00:00"
2483 | },
2484 | {
2485 | "name": "sebastian/complexity",
2486 | "version": "2.0.2",
2487 | "source": {
2488 | "type": "git",
2489 | "url": "https://github.com/sebastianbergmann/complexity.git",
2490 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
2491 | },
2492 | "dist": {
2493 | "type": "zip",
2494 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
2495 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
2496 | "shasum": ""
2497 | },
2498 | "require": {
2499 | "nikic/php-parser": "^4.7",
2500 | "php": ">=7.3"
2501 | },
2502 | "require-dev": {
2503 | "phpunit/phpunit": "^9.3"
2504 | },
2505 | "type": "library",
2506 | "extra": {
2507 | "branch-alias": {
2508 | "dev-master": "2.0-dev"
2509 | }
2510 | },
2511 | "autoload": {
2512 | "classmap": [
2513 | "src/"
2514 | ]
2515 | },
2516 | "notification-url": "https://packagist.org/downloads/",
2517 | "license": [
2518 | "BSD-3-Clause"
2519 | ],
2520 | "authors": [
2521 | {
2522 | "name": "Sebastian Bergmann",
2523 | "email": "sebastian@phpunit.de",
2524 | "role": "lead"
2525 | }
2526 | ],
2527 | "description": "Library for calculating the complexity of PHP code units",
2528 | "homepage": "https://github.com/sebastianbergmann/complexity",
2529 | "support": {
2530 | "issues": "https://github.com/sebastianbergmann/complexity/issues",
2531 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
2532 | },
2533 | "funding": [
2534 | {
2535 | "url": "https://github.com/sebastianbergmann",
2536 | "type": "github"
2537 | }
2538 | ],
2539 | "time": "2020-10-26T15:52:27+00:00"
2540 | },
2541 | {
2542 | "name": "sebastian/diff",
2543 | "version": "4.0.4",
2544 | "source": {
2545 | "type": "git",
2546 | "url": "https://github.com/sebastianbergmann/diff.git",
2547 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
2548 | },
2549 | "dist": {
2550 | "type": "zip",
2551 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2552 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2553 | "shasum": ""
2554 | },
2555 | "require": {
2556 | "php": ">=7.3"
2557 | },
2558 | "require-dev": {
2559 | "phpunit/phpunit": "^9.3",
2560 | "symfony/process": "^4.2 || ^5"
2561 | },
2562 | "type": "library",
2563 | "extra": {
2564 | "branch-alias": {
2565 | "dev-master": "4.0-dev"
2566 | }
2567 | },
2568 | "autoload": {
2569 | "classmap": [
2570 | "src/"
2571 | ]
2572 | },
2573 | "notification-url": "https://packagist.org/downloads/",
2574 | "license": [
2575 | "BSD-3-Clause"
2576 | ],
2577 | "authors": [
2578 | {
2579 | "name": "Sebastian Bergmann",
2580 | "email": "sebastian@phpunit.de"
2581 | },
2582 | {
2583 | "name": "Kore Nordmann",
2584 | "email": "mail@kore-nordmann.de"
2585 | }
2586 | ],
2587 | "description": "Diff implementation",
2588 | "homepage": "https://github.com/sebastianbergmann/diff",
2589 | "keywords": [
2590 | "diff",
2591 | "udiff",
2592 | "unidiff",
2593 | "unified diff"
2594 | ],
2595 | "support": {
2596 | "issues": "https://github.com/sebastianbergmann/diff/issues",
2597 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
2598 | },
2599 | "funding": [
2600 | {
2601 | "url": "https://github.com/sebastianbergmann",
2602 | "type": "github"
2603 | }
2604 | ],
2605 | "time": "2020-10-26T13:10:38+00:00"
2606 | },
2607 | {
2608 | "name": "sebastian/environment",
2609 | "version": "5.1.3",
2610 | "source": {
2611 | "type": "git",
2612 | "url": "https://github.com/sebastianbergmann/environment.git",
2613 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
2614 | },
2615 | "dist": {
2616 | "type": "zip",
2617 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
2618 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
2619 | "shasum": ""
2620 | },
2621 | "require": {
2622 | "php": ">=7.3"
2623 | },
2624 | "require-dev": {
2625 | "phpunit/phpunit": "^9.3"
2626 | },
2627 | "suggest": {
2628 | "ext-posix": "*"
2629 | },
2630 | "type": "library",
2631 | "extra": {
2632 | "branch-alias": {
2633 | "dev-master": "5.1-dev"
2634 | }
2635 | },
2636 | "autoload": {
2637 | "classmap": [
2638 | "src/"
2639 | ]
2640 | },
2641 | "notification-url": "https://packagist.org/downloads/",
2642 | "license": [
2643 | "BSD-3-Clause"
2644 | ],
2645 | "authors": [
2646 | {
2647 | "name": "Sebastian Bergmann",
2648 | "email": "sebastian@phpunit.de"
2649 | }
2650 | ],
2651 | "description": "Provides functionality to handle HHVM/PHP environments",
2652 | "homepage": "http://www.github.com/sebastianbergmann/environment",
2653 | "keywords": [
2654 | "Xdebug",
2655 | "environment",
2656 | "hhvm"
2657 | ],
2658 | "support": {
2659 | "issues": "https://github.com/sebastianbergmann/environment/issues",
2660 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
2661 | },
2662 | "funding": [
2663 | {
2664 | "url": "https://github.com/sebastianbergmann",
2665 | "type": "github"
2666 | }
2667 | ],
2668 | "time": "2020-09-28T05:52:38+00:00"
2669 | },
2670 | {
2671 | "name": "sebastian/exporter",
2672 | "version": "4.0.3",
2673 | "source": {
2674 | "type": "git",
2675 | "url": "https://github.com/sebastianbergmann/exporter.git",
2676 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
2677 | },
2678 | "dist": {
2679 | "type": "zip",
2680 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
2681 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
2682 | "shasum": ""
2683 | },
2684 | "require": {
2685 | "php": ">=7.3",
2686 | "sebastian/recursion-context": "^4.0"
2687 | },
2688 | "require-dev": {
2689 | "ext-mbstring": "*",
2690 | "phpunit/phpunit": "^9.3"
2691 | },
2692 | "type": "library",
2693 | "extra": {
2694 | "branch-alias": {
2695 | "dev-master": "4.0-dev"
2696 | }
2697 | },
2698 | "autoload": {
2699 | "classmap": [
2700 | "src/"
2701 | ]
2702 | },
2703 | "notification-url": "https://packagist.org/downloads/",
2704 | "license": [
2705 | "BSD-3-Clause"
2706 | ],
2707 | "authors": [
2708 | {
2709 | "name": "Sebastian Bergmann",
2710 | "email": "sebastian@phpunit.de"
2711 | },
2712 | {
2713 | "name": "Jeff Welch",
2714 | "email": "whatthejeff@gmail.com"
2715 | },
2716 | {
2717 | "name": "Volker Dusch",
2718 | "email": "github@wallbash.com"
2719 | },
2720 | {
2721 | "name": "Adam Harvey",
2722 | "email": "aharvey@php.net"
2723 | },
2724 | {
2725 | "name": "Bernhard Schussek",
2726 | "email": "bschussek@gmail.com"
2727 | }
2728 | ],
2729 | "description": "Provides the functionality to export PHP variables for visualization",
2730 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
2731 | "keywords": [
2732 | "export",
2733 | "exporter"
2734 | ],
2735 | "support": {
2736 | "issues": "https://github.com/sebastianbergmann/exporter/issues",
2737 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
2738 | },
2739 | "funding": [
2740 | {
2741 | "url": "https://github.com/sebastianbergmann",
2742 | "type": "github"
2743 | }
2744 | ],
2745 | "time": "2020-09-28T05:24:23+00:00"
2746 | },
2747 | {
2748 | "name": "sebastian/global-state",
2749 | "version": "5.0.2",
2750 | "source": {
2751 | "type": "git",
2752 | "url": "https://github.com/sebastianbergmann/global-state.git",
2753 | "reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
2754 | },
2755 | "dist": {
2756 | "type": "zip",
2757 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
2758 | "reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
2759 | "shasum": ""
2760 | },
2761 | "require": {
2762 | "php": ">=7.3",
2763 | "sebastian/object-reflector": "^2.0",
2764 | "sebastian/recursion-context": "^4.0"
2765 | },
2766 | "require-dev": {
2767 | "ext-dom": "*",
2768 | "phpunit/phpunit": "^9.3"
2769 | },
2770 | "suggest": {
2771 | "ext-uopz": "*"
2772 | },
2773 | "type": "library",
2774 | "extra": {
2775 | "branch-alias": {
2776 | "dev-master": "5.0-dev"
2777 | }
2778 | },
2779 | "autoload": {
2780 | "classmap": [
2781 | "src/"
2782 | ]
2783 | },
2784 | "notification-url": "https://packagist.org/downloads/",
2785 | "license": [
2786 | "BSD-3-Clause"
2787 | ],
2788 | "authors": [
2789 | {
2790 | "name": "Sebastian Bergmann",
2791 | "email": "sebastian@phpunit.de"
2792 | }
2793 | ],
2794 | "description": "Snapshotting of global state",
2795 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2796 | "keywords": [
2797 | "global state"
2798 | ],
2799 | "support": {
2800 | "issues": "https://github.com/sebastianbergmann/global-state/issues",
2801 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
2802 | },
2803 | "funding": [
2804 | {
2805 | "url": "https://github.com/sebastianbergmann",
2806 | "type": "github"
2807 | }
2808 | ],
2809 | "time": "2020-10-26T15:55:19+00:00"
2810 | },
2811 | {
2812 | "name": "sebastian/lines-of-code",
2813 | "version": "1.0.3",
2814 | "source": {
2815 | "type": "git",
2816 | "url": "https://github.com/sebastianbergmann/lines-of-code.git",
2817 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
2818 | },
2819 | "dist": {
2820 | "type": "zip",
2821 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2822 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2823 | "shasum": ""
2824 | },
2825 | "require": {
2826 | "nikic/php-parser": "^4.6",
2827 | "php": ">=7.3"
2828 | },
2829 | "require-dev": {
2830 | "phpunit/phpunit": "^9.3"
2831 | },
2832 | "type": "library",
2833 | "extra": {
2834 | "branch-alias": {
2835 | "dev-master": "1.0-dev"
2836 | }
2837 | },
2838 | "autoload": {
2839 | "classmap": [
2840 | "src/"
2841 | ]
2842 | },
2843 | "notification-url": "https://packagist.org/downloads/",
2844 | "license": [
2845 | "BSD-3-Clause"
2846 | ],
2847 | "authors": [
2848 | {
2849 | "name": "Sebastian Bergmann",
2850 | "email": "sebastian@phpunit.de",
2851 | "role": "lead"
2852 | }
2853 | ],
2854 | "description": "Library for counting the lines of code in PHP source code",
2855 | "homepage": "https://github.com/sebastianbergmann/lines-of-code",
2856 | "support": {
2857 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
2858 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
2859 | },
2860 | "funding": [
2861 | {
2862 | "url": "https://github.com/sebastianbergmann",
2863 | "type": "github"
2864 | }
2865 | ],
2866 | "time": "2020-11-28T06:42:11+00:00"
2867 | },
2868 | {
2869 | "name": "sebastian/object-enumerator",
2870 | "version": "4.0.4",
2871 | "source": {
2872 | "type": "git",
2873 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2874 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
2875 | },
2876 | "dist": {
2877 | "type": "zip",
2878 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
2879 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
2880 | "shasum": ""
2881 | },
2882 | "require": {
2883 | "php": ">=7.3",
2884 | "sebastian/object-reflector": "^2.0",
2885 | "sebastian/recursion-context": "^4.0"
2886 | },
2887 | "require-dev": {
2888 | "phpunit/phpunit": "^9.3"
2889 | },
2890 | "type": "library",
2891 | "extra": {
2892 | "branch-alias": {
2893 | "dev-master": "4.0-dev"
2894 | }
2895 | },
2896 | "autoload": {
2897 | "classmap": [
2898 | "src/"
2899 | ]
2900 | },
2901 | "notification-url": "https://packagist.org/downloads/",
2902 | "license": [
2903 | "BSD-3-Clause"
2904 | ],
2905 | "authors": [
2906 | {
2907 | "name": "Sebastian Bergmann",
2908 | "email": "sebastian@phpunit.de"
2909 | }
2910 | ],
2911 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2912 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2913 | "support": {
2914 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
2915 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
2916 | },
2917 | "funding": [
2918 | {
2919 | "url": "https://github.com/sebastianbergmann",
2920 | "type": "github"
2921 | }
2922 | ],
2923 | "time": "2020-10-26T13:12:34+00:00"
2924 | },
2925 | {
2926 | "name": "sebastian/object-reflector",
2927 | "version": "2.0.4",
2928 | "source": {
2929 | "type": "git",
2930 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2931 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
2932 | },
2933 | "dist": {
2934 | "type": "zip",
2935 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2936 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2937 | "shasum": ""
2938 | },
2939 | "require": {
2940 | "php": ">=7.3"
2941 | },
2942 | "require-dev": {
2943 | "phpunit/phpunit": "^9.3"
2944 | },
2945 | "type": "library",
2946 | "extra": {
2947 | "branch-alias": {
2948 | "dev-master": "2.0-dev"
2949 | }
2950 | },
2951 | "autoload": {
2952 | "classmap": [
2953 | "src/"
2954 | ]
2955 | },
2956 | "notification-url": "https://packagist.org/downloads/",
2957 | "license": [
2958 | "BSD-3-Clause"
2959 | ],
2960 | "authors": [
2961 | {
2962 | "name": "Sebastian Bergmann",
2963 | "email": "sebastian@phpunit.de"
2964 | }
2965 | ],
2966 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2967 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2968 | "support": {
2969 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
2970 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
2971 | },
2972 | "funding": [
2973 | {
2974 | "url": "https://github.com/sebastianbergmann",
2975 | "type": "github"
2976 | }
2977 | ],
2978 | "time": "2020-10-26T13:14:26+00:00"
2979 | },
2980 | {
2981 | "name": "sebastian/recursion-context",
2982 | "version": "4.0.4",
2983 | "source": {
2984 | "type": "git",
2985 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2986 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
2987 | },
2988 | "dist": {
2989 | "type": "zip",
2990 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
2991 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
2992 | "shasum": ""
2993 | },
2994 | "require": {
2995 | "php": ">=7.3"
2996 | },
2997 | "require-dev": {
2998 | "phpunit/phpunit": "^9.3"
2999 | },
3000 | "type": "library",
3001 | "extra": {
3002 | "branch-alias": {
3003 | "dev-master": "4.0-dev"
3004 | }
3005 | },
3006 | "autoload": {
3007 | "classmap": [
3008 | "src/"
3009 | ]
3010 | },
3011 | "notification-url": "https://packagist.org/downloads/",
3012 | "license": [
3013 | "BSD-3-Clause"
3014 | ],
3015 | "authors": [
3016 | {
3017 | "name": "Sebastian Bergmann",
3018 | "email": "sebastian@phpunit.de"
3019 | },
3020 | {
3021 | "name": "Jeff Welch",
3022 | "email": "whatthejeff@gmail.com"
3023 | },
3024 | {
3025 | "name": "Adam Harvey",
3026 | "email": "aharvey@php.net"
3027 | }
3028 | ],
3029 | "description": "Provides functionality to recursively process PHP variables",
3030 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
3031 | "support": {
3032 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
3033 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
3034 | },
3035 | "funding": [
3036 | {
3037 | "url": "https://github.com/sebastianbergmann",
3038 | "type": "github"
3039 | }
3040 | ],
3041 | "time": "2020-10-26T13:17:30+00:00"
3042 | },
3043 | {
3044 | "name": "sebastian/resource-operations",
3045 | "version": "3.0.3",
3046 | "source": {
3047 | "type": "git",
3048 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
3049 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
3050 | },
3051 | "dist": {
3052 | "type": "zip",
3053 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
3054 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
3055 | "shasum": ""
3056 | },
3057 | "require": {
3058 | "php": ">=7.3"
3059 | },
3060 | "require-dev": {
3061 | "phpunit/phpunit": "^9.0"
3062 | },
3063 | "type": "library",
3064 | "extra": {
3065 | "branch-alias": {
3066 | "dev-master": "3.0-dev"
3067 | }
3068 | },
3069 | "autoload": {
3070 | "classmap": [
3071 | "src/"
3072 | ]
3073 | },
3074 | "notification-url": "https://packagist.org/downloads/",
3075 | "license": [
3076 | "BSD-3-Clause"
3077 | ],
3078 | "authors": [
3079 | {
3080 | "name": "Sebastian Bergmann",
3081 | "email": "sebastian@phpunit.de"
3082 | }
3083 | ],
3084 | "description": "Provides a list of PHP built-in functions that operate on resources",
3085 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
3086 | "support": {
3087 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
3088 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
3089 | },
3090 | "funding": [
3091 | {
3092 | "url": "https://github.com/sebastianbergmann",
3093 | "type": "github"
3094 | }
3095 | ],
3096 | "time": "2020-09-28T06:45:17+00:00"
3097 | },
3098 | {
3099 | "name": "sebastian/type",
3100 | "version": "2.3.2",
3101 | "source": {
3102 | "type": "git",
3103 | "url": "https://github.com/sebastianbergmann/type.git",
3104 | "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1"
3105 | },
3106 | "dist": {
3107 | "type": "zip",
3108 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0d1c587401514d17e8f9258a27e23527cb1b06c1",
3109 | "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1",
3110 | "shasum": ""
3111 | },
3112 | "require": {
3113 | "php": ">=7.3"
3114 | },
3115 | "require-dev": {
3116 | "phpunit/phpunit": "^9.3"
3117 | },
3118 | "type": "library",
3119 | "extra": {
3120 | "branch-alias": {
3121 | "dev-master": "2.3-dev"
3122 | }
3123 | },
3124 | "autoload": {
3125 | "classmap": [
3126 | "src/"
3127 | ]
3128 | },
3129 | "notification-url": "https://packagist.org/downloads/",
3130 | "license": [
3131 | "BSD-3-Clause"
3132 | ],
3133 | "authors": [
3134 | {
3135 | "name": "Sebastian Bergmann",
3136 | "email": "sebastian@phpunit.de",
3137 | "role": "lead"
3138 | }
3139 | ],
3140 | "description": "Collection of value objects that represent the types of the PHP type system",
3141 | "homepage": "https://github.com/sebastianbergmann/type",
3142 | "support": {
3143 | "issues": "https://github.com/sebastianbergmann/type/issues",
3144 | "source": "https://github.com/sebastianbergmann/type/tree/2.3.2"
3145 | },
3146 | "funding": [
3147 | {
3148 | "url": "https://github.com/sebastianbergmann",
3149 | "type": "github"
3150 | }
3151 | ],
3152 | "time": "2021-06-04T13:02:07+00:00"
3153 | },
3154 | {
3155 | "name": "sebastian/version",
3156 | "version": "3.0.2",
3157 | "source": {
3158 | "type": "git",
3159 | "url": "https://github.com/sebastianbergmann/version.git",
3160 | "reference": "c6c1022351a901512170118436c764e473f6de8c"
3161 | },
3162 | "dist": {
3163 | "type": "zip",
3164 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
3165 | "reference": "c6c1022351a901512170118436c764e473f6de8c",
3166 | "shasum": ""
3167 | },
3168 | "require": {
3169 | "php": ">=7.3"
3170 | },
3171 | "type": "library",
3172 | "extra": {
3173 | "branch-alias": {
3174 | "dev-master": "3.0-dev"
3175 | }
3176 | },
3177 | "autoload": {
3178 | "classmap": [
3179 | "src/"
3180 | ]
3181 | },
3182 | "notification-url": "https://packagist.org/downloads/",
3183 | "license": [
3184 | "BSD-3-Clause"
3185 | ],
3186 | "authors": [
3187 | {
3188 | "name": "Sebastian Bergmann",
3189 | "email": "sebastian@phpunit.de",
3190 | "role": "lead"
3191 | }
3192 | ],
3193 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
3194 | "homepage": "https://github.com/sebastianbergmann/version",
3195 | "support": {
3196 | "issues": "https://github.com/sebastianbergmann/version/issues",
3197 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
3198 | },
3199 | "funding": [
3200 | {
3201 | "url": "https://github.com/sebastianbergmann",
3202 | "type": "github"
3203 | }
3204 | ],
3205 | "time": "2020-09-28T06:39:44+00:00"
3206 | },
3207 | {
3208 | "name": "symfony/console",
3209 | "version": "v5.3.0",
3210 | "source": {
3211 | "type": "git",
3212 | "url": "https://github.com/symfony/console.git",
3213 | "reference": "058553870f7809087fa80fa734704a21b9bcaeb2"
3214 | },
3215 | "dist": {
3216 | "type": "zip",
3217 | "url": "https://api.github.com/repos/symfony/console/zipball/058553870f7809087fa80fa734704a21b9bcaeb2",
3218 | "reference": "058553870f7809087fa80fa734704a21b9bcaeb2",
3219 | "shasum": ""
3220 | },
3221 | "require": {
3222 | "php": ">=7.2.5",
3223 | "symfony/deprecation-contracts": "^2.1",
3224 | "symfony/polyfill-mbstring": "~1.0",
3225 | "symfony/polyfill-php73": "^1.8",
3226 | "symfony/polyfill-php80": "^1.15",
3227 | "symfony/service-contracts": "^1.1|^2",
3228 | "symfony/string": "^5.1"
3229 | },
3230 | "conflict": {
3231 | "symfony/dependency-injection": "<4.4",
3232 | "symfony/dotenv": "<5.1",
3233 | "symfony/event-dispatcher": "<4.4",
3234 | "symfony/lock": "<4.4",
3235 | "symfony/process": "<4.4"
3236 | },
3237 | "provide": {
3238 | "psr/log-implementation": "1.0"
3239 | },
3240 | "require-dev": {
3241 | "psr/log": "~1.0",
3242 | "symfony/config": "^4.4|^5.0",
3243 | "symfony/dependency-injection": "^4.4|^5.0",
3244 | "symfony/event-dispatcher": "^4.4|^5.0",
3245 | "symfony/lock": "^4.4|^5.0",
3246 | "symfony/process": "^4.4|^5.0",
3247 | "symfony/var-dumper": "^4.4|^5.0"
3248 | },
3249 | "suggest": {
3250 | "psr/log": "For using the console logger",
3251 | "symfony/event-dispatcher": "",
3252 | "symfony/lock": "",
3253 | "symfony/process": ""
3254 | },
3255 | "type": "library",
3256 | "autoload": {
3257 | "psr-4": {
3258 | "Symfony\\Component\\Console\\": ""
3259 | },
3260 | "exclude-from-classmap": [
3261 | "/Tests/"
3262 | ]
3263 | },
3264 | "notification-url": "https://packagist.org/downloads/",
3265 | "license": [
3266 | "MIT"
3267 | ],
3268 | "authors": [
3269 | {
3270 | "name": "Fabien Potencier",
3271 | "email": "fabien@symfony.com"
3272 | },
3273 | {
3274 | "name": "Symfony Community",
3275 | "homepage": "https://symfony.com/contributors"
3276 | }
3277 | ],
3278 | "description": "Eases the creation of beautiful and testable command line interfaces",
3279 | "homepage": "https://symfony.com",
3280 | "keywords": [
3281 | "cli",
3282 | "command line",
3283 | "console",
3284 | "terminal"
3285 | ],
3286 | "support": {
3287 | "source": "https://github.com/symfony/console/tree/v5.3.0"
3288 | },
3289 | "funding": [
3290 | {
3291 | "url": "https://symfony.com/sponsor",
3292 | "type": "custom"
3293 | },
3294 | {
3295 | "url": "https://github.com/fabpot",
3296 | "type": "github"
3297 | },
3298 | {
3299 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3300 | "type": "tidelift"
3301 | }
3302 | ],
3303 | "time": "2021-05-26T17:43:10+00:00"
3304 | },
3305 | {
3306 | "name": "symfony/deprecation-contracts",
3307 | "version": "v2.4.0",
3308 | "source": {
3309 | "type": "git",
3310 | "url": "https://github.com/symfony/deprecation-contracts.git",
3311 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
3312 | },
3313 | "dist": {
3314 | "type": "zip",
3315 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
3316 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
3317 | "shasum": ""
3318 | },
3319 | "require": {
3320 | "php": ">=7.1"
3321 | },
3322 | "type": "library",
3323 | "extra": {
3324 | "branch-alias": {
3325 | "dev-main": "2.4-dev"
3326 | },
3327 | "thanks": {
3328 | "name": "symfony/contracts",
3329 | "url": "https://github.com/symfony/contracts"
3330 | }
3331 | },
3332 | "autoload": {
3333 | "files": [
3334 | "function.php"
3335 | ]
3336 | },
3337 | "notification-url": "https://packagist.org/downloads/",
3338 | "license": [
3339 | "MIT"
3340 | ],
3341 | "authors": [
3342 | {
3343 | "name": "Nicolas Grekas",
3344 | "email": "p@tchwork.com"
3345 | },
3346 | {
3347 | "name": "Symfony Community",
3348 | "homepage": "https://symfony.com/contributors"
3349 | }
3350 | ],
3351 | "description": "A generic function and convention to trigger deprecation notices",
3352 | "homepage": "https://symfony.com",
3353 | "support": {
3354 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
3355 | },
3356 | "funding": [
3357 | {
3358 | "url": "https://symfony.com/sponsor",
3359 | "type": "custom"
3360 | },
3361 | {
3362 | "url": "https://github.com/fabpot",
3363 | "type": "github"
3364 | },
3365 | {
3366 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3367 | "type": "tidelift"
3368 | }
3369 | ],
3370 | "time": "2021-03-23T23:28:01+00:00"
3371 | },
3372 | {
3373 | "name": "symfony/event-dispatcher",
3374 | "version": "v5.3.0",
3375 | "source": {
3376 | "type": "git",
3377 | "url": "https://github.com/symfony/event-dispatcher.git",
3378 | "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce"
3379 | },
3380 | "dist": {
3381 | "type": "zip",
3382 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce",
3383 | "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce",
3384 | "shasum": ""
3385 | },
3386 | "require": {
3387 | "php": ">=7.2.5",
3388 | "symfony/deprecation-contracts": "^2.1",
3389 | "symfony/event-dispatcher-contracts": "^2",
3390 | "symfony/polyfill-php80": "^1.15"
3391 | },
3392 | "conflict": {
3393 | "symfony/dependency-injection": "<4.4"
3394 | },
3395 | "provide": {
3396 | "psr/event-dispatcher-implementation": "1.0",
3397 | "symfony/event-dispatcher-implementation": "2.0"
3398 | },
3399 | "require-dev": {
3400 | "psr/log": "~1.0",
3401 | "symfony/config": "^4.4|^5.0",
3402 | "symfony/dependency-injection": "^4.4|^5.0",
3403 | "symfony/error-handler": "^4.4|^5.0",
3404 | "symfony/expression-language": "^4.4|^5.0",
3405 | "symfony/http-foundation": "^4.4|^5.0",
3406 | "symfony/service-contracts": "^1.1|^2",
3407 | "symfony/stopwatch": "^4.4|^5.0"
3408 | },
3409 | "suggest": {
3410 | "symfony/dependency-injection": "",
3411 | "symfony/http-kernel": ""
3412 | },
3413 | "type": "library",
3414 | "autoload": {
3415 | "psr-4": {
3416 | "Symfony\\Component\\EventDispatcher\\": ""
3417 | },
3418 | "exclude-from-classmap": [
3419 | "/Tests/"
3420 | ]
3421 | },
3422 | "notification-url": "https://packagist.org/downloads/",
3423 | "license": [
3424 | "MIT"
3425 | ],
3426 | "authors": [
3427 | {
3428 | "name": "Fabien Potencier",
3429 | "email": "fabien@symfony.com"
3430 | },
3431 | {
3432 | "name": "Symfony Community",
3433 | "homepage": "https://symfony.com/contributors"
3434 | }
3435 | ],
3436 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
3437 | "homepage": "https://symfony.com",
3438 | "support": {
3439 | "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0"
3440 | },
3441 | "funding": [
3442 | {
3443 | "url": "https://symfony.com/sponsor",
3444 | "type": "custom"
3445 | },
3446 | {
3447 | "url": "https://github.com/fabpot",
3448 | "type": "github"
3449 | },
3450 | {
3451 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3452 | "type": "tidelift"
3453 | }
3454 | ],
3455 | "time": "2021-05-26T17:43:10+00:00"
3456 | },
3457 | {
3458 | "name": "symfony/event-dispatcher-contracts",
3459 | "version": "v2.4.0",
3460 | "source": {
3461 | "type": "git",
3462 | "url": "https://github.com/symfony/event-dispatcher-contracts.git",
3463 | "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
3464 | },
3465 | "dist": {
3466 | "type": "zip",
3467 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
3468 | "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
3469 | "shasum": ""
3470 | },
3471 | "require": {
3472 | "php": ">=7.2.5",
3473 | "psr/event-dispatcher": "^1"
3474 | },
3475 | "suggest": {
3476 | "symfony/event-dispatcher-implementation": ""
3477 | },
3478 | "type": "library",
3479 | "extra": {
3480 | "branch-alias": {
3481 | "dev-main": "2.4-dev"
3482 | },
3483 | "thanks": {
3484 | "name": "symfony/contracts",
3485 | "url": "https://github.com/symfony/contracts"
3486 | }
3487 | },
3488 | "autoload": {
3489 | "psr-4": {
3490 | "Symfony\\Contracts\\EventDispatcher\\": ""
3491 | }
3492 | },
3493 | "notification-url": "https://packagist.org/downloads/",
3494 | "license": [
3495 | "MIT"
3496 | ],
3497 | "authors": [
3498 | {
3499 | "name": "Nicolas Grekas",
3500 | "email": "p@tchwork.com"
3501 | },
3502 | {
3503 | "name": "Symfony Community",
3504 | "homepage": "https://symfony.com/contributors"
3505 | }
3506 | ],
3507 | "description": "Generic abstractions related to dispatching event",
3508 | "homepage": "https://symfony.com",
3509 | "keywords": [
3510 | "abstractions",
3511 | "contracts",
3512 | "decoupling",
3513 | "interfaces",
3514 | "interoperability",
3515 | "standards"
3516 | ],
3517 | "support": {
3518 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
3519 | },
3520 | "funding": [
3521 | {
3522 | "url": "https://symfony.com/sponsor",
3523 | "type": "custom"
3524 | },
3525 | {
3526 | "url": "https://github.com/fabpot",
3527 | "type": "github"
3528 | },
3529 | {
3530 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3531 | "type": "tidelift"
3532 | }
3533 | ],
3534 | "time": "2021-03-23T23:28:01+00:00"
3535 | },
3536 | {
3537 | "name": "symfony/filesystem",
3538 | "version": "v5.3.0",
3539 | "source": {
3540 | "type": "git",
3541 | "url": "https://github.com/symfony/filesystem.git",
3542 | "reference": "348116319d7fb7d1faa781d26a48922428013eb2"
3543 | },
3544 | "dist": {
3545 | "type": "zip",
3546 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2",
3547 | "reference": "348116319d7fb7d1faa781d26a48922428013eb2",
3548 | "shasum": ""
3549 | },
3550 | "require": {
3551 | "php": ">=7.2.5",
3552 | "symfony/polyfill-ctype": "~1.8"
3553 | },
3554 | "type": "library",
3555 | "autoload": {
3556 | "psr-4": {
3557 | "Symfony\\Component\\Filesystem\\": ""
3558 | },
3559 | "exclude-from-classmap": [
3560 | "/Tests/"
3561 | ]
3562 | },
3563 | "notification-url": "https://packagist.org/downloads/",
3564 | "license": [
3565 | "MIT"
3566 | ],
3567 | "authors": [
3568 | {
3569 | "name": "Fabien Potencier",
3570 | "email": "fabien@symfony.com"
3571 | },
3572 | {
3573 | "name": "Symfony Community",
3574 | "homepage": "https://symfony.com/contributors"
3575 | }
3576 | ],
3577 | "description": "Provides basic utilities for the filesystem",
3578 | "homepage": "https://symfony.com",
3579 | "support": {
3580 | "source": "https://github.com/symfony/filesystem/tree/v5.3.0"
3581 | },
3582 | "funding": [
3583 | {
3584 | "url": "https://symfony.com/sponsor",
3585 | "type": "custom"
3586 | },
3587 | {
3588 | "url": "https://github.com/fabpot",
3589 | "type": "github"
3590 | },
3591 | {
3592 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3593 | "type": "tidelift"
3594 | }
3595 | ],
3596 | "time": "2021-05-26T17:43:10+00:00"
3597 | },
3598 | {
3599 | "name": "symfony/finder",
3600 | "version": "v5.3.0",
3601 | "source": {
3602 | "type": "git",
3603 | "url": "https://github.com/symfony/finder.git",
3604 | "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6"
3605 | },
3606 | "dist": {
3607 | "type": "zip",
3608 | "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6",
3609 | "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6",
3610 | "shasum": ""
3611 | },
3612 | "require": {
3613 | "php": ">=7.2.5"
3614 | },
3615 | "type": "library",
3616 | "autoload": {
3617 | "psr-4": {
3618 | "Symfony\\Component\\Finder\\": ""
3619 | },
3620 | "exclude-from-classmap": [
3621 | "/Tests/"
3622 | ]
3623 | },
3624 | "notification-url": "https://packagist.org/downloads/",
3625 | "license": [
3626 | "MIT"
3627 | ],
3628 | "authors": [
3629 | {
3630 | "name": "Fabien Potencier",
3631 | "email": "fabien@symfony.com"
3632 | },
3633 | {
3634 | "name": "Symfony Community",
3635 | "homepage": "https://symfony.com/contributors"
3636 | }
3637 | ],
3638 | "description": "Finds files and directories via an intuitive fluent interface",
3639 | "homepage": "https://symfony.com",
3640 | "support": {
3641 | "source": "https://github.com/symfony/finder/tree/v5.3.0"
3642 | },
3643 | "funding": [
3644 | {
3645 | "url": "https://symfony.com/sponsor",
3646 | "type": "custom"
3647 | },
3648 | {
3649 | "url": "https://github.com/fabpot",
3650 | "type": "github"
3651 | },
3652 | {
3653 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3654 | "type": "tidelift"
3655 | }
3656 | ],
3657 | "time": "2021-05-26T12:52:38+00:00"
3658 | },
3659 | {
3660 | "name": "symfony/options-resolver",
3661 | "version": "v5.3.0",
3662 | "source": {
3663 | "type": "git",
3664 | "url": "https://github.com/symfony/options-resolver.git",
3665 | "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5"
3666 | },
3667 | "dist": {
3668 | "type": "zip",
3669 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/162e886ca035869866d233a2bfef70cc28f9bbe5",
3670 | "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5",
3671 | "shasum": ""
3672 | },
3673 | "require": {
3674 | "php": ">=7.2.5",
3675 | "symfony/deprecation-contracts": "^2.1",
3676 | "symfony/polyfill-php73": "~1.0",
3677 | "symfony/polyfill-php80": "^1.15"
3678 | },
3679 | "type": "library",
3680 | "autoload": {
3681 | "psr-4": {
3682 | "Symfony\\Component\\OptionsResolver\\": ""
3683 | },
3684 | "exclude-from-classmap": [
3685 | "/Tests/"
3686 | ]
3687 | },
3688 | "notification-url": "https://packagist.org/downloads/",
3689 | "license": [
3690 | "MIT"
3691 | ],
3692 | "authors": [
3693 | {
3694 | "name": "Fabien Potencier",
3695 | "email": "fabien@symfony.com"
3696 | },
3697 | {
3698 | "name": "Symfony Community",
3699 | "homepage": "https://symfony.com/contributors"
3700 | }
3701 | ],
3702 | "description": "Provides an improved replacement for the array_replace PHP function",
3703 | "homepage": "https://symfony.com",
3704 | "keywords": [
3705 | "config",
3706 | "configuration",
3707 | "options"
3708 | ],
3709 | "support": {
3710 | "source": "https://github.com/symfony/options-resolver/tree/v5.3.0"
3711 | },
3712 | "funding": [
3713 | {
3714 | "url": "https://symfony.com/sponsor",
3715 | "type": "custom"
3716 | },
3717 | {
3718 | "url": "https://github.com/fabpot",
3719 | "type": "github"
3720 | },
3721 | {
3722 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3723 | "type": "tidelift"
3724 | }
3725 | ],
3726 | "time": "2021-05-26T17:43:10+00:00"
3727 | },
3728 | {
3729 | "name": "symfony/polyfill-intl-grapheme",
3730 | "version": "v1.23.0",
3731 | "source": {
3732 | "type": "git",
3733 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
3734 | "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab"
3735 | },
3736 | "dist": {
3737 | "type": "zip",
3738 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab",
3739 | "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab",
3740 | "shasum": ""
3741 | },
3742 | "require": {
3743 | "php": ">=7.1"
3744 | },
3745 | "suggest": {
3746 | "ext-intl": "For best performance"
3747 | },
3748 | "type": "library",
3749 | "extra": {
3750 | "branch-alias": {
3751 | "dev-main": "1.23-dev"
3752 | },
3753 | "thanks": {
3754 | "name": "symfony/polyfill",
3755 | "url": "https://github.com/symfony/polyfill"
3756 | }
3757 | },
3758 | "autoload": {
3759 | "psr-4": {
3760 | "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
3761 | },
3762 | "files": [
3763 | "bootstrap.php"
3764 | ]
3765 | },
3766 | "notification-url": "https://packagist.org/downloads/",
3767 | "license": [
3768 | "MIT"
3769 | ],
3770 | "authors": [
3771 | {
3772 | "name": "Nicolas Grekas",
3773 | "email": "p@tchwork.com"
3774 | },
3775 | {
3776 | "name": "Symfony Community",
3777 | "homepage": "https://symfony.com/contributors"
3778 | }
3779 | ],
3780 | "description": "Symfony polyfill for intl's grapheme_* functions",
3781 | "homepage": "https://symfony.com",
3782 | "keywords": [
3783 | "compatibility",
3784 | "grapheme",
3785 | "intl",
3786 | "polyfill",
3787 | "portable",
3788 | "shim"
3789 | ],
3790 | "support": {
3791 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0"
3792 | },
3793 | "funding": [
3794 | {
3795 | "url": "https://symfony.com/sponsor",
3796 | "type": "custom"
3797 | },
3798 | {
3799 | "url": "https://github.com/fabpot",
3800 | "type": "github"
3801 | },
3802 | {
3803 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3804 | "type": "tidelift"
3805 | }
3806 | ],
3807 | "time": "2021-05-27T09:17:38+00:00"
3808 | },
3809 | {
3810 | "name": "symfony/polyfill-intl-normalizer",
3811 | "version": "v1.23.0",
3812 | "source": {
3813 | "type": "git",
3814 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
3815 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
3816 | },
3817 | "dist": {
3818 | "type": "zip",
3819 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
3820 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
3821 | "shasum": ""
3822 | },
3823 | "require": {
3824 | "php": ">=7.1"
3825 | },
3826 | "suggest": {
3827 | "ext-intl": "For best performance"
3828 | },
3829 | "type": "library",
3830 | "extra": {
3831 | "branch-alias": {
3832 | "dev-main": "1.23-dev"
3833 | },
3834 | "thanks": {
3835 | "name": "symfony/polyfill",
3836 | "url": "https://github.com/symfony/polyfill"
3837 | }
3838 | },
3839 | "autoload": {
3840 | "psr-4": {
3841 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
3842 | },
3843 | "files": [
3844 | "bootstrap.php"
3845 | ],
3846 | "classmap": [
3847 | "Resources/stubs"
3848 | ]
3849 | },
3850 | "notification-url": "https://packagist.org/downloads/",
3851 | "license": [
3852 | "MIT"
3853 | ],
3854 | "authors": [
3855 | {
3856 | "name": "Nicolas Grekas",
3857 | "email": "p@tchwork.com"
3858 | },
3859 | {
3860 | "name": "Symfony Community",
3861 | "homepage": "https://symfony.com/contributors"
3862 | }
3863 | ],
3864 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
3865 | "homepage": "https://symfony.com",
3866 | "keywords": [
3867 | "compatibility",
3868 | "intl",
3869 | "normalizer",
3870 | "polyfill",
3871 | "portable",
3872 | "shim"
3873 | ],
3874 | "support": {
3875 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
3876 | },
3877 | "funding": [
3878 | {
3879 | "url": "https://symfony.com/sponsor",
3880 | "type": "custom"
3881 | },
3882 | {
3883 | "url": "https://github.com/fabpot",
3884 | "type": "github"
3885 | },
3886 | {
3887 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3888 | "type": "tidelift"
3889 | }
3890 | ],
3891 | "time": "2021-02-19T12:13:01+00:00"
3892 | },
3893 | {
3894 | "name": "symfony/polyfill-php70",
3895 | "version": "v1.20.0",
3896 | "source": {
3897 | "type": "git",
3898 | "url": "https://github.com/symfony/polyfill-php70.git",
3899 | "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
3900 | },
3901 | "dist": {
3902 | "type": "zip",
3903 | "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
3904 | "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
3905 | "shasum": ""
3906 | },
3907 | "require": {
3908 | "php": ">=7.1"
3909 | },
3910 | "type": "metapackage",
3911 | "extra": {
3912 | "branch-alias": {
3913 | "dev-main": "1.20-dev"
3914 | },
3915 | "thanks": {
3916 | "name": "symfony/polyfill",
3917 | "url": "https://github.com/symfony/polyfill"
3918 | }
3919 | },
3920 | "notification-url": "https://packagist.org/downloads/",
3921 | "license": [
3922 | "MIT"
3923 | ],
3924 | "authors": [
3925 | {
3926 | "name": "Nicolas Grekas",
3927 | "email": "p@tchwork.com"
3928 | },
3929 | {
3930 | "name": "Symfony Community",
3931 | "homepage": "https://symfony.com/contributors"
3932 | }
3933 | ],
3934 | "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
3935 | "homepage": "https://symfony.com",
3936 | "keywords": [
3937 | "compatibility",
3938 | "polyfill",
3939 | "portable",
3940 | "shim"
3941 | ],
3942 | "support": {
3943 | "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0"
3944 | },
3945 | "funding": [
3946 | {
3947 | "url": "https://symfony.com/sponsor",
3948 | "type": "custom"
3949 | },
3950 | {
3951 | "url": "https://github.com/fabpot",
3952 | "type": "github"
3953 | },
3954 | {
3955 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3956 | "type": "tidelift"
3957 | }
3958 | ],
3959 | "time": "2020-10-23T14:02:19+00:00"
3960 | },
3961 | {
3962 | "name": "symfony/polyfill-php72",
3963 | "version": "v1.23.0",
3964 | "source": {
3965 | "type": "git",
3966 | "url": "https://github.com/symfony/polyfill-php72.git",
3967 | "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
3968 | },
3969 | "dist": {
3970 | "type": "zip",
3971 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
3972 | "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
3973 | "shasum": ""
3974 | },
3975 | "require": {
3976 | "php": ">=7.1"
3977 | },
3978 | "type": "library",
3979 | "extra": {
3980 | "branch-alias": {
3981 | "dev-main": "1.23-dev"
3982 | },
3983 | "thanks": {
3984 | "name": "symfony/polyfill",
3985 | "url": "https://github.com/symfony/polyfill"
3986 | }
3987 | },
3988 | "autoload": {
3989 | "psr-4": {
3990 | "Symfony\\Polyfill\\Php72\\": ""
3991 | },
3992 | "files": [
3993 | "bootstrap.php"
3994 | ]
3995 | },
3996 | "notification-url": "https://packagist.org/downloads/",
3997 | "license": [
3998 | "MIT"
3999 | ],
4000 | "authors": [
4001 | {
4002 | "name": "Nicolas Grekas",
4003 | "email": "p@tchwork.com"
4004 | },
4005 | {
4006 | "name": "Symfony Community",
4007 | "homepage": "https://symfony.com/contributors"
4008 | }
4009 | ],
4010 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
4011 | "homepage": "https://symfony.com",
4012 | "keywords": [
4013 | "compatibility",
4014 | "polyfill",
4015 | "portable",
4016 | "shim"
4017 | ],
4018 | "support": {
4019 | "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0"
4020 | },
4021 | "funding": [
4022 | {
4023 | "url": "https://symfony.com/sponsor",
4024 | "type": "custom"
4025 | },
4026 | {
4027 | "url": "https://github.com/fabpot",
4028 | "type": "github"
4029 | },
4030 | {
4031 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4032 | "type": "tidelift"
4033 | }
4034 | ],
4035 | "time": "2021-05-27T09:17:38+00:00"
4036 | },
4037 | {
4038 | "name": "symfony/polyfill-php73",
4039 | "version": "v1.23.0",
4040 | "source": {
4041 | "type": "git",
4042 | "url": "https://github.com/symfony/polyfill-php73.git",
4043 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
4044 | },
4045 | "dist": {
4046 | "type": "zip",
4047 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
4048 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
4049 | "shasum": ""
4050 | },
4051 | "require": {
4052 | "php": ">=7.1"
4053 | },
4054 | "type": "library",
4055 | "extra": {
4056 | "branch-alias": {
4057 | "dev-main": "1.23-dev"
4058 | },
4059 | "thanks": {
4060 | "name": "symfony/polyfill",
4061 | "url": "https://github.com/symfony/polyfill"
4062 | }
4063 | },
4064 | "autoload": {
4065 | "psr-4": {
4066 | "Symfony\\Polyfill\\Php73\\": ""
4067 | },
4068 | "files": [
4069 | "bootstrap.php"
4070 | ],
4071 | "classmap": [
4072 | "Resources/stubs"
4073 | ]
4074 | },
4075 | "notification-url": "https://packagist.org/downloads/",
4076 | "license": [
4077 | "MIT"
4078 | ],
4079 | "authors": [
4080 | {
4081 | "name": "Nicolas Grekas",
4082 | "email": "p@tchwork.com"
4083 | },
4084 | {
4085 | "name": "Symfony Community",
4086 | "homepage": "https://symfony.com/contributors"
4087 | }
4088 | ],
4089 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
4090 | "homepage": "https://symfony.com",
4091 | "keywords": [
4092 | "compatibility",
4093 | "polyfill",
4094 | "portable",
4095 | "shim"
4096 | ],
4097 | "support": {
4098 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
4099 | },
4100 | "funding": [
4101 | {
4102 | "url": "https://symfony.com/sponsor",
4103 | "type": "custom"
4104 | },
4105 | {
4106 | "url": "https://github.com/fabpot",
4107 | "type": "github"
4108 | },
4109 | {
4110 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4111 | "type": "tidelift"
4112 | }
4113 | ],
4114 | "time": "2021-02-19T12:13:01+00:00"
4115 | },
4116 | {
4117 | "name": "symfony/process",
4118 | "version": "v5.3.0",
4119 | "source": {
4120 | "type": "git",
4121 | "url": "https://github.com/symfony/process.git",
4122 | "reference": "53e36cb1c160505cdaf1ef201501669c4c317191"
4123 | },
4124 | "dist": {
4125 | "type": "zip",
4126 | "url": "https://api.github.com/repos/symfony/process/zipball/53e36cb1c160505cdaf1ef201501669c4c317191",
4127 | "reference": "53e36cb1c160505cdaf1ef201501669c4c317191",
4128 | "shasum": ""
4129 | },
4130 | "require": {
4131 | "php": ">=7.2.5",
4132 | "symfony/polyfill-php80": "^1.15"
4133 | },
4134 | "type": "library",
4135 | "autoload": {
4136 | "psr-4": {
4137 | "Symfony\\Component\\Process\\": ""
4138 | },
4139 | "exclude-from-classmap": [
4140 | "/Tests/"
4141 | ]
4142 | },
4143 | "notification-url": "https://packagist.org/downloads/",
4144 | "license": [
4145 | "MIT"
4146 | ],
4147 | "authors": [
4148 | {
4149 | "name": "Fabien Potencier",
4150 | "email": "fabien@symfony.com"
4151 | },
4152 | {
4153 | "name": "Symfony Community",
4154 | "homepage": "https://symfony.com/contributors"
4155 | }
4156 | ],
4157 | "description": "Executes commands in sub-processes",
4158 | "homepage": "https://symfony.com",
4159 | "support": {
4160 | "source": "https://github.com/symfony/process/tree/v5.3.0"
4161 | },
4162 | "funding": [
4163 | {
4164 | "url": "https://symfony.com/sponsor",
4165 | "type": "custom"
4166 | },
4167 | {
4168 | "url": "https://github.com/fabpot",
4169 | "type": "github"
4170 | },
4171 | {
4172 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4173 | "type": "tidelift"
4174 | }
4175 | ],
4176 | "time": "2021-05-26T12:52:38+00:00"
4177 | },
4178 | {
4179 | "name": "symfony/service-contracts",
4180 | "version": "v2.4.0",
4181 | "source": {
4182 | "type": "git",
4183 | "url": "https://github.com/symfony/service-contracts.git",
4184 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
4185 | },
4186 | "dist": {
4187 | "type": "zip",
4188 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
4189 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
4190 | "shasum": ""
4191 | },
4192 | "require": {
4193 | "php": ">=7.2.5",
4194 | "psr/container": "^1.1"
4195 | },
4196 | "suggest": {
4197 | "symfony/service-implementation": ""
4198 | },
4199 | "type": "library",
4200 | "extra": {
4201 | "branch-alias": {
4202 | "dev-main": "2.4-dev"
4203 | },
4204 | "thanks": {
4205 | "name": "symfony/contracts",
4206 | "url": "https://github.com/symfony/contracts"
4207 | }
4208 | },
4209 | "autoload": {
4210 | "psr-4": {
4211 | "Symfony\\Contracts\\Service\\": ""
4212 | }
4213 | },
4214 | "notification-url": "https://packagist.org/downloads/",
4215 | "license": [
4216 | "MIT"
4217 | ],
4218 | "authors": [
4219 | {
4220 | "name": "Nicolas Grekas",
4221 | "email": "p@tchwork.com"
4222 | },
4223 | {
4224 | "name": "Symfony Community",
4225 | "homepage": "https://symfony.com/contributors"
4226 | }
4227 | ],
4228 | "description": "Generic abstractions related to writing services",
4229 | "homepage": "https://symfony.com",
4230 | "keywords": [
4231 | "abstractions",
4232 | "contracts",
4233 | "decoupling",
4234 | "interfaces",
4235 | "interoperability",
4236 | "standards"
4237 | ],
4238 | "support": {
4239 | "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
4240 | },
4241 | "funding": [
4242 | {
4243 | "url": "https://symfony.com/sponsor",
4244 | "type": "custom"
4245 | },
4246 | {
4247 | "url": "https://github.com/fabpot",
4248 | "type": "github"
4249 | },
4250 | {
4251 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4252 | "type": "tidelift"
4253 | }
4254 | ],
4255 | "time": "2021-04-01T10:43:52+00:00"
4256 | },
4257 | {
4258 | "name": "symfony/stopwatch",
4259 | "version": "v5.3.0",
4260 | "source": {
4261 | "type": "git",
4262 | "url": "https://github.com/symfony/stopwatch.git",
4263 | "reference": "313d02f59d6543311865007e5ff4ace05b35ee65"
4264 | },
4265 | "dist": {
4266 | "type": "zip",
4267 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/313d02f59d6543311865007e5ff4ace05b35ee65",
4268 | "reference": "313d02f59d6543311865007e5ff4ace05b35ee65",
4269 | "shasum": ""
4270 | },
4271 | "require": {
4272 | "php": ">=7.2.5",
4273 | "symfony/service-contracts": "^1.0|^2"
4274 | },
4275 | "type": "library",
4276 | "autoload": {
4277 | "psr-4": {
4278 | "Symfony\\Component\\Stopwatch\\": ""
4279 | },
4280 | "exclude-from-classmap": [
4281 | "/Tests/"
4282 | ]
4283 | },
4284 | "notification-url": "https://packagist.org/downloads/",
4285 | "license": [
4286 | "MIT"
4287 | ],
4288 | "authors": [
4289 | {
4290 | "name": "Fabien Potencier",
4291 | "email": "fabien@symfony.com"
4292 | },
4293 | {
4294 | "name": "Symfony Community",
4295 | "homepage": "https://symfony.com/contributors"
4296 | }
4297 | ],
4298 | "description": "Provides a way to profile code",
4299 | "homepage": "https://symfony.com",
4300 | "support": {
4301 | "source": "https://github.com/symfony/stopwatch/tree/v5.3.0"
4302 | },
4303 | "funding": [
4304 | {
4305 | "url": "https://symfony.com/sponsor",
4306 | "type": "custom"
4307 | },
4308 | {
4309 | "url": "https://github.com/fabpot",
4310 | "type": "github"
4311 | },
4312 | {
4313 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4314 | "type": "tidelift"
4315 | }
4316 | ],
4317 | "time": "2021-05-26T17:43:10+00:00"
4318 | },
4319 | {
4320 | "name": "symfony/string",
4321 | "version": "v5.3.0",
4322 | "source": {
4323 | "type": "git",
4324 | "url": "https://github.com/symfony/string.git",
4325 | "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b"
4326 | },
4327 | "dist": {
4328 | "type": "zip",
4329 | "url": "https://api.github.com/repos/symfony/string/zipball/a9a0f8b6aafc5d2d1c116dcccd1573a95153515b",
4330 | "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b",
4331 | "shasum": ""
4332 | },
4333 | "require": {
4334 | "php": ">=7.2.5",
4335 | "symfony/polyfill-ctype": "~1.8",
4336 | "symfony/polyfill-intl-grapheme": "~1.0",
4337 | "symfony/polyfill-intl-normalizer": "~1.0",
4338 | "symfony/polyfill-mbstring": "~1.0",
4339 | "symfony/polyfill-php80": "~1.15"
4340 | },
4341 | "require-dev": {
4342 | "symfony/error-handler": "^4.4|^5.0",
4343 | "symfony/http-client": "^4.4|^5.0",
4344 | "symfony/translation-contracts": "^1.1|^2",
4345 | "symfony/var-exporter": "^4.4|^5.0"
4346 | },
4347 | "type": "library",
4348 | "autoload": {
4349 | "psr-4": {
4350 | "Symfony\\Component\\String\\": ""
4351 | },
4352 | "files": [
4353 | "Resources/functions.php"
4354 | ],
4355 | "exclude-from-classmap": [
4356 | "/Tests/"
4357 | ]
4358 | },
4359 | "notification-url": "https://packagist.org/downloads/",
4360 | "license": [
4361 | "MIT"
4362 | ],
4363 | "authors": [
4364 | {
4365 | "name": "Nicolas Grekas",
4366 | "email": "p@tchwork.com"
4367 | },
4368 | {
4369 | "name": "Symfony Community",
4370 | "homepage": "https://symfony.com/contributors"
4371 | }
4372 | ],
4373 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
4374 | "homepage": "https://symfony.com",
4375 | "keywords": [
4376 | "grapheme",
4377 | "i18n",
4378 | "string",
4379 | "unicode",
4380 | "utf-8",
4381 | "utf8"
4382 | ],
4383 | "support": {
4384 | "source": "https://github.com/symfony/string/tree/v5.3.0"
4385 | },
4386 | "funding": [
4387 | {
4388 | "url": "https://symfony.com/sponsor",
4389 | "type": "custom"
4390 | },
4391 | {
4392 | "url": "https://github.com/fabpot",
4393 | "type": "github"
4394 | },
4395 | {
4396 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
4397 | "type": "tidelift"
4398 | }
4399 | ],
4400 | "time": "2021-05-26T17:43:10+00:00"
4401 | },
4402 | {
4403 | "name": "theseer/tokenizer",
4404 | "version": "1.2.0",
4405 | "source": {
4406 | "type": "git",
4407 | "url": "https://github.com/theseer/tokenizer.git",
4408 | "reference": "75a63c33a8577608444246075ea0af0d052e452a"
4409 | },
4410 | "dist": {
4411 | "type": "zip",
4412 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
4413 | "reference": "75a63c33a8577608444246075ea0af0d052e452a",
4414 | "shasum": ""
4415 | },
4416 | "require": {
4417 | "ext-dom": "*",
4418 | "ext-tokenizer": "*",
4419 | "ext-xmlwriter": "*",
4420 | "php": "^7.2 || ^8.0"
4421 | },
4422 | "type": "library",
4423 | "autoload": {
4424 | "classmap": [
4425 | "src/"
4426 | ]
4427 | },
4428 | "notification-url": "https://packagist.org/downloads/",
4429 | "license": [
4430 | "BSD-3-Clause"
4431 | ],
4432 | "authors": [
4433 | {
4434 | "name": "Arne Blankerts",
4435 | "email": "arne@blankerts.de",
4436 | "role": "Developer"
4437 | }
4438 | ],
4439 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
4440 | "support": {
4441 | "issues": "https://github.com/theseer/tokenizer/issues",
4442 | "source": "https://github.com/theseer/tokenizer/tree/master"
4443 | },
4444 | "funding": [
4445 | {
4446 | "url": "https://github.com/theseer",
4447 | "type": "github"
4448 | }
4449 | ],
4450 | "time": "2020-07-12T23:59:07+00:00"
4451 | },
4452 | {
4453 | "name": "webmozart/assert",
4454 | "version": "1.10.0",
4455 | "source": {
4456 | "type": "git",
4457 | "url": "https://github.com/webmozarts/assert.git",
4458 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
4459 | },
4460 | "dist": {
4461 | "type": "zip",
4462 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
4463 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
4464 | "shasum": ""
4465 | },
4466 | "require": {
4467 | "php": "^7.2 || ^8.0",
4468 | "symfony/polyfill-ctype": "^1.8"
4469 | },
4470 | "conflict": {
4471 | "phpstan/phpstan": "<0.12.20",
4472 | "vimeo/psalm": "<4.6.1 || 4.6.2"
4473 | },
4474 | "require-dev": {
4475 | "phpunit/phpunit": "^8.5.13"
4476 | },
4477 | "type": "library",
4478 | "extra": {
4479 | "branch-alias": {
4480 | "dev-master": "1.10-dev"
4481 | }
4482 | },
4483 | "autoload": {
4484 | "psr-4": {
4485 | "Webmozart\\Assert\\": "src/"
4486 | }
4487 | },
4488 | "notification-url": "https://packagist.org/downloads/",
4489 | "license": [
4490 | "MIT"
4491 | ],
4492 | "authors": [
4493 | {
4494 | "name": "Bernhard Schussek",
4495 | "email": "bschussek@gmail.com"
4496 | }
4497 | ],
4498 | "description": "Assertions to validate method input/output with nice error messages.",
4499 | "keywords": [
4500 | "assert",
4501 | "check",
4502 | "validate"
4503 | ],
4504 | "support": {
4505 | "issues": "https://github.com/webmozarts/assert/issues",
4506 | "source": "https://github.com/webmozarts/assert/tree/1.10.0"
4507 | },
4508 | "time": "2021-03-09T10:59:23+00:00"
4509 | }
4510 | ],
4511 | "aliases": [],
4512 | "minimum-stability": "stable",
4513 | "stability-flags": [],
4514 | "prefer-stable": false,
4515 | "prefer-lowest": false,
4516 | "platform": {
4517 | "php": "^7.2.5 || ^8.0"
4518 | },
4519 | "platform-dev": [],
4520 | "plugin-api-version": "2.1.0"
4521 | }
4522 |
--------------------------------------------------------------------------------