@nestjs/graphql
Version: 
Nest - modern, fast, powerful node.js web framework (@graphql)
54 lines (53 loc) • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GraphQLTypesLoader = void 0;
const tslib_1 = require("tslib");
const merge_1 = require("@graphql-tools/merge");
const common_1 = require("@nestjs/common");
const glob = require("fast-glob");
const fs = require("fs");
const lodash_1 = require("lodash");
const util = require("util");
// eslint-disable-next-line @typescript-eslint/no-var-requires
const normalize = require('normalize-path');
const readFile = util.promisify(fs.readFile);
let GraphQLTypesLoader = class GraphQLTypesLoader {
    async mergeTypesByPaths(paths) {
        if (!paths || paths.length === 0) {
            return null;
        }
        const types = await this.getTypesFromPaths(paths);
        const flatTypes = (0, lodash_1.flatten)(types);
        return (0, merge_1.mergeTypeDefs)(flatTypes, {
            throwOnConflict: true,
            commentDescriptions: true,
            reverseDirectives: true,
        });
    }
    async getTypesFromPaths(paths) {
        const includeNodeModules = this.includeNodeModules(paths);
        paths = Array.isArray(paths)
            ? paths.map((path) => normalize(path))
            : normalize(paths);
        const filePaths = await glob(paths, {
            ignore: includeNodeModules ? [] : ['node_modules'],
        });
        if (filePaths.length === 0) {
            throw new Error(`No type definitions were found with the specified file name patterns: "${paths}". Please make sure there is at least one file that matches the given patterns.`);
        }
        const fileContentsPromises = filePaths.sort().map((filePath) => {
            return readFile(filePath.toString(), 'utf8');
        });
        return Promise.all(fileContentsPromises);
    }
    includeNodeModules(pathOrPaths) {
        if (Array.isArray(pathOrPaths)) {
            return pathOrPaths.some((path) => path.includes('node_modules'));
        }
        return pathOrPaths.includes('node_modules');
    }
};
exports.GraphQLTypesLoader = GraphQLTypesLoader;
exports.GraphQLTypesLoader = GraphQLTypesLoader = tslib_1.__decorate([
    (0, common_1.Injectable)()
], GraphQLTypesLoader);