UNPKG

@test-graphql-cli/coverage

Version:

Schema coverage based on documents. Find out how many times types and fields are used in your application using GraphQL Inspector.

66 lines 3.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const core_1 = require("@graphql-inspector/core"); const graphql_1 = require("graphql"); const code_file_loader_1 = require("@graphql-toolkit/code-file-loader"); const git_loader_1 = require("@graphql-toolkit/git-loader"); const github_loader_1 = require("@graphql-toolkit/github-loader"); const apollo_engine_loader_1 = require("@graphql-toolkit/apollo-engine-loader"); const prisma_loader_1 = require("@graphql-toolkit/prisma-loader"); const fs_1 = require("fs"); const path_1 = require("path"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const CoverageExtension = api => { // Schema api.loaders.schema.register(new code_file_loader_1.CodeFileLoader()); api.loaders.schema.register(new git_loader_1.GitLoader()); api.loaders.schema.register(new github_loader_1.GithubLoader()); api.loaders.schema.register(new apollo_engine_loader_1.ApolloEngineLoader()); api.loaders.schema.register(new prisma_loader_1.PrismaLoader()); // Documents api.loaders.documents.register(new code_file_loader_1.CodeFileLoader()); api.loaders.documents.register(new git_loader_1.GitLoader()); api.loaders.documents.register(new github_loader_1.GithubLoader()); return { name: 'coverage', }; }; exports.plugin = { init({ program, loadProjectConfig, reportError }) { program .command('coverage') .option('-s, --silent', 'Do not render any stats in the terminal (default: false)') .option('-w, --write <s>', 'Write a file with coverage stats (disabled by default)') .action(async (options) => { try { const config = await loadProjectConfig({ extensions: [CoverageExtension] }); const [schema, documents] = await Promise.all([ config.getSchema(), config.getDocuments(), ]); const results = core_1.coverage(schema, documents.map(doc => new graphql_1.Source(graphql_1.print(doc.document), doc.location))); if (!options.silent) { for (const typeName in results.types) { const result = results.types[typeName]; console.info(`type ` + chalk_1.default.bold.underline(result.type.name.toString()) + ` x ${result.hits} {`); for (const childName in result.children) { const childResult = result.children[childName]; console.info(` ` + chalk_1.default.bold(childName) + ` x ${childResult.hits}`); } console.info(`}`); } } if (options.write) { fs_1.writeFileSync(path_1.join(process.cwd(), options.write), JSON.stringify(results, null, 2)); } } catch (e) { reportError(e); } }); } }; //# sourceMappingURL=index.js.map