Completed
Push — develop ( 32764c...cb3cfa )
by
unknown
20:26
created
vendor/brianhenryie/strauss/tests/Issues/MozartIssue97Test.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -15,16 +15,16 @@  discard block
 block discarded – undo
15 15
 class MozartIssue97Test extends IntegrationTestCase
16 16
 {
17 17
 
18
-    /**
19
-     * Issue 97. Package named "crewlabs/unsplash" is downloaded to `vendor/crewlabs/unsplash` but their composer.json
20
-     * has the package name as "unsplash/unsplash".
21
-     *
22
-     * "The "/Users/BrianHenryIE/Sites/mozart-97/vendor/unsplash/unsplash/src" directory does not exist."
23
-     */
24
-    public function testCrewlabsUnsplashSucceeds()
25
-    {
26
-
27
-        $composerJsonString = <<<'EOD'
18
+	/**
19
+	 * Issue 97. Package named "crewlabs/unsplash" is downloaded to `vendor/crewlabs/unsplash` but their composer.json
20
+	 * has the package name as "unsplash/unsplash".
21
+	 *
22
+	 * "The "/Users/BrianHenryIE/Sites/mozart-97/vendor/unsplash/unsplash/src" directory does not exist."
23
+	 */
24
+	public function testCrewlabsUnsplashSucceeds()
25
+	{
26
+
27
+		$composerJsonString = <<<'EOD'
28 28
 {
29 29
 	"name": "brianhenryie/mozart-issue-97",
30 30
 	"require": {
@@ -39,19 +39,19 @@  discard block
 block discarded – undo
39 39
 }
40 40
 EOD;
41 41
 
42
-        file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
42
+		file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
43 43
 
44
-        chdir($this->testsWorkingDir);
44
+		chdir($this->testsWorkingDir);
45 45
 
46
-        exec('composer install');
46
+		exec('composer install');
47 47
 
48
-        $inputInterfaceMock = $this->createMock(InputInterface::class);
49
-        $outputInterfaceMock = $this->createMock(OutputInterface::class);
48
+		$inputInterfaceMock = $this->createMock(InputInterface::class);
49
+		$outputInterfaceMock = $this->createMock(OutputInterface::class);
50 50
 
51
-        $mozartCompose = new Compose();
51
+		$mozartCompose = new Compose();
52 52
 
53
-        $result = $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
53
+		$result = $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
54 54
 
55
-        $this->assertEquals(0, $result);
56
-    }
55
+		$this->assertEquals(0, $result);
56
+	}
57 57
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/tests/Issues/MozartIssue48Test.php 1 patch
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -20,52 +20,52 @@
 block discarded – undo
20 20
 class MozartIssue48Test extends IntegrationTestCase
21 21
 {
22 22
 
23
-    /**
24
-     * rubix/tensor
25
-     *
26
-     * Mozart was only processing one of the PSR-4 autoload paths, in which case it was not copying (amongst others)
27
-     * `EigenvalueDecomposition.php` at all. Test for its presence.
28
-     */
29
-    public function testRubixTensorBothPathsPersist()
30
-    {
23
+	/**
24
+	 * rubix/tensor
25
+	 *
26
+	 * Mozart was only processing one of the PSR-4 autoload paths, in which case it was not copying (amongst others)
27
+	 * `EigenvalueDecomposition.php` at all. Test for its presence.
28
+	 */
29
+	public function testRubixTensorBothPathsPersist()
30
+	{
31 31
 
32
-        $composerJsonString = <<<'EOD'
32
+		$composerJsonString = <<<'EOD'
33 33
 {
34 34
     "name": "brianhenryie/mozart-issue-48",
35 35
     "require": { "rubix/tensor": "*" }
36 36
 }
37 37
 EOD;
38 38
 
39
-        file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
39
+		file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
40 40
 
41
-        chdir($this->testsWorkingDir);
41
+		chdir($this->testsWorkingDir);
42 42
 
43
-        exec('composer install');
43
+		exec('composer install');
44 44
 
45
-        $inputInterfaceMock = $this->createMock(InputInterface::class);
46
-        $outputInterfaceMock = $this->createMock(OutputInterface::class);
45
+		$inputInterfaceMock = $this->createMock(InputInterface::class);
46
+		$outputInterfaceMock = $this->createMock(OutputInterface::class);
47 47
 
48
-        $mozartCompose = new Compose();
48
+		$mozartCompose = new Compose();
49 49
 
50
-        $result = $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
50
+		$result = $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
51 51
         
52
-        // EigenvalueDecomposition.php
53
-        // assert file exists somewhere in the tree
52
+		// EigenvalueDecomposition.php
53
+		// assert file exists somewhere in the tree
54 54
 
55
-        // https://stackoverflow.com/questions/17160696/php-glob-scan-in-subfolders-for-a-file
56
-        $rsearch = function ($folder, $pattern) {
57
-            $dir = new \RecursiveDirectoryIterator($folder);
58
-            $ite = new \RecursiveIteratorIterator($dir);
59
-            $files = new \RegexIterator($ite, $pattern, \RegexIterator::GET_MATCH);
60
-            $fileList = array();
61
-            foreach ($files as $file) {
62
-                $fileList = array_merge($fileList, $file);
63
-            }
64
-            return $fileList;
65
-        };
55
+		// https://stackoverflow.com/questions/17160696/php-glob-scan-in-subfolders-for-a-file
56
+		$rsearch = function ($folder, $pattern) {
57
+			$dir = new \RecursiveDirectoryIterator($folder);
58
+			$ite = new \RecursiveIteratorIterator($dir);
59
+			$files = new \RegexIterator($ite, $pattern, \RegexIterator::GET_MATCH);
60
+			$fileList = array();
61
+			foreach ($files as $file) {
62
+				$fileList = array_merge($fileList, $file);
63
+			}
64
+			return $fileList;
65
+		};
66 66
 
67
-        $found = $rsearch($this->testsWorkingDir . 'strauss', '~EigenvalueDecomposition\.php~');
67
+		$found = $rsearch($this->testsWorkingDir . 'strauss', '~EigenvalueDecomposition\.php~');
68 68
 
69
-        $this->assertNotEmpty($found);
70
-    }
69
+		$this->assertNotEmpty($found);
70
+	}
71 71
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/tests/Issues/MozartIssue62Test.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -32,14 +32,14 @@  discard block
 block discarded – undo
32 32
 class MozartIssue62Test extends IntegrationTestCase
33 33
 {
34 34
 
35
-    /**
36
-     * Just confirms `use Guzzle\Common\Collection;` is prefixed.
37
-     */
38
-    public function testGuzzleNamespaceIsPrefixedInS3Client()
39
-    {
40
-        $this->markTestSkipped('Very slow to run');
35
+	/**
36
+	 * Just confirms `use Guzzle\Common\Collection;` is prefixed.
37
+	 */
38
+	public function testGuzzleNamespaceIsPrefixedInS3Client()
39
+	{
40
+		$this->markTestSkipped('Very slow to run');
41 41
 
42
-        $composerJsonString = <<<'EOD'
42
+		$composerJsonString = <<<'EOD'
43 43
 {
44 44
   "name": "brianhenryie/mozart-issue-62",
45 45
   "require": {
@@ -54,21 +54,21 @@  discard block
 block discarded – undo
54 54
 }
55 55
 EOD;
56 56
 
57
-        file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
57
+		file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
58 58
 
59
-        chdir($this->testsWorkingDir);
59
+		chdir($this->testsWorkingDir);
60 60
 
61
-        exec('composer install');
61
+		exec('composer install');
62 62
 
63
-        $inputInterfaceMock = $this->createMock(InputInterface::class);
64
-        $outputInterfaceMock = $this->createMock(OutputInterface::class);
63
+		$inputInterfaceMock = $this->createMock(InputInterface::class);
64
+		$outputInterfaceMock = $this->createMock(OutputInterface::class);
65 65
 
66
-        $mozartCompose = new Compose();
66
+		$mozartCompose = new Compose();
67 67
 
68
-        $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
68
+		$mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
69 69
 
70
-        $phpString = file_get_contents($this->testsWorkingDir .'strauss/aws/aws-sdk-php/src/Aws/S3/S3Client.php');
70
+		$phpString = file_get_contents($this->testsWorkingDir .'strauss/aws/aws-sdk-php/src/Aws/S3/S3Client.php');
71 71
 
72
-        $this->assertStringContainsString('use Strauss\\Guzzle\\Common\\Collection;', $phpString);
73
-    }
72
+		$this->assertStringContainsString('use Strauss\\Guzzle\\Common\\Collection;', $phpString);
73
+	}
74 74
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/tests/Issues/MozartIssue93Test.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -17,21 +17,21 @@  discard block
 block discarded – undo
17 17
  */
18 18
 class MozartIssue93Test extends IntegrationTestCase
19 19
 {
20
-    /**
21
-     * Issue #93 shows a classname being updated inside a class whose namespace has also been updated
22
-     * by Mozart.
23
-     *
24
-     * This is caused by the same files being loaded by both a PSR-4 autolaoder and classmap autoloader.
25
-     * @see https://github.com/katzgrau/KLogger/blob/de2d3ab6777a393a9879e0496ebb8e0644066e3f/composer.json#L24-L29
26
-     *
27
-     * @author BrianHenryIE
28
-     */
29
-    public function test_it_does_not_make_classname_replacement_inside_namespaced_file()
30
-    {
20
+	/**
21
+	 * Issue #93 shows a classname being updated inside a class whose namespace has also been updated
22
+	 * by Mozart.
23
+	 *
24
+	 * This is caused by the same files being loaded by both a PSR-4 autolaoder and classmap autoloader.
25
+	 * @see https://github.com/katzgrau/KLogger/blob/de2d3ab6777a393a9879e0496ebb8e0644066e3f/composer.json#L24-L29
26
+	 *
27
+	 * @author BrianHenryIE
28
+	 */
29
+	public function test_it_does_not_make_classname_replacement_inside_namespaced_file()
30
+	{
31 31
 
32
-        $this->markTestSkipped('Not respecting the pinned commit.');
32
+		$this->markTestSkipped('Not respecting the pinned commit.');
33 33
 
34
-        $composerJsonString = <<<'EOD'
34
+		$composerJsonString = <<<'EOD'
35 35
 {
36 36
 	"name": "brianhenryie/mozart-issue-93",
37 37
 	"repositories": [{
@@ -51,25 +51,25 @@  discard block
 block discarded – undo
51 51
 }
52 52
 EOD;
53 53
 
54
-        file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
54
+		file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
55 55
 
56
-        chdir($this->testsWorkingDir);
56
+		chdir($this->testsWorkingDir);
57 57
 
58
-        exec('composer install');
58
+		exec('composer install');
59 59
 
60
-        $inputInterfaceMock = $this->createMock(InputInterface::class);
61
-        $outputInterfaceMock = $this->createMock(OutputInterface::class);
60
+		$inputInterfaceMock = $this->createMock(InputInterface::class);
61
+		$outputInterfaceMock = $this->createMock(OutputInterface::class);
62 62
 
63
-        $mozartCompose = new Compose();
63
+		$mozartCompose = new Compose();
64 64
 
65
-        $mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
65
+		$mozartCompose->run($inputInterfaceMock, $outputInterfaceMock);
66 66
 
67
-        $php_string = file_get_contents($this->testsWorkingDir .'strauss/brianhenryie/wp-logger/src/class-logger.php');
67
+		$php_string = file_get_contents($this->testsWorkingDir .'strauss/brianhenryie/wp-logger/src/class-logger.php');
68 68
 
69
-        // Confirm problem is gone.
70
-        $this->assertStringNotContainsString('class BrianHenryIE_Strauss_Logger extends', $php_string);
69
+		// Confirm problem is gone.
70
+		$this->assertStringNotContainsString('class BrianHenryIE_Strauss_Logger extends', $php_string);
71 71
 
72
-        // Confirm solution is correct.
73
-        $this->assertStringContainsString('class Logger extends', $php_string);
74
-    }
72
+		// Confirm solution is correct.
73
+		$this->assertStringContainsString('class Logger extends', $php_string);
74
+	}
75 75
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/tests/Issues/MozartIssue43Test.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -21,17 +21,17 @@  discard block
 block discarded – undo
21 21
 class MozartIssue43Test extends IntegrationTestCase
22 22
 {
23 23
 
24
-    /**
25
-     * Issue 43. Needs "aws/aws-sdk-php".
26
-     *
27
-     * League\Flysystem\FileExistsException : File already exists at path:
28
-     * dep_directory/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php
29
-     */
30
-    public function testAwsSdkSucceeds()
31
-    {
32
-        $this->markTestSkipped('Very slow to run');
24
+	/**
25
+	 * Issue 43. Needs "aws/aws-sdk-php".
26
+	 *
27
+	 * League\Flysystem\FileExistsException : File already exists at path:
28
+	 * dep_directory/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php
29
+	 */
30
+	public function testAwsSdkSucceeds()
31
+	{
32
+		$this->markTestSkipped('Very slow to run');
33 33
 
34
-        $composerJsonString = <<<'EOD'
34
+		$composerJsonString = <<<'EOD'
35 35
 {
36 36
 	"name": "brianhenryie/mozart-issue-43",
37 37
 	"require": {
@@ -53,21 +53,21 @@  discard block
 block discarded – undo
53 53
 }
54 54
 EOD;
55 55
 
56
-        file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
56
+		file_put_contents($this->testsWorkingDir . '/composer.json', $composerJsonString);
57 57
 
58
-        chdir($this->testsWorkingDir);
58
+		chdir($this->testsWorkingDir);
59 59
 
60
-        exec('composer install');
60
+		exec('composer install');
61 61
 
62
-        $inputInterfaceMock = $this->createMock(InputInterface::class);
63
-        $outputInterfaceMock = $this->createMock(OutputInterface::class);
62
+		$inputInterfaceMock = $this->createMock(InputInterface::class);
63
+		$outputInterfaceMock = $this->createMock(OutputInterface::class);
64 64
 
65
-        $strauss = new Compose();
65
+		$strauss = new Compose();
66 66
 
67
-        $result = $strauss->run($inputInterfaceMock, $outputInterfaceMock);
67
+		$result = $strauss->run($inputInterfaceMock, $outputInterfaceMock);
68 68
 //
69 69
 //        $this->assertEquals(0, $result);
70 70
 
71
-        $this->assertFileExists($this->testsWorkingDir . '/strauss/aws/aws-sdk-php/src/AWS/Common/Aws.php');
72
-    }
71
+		$this->assertFileExists($this->testsWorkingDir . '/strauss/aws/aws-sdk-php/src/AWS/Common/Aws.php');
72
+	}
73 73
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/src/Copier.php 1 patch
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -19,72 +19,72 @@
 block discarded – undo
19 19
 
20 20
 class Copier
21 21
 {
22
-    /**
23
-     * The only path variable with a leading slash.
24
-     * All directories in project end with a slash.
25
-     *
26
-     * @var string
27
-     */
28
-    protected string $workingDir;
29
-
30
-    protected string $targetDir;
31
-
32
-    protected array $filepaths;
33
-
34
-    /** @var Filesystem */
35
-    protected Filesystem $filesystem;
36
-
37
-    /**
38
-     * Copier constructor.
39
-     * @param array<string, ComposerPackage> $filepaths
40
-     * @param string $workingDir
41
-     * @param string $relativeTargetDir
42
-     */
43
-    public function __construct(array $filepaths, string $workingDir, string $relativeTargetDir)
44
-    {
45
-        $this->filepaths = array_keys($filepaths);
46
-
47
-        $this->workingDir = $workingDir;
48
-
49
-        $this->targetDir = $relativeTargetDir;
50
-
51
-        $this->filesystem = new Filesystem(new Local($this->workingDir));
52
-    }
53
-
54
-    /**
55
-     * If the target dir does not exist, create it.
56
-     * If it already exists, delete any files we're about to copy.
57
-     *
58
-     * @return void
59
-     */
60
-    public function prepareTarget(): void
61
-    {
62
-        if (! $this->filesystem->has($this->targetDir)) {
63
-            $this->filesystem->createDir($this->targetDir);
64
-        } else {
65
-            foreach ($this->filepaths as $vendorRelativeFilepath) {
66
-                $projectRelativeFilepath = $this->targetDir . $vendorRelativeFilepath;
67
-
68
-                if ($this->filesystem->has($projectRelativeFilepath)) {
69
-                    $this->filesystem->delete($projectRelativeFilepath);
70
-                }
71
-            }
72
-        }
73
-    }
74
-
75
-
76
-    /**
77
-     *
78
-     */
79
-    public function copy(): void
80
-    {
81
-
82
-        foreach ($this->filepaths as $relativeFilepath) {
83
-            $sourceFileRelativePath = 'vendor' . DIRECTORY_SEPARATOR . $relativeFilepath;
84
-
85
-            $targetFileRelativePath = $this->targetDir . $relativeFilepath;
86
-
87
-            $this->filesystem->copy($sourceFileRelativePath, $targetFileRelativePath);
88
-        }
89
-    }
22
+	/**
23
+	 * The only path variable with a leading slash.
24
+	 * All directories in project end with a slash.
25
+	 *
26
+	 * @var string
27
+	 */
28
+	protected string $workingDir;
29
+
30
+	protected string $targetDir;
31
+
32
+	protected array $filepaths;
33
+
34
+	/** @var Filesystem */
35
+	protected Filesystem $filesystem;
36
+
37
+	/**
38
+	 * Copier constructor.
39
+	 * @param array<string, ComposerPackage> $filepaths
40
+	 * @param string $workingDir
41
+	 * @param string $relativeTargetDir
42
+	 */
43
+	public function __construct(array $filepaths, string $workingDir, string $relativeTargetDir)
44
+	{
45
+		$this->filepaths = array_keys($filepaths);
46
+
47
+		$this->workingDir = $workingDir;
48
+
49
+		$this->targetDir = $relativeTargetDir;
50
+
51
+		$this->filesystem = new Filesystem(new Local($this->workingDir));
52
+	}
53
+
54
+	/**
55
+	 * If the target dir does not exist, create it.
56
+	 * If it already exists, delete any files we're about to copy.
57
+	 *
58
+	 * @return void
59
+	 */
60
+	public function prepareTarget(): void
61
+	{
62
+		if (! $this->filesystem->has($this->targetDir)) {
63
+			$this->filesystem->createDir($this->targetDir);
64
+		} else {
65
+			foreach ($this->filepaths as $vendorRelativeFilepath) {
66
+				$projectRelativeFilepath = $this->targetDir . $vendorRelativeFilepath;
67
+
68
+				if ($this->filesystem->has($projectRelativeFilepath)) {
69
+					$this->filesystem->delete($projectRelativeFilepath);
70
+				}
71
+			}
72
+		}
73
+	}
74
+
75
+
76
+	/**
77
+	 *
78
+	 */
79
+	public function copy(): void
80
+	{
81
+
82
+		foreach ($this->filepaths as $relativeFilepath) {
83
+			$sourceFileRelativePath = 'vendor' . DIRECTORY_SEPARATOR . $relativeFilepath;
84
+
85
+			$targetFileRelativePath = $this->targetDir . $relativeFilepath;
86
+
87
+			$this->filesystem->copy($sourceFileRelativePath, $targetFileRelativePath);
88
+		}
89
+	}
90 90
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/src/Composer/Extra/StraussConfig.php 1 patch
Indentation   +392 added lines, -392 removed lines patch added patch discarded remove patch
@@ -12,396 +12,396 @@
 block discarded – undo
12 12
 
13 13
 class StraussConfig
14 14
 {
15
-    /**
16
-     * The output directory.
17
-     *
18
-     * Probably `strauss/` or `src/strauss/`.
19
-     *
20
-     * @var string
21
-     */
22
-    protected $targetDirectory = 'strauss';
23
-
24
-    /**
25
-     * `namespacePrefix` is the prefix to be given to any namespaces.
26
-     * Presumably this will take the form `My_Project_Namespace\dep_directory`.
27
-     *
28
-     * @link https://www.php-fig.org/psr/psr-4/
29
-     *
30
-     * @var string
31
-     */
32
-    protected $namespacePrefix;
33
-
34
-    /**
35
-     * @var string
36
-     */
37
-    protected $classmapPrefix;
38
-
39
-    /**
40
-     * Packages to copy and (maybe) prefix.
41
-     *
42
-     * If this is empty, the "requires" list in the project composer.json is used.
43
-     *
44
-     * @var array
45
-     */
46
-    protected array $packages = [];
47
-
48
-    // Back-compatibility with Mozart.
49
-    private array $excludePackages;
50
-
51
-    /**
52
-     * @var array{packages?: string[], namespaces?: string[], filePatterns?: string[]}
53
-     */
54
-    protected array $excludeFromCopy = array();
55
-
56
-    /**
57
-     * @var array{packages?: string[], namespaces?: string[], filePatterns?: string[]}
58
-     */
59
-    protected array $excludeFromPrefix = array('filePatterns'=>array('/^psr.*$/'));
60
-
61
-
62
-    /**
63
-     * An array of autoload keys to replace packages' existing autoload key.
64
-     *
65
-     * e.g. when
66
-     * * A package has no autoloader
67
-     * * A package specified both a PSR-4 and a classmap but only needs one
68
-     * ...
69
-     *
70
-     * @var array
71
-     */
72
-    protected $overrideAutoload = [];
73
-
74
-    /**
75
-     * After completing `strauss compose` should the source files be deleted?
76
-     * This does not affect symlinked directories.
77
-     *
78
-     * @var bool
79
-     */
80
-    protected $deleteVendorFiles = false;
81
-
82
-    protected bool $classmapOutput;
83
-
84
-    protected array $namespaceReplacementPatterns = array();
85
-
86
-
87
-    /**
88
-     * Read any existing Mozart config.
89
-     * Overwrite it with any Strauss config.
90
-     * Provide sensible defaults.
91
-     *
92
-     * @throws Exception
93
-     */
94
-    public function __construct(Composer $composer)
95
-    {
96
-
97
-        $configExtraSettings = null;
98
-
99
-        // Backwards compatibility with Mozart.
100
-        if (isset($composer->getPackage()->getExtra()['mozart'])) {
101
-            $configExtraSettings = (object)$composer->getPackage()->getExtra()['mozart'];
102
-
103
-            // Default setting for Mozart.
104
-            $this->setDeleteVendorFiles(true);
105
-        }
106
-
107
-        if (isset($composer->getPackage()->getExtra()['strauss'])) {
108
-            $configExtraSettings = (object)$composer->getPackage()->getExtra()['strauss'];
109
-        }
110
-
111
-        if (!is_null($configExtraSettings)) {
112
-            $mapper = (new JsonMapperFactory())->bestFit();
113
-
114
-            $rename = new Rename();
115
-            $rename->addMapping(StraussConfig::class, 'dep_directory', 'targetDirectory');
116
-            $rename->addMapping(StraussConfig::class, 'dep_namespace', 'namespacePrefix');
117
-
118
-            $rename->addMapping(StraussConfig::class, 'exclude_packages', 'excludePackages');
119
-            $rename->addMapping(StraussConfig::class, 'delete_vendor_directories', 'deleteVendorFiles');
120
-
121
-            $mapper->unshift($rename);
122
-            $mapper->push(new \JsonMapper\Middleware\CaseConversion(
123
-                \JsonMapper\Enums\TextNotation::UNDERSCORE(),
124
-                \JsonMapper\Enums\TextNotation::CAMEL_CASE()
125
-            ));
126
-
127
-            $mapper->mapObject($configExtraSettings, $this);
128
-        }
129
-
130
-        // Defaults.
131
-        // * Use PSR-4 autoloader key
132
-        // * Use PSR-0 autoloader key
133
-        // * Use the package name
134
-        if (! isset($this->namespacePrefix)) {
135
-            if (isset($composer->getPackage()->getAutoload()['psr-4'])) {
136
-                $this->setNamespacePrefix(array_key_first($composer->getPackage()->getAutoload()['psr-4']));
137
-            } elseif (isset($composer->getPackage()->getAutoload()['psr-0'])) {
138
-                $this->setNamespacePrefix(array_key_first($composer->getPackage()->getAutoload()['psr-0']));
139
-            } elseif ('__root__' !== $composer->getPackage()->getName()) {
140
-                $packageName = $composer->getPackage()->getName();
141
-                $namespacePrefix = preg_replace('/[^\w\/]+/', '_', $packageName);
142
-                $namespacePrefix = str_replace('/', '\\', $namespacePrefix) . '\\';
143
-                $namespacePrefix = preg_replace_callback('/(?<=^|_|\\\\)[a-z]/', function ($match) {
144
-                    return strtoupper($match[0]);
145
-                }, $namespacePrefix);
146
-                $this->setNamespacePrefix($namespacePrefix);
147
-            } elseif (isset($this->classmapPrefix)) {
148
-                $namespacePrefix = rtrim($this->getClassmapPrefix(), '_');
149
-                $this->setNamespacePrefix($namespacePrefix);
150
-            }
151
-        }
152
-
153
-        if (! isset($this->classmapPrefix)) {
154
-            if (isset($composer->getPackage()->getAutoload()['psr-4'])) {
155
-                $autoloadKey = array_key_first($composer->getPackage()->getAutoload()['psr-4']);
156
-                $classmapPrefix = str_replace("\\", "_", $autoloadKey);
157
-                $this->setClassmapPrefix($classmapPrefix);
158
-            } elseif (isset($composer->getPackage()->getAutoload()['psr-0'])) {
159
-                $autoloadKey = array_key_first($composer->getPackage()->getAutoload()['psr-0']);
160
-                $classmapPrefix = str_replace("\\", "_", $autoloadKey);
161
-                $this->setClassmapPrefix($classmapPrefix);
162
-            } elseif ('__root__' !== $composer->getPackage()->getName()) {
163
-                $packageName = $composer->getPackage()->getName();
164
-                $classmapPrefix = preg_replace('/[^\w\/]+/', '_', $packageName);
165
-                $classmapPrefix = str_replace('/', '\\', $classmapPrefix);
166
-                // Uppercase the first letter of each word.
167
-                $classmapPrefix = preg_replace_callback('/(?<=^|_|\\\\)[a-z]/', function ($match) {
168
-                    return strtoupper($match[0]);
169
-                }, $classmapPrefix);
170
-                $classmapPrefix = str_replace("\\", "_", $classmapPrefix);
171
-                $this->setClassmapPrefix($classmapPrefix);
172
-            } elseif (isset($this->namespacePrefix)) {
173
-                $classmapPrefix = preg_replace('/[^\w\/]+/', '_', $this->getNamespacePrefix());
174
-                $classmapPrefix = rtrim($classmapPrefix, '_') . '_';
175
-                $this->setClassmapPrefix($classmapPrefix);
176
-            }
177
-        }
178
-
179
-        if (!isset($this->namespacePrefix) || !isset($this->classmapPrefix)) {
180
-            throw new Exception('Prefix not set. Please set `namespace_prefix`, `classmap_prefix` in composer.json/extra/strauss.');
181
-        }
182
-
183
-        if (empty($this->packages)) {
184
-            $this->packages = array_map(function (\Composer\Package\Link $element) {
185
-                return $element->getTarget();
186
-            }, $composer->getPackage()->getRequires());
187
-        }
188
-
189
-        // If the bool flag for classmapOutput wasn't set in the Json config.
190
-        if (!isset($this->classmapOutput)) {
191
-            $this->classmapOutput = true;
192
-            // Check each autoloader.
193
-            foreach ($composer->getPackage()->getAutoload() as $autoload) {
194
-                // To see if one of its paths.
195
-                foreach ($autoload as $path) {
196
-                    // Matches the target directory.
197
-                    if (trim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR === $this->getTargetDirectory()) {
198
-                        $this->classmapOutput = false;
199
-                        break 2;
200
-                    }
201
-                }
202
-            }
203
-        }
204
-
205
-        // TODO: Throw an exception if any regex patterns in config are invalid.
206
-        // https://stackoverflow.com/questions/4440626/how-can-i-validate-regex
207
-        // preg_match('~Valid(Regular)Expression~', null) === false);
208
-    }
209
-
210
-    /**
211
-     * `target_directory` will always be returned without a leading slash and with a trailing slash.
212
-     *
213
-     * @return string
214
-     */
215
-    public function getTargetDirectory(): string
216
-    {
217
-        return trim($this->targetDirectory, DIRECTORY_SEPARATOR . '\\/') . DIRECTORY_SEPARATOR;
218
-    }
219
-
220
-    /**
221
-     * @param string $targetDirectory
222
-     */
223
-    public function setTargetDirectory(string $targetDirectory): void
224
-    {
225
-        $this->targetDirectory = trim(
226
-            preg_replace(
227
-                '/[\/\\\\]+/',
228
-                DIRECTORY_SEPARATOR,
229
-                $targetDirectory
230
-            ),
231
-            DIRECTORY_SEPARATOR
232
-        )
233
-            . DIRECTORY_SEPARATOR ;
234
-    }
235
-
236
-    /**
237
-     * @return string
238
-     */
239
-    public function getNamespacePrefix(): string
240
-    {
241
-        return trim($this->namespacePrefix, '\\');
242
-    }
243
-
244
-    /**
245
-     * @param string $namespacePrefix
246
-     */
247
-    public function setNamespacePrefix(string $namespacePrefix): void
248
-    {
249
-        $this->namespacePrefix = $namespacePrefix;
250
-    }
251
-
252
-    /**
253
-     * @return string
254
-     */
255
-    public function getClassmapPrefix(): string
256
-    {
257
-        return $this->classmapPrefix;
258
-    }
259
-
260
-    /**
261
-     * @param string $classmapPrefix
262
-     */
263
-    public function setClassmapPrefix(string $classmapPrefix): void
264
-    {
265
-        $this->classmapPrefix = $classmapPrefix;
266
-    }
267
-
268
-    public function setExcludeFromCopy(array $excludeFromCopy): void
269
-    {
270
-        $this->excludeFromCopy = $excludeFromCopy;
271
-    }
272
-    public function getExcludePackagesFromCopy(): array
273
-    {
274
-        return $this->excludeFromCopy['packages'] ?? array();
275
-    }
276
-
277
-    public function getExcludeNamespacesFromCopy(): array
278
-    {
279
-        return $this->excludeFromCopy['namespaces'] ?? array();
280
-    }
281
-
282
-    public function getExcludeFilePatternsFromCopy(): array
283
-    {
284
-        return $this->excludeFromCopy['filePatterns'] ?? array();
285
-    }
286
-
287
-
288
-    public function setExcludeFromPrefix(array $excludeFromPrefix): void
289
-    {
290
-        $this->excludeFromPrefix = $excludeFromPrefix;
291
-    }
292
-
293
-    /**
294
-     * When prefixing, do not prefix these packages (which have been copied).
295
-     *
296
-     * @var string[]
297
-     */
298
-    public function getExcludePackagesFromPrefixing(): array
299
-    {
300
-        return $this->excludeFromPrefix['packages'] ?? array();
301
-    }
302
-
303
-    public function getExcludeNamespacesFromPrefixing(): array
304
-    {
305
-        return $this->excludeFromPrefix['namespaces'] ?? array();
306
-    }
307
-
308
-    public function getExcludeFilePatternsFromPrefixing(): array
309
-    {
310
-        return $this->excludeFromPrefix['filePatterns'] ?? array();
311
-    }
312
-
313
-
314
-    /**
315
-     * @return array
316
-     */
317
-    public function getOverrideAutoload(): array
318
-    {
319
-        return $this->overrideAutoload;
320
-    }
321
-
322
-    /**
323
-     * @param array $overrideAutoload
324
-     */
325
-    public function setOverrideAutoload(array $overrideAutoload): void
326
-    {
327
-        $this->overrideAutoload = $overrideAutoload;
328
-    }
329
-
330
-    /**
331
-     * @return bool
332
-     */
333
-    public function isDeleteVendorFiles(): bool
334
-    {
335
-        return $this->deleteVendorFiles;
336
-    }
337
-
338
-    /**
339
-     * @param bool $deleteVendorFiles
340
-     */
341
-    public function setDeleteVendorFiles(bool $deleteVendorFiles): void
342
-    {
343
-        $this->deleteVendorFiles = $deleteVendorFiles;
344
-    }
345
-
346
-    /**
347
-     * @return array
348
-     */
349
-    public function getPackages(): array
350
-    {
351
-        return $this->packages;
352
-    }
353
-
354
-    /**
355
-     * @param array $packages
356
-     */
357
-    public function setPackages(array $packages): void
358
-    {
359
-        $this->packages = $packages;
360
-    }
361
-
362
-    /**
363
-     * @return bool
364
-     */
365
-    public function isClassmapOutput(): bool
366
-    {
367
-        return $this->classmapOutput;
368
-    }
369
-
370
-    /**
371
-     * @param bool $classmapOutput
372
-     */
373
-    public function setClassmapOutput(bool $classmapOutput): void
374
-    {
375
-        $this->classmapOutput = $classmapOutput;
376
-    }
377
-
378
-    /**
379
-     * Backwards compatability with Mozart.
380
-     */
381
-    public function setExcludePackages(array $excludePackages)
382
-    {
383
-
384
-        if (! isset($this->excludeFromPrefix)) {
385
-            $this->excludeFromPrefix = array();
386
-        }
387
-
388
-        $this->excludeFromPrefix['packages'] = $excludePackages;
389
-    }
390
-
391
-
392
-    /**
393
-     * @return array
394
-     */
395
-    public function getNamespaceReplacementPatterns(): array
396
-    {
397
-        return $this->namespaceReplacementPatterns;
398
-    }
399
-
400
-    /**
401
-     * @param array $namespaceReplacementPatterns
402
-     */
403
-    public function setNamespaceReplacementPatterns(array $namespaceReplacementPatterns): void
404
-    {
405
-        $this->namespaceReplacementPatterns = $namespaceReplacementPatterns;
406
-    }
15
+	/**
16
+	 * The output directory.
17
+	 *
18
+	 * Probably `strauss/` or `src/strauss/`.
19
+	 *
20
+	 * @var string
21
+	 */
22
+	protected $targetDirectory = 'strauss';
23
+
24
+	/**
25
+	 * `namespacePrefix` is the prefix to be given to any namespaces.
26
+	 * Presumably this will take the form `My_Project_Namespace\dep_directory`.
27
+	 *
28
+	 * @link https://www.php-fig.org/psr/psr-4/
29
+	 *
30
+	 * @var string
31
+	 */
32
+	protected $namespacePrefix;
33
+
34
+	/**
35
+	 * @var string
36
+	 */
37
+	protected $classmapPrefix;
38
+
39
+	/**
40
+	 * Packages to copy and (maybe) prefix.
41
+	 *
42
+	 * If this is empty, the "requires" list in the project composer.json is used.
43
+	 *
44
+	 * @var array
45
+	 */
46
+	protected array $packages = [];
47
+
48
+	// Back-compatibility with Mozart.
49
+	private array $excludePackages;
50
+
51
+	/**
52
+	 * @var array{packages?: string[], namespaces?: string[], filePatterns?: string[]}
53
+	 */
54
+	protected array $excludeFromCopy = array();
55
+
56
+	/**
57
+	 * @var array{packages?: string[], namespaces?: string[], filePatterns?: string[]}
58
+	 */
59
+	protected array $excludeFromPrefix = array('filePatterns'=>array('/^psr.*$/'));
60
+
61
+
62
+	/**
63
+	 * An array of autoload keys to replace packages' existing autoload key.
64
+	 *
65
+	 * e.g. when
66
+	 * * A package has no autoloader
67
+	 * * A package specified both a PSR-4 and a classmap but only needs one
68
+	 * ...
69
+	 *
70
+	 * @var array
71
+	 */
72
+	protected $overrideAutoload = [];
73
+
74
+	/**
75
+	 * After completing `strauss compose` should the source files be deleted?
76
+	 * This does not affect symlinked directories.
77
+	 *
78
+	 * @var bool
79
+	 */
80
+	protected $deleteVendorFiles = false;
81
+
82
+	protected bool $classmapOutput;
83
+
84
+	protected array $namespaceReplacementPatterns = array();
85
+
86
+
87
+	/**
88
+	 * Read any existing Mozart config.
89
+	 * Overwrite it with any Strauss config.
90
+	 * Provide sensible defaults.
91
+	 *
92
+	 * @throws Exception
93
+	 */
94
+	public function __construct(Composer $composer)
95
+	{
96
+
97
+		$configExtraSettings = null;
98
+
99
+		// Backwards compatibility with Mozart.
100
+		if (isset($composer->getPackage()->getExtra()['mozart'])) {
101
+			$configExtraSettings = (object)$composer->getPackage()->getExtra()['mozart'];
102
+
103
+			// Default setting for Mozart.
104
+			$this->setDeleteVendorFiles(true);
105
+		}
106
+
107
+		if (isset($composer->getPackage()->getExtra()['strauss'])) {
108
+			$configExtraSettings = (object)$composer->getPackage()->getExtra()['strauss'];
109
+		}
110
+
111
+		if (!is_null($configExtraSettings)) {
112
+			$mapper = (new JsonMapperFactory())->bestFit();
113
+
114
+			$rename = new Rename();
115
+			$rename->addMapping(StraussConfig::class, 'dep_directory', 'targetDirectory');
116
+			$rename->addMapping(StraussConfig::class, 'dep_namespace', 'namespacePrefix');
117
+
118
+			$rename->addMapping(StraussConfig::class, 'exclude_packages', 'excludePackages');
119
+			$rename->addMapping(StraussConfig::class, 'delete_vendor_directories', 'deleteVendorFiles');
120
+
121
+			$mapper->unshift($rename);
122
+			$mapper->push(new \JsonMapper\Middleware\CaseConversion(
123
+				\JsonMapper\Enums\TextNotation::UNDERSCORE(),
124
+				\JsonMapper\Enums\TextNotation::CAMEL_CASE()
125
+			));
126
+
127
+			$mapper->mapObject($configExtraSettings, $this);
128
+		}
129
+
130
+		// Defaults.
131
+		// * Use PSR-4 autoloader key
132
+		// * Use PSR-0 autoloader key
133
+		// * Use the package name
134
+		if (! isset($this->namespacePrefix)) {
135
+			if (isset($composer->getPackage()->getAutoload()['psr-4'])) {
136
+				$this->setNamespacePrefix(array_key_first($composer->getPackage()->getAutoload()['psr-4']));
137
+			} elseif (isset($composer->getPackage()->getAutoload()['psr-0'])) {
138
+				$this->setNamespacePrefix(array_key_first($composer->getPackage()->getAutoload()['psr-0']));
139
+			} elseif ('__root__' !== $composer->getPackage()->getName()) {
140
+				$packageName = $composer->getPackage()->getName();
141
+				$namespacePrefix = preg_replace('/[^\w\/]+/', '_', $packageName);
142
+				$namespacePrefix = str_replace('/', '\\', $namespacePrefix) . '\\';
143
+				$namespacePrefix = preg_replace_callback('/(?<=^|_|\\\\)[a-z]/', function ($match) {
144
+					return strtoupper($match[0]);
145
+				}, $namespacePrefix);
146
+				$this->setNamespacePrefix($namespacePrefix);
147
+			} elseif (isset($this->classmapPrefix)) {
148
+				$namespacePrefix = rtrim($this->getClassmapPrefix(), '_');
149
+				$this->setNamespacePrefix($namespacePrefix);
150
+			}
151
+		}
152
+
153
+		if (! isset($this->classmapPrefix)) {
154
+			if (isset($composer->getPackage()->getAutoload()['psr-4'])) {
155
+				$autoloadKey = array_key_first($composer->getPackage()->getAutoload()['psr-4']);
156
+				$classmapPrefix = str_replace("\\", "_", $autoloadKey);
157
+				$this->setClassmapPrefix($classmapPrefix);
158
+			} elseif (isset($composer->getPackage()->getAutoload()['psr-0'])) {
159
+				$autoloadKey = array_key_first($composer->getPackage()->getAutoload()['psr-0']);
160
+				$classmapPrefix = str_replace("\\", "_", $autoloadKey);
161
+				$this->setClassmapPrefix($classmapPrefix);
162
+			} elseif ('__root__' !== $composer->getPackage()->getName()) {
163
+				$packageName = $composer->getPackage()->getName();
164
+				$classmapPrefix = preg_replace('/[^\w\/]+/', '_', $packageName);
165
+				$classmapPrefix = str_replace('/', '\\', $classmapPrefix);
166
+				// Uppercase the first letter of each word.
167
+				$classmapPrefix = preg_replace_callback('/(?<=^|_|\\\\)[a-z]/', function ($match) {
168
+					return strtoupper($match[0]);
169
+				}, $classmapPrefix);
170
+				$classmapPrefix = str_replace("\\", "_", $classmapPrefix);
171
+				$this->setClassmapPrefix($classmapPrefix);
172
+			} elseif (isset($this->namespacePrefix)) {
173
+				$classmapPrefix = preg_replace('/[^\w\/]+/', '_', $this->getNamespacePrefix());
174
+				$classmapPrefix = rtrim($classmapPrefix, '_') . '_';
175
+				$this->setClassmapPrefix($classmapPrefix);
176
+			}
177
+		}
178
+
179
+		if (!isset($this->namespacePrefix) || !isset($this->classmapPrefix)) {
180
+			throw new Exception('Prefix not set. Please set `namespace_prefix`, `classmap_prefix` in composer.json/extra/strauss.');
181
+		}
182
+
183
+		if (empty($this->packages)) {
184
+			$this->packages = array_map(function (\Composer\Package\Link $element) {
185
+				return $element->getTarget();
186
+			}, $composer->getPackage()->getRequires());
187
+		}
188
+
189
+		// If the bool flag for classmapOutput wasn't set in the Json config.
190
+		if (!isset($this->classmapOutput)) {
191
+			$this->classmapOutput = true;
192
+			// Check each autoloader.
193
+			foreach ($composer->getPackage()->getAutoload() as $autoload) {
194
+				// To see if one of its paths.
195
+				foreach ($autoload as $path) {
196
+					// Matches the target directory.
197
+					if (trim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR === $this->getTargetDirectory()) {
198
+						$this->classmapOutput = false;
199
+						break 2;
200
+					}
201
+				}
202
+			}
203
+		}
204
+
205
+		// TODO: Throw an exception if any regex patterns in config are invalid.
206
+		// https://stackoverflow.com/questions/4440626/how-can-i-validate-regex
207
+		// preg_match('~Valid(Regular)Expression~', null) === false);
208
+	}
209
+
210
+	/**
211
+	 * `target_directory` will always be returned without a leading slash and with a trailing slash.
212
+	 *
213
+	 * @return string
214
+	 */
215
+	public function getTargetDirectory(): string
216
+	{
217
+		return trim($this->targetDirectory, DIRECTORY_SEPARATOR . '\\/') . DIRECTORY_SEPARATOR;
218
+	}
219
+
220
+	/**
221
+	 * @param string $targetDirectory
222
+	 */
223
+	public function setTargetDirectory(string $targetDirectory): void
224
+	{
225
+		$this->targetDirectory = trim(
226
+			preg_replace(
227
+				'/[\/\\\\]+/',
228
+				DIRECTORY_SEPARATOR,
229
+				$targetDirectory
230
+			),
231
+			DIRECTORY_SEPARATOR
232
+		)
233
+			. DIRECTORY_SEPARATOR ;
234
+	}
235
+
236
+	/**
237
+	 * @return string
238
+	 */
239
+	public function getNamespacePrefix(): string
240
+	{
241
+		return trim($this->namespacePrefix, '\\');
242
+	}
243
+
244
+	/**
245
+	 * @param string $namespacePrefix
246
+	 */
247
+	public function setNamespacePrefix(string $namespacePrefix): void
248
+	{
249
+		$this->namespacePrefix = $namespacePrefix;
250
+	}
251
+
252
+	/**
253
+	 * @return string
254
+	 */
255
+	public function getClassmapPrefix(): string
256
+	{
257
+		return $this->classmapPrefix;
258
+	}
259
+
260
+	/**
261
+	 * @param string $classmapPrefix
262
+	 */
263
+	public function setClassmapPrefix(string $classmapPrefix): void
264
+	{
265
+		$this->classmapPrefix = $classmapPrefix;
266
+	}
267
+
268
+	public function setExcludeFromCopy(array $excludeFromCopy): void
269
+	{
270
+		$this->excludeFromCopy = $excludeFromCopy;
271
+	}
272
+	public function getExcludePackagesFromCopy(): array
273
+	{
274
+		return $this->excludeFromCopy['packages'] ?? array();
275
+	}
276
+
277
+	public function getExcludeNamespacesFromCopy(): array
278
+	{
279
+		return $this->excludeFromCopy['namespaces'] ?? array();
280
+	}
281
+
282
+	public function getExcludeFilePatternsFromCopy(): array
283
+	{
284
+		return $this->excludeFromCopy['filePatterns'] ?? array();
285
+	}
286
+
287
+
288
+	public function setExcludeFromPrefix(array $excludeFromPrefix): void
289
+	{
290
+		$this->excludeFromPrefix = $excludeFromPrefix;
291
+	}
292
+
293
+	/**
294
+	 * When prefixing, do not prefix these packages (which have been copied).
295
+	 *
296
+	 * @var string[]
297
+	 */
298
+	public function getExcludePackagesFromPrefixing(): array
299
+	{
300
+		return $this->excludeFromPrefix['packages'] ?? array();
301
+	}
302
+
303
+	public function getExcludeNamespacesFromPrefixing(): array
304
+	{
305
+		return $this->excludeFromPrefix['namespaces'] ?? array();
306
+	}
307
+
308
+	public function getExcludeFilePatternsFromPrefixing(): array
309
+	{
310
+		return $this->excludeFromPrefix['filePatterns'] ?? array();
311
+	}
312
+
313
+
314
+	/**
315
+	 * @return array
316
+	 */
317
+	public function getOverrideAutoload(): array
318
+	{
319
+		return $this->overrideAutoload;
320
+	}
321
+
322
+	/**
323
+	 * @param array $overrideAutoload
324
+	 */
325
+	public function setOverrideAutoload(array $overrideAutoload): void
326
+	{
327
+		$this->overrideAutoload = $overrideAutoload;
328
+	}
329
+
330
+	/**
331
+	 * @return bool
332
+	 */
333
+	public function isDeleteVendorFiles(): bool
334
+	{
335
+		return $this->deleteVendorFiles;
336
+	}
337
+
338
+	/**
339
+	 * @param bool $deleteVendorFiles
340
+	 */
341
+	public function setDeleteVendorFiles(bool $deleteVendorFiles): void
342
+	{
343
+		$this->deleteVendorFiles = $deleteVendorFiles;
344
+	}
345
+
346
+	/**
347
+	 * @return array
348
+	 */
349
+	public function getPackages(): array
350
+	{
351
+		return $this->packages;
352
+	}
353
+
354
+	/**
355
+	 * @param array $packages
356
+	 */
357
+	public function setPackages(array $packages): void
358
+	{
359
+		$this->packages = $packages;
360
+	}
361
+
362
+	/**
363
+	 * @return bool
364
+	 */
365
+	public function isClassmapOutput(): bool
366
+	{
367
+		return $this->classmapOutput;
368
+	}
369
+
370
+	/**
371
+	 * @param bool $classmapOutput
372
+	 */
373
+	public function setClassmapOutput(bool $classmapOutput): void
374
+	{
375
+		$this->classmapOutput = $classmapOutput;
376
+	}
377
+
378
+	/**
379
+	 * Backwards compatability with Mozart.
380
+	 */
381
+	public function setExcludePackages(array $excludePackages)
382
+	{
383
+
384
+		if (! isset($this->excludeFromPrefix)) {
385
+			$this->excludeFromPrefix = array();
386
+		}
387
+
388
+		$this->excludeFromPrefix['packages'] = $excludePackages;
389
+	}
390
+
391
+
392
+	/**
393
+	 * @return array
394
+	 */
395
+	public function getNamespaceReplacementPatterns(): array
396
+	{
397
+		return $this->namespaceReplacementPatterns;
398
+	}
399
+
400
+	/**
401
+	 * @param array $namespaceReplacementPatterns
402
+	 */
403
+	public function setNamespaceReplacementPatterns(array $namespaceReplacementPatterns): void
404
+	{
405
+		$this->namespaceReplacementPatterns = $namespaceReplacementPatterns;
406
+	}
407 407
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/src/Composer/ComposerPackage.php 1 patch
Indentation   +130 added lines, -130 removed lines patch added patch discarded remove patch
@@ -13,134 +13,134 @@
 block discarded – undo
13 13
 
14 14
 class ComposerPackage
15 15
 {
16
-    /**
17
-     * The composer.json file as parsed by Composer.
18
-     *
19
-     * @see \Composer\Factory::create
20
-     *
21
-     * @var \Composer\Composer
22
-     */
23
-    protected \Composer\Composer $composer;
24
-
25
-    /**
26
-     * The name of the project in composer.json.
27
-     *
28
-     * e.g. brianhenryie/my-project
29
-     *
30
-     * @var string
31
-     */
32
-    protected string $name;
33
-
34
-    protected string $path;
35
-
36
-    /**
37
-     * The discovered files, classmap, psr0 and psr4 autoload keys discovered (as parsed by Composer).
38
-     *
39
-     * @var array<string, array<string, string>>
40
-     */
41
-    protected array $autoload = [];
42
-
43
-    /**
44
-     * The names in the composer.json's "requires" field (without versions).
45
-     *
46
-     * @var array
47
-     */
48
-    protected array $requiresNames = [];
49
-
50
-    protected string $license;
51
-
52
-    /**
53
-     * Create a PHP object to represent a composer package.
54
-     *
55
-     * @param string $absolutePath The absolute path to the vendor folder with the composer.json "name",
56
-     *          i.e. the domain/package definition, which is the vendor subdir from where the package's
57
-     *          composer.json should be read.
58
-     * @param array $overrideAutoload Optional configuration to replace the package's own autoload definition with
59
-     *                                    another which Strauss can use.
60
-     */
61
-    public function __construct(string $absolutePath, array $overrideAutoload = null)
62
-    {
63
-
64
-        if (is_dir($absolutePath)) {
65
-            $absolutePath = rtrim($absolutePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'composer.json';
66
-        }
67
-
68
-        $composer = Factory::create(new NullIO(), $absolutePath);
69
-
70
-        $this->composer = $composer;
71
-
72
-        $this->name = $composer->getPackage()->getName();
73
-
74
-        $relativePath = null;
75
-
76
-        // TODO: Test on Windows (DIRECTORY_SEPARATOR).
77
-        if (1 === preg_match('/vendor\/(\w*\/\w*)\/composer\.json/', $absolutePath, $output_array)) {
78
-            $relativePath = $output_array[1];
79
-        }
80
-
81
-        $this->path = $relativePath ?? $composer->getPackage()->getName();
82
-
83
-        if (!is_null($overrideAutoload)) {
84
-            $composer->getPackage()->setAutoload($overrideAutoload);
85
-        }
86
-
87
-        $this->autoload = $composer->getPackage()->getAutoload();
88
-
89
-        foreach ($composer->getPackage()->getRequires() as $_name => $packageLink) {
90
-            $this->requiresNames[] = $packageLink->getTarget();
91
-        }
92
-
93
-        // Try to get the license from the package's composer.json, asssume proprietary (all rights reserved!).
94
-        $this->license = !empty($composer->getPackage()->getLicense())
95
-            ? implode(',', $composer->getPackage()->getLicense())
96
-            : 'proprietary?';
97
-    }
98
-
99
-    /**
100
-     * Composer package project name.
101
-     *
102
-     * @return string
103
-     */
104
-    public function getName(): string
105
-    {
106
-        return $this->name;
107
-    }
108
-
109
-    public function getPath(): string
110
-    {
111
-        return $this->path;
112
-    }
113
-
114
-    /**
115
-     *
116
-     * e.g. ['psr-4' => [ 'BrianHenryIE\Project' => 'src' ]]
117
-     *
118
-     * @return array<string, array<int|string, string>>
119
-     */
120
-    public function getAutoload(): array
121
-    {
122
-        return $this->autoload;
123
-    }
124
-
125
-    /**
126
-     * The names of the packages in the composer.json's "requires" field (without version).
127
-     *
128
-     * Excludes PHP, ext-*, since we won't be copying or prefixing them.
129
-     *
130
-     * @return string[]
131
-     */
132
-    public function getRequiresNames(): array
133
-    {
134
-        // Unset PHP, ext-*.
135
-        $removePhpExt = function ($element) {
136
-            return !( 0 === strpos($element, 'ext') || 'php' === $element );
137
-        };
138
-
139
-        return array_filter($this->requiresNames, $removePhpExt);
140
-    }
141
-
142
-    public function getLicense():string
143
-    {
144
-        return $this->license;
145
-    }
16
+	/**
17
+	 * The composer.json file as parsed by Composer.
18
+	 *
19
+	 * @see \Composer\Factory::create
20
+	 *
21
+	 * @var \Composer\Composer
22
+	 */
23
+	protected \Composer\Composer $composer;
24
+
25
+	/**
26
+	 * The name of the project in composer.json.
27
+	 *
28
+	 * e.g. brianhenryie/my-project
29
+	 *
30
+	 * @var string
31
+	 */
32
+	protected string $name;
33
+
34
+	protected string $path;
35
+
36
+	/**
37
+	 * The discovered files, classmap, psr0 and psr4 autoload keys discovered (as parsed by Composer).
38
+	 *
39
+	 * @var array<string, array<string, string>>
40
+	 */
41
+	protected array $autoload = [];
42
+
43
+	/**
44
+	 * The names in the composer.json's "requires" field (without versions).
45
+	 *
46
+	 * @var array
47
+	 */
48
+	protected array $requiresNames = [];
49
+
50
+	protected string $license;
51
+
52
+	/**
53
+	 * Create a PHP object to represent a composer package.
54
+	 *
55
+	 * @param string $absolutePath The absolute path to the vendor folder with the composer.json "name",
56
+	 *          i.e. the domain/package definition, which is the vendor subdir from where the package's
57
+	 *          composer.json should be read.
58
+	 * @param array $overrideAutoload Optional configuration to replace the package's own autoload definition with
59
+	 *                                    another which Strauss can use.
60
+	 */
61
+	public function __construct(string $absolutePath, array $overrideAutoload = null)
62
+	{
63
+
64
+		if (is_dir($absolutePath)) {
65
+			$absolutePath = rtrim($absolutePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'composer.json';
66
+		}
67
+
68
+		$composer = Factory::create(new NullIO(), $absolutePath);
69
+
70
+		$this->composer = $composer;
71
+
72
+		$this->name = $composer->getPackage()->getName();
73
+
74
+		$relativePath = null;
75
+
76
+		// TODO: Test on Windows (DIRECTORY_SEPARATOR).
77
+		if (1 === preg_match('/vendor\/(\w*\/\w*)\/composer\.json/', $absolutePath, $output_array)) {
78
+			$relativePath = $output_array[1];
79
+		}
80
+
81
+		$this->path = $relativePath ?? $composer->getPackage()->getName();
82
+
83
+		if (!is_null($overrideAutoload)) {
84
+			$composer->getPackage()->setAutoload($overrideAutoload);
85
+		}
86
+
87
+		$this->autoload = $composer->getPackage()->getAutoload();
88
+
89
+		foreach ($composer->getPackage()->getRequires() as $_name => $packageLink) {
90
+			$this->requiresNames[] = $packageLink->getTarget();
91
+		}
92
+
93
+		// Try to get the license from the package's composer.json, asssume proprietary (all rights reserved!).
94
+		$this->license = !empty($composer->getPackage()->getLicense())
95
+			? implode(',', $composer->getPackage()->getLicense())
96
+			: 'proprietary?';
97
+	}
98
+
99
+	/**
100
+	 * Composer package project name.
101
+	 *
102
+	 * @return string
103
+	 */
104
+	public function getName(): string
105
+	{
106
+		return $this->name;
107
+	}
108
+
109
+	public function getPath(): string
110
+	{
111
+		return $this->path;
112
+	}
113
+
114
+	/**
115
+	 *
116
+	 * e.g. ['psr-4' => [ 'BrianHenryIE\Project' => 'src' ]]
117
+	 *
118
+	 * @return array<string, array<int|string, string>>
119
+	 */
120
+	public function getAutoload(): array
121
+	{
122
+		return $this->autoload;
123
+	}
124
+
125
+	/**
126
+	 * The names of the packages in the composer.json's "requires" field (without version).
127
+	 *
128
+	 * Excludes PHP, ext-*, since we won't be copying or prefixing them.
129
+	 *
130
+	 * @return string[]
131
+	 */
132
+	public function getRequiresNames(): array
133
+	{
134
+		// Unset PHP, ext-*.
135
+		$removePhpExt = function ($element) {
136
+			return !( 0 === strpos($element, 'ext') || 'php' === $element );
137
+		};
138
+
139
+		return array_filter($this->requiresNames, $removePhpExt);
140
+	}
141
+
142
+	public function getLicense():string
143
+	{
144
+		return $this->license;
145
+	}
146 146
 }
Please login to merge, or discard this patch.
vendor/brianhenryie/strauss/src/Composer/ProjectComposerPackage.php 1 patch
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -9,48 +9,48 @@
 block discarded – undo
9 9
 
10 10
 class ProjectComposerPackage extends ComposerPackage
11 11
 {
12
-    protected string $author;
13
-
14
-    protected string $vendorDirectory;
15
-
16
-    public function __construct(string $absolutePath, array $overrideAutoload = null)
17
-    {
18
-        parent::__construct($absolutePath, $overrideAutoload);
19
-
20
-        $authors = $this->composer->getPackage()->getAuthors();
21
-        if (empty($authors) || !isset($authors[0]['name'])) {
22
-            $this->author = explode("/", $this->name, 2)[0];
23
-        } else {
24
-            $this->author = $authors[0]['name'];
25
-        }
26
-
27
-        $vendorDirectory = $this->composer->getConfig()->get('vendor-dir');
28
-        if (is_string($vendorDirectory)) {
29
-            $vendorDirectory = str_replace($absolutePath, '', (string) $vendorDirectory);
30
-            $this->vendorDirectory = $vendorDirectory;
31
-        } else {
32
-            $this->vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR;
33
-        }
34
-    }
35
-
36
-    /**
37
-     * @return StraussConfig
38
-     * @throws \Exception
39
-     */
40
-    public function getStraussConfig(): StraussConfig
41
-    {
42
-
43
-        return new StraussConfig($this->composer);
44
-    }
45
-
46
-
47
-    public function getAuthor(): string
48
-    {
49
-        return $this->author;
50
-    }
51
-
52
-    public function getVendorDirectory(): string
53
-    {
54
-        return rtrim($this->vendorDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
55
-    }
12
+	protected string $author;
13
+
14
+	protected string $vendorDirectory;
15
+
16
+	public function __construct(string $absolutePath, array $overrideAutoload = null)
17
+	{
18
+		parent::__construct($absolutePath, $overrideAutoload);
19
+
20
+		$authors = $this->composer->getPackage()->getAuthors();
21
+		if (empty($authors) || !isset($authors[0]['name'])) {
22
+			$this->author = explode("/", $this->name, 2)[0];
23
+		} else {
24
+			$this->author = $authors[0]['name'];
25
+		}
26
+
27
+		$vendorDirectory = $this->composer->getConfig()->get('vendor-dir');
28
+		if (is_string($vendorDirectory)) {
29
+			$vendorDirectory = str_replace($absolutePath, '', (string) $vendorDirectory);
30
+			$this->vendorDirectory = $vendorDirectory;
31
+		} else {
32
+			$this->vendorDirectory = 'vendor' . DIRECTORY_SEPARATOR;
33
+		}
34
+	}
35
+
36
+	/**
37
+	 * @return StraussConfig
38
+	 * @throws \Exception
39
+	 */
40
+	public function getStraussConfig(): StraussConfig
41
+	{
42
+
43
+		return new StraussConfig($this->composer);
44
+	}
45
+
46
+
47
+	public function getAuthor(): string
48
+	{
49
+		return $this->author;
50
+	}
51
+
52
+	public function getVendorDirectory(): string
53
+	{
54
+		return rtrim($this->vendorDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
55
+	}
56 56
 }
Please login to merge, or discard this patch.