annotate src/Console/InstallCommand.php @ 0:90e38de8f2ba

Initial Commit
author luka
date Wed, 13 Aug 2025 22:17:20 -0400
parents
children ac199a7a8931
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
1 <?php
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
2
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
3 namespace Wizard\Auth\Console;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
4
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
5 use Illuminate\Console\Command;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
6 use Illuminate\Contracts\Console\PromptsForMissingInput;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
7 use Illuminate\Filesystem\Filesystem;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
8 use Illuminate\Support\Arr;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
9 use Illuminate\Support\Str;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
10 use RuntimeException;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
11 use Symfony\Component\Console\Attribute\AsCommand;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
12 use Symfony\Component\Console\Input\InputInterface;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
13 use Symfony\Component\Console\Output\OutputInterface;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
14 use Symfony\Component\Finder\Finder;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
15 use Symfony\Component\Process\PhpExecutableFinder;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
16 use Symfony\Component\Process\Process;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
17
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
18 use function Laravel\Prompts\confirm;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
19 use function Laravel\Prompts\multiselect;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
20 use function Laravel\Prompts\select;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
21
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
22 #[AsCommand(name: 'breeze:install')]
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
23 class InstallCommand extends Command implements PromptsForMissingInput
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
24 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
25 use InstallsBladeStack;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
26
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
27 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
28 * The name and signature of the console command.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
29 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
30 * @var string
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
31 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
32 protected $signature = 'breeze:install {stack : The development stack that should be installed (blade)}';
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
33
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
34 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
35 * The console command description.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
36 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
37 * @var string
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
38 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
39 protected $description = 'Install the Breeze controllers and resources';
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
40
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
41 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
42 * Execute the console command.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
43 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
44 * @return int|null
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
45 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
46 public function handle()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
47 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
48 return $this->installBladeStack();
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
49 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
50
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
51 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
52 * Install Breeze's tests.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
53 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
54 * @return bool
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
55 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
56 protected function installTests()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
57 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
58 (new Filesystem)->ensureDirectoryExists(base_path('tests/Feature'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
59
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
60 $stubStack = match ($this->argument('stack')) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
61 default => 'default',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
62 };
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
63
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
64 (new Filesystem)->copyDirectory(__DIR__.'/../../stubs/'.$stubStack.'/tests/Feature', base_path('tests/Feature'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
65
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
66 return true;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
67 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
68
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
69 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
70 * Install the given middleware names into the application.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
71 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
72 * @param array|string $name
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
73 * @param string $group
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
74 * @param string $modifier
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
75 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
76 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
77 protected function installMiddleware($names, $group = 'web', $modifier = 'append')
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
78 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
79 $bootstrapApp = file_get_contents(base_path('bootstrap/app.php'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
80
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
81 $names = collect(Arr::wrap($names))
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
82 ->filter(fn ($name) => ! Str::contains($bootstrapApp, $name))
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
83 ->whenNotEmpty(function ($names) use ($bootstrapApp, $group, $modifier) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
84 $names = $names->map(fn ($name) => "$name")->implode(','.PHP_EOL.' ');
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
85
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
86 $stubs = [
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
87 '->withMiddleware(function (Middleware $middleware) {',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
88 '->withMiddleware(function (Middleware $middleware): void {',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
89 ];
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
90
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
91 $bootstrapApp = str_replace(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
92 $stubs,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
93 collect($stubs)->transform(fn ($stub) => $stub
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
94 .PHP_EOL." \$middleware->$group($modifier: ["
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
95 .PHP_EOL." $names,"
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
96 .PHP_EOL.' ]);'
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
97 .PHP_EOL
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
98 )->all(),
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
99 $bootstrapApp,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
100 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
101
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
102 file_put_contents(base_path('bootstrap/app.php'), $bootstrapApp);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
103 });
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
104 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
105
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
106 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
107 * Install the given middleware aliases into the application.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
108 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
109 * @param array $aliases
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
110 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
111 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
112 protected function installMiddlewareAliases($aliases)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
113 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
114 $bootstrapApp = file_get_contents(base_path('bootstrap/app.php'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
115
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
116 $aliases = collect($aliases)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
117 ->filter(fn ($alias) => ! Str::contains($bootstrapApp, $alias))
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
118 ->whenNotEmpty(function ($aliases) use ($bootstrapApp) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
119 $aliases = $aliases->map(fn ($name, $alias) => "'$alias' => $name")->implode(','.PHP_EOL.' ');
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
120
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
121 $stubs = [
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
122 '->withMiddleware(function (Middleware $middleware) {',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
123 '->withMiddleware(function (Middleware $middleware): void {',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
124 ];
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
125
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
126 $bootstrapApp = str_replace(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
127 $stubs,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
128 collect($stubs)->transform(fn ($stub) => $stub
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
129 .PHP_EOL.' $middleware->alias(['
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
130 .PHP_EOL." $aliases,"
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
131 .PHP_EOL.' ]);'
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
132 .PHP_EOL
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
133 )->all(),
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
134 $bootstrapApp,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
135 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
136
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
137 file_put_contents(base_path('bootstrap/app.php'), $bootstrapApp);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
138 });
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
139 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
140
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
141 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
142 * Determine if the given Composer package is installed.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
143 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
144 * @param string $package
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
145 * @return bool
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
146 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
147 protected function hasComposerPackage($package)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
148 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
149 $packages = json_decode(file_get_contents(base_path('composer.json')), true);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
150
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
151 return array_key_exists($package, $packages['require'] ?? [])
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
152 || array_key_exists($package, $packages['require-dev'] ?? []);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
153 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
154
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
155 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
156 * Installs the given Composer Packages into the application.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
157 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
158 * @param bool $asDev
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
159 * @return bool
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
160 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
161 protected function requireComposerPackages(array $packages, $asDev = false)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
162 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
163 $composer = $this->option('composer');
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
164
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
165 if ($composer !== 'global') {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
166 $command = ['php', $composer, 'require'];
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
167 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
168
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
169 $command = array_merge(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
170 $command ?? ['composer', 'require'],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
171 $packages,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
172 $asDev ? ['--dev'] : [],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
173 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
174
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
175 return (new Process($command, base_path(), ['COMPOSER_MEMORY_LIMIT' => '-1']))
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
176 ->setTimeout(null)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
177 ->run(function ($type, $output) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
178 $this->output->write($output);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
179 }) === 0;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
180 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
181
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
182 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
183 * Removes the given Composer Packages from the application.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
184 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
185 * @param bool $asDev
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
186 * @return bool
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
187 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
188 protected function removeComposerPackages(array $packages, $asDev = false)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
189 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
190 $composer = $this->option('composer');
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
191
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
192 if ($composer !== 'global') {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
193 $command = ['php', $composer, 'remove'];
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
194 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
195
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
196 $command = array_merge(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
197 $command ?? ['composer', 'remove'],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
198 $packages,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
199 $asDev ? ['--dev'] : [],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
200 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
201
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
202 return (new Process($command, base_path(), ['COMPOSER_MEMORY_LIMIT' => '-1']))
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
203 ->setTimeout(null)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
204 ->run(function ($type, $output) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
205 $this->output->write($output);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
206 }) === 0;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
207 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
208
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
209 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
210 * Update the dependencies in the "package.json" file.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
211 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
212 * @param bool $dev
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
213 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
214 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
215 protected static function updateNodePackages(callable $callback, $dev = true)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
216 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
217 if (! file_exists(base_path('package.json'))) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
218 return;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
219 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
220
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
221 $configurationKey = $dev ? 'devDependencies' : 'dependencies';
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
222
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
223 $packages = json_decode(file_get_contents(base_path('package.json')), true);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
224
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
225 $packages[$configurationKey] = $callback(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
226 array_key_exists($configurationKey, $packages) ? $packages[$configurationKey] : [],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
227 $configurationKey
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
228 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
229
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
230 ksort($packages[$configurationKey]);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
231
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
232 file_put_contents(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
233 base_path('package.json'),
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
234 json_encode($packages, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT).PHP_EOL
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
235 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
236 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
237
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
238 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
239 * Update the scripts in the "package.json" file.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
240 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
241 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
242 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
243 protected static function updateNodeScripts(callable $callback)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
244 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
245 if (! file_exists(base_path('package.json'))) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
246 return;
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
247 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
248
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
249 $content = json_decode(file_get_contents(base_path('package.json')), true);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
250
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
251 $content['scripts'] = $callback(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
252 array_key_exists('scripts', $content) ? $content['scripts'] : []
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
253 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
254
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
255 file_put_contents(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
256 base_path('package.json'),
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
257 json_encode($content, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT).PHP_EOL
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
258 );
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
259 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
260
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
261 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
262 * Delete the "node_modules" directory and remove the associated lock files.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
263 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
264 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
265 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
266 protected static function flushNodeModules()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
267 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
268 tap(new Filesystem, function ($files) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
269 $files->deleteDirectory(base_path('node_modules'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
270
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
271 $files->delete(base_path('pnpm-lock.yaml'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
272 $files->delete(base_path('yarn.lock'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
273 $files->delete(base_path('bun.lock'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
274 $files->delete(base_path('bun.lockb'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
275 $files->delete(base_path('deno.lock'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
276 $files->delete(base_path('package-lock.json'));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
277 });
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
278 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
279
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
280 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
281 * Replace a given string within a given file.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
282 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
283 * @param string $search
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
284 * @param string $replace
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
285 * @param string $path
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
286 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
287 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
288 protected function replaceInFile($search, $replace, $path)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
289 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
290 file_put_contents($path, str_replace($search, $replace, file_get_contents($path)));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
291 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
292
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
293 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
294 * Get the path to the appropriate PHP binary.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
295 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
296 * @return string
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
297 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
298 protected function phpBinary()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
299 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
300 if (function_exists('Illuminate\Support\php_binary')) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
301 return \Illuminate\Support\php_binary();
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
302 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
303
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
304 return (new PhpExecutableFinder)->find(false) ?: 'php';
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
305 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
306
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
307 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
308 * Run the given commands.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
309 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
310 * @param array $commands
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
311 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
312 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
313 protected function runCommands($commands)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
314 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
315 $process = Process::fromShellCommandline(implode(' && ', $commands), null, null, null, null);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
316
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
317 if ('\\' !== DIRECTORY_SEPARATOR && file_exists('/dev/tty') && is_readable('/dev/tty')) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
318 try {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
319 $process->setTty(true);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
320 } catch (RuntimeException $e) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
321 $this->output->writeln(' <bg=yellow;fg=black> WARN </> '.$e->getMessage().PHP_EOL);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
322 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
323 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
324
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
325 $process->run(function ($type, $line) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
326 $this->output->write(' '.$line);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
327 });
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
328 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
329
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
330 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
331 * Remove Tailwind dark classes from the given files.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
332 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
333 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
334 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
335 protected function removeDarkClasses(Finder $finder)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
336 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
337 foreach ($finder as $file) {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
338 file_put_contents($file->getPathname(), preg_replace('/\sdark:[^\s"\']+/', '', $file->getContents()));
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
339 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
340 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
341
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
342 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
343 * Prompt for missing input arguments using the returned questions.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
344 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
345 * @return array
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
346 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
347 protected function promptForMissingArgumentsUsing()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
348 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
349 return [
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
350 'stack' => fn () => select(
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
351 label: 'Which Breeze stack would you like to install?',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
352 options: [
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
353 'blade' => 'Blade',
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
354 ],
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
355 scroll: 6,
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
356 ),
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
357 ];
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
358 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
359
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
360 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
361 * Interact further with the user if they were prompted for missing arguments.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
362 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
363 * @return void
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
364 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
365 protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output)
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
366 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
367 $stack = $input->getArgument('stack');
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
368 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
369
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
370 /**
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
371 * Determine whether the project is already using Pest.
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
372 *
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
373 * @return bool
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
374 */
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
375 protected function isUsingPest()
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
376 {
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
377 return class_exists(\Pest\TestSuite::class);
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
378 }
90e38de8f2ba Initial Commit
luka
parents:
diff changeset
379 }