@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
JavaScript
;
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