2022-08-11 10:20:49 +02:00

93 lines
2.1 KiB
JavaScript

'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');
const relationResponseCollection = require('./relation-response-collection');
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');
const utils = require('./utils');
const buildersFactories = [
enums,
dynamicZone,
entity,
entityMeta,
type,
response,
responseCollection,
relationResponseCollection,
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: {
operators: operators({ strapi }),
},
utils: utils({ strapi }),
};
};