Project files

This commit is contained in:
2023-11-09 18:47:11 +01:00
parent 695abe054b
commit c415135aae
8554 changed files with 858111 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
import { ASTVisitor } from '../../../language/visitor';
import { ValidationContext } from '../../ValidationContext';
/**
* No deprecated
*
* A GraphQL document is only valid if all selected fields and all used enum values have not been
* deprecated.
*
* Note: This rule is optional and is not part of the Validation section of the GraphQL
* Specification. The main purpose of this rule is detection of deprecated usages and not
* necessarily to forbid their use when querying a service.
*/
export function NoDeprecatedCustomRule(context: ValidationContext): ASTVisitor;

View File

@@ -0,0 +1,79 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NoDeprecatedCustomRule = NoDeprecatedCustomRule;
var _invariant = _interopRequireDefault(require("../../../jsutils/invariant.js"));
var _GraphQLError = require("../../../error/GraphQLError.js");
var _definition = require("../../../type/definition.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* No deprecated
*
* A GraphQL document is only valid if all selected fields and all used enum values have not been
* deprecated.
*
* Note: This rule is optional and is not part of the Validation section of the GraphQL
* Specification. The main purpose of this rule is detection of deprecated usages and not
* necessarily to forbid their use when querying a service.
*/
function NoDeprecatedCustomRule(context) {
return {
Field: function Field(node) {
var fieldDef = context.getFieldDef();
var deprecationReason = fieldDef === null || fieldDef === void 0 ? void 0 : fieldDef.deprecationReason;
if (fieldDef && deprecationReason != null) {
var parentType = context.getParentType();
parentType != null || (0, _invariant.default)(0);
context.reportError(new _GraphQLError.GraphQLError("The field ".concat(parentType.name, ".").concat(fieldDef.name, " is deprecated. ").concat(deprecationReason), node));
}
},
Argument: function Argument(node) {
var argDef = context.getArgument();
var deprecationReason = argDef === null || argDef === void 0 ? void 0 : argDef.deprecationReason;
if (argDef && deprecationReason != null) {
var directiveDef = context.getDirective();
if (directiveDef != null) {
context.reportError(new _GraphQLError.GraphQLError("Directive \"@".concat(directiveDef.name, "\" argument \"").concat(argDef.name, "\" is deprecated. ").concat(deprecationReason), node));
} else {
var parentType = context.getParentType();
var fieldDef = context.getFieldDef();
parentType != null && fieldDef != null || (0, _invariant.default)(0);
context.reportError(new _GraphQLError.GraphQLError("Field \"".concat(parentType.name, ".").concat(fieldDef.name, "\" argument \"").concat(argDef.name, "\" is deprecated. ").concat(deprecationReason), node));
}
}
},
ObjectField: function ObjectField(node) {
var inputObjectDef = (0, _definition.getNamedType)(context.getParentInputType());
if ((0, _definition.isInputObjectType)(inputObjectDef)) {
var inputFieldDef = inputObjectDef.getFields()[node.name.value]; // flowlint-next-line unnecessary-optional-chain:off
var deprecationReason = inputFieldDef === null || inputFieldDef === void 0 ? void 0 : inputFieldDef.deprecationReason;
if (deprecationReason != null) {
context.reportError(new _GraphQLError.GraphQLError("The input field ".concat(inputObjectDef.name, ".").concat(inputFieldDef.name, " is deprecated. ").concat(deprecationReason), node));
}
}
},
EnumValue: function EnumValue(node) {
var enumValueDef = context.getEnumValue();
var deprecationReason = enumValueDef === null || enumValueDef === void 0 ? void 0 : enumValueDef.deprecationReason;
if (enumValueDef && deprecationReason != null) {
var enumTypeDef = (0, _definition.getNamedType)(context.getInputType());
enumTypeDef != null || (0, _invariant.default)(0);
context.reportError(new _GraphQLError.GraphQLError("The enum value \"".concat(enumTypeDef.name, ".").concat(enumValueDef.name, "\" is deprecated. ").concat(deprecationReason), node));
}
}
};
}

View File

@@ -0,0 +1,94 @@
// @flow strict
import invariant from '../../../jsutils/invariant';
import { GraphQLError } from '../../../error/GraphQLError';
import type { ASTVisitor } from '../../../language/visitor';
import { getNamedType, isInputObjectType } from '../../../type/definition';
import type { ValidationContext } from '../../ValidationContext';
/**
* No deprecated
*
* A GraphQL document is only valid if all selected fields and all used enum values have not been
* deprecated.
*
* Note: This rule is optional and is not part of the Validation section of the GraphQL
* Specification. The main purpose of this rule is detection of deprecated usages and not
* necessarily to forbid their use when querying a service.
*/
export function NoDeprecatedCustomRule(context: ValidationContext): ASTVisitor {
return {
Field(node) {
const fieldDef = context.getFieldDef();
const deprecationReason = fieldDef?.deprecationReason;
if (fieldDef && deprecationReason != null) {
const parentType = context.getParentType();
invariant(parentType != null);
context.reportError(
new GraphQLError(
`The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,
node,
),
);
}
},
Argument(node) {
const argDef = context.getArgument();
const deprecationReason = argDef?.deprecationReason;
if (argDef && deprecationReason != null) {
const directiveDef = context.getDirective();
if (directiveDef != null) {
context.reportError(
new GraphQLError(
`Directive "@${directiveDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
node,
),
);
} else {
const parentType = context.getParentType();
const fieldDef = context.getFieldDef();
invariant(parentType != null && fieldDef != null);
context.reportError(
new GraphQLError(
`Field "${parentType.name}.${fieldDef.name}" argument "${argDef.name}" is deprecated. ${deprecationReason}`,
node,
),
);
}
}
},
ObjectField(node) {
const inputObjectDef = getNamedType(context.getParentInputType());
if (isInputObjectType(inputObjectDef)) {
const inputFieldDef = inputObjectDef.getFields()[node.name.value];
// flowlint-next-line unnecessary-optional-chain:off
const deprecationReason = inputFieldDef?.deprecationReason;
if (deprecationReason != null) {
context.reportError(
new GraphQLError(
`The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,
node,
),
);
}
}
},
EnumValue(node) {
const enumValueDef = context.getEnumValue();
const deprecationReason = enumValueDef?.deprecationReason;
if (enumValueDef && deprecationReason != null) {
const enumTypeDef = getNamedType(context.getInputType());
invariant(enumTypeDef != null);
context.reportError(
new GraphQLError(
`The enum value "${enumTypeDef.name}.${enumValueDef.name}" is deprecated. ${deprecationReason}`,
node,
),
);
}
},
};
}

View File

@@ -0,0 +1,68 @@
import invariant from "../../../jsutils/invariant.mjs";
import { GraphQLError } from "../../../error/GraphQLError.mjs";
import { getNamedType, isInputObjectType } from "../../../type/definition.mjs";
/**
* No deprecated
*
* A GraphQL document is only valid if all selected fields and all used enum values have not been
* deprecated.
*
* Note: This rule is optional and is not part of the Validation section of the GraphQL
* Specification. The main purpose of this rule is detection of deprecated usages and not
* necessarily to forbid their use when querying a service.
*/
export function NoDeprecatedCustomRule(context) {
return {
Field: function Field(node) {
var fieldDef = context.getFieldDef();
var deprecationReason = fieldDef === null || fieldDef === void 0 ? void 0 : fieldDef.deprecationReason;
if (fieldDef && deprecationReason != null) {
var parentType = context.getParentType();
parentType != null || invariant(0);
context.reportError(new GraphQLError("The field ".concat(parentType.name, ".").concat(fieldDef.name, " is deprecated. ").concat(deprecationReason), node));
}
},
Argument: function Argument(node) {
var argDef = context.getArgument();
var deprecationReason = argDef === null || argDef === void 0 ? void 0 : argDef.deprecationReason;
if (argDef && deprecationReason != null) {
var directiveDef = context.getDirective();
if (directiveDef != null) {
context.reportError(new GraphQLError("Directive \"@".concat(directiveDef.name, "\" argument \"").concat(argDef.name, "\" is deprecated. ").concat(deprecationReason), node));
} else {
var parentType = context.getParentType();
var fieldDef = context.getFieldDef();
parentType != null && fieldDef != null || invariant(0);
context.reportError(new GraphQLError("Field \"".concat(parentType.name, ".").concat(fieldDef.name, "\" argument \"").concat(argDef.name, "\" is deprecated. ").concat(deprecationReason), node));
}
}
},
ObjectField: function ObjectField(node) {
var inputObjectDef = getNamedType(context.getParentInputType());
if (isInputObjectType(inputObjectDef)) {
var inputFieldDef = inputObjectDef.getFields()[node.name.value]; // flowlint-next-line unnecessary-optional-chain:off
var deprecationReason = inputFieldDef === null || inputFieldDef === void 0 ? void 0 : inputFieldDef.deprecationReason;
if (deprecationReason != null) {
context.reportError(new GraphQLError("The input field ".concat(inputObjectDef.name, ".").concat(inputFieldDef.name, " is deprecated. ").concat(deprecationReason), node));
}
}
},
EnumValue: function EnumValue(node) {
var enumValueDef = context.getEnumValue();
var deprecationReason = enumValueDef === null || enumValueDef === void 0 ? void 0 : enumValueDef.deprecationReason;
if (enumValueDef && deprecationReason != null) {
var enumTypeDef = getNamedType(context.getInputType());
enumTypeDef != null || invariant(0);
context.reportError(new GraphQLError("The enum value \"".concat(enumTypeDef.name, ".").concat(enumValueDef.name, "\" is deprecated. ").concat(deprecationReason), node));
}
}
};
}

View File

@@ -0,0 +1,16 @@
import { ASTVisitor } from '../../../language/visitor';
import { ValidationContext } from '../../ValidationContext';
/**
* Prohibit introspection queries
*
* A GraphQL document is only valid if all fields selected are not fields that
* return an introspection type.
*
* Note: This rule is optional and is not part of the Validation section of the
* GraphQL Specification. This rule effectively disables introspection, which
* does not reflect best practices and should only be done if absolutely necessary.
*/
export function NoSchemaIntrospectionCustomRule(
context: ValidationContext,
): ASTVisitor;

View File

@@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NoSchemaIntrospectionCustomRule = NoSchemaIntrospectionCustomRule;
var _GraphQLError = require("../../../error/GraphQLError.js");
var _definition = require("../../../type/definition.js");
var _introspection = require("../../../type/introspection.js");
/**
* Prohibit introspection queries
*
* A GraphQL document is only valid if all fields selected are not fields that
* return an introspection type.
*
* Note: This rule is optional and is not part of the Validation section of the
* GraphQL Specification. This rule effectively disables introspection, which
* does not reflect best practices and should only be done if absolutely necessary.
*/
function NoSchemaIntrospectionCustomRule(context) {
return {
Field: function Field(node) {
var type = (0, _definition.getNamedType)(context.getType());
if (type && (0, _introspection.isIntrospectionType)(type)) {
context.reportError(new _GraphQLError.GraphQLError("GraphQL introspection has been disabled, but the requested query contained the field \"".concat(node.name.value, "\"."), node));
}
}
};
}

View File

@@ -0,0 +1,38 @@
// @flow strict
import { GraphQLError } from '../../../error/GraphQLError';
import type { FieldNode } from '../../../language/ast';
import type { ASTVisitor } from '../../../language/visitor';
import { getNamedType } from '../../../type/definition';
import { isIntrospectionType } from '../../../type/introspection';
import type { ValidationContext } from '../../ValidationContext';
/**
* Prohibit introspection queries
*
* A GraphQL document is only valid if all fields selected are not fields that
* return an introspection type.
*
* Note: This rule is optional and is not part of the Validation section of the
* GraphQL Specification. This rule effectively disables introspection, which
* does not reflect best practices and should only be done if absolutely necessary.
*/
export function NoSchemaIntrospectionCustomRule(
context: ValidationContext,
): ASTVisitor {
return {
Field(node: FieldNode) {
const type = getNamedType(context.getType());
if (type && isIntrospectionType(type)) {
context.reportError(
new GraphQLError(
`GraphQL introspection has been disabled, but the requested query contained the field "${node.name.value}".`,
node,
),
);
}
},
};
}

View File

@@ -0,0 +1,25 @@
import { GraphQLError } from "../../../error/GraphQLError.mjs";
import { getNamedType } from "../../../type/definition.mjs";
import { isIntrospectionType } from "../../../type/introspection.mjs";
/**
* Prohibit introspection queries
*
* A GraphQL document is only valid if all fields selected are not fields that
* return an introspection type.
*
* Note: This rule is optional and is not part of the Validation section of the
* GraphQL Specification. This rule effectively disables introspection, which
* does not reflect best practices and should only be done if absolutely necessary.
*/
export function NoSchemaIntrospectionCustomRule(context) {
return {
Field: function Field(node) {
var type = getNamedType(context.getType());
if (type && isIntrospectionType(type)) {
context.reportError(new GraphQLError("GraphQL introspection has been disabled, but the requested query contained the field \"".concat(node.name.value, "\"."), node));
}
}
};
}