+
Skip to content
8 changes: 7 additions & 1 deletion packages/fractor-fluid/config/application.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

use a9f\FractorFluid\Contract\FluidFractorRule;
use a9f\FractorFluid\FluidFileProcessor;
use a9f\FractorFluid\ValueObject\FluidFormatConfiguration;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
use function Symfony\Component\DependencyInjection\Loader\Configurator\tagged_iterator;

return static function (ContainerConfigurator $containerConfigurator, ContainerBuilder $containerBuilder): void {
Expand All @@ -16,8 +18,12 @@

$services->load('a9f\\FractorFluid\\', __DIR__ . '/../src/');

$services->set('fractor.fluid_processor.format_configuration', FluidFormatConfiguration::class)
->factory([null, 'createFromParameterBag']);

$services->set(FluidFileProcessor::class)
->arg('$rules', tagged_iterator('fractor.fluid_rule'));
->arg('$rules', tagged_iterator('fractor.fluid_rule'))
->arg('$fluidFormatConfiguration', service('fractor.fluid_processor.format_configuration'));

$containerBuilder->registerForAutoconfiguration(FluidFractorRule::class)->addTag('fractor.fluid_rule');
};
10 changes: 10 additions & 0 deletions packages/fractor-fluid/src/Configuration/FluidProcessorOption.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

namespace a9f\FractorFluid\Configuration;

final class FluidProcessorOption
{
public const ALLOWED_FILE_EXTENSIONS = 'fluid-processor-allowed-file-extensions';
}
9 changes: 7 additions & 2 deletions packages/fractor-fluid/src/FluidFileProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use a9f\Fractor\Application\ValueObject\File;
use a9f\Fractor\Caching\Detector\ChangedFilesDetector;
use a9f\FractorFluid\Contract\FluidFractorRule;
use a9f\FractorFluid\ValueObject\FluidFormatConfiguration;

/**
* @implements FileProcessor<FluidFractorRule>
Expand All @@ -20,7 +21,8 @@
*/
public function __construct(
private iterable $rules,
private ChangedFilesDetector $changedFilesDetector
private ChangedFilesDetector $changedFilesDetector,
private FluidFormatConfiguration $fluidFormatConfiguration
) {
}

Expand All @@ -43,9 +45,12 @@ public function handle(File $file, iterable $appliedRules): void
}
}

/**
* @return list<non-empty-string>
*/
public function allowedFileExtensions(): array
{
return ['html', 'xml', 'txt'];
return array_values($this->fluidFormatConfiguration->allowedFileExtensions);
}

public function getAllRules(): iterable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace a9f\FractorFluid\ValueObject;

use a9f\FractorFluid\Configuration\FluidProcessorOption;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

final readonly class FluidFormatConfiguration
{
/**
* @param array<non-empty-string> $allowedFileExtensions
*/
public function __construct(
public array $allowedFileExtensions
) {
}

public static function createFromParameterBag(ParameterBagInterface $parameterBag): self
{
$allowedFileExtensions = $parameterBag->has(FluidProcessorOption::ALLOWED_FILE_EXTENSIONS)
? $parameterBag->get(FluidProcessorOption::ALLOWED_FILE_EXTENSIONS)
: ['html', 'xml', 'txt'];
$allowedFileExtensions = is_array($allowedFileExtensions) ? $allowedFileExtensions : ['html', 'xml', 'txt'];

return new self($allowedFileExtensions);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace a9f\FractorFluid\Tests\FluidFileProcessor;

use a9f\FractorFluid\Configuration\FluidProcessorOption;
use a9f\FractorFluid\ValueObject\FluidFormatConfiguration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;

final class FluidFileProcessorConfigurationTest extends TestCase
{
public function testDefaultFileExtensions(): void
{
$parameterBag = new ParameterBag([]);
$configuration = FluidFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['html', 'xml', 'txt'], $configuration->allowedFileExtensions);
}

public function testCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
FluidProcessorOption::ALLOWED_FILE_EXTENSIONS => ['html'],
]);
$configuration = FluidFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['html'], $configuration->allowedFileExtensions);
}

public function testMultipleCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
FluidProcessorOption::ALLOWED_FILE_EXTENSIONS => ['html', 'xml'],
]);
$configuration = FluidFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['html', 'xml'], $configuration->allowedFileExtensions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ final class TypoScriptProcessorOption
public const INDENT_CONDITIONS = 'typoscript-processor-indent-conditions';

public const CONDITION_TERMINATION = 'typoscript-processor-condition-termination';

public const ALLOWED_FILE_EXTENSIONS = 'typoscript-processor-allowed-file-extensions';
}
8 changes: 5 additions & 3 deletions packages/fractor-typoscript/src/TypoScriptFileProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public function __construct(

public function canHandle(File $file): bool
{
return in_array($file->getFileExtension(), $this->allowedFileExtensions());
return in_array($file->getFileExtension(), $this->allowedFileExtensions(), true);
}

public function handle(File $file, iterable $appliedRules): void
Expand Down Expand Up @@ -75,10 +75,12 @@ public function handle(File $file, iterable $appliedRules): void
}
}

/**
* @return list<non-empty-string>
*/
public function allowedFileExtensions(): array
{
// TODO this should be configurable
return ['typoscript', 'tsconfig', 'ts'];
return array_values($this->typoScriptPrettyPrinterFormatConfiguration->allowedFileExtensions);
}

public function getAllRules(): iterable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@

final readonly class TypoScriptPrettyPrinterFormatConfiguration
{
/**
* @param array<non-empty-string> $allowedFileExtensions
*/
public function __construct(
public int $size,
public string $style,
public bool $addClosingGlobal,
public bool $includeEmptyLineBreaks,
public bool $indentConditions,
public PrettyPrinterConditionTermination $conditionTermination
public PrettyPrinterConditionTermination $conditionTermination,
public array $allowedFileExtensions
) {
}

Expand Down Expand Up @@ -48,13 +52,23 @@ public static function createFromParameterBag(ParameterBagInterface $parameterBa
? $parameterBag->get(TypoScriptProcessorOption::CONDITION_TERMINATION)
: PrettyPrinterConditionTermination::Keep;

$allowedFileExtensions = $parameterBag->has(TypoScriptProcessorOption::ALLOWED_FILE_EXTENSIONS)
? $parameterBag->get(TypoScriptProcessorOption::ALLOWED_FILE_EXTENSIONS)
: ['typoscript', 'tsconfig', 'ts'];
$allowedFileExtensions = is_array($allowedFileExtensions) ? $allowedFileExtensions : [
'typoscript',
'tsconfig',
'ts',
];

return new self(
$size,
$style,
$addClosingGlobal,
$includeEmptyLineBreaks,
$indentConditions,
$conditionTermination
$conditionTermination,
$allowedFileExtensions
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace a9f\FractorTypoScript\Tests\TypoScriptFileProcessor;

use a9f\FractorTypoScript\Configuration\TypoScriptProcessorOption;
use a9f\FractorTypoScript\ValueObject\TypoScriptPrettyPrinterFormatConfiguration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;

final class TypoScriptFileProcessorConfigurationTest extends TestCase
{
public function testDefaultFileExtensions(): void
{
$parameterBag = new ParameterBag([]);
$configuration = TypoScriptPrettyPrinterFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['typoscript', 'tsconfig', 'ts'], $configuration->allowedFileExtensions);
}

public function testCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
TypoScriptProcessorOption::ALLOWED_FILE_EXTENSIONS => ['typoscript', 'tss'],
]);
$configuration = TypoScriptPrettyPrinterFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['typoscript', 'tss'], $configuration->allowedFileExtensions);
}

public function testMultipleCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
TypoScriptProcessorOption::ALLOWED_FILE_EXTENSIONS => ['typoscript', 'tsconfig', 'tss', 'tsc'],
]);
$configuration = TypoScriptPrettyPrinterFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['typoscript', 'tsconfig', 'tss', 'tsc'], $configuration->allowedFileExtensions);
}
}
7 changes: 6 additions & 1 deletion packages/fractor-xml/config/application.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use a9f\FractorXml\Contract\XmlFractor;
use a9f\FractorXml\IndentFactory;
use a9f\FractorXml\PrettyXmlFormatter;
use a9f\FractorXml\ValueObject\XmlFormatConfiguration;
use a9f\FractorXml\XmlFileProcessor;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
Expand All @@ -24,9 +25,13 @@
$services->set('fractor.xml_processor.indent', Indent::class)
->factory([service(IndentFactory::class), 'create']);

$services->set('fractor.xml_processor.format_configuration', XmlFormatConfiguration::class)
->factory([null, 'createFromParameterBag']);

$services->set(XmlFileProcessor::class)
->arg('$indent', service('fractor.xml_processor.indent'))
->arg('$rules', tagged_iterator('fractor.xml_rule'));
->arg('$rules', tagged_iterator('fractor.xml_rule'))
->arg('$xmlFormatConfiguration', service('fractor.xml_processor.format_configuration'));

$services->set(\PrettyXml\Formatter::class);
$services->alias(Formatter::class, PrettyXmlFormatter::class);
Expand Down
2 changes: 2 additions & 0 deletions packages/fractor-xml/src/Configuration/XmlProcessorOption.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ final class XmlProcessorOption
public const INDENT_SIZE = 'xml-processor-indent-size';

public const INDENT_CHARACTER = 'xml-processor-indent-character';

public const ALLOWED_FILE_EXTENSIONS = 'xml-processor-allowed-file-extensions';
}
29 changes: 29 additions & 0 deletions packages/fractor-xml/src/ValueObject/XmlFormatConfiguration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace a9f\FractorXml\ValueObject;

use a9f\FractorXml\Configuration\XmlProcessorOption;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

final readonly class XmlFormatConfiguration
{
/**
* @param array<non-empty-string> $allowedFileExtensions
*/
public function __construct(
public array $allowedFileExtensions
) {
}

public static function createFromParameterBag(ParameterBagInterface $parameterBag): self
{
$allowedFileExtensions = $parameterBag->has(XmlProcessorOption::ALLOWED_FILE_EXTENSIONS)
? $parameterBag->get(XmlProcessorOption::ALLOWED_FILE_EXTENSIONS)
: ['xml'];
$allowedFileExtensions = is_array($allowedFileExtensions) ? $allowedFileExtensions : ['xml'];

return new self($allowedFileExtensions);
}
}
11 changes: 8 additions & 3 deletions packages/fractor-xml/src/XmlFileProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use a9f\FractorXml\Contract\DomNodeVisitor;
use a9f\FractorXml\Contract\Formatter;
use a9f\FractorXml\Contract\XmlFractor;
use a9f\FractorXml\ValueObject\XmlFormatConfiguration;
use a9f\FractorXml\ValueObjectFactory\DomDocumentFactory;

/**
Expand All @@ -27,13 +28,14 @@ public function __construct(
private Formatter $formatter,
private iterable $rules,
private Indent $indent,
private ChangedFilesDetector $changedFilesDetector
private ChangedFilesDetector $changedFilesDetector,
private XmlFormatConfiguration $xmlFormatConfiguration
) {
}

public function canHandle(File $file): bool
{
return $file->getFileExtension() === 'xml';
return in_array($file->getFileExtension(), $this->allowedFileExtensions(), true);
}

/**
Expand Down Expand Up @@ -72,9 +74,12 @@ public function handle(File $file, iterable $appliedRules): void
}
}

/**
* @return list<non-empty-string>
*/
public function allowedFileExtensions(): array
{
return ['xml'];
return array_values($this->xmlFormatConfiguration->allowedFileExtensions);
}

public function getAllRules(): iterable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace a9f\FractorXml\Tests\XmlFileProcessor;

use a9f\FractorXml\Configuration\XmlProcessorOption;
use a9f\FractorXml\ValueObject\XmlFormatConfiguration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;

final class XmlFileProcessorConfigurationTest extends TestCase
{
public function testDefaultFileExtensions(): void
{
$parameterBag = new ParameterBag([]);
$configuration = XmlFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['xml'], $configuration->allowedFileExtensions);
}

public function testCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
XmlProcessorOption::ALLOWED_FILE_EXTENSIONS => ['xml', 'xlf'],
]);
$configuration = XmlFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['xml', 'xlf'], $configuration->allowedFileExtensions);
}

public function testMultipleCustomFileExtensions(): void
{
$parameterBag = new ParameterBag([
XmlProcessorOption::ALLOWED_FILE_EXTENSIONS => ['xml', 'xlf', 'xsd'],
]);
$configuration = XmlFormatConfiguration::createFromParameterBag($parameterBag);

self::assertSame(['xml', 'xlf', 'xsd'], $configuration->allowedFileExtensions);
}
}
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载