mirror of
https://github.com/strapi/strapi.git
synced 2025-07-25 18:05:07 +00:00
93 lines
2.1 KiB
JavaScript
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 }),
|
|
};
|
|
};
|