2121use Quantum \App \Exceptions \BaseException ;
2222use Quantum \Libraries \Storage \FileSystem ;
2323use Quantum \Di \Exceptions \DiException ;
24- use Quantum \Router \Route ;
2524use ReflectionException ;
2625use Quantum \App \App ;
2726use Closure ;
@@ -42,10 +41,8 @@ class ModuleLoader
4241 */
4342 private static $ moduleConfigs = [];
4443
45- /**
46- * @var array<Closure>
47- */
48- private static $ moduleRoutes = [];
44+ /** @var array<string, Closure> */
45+ private static $ moduleRouteClosures = [];
4946
5047 /**
5148 * @var FileSystem
@@ -80,12 +77,6 @@ public static function getInstance(): ModuleLoader
8077 return self ::$ instance ;
8178 }
8279
83- /**
84- * Load modules routes
85- * @return array
86- * @throws ModuleException
87- * @throws RouteException
88- */
8980 public function loadModulesRoutes (): array
9081 {
9182 if (empty (self ::$ moduleConfigs )) {
@@ -99,12 +90,33 @@ public function loadModulesRoutes(): array
9990 continue ;
10091 }
10192
102- $ modulesRoutes = array_merge ( $ modulesRoutes , $ this ->getModuleRoutes ($ module, new Route ([ $ module => $ options ])) );
93+ $ modulesRoutes[ $ module ] = $ this ->getModuleRouteDefinitions ($ module );
10394 }
10495
10596 return $ modulesRoutes ;
10697 }
10798
99+ private function getModuleRouteDefinitions (string $ module ): Closure
100+ {
101+ if (isset (self ::$ moduleRouteClosures [$ module ])) {
102+ return self ::$ moduleRouteClosures [$ module ];
103+ }
104+
105+ $ moduleRoutesPath = modules_dir () . DS . $ module . DS . 'routes ' . DS . 'routes.php ' ;
106+
107+ if (!$ this ->fs ->exists ($ moduleRoutesPath )) {
108+ throw ModuleException::moduleRoutesNotFound ($ module );
109+ }
110+
111+ $ closure = $ this ->fs ->require ($ moduleRoutesPath , true );
112+
113+ if (!$ closure instanceof Closure) {
114+ throw RouteException::notClosure ();
115+ }
116+
117+ return self ::$ moduleRouteClosures [$ module ] = $ closure ;
118+ }
119+
108120 /**
109121 * @return array
110122 * @throws ModuleException
@@ -145,19 +157,6 @@ public function getModuleDependencies(string $module): array
145157 return self ::$ moduleDependencies [$ module ];
146158 }
147159
148- /**
149- * @return array
150- * @throws ModuleException
151- */
152- public function getModuleConfigs (): array
153- {
154- if (empty (self ::$ moduleConfigs )) {
155- $ this ->loadModuleConfig ();
156- }
157-
158- return self ::$ moduleConfigs ;
159- }
160-
161160 /**
162161 * @throws ModuleException
163162 */
@@ -173,39 +172,24 @@ private function loadModuleConfig()
173172 }
174173
175174 /**
176- * @param array $options
177- * @return bool
178- */
179- private function isModuleEnabled (array $ options ): bool
180- {
181- return $ options ['enabled ' ] ?? false ;
182- }
183-
184- /**
185- * @param string $module
186- * @param Route $route
187175 * @return array
188176 * @throws ModuleException
189- * @throws RouteException
190177 */
191- private function getModuleRoutes ( string $ module , Route $ route ): array
178+ public function getModuleConfigs ( ): array
192179 {
193- $ moduleRoutes = modules_dir () . DS . $ module . DS . 'routes ' . DS . 'routes.php ' ;
194-
195- if (!$ this ->fs ->exists ($ moduleRoutes )) {
196- throw ModuleException::moduleRoutesNotFound ($ module );
197- }
198-
199- if (empty (self ::$ moduleRoutes [$ module ])) {
200- self ::$ moduleRoutes [$ module ] = $ this ->fs ->require ($ moduleRoutes , true );
201- }
202-
203- if (!self ::$ moduleRoutes [$ module ] instanceof Closure) {
204- throw RouteException::notClosure ();
180+ if (empty (self ::$ moduleConfigs )) {
181+ $ this ->loadModuleConfig ();
205182 }
206183
207- self ::$ moduleRoutes [$ module ]($ route );
184+ return self ::$ moduleConfigs ;
185+ }
208186
209- return $ route ->getRuntimeRoutes ();
187+ /**
188+ * @param array $options
189+ * @return bool
190+ */
191+ private function isModuleEnabled (array $ options ): bool
192+ {
193+ return (bool ) ($ options ['enabled ' ] ?? false );
210194 }
211195}
0 commit comments