@@ -521,29 +521,30 @@ public static function fromData(string $data, string $mimetype = '', string $par
521521 default => throw new SyntaxError ('Invalid mimeType, ` ' .$ mimetype .'`. ' ),
522522 };
523523
524- if ('' != $ parameters ) {
525- if (str_starts_with ($ parameters , '; ' )) {
526- $ parameters = substr ($ parameters , 1 );
527- }
528-
529- $ validateParameter = function (string $ parameter ): bool {
530- $ properties = explode ('= ' , $ parameter );
524+ if ('' === $ parameters ) {
525+ return self ::fromComponents ([
526+ 'scheme ' => 'data ' ,
527+ 'path ' => self ::formatDataPath ($ mimetype .', ' .rawurlencode ($ data )),
528+ ]);
529+ }
531530
532- return 2 != count ( $ properties ) || ' base64 ' === strtolower ( $ properties [ 0 ]);
533- } ;
531+ $ isInvalidParameter = static function ( string $ parameter ): bool {
532+ $ properties = explode ( ' = ' , $ parameter ) ;
534533
535- $ params = array_filter (explode ('; ' , $ parameters ));
536- if ([] !== array_filter ($ params , $ validateParameter (...))) {
537- throw new SyntaxError (sprintf ('Invalid mediatype parameters, `%s`. ' , $ parameters ));
538- }
534+ return 2 !== count ($ properties ) || 'base64 ' === strtolower ($ properties [0 ]);
535+ };
539536
540- $ parameters = '; ' .$ parameters ;
537+ if (str_starts_with ($ parameters , '; ' )) {
538+ $ parameters = substr ($ parameters , 1 );
541539 }
542540
543- return self ::fromComponents ([
544- 'scheme ' => 'data ' ,
545- 'path ' => self ::formatDataPath ($ mimetype .$ parameters .', ' .rawurlencode ($ data )),
546- ]);
541+ return match ([]) {
542+ array_filter (explode ('; ' , $ parameters ), $ isInvalidParameter ) => self ::fromComponents ([
543+ 'scheme ' => 'data ' ,
544+ 'path ' => self ::formatDataPath ($ mimetype .'; ' .$ parameters .', ' .rawurlencode ($ data )),
545+ ]),
546+ default => throw new SyntaxError (sprintf ('Invalid mediatype parameters, `%s`. ' , $ parameters ))
547+ };
547548 }
548549
549550 /**
0 commit comments