PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-assets / src / class-semver.php
jetpack / jetpack_vendor / automattic / jetpack-assets / src Last commit date
js 2 months ago class-assets.php 3 weeks ago class-script-data.php 2 weeks ago class-semver.php 2 years ago class-shared-stores-assets.php 2 months ago
class-semver.php
122 lines
1 <?php
2 /**
3 * Simple semver version handling.
4 *
5 * We use this instead of something like `composer/semver` to avoid
6 * plugins needing to include yet-another dependency package. The
7 * amount of code we need here is pretty small.
8 *
9 * We use this instead of PHP's `version_compare()` because that doesn't
10 * handle prerelease versions in the way anyone other than PHP devs would
11 * expect, and silently breaks on various unexpected input.
12 *
13 * @package automattic/jetpack-assets
14 */
15
16 namespace Automattic\Jetpack\Assets;
17
18 use InvalidArgumentException;
19
20 /**
21 * Simple semver version handling.
22 */
23 class Semver {
24 /**
25 * Parse a semver version.
26 *
27 * @param string $version Version.
28 * @return array With components:
29 * - major: (int) Major version.
30 * - minor: (int) Minor version.
31 * - patch: (int) Patch version.
32 * - version: (string) Major.minor.patch.
33 * - prerelease: (string|null) Pre-release string.
34 * - buildinfo: (string|null) Build metadata string.
35 * @throws InvalidArgumentException If the version number is not in a recognized format.
36 */
37 public static function parse( $version ) {
38 // This is slightly looser than the official version from semver.org, in that leading zeros are allowed.
39 if ( ! preg_match( '/^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<prerelease>(?:[0-9a-zA-Z-]+)(?:\.(?:[0-9a-zA-Z-]+))*))?(?:\+(?P<buildinfo>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/', $version, $m ) ) {
40 throw new InvalidArgumentException( "Version number \"$version\" is not in a recognized format." );
41 }
42 $info = array(
43 'major' => (int) $m['major'],
44 'minor' => (int) $m['minor'],
45 'patch' => (int) $m['patch'],
46 'version' => sprintf( '%d.%d.%d', $m['major'], $m['minor'], $m['patch'] ),
47 'prerelease' => isset( $m['prerelease'] ) && '' !== $m['prerelease'] ? $m['prerelease'] : null,
48 'buildinfo' => isset( $m['buildinfo'] ) && '' !== $m['buildinfo'] ? $m['buildinfo'] : null,
49 );
50
51 if ( null !== $info['prerelease'] ) {
52 $sep = '';
53 $prerelease = '';
54 foreach ( explode( '.', $info['prerelease'] ) as $part ) {
55 if ( ctype_digit( $part ) ) {
56 $part = (int) $part;
57 }
58 $prerelease .= $sep . $part;
59 $sep = '.';
60 }
61 $info['prerelease'] = $prerelease;
62 }
63
64 return $info;
65 }
66
67 /**
68 * Compare two version numbers.
69 *
70 * @param string $a First version.
71 * @param string $b Second version.
72 * @return int Less than, equal to, or greater than 0 depending on whether `$a` is less than, equal to, or greater than `$b`.
73 * @throws InvalidArgumentException If the version numbers are not in a recognized format.
74 */
75 public static function compare( $a, $b ) {
76 $aa = self::parse( $a );
77 $bb = self::parse( $b );
78 if ( $aa['major'] !== $bb['major'] ) {
79 return $aa['major'] - $bb['major'];
80 }
81 if ( $aa['minor'] !== $bb['minor'] ) {
82 return $aa['minor'] - $bb['minor'];
83 }
84 if ( $aa['patch'] !== $bb['patch'] ) {
85 return $aa['patch'] - $bb['patch'];
86 }
87
88 if ( null === $aa['prerelease'] ) {
89 return null === $bb['prerelease'] ? 0 : 1;
90 }
91 if ( null === $bb['prerelease'] ) {
92 return -1;
93 }
94
95 $aaa = explode( '.', $aa['prerelease'] );
96 $bbb = explode( '.', $bb['prerelease'] );
97 $al = count( $aaa );
98 $bl = count( $bbb );
99 for ( $i = 0; $i < $al && $i < $bl; $i++ ) {
100 $a = $aaa[ $i ];
101 $b = $bbb[ $i ];
102 if ( ctype_digit( $a ) ) {
103 if ( ctype_digit( $b ) ) {
104 if ( (int) $a !== (int) $b ) {
105 return (int) $a - (int) $b;
106 }
107 } else {
108 return -1;
109 }
110 } elseif ( ctype_digit( $b ) ) {
111 return 1;
112 } else {
113 $tmp = strcmp( $a, $b );
114 if ( 0 !== $tmp ) {
115 return $tmp;
116 }
117 }
118 }
119 return $al - $bl;
120 }
121 }
122