@@ -648,30 +648,105 @@ protected function runPostInstallSteps($packageName)
648648 return ;
649649 }
650650 $ providers = $ this ->getPackageProviders ($ packageName );
651- foreach ($ providers as $ provider ) {
651+ $ dependencyProviders = $ this ->getDependencyProviders ($ packageName );
652+ $ allProviders = array_values (array_unique (array_merge ($ providers , $ dependencyProviders )));
653+ foreach ($ allProviders as $ provider ) {
652654 $ this ->runArtisanCommand (['vendor:publish ' , '--provider= ' . $ provider ]);
653655 }
654656 $ this ->runArtisanCommand (['migrate ' , '--force ' ]);
655657 }
656658
657659 protected function getPackageProviders ($ packageName )
660+ {
661+ $ composer = $ this ->getPackageComposer ($ packageName );
662+ if (!$ composer ) {
663+ return [];
664+ }
665+ return $ this ->extractProviders ($ composer );
666+ }
667+
668+ protected function getDependencyProviders ($ packageName )
669+ {
670+ $ composer = $ this ->getPackageComposer ($ packageName );
671+ if (!$ composer ) {
672+ return [];
673+ }
674+
675+ $ requires = $ composer ['require ' ] ?? [];
676+ if (!is_array ($ requires ) || $ requires === []) {
677+ return [];
678+ }
679+
680+ $ providers = [];
681+ foreach (array_keys ($ requires ) as $ dependency ) {
682+ if (!is_string ($ dependency )) {
683+ continue ;
684+ }
685+ $ dependency = trim ($ dependency );
686+ if (!$ this ->isComposerDependencyName ($ dependency )) {
687+ continue ;
688+ }
689+ if ($ dependency === $ packageName ) {
690+ continue ;
691+ }
692+
693+ $ depComposer = $ this ->getPackageComposer ($ dependency );
694+ if (!$ depComposer ) {
695+ continue ;
696+ }
697+ if (!$ this ->isEvoPackageType ($ depComposer ['type ' ] ?? null )) {
698+ continue ;
699+ }
700+
701+ $ providers = array_merge ($ providers , $ this ->extractProviders ($ depComposer ));
702+ }
703+
704+ $ providers = array_filter ($ providers , 'is_string ' );
705+ return array_values (array_unique ($ providers ));
706+ }
707+
708+ protected function getPackageComposer ($ packageName )
658709 {
659710 $ composerPath = $ this ->getPackageComposerPath ($ packageName );
660711 if ($ composerPath === '' || !file_exists ($ composerPath )) {
661- return [] ;
712+ return null ;
662713 }
663714 $ raw = file_get_contents ($ composerPath );
664715 $ composer = json_decode ($ raw , true );
665716 if (!is_array ($ composer )) {
666- return [] ;
717+ return null ;
667718 }
719+ return $ composer ;
720+ }
721+
722+ protected function extractProviders (array $ composer ): array
723+ {
668724 $ laravelProviders = $ composer ['extra ' ]['laravel ' ]['providers ' ] ?? [];
669725 $ evolutionProviders = $ composer ['extra ' ]['evolution ' ]['providers ' ] ?? [];
670726 $ providers = array_merge ((array ) $ laravelProviders , (array ) $ evolutionProviders );
671727 $ providers = array_filter ($ providers , 'is_string ' );
672728 return array_values (array_unique ($ providers ));
673729 }
674730
731+ protected function isEvoPackageType ($ type ): bool
732+ {
733+ if (!is_string ($ type ) || $ type === '' ) {
734+ return false ;
735+ }
736+ return str_starts_with ($ type , 'evolutioncms- ' ) || str_starts_with ($ type , 'evolution-cms- ' );
737+ }
738+
739+ protected function isComposerDependencyName (string $ name ): bool
740+ {
741+ if ($ name === '' || $ name === 'php ' || $ name === 'composer-plugin-api ' ) {
742+ return false ;
743+ }
744+ if (str_starts_with ($ name , 'ext- ' ) || str_starts_with ($ name , 'lib- ' )) {
745+ return false ;
746+ }
747+ return true ;
748+ }
749+
675750 protected function getPackageComposerPath ($ packageName )
676751 {
677752 if (class_exists ('\\Composer \\InstalledVersions ' )) {
0 commit comments