From f313019da18d6e938f7557319ee4fcadc26f0baa Mon Sep 17 00:00:00 2001 From: Mrtn Schndlr Date: Mon, 18 Dec 2023 17:55:43 +0100 Subject: [PATCH] Allowing a custom config_file relative to the project (#30) * Update TailwindInitCommand.php * Update services.php * Update TailwindBuilder.php * Update index.rst * Update TailwindExtension.php * Update TailwindBuilderTest.php * Update TailwindInitCommand.php * Update services.php * Update config/services.php Co-authored-by: Victor Bocharsky * Update TailwindBuilder.php * Update TailwindBuilderTest.php * Update TailwindExtension.php * Update services.php * Update TailwindBuilderTest.php * Update TailwindBuilderTest.php --------- Co-authored-by: Victor Bocharsky --- config/services.php | 2 +- doc/index.rst | 9 +++++++++ src/Command/TailwindInitCommand.php | 8 ++++---- src/DependencyInjection/TailwindExtension.php | 5 +++++ src/TailwindBuilder.php | 8 +++++++- tests/TailwindBuilderTest.php | 10 ++++++++-- 6 files changed, 34 insertions(+), 8 deletions(-) diff --git a/config/services.php b/config/services.php index 54c0ea1..92f6684 100644 --- a/config/services.php +++ b/config/services.php @@ -20,6 +20,7 @@ param('kernel.project_dir').'/var/tailwind', abstract_arg('path to tailwind binary'), abstract_arg('Tailwind binary version'), + abstract_arg('path to Tailwind CSS config file'), ]) ->set('tailwind.command.build', TailwindBuildCommand::class) @@ -31,7 +32,6 @@ ->set('tailwind.command.init', TailwindInitCommand::class) ->args([ service('tailwind.builder'), - param('kernel.project_dir'), ]) ->tag('console.command') diff --git a/doc/index.rst b/doc/index.rst index 5fcbc48..6c44a89 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -129,6 +129,15 @@ directives): symfonycasts_tailwind: input_css: 'assets/styles/other.css' +Another option is the ``config_file`` option, which defaults to ``tailwind.config.js``. +This represents the Tailwind configuration file: + +.. code-block:: yaml + + # config/packages/symfonycasts_tailwind.yaml + symfonycasts_tailwind: + config_file: 'tailwind.config.js' + Using a Different Binary ------------------------ diff --git a/src/Command/TailwindInitCommand.php b/src/Command/TailwindInitCommand.php index 39dbbeb..7e0af32 100644 --- a/src/Command/TailwindInitCommand.php +++ b/src/Command/TailwindInitCommand.php @@ -24,7 +24,6 @@ class TailwindInitCommand extends Command { public function __construct( private TailwindBuilder $tailwindBuilder, - private string $projectDir, ) { parent::__construct(); } @@ -49,8 +48,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int private function createTailwindConfig(SymfonyStyle $io): bool { - if (file_exists($this->projectDir.'/tailwind.config.js')) { - $io->note('tailwind.config.js found: Tailwind CSS is already initialized.'); + $configFile = $this->tailwindBuilder->getConfigFilePath(); + if (file_exists($configFile)) { + $io->note(sprintf('Tailwind config file already exists in "%s"', $configFile)); return true; } @@ -85,7 +85,7 @@ private function createTailwindConfig(SymfonyStyle $io): bool EOF; - file_put_contents($this->projectDir.'/tailwind.config.js', $tailwindConfig); + file_put_contents($configFile, $tailwindConfig); return true; } diff --git a/src/DependencyInjection/TailwindExtension.php b/src/DependencyInjection/TailwindExtension.php index 0f8af43..f4abe1d 100644 --- a/src/DependencyInjection/TailwindExtension.php +++ b/src/DependencyInjection/TailwindExtension.php @@ -31,6 +31,7 @@ public function load(array $configs, ContainerBuilder $container): void ->replaceArgument(1, $config['input_css']) ->replaceArgument(3, $config['binary']) ->replaceArgument(4, $config['binary_version']) + ->replaceArgument(5, $config['config_file']) ; } @@ -56,6 +57,10 @@ public function getConfigTreeBuilder(): TreeBuilder ->info('Path to CSS file to process through Tailwind') ->defaultValue('%kernel.project_dir%/assets/styles/app.css') ->end() + ->scalarNode('config_file') + ->info('Path to the tailwind.config.js file') + ->defaultValue('%kernel.project_dir%/tailwind.config.js') + ->end() ->scalarNode('binary') ->info('The tailwind binary to use instead of downloading a new one') ->defaultNull() diff --git a/src/TailwindBuilder.php b/src/TailwindBuilder.php index a34ecb4..17fb232 100644 --- a/src/TailwindBuilder.php +++ b/src/TailwindBuilder.php @@ -31,6 +31,7 @@ public function __construct( private readonly string $tailwindVarDir, private readonly ?string $binaryPath = null, private readonly ?string $binaryVersion = null, + private readonly string $configPath = 'tailwind.config.js', ) { if (is_file($inputPath)) { $this->inputPath = $inputPath; @@ -48,7 +49,7 @@ public function runBuild( bool $minify, ): Process { $binary = $this->createBinary(); - $arguments = ['-i', $this->inputPath, '-o', $this->getInternalOutputCssPath()]; + $arguments = ['-c', $this->configPath, '-i', $this->inputPath, '-o', $this->getInternalOutputCssPath()]; if ($watch) { $arguments[] = '--watch'; } @@ -105,6 +106,11 @@ public function getInputCssPath(): string return $this->inputPath; } + public function getConfigFilePath(): string + { + return $this->configPath; + } + public function getOutputCssContent(): string { if (!is_file($this->getInternalOutputCssPath())) { diff --git a/tests/TailwindBuilderTest.php b/tests/TailwindBuilderTest.php index da2916b..2a54072 100644 --- a/tests/TailwindBuilderTest.php +++ b/tests/TailwindBuilderTest.php @@ -39,7 +39,10 @@ public function testIntegrationWithDefaultOptions(): void $builder = new TailwindBuilder( __DIR__.'/fixtures', __DIR__.'/fixtures/assets/styles/app.css', - __DIR__.'/fixtures/var/tailwind' + __DIR__.'/fixtures/var/tailwind', + null, + null, + __DIR__.'/fixtures/tailwind.config.js' ); $process = $builder->runBuild(watch: false, minify: false); $process->wait(); @@ -56,7 +59,10 @@ public function testIntegrationWithMinify(): void $builder = new TailwindBuilder( __DIR__.'/fixtures', __DIR__.'/fixtures/assets/styles/app.css', - __DIR__.'/fixtures/var/tailwind' + __DIR__.'/fixtures/var/tailwind', + null, + null, + __DIR__.'/fixtures/tailwind.config.js' ); $process = $builder->runBuild(watch: false, minify: true); $process->wait();