UNPKG

apollo-flash

Version:

A smart and efficient toolkit to quickly bootstrap an apollo-server project.

76 lines (75 loc) 2.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // @ts-ignore const apollo_server_express_1 = require("apollo-server-express"); const includeAll = require("include-all"); const _ = require("lodash"); const path = require("path"); /** * This class is responsible of auto-import and assemble resolvers and schema. * * @export * @class ImportsAutoLoader */ class ImportsAutoloader { /** * Creates an instance of ImportsAutoLoader. * * @param {string} [typeDefsFolderPath=path.join(__dirname, "schemas")] - Folder in which schemas lives. * @param {string} [resolversFolderPath=path.join(__dirname, "resolvers")] - Folder in which resolvers lives. * @memberof ImportsAutoLoader */ constructor(typeDefsFolderPath = path.join(__dirname, "schemas"), resolversFolderPath = path.join(__dirname, "resolvers")) { this.typeDefsFolderPath = typeDefsFolderPath; this.resolversFolderPath = resolversFolderPath; } /** * Generate GraphQL typedef from schemas folder. * * @returns {*} * @memberof ImportAutoLoader */ generateTypeDefs() { // Parse folder for schema const flatSchemas = includeAll({ dirname: this.typeDefsFolderPath, filter: /(.+)\.js$/, flatten: true, keepDirectoryPath: true, }); // Extract imports const schemas = _.flatMap(flatSchemas, _.property("default")); // Transform into graphQL return _.map(schemas, this.toGQL); } /** * Generate an object mapping resolvers. * * This use file name as Resolver name * * @returns {IResolvers} * @memberof ImportAutoLoader */ generateRootResolver() { // Parse folder for resolvers const flatResolvers = includeAll({ depth: 1, dirname: this.resolversFolderPath, filter: /(.+)\.js$/, }); // Extract imports return _.mapValues(flatResolvers, "default"); } /** * Transform to graphql. * * @private * @param {string} el * @returns * @memberof ImportAutoLoader */ toGQL(el) { return apollo_server_express_1.gql(el); } } exports.default = ImportsAutoloader;