36
36
37
37
class ConfigParserPass implements CompilerPassInterface
38
38
{
39
+ public const TYPE_YAML = 'yaml ' ;
40
+ public const TYPE_GRAPHQL = 'graphql ' ;
41
+ public const TYPE_ANNOTATION = 'annotation ' ;
42
+ public const TYPE_ATTRIBUTE = 'attribute ' ;
43
+
44
+ public const SUPPORTED_TYPES = [
45
+ self ::TYPE_YAML ,
46
+ self ::TYPE_GRAPHQL ,
47
+ self ::TYPE_ANNOTATION ,
48
+ self ::TYPE_ATTRIBUTE ,
49
+ ];
50
+
39
51
public const SUPPORTED_TYPES_EXTENSIONS = [
40
- ' yaml ' => '{yaml,yml} ' ,
41
- ' graphql ' => '{graphql,graphqls} ' ,
42
- ' annotation ' => 'php ' ,
43
- ' attribute ' => 'php ' ,
52
+ self :: TYPE_YAML => '{yaml,yml} ' ,
53
+ self :: TYPE_GRAPHQL => '{graphql,graphqls} ' ,
54
+ self :: TYPE_ANNOTATION => 'php ' ,
55
+ self :: TYPE_ATTRIBUTE => 'php ' ,
44
56
];
45
57
46
58
/**
59
+ * @deprecated They are going to be configurable.
47
60
* @var array<string, class-string<ParserInterface|PreParserInterface>>
48
61
*/
49
62
public const PARSERS = [
50
- ' yaml ' => YamlParser::class,
51
- ' graphql ' => GraphQLParser::class,
52
- ' annotation ' => AnnotationParser::class,
53
- ' attribute ' => AttributeParser::class,
63
+ self :: TYPE_YAML => YamlParser::class,
64
+ self :: TYPE_GRAPHQL => GraphQLParser::class,
65
+ self :: TYPE_ANNOTATION => AnnotationParser::class,
66
+ self :: TYPE_ATTRIBUTE => AttributeParser::class,
54
67
];
55
68
56
69
private const DEFAULT_CONFIG = [
@@ -64,6 +77,7 @@ class ConfigParserPass implements CompilerPassInterface
64
77
'types ' => [],
65
78
],
66
79
],
80
+ 'parsers ' => self ::PARSERS ,
67
81
];
68
82
69
83
/**
@@ -103,7 +117,7 @@ private function getConfigs(ContainerBuilder $container): array
103
117
// Pre-parse all files
104
118
AnnotationParser::reset ($ config );
105
119
AttributeParser::reset ($ config );
106
- $ typesNeedPreParsing = $ this ->typesNeedPreParsing ();
120
+ $ typesNeedPreParsing = $ this ->typesNeedPreParsing ($ config [ ' parsers ' ] );
107
121
foreach ($ typesMappings as $ params ) {
108
122
if ($ typesNeedPreParsing [$ params ['type ' ]]) {
109
123
$ this ->parseTypeConfigFiles ($ params ['type ' ], $ params ['files ' ], $ container , $ config , true );
@@ -122,10 +136,15 @@ private function getConfigs(ContainerBuilder $container): array
122
136
return $ flattenTypeConfig ;
123
137
}
124
138
125
- private function typesNeedPreParsing (): array
139
+ /**
140
+ * @param array<string,string> $parsers
141
+ *
142
+ * @return array<string,bool>
143
+ */
144
+ private function typesNeedPreParsing (array $ parsers ): array
126
145
{
127
146
$ needPreParsing = [];
128
- foreach (self :: PARSERS as $ type => $ className ) {
147
+ foreach ($ parsers as $ type => $ className ) {
129
148
$ needPreParsing [$ type ] = is_a ($ className , PreParserInterface::class, true );
130
149
}
131
150
@@ -152,7 +171,7 @@ private function parseTypeConfigFiles(string $type, iterable $files, ContainerBu
152
171
continue ;
153
172
}
154
173
155
- $ parser = [self :: PARSERS [$ type ], $ method ];
174
+ $ parser = [$ configs [ ' parsers ' ] [$ type ], $ method ];
156
175
if (is_callable ($ parser )) {
157
176
$ config [] = ($ parser )($ file , $ container , $ configs );
158
177
}
0 commit comments