11'use strict' ;
22
3+ const isFunction = obj => ! ! ( obj && obj . constructor && obj . call && obj . apply ) ;
4+
35const { Plugins, Error } = require ( 'booljs.api' ) ;
46
7+ /**
8+ * @private
9+ * @description Recursively fetches models
10+ * @param {Object } instance - The application instance
11+ * @param {Object } models - The models Object
12+ * @param {Object } loader - The loader used to try loading the model
13+ * @param {Object } connection - The connection (if any) used by the driver
14+ * @return {Promise }
15+ */
16+ exports . fetchModels = async function ( instance , models , loader , connection ) {
17+ for ( let model in models ) {
18+ if ( ! isFunction ( models [ model ] ) ) {
19+ await exports . fetchModels ( instance , models [ model ] , loader , connection ) ;
20+ } else if ( models [ model ] . prototype instanceof loader . modelClass ( ) ) {
21+ instance . insertComponent ( model , await loader . fetchModels (
22+ instance , model , models [ model ] , connection
23+ ) , models ) ;
24+ }
25+ }
26+ }
27+
528/**
629 * @private
730 * @description Loads database from a DatabaseLoader plugin
8- * @param {Object } _instance - The application instance
9- * @param {Object } _loader - An existing database loader
31+ * @param {Object } instance - The application instance
32+ * @param {Object } drivers - An existing list of database drivers
1033 * @return {Promise }
1134 */
1235module . exports = async function DatabaseLoader ( instance , drivers ) {
@@ -22,12 +45,6 @@ module.exports = async function DatabaseLoader (instance, drivers) {
2245 ) ;
2346
2447 let { models } = instance . getComponents ( ) ;
25- for ( let model in models ) {
26- if ( models [ model ] . prototype instanceof loader . modelClass ( ) ) {
27- instance . insertComponent ( model , await loader . fetchModels (
28- instance , model , models [ model ] , connection
29- ) , models ) ;
30- }
31- }
48+ await exports . fetchModels ( instance , models , loader , connection ) ;
3249 }
3350} ;
0 commit comments