@graphql-inspector/validate-command
Advanced tools
Comparing version 0.0.0-canary.57e2caa to 0.0.0-canary.58ffd99
120
index.cjs.js
'use strict'; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
const tslib = require('tslib'); | ||
@@ -9,5 +11,47 @@ const commands = require('@graphql-inspector/commands'); | ||
function handler({ schema, documents, strictFragments, maxDepth, apollo, keepClientFields, failOnDeprecated, }) { | ||
const invalidDocuments = core.validate(schema, documents.map((doc) => new graphql.Source(graphql.print(doc.document), doc.location)), { | ||
strictFragments, | ||
maxDepth, | ||
apollo, | ||
keepClientFields, | ||
}); | ||
if (!invalidDocuments.length) { | ||
logger.Logger.success('All documents are valid'); | ||
} | ||
else { | ||
const errorsCount = countErrors(invalidDocuments); | ||
const deprecated = countDeprecated(invalidDocuments); | ||
if (errorsCount) { | ||
logger.Logger.log(`\nDetected ${errorsCount} invalid document${errorsCount > 1 ? 's' : ''}:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.errors.length) { | ||
renderInvalidDocument(doc).forEach((line) => { | ||
logger.Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
else if (!failOnDeprecated) { | ||
logger.Logger.success('All documents are valid'); | ||
} | ||
if (deprecated) { | ||
logger.Logger.info(`\nDetected ${deprecated} document${deprecated > 1 ? 's' : ''} with deprecated fields:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.deprecated.length) { | ||
renderDeprecatedUsageInDocument(doc, failOnDeprecated).forEach((line) => { | ||
logger.Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
if (errorsCount || (deprecated && failOnDeprecated)) { | ||
process.exit(1); | ||
} | ||
} | ||
} | ||
const index = commands.createCommand((api) => { | ||
const { loaders } = api; | ||
return { | ||
command: 'validate [documents] [schema]', | ||
command: 'validate <documents> <schema>', | ||
describe: 'Validate Fragments and Operations', | ||
@@ -19,2 +63,3 @@ builder(yargs) { | ||
type: 'string', | ||
demandOption: true, | ||
}) | ||
@@ -24,6 +69,7 @@ .positional('documents', { | ||
type: 'string', | ||
demandOption: true, | ||
}) | ||
.options({ | ||
d: { | ||
alias: 'deprecated', | ||
deprecated: { | ||
alias: 'd', | ||
describe: 'Fail on deprecated usage', | ||
@@ -33,7 +79,2 @@ type: 'boolean', | ||
}, | ||
c: { | ||
alias: 'config', | ||
describe: 'Use GraphQL Config to find schema and documents', | ||
type: 'boolean', | ||
}, | ||
noStrictFragments: { | ||
@@ -62,52 +103,22 @@ describe: 'Do not fail on duplicated fragment names', | ||
return tslib.__awaiter(this, void 0, void 0, function* () { | ||
const { loaders, pickPointers } = api; | ||
const { headers, token } = commands.parseGlobalArgs(args); | ||
const pointer = yield pickPointers(args, { | ||
schema: true, | ||
documents: true, | ||
}); | ||
const schema = yield loaders.loadSchema(pointer.schema, { | ||
const apollo = args.apollo || false; | ||
const maxDepth = args.maxDepth || undefined; | ||
const strictFragments = !args.noStrictFragments; | ||
const keepClientFields = args.keepClientFields || false; | ||
const failOnDeprecated = args.deprecated; | ||
const schema = yield loaders.loadSchema(args.schema, { | ||
headers, | ||
token, | ||
}); | ||
const documents = yield loaders.loadDocuments(pointer.documents); | ||
const invalidDocuments = core.validate(schema, documents.map((doc) => new graphql.Source(graphql.print(doc.document), doc.location)), { | ||
strictFragments: !args.noStrictFragments, | ||
maxDepth: args.maxDepth || undefined, | ||
apollo: args.apollo || false, | ||
keepClientFields: args.keepClientFields || false, | ||
const documents = yield loaders.loadDocuments(args.documents); | ||
return handler({ | ||
schema, | ||
documents, | ||
apollo, | ||
maxDepth, | ||
strictFragments, | ||
keepClientFields, | ||
failOnDeprecated, | ||
}); | ||
if (!invalidDocuments.length) { | ||
logger.Logger.success('All documents are valid'); | ||
} | ||
else { | ||
const errorsCount = countErrors(invalidDocuments); | ||
const deprecated = countDeprecated(invalidDocuments); | ||
if (errorsCount) { | ||
logger.Logger.log(`\nDetected ${errorsCount} invalid document${errorsCount > 1 ? 's' : ''}:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.errors.length) { | ||
renderInvalidDocument(doc).forEach((line) => { | ||
logger.Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
else if (!args.deprecated) { | ||
logger.Logger.success('All documents are valid'); | ||
} | ||
if (deprecated) { | ||
logger.Logger.info(`\nDetected ${deprecated} document${deprecated > 1 ? 's' : ''} with deprecated fields:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.deprecated.length) { | ||
renderDeprecatedUsageInDocument(doc, args.deprecated).forEach((line) => { | ||
logger.Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
if (errorsCount || (deprecated && args.deprecated)) { | ||
process.exit(1); | ||
} | ||
} | ||
}); | ||
@@ -153,3 +164,4 @@ }, | ||
module.exports = index; | ||
exports.default = index; | ||
exports.handler = handler; | ||
//# sourceMappingURL=index.cjs.js.map |
@@ -1,11 +0,23 @@ | ||
import { GlobalArgs } from '@graphql-inspector/commands'; | ||
declare const _default: import("../../commands/src").CommandFactory<{}, { | ||
schema?: string | undefined; | ||
documents?: string | undefined; | ||
deprecated?: boolean | undefined; | ||
import { GlobalArgs, CommandFactory } from '@graphql-inspector/commands'; | ||
import { Source as DocumentSource } from '@graphql-tools/utils'; | ||
import { GraphQLSchema } from 'graphql'; | ||
export { CommandFactory }; | ||
export declare function handler({ schema, documents, strictFragments, maxDepth, apollo, keepClientFields, failOnDeprecated, }: { | ||
schema: GraphQLSchema; | ||
documents: DocumentSource[]; | ||
failOnDeprecated: boolean; | ||
strictFragments: boolean; | ||
apollo: boolean; | ||
keepClientFields: boolean; | ||
maxDepth?: number; | ||
}): void; | ||
declare const _default: CommandFactory<{}, { | ||
schema: string; | ||
documents: string; | ||
deprecated: boolean; | ||
noStrictFragments: boolean; | ||
apollo?: boolean | undefined; | ||
keepClientFields?: boolean | undefined; | ||
apollo: boolean; | ||
keepClientFields: boolean; | ||
maxDepth?: number | undefined; | ||
} & GlobalArgs>; | ||
export default _default; |
116
index.esm.js
@@ -7,5 +7,47 @@ import { __awaiter } from 'tslib'; | ||
function handler({ schema, documents, strictFragments, maxDepth, apollo, keepClientFields, failOnDeprecated, }) { | ||
const invalidDocuments = validate(schema, documents.map((doc) => new Source(print(doc.document), doc.location)), { | ||
strictFragments, | ||
maxDepth, | ||
apollo, | ||
keepClientFields, | ||
}); | ||
if (!invalidDocuments.length) { | ||
Logger.success('All documents are valid'); | ||
} | ||
else { | ||
const errorsCount = countErrors(invalidDocuments); | ||
const deprecated = countDeprecated(invalidDocuments); | ||
if (errorsCount) { | ||
Logger.log(`\nDetected ${errorsCount} invalid document${errorsCount > 1 ? 's' : ''}:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.errors.length) { | ||
renderInvalidDocument(doc).forEach((line) => { | ||
Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
else if (!failOnDeprecated) { | ||
Logger.success('All documents are valid'); | ||
} | ||
if (deprecated) { | ||
Logger.info(`\nDetected ${deprecated} document${deprecated > 1 ? 's' : ''} with deprecated fields:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.deprecated.length) { | ||
renderDeprecatedUsageInDocument(doc, failOnDeprecated).forEach((line) => { | ||
Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
if (errorsCount || (deprecated && failOnDeprecated)) { | ||
process.exit(1); | ||
} | ||
} | ||
} | ||
const index = createCommand((api) => { | ||
const { loaders } = api; | ||
return { | ||
command: 'validate [documents] [schema]', | ||
command: 'validate <documents> <schema>', | ||
describe: 'Validate Fragments and Operations', | ||
@@ -17,2 +59,3 @@ builder(yargs) { | ||
type: 'string', | ||
demandOption: true, | ||
}) | ||
@@ -22,6 +65,7 @@ .positional('documents', { | ||
type: 'string', | ||
demandOption: true, | ||
}) | ||
.options({ | ||
d: { | ||
alias: 'deprecated', | ||
deprecated: { | ||
alias: 'd', | ||
describe: 'Fail on deprecated usage', | ||
@@ -31,7 +75,2 @@ type: 'boolean', | ||
}, | ||
c: { | ||
alias: 'config', | ||
describe: 'Use GraphQL Config to find schema and documents', | ||
type: 'boolean', | ||
}, | ||
noStrictFragments: { | ||
@@ -60,52 +99,22 @@ describe: 'Do not fail on duplicated fragment names', | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const { loaders, pickPointers } = api; | ||
const { headers, token } = parseGlobalArgs(args); | ||
const pointer = yield pickPointers(args, { | ||
schema: true, | ||
documents: true, | ||
}); | ||
const schema = yield loaders.loadSchema(pointer.schema, { | ||
const apollo = args.apollo || false; | ||
const maxDepth = args.maxDepth || undefined; | ||
const strictFragments = !args.noStrictFragments; | ||
const keepClientFields = args.keepClientFields || false; | ||
const failOnDeprecated = args.deprecated; | ||
const schema = yield loaders.loadSchema(args.schema, { | ||
headers, | ||
token, | ||
}); | ||
const documents = yield loaders.loadDocuments(pointer.documents); | ||
const invalidDocuments = validate(schema, documents.map((doc) => new Source(print(doc.document), doc.location)), { | ||
strictFragments: !args.noStrictFragments, | ||
maxDepth: args.maxDepth || undefined, | ||
apollo: args.apollo || false, | ||
keepClientFields: args.keepClientFields || false, | ||
const documents = yield loaders.loadDocuments(args.documents); | ||
return handler({ | ||
schema, | ||
documents, | ||
apollo, | ||
maxDepth, | ||
strictFragments, | ||
keepClientFields, | ||
failOnDeprecated, | ||
}); | ||
if (!invalidDocuments.length) { | ||
Logger.success('All documents are valid'); | ||
} | ||
else { | ||
const errorsCount = countErrors(invalidDocuments); | ||
const deprecated = countDeprecated(invalidDocuments); | ||
if (errorsCount) { | ||
Logger.log(`\nDetected ${errorsCount} invalid document${errorsCount > 1 ? 's' : ''}:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.errors.length) { | ||
renderInvalidDocument(doc).forEach((line) => { | ||
Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
else if (!args.deprecated) { | ||
Logger.success('All documents are valid'); | ||
} | ||
if (deprecated) { | ||
Logger.info(`\nDetected ${deprecated} document${deprecated > 1 ? 's' : ''} with deprecated fields:\n`); | ||
invalidDocuments.forEach((doc) => { | ||
if (doc.deprecated.length) { | ||
renderDeprecatedUsageInDocument(doc, args.deprecated).forEach((line) => { | ||
Logger.log(line); | ||
}); | ||
} | ||
}); | ||
} | ||
if (errorsCount || (deprecated && args.deprecated)) { | ||
process.exit(1); | ||
} | ||
} | ||
}); | ||
@@ -152,2 +161,3 @@ }, | ||
export default index; | ||
export { handler }; | ||
//# sourceMappingURL=index.esm.js.map |
{ | ||
"name": "@graphql-inspector/validate-command", | ||
"version": "0.0.0-canary.57e2caa", | ||
"version": "0.0.0-canary.58ffd99", | ||
"description": "Validate Documents in GraphQL Inspector", | ||
"sideEffects": false, | ||
"peerDependencies": { | ||
@@ -9,6 +10,6 @@ "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0" | ||
"dependencies": { | ||
"@graphql-inspector/commands": "0.0.0-canary.57e2caa", | ||
"@graphql-inspector/core": "0.0.0-canary.57e2caa", | ||
"@graphql-inspector/logger": "0.0.0-canary.57e2caa", | ||
"tslib": "^1.11.1" | ||
"@graphql-inspector/commands": "0.0.0-canary.58ffd99", | ||
"@graphql-inspector/core": "0.0.0-canary.58ffd99", | ||
"@graphql-inspector/logger": "0.0.0-canary.58ffd99", | ||
"tslib": "^2.0.0" | ||
}, | ||
@@ -15,0 +16,0 @@ "repository": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
35262
335
+ Added@ardatan/aggregate-error@0.0.6(transitive)
+ Added@graphql-inspector/commands@0.0.0-canary.58ffd99(transitive)
+ Added@graphql-inspector/config@0.0.0-canary.58ffd99(transitive)
+ Added@graphql-inspector/core@0.0.0-canary.58ffd99(transitive)
+ Added@graphql-inspector/loaders@0.0.0-canary.58ffd99(transitive)
+ Added@graphql-inspector/logger@0.0.0-canary.58ffd99(transitive)
+ Added@graphql-tools/load@6.2.8(transitive)
+ Added@graphql-tools/merge@6.2.178.3.1(transitive)
+ Added@graphql-tools/schema@8.5.1(transitive)
+ Added@graphql-tools/utils@6.2.47.10.08.0.28.9.0(transitive)
+ Addedcamel-case@4.1.2(transitive)
+ Addedglobby@11.0.3(transitive)
+ Addedp-limit@3.1.0(transitive)
+ Addedtslib@2.0.32.2.02.3.1(transitive)
+ Addedvalue-or-promise@1.0.11(transitive)
+ Addedyocto-queue@0.1.0(transitive)
- Removed@babel/runtime@7.25.6(transitive)
- Removed@graphql-inspector/commands@0.0.0-canary.57e2caa(transitive)
- Removed@graphql-inspector/config@0.0.0-canary.57e2caa(transitive)
- Removed@graphql-inspector/core@0.0.0-canary.57e2caa(transitive)
- Removed@graphql-inspector/loaders@0.0.0-canary.57e2caa(transitive)
- Removed@graphql-inspector/logger@0.0.0-canary.57e2caa(transitive)
- Removed@graphql-toolkit/common@0.10.7(transitive)
- Removed@graphql-toolkit/core@0.10.7(transitive)
- Removed@graphql-toolkit/schema-merging@0.10.7(transitive)
- Removed@wry/equality@0.1.11(transitive)
- Removedaggregate-error@3.0.1(transitive)
- Removedapollo-link@1.2.14(transitive)
- Removedapollo-link-http-common@0.2.16(transitive)
- Removedapollo-upload-client@13.0.0(transitive)
- Removedapollo-utilities@1.3.4(transitive)
- Removedargparse@1.0.10(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedbalanced-match@1.0.2(transitive)
- Removedbrace-expansion@1.1.11(transitive)
- Removedclean-stack@2.2.0(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedconcat-map@0.0.1(transitive)
- Removeddeepmerge@4.2.2(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removeddeprecated-decorator@0.1.6(transitive)
- Removedextract-files@8.1.0(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedform-data@3.0.1(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedglob@7.2.3(transitive)
- Removedglobby@11.0.0(transitive)
- Removedgraphql-tools@5.0.0(transitive)
- Removedindent-string@4.0.0(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removediterall@1.3.0(transitive)
- Removedlodash@4.17.15(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedminimatch@3.1.2(transitive)
- Removednode-fetch@2.7.0(transitive)
- Removedonce@1.4.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedregenerator-runtime@0.14.1(transitive)
- Removedsprintf-js@1.0.3(transitive)
- Removedtr46@0.0.3(transitive)
- Removedts-invariant@0.4.4(transitive)
- Removedtslib@1.11.2(transitive)
- Removeduuid@7.0.3(transitive)
- Removedwebidl-conversions@3.0.1(transitive)
- Removedwhatwg-url@5.0.0(transitive)
- Removedwrappy@1.0.2(transitive)
- Removedyamljs@0.3.0(transitive)
- Removedzen-observable@0.8.15(transitive)
- Removedzen-observable-ts@0.8.21(transitive)
Updatedtslib@^2.0.0