PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / vendor / typisttech / imposter / src / Transformer.php
surecart / vendor / typisttech / imposter / src Last commit date
ArrayUtil.php 3 years ago Config.php 3 years ago ConfigCollection.php 3 years ago ConfigCollectionFactory.php 3 years ago ConfigCollectionInterface.php 3 years ago ConfigFactory.php 3 years ago ConfigInterface.php 3 years ago Filesystem.php 3 years ago FilesystemInterface.php 3 years ago Imposter.php 3 years ago ImposterFactory.php 3 years ago ImposterInterface.php 3 years ago ProjectConfig.php 3 years ago ProjectConfigInterface.php 3 years ago StringUtil.php 3 years ago Transformer.php 3 years ago TransformerInterface.php 3 years ago
Transformer.php
167 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace TypistTech\Imposter;
6
7 use SplFileInfo;
8
9 class Transformer implements TransformerInterface
10 {
11 /**
12 * @var FilesystemInterface
13 */
14 private $filesystem;
15
16 /**
17 * @var string
18 */
19 private $namespacePrefix;
20
21 /**
22 * Transformer constructor.
23 *
24 * @param string $namespacePrefix
25 * @param FilesystemInterface $filesystem
26 */
27 public function __construct(string $namespacePrefix, FilesystemInterface $filesystem)
28 {
29 $this->namespacePrefix = StringUtil::ensureDoubleBackwardSlash($namespacePrefix);
30 $this->filesystem = $filesystem;
31 }
32
33 /**
34 * Transform a file or directory recursively.
35 *
36 * @todo Skip non-php files.
37 *
38 * @param string $target Path to the target file or directory.
39 *
40 * @return void
41 */
42 public function transform(string $target)
43 {
44 if ($this->filesystem->isFile($target)) {
45 $this->doTransform($target);
46
47 return;
48 }
49
50 $files = $this->filesystem->allFiles($target);
51
52 array_walk($files, function (SplFileInfo $file) {
53 $this->doTransform($file->getRealPath());
54 });
55 }
56
57 /**
58 * @param string $targetFile
59 *
60 * @return void
61 */
62 private function doTransform(string $targetFile)
63 {
64 $this->prefixNamespace($targetFile);
65 $this->prefixUseConst($targetFile);
66 $this->prefixUseFunction($targetFile);
67 $this->prefixUse($targetFile);
68 }
69
70 /**
71 * Prefix namespace at the given path.
72 *
73 * @param string $targetFile
74 *
75 * @return void
76 */
77 private function prefixNamespace(string $targetFile)
78 {
79 $pattern = sprintf(
80 '/(\s+)%1$s\\s+(?!(%2$s)|(Composer(\\\\|;)))/',
81 'namespace',
82 $this->namespacePrefix
83 );
84 $replacement = sprintf('%1$s %2$s', '${1}namespace', $this->namespacePrefix);
85
86 $this->replace($pattern, $replacement, $targetFile);
87 }
88
89 /**
90 * Replace string in the given file.
91 *
92 * @param string $pattern
93 * @param string $replacement
94 * @param string $targetFile
95 *
96 * @return void
97 */
98 private function replace(string $pattern, string $replacement, string $targetFile)
99 {
100 $this->filesystem->put(
101 $targetFile,
102 preg_replace(
103 $pattern,
104 $replacement,
105 $this->filesystem->get($targetFile)
106 )
107 );
108 }
109
110 /**
111 * Prefix `use const` keywords at the given path.
112 *
113 * @param string $targetFile
114 *
115 * @return void
116 */
117 private function prefixUseConst(string $targetFile)
118 {
119 $pattern = sprintf(
120 '/%1$s\\s+(?!(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
121 'use const',
122 $this->namespacePrefix
123 );
124 $replacement = sprintf('%1$s %2$s', 'use const', $this->namespacePrefix);
125
126 $this->replace($pattern, $replacement, $targetFile);
127 }
128
129 /**
130 * Prefix `use function` keywords at the given path.
131 *
132 * @param string $targetFile
133 *
134 * @return void
135 */
136 private function prefixUseFunction(string $targetFile)
137 {
138 $pattern = sprintf(
139 '/%1$s\\s+(?!(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
140 'use function',
141 $this->namespacePrefix
142 );
143 $replacement = sprintf('%1$s %2$s', 'use function', $this->namespacePrefix);
144
145 $this->replace($pattern, $replacement, $targetFile);
146 }
147
148 /**
149 * Prefix `use` keywords at the given path.
150 *
151 * @param string $targetFile
152 *
153 * @return void
154 */
155 private function prefixUse(string $targetFile)
156 {
157 $pattern = sprintf(
158 '/%1$s\\s+(?!(const)|(function)|(%2$s)|(\\\\(?!.*\\\\.*))|(Composer(\\\\|;)|(?!.*\\\\.*)))/',
159 'use',
160 $this->namespacePrefix
161 );
162 $replacement = sprintf('%1$s %2$s', 'use', $this->namespacePrefix);
163
164 $this->replace($pattern, $replacement, $targetFile);
165 }
166 }
167