requtize/semver-converter

将SemVer版本(如Composer包)转换为带操作符的整数版本。帮助管理版本:存储、比较、排序和按条件检索。

0.4.0 2022-08-10 15:24 UTC

This package is auto-updated.

Last update: 2024-09-10 20:07:31 UTC


README

将SemVer版本(如Composer包)转换为带操作符的整数版本。帮助管理版本:存储、比较、排序和按条件检索。

转换器接受与Composer相同的版本,因此您可以使用接受语义版本控制的任何包管理器。

它是如何工作的?

对于每个版本,它使用Composer SemVer解析器来解析版本并使其标准化。然后,对于每个版本,转换器创建由点值拆分的数组。每个值都填充零并从中创建一个长字符串,该字符串被转换为整数。对于每个版本,我们都有一个大整数。

示例

  1. 版本 1.0.5
  2. 使用SemVer标准化: 1.0.5
  3. 拆分: [ 1, 0, 5 ]
  4. 转换为字符串并填充零: [ '001', '000', '005' ]
  5. 连接所有字符串: '001' + '000' + '005'
  6. 转换为整数: (int) '1000005'

结果: '1.0.5' == 1000005

示例

简单版本

$result = (new SemVerConverter)->convert('0.1.0');

// Result
array (size=1)
  0 => 
    array (size=2)
      'from' => 
        array (size=2)
          0 => int 1000000
          1 => string '==' (length=2)
      'to' => 
        array (size=2)
          0 => int 1000000
          1 => string '==' (length=2)

版本之间

$result = (new SemVerConverter)->convert('>= 1.3.0 < 1.7.0');

// Result
array (size=1)
  0 => 
    array (size=2)
      'from' => 
        array (size=2)
          0 => int 1003000
          1 => string '>=' (length=2)
      'to' => 
        array (size=2)
          0 => int 1007000
          1 => string '<' (length=1)

波浪号操作符

$result = (new SemVerConverter)->convert('~1.3');

// Result
array (size=1)
  0 => 
    array (size=2)
      'from' => 
        array (size=2)
          0 => int 1003000
          1 => string '>=' (length=2)
      'to' => 
        array (size=2)
          0 => int 2000000
          1 => string '<' (length=1)

版本或

$result = (new SemVerConverter)->convert('^1.9 || 3.0.*');

// Result
array (size=2)
  0 => 
    array (size=2)
      'from' => 
        array (size=2)
          0 => int 1009000
          1 => string '>=' (length=2)
      'to' => 
        array (size=2)
          0 => int 2000000
          1 => string '<' (length=1)
  1 => 
    array (size=2)
      'from' => 
        array (size=2)
          0 => int 3000000
          1 => string '>=' (length=2)
      'to' => 
        array (size=2)
          0 => int 3001000
          1 => string '<' (length=1)

设置

new SemVerConverter($zeros, $sections);

$zeros

定义每个版本部分的零填充数量。它允许定义结果应该有多长。

$sections

定义需要从输入生成多少个部分。默认为3,Composer SemVer生成4。这也对结果有影响。

许可证

此代码根据MIT许可证授权。