├── .github
└── workflows
│ ├── infection.yml
│ ├── php.yml
│ ├── phpstan.yml
│ └── unittest.yml
├── .gitignore
├── Jenkinsfile
├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── infection.json.dist
├── phpunit.xml.dist
├── src
├── Concepts
│ ├── Random
│ │ ├── RandomnessEncoderInterface.php
│ │ ├── Source
│ │ │ ├── LcgRandomGenerator.php
│ │ │ └── RandomFloatInterface.php
│ │ └── UlidRandomnessEncoder.php
│ └── Time
│ │ ├── PHPTimeSource.php
│ │ ├── TimeEncoderInterface.php
│ │ ├── TimeSourceInterface.php
│ │ └── UlidTimeEncoder.php
├── Ulid.php
└── ValueTypes
│ └── PositiveNumber.php
└── tests
├── BaseTest.php
├── PositiveNumberTest.php
├── RandomEncoderTest.php
├── Support
└── CannedTimeSource.php
└── TimeEncoderTest.php
/.github/workflows/infection.yml:
--------------------------------------------------------------------------------
1 | name: Mutation tests
2 | on:
3 | workflow_dispatch:
4 | workflow_call:
5 | jobs:
6 | mutation_testing:
7 | runs-on: ubuntu-latest
8 | strategy:
9 | matrix:
10 | # Lint against the highest/lowest supported versions of each PHP major.
11 | # And also do a run against "nightly" (the current dev version of PHP).
12 | php_version: ['7.4']
13 | steps:
14 | - name: Checkout code
15 | uses: actions/checkout@v3
16 |
17 | - name: Install PHP
18 | uses: shivammathur/setup-php@v2
19 | with:
20 | php-version: ${{ matrix.php_version }}
21 |
22 | # Install dependencies and handle caching in one go.
23 | # @link https://github.com/marketplace/actions/install-composer-dependencies
24 | - name: Install Composer dependencies
25 | uses: ramsey/composer-install@v2
26 |
27 | - name: Mutation test
28 | run: php vendor/bin/infection
29 |
--------------------------------------------------------------------------------
/.github/workflows/php.yml:
--------------------------------------------------------------------------------
1 | name: PHP Composer
2 |
3 | on:
4 | push:
5 | branches: [ main ]
6 | pull_request:
7 | branches: [ main ]
8 |
9 | concurrency:
10 | # The concurrency group contains the workflow name and the branch name.
11 | group: ${{ github.workflow }}-${{ github.ref }}
12 | cancel-in-progress: true
13 |
14 | jobs:
15 | static_analysis:
16 | uses: Lewiscowles1986/php-ulid/.github/workflows/phpstan.yml@main
17 | unit_test:
18 | uses: Lewiscowles1986/php-ulid/.github/workflows/unittest.yml@main
19 | mutation_testing:
20 | uses: Lewiscowles1986/php-ulid/.github/workflows/infection.yml@main
21 |
--------------------------------------------------------------------------------
/.github/workflows/phpstan.yml:
--------------------------------------------------------------------------------
1 | name: Static Analysis
2 | on:
3 | workflow_call:
4 | jobs:
5 | static_analyse:
6 | runs-on: ubuntu-latest
7 | strategy:
8 | matrix:
9 | # Lint against the highest/lowest supported versions of each PHP major.
10 | # And also do a run against "nightly" (the current dev version of PHP).
11 | php_version: ['7.4']
12 | steps:
13 | - name: Checkout code
14 | uses: actions/checkout@v3
15 |
16 | - name: Install PHP
17 | uses: shivammathur/setup-php@v2
18 | with:
19 | php-version: ${{ matrix.php_version }}
20 |
21 | # Install dependencies and handle caching in one go.
22 | # @link https://github.com/marketplace/actions/install-composer-dependencies
23 | - name: Install Composer dependencies
24 | uses: ramsey/composer-install@v2
25 |
26 | - name: Static Analysis
27 | run: php vendor/bin/phpstan analyse src -l max
28 |
--------------------------------------------------------------------------------
/.github/workflows/unittest.yml:
--------------------------------------------------------------------------------
1 | name: Unit Tests
2 | on:
3 | workflow_call:
4 | jobs:
5 | unit_tests:
6 | runs-on: ubuntu-latest
7 | strategy:
8 | matrix:
9 | # Lint against the highest/lowest supported versions of each PHP major.
10 | # And also do a run against "nightly" (the current dev version of PHP).
11 | php_version: ['7.4', '8.0', '8.1']
12 | steps:
13 | - name: Checkout code
14 | uses: actions/checkout@v3
15 |
16 | - name: Install PHP
17 | uses: shivammathur/setup-php@v2
18 | with:
19 | php-version: ${{ matrix.php_version }}
20 |
21 | # Install dependencies and handle caching in one go.
22 | # @link https://github.com/marketplace/actions/install-composer-dependencies
23 | - name: Install Composer dependencies
24 | uses: ramsey/composer-install@v2
25 |
26 | - name: Run test suite
27 | run: php vendor/bin/phpunit
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | composer.phar
2 | /vendor/
3 | .phpunit.result.cache
4 | infection.log
5 | /reports/
6 |
7 | # Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file
8 | # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
9 | # composer.lock
10 |
--------------------------------------------------------------------------------
/Jenkinsfile:
--------------------------------------------------------------------------------
1 | def docker_images = ["cd2team/docker-php:7.0", "cd2team/docker-php:7.1", "cd2team/docker-php:7.2"]
2 |
3 | def get_stages(docker_image) {
4 | stages = {
5 | docker.image(docker_image).inside {
6 | stage("${docker_image}") {
7 | echo 'Running in ${docker_image}'
8 | }
9 | stage('build') {
10 | sh "composer install"
11 | }
12 | stage('test') {
13 | sh "./vendor/bin/phpunit"
14 | }
15 |
16 | }
17 | }
18 | return stages
19 | }
20 |
21 | node('master') {
22 | def stages = [:]
23 |
24 | for (int i = 0; i < docker_images.size(); i++) {
25 | def docker_image = docker_images[i]
26 | stages[docker_image] = get_stages(docker_image)
27 | }
28 |
29 | stage('checkout') {
30 | checkout scm
31 | }
32 | parallel stages
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU AFFERO GENERAL PUBLIC LICENSE
2 | Version 3, 19 November 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU Affero General Public License is a free, copyleft license for
11 | software and other kinds of works, specifically designed to ensure
12 | cooperation with the community in the case of network server software.
13 |
14 | The licenses for most software and other practical works are designed
15 | to take away your freedom to share and change the works. By contrast,
16 | our General Public Licenses are intended to guarantee your freedom to
17 | share and change all versions of a program--to make sure it remains free
18 | software for all its users.
19 |
20 | When we speak of free software, we are referring to freedom, not
21 | price. Our General Public Licenses are designed to make sure that you
22 | have the freedom to distribute copies of free software (and charge for
23 | them if you wish), that you receive source code or can get it if you
24 | want it, that you can change the software or use pieces of it in new
25 | free programs, and that you know you can do these things.
26 |
27 | Developers that use our General Public Licenses protect your rights
28 | with two steps: (1) assert copyright on the software, and (2) offer
29 | you this License which gives you legal permission to copy, distribute
30 | and/or modify the software.
31 |
32 | A secondary benefit of defending all users' freedom is that
33 | improvements made in alternate versions of the program, if they
34 | receive widespread use, become available for other developers to
35 | incorporate. Many developers of free software are heartened and
36 | encouraged by the resulting cooperation. However, in the case of
37 | software used on network servers, this result may fail to come about.
38 | The GNU General Public License permits making a modified version and
39 | letting the public access it on a server without ever releasing its
40 | source code to the public.
41 |
42 | The GNU Affero General Public License is designed specifically to
43 | ensure that, in such cases, the modified source code becomes available
44 | to the community. It requires the operator of a network server to
45 | provide the source code of the modified version running there to the
46 | users of that server. Therefore, public use of a modified version, on
47 | a publicly accessible server, gives the public access to the source
48 | code of the modified version.
49 |
50 | An older license, called the Affero General Public License and
51 | published by Affero, was designed to accomplish similar goals. This is
52 | a different license, not a version of the Affero GPL, but Affero has
53 | released a new version of the Affero GPL which permits relicensing under
54 | this license.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | TERMS AND CONDITIONS
60 |
61 | 0. Definitions.
62 |
63 | "This License" refers to version 3 of the GNU Affero General Public License.
64 |
65 | "Copyright" also means copyright-like laws that apply to other kinds of
66 | works, such as semiconductor masks.
67 |
68 | "The Program" refers to any copyrightable work licensed under this
69 | License. Each licensee is addressed as "you". "Licensees" and
70 | "recipients" may be individuals or organizations.
71 |
72 | To "modify" a work means to copy from or adapt all or part of the work
73 | in a fashion requiring copyright permission, other than the making of an
74 | exact copy. The resulting work is called a "modified version" of the
75 | earlier work or a work "based on" the earlier work.
76 |
77 | A "covered work" means either the unmodified Program or a work based
78 | on the Program.
79 |
80 | To "propagate" a work means to do anything with it that, without
81 | permission, would make you directly or secondarily liable for
82 | infringement under applicable copyright law, except executing it on a
83 | computer or modifying a private copy. Propagation includes copying,
84 | distribution (with or without modification), making available to the
85 | public, and in some countries other activities as well.
86 |
87 | To "convey" a work means any kind of propagation that enables other
88 | parties to make or receive copies. Mere interaction with a user through
89 | a computer network, with no transfer of a copy, is not conveying.
90 |
91 | An interactive user interface displays "Appropriate Legal Notices"
92 | to the extent that it includes a convenient and prominently visible
93 | feature that (1) displays an appropriate copyright notice, and (2)
94 | tells the user that there is no warranty for the work (except to the
95 | extent that warranties are provided), that licensees may convey the
96 | work under this License, and how to view a copy of this License. If
97 | the interface presents a list of user commands or options, such as a
98 | menu, a prominent item in the list meets this criterion.
99 |
100 | 1. Source Code.
101 |
102 | The "source code" for a work means the preferred form of the work
103 | for making modifications to it. "Object code" means any non-source
104 | form of a work.
105 |
106 | A "Standard Interface" means an interface that either is an official
107 | standard defined by a recognized standards body, or, in the case of
108 | interfaces specified for a particular programming language, one that
109 | is widely used among developers working in that language.
110 |
111 | The "System Libraries" of an executable work include anything, other
112 | than the work as a whole, that (a) is included in the normal form of
113 | packaging a Major Component, but which is not part of that Major
114 | Component, and (b) serves only to enable use of the work with that
115 | Major Component, or to implement a Standard Interface for which an
116 | implementation is available to the public in source code form. A
117 | "Major Component", in this context, means a major essential component
118 | (kernel, window system, and so on) of the specific operating system
119 | (if any) on which the executable work runs, or a compiler used to
120 | produce the work, or an object code interpreter used to run it.
121 |
122 | The "Corresponding Source" for a work in object code form means all
123 | the source code needed to generate, install, and (for an executable
124 | work) run the object code and to modify the work, including scripts to
125 | control those activities. However, it does not include the work's
126 | System Libraries, or general-purpose tools or generally available free
127 | programs which are used unmodified in performing those activities but
128 | which are not part of the work. For example, Corresponding Source
129 | includes interface definition files associated with source files for
130 | the work, and the source code for shared libraries and dynamically
131 | linked subprograms that the work is specifically designed to require,
132 | such as by intimate data communication or control flow between those
133 | subprograms and other parts of the work.
134 |
135 | The Corresponding Source need not include anything that users
136 | can regenerate automatically from other parts of the Corresponding
137 | Source.
138 |
139 | The Corresponding Source for a work in source code form is that
140 | same work.
141 |
142 | 2. Basic Permissions.
143 |
144 | All rights granted under this License are granted for the term of
145 | copyright on the Program, and are irrevocable provided the stated
146 | conditions are met. This License explicitly affirms your unlimited
147 | permission to run the unmodified Program. The output from running a
148 | covered work is covered by this License only if the output, given its
149 | content, constitutes a covered work. This License acknowledges your
150 | rights of fair use or other equivalent, as provided by copyright law.
151 |
152 | You may make, run and propagate covered works that you do not
153 | convey, without conditions so long as your license otherwise remains
154 | in force. You may convey covered works to others for the sole purpose
155 | of having them make modifications exclusively for you, or provide you
156 | with facilities for running those works, provided that you comply with
157 | the terms of this License in conveying all material for which you do
158 | not control copyright. Those thus making or running the covered works
159 | for you must do so exclusively on your behalf, under your direction
160 | and control, on terms that prohibit them from making any copies of
161 | your copyrighted material outside their relationship with you.
162 |
163 | Conveying under any other circumstances is permitted solely under
164 | the conditions stated below. Sublicensing is not allowed; section 10
165 | makes it unnecessary.
166 |
167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
168 |
169 | No covered work shall be deemed part of an effective technological
170 | measure under any applicable law fulfilling obligations under article
171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
172 | similar laws prohibiting or restricting circumvention of such
173 | measures.
174 |
175 | When you convey a covered work, you waive any legal power to forbid
176 | circumvention of technological measures to the extent such circumvention
177 | is effected by exercising rights under this License with respect to
178 | the covered work, and you disclaim any intention to limit operation or
179 | modification of the work as a means of enforcing, against the work's
180 | users, your or third parties' legal rights to forbid circumvention of
181 | technological measures.
182 |
183 | 4. Conveying Verbatim Copies.
184 |
185 | You may convey verbatim copies of the Program's source code as you
186 | receive it, in any medium, provided that you conspicuously and
187 | appropriately publish on each copy an appropriate copyright notice;
188 | keep intact all notices stating that this License and any
189 | non-permissive terms added in accord with section 7 apply to the code;
190 | keep intact all notices of the absence of any warranty; and give all
191 | recipients a copy of this License along with the Program.
192 |
193 | You may charge any price or no price for each copy that you convey,
194 | and you may offer support or warranty protection for a fee.
195 |
196 | 5. Conveying Modified Source Versions.
197 |
198 | You may convey a work based on the Program, or the modifications to
199 | produce it from the Program, in the form of source code under the
200 | terms of section 4, provided that you also meet all of these conditions:
201 |
202 | a) The work must carry prominent notices stating that you modified
203 | it, and giving a relevant date.
204 |
205 | b) The work must carry prominent notices stating that it is
206 | released under this License and any conditions added under section
207 | 7. This requirement modifies the requirement in section 4 to
208 | "keep intact all notices".
209 |
210 | c) You must license the entire work, as a whole, under this
211 | License to anyone who comes into possession of a copy. This
212 | License will therefore apply, along with any applicable section 7
213 | additional terms, to the whole of the work, and all its parts,
214 | regardless of how they are packaged. This License gives no
215 | permission to license the work in any other way, but it does not
216 | invalidate such permission if you have separately received it.
217 |
218 | d) If the work has interactive user interfaces, each must display
219 | Appropriate Legal Notices; however, if the Program has interactive
220 | interfaces that do not display Appropriate Legal Notices, your
221 | work need not make them do so.
222 |
223 | A compilation of a covered work with other separate and independent
224 | works, which are not by their nature extensions of the covered work,
225 | and which are not combined with it such as to form a larger program,
226 | in or on a volume of a storage or distribution medium, is called an
227 | "aggregate" if the compilation and its resulting copyright are not
228 | used to limit the access or legal rights of the compilation's users
229 | beyond what the individual works permit. Inclusion of a covered work
230 | in an aggregate does not cause this License to apply to the other
231 | parts of the aggregate.
232 |
233 | 6. Conveying Non-Source Forms.
234 |
235 | You may convey a covered work in object code form under the terms
236 | of sections 4 and 5, provided that you also convey the
237 | machine-readable Corresponding Source under the terms of this License,
238 | in one of these ways:
239 |
240 | a) Convey the object code in, or embodied in, a physical product
241 | (including a physical distribution medium), accompanied by the
242 | Corresponding Source fixed on a durable physical medium
243 | customarily used for software interchange.
244 |
245 | b) Convey the object code in, or embodied in, a physical product
246 | (including a physical distribution medium), accompanied by a
247 | written offer, valid for at least three years and valid for as
248 | long as you offer spare parts or customer support for that product
249 | model, to give anyone who possesses the object code either (1) a
250 | copy of the Corresponding Source for all the software in the
251 | product that is covered by this License, on a durable physical
252 | medium customarily used for software interchange, for a price no
253 | more than your reasonable cost of physically performing this
254 | conveying of source, or (2) access to copy the
255 | Corresponding Source from a network server at no charge.
256 |
257 | c) Convey individual copies of the object code with a copy of the
258 | written offer to provide the Corresponding Source. This
259 | alternative is allowed only occasionally and noncommercially, and
260 | only if you received the object code with such an offer, in accord
261 | with subsection 6b.
262 |
263 | d) Convey the object code by offering access from a designated
264 | place (gratis or for a charge), and offer equivalent access to the
265 | Corresponding Source in the same way through the same place at no
266 | further charge. You need not require recipients to copy the
267 | Corresponding Source along with the object code. If the place to
268 | copy the object code is a network server, the Corresponding Source
269 | may be on a different server (operated by you or a third party)
270 | that supports equivalent copying facilities, provided you maintain
271 | clear directions next to the object code saying where to find the
272 | Corresponding Source. Regardless of what server hosts the
273 | Corresponding Source, you remain obligated to ensure that it is
274 | available for as long as needed to satisfy these requirements.
275 |
276 | e) Convey the object code using peer-to-peer transmission, provided
277 | you inform other peers where the object code and Corresponding
278 | Source of the work are being offered to the general public at no
279 | charge under subsection 6d.
280 |
281 | A separable portion of the object code, whose source code is excluded
282 | from the Corresponding Source as a System Library, need not be
283 | included in conveying the object code work.
284 |
285 | A "User Product" is either (1) a "consumer product", which means any
286 | tangible personal property which is normally used for personal, family,
287 | or household purposes, or (2) anything designed or sold for incorporation
288 | into a dwelling. In determining whether a product is a consumer product,
289 | doubtful cases shall be resolved in favor of coverage. For a particular
290 | product received by a particular user, "normally used" refers to a
291 | typical or common use of that class of product, regardless of the status
292 | of the particular user or of the way in which the particular user
293 | actually uses, or expects or is expected to use, the product. A product
294 | is a consumer product regardless of whether the product has substantial
295 | commercial, industrial or non-consumer uses, unless such uses represent
296 | the only significant mode of use of the product.
297 |
298 | "Installation Information" for a User Product means any methods,
299 | procedures, authorization keys, or other information required to install
300 | and execute modified versions of a covered work in that User Product from
301 | a modified version of its Corresponding Source. The information must
302 | suffice to ensure that the continued functioning of the modified object
303 | code is in no case prevented or interfered with solely because
304 | modification has been made.
305 |
306 | If you convey an object code work under this section in, or with, or
307 | specifically for use in, a User Product, and the conveying occurs as
308 | part of a transaction in which the right of possession and use of the
309 | User Product is transferred to the recipient in perpetuity or for a
310 | fixed term (regardless of how the transaction is characterized), the
311 | Corresponding Source conveyed under this section must be accompanied
312 | by the Installation Information. But this requirement does not apply
313 | if neither you nor any third party retains the ability to install
314 | modified object code on the User Product (for example, the work has
315 | been installed in ROM).
316 |
317 | The requirement to provide Installation Information does not include a
318 | requirement to continue to provide support service, warranty, or updates
319 | for a work that has been modified or installed by the recipient, or for
320 | the User Product in which it has been modified or installed. Access to a
321 | network may be denied when the modification itself materially and
322 | adversely affects the operation of the network or violates the rules and
323 | protocols for communication across the network.
324 |
325 | Corresponding Source conveyed, and Installation Information provided,
326 | in accord with this section must be in a format that is publicly
327 | documented (and with an implementation available to the public in
328 | source code form), and must require no special password or key for
329 | unpacking, reading or copying.
330 |
331 | 7. Additional Terms.
332 |
333 | "Additional permissions" are terms that supplement the terms of this
334 | License by making exceptions from one or more of its conditions.
335 | Additional permissions that are applicable to the entire Program shall
336 | be treated as though they were included in this License, to the extent
337 | that they are valid under applicable law. If additional permissions
338 | apply only to part of the Program, that part may be used separately
339 | under those permissions, but the entire Program remains governed by
340 | this License without regard to the additional permissions.
341 |
342 | When you convey a copy of a covered work, you may at your option
343 | remove any additional permissions from that copy, or from any part of
344 | it. (Additional permissions may be written to require their own
345 | removal in certain cases when you modify the work.) You may place
346 | additional permissions on material, added by you to a covered work,
347 | for which you have or can give appropriate copyright permission.
348 |
349 | Notwithstanding any other provision of this License, for material you
350 | add to a covered work, you may (if authorized by the copyright holders of
351 | that material) supplement the terms of this License with terms:
352 |
353 | a) Disclaiming warranty or limiting liability differently from the
354 | terms of sections 15 and 16 of this License; or
355 |
356 | b) Requiring preservation of specified reasonable legal notices or
357 | author attributions in that material or in the Appropriate Legal
358 | Notices displayed by works containing it; or
359 |
360 | c) Prohibiting misrepresentation of the origin of that material, or
361 | requiring that modified versions of such material be marked in
362 | reasonable ways as different from the original version; or
363 |
364 | d) Limiting the use for publicity purposes of names of licensors or
365 | authors of the material; or
366 |
367 | e) Declining to grant rights under trademark law for use of some
368 | trade names, trademarks, or service marks; or
369 |
370 | f) Requiring indemnification of licensors and authors of that
371 | material by anyone who conveys the material (or modified versions of
372 | it) with contractual assumptions of liability to the recipient, for
373 | any liability that these contractual assumptions directly impose on
374 | those licensors and authors.
375 |
376 | All other non-permissive additional terms are considered "further
377 | restrictions" within the meaning of section 10. If the Program as you
378 | received it, or any part of it, contains a notice stating that it is
379 | governed by this License along with a term that is a further
380 | restriction, you may remove that term. If a license document contains
381 | a further restriction but permits relicensing or conveying under this
382 | License, you may add to a covered work material governed by the terms
383 | of that license document, provided that the further restriction does
384 | not survive such relicensing or conveying.
385 |
386 | If you add terms to a covered work in accord with this section, you
387 | must place, in the relevant source files, a statement of the
388 | additional terms that apply to those files, or a notice indicating
389 | where to find the applicable terms.
390 |
391 | Additional terms, permissive or non-permissive, may be stated in the
392 | form of a separately written license, or stated as exceptions;
393 | the above requirements apply either way.
394 |
395 | 8. Termination.
396 |
397 | You may not propagate or modify a covered work except as expressly
398 | provided under this License. Any attempt otherwise to propagate or
399 | modify it is void, and will automatically terminate your rights under
400 | this License (including any patent licenses granted under the third
401 | paragraph of section 11).
402 |
403 | However, if you cease all violation of this License, then your
404 | license from a particular copyright holder is reinstated (a)
405 | provisionally, unless and until the copyright holder explicitly and
406 | finally terminates your license, and (b) permanently, if the copyright
407 | holder fails to notify you of the violation by some reasonable means
408 | prior to 60 days after the cessation.
409 |
410 | Moreover, your license from a particular copyright holder is
411 | reinstated permanently if the copyright holder notifies you of the
412 | violation by some reasonable means, this is the first time you have
413 | received notice of violation of this License (for any work) from that
414 | copyright holder, and you cure the violation prior to 30 days after
415 | your receipt of the notice.
416 |
417 | Termination of your rights under this section does not terminate the
418 | licenses of parties who have received copies or rights from you under
419 | this License. If your rights have been terminated and not permanently
420 | reinstated, you do not qualify to receive new licenses for the same
421 | material under section 10.
422 |
423 | 9. Acceptance Not Required for Having Copies.
424 |
425 | You are not required to accept this License in order to receive or
426 | run a copy of the Program. Ancillary propagation of a covered work
427 | occurring solely as a consequence of using peer-to-peer transmission
428 | to receive a copy likewise does not require acceptance. However,
429 | nothing other than this License grants you permission to propagate or
430 | modify any covered work. These actions infringe copyright if you do
431 | not accept this License. Therefore, by modifying or propagating a
432 | covered work, you indicate your acceptance of this License to do so.
433 |
434 | 10. Automatic Licensing of Downstream Recipients.
435 |
436 | Each time you convey a covered work, the recipient automatically
437 | receives a license from the original licensors, to run, modify and
438 | propagate that work, subject to this License. You are not responsible
439 | for enforcing compliance by third parties with this License.
440 |
441 | An "entity transaction" is a transaction transferring control of an
442 | organization, or substantially all assets of one, or subdividing an
443 | organization, or merging organizations. If propagation of a covered
444 | work results from an entity transaction, each party to that
445 | transaction who receives a copy of the work also receives whatever
446 | licenses to the work the party's predecessor in interest had or could
447 | give under the previous paragraph, plus a right to possession of the
448 | Corresponding Source of the work from the predecessor in interest, if
449 | the predecessor has it or can get it with reasonable efforts.
450 |
451 | You may not impose any further restrictions on the exercise of the
452 | rights granted or affirmed under this License. For example, you may
453 | not impose a license fee, royalty, or other charge for exercise of
454 | rights granted under this License, and you may not initiate litigation
455 | (including a cross-claim or counterclaim in a lawsuit) alleging that
456 | any patent claim is infringed by making, using, selling, offering for
457 | sale, or importing the Program or any portion of it.
458 |
459 | 11. Patents.
460 |
461 | A "contributor" is a copyright holder who authorizes use under this
462 | License of the Program or a work on which the Program is based. The
463 | work thus licensed is called the contributor's "contributor version".
464 |
465 | A contributor's "essential patent claims" are all patent claims
466 | owned or controlled by the contributor, whether already acquired or
467 | hereafter acquired, that would be infringed by some manner, permitted
468 | by this License, of making, using, or selling its contributor version,
469 | but do not include claims that would be infringed only as a
470 | consequence of further modification of the contributor version. For
471 | purposes of this definition, "control" includes the right to grant
472 | patent sublicenses in a manner consistent with the requirements of
473 | this License.
474 |
475 | Each contributor grants you a non-exclusive, worldwide, royalty-free
476 | patent license under the contributor's essential patent claims, to
477 | make, use, sell, offer for sale, import and otherwise run, modify and
478 | propagate the contents of its contributor version.
479 |
480 | In the following three paragraphs, a "patent license" is any express
481 | agreement or commitment, however denominated, not to enforce a patent
482 | (such as an express permission to practice a patent or covenant not to
483 | sue for patent infringement). To "grant" such a patent license to a
484 | party means to make such an agreement or commitment not to enforce a
485 | patent against the party.
486 |
487 | If you convey a covered work, knowingly relying on a patent license,
488 | and the Corresponding Source of the work is not available for anyone
489 | to copy, free of charge and under the terms of this License, through a
490 | publicly available network server or other readily accessible means,
491 | then you must either (1) cause the Corresponding Source to be so
492 | available, or (2) arrange to deprive yourself of the benefit of the
493 | patent license for this particular work, or (3) arrange, in a manner
494 | consistent with the requirements of this License, to extend the patent
495 | license to downstream recipients. "Knowingly relying" means you have
496 | actual knowledge that, but for the patent license, your conveying the
497 | covered work in a country, or your recipient's use of the covered work
498 | in a country, would infringe one or more identifiable patents in that
499 | country that you have reason to believe are valid.
500 |
501 | If, pursuant to or in connection with a single transaction or
502 | arrangement, you convey, or propagate by procuring conveyance of, a
503 | covered work, and grant a patent license to some of the parties
504 | receiving the covered work authorizing them to use, propagate, modify
505 | or convey a specific copy of the covered work, then the patent license
506 | you grant is automatically extended to all recipients of the covered
507 | work and works based on it.
508 |
509 | A patent license is "discriminatory" if it does not include within
510 | the scope of its coverage, prohibits the exercise of, or is
511 | conditioned on the non-exercise of one or more of the rights that are
512 | specifically granted under this License. You may not convey a covered
513 | work if you are a party to an arrangement with a third party that is
514 | in the business of distributing software, under which you make payment
515 | to the third party based on the extent of your activity of conveying
516 | the work, and under which the third party grants, to any of the
517 | parties who would receive the covered work from you, a discriminatory
518 | patent license (a) in connection with copies of the covered work
519 | conveyed by you (or copies made from those copies), or (b) primarily
520 | for and in connection with specific products or compilations that
521 | contain the covered work, unless you entered into that arrangement,
522 | or that patent license was granted, prior to 28 March 2007.
523 |
524 | Nothing in this License shall be construed as excluding or limiting
525 | any implied license or other defenses to infringement that may
526 | otherwise be available to you under applicable patent law.
527 |
528 | 12. No Surrender of Others' Freedom.
529 |
530 | If conditions are imposed on you (whether by court order, agreement or
531 | otherwise) that contradict the conditions of this License, they do not
532 | excuse you from the conditions of this License. If you cannot convey a
533 | covered work so as to satisfy simultaneously your obligations under this
534 | License and any other pertinent obligations, then as a consequence you may
535 | not convey it at all. For example, if you agree to terms that obligate you
536 | to collect a royalty for further conveying from those to whom you convey
537 | the Program, the only way you could satisfy both those terms and this
538 | License would be to refrain entirely from conveying the Program.
539 |
540 | 13. Remote Network Interaction; Use with the GNU General Public License.
541 |
542 | Notwithstanding any other provision of this License, if you modify the
543 | Program, your modified version must prominently offer all users
544 | interacting with it remotely through a computer network (if your version
545 | supports such interaction) an opportunity to receive the Corresponding
546 | Source of your version by providing access to the Corresponding Source
547 | from a network server at no charge, through some standard or customary
548 | means of facilitating copying of software. This Corresponding Source
549 | shall include the Corresponding Source for any work covered by version 3
550 | of the GNU General Public License that is incorporated pursuant to the
551 | following paragraph.
552 |
553 | Notwithstanding any other provision of this License, you have
554 | permission to link or combine any covered work with a work licensed
555 | under version 3 of the GNU General Public License into a single
556 | combined work, and to convey the resulting work. The terms of this
557 | License will continue to apply to the part which is the covered work,
558 | but the work with which it is combined will remain governed by version
559 | 3 of the GNU General Public License.
560 |
561 | 14. Revised Versions of this License.
562 |
563 | The Free Software Foundation may publish revised and/or new versions of
564 | the GNU Affero General Public License from time to time. Such new versions
565 | will be similar in spirit to the present version, but may differ in detail to
566 | address new problems or concerns.
567 |
568 | Each version is given a distinguishing version number. If the
569 | Program specifies that a certain numbered version of the GNU Affero General
570 | Public License "or any later version" applies to it, you have the
571 | option of following the terms and conditions either of that numbered
572 | version or of any later version published by the Free Software
573 | Foundation. If the Program does not specify a version number of the
574 | GNU Affero General Public License, you may choose any version ever published
575 | by the Free Software Foundation.
576 |
577 | If the Program specifies that a proxy can decide which future
578 | versions of the GNU Affero General Public License can be used, that proxy's
579 | public statement of acceptance of a version permanently authorizes you
580 | to choose that version for the Program.
581 |
582 | Later license versions may give you additional or different
583 | permissions. However, no additional obligations are imposed on any
584 | author or copyright holder as a result of your choosing to follow a
585 | later version.
586 |
587 | 15. Disclaimer of Warranty.
588 |
589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
597 |
598 | 16. Limitation of Liability.
599 |
600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
608 | SUCH DAMAGES.
609 |
610 | 17. Interpretation of Sections 15 and 16.
611 |
612 | If the disclaimer of warranty and limitation of liability provided
613 | above cannot be given local legal effect according to their terms,
614 | reviewing courts shall apply local law that most closely approximates
615 | an absolute waiver of all civil liability in connection with the
616 | Program, unless a warranty or assumption of liability accompanies a
617 | copy of the Program in return for a fee.
618 |
619 | END OF TERMS AND CONDITIONS
620 |
621 | How to Apply These Terms to Your New Programs
622 |
623 | If you develop a new program, and you want it to be of the greatest
624 | possible use to the public, the best way to achieve this is to make it
625 | free software which everyone can redistribute and change under these terms.
626 |
627 | To do so, attach the following notices to the program. It is safest
628 | to attach them to the start of each source file to most effectively
629 | state the exclusion of warranty; and each file should have at least
630 | the "copyright" line and a pointer to where the full notice is found.
631 |
632 |
633 | Copyright (C)
634 |
635 | This program is free software: you can redistribute it and/or modify
636 | it under the terms of the GNU Affero General Public License as published
637 | by the Free Software Foundation, either version 3 of the License, or
638 | (at your option) any later version.
639 |
640 | This program is distributed in the hope that it will be useful,
641 | but WITHOUT ANY WARRANTY; without even the implied warranty of
642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
643 | GNU Affero General Public License for more details.
644 |
645 | You should have received a copy of the GNU Affero General Public License
646 | along with this program. If not, see .
647 |
648 | Also add information on how to contact you by electronic and paper mail.
649 |
650 | If your software can interact with users remotely through a computer
651 | network, you should also make sure that it provides a way for users to
652 | get its source. For example, if your program is a web application, its
653 | interface could display a "Source" link that leads users to an archive
654 | of the code. There are many ways you could offer source, and different
655 | solutions will be better for different programs; see section 13 for the
656 | specific requirements.
657 |
658 | You should also get your employer (if you work as a programmer) or school,
659 | if any, to sign a "copyright disclaimer" for the program, if necessary.
660 | For more information on this, and how to apply and follow the GNU AGPL, see
661 | .
662 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # php-ulid
2 | Universally Unique Lexicographically Sortable Identifier ported to PHP
3 |
4 | [](https://github.com/Lewiscowles1986/php-ulid/actions/workflows/php.yml)
5 |
6 | Tests borrowed from [.NET port](https://github.com/fvilers/ulid.net)
7 | Original idea borrowed from [JS](https://github.com/alizain/ulid)
8 |
9 | License AGPL
10 |
11 | ## Requirements
12 |
13 | PHP7.4+
14 |
15 | ## Usage:
16 |
17 | `composer require lewiscowles/ulid`
18 |
19 | ## Tests:
20 |
21 | To generate the coverage report xdebug extension must be enabled for your PHP
22 |
23 | ### Unit-test CLI
24 |
25 | `php vendor/bin/phpunit --coverage-html ./reports/ --whitelist src`
26 |
27 | ### Mutation testing with infection
28 |
29 | `php vendor/bin/infection`
30 |
31 | ### PHPStan
32 |
33 | `php vendor/bin/phpstan analyse src -l max`
34 |
35 | ### Jenkins pipeline step for testing
36 |
37 | ```Groovy
38 | stage('Run Unit Tests in PHP') {
39 | dir('ulid') {
40 | sh 'php vendor/bin/phpunit --coverage-html ./reports/ --whitelist src'
41 | }
42 | publishHTML([allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true, reportDir: 'ulid/reports', reportFiles: 'index.html', reportName: 'PHPUnit Coverage'])
43 | }
44 | ```
45 |
46 | ## Got an idea?
47 |
48 | Create an issue, a PR, both (if possible) :smile_cat:
49 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lewiscowles/ulid",
3 | "description": "Universally Unique Lexicographically Sortable Identifier ported to PHP",
4 | "type": "library",
5 | "require": {
6 | "php": ">=7.3"
7 | },
8 | "require-dev": {
9 | "ext-xdebug": "*",
10 | "phpunit/phpunit": "^8.0|^9",
11 | "infection/infection": "*",
12 | "phpstan/phpstan": "*"
13 | },
14 | "autoload": {
15 | "psr-4": { "lewiscowles\\core\\": "src" }
16 | },
17 | "autoload-dev": {
18 | "psr-4": { "lewiscowles\\core\\Tests\\": "tests" }
19 | },
20 | "license": "AGPL-3.0-or-later",
21 | "authors": [
22 | {
23 | "name": "Lewis Cowles",
24 | "email": "lewiscowles@me.com"
25 | }
26 | ],
27 | "minimum-stability": "stable",
28 | "config": {
29 | "allow-plugins": {
30 | "infection/extension-installer": true
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/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": "086978eee3f14862c0ba7d85bedffc91",
8 | "packages": [],
9 | "packages-dev": [
10 | {
11 | "name": "composer/package-versions-deprecated",
12 | "version": "1.11.99.5",
13 | "source": {
14 | "type": "git",
15 | "url": "https://github.com/composer/package-versions-deprecated.git",
16 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
17 | },
18 | "dist": {
19 | "type": "zip",
20 | "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
21 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
22 | "shasum": ""
23 | },
24 | "require": {
25 | "composer-plugin-api": "^1.1.0 || ^2.0",
26 | "php": "^7 || ^8"
27 | },
28 | "replace": {
29 | "ocramius/package-versions": "1.11.99"
30 | },
31 | "require-dev": {
32 | "composer/composer": "^1.9.3 || ^2.0@dev",
33 | "ext-zip": "^1.13",
34 | "phpunit/phpunit": "^6.5 || ^7"
35 | },
36 | "type": "composer-plugin",
37 | "extra": {
38 | "class": "PackageVersions\\Installer",
39 | "branch-alias": {
40 | "dev-master": "1.x-dev"
41 | }
42 | },
43 | "autoload": {
44 | "psr-4": {
45 | "PackageVersions\\": "src/PackageVersions"
46 | }
47 | },
48 | "notification-url": "https://packagist.org/downloads/",
49 | "license": [
50 | "MIT"
51 | ],
52 | "authors": [
53 | {
54 | "name": "Marco Pivetta",
55 | "email": "ocramius@gmail.com"
56 | },
57 | {
58 | "name": "Jordi Boggiano",
59 | "email": "j.boggiano@seld.be"
60 | }
61 | ],
62 | "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
63 | "support": {
64 | "issues": "https://github.com/composer/package-versions-deprecated/issues",
65 | "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
66 | },
67 | "funding": [
68 | {
69 | "url": "https://packagist.com",
70 | "type": "custom"
71 | },
72 | {
73 | "url": "https://github.com/composer",
74 | "type": "github"
75 | },
76 | {
77 | "url": "https://tidelift.com/funding/github/packagist/composer/composer",
78 | "type": "tidelift"
79 | }
80 | ],
81 | "time": "2022-01-17T14:14:24+00:00"
82 | },
83 | {
84 | "name": "composer/xdebug-handler",
85 | "version": "1.4.6",
86 | "source": {
87 | "type": "git",
88 | "url": "https://github.com/composer/xdebug-handler.git",
89 | "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
90 | },
91 | "dist": {
92 | "type": "zip",
93 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
94 | "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
95 | "shasum": ""
96 | },
97 | "require": {
98 | "php": "^5.3.2 || ^7.0 || ^8.0",
99 | "psr/log": "^1.0"
100 | },
101 | "require-dev": {
102 | "phpstan/phpstan": "^0.12.55",
103 | "symfony/phpunit-bridge": "^4.2 || ^5"
104 | },
105 | "type": "library",
106 | "autoload": {
107 | "psr-4": {
108 | "Composer\\XdebugHandler\\": "src"
109 | }
110 | },
111 | "notification-url": "https://packagist.org/downloads/",
112 | "license": [
113 | "MIT"
114 | ],
115 | "authors": [
116 | {
117 | "name": "John Stevenson",
118 | "email": "john-stevenson@blueyonder.co.uk"
119 | }
120 | ],
121 | "description": "Restarts a process without Xdebug.",
122 | "keywords": [
123 | "Xdebug",
124 | "performance"
125 | ],
126 | "support": {
127 | "irc": "irc://irc.freenode.org/composer",
128 | "issues": "https://github.com/composer/xdebug-handler/issues",
129 | "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
130 | },
131 | "funding": [
132 | {
133 | "url": "https://packagist.com",
134 | "type": "custom"
135 | },
136 | {
137 | "url": "https://github.com/composer",
138 | "type": "github"
139 | },
140 | {
141 | "url": "https://tidelift.com/funding/github/packagist/composer/composer",
142 | "type": "tidelift"
143 | }
144 | ],
145 | "time": "2021-03-25T17:01:18+00:00"
146 | },
147 | {
148 | "name": "doctrine/instantiator",
149 | "version": "1.4.1",
150 | "source": {
151 | "type": "git",
152 | "url": "https://github.com/doctrine/instantiator.git",
153 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
154 | },
155 | "dist": {
156 | "type": "zip",
157 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
158 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
159 | "shasum": ""
160 | },
161 | "require": {
162 | "php": "^7.1 || ^8.0"
163 | },
164 | "require-dev": {
165 | "doctrine/coding-standard": "^9",
166 | "ext-pdo": "*",
167 | "ext-phar": "*",
168 | "phpbench/phpbench": "^0.16 || ^1",
169 | "phpstan/phpstan": "^1.4",
170 | "phpstan/phpstan-phpunit": "^1",
171 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
172 | "vimeo/psalm": "^4.22"
173 | },
174 | "type": "library",
175 | "autoload": {
176 | "psr-4": {
177 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
178 | }
179 | },
180 | "notification-url": "https://packagist.org/downloads/",
181 | "license": [
182 | "MIT"
183 | ],
184 | "authors": [
185 | {
186 | "name": "Marco Pivetta",
187 | "email": "ocramius@gmail.com",
188 | "homepage": "https://ocramius.github.io/"
189 | }
190 | ],
191 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
192 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
193 | "keywords": [
194 | "constructor",
195 | "instantiate"
196 | ],
197 | "support": {
198 | "issues": "https://github.com/doctrine/instantiator/issues",
199 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
200 | },
201 | "funding": [
202 | {
203 | "url": "https://www.doctrine-project.org/sponsorship.html",
204 | "type": "custom"
205 | },
206 | {
207 | "url": "https://www.patreon.com/phpdoctrine",
208 | "type": "patreon"
209 | },
210 | {
211 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
212 | "type": "tidelift"
213 | }
214 | ],
215 | "time": "2022-03-03T08:28:38+00:00"
216 | },
217 | {
218 | "name": "infection/abstract-testframework-adapter",
219 | "version": "0.3.1",
220 | "source": {
221 | "type": "git",
222 | "url": "https://github.com/infection/abstract-testframework-adapter.git",
223 | "reference": "c52539339f28d6b67625ff24496289b3e6d66025"
224 | },
225 | "dist": {
226 | "type": "zip",
227 | "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/c52539339f28d6b67625ff24496289b3e6d66025",
228 | "reference": "c52539339f28d6b67625ff24496289b3e6d66025",
229 | "shasum": ""
230 | },
231 | "require": {
232 | "php": "^7.3 || ^8.0"
233 | },
234 | "require-dev": {
235 | "ergebnis/composer-normalize": "^2.8",
236 | "friendsofphp/php-cs-fixer": "^2.16",
237 | "phpunit/phpunit": "^9.0"
238 | },
239 | "type": "library",
240 | "autoload": {
241 | "psr-4": {
242 | "Infection\\AbstractTestFramework\\": "src/"
243 | }
244 | },
245 | "notification-url": "https://packagist.org/downloads/",
246 | "license": [
247 | "BSD-3-Clause"
248 | ],
249 | "authors": [
250 | {
251 | "name": "Maks Rafalko",
252 | "email": "maks.rafalko@gmail.com"
253 | }
254 | ],
255 | "description": "Abstract Test Framework Adapter for Infection",
256 | "support": {
257 | "issues": "https://github.com/infection/abstract-testframework-adapter/issues",
258 | "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.3"
259 | },
260 | "time": "2020-08-30T13:50:12+00:00"
261 | },
262 | {
263 | "name": "infection/extension-installer",
264 | "version": "0.1.2",
265 | "source": {
266 | "type": "git",
267 | "url": "https://github.com/infection/extension-installer.git",
268 | "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf"
269 | },
270 | "dist": {
271 | "type": "zip",
272 | "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
273 | "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
274 | "shasum": ""
275 | },
276 | "require": {
277 | "composer-plugin-api": "^1.1 || ^2.0"
278 | },
279 | "require-dev": {
280 | "composer/composer": "^1.9 || ^2.0",
281 | "friendsofphp/php-cs-fixer": "^2.18, <2.19",
282 | "infection/infection": "^0.15.2",
283 | "php-coveralls/php-coveralls": "^2.4",
284 | "phpstan/extension-installer": "^1.0",
285 | "phpstan/phpstan": "^0.12.10",
286 | "phpstan/phpstan-phpunit": "^0.12.6",
287 | "phpstan/phpstan-strict-rules": "^0.12.2",
288 | "phpstan/phpstan-webmozart-assert": "^0.12.2",
289 | "phpunit/phpunit": "^9.5",
290 | "vimeo/psalm": "^4.8"
291 | },
292 | "type": "composer-plugin",
293 | "extra": {
294 | "class": "Infection\\ExtensionInstaller\\Plugin"
295 | },
296 | "autoload": {
297 | "psr-4": {
298 | "Infection\\ExtensionInstaller\\": "src/"
299 | }
300 | },
301 | "notification-url": "https://packagist.org/downloads/",
302 | "license": [
303 | "BSD-3-Clause"
304 | ],
305 | "authors": [
306 | {
307 | "name": "Maks Rafalko",
308 | "email": "maks.rafalko@gmail.com"
309 | }
310 | ],
311 | "description": "Infection Extension Installer",
312 | "support": {
313 | "issues": "https://github.com/infection/extension-installer/issues",
314 | "source": "https://github.com/infection/extension-installer/tree/0.1.2"
315 | },
316 | "funding": [
317 | {
318 | "url": "https://github.com/infection",
319 | "type": "github"
320 | },
321 | {
322 | "url": "https://opencollective.com/infection",
323 | "type": "open_collective"
324 | }
325 | ],
326 | "time": "2021-10-20T22:08:34+00:00"
327 | },
328 | {
329 | "name": "infection/include-interceptor",
330 | "version": "0.2.5",
331 | "source": {
332 | "type": "git",
333 | "url": "https://github.com/infection/include-interceptor.git",
334 | "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7"
335 | },
336 | "dist": {
337 | "type": "zip",
338 | "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7",
339 | "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7",
340 | "shasum": ""
341 | },
342 | "require-dev": {
343 | "friendsofphp/php-cs-fixer": "^2.16",
344 | "infection/infection": "^0.15.0",
345 | "phan/phan": "^2.4 || ^3",
346 | "php-coveralls/php-coveralls": "^2.2",
347 | "phpstan/phpstan": "^0.12.8",
348 | "phpunit/phpunit": "^8.5",
349 | "vimeo/psalm": "^3.8"
350 | },
351 | "type": "library",
352 | "autoload": {
353 | "psr-4": {
354 | "Infection\\StreamWrapper\\": "src/"
355 | }
356 | },
357 | "notification-url": "https://packagist.org/downloads/",
358 | "license": [
359 | "BSD-3-Clause"
360 | ],
361 | "authors": [
362 | {
363 | "name": "Maks Rafalko",
364 | "email": "maks.rafalko@gmail.com"
365 | }
366 | ],
367 | "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.",
368 | "support": {
369 | "issues": "https://github.com/infection/include-interceptor/issues",
370 | "source": "https://github.com/infection/include-interceptor/tree/0.2.5"
371 | },
372 | "funding": [
373 | {
374 | "url": "https://github.com/infection",
375 | "type": "github"
376 | },
377 | {
378 | "url": "https://opencollective.com/infection",
379 | "type": "open_collective"
380 | }
381 | ],
382 | "time": "2021-08-09T10:03:57+00:00"
383 | },
384 | {
385 | "name": "infection/infection",
386 | "version": "0.18.2",
387 | "source": {
388 | "type": "git",
389 | "url": "https://github.com/infection/infection.git",
390 | "reference": "05685f8e97ec2d42455fdaad6984446d5af2f67e"
391 | },
392 | "dist": {
393 | "type": "zip",
394 | "url": "https://api.github.com/repos/infection/infection/zipball/05685f8e97ec2d42455fdaad6984446d5af2f67e",
395 | "reference": "05685f8e97ec2d42455fdaad6984446d5af2f67e",
396 | "shasum": ""
397 | },
398 | "require": {
399 | "composer/xdebug-handler": "^1.3.3",
400 | "ext-dom": "*",
401 | "ext-json": "*",
402 | "ext-libxml": "*",
403 | "infection/abstract-testframework-adapter": "^0.3.1",
404 | "infection/extension-installer": "^0.1.0",
405 | "infection/include-interceptor": "^0.2.4",
406 | "justinrainbow/json-schema": "^5.2",
407 | "nikic/php-parser": "^4.10.2",
408 | "ocramius/package-versions": "^1.2 || ^2.0",
409 | "ondram/ci-detector": "^3.3.0",
410 | "php": "^7.3 || ^8.0",
411 | "sanmai/pipeline": "^3.1 || ^5.0",
412 | "sebastian/diff": "^3.0.2 || ^4.0",
413 | "seld/jsonlint": "^1.7",
414 | "symfony/console": "^3.4.29 || ^4.1.19 || ^5.0",
415 | "symfony/filesystem": "^3.4.29 || ^4.1.19 || ^5.0",
416 | "symfony/finder": "^3.4.29 || ^4.1.19 || ^5.0",
417 | "symfony/process": "^3.4.29 || ^4.1.19 || ^5.0",
418 | "thecodingmachine/safe": "^1.0",
419 | "webmozart/assert": "^1.3",
420 | "webmozart/path-util": "^2.3"
421 | },
422 | "conflict": {
423 | "phpunit/php-code-coverage": ">9 <9.1.4",
424 | "symfony/console": "=4.1.5"
425 | },
426 | "require-dev": {
427 | "composer/package-versions-deprecated": "^1.2 || ^2.0",
428 | "ext-simplexml": "*",
429 | "helmich/phpunit-json-assert": "^3.0",
430 | "phpspec/prophecy-phpunit": "^2.0",
431 | "phpstan/extension-installer": "^1.0",
432 | "phpstan/phpstan": "^0.12.8",
433 | "phpstan/phpstan-phpunit": "^0.12.6",
434 | "phpstan/phpstan-webmozart-assert": "^0.12.2",
435 | "phpunit/phpunit": "^9.3.11",
436 | "symfony/phpunit-bridge": "^4.4.14 || ^5.1.6",
437 | "symfony/yaml": "^5.0",
438 | "thecodingmachine/phpstan-safe-rule": "^1.0"
439 | },
440 | "bin": [
441 | "bin/infection"
442 | ],
443 | "type": "library",
444 | "autoload": {
445 | "psr-4": {
446 | "Infection\\": "src/"
447 | }
448 | },
449 | "notification-url": "https://packagist.org/downloads/",
450 | "license": [
451 | "BSD-3-Clause"
452 | ],
453 | "authors": [
454 | {
455 | "name": "Maks Rafalko",
456 | "email": "maks.rafalko@gmail.com",
457 | "homepage": "https://twitter.com/maks_rafalko"
458 | },
459 | {
460 | "name": "Oleg Zhulnev",
461 | "homepage": "https://github.com/sidz"
462 | },
463 | {
464 | "name": "Gert de Pagter",
465 | "homepage": "https://github.com/BackEndTea"
466 | },
467 | {
468 | "name": "Théo FIDRY",
469 | "email": "theo.fidry@gmail.com",
470 | "homepage": "https://twitter.com/tfidry"
471 | },
472 | {
473 | "name": "Alexey Kopytko",
474 | "email": "alexey@kopytko.com",
475 | "homepage": "https://www.alexeykopytko.com"
476 | },
477 | {
478 | "name": "Andreas Möller",
479 | "email": "am@localheinz.com",
480 | "homepage": "https://localheinz.com"
481 | }
482 | ],
483 | "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.",
484 | "keywords": [
485 | "coverage",
486 | "mutant",
487 | "mutation framework",
488 | "mutation testing",
489 | "testing",
490 | "unit testing"
491 | ],
492 | "support": {
493 | "issues": "https://github.com/infection/infection/issues",
494 | "source": "https://github.com/infection/infection/tree/0.18.2"
495 | },
496 | "time": "2020-10-21T20:25:38+00:00"
497 | },
498 | {
499 | "name": "justinrainbow/json-schema",
500 | "version": "5.2.11",
501 | "source": {
502 | "type": "git",
503 | "url": "https://github.com/justinrainbow/json-schema.git",
504 | "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa"
505 | },
506 | "dist": {
507 | "type": "zip",
508 | "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa",
509 | "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa",
510 | "shasum": ""
511 | },
512 | "require": {
513 | "php": ">=5.3.3"
514 | },
515 | "require-dev": {
516 | "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
517 | "json-schema/json-schema-test-suite": "1.2.0",
518 | "phpunit/phpunit": "^4.8.35"
519 | },
520 | "bin": [
521 | "bin/validate-json"
522 | ],
523 | "type": "library",
524 | "extra": {
525 | "branch-alias": {
526 | "dev-master": "5.0.x-dev"
527 | }
528 | },
529 | "autoload": {
530 | "psr-4": {
531 | "JsonSchema\\": "src/JsonSchema/"
532 | }
533 | },
534 | "notification-url": "https://packagist.org/downloads/",
535 | "license": [
536 | "MIT"
537 | ],
538 | "authors": [
539 | {
540 | "name": "Bruno Prieto Reis",
541 | "email": "bruno.p.reis@gmail.com"
542 | },
543 | {
544 | "name": "Justin Rainbow",
545 | "email": "justin.rainbow@gmail.com"
546 | },
547 | {
548 | "name": "Igor Wiedler",
549 | "email": "igor@wiedler.ch"
550 | },
551 | {
552 | "name": "Robert Schönthal",
553 | "email": "seroscho@googlemail.com"
554 | }
555 | ],
556 | "description": "A library to validate a json schema.",
557 | "homepage": "https://github.com/justinrainbow/json-schema",
558 | "keywords": [
559 | "json",
560 | "schema"
561 | ],
562 | "support": {
563 | "issues": "https://github.com/justinrainbow/json-schema/issues",
564 | "source": "https://github.com/justinrainbow/json-schema/tree/5.2.11"
565 | },
566 | "time": "2021-07-22T09:24:00+00:00"
567 | },
568 | {
569 | "name": "myclabs/deep-copy",
570 | "version": "1.11.0",
571 | "source": {
572 | "type": "git",
573 | "url": "https://github.com/myclabs/DeepCopy.git",
574 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
575 | },
576 | "dist": {
577 | "type": "zip",
578 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
579 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
580 | "shasum": ""
581 | },
582 | "require": {
583 | "php": "^7.1 || ^8.0"
584 | },
585 | "conflict": {
586 | "doctrine/collections": "<1.6.8",
587 | "doctrine/common": "<2.13.3 || >=3,<3.2.2"
588 | },
589 | "require-dev": {
590 | "doctrine/collections": "^1.6.8",
591 | "doctrine/common": "^2.13.3 || ^3.2.2",
592 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
593 | },
594 | "type": "library",
595 | "autoload": {
596 | "files": [
597 | "src/DeepCopy/deep_copy.php"
598 | ],
599 | "psr-4": {
600 | "DeepCopy\\": "src/DeepCopy/"
601 | }
602 | },
603 | "notification-url": "https://packagist.org/downloads/",
604 | "license": [
605 | "MIT"
606 | ],
607 | "description": "Create deep copies (clones) of your objects",
608 | "keywords": [
609 | "clone",
610 | "copy",
611 | "duplicate",
612 | "object",
613 | "object graph"
614 | ],
615 | "support": {
616 | "issues": "https://github.com/myclabs/DeepCopy/issues",
617 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
618 | },
619 | "funding": [
620 | {
621 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
622 | "type": "tidelift"
623 | }
624 | ],
625 | "time": "2022-03-03T13:19:32+00:00"
626 | },
627 | {
628 | "name": "nikic/php-parser",
629 | "version": "v4.13.2",
630 | "source": {
631 | "type": "git",
632 | "url": "https://github.com/nikic/PHP-Parser.git",
633 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
634 | },
635 | "dist": {
636 | "type": "zip",
637 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
638 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
639 | "shasum": ""
640 | },
641 | "require": {
642 | "ext-tokenizer": "*",
643 | "php": ">=7.0"
644 | },
645 | "require-dev": {
646 | "ircmaxell/php-yacc": "^0.0.7",
647 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
648 | },
649 | "bin": [
650 | "bin/php-parse"
651 | ],
652 | "type": "library",
653 | "extra": {
654 | "branch-alias": {
655 | "dev-master": "4.9-dev"
656 | }
657 | },
658 | "autoload": {
659 | "psr-4": {
660 | "PhpParser\\": "lib/PhpParser"
661 | }
662 | },
663 | "notification-url": "https://packagist.org/downloads/",
664 | "license": [
665 | "BSD-3-Clause"
666 | ],
667 | "authors": [
668 | {
669 | "name": "Nikita Popov"
670 | }
671 | ],
672 | "description": "A PHP parser written in PHP",
673 | "keywords": [
674 | "parser",
675 | "php"
676 | ],
677 | "support": {
678 | "issues": "https://github.com/nikic/PHP-Parser/issues",
679 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
680 | },
681 | "time": "2021-11-30T19:35:32+00:00"
682 | },
683 | {
684 | "name": "ondram/ci-detector",
685 | "version": "3.5.1",
686 | "source": {
687 | "type": "git",
688 | "url": "https://github.com/OndraM/ci-detector.git",
689 | "reference": "594e61252843b68998bddd48078c5058fe9028bd"
690 | },
691 | "dist": {
692 | "type": "zip",
693 | "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/594e61252843b68998bddd48078c5058fe9028bd",
694 | "reference": "594e61252843b68998bddd48078c5058fe9028bd",
695 | "shasum": ""
696 | },
697 | "require": {
698 | "php": "^7.1 || ^8.0"
699 | },
700 | "require-dev": {
701 | "ergebnis/composer-normalize": "^2.2",
702 | "lmc/coding-standard": "^1.3 || ^2.0",
703 | "php-parallel-lint/php-parallel-lint": "^1.1",
704 | "phpstan/extension-installer": "^1.0.3",
705 | "phpstan/phpstan": "^0.12.0",
706 | "phpstan/phpstan-phpunit": "^0.12.1",
707 | "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0"
708 | },
709 | "type": "library",
710 | "autoload": {
711 | "psr-4": {
712 | "OndraM\\CiDetector\\": "src/"
713 | }
714 | },
715 | "notification-url": "https://packagist.org/downloads/",
716 | "license": [
717 | "MIT"
718 | ],
719 | "authors": [
720 | {
721 | "name": "Ondřej Machulda",
722 | "email": "ondrej.machulda@gmail.com"
723 | }
724 | ],
725 | "description": "Detect continuous integration environment and provide unified access to properties of current build",
726 | "keywords": [
727 | "CircleCI",
728 | "Codeship",
729 | "Wercker",
730 | "adapter",
731 | "appveyor",
732 | "aws",
733 | "aws codebuild",
734 | "bamboo",
735 | "bitbucket",
736 | "buddy",
737 | "ci-info",
738 | "codebuild",
739 | "continuous integration",
740 | "continuousphp",
741 | "drone",
742 | "github",
743 | "gitlab",
744 | "interface",
745 | "jenkins",
746 | "teamcity",
747 | "travis"
748 | ],
749 | "support": {
750 | "issues": "https://github.com/OndraM/ci-detector/issues",
751 | "source": "https://github.com/OndraM/ci-detector/tree/main"
752 | },
753 | "time": "2020-09-04T11:21:14+00:00"
754 | },
755 | {
756 | "name": "phar-io/manifest",
757 | "version": "2.0.3",
758 | "source": {
759 | "type": "git",
760 | "url": "https://github.com/phar-io/manifest.git",
761 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
762 | },
763 | "dist": {
764 | "type": "zip",
765 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
766 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
767 | "shasum": ""
768 | },
769 | "require": {
770 | "ext-dom": "*",
771 | "ext-phar": "*",
772 | "ext-xmlwriter": "*",
773 | "phar-io/version": "^3.0.1",
774 | "php": "^7.2 || ^8.0"
775 | },
776 | "type": "library",
777 | "extra": {
778 | "branch-alias": {
779 | "dev-master": "2.0.x-dev"
780 | }
781 | },
782 | "autoload": {
783 | "classmap": [
784 | "src/"
785 | ]
786 | },
787 | "notification-url": "https://packagist.org/downloads/",
788 | "license": [
789 | "BSD-3-Clause"
790 | ],
791 | "authors": [
792 | {
793 | "name": "Arne Blankerts",
794 | "email": "arne@blankerts.de",
795 | "role": "Developer"
796 | },
797 | {
798 | "name": "Sebastian Heuer",
799 | "email": "sebastian@phpeople.de",
800 | "role": "Developer"
801 | },
802 | {
803 | "name": "Sebastian Bergmann",
804 | "email": "sebastian@phpunit.de",
805 | "role": "Developer"
806 | }
807 | ],
808 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
809 | "support": {
810 | "issues": "https://github.com/phar-io/manifest/issues",
811 | "source": "https://github.com/phar-io/manifest/tree/2.0.3"
812 | },
813 | "time": "2021-07-20T11:28:43+00:00"
814 | },
815 | {
816 | "name": "phar-io/version",
817 | "version": "3.2.1",
818 | "source": {
819 | "type": "git",
820 | "url": "https://github.com/phar-io/version.git",
821 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
822 | },
823 | "dist": {
824 | "type": "zip",
825 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
826 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
827 | "shasum": ""
828 | },
829 | "require": {
830 | "php": "^7.2 || ^8.0"
831 | },
832 | "type": "library",
833 | "autoload": {
834 | "classmap": [
835 | "src/"
836 | ]
837 | },
838 | "notification-url": "https://packagist.org/downloads/",
839 | "license": [
840 | "BSD-3-Clause"
841 | ],
842 | "authors": [
843 | {
844 | "name": "Arne Blankerts",
845 | "email": "arne@blankerts.de",
846 | "role": "Developer"
847 | },
848 | {
849 | "name": "Sebastian Heuer",
850 | "email": "sebastian@phpeople.de",
851 | "role": "Developer"
852 | },
853 | {
854 | "name": "Sebastian Bergmann",
855 | "email": "sebastian@phpunit.de",
856 | "role": "Developer"
857 | }
858 | ],
859 | "description": "Library for handling version information and constraints",
860 | "support": {
861 | "issues": "https://github.com/phar-io/version/issues",
862 | "source": "https://github.com/phar-io/version/tree/3.2.1"
863 | },
864 | "time": "2022-02-21T01:04:05+00:00"
865 | },
866 | {
867 | "name": "phpdocumentor/reflection-common",
868 | "version": "2.2.0",
869 | "source": {
870 | "type": "git",
871 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
872 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
873 | },
874 | "dist": {
875 | "type": "zip",
876 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
877 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
878 | "shasum": ""
879 | },
880 | "require": {
881 | "php": "^7.2 || ^8.0"
882 | },
883 | "type": "library",
884 | "extra": {
885 | "branch-alias": {
886 | "dev-2.x": "2.x-dev"
887 | }
888 | },
889 | "autoload": {
890 | "psr-4": {
891 | "phpDocumentor\\Reflection\\": "src/"
892 | }
893 | },
894 | "notification-url": "https://packagist.org/downloads/",
895 | "license": [
896 | "MIT"
897 | ],
898 | "authors": [
899 | {
900 | "name": "Jaap van Otterdijk",
901 | "email": "opensource@ijaap.nl"
902 | }
903 | ],
904 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
905 | "homepage": "http://www.phpdoc.org",
906 | "keywords": [
907 | "FQSEN",
908 | "phpDocumentor",
909 | "phpdoc",
910 | "reflection",
911 | "static analysis"
912 | ],
913 | "support": {
914 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
915 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
916 | },
917 | "time": "2020-06-27T09:03:43+00:00"
918 | },
919 | {
920 | "name": "phpdocumentor/reflection-docblock",
921 | "version": "5.3.0",
922 | "source": {
923 | "type": "git",
924 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
925 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
926 | },
927 | "dist": {
928 | "type": "zip",
929 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
930 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
931 | "shasum": ""
932 | },
933 | "require": {
934 | "ext-filter": "*",
935 | "php": "^7.2 || ^8.0",
936 | "phpdocumentor/reflection-common": "^2.2",
937 | "phpdocumentor/type-resolver": "^1.3",
938 | "webmozart/assert": "^1.9.1"
939 | },
940 | "require-dev": {
941 | "mockery/mockery": "~1.3.2",
942 | "psalm/phar": "^4.8"
943 | },
944 | "type": "library",
945 | "extra": {
946 | "branch-alias": {
947 | "dev-master": "5.x-dev"
948 | }
949 | },
950 | "autoload": {
951 | "psr-4": {
952 | "phpDocumentor\\Reflection\\": "src"
953 | }
954 | },
955 | "notification-url": "https://packagist.org/downloads/",
956 | "license": [
957 | "MIT"
958 | ],
959 | "authors": [
960 | {
961 | "name": "Mike van Riel",
962 | "email": "me@mikevanriel.com"
963 | },
964 | {
965 | "name": "Jaap van Otterdijk",
966 | "email": "account@ijaap.nl"
967 | }
968 | ],
969 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
970 | "support": {
971 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
972 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
973 | },
974 | "time": "2021-10-19T17:43:47+00:00"
975 | },
976 | {
977 | "name": "phpdocumentor/type-resolver",
978 | "version": "1.6.0",
979 | "source": {
980 | "type": "git",
981 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
982 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
983 | },
984 | "dist": {
985 | "type": "zip",
986 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
987 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
988 | "shasum": ""
989 | },
990 | "require": {
991 | "php": "^7.2 || ^8.0",
992 | "phpdocumentor/reflection-common": "^2.0"
993 | },
994 | "require-dev": {
995 | "ext-tokenizer": "*",
996 | "psalm/phar": "^4.8"
997 | },
998 | "type": "library",
999 | "extra": {
1000 | "branch-alias": {
1001 | "dev-1.x": "1.x-dev"
1002 | }
1003 | },
1004 | "autoload": {
1005 | "psr-4": {
1006 | "phpDocumentor\\Reflection\\": "src"
1007 | }
1008 | },
1009 | "notification-url": "https://packagist.org/downloads/",
1010 | "license": [
1011 | "MIT"
1012 | ],
1013 | "authors": [
1014 | {
1015 | "name": "Mike van Riel",
1016 | "email": "me@mikevanriel.com"
1017 | }
1018 | ],
1019 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
1020 | "support": {
1021 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
1022 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
1023 | },
1024 | "time": "2022-01-04T19:58:01+00:00"
1025 | },
1026 | {
1027 | "name": "phpspec/prophecy",
1028 | "version": "v1.15.0",
1029 | "source": {
1030 | "type": "git",
1031 | "url": "https://github.com/phpspec/prophecy.git",
1032 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
1033 | },
1034 | "dist": {
1035 | "type": "zip",
1036 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
1037 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
1038 | "shasum": ""
1039 | },
1040 | "require": {
1041 | "doctrine/instantiator": "^1.2",
1042 | "php": "^7.2 || ~8.0, <8.2",
1043 | "phpdocumentor/reflection-docblock": "^5.2",
1044 | "sebastian/comparator": "^3.0 || ^4.0",
1045 | "sebastian/recursion-context": "^3.0 || ^4.0"
1046 | },
1047 | "require-dev": {
1048 | "phpspec/phpspec": "^6.0 || ^7.0",
1049 | "phpunit/phpunit": "^8.0 || ^9.0"
1050 | },
1051 | "type": "library",
1052 | "extra": {
1053 | "branch-alias": {
1054 | "dev-master": "1.x-dev"
1055 | }
1056 | },
1057 | "autoload": {
1058 | "psr-4": {
1059 | "Prophecy\\": "src/Prophecy"
1060 | }
1061 | },
1062 | "notification-url": "https://packagist.org/downloads/",
1063 | "license": [
1064 | "MIT"
1065 | ],
1066 | "authors": [
1067 | {
1068 | "name": "Konstantin Kudryashov",
1069 | "email": "ever.zet@gmail.com",
1070 | "homepage": "http://everzet.com"
1071 | },
1072 | {
1073 | "name": "Marcello Duarte",
1074 | "email": "marcello.duarte@gmail.com"
1075 | }
1076 | ],
1077 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1078 | "homepage": "https://github.com/phpspec/prophecy",
1079 | "keywords": [
1080 | "Double",
1081 | "Dummy",
1082 | "fake",
1083 | "mock",
1084 | "spy",
1085 | "stub"
1086 | ],
1087 | "support": {
1088 | "issues": "https://github.com/phpspec/prophecy/issues",
1089 | "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
1090 | },
1091 | "time": "2021-12-08T12:19:24+00:00"
1092 | },
1093 | {
1094 | "name": "phpstan/phpstan",
1095 | "version": "1.4.10",
1096 | "source": {
1097 | "type": "git",
1098 | "url": "https://github.com/phpstan/phpstan.git",
1099 | "reference": "898c479c39caa727bedf4311dd294a8f4e250e72"
1100 | },
1101 | "dist": {
1102 | "type": "zip",
1103 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/898c479c39caa727bedf4311dd294a8f4e250e72",
1104 | "reference": "898c479c39caa727bedf4311dd294a8f4e250e72",
1105 | "shasum": ""
1106 | },
1107 | "require": {
1108 | "php": "^7.1|^8.0"
1109 | },
1110 | "conflict": {
1111 | "phpstan/phpstan-shim": "*"
1112 | },
1113 | "bin": [
1114 | "phpstan",
1115 | "phpstan.phar"
1116 | ],
1117 | "type": "library",
1118 | "autoload": {
1119 | "files": [
1120 | "bootstrap.php"
1121 | ]
1122 | },
1123 | "notification-url": "https://packagist.org/downloads/",
1124 | "license": [
1125 | "MIT"
1126 | ],
1127 | "description": "PHPStan - PHP Static Analysis Tool",
1128 | "support": {
1129 | "issues": "https://github.com/phpstan/phpstan/issues",
1130 | "source": "https://github.com/phpstan/phpstan/tree/1.4.10"
1131 | },
1132 | "funding": [
1133 | {
1134 | "url": "https://github.com/ondrejmirtes",
1135 | "type": "github"
1136 | },
1137 | {
1138 | "url": "https://github.com/phpstan",
1139 | "type": "github"
1140 | },
1141 | {
1142 | "url": "https://www.patreon.com/phpstan",
1143 | "type": "patreon"
1144 | },
1145 | {
1146 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
1147 | "type": "tidelift"
1148 | }
1149 | ],
1150 | "time": "2022-03-14T10:25:45+00:00"
1151 | },
1152 | {
1153 | "name": "phpunit/php-code-coverage",
1154 | "version": "9.2.15",
1155 | "source": {
1156 | "type": "git",
1157 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1158 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
1159 | },
1160 | "dist": {
1161 | "type": "zip",
1162 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
1163 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
1164 | "shasum": ""
1165 | },
1166 | "require": {
1167 | "ext-dom": "*",
1168 | "ext-libxml": "*",
1169 | "ext-xmlwriter": "*",
1170 | "nikic/php-parser": "^4.13.0",
1171 | "php": ">=7.3",
1172 | "phpunit/php-file-iterator": "^3.0.3",
1173 | "phpunit/php-text-template": "^2.0.2",
1174 | "sebastian/code-unit-reverse-lookup": "^2.0.2",
1175 | "sebastian/complexity": "^2.0",
1176 | "sebastian/environment": "^5.1.2",
1177 | "sebastian/lines-of-code": "^1.0.3",
1178 | "sebastian/version": "^3.0.1",
1179 | "theseer/tokenizer": "^1.2.0"
1180 | },
1181 | "require-dev": {
1182 | "phpunit/phpunit": "^9.3"
1183 | },
1184 | "suggest": {
1185 | "ext-pcov": "*",
1186 | "ext-xdebug": "*"
1187 | },
1188 | "type": "library",
1189 | "extra": {
1190 | "branch-alias": {
1191 | "dev-master": "9.2-dev"
1192 | }
1193 | },
1194 | "autoload": {
1195 | "classmap": [
1196 | "src/"
1197 | ]
1198 | },
1199 | "notification-url": "https://packagist.org/downloads/",
1200 | "license": [
1201 | "BSD-3-Clause"
1202 | ],
1203 | "authors": [
1204 | {
1205 | "name": "Sebastian Bergmann",
1206 | "email": "sebastian@phpunit.de",
1207 | "role": "lead"
1208 | }
1209 | ],
1210 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1211 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1212 | "keywords": [
1213 | "coverage",
1214 | "testing",
1215 | "xunit"
1216 | ],
1217 | "support": {
1218 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
1219 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
1220 | },
1221 | "funding": [
1222 | {
1223 | "url": "https://github.com/sebastianbergmann",
1224 | "type": "github"
1225 | }
1226 | ],
1227 | "time": "2022-03-07T09:28:20+00:00"
1228 | },
1229 | {
1230 | "name": "phpunit/php-file-iterator",
1231 | "version": "3.0.6",
1232 | "source": {
1233 | "type": "git",
1234 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1235 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
1236 | },
1237 | "dist": {
1238 | "type": "zip",
1239 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
1240 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
1241 | "shasum": ""
1242 | },
1243 | "require": {
1244 | "php": ">=7.3"
1245 | },
1246 | "require-dev": {
1247 | "phpunit/phpunit": "^9.3"
1248 | },
1249 | "type": "library",
1250 | "extra": {
1251 | "branch-alias": {
1252 | "dev-master": "3.0-dev"
1253 | }
1254 | },
1255 | "autoload": {
1256 | "classmap": [
1257 | "src/"
1258 | ]
1259 | },
1260 | "notification-url": "https://packagist.org/downloads/",
1261 | "license": [
1262 | "BSD-3-Clause"
1263 | ],
1264 | "authors": [
1265 | {
1266 | "name": "Sebastian Bergmann",
1267 | "email": "sebastian@phpunit.de",
1268 | "role": "lead"
1269 | }
1270 | ],
1271 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1272 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1273 | "keywords": [
1274 | "filesystem",
1275 | "iterator"
1276 | ],
1277 | "support": {
1278 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
1279 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
1280 | },
1281 | "funding": [
1282 | {
1283 | "url": "https://github.com/sebastianbergmann",
1284 | "type": "github"
1285 | }
1286 | ],
1287 | "time": "2021-12-02T12:48:52+00:00"
1288 | },
1289 | {
1290 | "name": "phpunit/php-invoker",
1291 | "version": "3.1.1",
1292 | "source": {
1293 | "type": "git",
1294 | "url": "https://github.com/sebastianbergmann/php-invoker.git",
1295 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
1296 | },
1297 | "dist": {
1298 | "type": "zip",
1299 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1300 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1301 | "shasum": ""
1302 | },
1303 | "require": {
1304 | "php": ">=7.3"
1305 | },
1306 | "require-dev": {
1307 | "ext-pcntl": "*",
1308 | "phpunit/phpunit": "^9.3"
1309 | },
1310 | "suggest": {
1311 | "ext-pcntl": "*"
1312 | },
1313 | "type": "library",
1314 | "extra": {
1315 | "branch-alias": {
1316 | "dev-master": "3.1-dev"
1317 | }
1318 | },
1319 | "autoload": {
1320 | "classmap": [
1321 | "src/"
1322 | ]
1323 | },
1324 | "notification-url": "https://packagist.org/downloads/",
1325 | "license": [
1326 | "BSD-3-Clause"
1327 | ],
1328 | "authors": [
1329 | {
1330 | "name": "Sebastian Bergmann",
1331 | "email": "sebastian@phpunit.de",
1332 | "role": "lead"
1333 | }
1334 | ],
1335 | "description": "Invoke callables with a timeout",
1336 | "homepage": "https://github.com/sebastianbergmann/php-invoker/",
1337 | "keywords": [
1338 | "process"
1339 | ],
1340 | "support": {
1341 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
1342 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
1343 | },
1344 | "funding": [
1345 | {
1346 | "url": "https://github.com/sebastianbergmann",
1347 | "type": "github"
1348 | }
1349 | ],
1350 | "time": "2020-09-28T05:58:55+00:00"
1351 | },
1352 | {
1353 | "name": "phpunit/php-text-template",
1354 | "version": "2.0.4",
1355 | "source": {
1356 | "type": "git",
1357 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1358 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
1359 | },
1360 | "dist": {
1361 | "type": "zip",
1362 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1363 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1364 | "shasum": ""
1365 | },
1366 | "require": {
1367 | "php": ">=7.3"
1368 | },
1369 | "require-dev": {
1370 | "phpunit/phpunit": "^9.3"
1371 | },
1372 | "type": "library",
1373 | "extra": {
1374 | "branch-alias": {
1375 | "dev-master": "2.0-dev"
1376 | }
1377 | },
1378 | "autoload": {
1379 | "classmap": [
1380 | "src/"
1381 | ]
1382 | },
1383 | "notification-url": "https://packagist.org/downloads/",
1384 | "license": [
1385 | "BSD-3-Clause"
1386 | ],
1387 | "authors": [
1388 | {
1389 | "name": "Sebastian Bergmann",
1390 | "email": "sebastian@phpunit.de",
1391 | "role": "lead"
1392 | }
1393 | ],
1394 | "description": "Simple template engine.",
1395 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1396 | "keywords": [
1397 | "template"
1398 | ],
1399 | "support": {
1400 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
1401 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
1402 | },
1403 | "funding": [
1404 | {
1405 | "url": "https://github.com/sebastianbergmann",
1406 | "type": "github"
1407 | }
1408 | ],
1409 | "time": "2020-10-26T05:33:50+00:00"
1410 | },
1411 | {
1412 | "name": "phpunit/php-timer",
1413 | "version": "5.0.3",
1414 | "source": {
1415 | "type": "git",
1416 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1417 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
1418 | },
1419 | "dist": {
1420 | "type": "zip",
1421 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1422 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1423 | "shasum": ""
1424 | },
1425 | "require": {
1426 | "php": ">=7.3"
1427 | },
1428 | "require-dev": {
1429 | "phpunit/phpunit": "^9.3"
1430 | },
1431 | "type": "library",
1432 | "extra": {
1433 | "branch-alias": {
1434 | "dev-master": "5.0-dev"
1435 | }
1436 | },
1437 | "autoload": {
1438 | "classmap": [
1439 | "src/"
1440 | ]
1441 | },
1442 | "notification-url": "https://packagist.org/downloads/",
1443 | "license": [
1444 | "BSD-3-Clause"
1445 | ],
1446 | "authors": [
1447 | {
1448 | "name": "Sebastian Bergmann",
1449 | "email": "sebastian@phpunit.de",
1450 | "role": "lead"
1451 | }
1452 | ],
1453 | "description": "Utility class for timing",
1454 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1455 | "keywords": [
1456 | "timer"
1457 | ],
1458 | "support": {
1459 | "issues": "https://github.com/sebastianbergmann/php-timer/issues",
1460 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
1461 | },
1462 | "funding": [
1463 | {
1464 | "url": "https://github.com/sebastianbergmann",
1465 | "type": "github"
1466 | }
1467 | ],
1468 | "time": "2020-10-26T13:16:10+00:00"
1469 | },
1470 | {
1471 | "name": "phpunit/phpunit",
1472 | "version": "9.5.19",
1473 | "source": {
1474 | "type": "git",
1475 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1476 | "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807"
1477 | },
1478 | "dist": {
1479 | "type": "zip",
1480 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/35ea4b7f3acabb26f4bb640f8c30866c401da807",
1481 | "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807",
1482 | "shasum": ""
1483 | },
1484 | "require": {
1485 | "doctrine/instantiator": "^1.3.1",
1486 | "ext-dom": "*",
1487 | "ext-json": "*",
1488 | "ext-libxml": "*",
1489 | "ext-mbstring": "*",
1490 | "ext-xml": "*",
1491 | "ext-xmlwriter": "*",
1492 | "myclabs/deep-copy": "^1.10.1",
1493 | "phar-io/manifest": "^2.0.3",
1494 | "phar-io/version": "^3.0.2",
1495 | "php": ">=7.3",
1496 | "phpspec/prophecy": "^1.12.1",
1497 | "phpunit/php-code-coverage": "^9.2.13",
1498 | "phpunit/php-file-iterator": "^3.0.5",
1499 | "phpunit/php-invoker": "^3.1.1",
1500 | "phpunit/php-text-template": "^2.0.3",
1501 | "phpunit/php-timer": "^5.0.2",
1502 | "sebastian/cli-parser": "^1.0.1",
1503 | "sebastian/code-unit": "^1.0.6",
1504 | "sebastian/comparator": "^4.0.5",
1505 | "sebastian/diff": "^4.0.3",
1506 | "sebastian/environment": "^5.1.3",
1507 | "sebastian/exporter": "^4.0.3",
1508 | "sebastian/global-state": "^5.0.1",
1509 | "sebastian/object-enumerator": "^4.0.3",
1510 | "sebastian/resource-operations": "^3.0.3",
1511 | "sebastian/type": "^3.0",
1512 | "sebastian/version": "^3.0.2"
1513 | },
1514 | "require-dev": {
1515 | "ext-pdo": "*",
1516 | "phpspec/prophecy-phpunit": "^2.0.1"
1517 | },
1518 | "suggest": {
1519 | "ext-soap": "*",
1520 | "ext-xdebug": "*"
1521 | },
1522 | "bin": [
1523 | "phpunit"
1524 | ],
1525 | "type": "library",
1526 | "extra": {
1527 | "branch-alias": {
1528 | "dev-master": "9.5-dev"
1529 | }
1530 | },
1531 | "autoload": {
1532 | "files": [
1533 | "src/Framework/Assert/Functions.php"
1534 | ],
1535 | "classmap": [
1536 | "src/"
1537 | ]
1538 | },
1539 | "notification-url": "https://packagist.org/downloads/",
1540 | "license": [
1541 | "BSD-3-Clause"
1542 | ],
1543 | "authors": [
1544 | {
1545 | "name": "Sebastian Bergmann",
1546 | "email": "sebastian@phpunit.de",
1547 | "role": "lead"
1548 | }
1549 | ],
1550 | "description": "The PHP Unit Testing framework.",
1551 | "homepage": "https://phpunit.de/",
1552 | "keywords": [
1553 | "phpunit",
1554 | "testing",
1555 | "xunit"
1556 | ],
1557 | "support": {
1558 | "issues": "https://github.com/sebastianbergmann/phpunit/issues",
1559 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.19"
1560 | },
1561 | "funding": [
1562 | {
1563 | "url": "https://phpunit.de/sponsors.html",
1564 | "type": "custom"
1565 | },
1566 | {
1567 | "url": "https://github.com/sebastianbergmann",
1568 | "type": "github"
1569 | }
1570 | ],
1571 | "time": "2022-03-15T09:57:31+00:00"
1572 | },
1573 | {
1574 | "name": "psr/container",
1575 | "version": "1.1.1",
1576 | "source": {
1577 | "type": "git",
1578 | "url": "https://github.com/php-fig/container.git",
1579 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
1580 | },
1581 | "dist": {
1582 | "type": "zip",
1583 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
1584 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
1585 | "shasum": ""
1586 | },
1587 | "require": {
1588 | "php": ">=7.2.0"
1589 | },
1590 | "type": "library",
1591 | "autoload": {
1592 | "psr-4": {
1593 | "Psr\\Container\\": "src/"
1594 | }
1595 | },
1596 | "notification-url": "https://packagist.org/downloads/",
1597 | "license": [
1598 | "MIT"
1599 | ],
1600 | "authors": [
1601 | {
1602 | "name": "PHP-FIG",
1603 | "homepage": "https://www.php-fig.org/"
1604 | }
1605 | ],
1606 | "description": "Common Container Interface (PHP FIG PSR-11)",
1607 | "homepage": "https://github.com/php-fig/container",
1608 | "keywords": [
1609 | "PSR-11",
1610 | "container",
1611 | "container-interface",
1612 | "container-interop",
1613 | "psr"
1614 | ],
1615 | "support": {
1616 | "issues": "https://github.com/php-fig/container/issues",
1617 | "source": "https://github.com/php-fig/container/tree/1.1.1"
1618 | },
1619 | "time": "2021-03-05T17:36:06+00:00"
1620 | },
1621 | {
1622 | "name": "psr/log",
1623 | "version": "1.1.4",
1624 | "source": {
1625 | "type": "git",
1626 | "url": "https://github.com/php-fig/log.git",
1627 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
1628 | },
1629 | "dist": {
1630 | "type": "zip",
1631 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
1632 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
1633 | "shasum": ""
1634 | },
1635 | "require": {
1636 | "php": ">=5.3.0"
1637 | },
1638 | "type": "library",
1639 | "extra": {
1640 | "branch-alias": {
1641 | "dev-master": "1.1.x-dev"
1642 | }
1643 | },
1644 | "autoload": {
1645 | "psr-4": {
1646 | "Psr\\Log\\": "Psr/Log/"
1647 | }
1648 | },
1649 | "notification-url": "https://packagist.org/downloads/",
1650 | "license": [
1651 | "MIT"
1652 | ],
1653 | "authors": [
1654 | {
1655 | "name": "PHP-FIG",
1656 | "homepage": "https://www.php-fig.org/"
1657 | }
1658 | ],
1659 | "description": "Common interface for logging libraries",
1660 | "homepage": "https://github.com/php-fig/log",
1661 | "keywords": [
1662 | "log",
1663 | "psr",
1664 | "psr-3"
1665 | ],
1666 | "support": {
1667 | "source": "https://github.com/php-fig/log/tree/1.1.4"
1668 | },
1669 | "time": "2021-05-03T11:20:27+00:00"
1670 | },
1671 | {
1672 | "name": "sanmai/pipeline",
1673 | "version": "v5.2.1",
1674 | "source": {
1675 | "type": "git",
1676 | "url": "https://github.com/sanmai/pipeline.git",
1677 | "reference": "2b5509a7635143165041109eb1c393c8515724f1"
1678 | },
1679 | "dist": {
1680 | "type": "zip",
1681 | "url": "https://api.github.com/repos/sanmai/pipeline/zipball/2b5509a7635143165041109eb1c393c8515724f1",
1682 | "reference": "2b5509a7635143165041109eb1c393c8515724f1",
1683 | "shasum": ""
1684 | },
1685 | "require": {
1686 | "php": "^7.1 || ^8.0"
1687 | },
1688 | "require-dev": {
1689 | "ergebnis/composer-normalize": "^2.8",
1690 | "friendsofphp/php-cs-fixer": "^3",
1691 | "infection/infection": ">=0.10.5",
1692 | "league/pipeline": "^1.0 || ^0.3",
1693 | "phan/phan": ">=1.1",
1694 | "php-coveralls/php-coveralls": "^2.4.1",
1695 | "phpstan/phpstan": ">=0.10",
1696 | "phpunit/phpunit": "^7.4 || ^8.1 || ^9.4",
1697 | "vimeo/psalm": ">=2"
1698 | },
1699 | "type": "library",
1700 | "extra": {
1701 | "branch-alias": {
1702 | "dev-main": "v5.x-dev"
1703 | }
1704 | },
1705 | "autoload": {
1706 | "files": [
1707 | "src/functions.php"
1708 | ],
1709 | "psr-4": {
1710 | "Pipeline\\": "src/"
1711 | }
1712 | },
1713 | "notification-url": "https://packagist.org/downloads/",
1714 | "license": [
1715 | "Apache-2.0"
1716 | ],
1717 | "authors": [
1718 | {
1719 | "name": "Alexey Kopytko",
1720 | "email": "alexey@kopytko.com"
1721 | }
1722 | ],
1723 | "description": "General-purpose collections pipeline",
1724 | "support": {
1725 | "issues": "https://github.com/sanmai/pipeline/issues",
1726 | "source": "https://github.com/sanmai/pipeline/tree/v5.2.1"
1727 | },
1728 | "funding": [
1729 | {
1730 | "url": "https://github.com/sanmai",
1731 | "type": "github"
1732 | }
1733 | ],
1734 | "time": "2021-11-01T10:09:55+00:00"
1735 | },
1736 | {
1737 | "name": "sebastian/cli-parser",
1738 | "version": "1.0.1",
1739 | "source": {
1740 | "type": "git",
1741 | "url": "https://github.com/sebastianbergmann/cli-parser.git",
1742 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
1743 | },
1744 | "dist": {
1745 | "type": "zip",
1746 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1747 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1748 | "shasum": ""
1749 | },
1750 | "require": {
1751 | "php": ">=7.3"
1752 | },
1753 | "require-dev": {
1754 | "phpunit/phpunit": "^9.3"
1755 | },
1756 | "type": "library",
1757 | "extra": {
1758 | "branch-alias": {
1759 | "dev-master": "1.0-dev"
1760 | }
1761 | },
1762 | "autoload": {
1763 | "classmap": [
1764 | "src/"
1765 | ]
1766 | },
1767 | "notification-url": "https://packagist.org/downloads/",
1768 | "license": [
1769 | "BSD-3-Clause"
1770 | ],
1771 | "authors": [
1772 | {
1773 | "name": "Sebastian Bergmann",
1774 | "email": "sebastian@phpunit.de",
1775 | "role": "lead"
1776 | }
1777 | ],
1778 | "description": "Library for parsing CLI options",
1779 | "homepage": "https://github.com/sebastianbergmann/cli-parser",
1780 | "support": {
1781 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
1782 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
1783 | },
1784 | "funding": [
1785 | {
1786 | "url": "https://github.com/sebastianbergmann",
1787 | "type": "github"
1788 | }
1789 | ],
1790 | "time": "2020-09-28T06:08:49+00:00"
1791 | },
1792 | {
1793 | "name": "sebastian/code-unit",
1794 | "version": "1.0.8",
1795 | "source": {
1796 | "type": "git",
1797 | "url": "https://github.com/sebastianbergmann/code-unit.git",
1798 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
1799 | },
1800 | "dist": {
1801 | "type": "zip",
1802 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
1803 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
1804 | "shasum": ""
1805 | },
1806 | "require": {
1807 | "php": ">=7.3"
1808 | },
1809 | "require-dev": {
1810 | "phpunit/phpunit": "^9.3"
1811 | },
1812 | "type": "library",
1813 | "extra": {
1814 | "branch-alias": {
1815 | "dev-master": "1.0-dev"
1816 | }
1817 | },
1818 | "autoload": {
1819 | "classmap": [
1820 | "src/"
1821 | ]
1822 | },
1823 | "notification-url": "https://packagist.org/downloads/",
1824 | "license": [
1825 | "BSD-3-Clause"
1826 | ],
1827 | "authors": [
1828 | {
1829 | "name": "Sebastian Bergmann",
1830 | "email": "sebastian@phpunit.de",
1831 | "role": "lead"
1832 | }
1833 | ],
1834 | "description": "Collection of value objects that represent the PHP code units",
1835 | "homepage": "https://github.com/sebastianbergmann/code-unit",
1836 | "support": {
1837 | "issues": "https://github.com/sebastianbergmann/code-unit/issues",
1838 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
1839 | },
1840 | "funding": [
1841 | {
1842 | "url": "https://github.com/sebastianbergmann",
1843 | "type": "github"
1844 | }
1845 | ],
1846 | "time": "2020-10-26T13:08:54+00:00"
1847 | },
1848 | {
1849 | "name": "sebastian/code-unit-reverse-lookup",
1850 | "version": "2.0.3",
1851 | "source": {
1852 | "type": "git",
1853 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1854 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
1855 | },
1856 | "dist": {
1857 | "type": "zip",
1858 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1859 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1860 | "shasum": ""
1861 | },
1862 | "require": {
1863 | "php": ">=7.3"
1864 | },
1865 | "require-dev": {
1866 | "phpunit/phpunit": "^9.3"
1867 | },
1868 | "type": "library",
1869 | "extra": {
1870 | "branch-alias": {
1871 | "dev-master": "2.0-dev"
1872 | }
1873 | },
1874 | "autoload": {
1875 | "classmap": [
1876 | "src/"
1877 | ]
1878 | },
1879 | "notification-url": "https://packagist.org/downloads/",
1880 | "license": [
1881 | "BSD-3-Clause"
1882 | ],
1883 | "authors": [
1884 | {
1885 | "name": "Sebastian Bergmann",
1886 | "email": "sebastian@phpunit.de"
1887 | }
1888 | ],
1889 | "description": "Looks up which function or method a line of code belongs to",
1890 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1891 | "support": {
1892 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
1893 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
1894 | },
1895 | "funding": [
1896 | {
1897 | "url": "https://github.com/sebastianbergmann",
1898 | "type": "github"
1899 | }
1900 | ],
1901 | "time": "2020-09-28T05:30:19+00:00"
1902 | },
1903 | {
1904 | "name": "sebastian/comparator",
1905 | "version": "4.0.6",
1906 | "source": {
1907 | "type": "git",
1908 | "url": "https://github.com/sebastianbergmann/comparator.git",
1909 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
1910 | },
1911 | "dist": {
1912 | "type": "zip",
1913 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
1914 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
1915 | "shasum": ""
1916 | },
1917 | "require": {
1918 | "php": ">=7.3",
1919 | "sebastian/diff": "^4.0",
1920 | "sebastian/exporter": "^4.0"
1921 | },
1922 | "require-dev": {
1923 | "phpunit/phpunit": "^9.3"
1924 | },
1925 | "type": "library",
1926 | "extra": {
1927 | "branch-alias": {
1928 | "dev-master": "4.0-dev"
1929 | }
1930 | },
1931 | "autoload": {
1932 | "classmap": [
1933 | "src/"
1934 | ]
1935 | },
1936 | "notification-url": "https://packagist.org/downloads/",
1937 | "license": [
1938 | "BSD-3-Clause"
1939 | ],
1940 | "authors": [
1941 | {
1942 | "name": "Sebastian Bergmann",
1943 | "email": "sebastian@phpunit.de"
1944 | },
1945 | {
1946 | "name": "Jeff Welch",
1947 | "email": "whatthejeff@gmail.com"
1948 | },
1949 | {
1950 | "name": "Volker Dusch",
1951 | "email": "github@wallbash.com"
1952 | },
1953 | {
1954 | "name": "Bernhard Schussek",
1955 | "email": "bschussek@2bepublished.at"
1956 | }
1957 | ],
1958 | "description": "Provides the functionality to compare PHP values for equality",
1959 | "homepage": "https://github.com/sebastianbergmann/comparator",
1960 | "keywords": [
1961 | "comparator",
1962 | "compare",
1963 | "equality"
1964 | ],
1965 | "support": {
1966 | "issues": "https://github.com/sebastianbergmann/comparator/issues",
1967 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
1968 | },
1969 | "funding": [
1970 | {
1971 | "url": "https://github.com/sebastianbergmann",
1972 | "type": "github"
1973 | }
1974 | ],
1975 | "time": "2020-10-26T15:49:45+00:00"
1976 | },
1977 | {
1978 | "name": "sebastian/complexity",
1979 | "version": "2.0.2",
1980 | "source": {
1981 | "type": "git",
1982 | "url": "https://github.com/sebastianbergmann/complexity.git",
1983 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
1984 | },
1985 | "dist": {
1986 | "type": "zip",
1987 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
1988 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
1989 | "shasum": ""
1990 | },
1991 | "require": {
1992 | "nikic/php-parser": "^4.7",
1993 | "php": ">=7.3"
1994 | },
1995 | "require-dev": {
1996 | "phpunit/phpunit": "^9.3"
1997 | },
1998 | "type": "library",
1999 | "extra": {
2000 | "branch-alias": {
2001 | "dev-master": "2.0-dev"
2002 | }
2003 | },
2004 | "autoload": {
2005 | "classmap": [
2006 | "src/"
2007 | ]
2008 | },
2009 | "notification-url": "https://packagist.org/downloads/",
2010 | "license": [
2011 | "BSD-3-Clause"
2012 | ],
2013 | "authors": [
2014 | {
2015 | "name": "Sebastian Bergmann",
2016 | "email": "sebastian@phpunit.de",
2017 | "role": "lead"
2018 | }
2019 | ],
2020 | "description": "Library for calculating the complexity of PHP code units",
2021 | "homepage": "https://github.com/sebastianbergmann/complexity",
2022 | "support": {
2023 | "issues": "https://github.com/sebastianbergmann/complexity/issues",
2024 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
2025 | },
2026 | "funding": [
2027 | {
2028 | "url": "https://github.com/sebastianbergmann",
2029 | "type": "github"
2030 | }
2031 | ],
2032 | "time": "2020-10-26T15:52:27+00:00"
2033 | },
2034 | {
2035 | "name": "sebastian/diff",
2036 | "version": "4.0.4",
2037 | "source": {
2038 | "type": "git",
2039 | "url": "https://github.com/sebastianbergmann/diff.git",
2040 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
2041 | },
2042 | "dist": {
2043 | "type": "zip",
2044 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2045 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2046 | "shasum": ""
2047 | },
2048 | "require": {
2049 | "php": ">=7.3"
2050 | },
2051 | "require-dev": {
2052 | "phpunit/phpunit": "^9.3",
2053 | "symfony/process": "^4.2 || ^5"
2054 | },
2055 | "type": "library",
2056 | "extra": {
2057 | "branch-alias": {
2058 | "dev-master": "4.0-dev"
2059 | }
2060 | },
2061 | "autoload": {
2062 | "classmap": [
2063 | "src/"
2064 | ]
2065 | },
2066 | "notification-url": "https://packagist.org/downloads/",
2067 | "license": [
2068 | "BSD-3-Clause"
2069 | ],
2070 | "authors": [
2071 | {
2072 | "name": "Sebastian Bergmann",
2073 | "email": "sebastian@phpunit.de"
2074 | },
2075 | {
2076 | "name": "Kore Nordmann",
2077 | "email": "mail@kore-nordmann.de"
2078 | }
2079 | ],
2080 | "description": "Diff implementation",
2081 | "homepage": "https://github.com/sebastianbergmann/diff",
2082 | "keywords": [
2083 | "diff",
2084 | "udiff",
2085 | "unidiff",
2086 | "unified diff"
2087 | ],
2088 | "support": {
2089 | "issues": "https://github.com/sebastianbergmann/diff/issues",
2090 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
2091 | },
2092 | "funding": [
2093 | {
2094 | "url": "https://github.com/sebastianbergmann",
2095 | "type": "github"
2096 | }
2097 | ],
2098 | "time": "2020-10-26T13:10:38+00:00"
2099 | },
2100 | {
2101 | "name": "sebastian/environment",
2102 | "version": "5.1.3",
2103 | "source": {
2104 | "type": "git",
2105 | "url": "https://github.com/sebastianbergmann/environment.git",
2106 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
2107 | },
2108 | "dist": {
2109 | "type": "zip",
2110 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
2111 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
2112 | "shasum": ""
2113 | },
2114 | "require": {
2115 | "php": ">=7.3"
2116 | },
2117 | "require-dev": {
2118 | "phpunit/phpunit": "^9.3"
2119 | },
2120 | "suggest": {
2121 | "ext-posix": "*"
2122 | },
2123 | "type": "library",
2124 | "extra": {
2125 | "branch-alias": {
2126 | "dev-master": "5.1-dev"
2127 | }
2128 | },
2129 | "autoload": {
2130 | "classmap": [
2131 | "src/"
2132 | ]
2133 | },
2134 | "notification-url": "https://packagist.org/downloads/",
2135 | "license": [
2136 | "BSD-3-Clause"
2137 | ],
2138 | "authors": [
2139 | {
2140 | "name": "Sebastian Bergmann",
2141 | "email": "sebastian@phpunit.de"
2142 | }
2143 | ],
2144 | "description": "Provides functionality to handle HHVM/PHP environments",
2145 | "homepage": "http://www.github.com/sebastianbergmann/environment",
2146 | "keywords": [
2147 | "Xdebug",
2148 | "environment",
2149 | "hhvm"
2150 | ],
2151 | "support": {
2152 | "issues": "https://github.com/sebastianbergmann/environment/issues",
2153 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
2154 | },
2155 | "funding": [
2156 | {
2157 | "url": "https://github.com/sebastianbergmann",
2158 | "type": "github"
2159 | }
2160 | ],
2161 | "time": "2020-09-28T05:52:38+00:00"
2162 | },
2163 | {
2164 | "name": "sebastian/exporter",
2165 | "version": "4.0.4",
2166 | "source": {
2167 | "type": "git",
2168 | "url": "https://github.com/sebastianbergmann/exporter.git",
2169 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
2170 | },
2171 | "dist": {
2172 | "type": "zip",
2173 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
2174 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
2175 | "shasum": ""
2176 | },
2177 | "require": {
2178 | "php": ">=7.3",
2179 | "sebastian/recursion-context": "^4.0"
2180 | },
2181 | "require-dev": {
2182 | "ext-mbstring": "*",
2183 | "phpunit/phpunit": "^9.3"
2184 | },
2185 | "type": "library",
2186 | "extra": {
2187 | "branch-alias": {
2188 | "dev-master": "4.0-dev"
2189 | }
2190 | },
2191 | "autoload": {
2192 | "classmap": [
2193 | "src/"
2194 | ]
2195 | },
2196 | "notification-url": "https://packagist.org/downloads/",
2197 | "license": [
2198 | "BSD-3-Clause"
2199 | ],
2200 | "authors": [
2201 | {
2202 | "name": "Sebastian Bergmann",
2203 | "email": "sebastian@phpunit.de"
2204 | },
2205 | {
2206 | "name": "Jeff Welch",
2207 | "email": "whatthejeff@gmail.com"
2208 | },
2209 | {
2210 | "name": "Volker Dusch",
2211 | "email": "github@wallbash.com"
2212 | },
2213 | {
2214 | "name": "Adam Harvey",
2215 | "email": "aharvey@php.net"
2216 | },
2217 | {
2218 | "name": "Bernhard Schussek",
2219 | "email": "bschussek@gmail.com"
2220 | }
2221 | ],
2222 | "description": "Provides the functionality to export PHP variables for visualization",
2223 | "homepage": "https://www.github.com/sebastianbergmann/exporter",
2224 | "keywords": [
2225 | "export",
2226 | "exporter"
2227 | ],
2228 | "support": {
2229 | "issues": "https://github.com/sebastianbergmann/exporter/issues",
2230 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
2231 | },
2232 | "funding": [
2233 | {
2234 | "url": "https://github.com/sebastianbergmann",
2235 | "type": "github"
2236 | }
2237 | ],
2238 | "time": "2021-11-11T14:18:36+00:00"
2239 | },
2240 | {
2241 | "name": "sebastian/global-state",
2242 | "version": "5.0.5",
2243 | "source": {
2244 | "type": "git",
2245 | "url": "https://github.com/sebastianbergmann/global-state.git",
2246 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
2247 | },
2248 | "dist": {
2249 | "type": "zip",
2250 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
2251 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
2252 | "shasum": ""
2253 | },
2254 | "require": {
2255 | "php": ">=7.3",
2256 | "sebastian/object-reflector": "^2.0",
2257 | "sebastian/recursion-context": "^4.0"
2258 | },
2259 | "require-dev": {
2260 | "ext-dom": "*",
2261 | "phpunit/phpunit": "^9.3"
2262 | },
2263 | "suggest": {
2264 | "ext-uopz": "*"
2265 | },
2266 | "type": "library",
2267 | "extra": {
2268 | "branch-alias": {
2269 | "dev-master": "5.0-dev"
2270 | }
2271 | },
2272 | "autoload": {
2273 | "classmap": [
2274 | "src/"
2275 | ]
2276 | },
2277 | "notification-url": "https://packagist.org/downloads/",
2278 | "license": [
2279 | "BSD-3-Clause"
2280 | ],
2281 | "authors": [
2282 | {
2283 | "name": "Sebastian Bergmann",
2284 | "email": "sebastian@phpunit.de"
2285 | }
2286 | ],
2287 | "description": "Snapshotting of global state",
2288 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2289 | "keywords": [
2290 | "global state"
2291 | ],
2292 | "support": {
2293 | "issues": "https://github.com/sebastianbergmann/global-state/issues",
2294 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
2295 | },
2296 | "funding": [
2297 | {
2298 | "url": "https://github.com/sebastianbergmann",
2299 | "type": "github"
2300 | }
2301 | ],
2302 | "time": "2022-02-14T08:28:10+00:00"
2303 | },
2304 | {
2305 | "name": "sebastian/lines-of-code",
2306 | "version": "1.0.3",
2307 | "source": {
2308 | "type": "git",
2309 | "url": "https://github.com/sebastianbergmann/lines-of-code.git",
2310 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
2311 | },
2312 | "dist": {
2313 | "type": "zip",
2314 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2315 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2316 | "shasum": ""
2317 | },
2318 | "require": {
2319 | "nikic/php-parser": "^4.6",
2320 | "php": ">=7.3"
2321 | },
2322 | "require-dev": {
2323 | "phpunit/phpunit": "^9.3"
2324 | },
2325 | "type": "library",
2326 | "extra": {
2327 | "branch-alias": {
2328 | "dev-master": "1.0-dev"
2329 | }
2330 | },
2331 | "autoload": {
2332 | "classmap": [
2333 | "src/"
2334 | ]
2335 | },
2336 | "notification-url": "https://packagist.org/downloads/",
2337 | "license": [
2338 | "BSD-3-Clause"
2339 | ],
2340 | "authors": [
2341 | {
2342 | "name": "Sebastian Bergmann",
2343 | "email": "sebastian@phpunit.de",
2344 | "role": "lead"
2345 | }
2346 | ],
2347 | "description": "Library for counting the lines of code in PHP source code",
2348 | "homepage": "https://github.com/sebastianbergmann/lines-of-code",
2349 | "support": {
2350 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
2351 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
2352 | },
2353 | "funding": [
2354 | {
2355 | "url": "https://github.com/sebastianbergmann",
2356 | "type": "github"
2357 | }
2358 | ],
2359 | "time": "2020-11-28T06:42:11+00:00"
2360 | },
2361 | {
2362 | "name": "sebastian/object-enumerator",
2363 | "version": "4.0.4",
2364 | "source": {
2365 | "type": "git",
2366 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2367 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
2368 | },
2369 | "dist": {
2370 | "type": "zip",
2371 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
2372 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
2373 | "shasum": ""
2374 | },
2375 | "require": {
2376 | "php": ">=7.3",
2377 | "sebastian/object-reflector": "^2.0",
2378 | "sebastian/recursion-context": "^4.0"
2379 | },
2380 | "require-dev": {
2381 | "phpunit/phpunit": "^9.3"
2382 | },
2383 | "type": "library",
2384 | "extra": {
2385 | "branch-alias": {
2386 | "dev-master": "4.0-dev"
2387 | }
2388 | },
2389 | "autoload": {
2390 | "classmap": [
2391 | "src/"
2392 | ]
2393 | },
2394 | "notification-url": "https://packagist.org/downloads/",
2395 | "license": [
2396 | "BSD-3-Clause"
2397 | ],
2398 | "authors": [
2399 | {
2400 | "name": "Sebastian Bergmann",
2401 | "email": "sebastian@phpunit.de"
2402 | }
2403 | ],
2404 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2405 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2406 | "support": {
2407 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
2408 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
2409 | },
2410 | "funding": [
2411 | {
2412 | "url": "https://github.com/sebastianbergmann",
2413 | "type": "github"
2414 | }
2415 | ],
2416 | "time": "2020-10-26T13:12:34+00:00"
2417 | },
2418 | {
2419 | "name": "sebastian/object-reflector",
2420 | "version": "2.0.4",
2421 | "source": {
2422 | "type": "git",
2423 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2424 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
2425 | },
2426 | "dist": {
2427 | "type": "zip",
2428 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2429 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2430 | "shasum": ""
2431 | },
2432 | "require": {
2433 | "php": ">=7.3"
2434 | },
2435 | "require-dev": {
2436 | "phpunit/phpunit": "^9.3"
2437 | },
2438 | "type": "library",
2439 | "extra": {
2440 | "branch-alias": {
2441 | "dev-master": "2.0-dev"
2442 | }
2443 | },
2444 | "autoload": {
2445 | "classmap": [
2446 | "src/"
2447 | ]
2448 | },
2449 | "notification-url": "https://packagist.org/downloads/",
2450 | "license": [
2451 | "BSD-3-Clause"
2452 | ],
2453 | "authors": [
2454 | {
2455 | "name": "Sebastian Bergmann",
2456 | "email": "sebastian@phpunit.de"
2457 | }
2458 | ],
2459 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2460 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2461 | "support": {
2462 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
2463 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
2464 | },
2465 | "funding": [
2466 | {
2467 | "url": "https://github.com/sebastianbergmann",
2468 | "type": "github"
2469 | }
2470 | ],
2471 | "time": "2020-10-26T13:14:26+00:00"
2472 | },
2473 | {
2474 | "name": "sebastian/recursion-context",
2475 | "version": "4.0.4",
2476 | "source": {
2477 | "type": "git",
2478 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2479 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
2480 | },
2481 | "dist": {
2482 | "type": "zip",
2483 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
2484 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
2485 | "shasum": ""
2486 | },
2487 | "require": {
2488 | "php": ">=7.3"
2489 | },
2490 | "require-dev": {
2491 | "phpunit/phpunit": "^9.3"
2492 | },
2493 | "type": "library",
2494 | "extra": {
2495 | "branch-alias": {
2496 | "dev-master": "4.0-dev"
2497 | }
2498 | },
2499 | "autoload": {
2500 | "classmap": [
2501 | "src/"
2502 | ]
2503 | },
2504 | "notification-url": "https://packagist.org/downloads/",
2505 | "license": [
2506 | "BSD-3-Clause"
2507 | ],
2508 | "authors": [
2509 | {
2510 | "name": "Sebastian Bergmann",
2511 | "email": "sebastian@phpunit.de"
2512 | },
2513 | {
2514 | "name": "Jeff Welch",
2515 | "email": "whatthejeff@gmail.com"
2516 | },
2517 | {
2518 | "name": "Adam Harvey",
2519 | "email": "aharvey@php.net"
2520 | }
2521 | ],
2522 | "description": "Provides functionality to recursively process PHP variables",
2523 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2524 | "support": {
2525 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
2526 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
2527 | },
2528 | "funding": [
2529 | {
2530 | "url": "https://github.com/sebastianbergmann",
2531 | "type": "github"
2532 | }
2533 | ],
2534 | "time": "2020-10-26T13:17:30+00:00"
2535 | },
2536 | {
2537 | "name": "sebastian/resource-operations",
2538 | "version": "3.0.3",
2539 | "source": {
2540 | "type": "git",
2541 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
2542 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
2543 | },
2544 | "dist": {
2545 | "type": "zip",
2546 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
2547 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
2548 | "shasum": ""
2549 | },
2550 | "require": {
2551 | "php": ">=7.3"
2552 | },
2553 | "require-dev": {
2554 | "phpunit/phpunit": "^9.0"
2555 | },
2556 | "type": "library",
2557 | "extra": {
2558 | "branch-alias": {
2559 | "dev-master": "3.0-dev"
2560 | }
2561 | },
2562 | "autoload": {
2563 | "classmap": [
2564 | "src/"
2565 | ]
2566 | },
2567 | "notification-url": "https://packagist.org/downloads/",
2568 | "license": [
2569 | "BSD-3-Clause"
2570 | ],
2571 | "authors": [
2572 | {
2573 | "name": "Sebastian Bergmann",
2574 | "email": "sebastian@phpunit.de"
2575 | }
2576 | ],
2577 | "description": "Provides a list of PHP built-in functions that operate on resources",
2578 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2579 | "support": {
2580 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
2581 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
2582 | },
2583 | "funding": [
2584 | {
2585 | "url": "https://github.com/sebastianbergmann",
2586 | "type": "github"
2587 | }
2588 | ],
2589 | "time": "2020-09-28T06:45:17+00:00"
2590 | },
2591 | {
2592 | "name": "sebastian/type",
2593 | "version": "3.0.0",
2594 | "source": {
2595 | "type": "git",
2596 | "url": "https://github.com/sebastianbergmann/type.git",
2597 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
2598 | },
2599 | "dist": {
2600 | "type": "zip",
2601 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
2602 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
2603 | "shasum": ""
2604 | },
2605 | "require": {
2606 | "php": ">=7.3"
2607 | },
2608 | "require-dev": {
2609 | "phpunit/phpunit": "^9.5"
2610 | },
2611 | "type": "library",
2612 | "extra": {
2613 | "branch-alias": {
2614 | "dev-master": "3.0-dev"
2615 | }
2616 | },
2617 | "autoload": {
2618 | "classmap": [
2619 | "src/"
2620 | ]
2621 | },
2622 | "notification-url": "https://packagist.org/downloads/",
2623 | "license": [
2624 | "BSD-3-Clause"
2625 | ],
2626 | "authors": [
2627 | {
2628 | "name": "Sebastian Bergmann",
2629 | "email": "sebastian@phpunit.de",
2630 | "role": "lead"
2631 | }
2632 | ],
2633 | "description": "Collection of value objects that represent the types of the PHP type system",
2634 | "homepage": "https://github.com/sebastianbergmann/type",
2635 | "support": {
2636 | "issues": "https://github.com/sebastianbergmann/type/issues",
2637 | "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
2638 | },
2639 | "funding": [
2640 | {
2641 | "url": "https://github.com/sebastianbergmann",
2642 | "type": "github"
2643 | }
2644 | ],
2645 | "time": "2022-03-15T09:54:48+00:00"
2646 | },
2647 | {
2648 | "name": "sebastian/version",
2649 | "version": "3.0.2",
2650 | "source": {
2651 | "type": "git",
2652 | "url": "https://github.com/sebastianbergmann/version.git",
2653 | "reference": "c6c1022351a901512170118436c764e473f6de8c"
2654 | },
2655 | "dist": {
2656 | "type": "zip",
2657 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
2658 | "reference": "c6c1022351a901512170118436c764e473f6de8c",
2659 | "shasum": ""
2660 | },
2661 | "require": {
2662 | "php": ">=7.3"
2663 | },
2664 | "type": "library",
2665 | "extra": {
2666 | "branch-alias": {
2667 | "dev-master": "3.0-dev"
2668 | }
2669 | },
2670 | "autoload": {
2671 | "classmap": [
2672 | "src/"
2673 | ]
2674 | },
2675 | "notification-url": "https://packagist.org/downloads/",
2676 | "license": [
2677 | "BSD-3-Clause"
2678 | ],
2679 | "authors": [
2680 | {
2681 | "name": "Sebastian Bergmann",
2682 | "email": "sebastian@phpunit.de",
2683 | "role": "lead"
2684 | }
2685 | ],
2686 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2687 | "homepage": "https://github.com/sebastianbergmann/version",
2688 | "support": {
2689 | "issues": "https://github.com/sebastianbergmann/version/issues",
2690 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
2691 | },
2692 | "funding": [
2693 | {
2694 | "url": "https://github.com/sebastianbergmann",
2695 | "type": "github"
2696 | }
2697 | ],
2698 | "time": "2020-09-28T06:39:44+00:00"
2699 | },
2700 | {
2701 | "name": "seld/jsonlint",
2702 | "version": "1.8.3",
2703 | "source": {
2704 | "type": "git",
2705 | "url": "https://github.com/Seldaek/jsonlint.git",
2706 | "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57"
2707 | },
2708 | "dist": {
2709 | "type": "zip",
2710 | "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
2711 | "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
2712 | "shasum": ""
2713 | },
2714 | "require": {
2715 | "php": "^5.3 || ^7.0 || ^8.0"
2716 | },
2717 | "require-dev": {
2718 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
2719 | },
2720 | "bin": [
2721 | "bin/jsonlint"
2722 | ],
2723 | "type": "library",
2724 | "autoload": {
2725 | "psr-4": {
2726 | "Seld\\JsonLint\\": "src/Seld/JsonLint/"
2727 | }
2728 | },
2729 | "notification-url": "https://packagist.org/downloads/",
2730 | "license": [
2731 | "MIT"
2732 | ],
2733 | "authors": [
2734 | {
2735 | "name": "Jordi Boggiano",
2736 | "email": "j.boggiano@seld.be",
2737 | "homepage": "http://seld.be"
2738 | }
2739 | ],
2740 | "description": "JSON Linter",
2741 | "keywords": [
2742 | "json",
2743 | "linter",
2744 | "parser",
2745 | "validator"
2746 | ],
2747 | "support": {
2748 | "issues": "https://github.com/Seldaek/jsonlint/issues",
2749 | "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3"
2750 | },
2751 | "funding": [
2752 | {
2753 | "url": "https://github.com/Seldaek",
2754 | "type": "github"
2755 | },
2756 | {
2757 | "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
2758 | "type": "tidelift"
2759 | }
2760 | ],
2761 | "time": "2020-11-11T09:19:24+00:00"
2762 | },
2763 | {
2764 | "name": "symfony/console",
2765 | "version": "v5.4.5",
2766 | "source": {
2767 | "type": "git",
2768 | "url": "https://github.com/symfony/console.git",
2769 | "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad"
2770 | },
2771 | "dist": {
2772 | "type": "zip",
2773 | "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad",
2774 | "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad",
2775 | "shasum": ""
2776 | },
2777 | "require": {
2778 | "php": ">=7.2.5",
2779 | "symfony/deprecation-contracts": "^2.1|^3",
2780 | "symfony/polyfill-mbstring": "~1.0",
2781 | "symfony/polyfill-php73": "^1.9",
2782 | "symfony/polyfill-php80": "^1.16",
2783 | "symfony/service-contracts": "^1.1|^2|^3",
2784 | "symfony/string": "^5.1|^6.0"
2785 | },
2786 | "conflict": {
2787 | "psr/log": ">=3",
2788 | "symfony/dependency-injection": "<4.4",
2789 | "symfony/dotenv": "<5.1",
2790 | "symfony/event-dispatcher": "<4.4",
2791 | "symfony/lock": "<4.4",
2792 | "symfony/process": "<4.4"
2793 | },
2794 | "provide": {
2795 | "psr/log-implementation": "1.0|2.0"
2796 | },
2797 | "require-dev": {
2798 | "psr/log": "^1|^2",
2799 | "symfony/config": "^4.4|^5.0|^6.0",
2800 | "symfony/dependency-injection": "^4.4|^5.0|^6.0",
2801 | "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
2802 | "symfony/lock": "^4.4|^5.0|^6.0",
2803 | "symfony/process": "^4.4|^5.0|^6.0",
2804 | "symfony/var-dumper": "^4.4|^5.0|^6.0"
2805 | },
2806 | "suggest": {
2807 | "psr/log": "For using the console logger",
2808 | "symfony/event-dispatcher": "",
2809 | "symfony/lock": "",
2810 | "symfony/process": ""
2811 | },
2812 | "type": "library",
2813 | "autoload": {
2814 | "psr-4": {
2815 | "Symfony\\Component\\Console\\": ""
2816 | },
2817 | "exclude-from-classmap": [
2818 | "/Tests/"
2819 | ]
2820 | },
2821 | "notification-url": "https://packagist.org/downloads/",
2822 | "license": [
2823 | "MIT"
2824 | ],
2825 | "authors": [
2826 | {
2827 | "name": "Fabien Potencier",
2828 | "email": "fabien@symfony.com"
2829 | },
2830 | {
2831 | "name": "Symfony Community",
2832 | "homepage": "https://symfony.com/contributors"
2833 | }
2834 | ],
2835 | "description": "Eases the creation of beautiful and testable command line interfaces",
2836 | "homepage": "https://symfony.com",
2837 | "keywords": [
2838 | "cli",
2839 | "command line",
2840 | "console",
2841 | "terminal"
2842 | ],
2843 | "support": {
2844 | "source": "https://github.com/symfony/console/tree/v5.4.5"
2845 | },
2846 | "funding": [
2847 | {
2848 | "url": "https://symfony.com/sponsor",
2849 | "type": "custom"
2850 | },
2851 | {
2852 | "url": "https://github.com/fabpot",
2853 | "type": "github"
2854 | },
2855 | {
2856 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2857 | "type": "tidelift"
2858 | }
2859 | ],
2860 | "time": "2022-02-24T12:45:35+00:00"
2861 | },
2862 | {
2863 | "name": "symfony/deprecation-contracts",
2864 | "version": "v2.5.0",
2865 | "source": {
2866 | "type": "git",
2867 | "url": "https://github.com/symfony/deprecation-contracts.git",
2868 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
2869 | },
2870 | "dist": {
2871 | "type": "zip",
2872 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
2873 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
2874 | "shasum": ""
2875 | },
2876 | "require": {
2877 | "php": ">=7.1"
2878 | },
2879 | "type": "library",
2880 | "extra": {
2881 | "branch-alias": {
2882 | "dev-main": "2.5-dev"
2883 | },
2884 | "thanks": {
2885 | "name": "symfony/contracts",
2886 | "url": "https://github.com/symfony/contracts"
2887 | }
2888 | },
2889 | "autoload": {
2890 | "files": [
2891 | "function.php"
2892 | ]
2893 | },
2894 | "notification-url": "https://packagist.org/downloads/",
2895 | "license": [
2896 | "MIT"
2897 | ],
2898 | "authors": [
2899 | {
2900 | "name": "Nicolas Grekas",
2901 | "email": "p@tchwork.com"
2902 | },
2903 | {
2904 | "name": "Symfony Community",
2905 | "homepage": "https://symfony.com/contributors"
2906 | }
2907 | ],
2908 | "description": "A generic function and convention to trigger deprecation notices",
2909 | "homepage": "https://symfony.com",
2910 | "support": {
2911 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
2912 | },
2913 | "funding": [
2914 | {
2915 | "url": "https://symfony.com/sponsor",
2916 | "type": "custom"
2917 | },
2918 | {
2919 | "url": "https://github.com/fabpot",
2920 | "type": "github"
2921 | },
2922 | {
2923 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2924 | "type": "tidelift"
2925 | }
2926 | ],
2927 | "time": "2021-07-12T14:48:14+00:00"
2928 | },
2929 | {
2930 | "name": "symfony/filesystem",
2931 | "version": "v5.4.6",
2932 | "source": {
2933 | "type": "git",
2934 | "url": "https://github.com/symfony/filesystem.git",
2935 | "reference": "d53a45039974952af7f7ebc461ccdd4295e29440"
2936 | },
2937 | "dist": {
2938 | "type": "zip",
2939 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440",
2940 | "reference": "d53a45039974952af7f7ebc461ccdd4295e29440",
2941 | "shasum": ""
2942 | },
2943 | "require": {
2944 | "php": ">=7.2.5",
2945 | "symfony/polyfill-ctype": "~1.8",
2946 | "symfony/polyfill-mbstring": "~1.8",
2947 | "symfony/polyfill-php80": "^1.16"
2948 | },
2949 | "type": "library",
2950 | "autoload": {
2951 | "psr-4": {
2952 | "Symfony\\Component\\Filesystem\\": ""
2953 | },
2954 | "exclude-from-classmap": [
2955 | "/Tests/"
2956 | ]
2957 | },
2958 | "notification-url": "https://packagist.org/downloads/",
2959 | "license": [
2960 | "MIT"
2961 | ],
2962 | "authors": [
2963 | {
2964 | "name": "Fabien Potencier",
2965 | "email": "fabien@symfony.com"
2966 | },
2967 | {
2968 | "name": "Symfony Community",
2969 | "homepage": "https://symfony.com/contributors"
2970 | }
2971 | ],
2972 | "description": "Provides basic utilities for the filesystem",
2973 | "homepage": "https://symfony.com",
2974 | "support": {
2975 | "source": "https://github.com/symfony/filesystem/tree/v5.4.6"
2976 | },
2977 | "funding": [
2978 | {
2979 | "url": "https://symfony.com/sponsor",
2980 | "type": "custom"
2981 | },
2982 | {
2983 | "url": "https://github.com/fabpot",
2984 | "type": "github"
2985 | },
2986 | {
2987 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2988 | "type": "tidelift"
2989 | }
2990 | ],
2991 | "time": "2022-03-02T12:42:23+00:00"
2992 | },
2993 | {
2994 | "name": "symfony/finder",
2995 | "version": "v5.4.3",
2996 | "source": {
2997 | "type": "git",
2998 | "url": "https://github.com/symfony/finder.git",
2999 | "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
3000 | },
3001 | "dist": {
3002 | "type": "zip",
3003 | "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
3004 | "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
3005 | "shasum": ""
3006 | },
3007 | "require": {
3008 | "php": ">=7.2.5",
3009 | "symfony/deprecation-contracts": "^2.1|^3",
3010 | "symfony/polyfill-php80": "^1.16"
3011 | },
3012 | "type": "library",
3013 | "autoload": {
3014 | "psr-4": {
3015 | "Symfony\\Component\\Finder\\": ""
3016 | },
3017 | "exclude-from-classmap": [
3018 | "/Tests/"
3019 | ]
3020 | },
3021 | "notification-url": "https://packagist.org/downloads/",
3022 | "license": [
3023 | "MIT"
3024 | ],
3025 | "authors": [
3026 | {
3027 | "name": "Fabien Potencier",
3028 | "email": "fabien@symfony.com"
3029 | },
3030 | {
3031 | "name": "Symfony Community",
3032 | "homepage": "https://symfony.com/contributors"
3033 | }
3034 | ],
3035 | "description": "Finds files and directories via an intuitive fluent interface",
3036 | "homepage": "https://symfony.com",
3037 | "support": {
3038 | "source": "https://github.com/symfony/finder/tree/v5.4.3"
3039 | },
3040 | "funding": [
3041 | {
3042 | "url": "https://symfony.com/sponsor",
3043 | "type": "custom"
3044 | },
3045 | {
3046 | "url": "https://github.com/fabpot",
3047 | "type": "github"
3048 | },
3049 | {
3050 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3051 | "type": "tidelift"
3052 | }
3053 | ],
3054 | "time": "2022-01-26T16:34:36+00:00"
3055 | },
3056 | {
3057 | "name": "symfony/polyfill-ctype",
3058 | "version": "v1.25.0",
3059 | "source": {
3060 | "type": "git",
3061 | "url": "https://github.com/symfony/polyfill-ctype.git",
3062 | "reference": "30885182c981ab175d4d034db0f6f469898070ab"
3063 | },
3064 | "dist": {
3065 | "type": "zip",
3066 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
3067 | "reference": "30885182c981ab175d4d034db0f6f469898070ab",
3068 | "shasum": ""
3069 | },
3070 | "require": {
3071 | "php": ">=7.1"
3072 | },
3073 | "provide": {
3074 | "ext-ctype": "*"
3075 | },
3076 | "suggest": {
3077 | "ext-ctype": "For best performance"
3078 | },
3079 | "type": "library",
3080 | "extra": {
3081 | "branch-alias": {
3082 | "dev-main": "1.23-dev"
3083 | },
3084 | "thanks": {
3085 | "name": "symfony/polyfill",
3086 | "url": "https://github.com/symfony/polyfill"
3087 | }
3088 | },
3089 | "autoload": {
3090 | "files": [
3091 | "bootstrap.php"
3092 | ],
3093 | "psr-4": {
3094 | "Symfony\\Polyfill\\Ctype\\": ""
3095 | }
3096 | },
3097 | "notification-url": "https://packagist.org/downloads/",
3098 | "license": [
3099 | "MIT"
3100 | ],
3101 | "authors": [
3102 | {
3103 | "name": "Gert de Pagter",
3104 | "email": "BackEndTea@gmail.com"
3105 | },
3106 | {
3107 | "name": "Symfony Community",
3108 | "homepage": "https://symfony.com/contributors"
3109 | }
3110 | ],
3111 | "description": "Symfony polyfill for ctype functions",
3112 | "homepage": "https://symfony.com",
3113 | "keywords": [
3114 | "compatibility",
3115 | "ctype",
3116 | "polyfill",
3117 | "portable"
3118 | ],
3119 | "support": {
3120 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
3121 | },
3122 | "funding": [
3123 | {
3124 | "url": "https://symfony.com/sponsor",
3125 | "type": "custom"
3126 | },
3127 | {
3128 | "url": "https://github.com/fabpot",
3129 | "type": "github"
3130 | },
3131 | {
3132 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3133 | "type": "tidelift"
3134 | }
3135 | ],
3136 | "time": "2021-10-20T20:35:02+00:00"
3137 | },
3138 | {
3139 | "name": "symfony/polyfill-intl-grapheme",
3140 | "version": "v1.25.0",
3141 | "source": {
3142 | "type": "git",
3143 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
3144 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
3145 | },
3146 | "dist": {
3147 | "type": "zip",
3148 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
3149 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
3150 | "shasum": ""
3151 | },
3152 | "require": {
3153 | "php": ">=7.1"
3154 | },
3155 | "suggest": {
3156 | "ext-intl": "For best performance"
3157 | },
3158 | "type": "library",
3159 | "extra": {
3160 | "branch-alias": {
3161 | "dev-main": "1.23-dev"
3162 | },
3163 | "thanks": {
3164 | "name": "symfony/polyfill",
3165 | "url": "https://github.com/symfony/polyfill"
3166 | }
3167 | },
3168 | "autoload": {
3169 | "files": [
3170 | "bootstrap.php"
3171 | ],
3172 | "psr-4": {
3173 | "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
3174 | }
3175 | },
3176 | "notification-url": "https://packagist.org/downloads/",
3177 | "license": [
3178 | "MIT"
3179 | ],
3180 | "authors": [
3181 | {
3182 | "name": "Nicolas Grekas",
3183 | "email": "p@tchwork.com"
3184 | },
3185 | {
3186 | "name": "Symfony Community",
3187 | "homepage": "https://symfony.com/contributors"
3188 | }
3189 | ],
3190 | "description": "Symfony polyfill for intl's grapheme_* functions",
3191 | "homepage": "https://symfony.com",
3192 | "keywords": [
3193 | "compatibility",
3194 | "grapheme",
3195 | "intl",
3196 | "polyfill",
3197 | "portable",
3198 | "shim"
3199 | ],
3200 | "support": {
3201 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
3202 | },
3203 | "funding": [
3204 | {
3205 | "url": "https://symfony.com/sponsor",
3206 | "type": "custom"
3207 | },
3208 | {
3209 | "url": "https://github.com/fabpot",
3210 | "type": "github"
3211 | },
3212 | {
3213 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3214 | "type": "tidelift"
3215 | }
3216 | ],
3217 | "time": "2021-11-23T21:10:46+00:00"
3218 | },
3219 | {
3220 | "name": "symfony/polyfill-intl-normalizer",
3221 | "version": "v1.25.0",
3222 | "source": {
3223 | "type": "git",
3224 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
3225 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
3226 | },
3227 | "dist": {
3228 | "type": "zip",
3229 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
3230 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
3231 | "shasum": ""
3232 | },
3233 | "require": {
3234 | "php": ">=7.1"
3235 | },
3236 | "suggest": {
3237 | "ext-intl": "For best performance"
3238 | },
3239 | "type": "library",
3240 | "extra": {
3241 | "branch-alias": {
3242 | "dev-main": "1.23-dev"
3243 | },
3244 | "thanks": {
3245 | "name": "symfony/polyfill",
3246 | "url": "https://github.com/symfony/polyfill"
3247 | }
3248 | },
3249 | "autoload": {
3250 | "files": [
3251 | "bootstrap.php"
3252 | ],
3253 | "psr-4": {
3254 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
3255 | },
3256 | "classmap": [
3257 | "Resources/stubs"
3258 | ]
3259 | },
3260 | "notification-url": "https://packagist.org/downloads/",
3261 | "license": [
3262 | "MIT"
3263 | ],
3264 | "authors": [
3265 | {
3266 | "name": "Nicolas Grekas",
3267 | "email": "p@tchwork.com"
3268 | },
3269 | {
3270 | "name": "Symfony Community",
3271 | "homepage": "https://symfony.com/contributors"
3272 | }
3273 | ],
3274 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
3275 | "homepage": "https://symfony.com",
3276 | "keywords": [
3277 | "compatibility",
3278 | "intl",
3279 | "normalizer",
3280 | "polyfill",
3281 | "portable",
3282 | "shim"
3283 | ],
3284 | "support": {
3285 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
3286 | },
3287 | "funding": [
3288 | {
3289 | "url": "https://symfony.com/sponsor",
3290 | "type": "custom"
3291 | },
3292 | {
3293 | "url": "https://github.com/fabpot",
3294 | "type": "github"
3295 | },
3296 | {
3297 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3298 | "type": "tidelift"
3299 | }
3300 | ],
3301 | "time": "2021-02-19T12:13:01+00:00"
3302 | },
3303 | {
3304 | "name": "symfony/polyfill-mbstring",
3305 | "version": "v1.25.0",
3306 | "source": {
3307 | "type": "git",
3308 | "url": "https://github.com/symfony/polyfill-mbstring.git",
3309 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
3310 | },
3311 | "dist": {
3312 | "type": "zip",
3313 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
3314 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
3315 | "shasum": ""
3316 | },
3317 | "require": {
3318 | "php": ">=7.1"
3319 | },
3320 | "provide": {
3321 | "ext-mbstring": "*"
3322 | },
3323 | "suggest": {
3324 | "ext-mbstring": "For best performance"
3325 | },
3326 | "type": "library",
3327 | "extra": {
3328 | "branch-alias": {
3329 | "dev-main": "1.23-dev"
3330 | },
3331 | "thanks": {
3332 | "name": "symfony/polyfill",
3333 | "url": "https://github.com/symfony/polyfill"
3334 | }
3335 | },
3336 | "autoload": {
3337 | "files": [
3338 | "bootstrap.php"
3339 | ],
3340 | "psr-4": {
3341 | "Symfony\\Polyfill\\Mbstring\\": ""
3342 | }
3343 | },
3344 | "notification-url": "https://packagist.org/downloads/",
3345 | "license": [
3346 | "MIT"
3347 | ],
3348 | "authors": [
3349 | {
3350 | "name": "Nicolas Grekas",
3351 | "email": "p@tchwork.com"
3352 | },
3353 | {
3354 | "name": "Symfony Community",
3355 | "homepage": "https://symfony.com/contributors"
3356 | }
3357 | ],
3358 | "description": "Symfony polyfill for the Mbstring extension",
3359 | "homepage": "https://symfony.com",
3360 | "keywords": [
3361 | "compatibility",
3362 | "mbstring",
3363 | "polyfill",
3364 | "portable",
3365 | "shim"
3366 | ],
3367 | "support": {
3368 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
3369 | },
3370 | "funding": [
3371 | {
3372 | "url": "https://symfony.com/sponsor",
3373 | "type": "custom"
3374 | },
3375 | {
3376 | "url": "https://github.com/fabpot",
3377 | "type": "github"
3378 | },
3379 | {
3380 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3381 | "type": "tidelift"
3382 | }
3383 | ],
3384 | "time": "2021-11-30T18:21:41+00:00"
3385 | },
3386 | {
3387 | "name": "symfony/polyfill-php73",
3388 | "version": "v1.25.0",
3389 | "source": {
3390 | "type": "git",
3391 | "url": "https://github.com/symfony/polyfill-php73.git",
3392 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
3393 | },
3394 | "dist": {
3395 | "type": "zip",
3396 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
3397 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
3398 | "shasum": ""
3399 | },
3400 | "require": {
3401 | "php": ">=7.1"
3402 | },
3403 | "type": "library",
3404 | "extra": {
3405 | "branch-alias": {
3406 | "dev-main": "1.23-dev"
3407 | },
3408 | "thanks": {
3409 | "name": "symfony/polyfill",
3410 | "url": "https://github.com/symfony/polyfill"
3411 | }
3412 | },
3413 | "autoload": {
3414 | "files": [
3415 | "bootstrap.php"
3416 | ],
3417 | "psr-4": {
3418 | "Symfony\\Polyfill\\Php73\\": ""
3419 | },
3420 | "classmap": [
3421 | "Resources/stubs"
3422 | ]
3423 | },
3424 | "notification-url": "https://packagist.org/downloads/",
3425 | "license": [
3426 | "MIT"
3427 | ],
3428 | "authors": [
3429 | {
3430 | "name": "Nicolas Grekas",
3431 | "email": "p@tchwork.com"
3432 | },
3433 | {
3434 | "name": "Symfony Community",
3435 | "homepage": "https://symfony.com/contributors"
3436 | }
3437 | ],
3438 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
3439 | "homepage": "https://symfony.com",
3440 | "keywords": [
3441 | "compatibility",
3442 | "polyfill",
3443 | "portable",
3444 | "shim"
3445 | ],
3446 | "support": {
3447 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
3448 | },
3449 | "funding": [
3450 | {
3451 | "url": "https://symfony.com/sponsor",
3452 | "type": "custom"
3453 | },
3454 | {
3455 | "url": "https://github.com/fabpot",
3456 | "type": "github"
3457 | },
3458 | {
3459 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3460 | "type": "tidelift"
3461 | }
3462 | ],
3463 | "time": "2021-06-05T21:20:04+00:00"
3464 | },
3465 | {
3466 | "name": "symfony/polyfill-php80",
3467 | "version": "v1.31.0",
3468 | "source": {
3469 | "type": "git",
3470 | "url": "https://github.com/symfony/polyfill-php80.git",
3471 | "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
3472 | },
3473 | "dist": {
3474 | "type": "zip",
3475 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
3476 | "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
3477 | "shasum": ""
3478 | },
3479 | "require": {
3480 | "php": ">=7.2"
3481 | },
3482 | "type": "library",
3483 | "extra": {
3484 | "thanks": {
3485 | "name": "symfony/polyfill",
3486 | "url": "https://github.com/symfony/polyfill"
3487 | }
3488 | },
3489 | "autoload": {
3490 | "files": [
3491 | "bootstrap.php"
3492 | ],
3493 | "psr-4": {
3494 | "Symfony\\Polyfill\\Php80\\": ""
3495 | },
3496 | "classmap": [
3497 | "Resources/stubs"
3498 | ]
3499 | },
3500 | "notification-url": "https://packagist.org/downloads/",
3501 | "license": [
3502 | "MIT"
3503 | ],
3504 | "authors": [
3505 | {
3506 | "name": "Ion Bazan",
3507 | "email": "ion.bazan@gmail.com"
3508 | },
3509 | {
3510 | "name": "Nicolas Grekas",
3511 | "email": "p@tchwork.com"
3512 | },
3513 | {
3514 | "name": "Symfony Community",
3515 | "homepage": "https://symfony.com/contributors"
3516 | }
3517 | ],
3518 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
3519 | "homepage": "https://symfony.com",
3520 | "keywords": [
3521 | "compatibility",
3522 | "polyfill",
3523 | "portable",
3524 | "shim"
3525 | ],
3526 | "support": {
3527 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
3528 | },
3529 | "funding": [
3530 | {
3531 | "url": "https://symfony.com/sponsor",
3532 | "type": "custom"
3533 | },
3534 | {
3535 | "url": "https://github.com/fabpot",
3536 | "type": "github"
3537 | },
3538 | {
3539 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3540 | "type": "tidelift"
3541 | }
3542 | ],
3543 | "time": "2024-09-09T11:45:10+00:00"
3544 | },
3545 | {
3546 | "name": "symfony/process",
3547 | "version": "v5.4.46",
3548 | "source": {
3549 | "type": "git",
3550 | "url": "https://github.com/symfony/process.git",
3551 | "reference": "01906871cb9b5e3cf872863b91aba4ec9767daf4"
3552 | },
3553 | "dist": {
3554 | "type": "zip",
3555 | "url": "https://api.github.com/repos/symfony/process/zipball/01906871cb9b5e3cf872863b91aba4ec9767daf4",
3556 | "reference": "01906871cb9b5e3cf872863b91aba4ec9767daf4",
3557 | "shasum": ""
3558 | },
3559 | "require": {
3560 | "php": ">=7.2.5",
3561 | "symfony/polyfill-php80": "^1.16"
3562 | },
3563 | "type": "library",
3564 | "autoload": {
3565 | "psr-4": {
3566 | "Symfony\\Component\\Process\\": ""
3567 | },
3568 | "exclude-from-classmap": [
3569 | "/Tests/"
3570 | ]
3571 | },
3572 | "notification-url": "https://packagist.org/downloads/",
3573 | "license": [
3574 | "MIT"
3575 | ],
3576 | "authors": [
3577 | {
3578 | "name": "Fabien Potencier",
3579 | "email": "fabien@symfony.com"
3580 | },
3581 | {
3582 | "name": "Symfony Community",
3583 | "homepage": "https://symfony.com/contributors"
3584 | }
3585 | ],
3586 | "description": "Executes commands in sub-processes",
3587 | "homepage": "https://symfony.com",
3588 | "support": {
3589 | "source": "https://github.com/symfony/process/tree/v5.4.46"
3590 | },
3591 | "funding": [
3592 | {
3593 | "url": "https://symfony.com/sponsor",
3594 | "type": "custom"
3595 | },
3596 | {
3597 | "url": "https://github.com/fabpot",
3598 | "type": "github"
3599 | },
3600 | {
3601 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3602 | "type": "tidelift"
3603 | }
3604 | ],
3605 | "time": "2024-11-06T09:18:28+00:00"
3606 | },
3607 | {
3608 | "name": "symfony/service-contracts",
3609 | "version": "v2.5.0",
3610 | "source": {
3611 | "type": "git",
3612 | "url": "https://github.com/symfony/service-contracts.git",
3613 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
3614 | },
3615 | "dist": {
3616 | "type": "zip",
3617 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
3618 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
3619 | "shasum": ""
3620 | },
3621 | "require": {
3622 | "php": ">=7.2.5",
3623 | "psr/container": "^1.1",
3624 | "symfony/deprecation-contracts": "^2.1"
3625 | },
3626 | "conflict": {
3627 | "ext-psr": "<1.1|>=2"
3628 | },
3629 | "suggest": {
3630 | "symfony/service-implementation": ""
3631 | },
3632 | "type": "library",
3633 | "extra": {
3634 | "branch-alias": {
3635 | "dev-main": "2.5-dev"
3636 | },
3637 | "thanks": {
3638 | "name": "symfony/contracts",
3639 | "url": "https://github.com/symfony/contracts"
3640 | }
3641 | },
3642 | "autoload": {
3643 | "psr-4": {
3644 | "Symfony\\Contracts\\Service\\": ""
3645 | }
3646 | },
3647 | "notification-url": "https://packagist.org/downloads/",
3648 | "license": [
3649 | "MIT"
3650 | ],
3651 | "authors": [
3652 | {
3653 | "name": "Nicolas Grekas",
3654 | "email": "p@tchwork.com"
3655 | },
3656 | {
3657 | "name": "Symfony Community",
3658 | "homepage": "https://symfony.com/contributors"
3659 | }
3660 | ],
3661 | "description": "Generic abstractions related to writing services",
3662 | "homepage": "https://symfony.com",
3663 | "keywords": [
3664 | "abstractions",
3665 | "contracts",
3666 | "decoupling",
3667 | "interfaces",
3668 | "interoperability",
3669 | "standards"
3670 | ],
3671 | "support": {
3672 | "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
3673 | },
3674 | "funding": [
3675 | {
3676 | "url": "https://symfony.com/sponsor",
3677 | "type": "custom"
3678 | },
3679 | {
3680 | "url": "https://github.com/fabpot",
3681 | "type": "github"
3682 | },
3683 | {
3684 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3685 | "type": "tidelift"
3686 | }
3687 | ],
3688 | "time": "2021-11-04T16:48:04+00:00"
3689 | },
3690 | {
3691 | "name": "symfony/string",
3692 | "version": "v5.4.3",
3693 | "source": {
3694 | "type": "git",
3695 | "url": "https://github.com/symfony/string.git",
3696 | "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
3697 | },
3698 | "dist": {
3699 | "type": "zip",
3700 | "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
3701 | "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
3702 | "shasum": ""
3703 | },
3704 | "require": {
3705 | "php": ">=7.2.5",
3706 | "symfony/polyfill-ctype": "~1.8",
3707 | "symfony/polyfill-intl-grapheme": "~1.0",
3708 | "symfony/polyfill-intl-normalizer": "~1.0",
3709 | "symfony/polyfill-mbstring": "~1.0",
3710 | "symfony/polyfill-php80": "~1.15"
3711 | },
3712 | "conflict": {
3713 | "symfony/translation-contracts": ">=3.0"
3714 | },
3715 | "require-dev": {
3716 | "symfony/error-handler": "^4.4|^5.0|^6.0",
3717 | "symfony/http-client": "^4.4|^5.0|^6.0",
3718 | "symfony/translation-contracts": "^1.1|^2",
3719 | "symfony/var-exporter": "^4.4|^5.0|^6.0"
3720 | },
3721 | "type": "library",
3722 | "autoload": {
3723 | "files": [
3724 | "Resources/functions.php"
3725 | ],
3726 | "psr-4": {
3727 | "Symfony\\Component\\String\\": ""
3728 | },
3729 | "exclude-from-classmap": [
3730 | "/Tests/"
3731 | ]
3732 | },
3733 | "notification-url": "https://packagist.org/downloads/",
3734 | "license": [
3735 | "MIT"
3736 | ],
3737 | "authors": [
3738 | {
3739 | "name": "Nicolas Grekas",
3740 | "email": "p@tchwork.com"
3741 | },
3742 | {
3743 | "name": "Symfony Community",
3744 | "homepage": "https://symfony.com/contributors"
3745 | }
3746 | ],
3747 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
3748 | "homepage": "https://symfony.com",
3749 | "keywords": [
3750 | "grapheme",
3751 | "i18n",
3752 | "string",
3753 | "unicode",
3754 | "utf-8",
3755 | "utf8"
3756 | ],
3757 | "support": {
3758 | "source": "https://github.com/symfony/string/tree/v5.4.3"
3759 | },
3760 | "funding": [
3761 | {
3762 | "url": "https://symfony.com/sponsor",
3763 | "type": "custom"
3764 | },
3765 | {
3766 | "url": "https://github.com/fabpot",
3767 | "type": "github"
3768 | },
3769 | {
3770 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3771 | "type": "tidelift"
3772 | }
3773 | ],
3774 | "time": "2022-01-02T09:53:40+00:00"
3775 | },
3776 | {
3777 | "name": "thecodingmachine/safe",
3778 | "version": "v1.3.3",
3779 | "source": {
3780 | "type": "git",
3781 | "url": "https://github.com/thecodingmachine/safe.git",
3782 | "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc"
3783 | },
3784 | "dist": {
3785 | "type": "zip",
3786 | "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc",
3787 | "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc",
3788 | "shasum": ""
3789 | },
3790 | "require": {
3791 | "php": ">=7.2"
3792 | },
3793 | "require-dev": {
3794 | "phpstan/phpstan": "^0.12",
3795 | "squizlabs/php_codesniffer": "^3.2",
3796 | "thecodingmachine/phpstan-strict-rules": "^0.12"
3797 | },
3798 | "type": "library",
3799 | "extra": {
3800 | "branch-alias": {
3801 | "dev-master": "0.1-dev"
3802 | }
3803 | },
3804 | "autoload": {
3805 | "files": [
3806 | "deprecated/apc.php",
3807 | "deprecated/libevent.php",
3808 | "deprecated/mssql.php",
3809 | "deprecated/stats.php",
3810 | "lib/special_cases.php",
3811 | "generated/apache.php",
3812 | "generated/apcu.php",
3813 | "generated/array.php",
3814 | "generated/bzip2.php",
3815 | "generated/calendar.php",
3816 | "generated/classobj.php",
3817 | "generated/com.php",
3818 | "generated/cubrid.php",
3819 | "generated/curl.php",
3820 | "generated/datetime.php",
3821 | "generated/dir.php",
3822 | "generated/eio.php",
3823 | "generated/errorfunc.php",
3824 | "generated/exec.php",
3825 | "generated/fileinfo.php",
3826 | "generated/filesystem.php",
3827 | "generated/filter.php",
3828 | "generated/fpm.php",
3829 | "generated/ftp.php",
3830 | "generated/funchand.php",
3831 | "generated/gmp.php",
3832 | "generated/gnupg.php",
3833 | "generated/hash.php",
3834 | "generated/ibase.php",
3835 | "generated/ibmDb2.php",
3836 | "generated/iconv.php",
3837 | "generated/image.php",
3838 | "generated/imap.php",
3839 | "generated/info.php",
3840 | "generated/ingres-ii.php",
3841 | "generated/inotify.php",
3842 | "generated/json.php",
3843 | "generated/ldap.php",
3844 | "generated/libxml.php",
3845 | "generated/lzf.php",
3846 | "generated/mailparse.php",
3847 | "generated/mbstring.php",
3848 | "generated/misc.php",
3849 | "generated/msql.php",
3850 | "generated/mysql.php",
3851 | "generated/mysqli.php",
3852 | "generated/mysqlndMs.php",
3853 | "generated/mysqlndQc.php",
3854 | "generated/network.php",
3855 | "generated/oci8.php",
3856 | "generated/opcache.php",
3857 | "generated/openssl.php",
3858 | "generated/outcontrol.php",
3859 | "generated/password.php",
3860 | "generated/pcntl.php",
3861 | "generated/pcre.php",
3862 | "generated/pdf.php",
3863 | "generated/pgsql.php",
3864 | "generated/posix.php",
3865 | "generated/ps.php",
3866 | "generated/pspell.php",
3867 | "generated/readline.php",
3868 | "generated/rpminfo.php",
3869 | "generated/rrd.php",
3870 | "generated/sem.php",
3871 | "generated/session.php",
3872 | "generated/shmop.php",
3873 | "generated/simplexml.php",
3874 | "generated/sockets.php",
3875 | "generated/sodium.php",
3876 | "generated/solr.php",
3877 | "generated/spl.php",
3878 | "generated/sqlsrv.php",
3879 | "generated/ssdeep.php",
3880 | "generated/ssh2.php",
3881 | "generated/stream.php",
3882 | "generated/strings.php",
3883 | "generated/swoole.php",
3884 | "generated/uodbc.php",
3885 | "generated/uopz.php",
3886 | "generated/url.php",
3887 | "generated/var.php",
3888 | "generated/xdiff.php",
3889 | "generated/xml.php",
3890 | "generated/xmlrpc.php",
3891 | "generated/yaml.php",
3892 | "generated/yaz.php",
3893 | "generated/zip.php",
3894 | "generated/zlib.php"
3895 | ],
3896 | "psr-4": {
3897 | "Safe\\": [
3898 | "lib/",
3899 | "deprecated/",
3900 | "generated/"
3901 | ]
3902 | }
3903 | },
3904 | "notification-url": "https://packagist.org/downloads/",
3905 | "license": [
3906 | "MIT"
3907 | ],
3908 | "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
3909 | "support": {
3910 | "issues": "https://github.com/thecodingmachine/safe/issues",
3911 | "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3"
3912 | },
3913 | "time": "2020-10-28T17:51:34+00:00"
3914 | },
3915 | {
3916 | "name": "theseer/tokenizer",
3917 | "version": "1.2.1",
3918 | "source": {
3919 | "type": "git",
3920 | "url": "https://github.com/theseer/tokenizer.git",
3921 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
3922 | },
3923 | "dist": {
3924 | "type": "zip",
3925 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
3926 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
3927 | "shasum": ""
3928 | },
3929 | "require": {
3930 | "ext-dom": "*",
3931 | "ext-tokenizer": "*",
3932 | "ext-xmlwriter": "*",
3933 | "php": "^7.2 || ^8.0"
3934 | },
3935 | "type": "library",
3936 | "autoload": {
3937 | "classmap": [
3938 | "src/"
3939 | ]
3940 | },
3941 | "notification-url": "https://packagist.org/downloads/",
3942 | "license": [
3943 | "BSD-3-Clause"
3944 | ],
3945 | "authors": [
3946 | {
3947 | "name": "Arne Blankerts",
3948 | "email": "arne@blankerts.de",
3949 | "role": "Developer"
3950 | }
3951 | ],
3952 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
3953 | "support": {
3954 | "issues": "https://github.com/theseer/tokenizer/issues",
3955 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
3956 | },
3957 | "funding": [
3958 | {
3959 | "url": "https://github.com/theseer",
3960 | "type": "github"
3961 | }
3962 | ],
3963 | "time": "2021-07-28T10:34:58+00:00"
3964 | },
3965 | {
3966 | "name": "webmozart/assert",
3967 | "version": "1.10.0",
3968 | "source": {
3969 | "type": "git",
3970 | "url": "https://github.com/webmozarts/assert.git",
3971 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
3972 | },
3973 | "dist": {
3974 | "type": "zip",
3975 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
3976 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
3977 | "shasum": ""
3978 | },
3979 | "require": {
3980 | "php": "^7.2 || ^8.0",
3981 | "symfony/polyfill-ctype": "^1.8"
3982 | },
3983 | "conflict": {
3984 | "phpstan/phpstan": "<0.12.20",
3985 | "vimeo/psalm": "<4.6.1 || 4.6.2"
3986 | },
3987 | "require-dev": {
3988 | "phpunit/phpunit": "^8.5.13"
3989 | },
3990 | "type": "library",
3991 | "extra": {
3992 | "branch-alias": {
3993 | "dev-master": "1.10-dev"
3994 | }
3995 | },
3996 | "autoload": {
3997 | "psr-4": {
3998 | "Webmozart\\Assert\\": "src/"
3999 | }
4000 | },
4001 | "notification-url": "https://packagist.org/downloads/",
4002 | "license": [
4003 | "MIT"
4004 | ],
4005 | "authors": [
4006 | {
4007 | "name": "Bernhard Schussek",
4008 | "email": "bschussek@gmail.com"
4009 | }
4010 | ],
4011 | "description": "Assertions to validate method input/output with nice error messages.",
4012 | "keywords": [
4013 | "assert",
4014 | "check",
4015 | "validate"
4016 | ],
4017 | "support": {
4018 | "issues": "https://github.com/webmozarts/assert/issues",
4019 | "source": "https://github.com/webmozarts/assert/tree/1.10.0"
4020 | },
4021 | "time": "2021-03-09T10:59:23+00:00"
4022 | },
4023 | {
4024 | "name": "webmozart/path-util",
4025 | "version": "2.3.0",
4026 | "source": {
4027 | "type": "git",
4028 | "url": "https://github.com/webmozart/path-util.git",
4029 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
4030 | },
4031 | "dist": {
4032 | "type": "zip",
4033 | "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
4034 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
4035 | "shasum": ""
4036 | },
4037 | "require": {
4038 | "php": ">=5.3.3",
4039 | "webmozart/assert": "~1.0"
4040 | },
4041 | "require-dev": {
4042 | "phpunit/phpunit": "^4.6",
4043 | "sebastian/version": "^1.0.1"
4044 | },
4045 | "type": "library",
4046 | "extra": {
4047 | "branch-alias": {
4048 | "dev-master": "2.3-dev"
4049 | }
4050 | },
4051 | "autoload": {
4052 | "psr-4": {
4053 | "Webmozart\\PathUtil\\": "src/"
4054 | }
4055 | },
4056 | "notification-url": "https://packagist.org/downloads/",
4057 | "license": [
4058 | "MIT"
4059 | ],
4060 | "authors": [
4061 | {
4062 | "name": "Bernhard Schussek",
4063 | "email": "bschussek@gmail.com"
4064 | }
4065 | ],
4066 | "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
4067 | "support": {
4068 | "issues": "https://github.com/webmozart/path-util/issues",
4069 | "source": "https://github.com/webmozart/path-util/tree/2.3.0"
4070 | },
4071 | "abandoned": "symfony/filesystem",
4072 | "time": "2015-12-17T08:42:14+00:00"
4073 | }
4074 | ],
4075 | "aliases": [],
4076 | "minimum-stability": "stable",
4077 | "stability-flags": [],
4078 | "prefer-stable": false,
4079 | "prefer-lowest": false,
4080 | "platform": {
4081 | "php": ">=7.3"
4082 | },
4083 | "platform-dev": {
4084 | "ext-xdebug": "*"
4085 | },
4086 | "plugin-api-version": "2.6.0"
4087 | }
4088 |
--------------------------------------------------------------------------------
/infection.json.dist:
--------------------------------------------------------------------------------
1 | {
2 | "source": {
3 | "directories": [
4 | "src"
5 | ]
6 | },
7 | "logs": {
8 | "text": "infection.log"
9 | },
10 | "mutators": {
11 | "@default": true
12 | }
13 | }
--------------------------------------------------------------------------------
/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | tests
7 |
8 |
9 |
10 |
11 | src/
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/Concepts/Random/RandomnessEncoderInterface.php:
--------------------------------------------------------------------------------
1 | randomFloatSource = $randomFloatSource;
19 | }
20 |
21 | public function encode(PositiveNumber $desiredLength): string
22 | {
23 | $out = '';
24 | while (strlen($out) < $desiredLength->getValue()) {
25 | $rand = intval(
26 | floor(
27 | self::ENCODING_LENGTH * $this->randomFloatSource->generate()
28 | )
29 | );
30 | $out = self::ENCODING[$rand] . $out;
31 | }
32 |
33 | return $out;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Concepts/Time/PHPTimeSource.php:
--------------------------------------------------------------------------------
1 | timeSource = $timeSource;
18 | }
19 |
20 | public function encode(PositiveNumber $desiredLength): string
21 | {
22 | $time = $this->timeSource->getTime();
23 | $out = '';
24 | while (strlen($out) < $desiredLength->getValue()) {
25 | $mod = intval($time % self::ENCODING_LENGTH);
26 | $out = self::ENCODING[$mod] . $out;
27 | $time = ($time - $mod) / self::ENCODING_LENGTH;
28 | }
29 |
30 | return $out;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/Ulid.php:
--------------------------------------------------------------------------------
1 | timeEncoder = $timeEncoder;
22 | $this->randomEncoder = $randomEncoder;
23 | }
24 |
25 | public function get(): string
26 | {
27 | return sprintf(
28 | '%s%s',
29 | $this->timeEncoder->encode(new PositiveNumber(10)),
30 | $this->randomEncoder->encode(new PositiveNumber(16))
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/ValueTypes/PositiveNumber.php:
--------------------------------------------------------------------------------
1 | value = $n;
18 | }
19 |
20 | public function getValue(): int
21 | {
22 | return $this->value;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/tests/BaseTest.php:
--------------------------------------------------------------------------------
1 | generate();
34 | $this->assertTrue($rand > 0 && $rand < 1);
35 | }
36 |
37 | public function testNewUlidShouldReturnCorrectLength()
38 | {
39 | $hash = $this->makeUlid(
40 | new PHPTimeSource()
41 | )->get();
42 | $this->assertEquals(26, strlen($hash));
43 | }
44 |
45 | /**
46 | * @dataProvider multipleRunsProvider
47 | */
48 | public function testNewUlidShouldOnlyReturnCharactersInRange()
49 | {
50 | $hash = $this->makeUlid()->get();
51 | $this->assertEquals(26, strlen($hash));
52 | $this->assertMatchesRegularExpression('/^[0-9A-HJKMNP-TV-Z]+$/', $hash);
53 | }
54 |
55 | public function multipleRunsProvider()
56 | {
57 | return array_fill(0, 99, [0]);
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/tests/PositiveNumberTest.php:
--------------------------------------------------------------------------------
1 | assertEquals(0, $output->getValue());
15 | }
16 |
17 | public function testRandomPositiveNumber()
18 | {
19 | $randomPositiveNumber = rand(1, PHP_INT_MAX);
20 | $output = new PositiveNumber($randomPositiveNumber);
21 | $this->assertEquals($randomPositiveNumber, $output->getValue());
22 | }
23 |
24 | public function testAnyNegativeNumber()
25 | {
26 | $randomNegativeNumber = rand(PHP_INT_MIN, -1);
27 | $this->expectException(DomainException::class);
28 | new PositiveNumber($randomNegativeNumber);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/tests/RandomEncoderTest.php:
--------------------------------------------------------------------------------
1 | encode(new PositiveNumber($length));
19 | $this->assertEquals($length, strlen($hash));
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Support/CannedTimeSource.php:
--------------------------------------------------------------------------------
1 | timeSet = $timeSet;
15 | }
16 |
17 | public function getTime(): int
18 | {
19 | return $this->timeSet;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/TimeEncoderTest.php:
--------------------------------------------------------------------------------
1 | getTimeEncoder()->encode(new PositiveNumber(10));
25 | $this->assertEquals("01ARYZ6S41", $hash);
26 | }
27 |
28 | public function testEncodeTimeShouldChangeLengthProperly()
29 | {
30 | $hash = $this->getTimeEncoder()->encode(new PositiveNumber(12));
31 | $this->assertEquals("0001ARYZ6S41", $hash);
32 | }
33 |
34 | public function testEncodeTimeShouldTruncateTimeIfNotLongEnough()
35 | {
36 | $hash = $this->getTimeEncoder()->encode(new PositiveNumber(8));
37 | $this->assertEquals("ARYZ6S41", $hash);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------