| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { merge, map, pipe, reduce } = require('lodash/fp'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Builders Factories
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const enums = require('./enums'); | 
					
						
							|  |  |  | const dynamicZone = require('./dynamic-zones'); | 
					
						
							|  |  |  | const entity = require('./entity'); | 
					
						
							|  |  |  | const entityMeta = require('./entity-meta'); | 
					
						
							|  |  |  | const type = require('./type'); | 
					
						
							|  |  |  | const response = require('./response'); | 
					
						
							|  |  |  | const responseCollection = require('./response-collection'); | 
					
						
							| 
									
										
										
										
											2021-09-28 12:02:26 +02:00
										 |  |  | const relationResponseCollection = require('./relation-response-collection'); | 
					
						
							| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  | const queries = require('./queries'); | 
					
						
							|  |  |  | const mutations = require('./mutations'); | 
					
						
							|  |  |  | const filters = require('./filters'); | 
					
						
							|  |  |  | const inputs = require('./input'); | 
					
						
							|  |  |  | const genericMorph = require('./generic-morph'); | 
					
						
							|  |  |  | const resolvers = require('./resolvers'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Misc
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const operators = require('./filters/operators'); | 
					
						
							| 
									
										
										
										
											2021-08-24 17:56:44 +02:00
										 |  |  | const utils = require('./utils'); | 
					
						
							| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | const buildersFactories = [ | 
					
						
							|  |  |  |   enums, | 
					
						
							|  |  |  |   dynamicZone, | 
					
						
							|  |  |  |   entity, | 
					
						
							|  |  |  |   entityMeta, | 
					
						
							|  |  |  |   type, | 
					
						
							|  |  |  |   response, | 
					
						
							|  |  |  |   responseCollection, | 
					
						
							| 
									
										
										
										
											2021-09-28 12:02:26 +02:00
										 |  |  |   relationResponseCollection, | 
					
						
							| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  |   queries, | 
					
						
							|  |  |  |   mutations, | 
					
						
							|  |  |  |   filters, | 
					
						
							|  |  |  |   inputs, | 
					
						
							|  |  |  |   genericMorph, | 
					
						
							|  |  |  |   resolvers, | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = ({ strapi }) => { | 
					
						
							|  |  |  |   const buildersMap = new Map(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Instantiate every builder with a strapi instance & a type registry | 
					
						
							|  |  |  |      * @param {string} name | 
					
						
							|  |  |  |      * @param {object} registry | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     new(name, registry) { | 
					
						
							|  |  |  |       const context = { strapi, registry }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const builders = pipe( | 
					
						
							|  |  |  |         // Create a new instance of every builders
 | 
					
						
							|  |  |  |         map(factory => factory(context)), | 
					
						
							|  |  |  |         // Merge every builder into the same object
 | 
					
						
							|  |  |  |         reduce(merge, {}) | 
					
						
							|  |  |  |       ).call(null, buildersFactories); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       buildersMap.set(name, builders); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return builders; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Delete a set of builders instances from | 
					
						
							|  |  |  |      * the builders map for a given name | 
					
						
							|  |  |  |      * @param {string} name | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     delete(name) { | 
					
						
							|  |  |  |       buildersMap.delete(name); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Retrieve a set of builders instances from | 
					
						
							|  |  |  |      * the builders map for a given name | 
					
						
							|  |  |  |      * @param {string} name | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     get(name) { | 
					
						
							|  |  |  |       return buildersMap.get(name); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     filters: { | 
					
						
							| 
									
										
										
										
											2021-08-24 17:56:44 +02:00
										 |  |  |       operators: operators({ strapi }), | 
					
						
							| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-08-24 17:56:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     utils: utils({ strapi }), | 
					
						
							| 
									
										
										
										
											2021-08-24 12:10:47 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | }; |