• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / version-bumper / 12732412099

12 Jan 2025 09:46AM UTC coverage: 78.07% (-10.7%) from 88.745%
12732412099

Pull #17

github

web-flow
Merge 3cfc46d2d into 0b06fcb19
Pull Request #17: [!!!][FEATURE] Introduce config presets

8 of 105 new or added lines in 6 files covered. (7.62%)

4 existing lines in 1 file now uncovered.

623 of 798 relevant lines covered (78.07%)

3.73 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Config/Preset/NpmPackagePreset.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Composer package "eliashaeussler/version-bumper".
7
 *
8
 * Copyright (C) 2024-2025 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace EliasHaeussler\VersionBumper\Config\Preset;
25

26
use EliasHaeussler\VersionBumper\Config;
27
use Symfony\Component\OptionsResolver;
28

29
use function implode;
30
use function sprintf;
31

32
/**
33
 * NpmPackagePreset.
34
 *
35
 * @author Elias Häußler <elias@haeussler.dev>
36
 * @license GPL-3.0-or-later
37
 */
38
final class NpmPackagePreset implements Preset
39
{
40
    /**
41
     * @var array{packageName: string, path: string|null}
42
     */
43
    private array $options;
44

NEW
45
    public function __construct(array $options)
×
46
    {
NEW
47
        $this->options = $this->resolveOptions($options);
×
48
    }
49

NEW
50
    public function getConfig(): Config\VersionBumperConfig
×
51
    {
NEW
52
        $filesToModify = [
×
NEW
53
            new Config\FileToModify(
×
NEW
54
                $this->getPath('package.json'),
×
NEW
55
                [
×
NEW
56
                    new Config\FilePattern('"version": "{%version%}"'),
×
NEW
57
                ],
×
NEW
58
                true,
×
NEW
59
            ),
×
NEW
60
            new Config\FileToModify(
×
NEW
61
                $this->getPath('package-lock.json'),
×
NEW
62
                [
×
NEW
63
                    new Config\FilePattern(
×
NEW
64
                        sprintf(
×
NEW
65
                            '"name": "%s",\s+"version": "{%%version%%}"',
×
NEW
66
                            $this->options['packageName'],
×
NEW
67
                        ),
×
NEW
68
                    ),
×
NEW
69
                ],
×
NEW
70
                true,
×
NEW
71
            ),
×
NEW
72
        ];
×
73

NEW
74
        return new Config\VersionBumperConfig(filesToModify: $filesToModify);
×
75
    }
76

NEW
77
    public static function getIdentifier(): string
×
78
    {
NEW
79
        return 'npm-package';
×
80
    }
81

82
    /**
83
     * @param array<string, mixed> $options
84
     *
85
     * @return array{packageName: string, path: string|null}
86
     */
NEW
87
    private function resolveOptions(array $options): array
×
88
    {
NEW
89
        $optionsResolver = new OptionsResolver\OptionsResolver();
×
NEW
90
        $optionsResolver->define('packageName')
×
NEW
91
            ->allowedTypes('string')
×
NEW
92
            ->required()
×
NEW
93
        ;
×
NEW
94
        $optionsResolver->define('path')
×
NEW
95
            ->allowedTypes('string', 'null')
×
NEW
96
            ->default(null)
×
NEW
97
        ;
×
98

99
        /* @phpstan-ignore return.type */
NEW
100
        return $optionsResolver->resolve($options);
×
101
    }
102

NEW
103
    private function getPath(string $filename): string
×
104
    {
NEW
105
        return implode('/', [$this->options['path'], $filename]);
×
106
    }
107
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc