PHP code example of grazulex / php-semver-sieve

1. Go to this page and download the library: Download grazulex/php-semver-sieve library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

grazulex / php-semver-sieve example snippets


use Grazulex\SemverSieve\Sieve;
use Grazulex\SemverSieve\Dialects\GenericSemverDialect;

// Create a sieve instance
$sieve = new Sieve(new GenericSemverDialect());

// Simple boolean check
$matches = $sieve->     'normalized_ranges' => ['>=2.0.0-0 <3.0.0-0', '>=1.9.0-0 <2.0.0-rc.1']
//   ]

// PHP/Composer
$composer = new Sieve(new ComposerDialect());
$composer->'1.2.3', ['latest', 'workspace:^1.0']); // → true

// Python/PyPI
$pypi = new Sieve(new PypiDialect());
$pypi->aven->des('v1.2.3', ['v1.2.3', 'v1.2+incompatible']); // → true

use Grazulex\SemverSieve\Dialects\ComposerDialect;
$sieve = new Sieve(new ComposerDialect());

// Composer-specific syntax
$sieve->raints
    '1.2.*'        // Wildcard
]);

use Grazulex\SemverSieve\Dialects\NpmDialect;
$sieve = new Sieve(new NpmDialect());

// npm-specific features
$sieve->pace protocol
    'workspace:^1.0',   // Workspace with range
    '1.2.x',           // X-ranges
    '1.x.x',           // Multi-segment X-ranges
]);

// Special npm tags supported:
// latest, next, alpha, beta, rc, canary, experimental, dev, nightly

use Grazulex\SemverSieve\Dialects\PypiDialect;
$sieve = new Sieve(new PypiDialect());

// PEP 440 compliant syntax
$sieve->constraints
    '!=1.2.4',     // Exclusion
]);

// Supports: dev releases, post releases, epochs, local versions

use Grazulex\SemverSieve\Dialects\RubyGemsDialect;
$sieve = new Sieve(new RubyGemsDialect());

// Ruby-specific pessimistic constraints
$sieve->
]);

use Grazulex\SemverSieve\Dialects\MavenDialect;
$sieve = new Sieve(new MavenDialect());

// Maven version ranges and qualifiers
$sieve->includes('1.2.3-SNAPSHOT', [
    '[1.0,2.0)',        // Range: >= 1.0, < 2.0
    '[1.0,2.0]',        // Range: >= 1.0, <= 2.0
    '(1.0,2.0)',        // Range: > 1.0, < 2.0
    '1.0+',             // Soft 

use Grazulex\SemverSieve\Dialects\NugetDialect;
$sieve = new Sieve(new NugetDialect());

// NuGet 4-segment versions and interval notation
$sieve->      // Any version
]);

use Grazulex\SemverSieve\Dialects\GoModDialect;
$sieve = new Sieve(new GoModDialect());

// Go module versions ( // Incompatible version
]);

// Supports pseudo-versions: v0.0.0-20191109021931-daa7c04131f5

use Grazulex\SemverSieve\Dialects\GenericSemverDialect;
$sieve = new Sieve(new GenericSemverDialect());

// Standards-compliant SemVer 2.0.0
$sieve->// Prerelease versions
]);

use Grazulex\SemverSieve\Configuration\SieveConfiguration;

$config = new SieveConfiguration(
    / Accept "v1.2.3" format
    caseInsensitive: true,         // "RC" vs "rc"
    allowLeadingZeros: false,      // "01.02.03" format
    maxVersionLength: 256          // Security limit
);

$sieve = new Sieve(new GenericSemverDialect(), $config);

// Default: Balanced settings for most use cases
$config = SieveConfiguration::default();

// Strict: Enforce strict SemVer compliance
$config = SieveConfiguration::strict();
// - strictSegments: true
// - allowVPrefix: false  
// - allowLeadingZeros: false

// Lenient: Accept more version formats
$config = SieveConfiguration::lenient();
// - 

use Grazulex\SemverSieve\Contracts\DialectInterface;
use Grazulex\SemverSieve\ValueObjects\ParsedVersion;
use Grazulex\SemverSieve\ValueObjects\ParsedRange;

final class CustomDialect implements DialectInterface
{
    public function parseVersion(string $version, array $options): ParsedVersion
    {
        // Custom version parsing logic
        // Handle your specific version format
    }

    public function parseRange(string $range, array $options): ParsedRange  
    {
        // Custom range parsing logic
        // Handle your specific constraint syntax
    }
    
    public function getName(): string
    {
        return 'custom';
    }
    
    public function getSupportedOperators(): array
    {
        return ['=', '>', '<', '>=', '<=', '~', '^'];
    }
}

$sieve = new Sieve(new CustomDialect());

// Example: Custom calendar versioning dialect
final class CalVerDialect implements DialectInterface
{
    public function parseVersion(string $version, array $options): ParsedVersion
    {
        // Parse versions like: 2023.12, 2024.01.15
        if (preg_match('/^(\d{4})\.(\d{1,2})(?:\.(\d{1,2}))?$/', $version, $matches)) {
            $year = (int) $matches[1];
            $month = (int) $matches[2];
            $day = isset($matches[3]) ? (int) $matches[3] : 1;
            
            return new ParsedVersion($year, $month, $day, [], [], $version);
        }
        
        throw new InvalidArgumentException("Invalid CalVer format: {$version}");
    }
    
    // ... rest of implementation
}

use Grazulex\SemverSieve\Exceptions\{
    InvalidVersionException,
    InvalidRangeException,
    ConfigurationException,
    SemverSieveException
};

try {
    $sieve->rsion: " . $context['version'];
} catch (InvalidRangeException $e) {
    echo "Invalid range: " . $e->getMessage();
} catch (ConfigurationException $e) {
    echo "Configuration error: " . $e->getMessage();
} catch (SemverSieveException $e) {
    // Catch-all for any sieve-related errors
    echo "Sieve error: " . $e->getMessage();
}

// Version parsing: ~0.1ms per version
// Range evaluation: ~0.05ms per constraint  
// Memory usage: ~2KB per Sieve instance

// Analyze if package versions satisfy constraints
$composer = new Sieve(new ComposerDialect());
$compatible = $composer->
    'python' => new PypiDialect(),
    'java' => new MavenDialect(),
];

foreach ($ecosystems as $name => $dialect) {
    $sieve = new Sieve($dialect);
    $results[$name] = $sieve->

// Filter package versions by compatibility
$npm = new Sieve(new NpmDialect());
$compatibleVersions = array_filter($allVersions, function($version) use ($npm) {
    return $npm->

// Validate release versions against policies
$policy = ['^1.0', '!=1.2.3', '<2.0.0-0']; // No prereleases
$sieve = new Sieve(new GenericSemverDialect());

if (!$sieve->

// Find common version ranges across dependencies
$result1 = $sieve->match('1.5.0', ['^1.0', '>=1.4']);
$result2 = $sieve->match('1.5.0', ['~1.5', '<1.6']);
$intersection = array_intersect($result1['matched_ranges'], $result2['matched_ranges']);

// 1. Create dialect class implementing DialectInterface
final class NewDialect implements DialectInterface { /* ... */ }

// 2. Add comprehensive tests
describe('NewDialect', function () { /* ... */ });

// 3. Update README with dialect documentation
// 4. Add to compatibility matrix
bash
composer