From baa6a5d51b822db1ef90ac8238f837f03337d2ee Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Mon, 24 May 2021 22:32:18 +0300 Subject: [PATCH] Fix TSC errors --- src/error/GraphQLError.ts | 6 ++++-- src/error/locatedError.ts | 1 + src/execution/execute.ts | 5 +++-- src/jsutils/__tests__/inspect-test.ts | 2 +- src/jsutils/__tests__/isIterableObject-test.ts | 2 +- src/jsutils/inspect.ts | 2 ++ src/jsutils/isPromise.ts | 3 ++- src/language/__tests__/printer-test.ts | 5 ++++- src/language/__tests__/schema-printer-test.ts | 2 +- src/language/__tests__/toJSONDeep.ts | 1 - src/language/__tests__/visitor-test.ts | 7 +++++-- src/language/ast.ts | 3 ++- src/language/parser.ts | 3 --- src/language/printLocation.ts | 5 ++++- .../__tests__/mapAsyncIterator-test.ts | 12 +++++++----- src/subscription/__tests__/subscribe-test.ts | 12 ++++++------ src/type/__tests__/introspection-test.ts | 4 ++-- src/type/definition.ts | 10 ++++++++++ src/type/introspection.ts | 4 ++++ src/type/scalars.ts | 1 - src/type/validate.ts | 16 ++++++++++++---- .../__tests__/buildClientSchema-test.ts | 2 ++ src/utilities/__tests__/coerceInputValue-test.ts | 5 +---- .../__tests__/getOperationRootType-test.ts | 7 ++++--- src/utilities/extendSchema.ts | 2 ++ src/utilities/introspectionFromSchema.ts | 3 +-- src/utilities/lexicographicSortSchema.ts | 3 ++- src/utilities/separateOperations.ts | 2 +- src/utilities/typeFromAST.ts | 4 ++++ src/validation/rules/KnownDirectivesRule.ts | 3 +++ src/validation/rules/KnownTypeNamesRule.ts | 1 + .../rules/ProvidedRequiredArgumentsRule.ts | 6 +++++- .../rules/UniqueDirectivesPerLocationRule.ts | 2 ++ 33 files changed, 99 insertions(+), 47 deletions(-) diff --git a/src/error/GraphQLError.ts b/src/error/GraphQLError.ts index fc41673ec36..68ddeda7029 100644 --- a/src/error/GraphQLError.ts +++ b/src/error/GraphQLError.ts @@ -98,8 +98,10 @@ export class GraphQLError extends Error { _source = _nodes[0].loc?.source; } - let _positions = positions; - if (!_positions && _nodes) { + let _positions; + if (positions) { + _positions = positions; + } else if (_nodes) { _positions = []; for (const node of _nodes) { if (node.loc) { diff --git a/src/error/locatedError.ts b/src/error/locatedError.ts index c081f464e06..286408f792f 100644 --- a/src/error/locatedError.ts +++ b/src/error/locatedError.ts @@ -22,6 +22,7 @@ export function locatedError( : new Error('Unexpected error value: ' + inspect(rawOriginalError)); // Note: this uses a brand-check to support GraphQL errors originating from other contexts. + // @ts-expect-error FIXME: TS Conversion if (Array.isArray(originalError.path)) { // @ts-expect-error return originalError; diff --git a/src/execution/execute.ts b/src/execution/execute.ts index 2b66dfe6c5c..923d018d1ad 100644 --- a/src/execution/execute.ts +++ b/src/execution/execute.ts @@ -191,7 +191,9 @@ export function execute(args: ExecutionArgs): PromiseOrValue { // field and its descendants will be omitted, and sibling fields will still // be executed. An execution which encounters errors will still result in a // resolved Promise. + // @ts-expect-error FIXME: TS Conversion const data = executeOperation(exeContext, exeContext.operation, rootValue); + // @ts-expect-error FIXME: TS Conversion return buildResponse(exeContext, data); } @@ -313,7 +315,6 @@ export function buildExecutionContext( return coercedVariableValues.errors; } - // @ts-expect-error return { schema, fragments, @@ -1078,7 +1079,7 @@ function _collectSubfields( fieldNodes: ReadonlyArray, ): Map> { let subFieldNodes = new Map(); - const visitedFragmentNames = new Set(); + const visitedFragmentNames = new Set(); for (const node of fieldNodes) { if (node.selectionSet) { subFieldNodes = collectFields( diff --git a/src/jsutils/__tests__/inspect-test.ts b/src/jsutils/__tests__/inspect-test.ts index dbe74887167..a4f17177acf 100644 --- a/src/jsutils/__tests__/inspect-test.ts +++ b/src/jsutils/__tests__/inspect-test.ts @@ -124,7 +124,7 @@ describe('inspect', () => { }); it('detect circular objects', () => { - const obj = {}; + const obj: { [name: string]: unknown } = {}; obj.self = obj; obj.deepSelf = { self: obj }; diff --git a/src/jsutils/__tests__/isIterableObject-test.ts b/src/jsutils/__tests__/isIterableObject-test.ts index 3338638de57..3997a69e09c 100644 --- a/src/jsutils/__tests__/isIterableObject-test.ts +++ b/src/jsutils/__tests__/isIterableObject-test.ts @@ -60,7 +60,7 @@ describe('isIterableObject', () => { }; expect(isIterableObject(invalidIterable)).to.equal(false); - const arrayLike = {}; + const arrayLike: { [key: string]: unknown } = {}; arrayLike[0] = 'Alpha'; arrayLike[1] = 'Bravo'; arrayLike[2] = 'Charlie'; diff --git a/src/jsutils/inspect.ts b/src/jsutils/inspect.ts index f204bbeaf56..4616edc316e 100644 --- a/src/jsutils/inspect.ts +++ b/src/jsutils/inspect.ts @@ -35,7 +35,9 @@ function formatObjectValue( const seenValues = [...previouslySeenValues, value]; + // @ts-expect-error FIXME: TS Conversion if (typeof value.toJSON === 'function') { + // @ts-expect-error FIXME: TS Conversion const jsonValue = (value.toJSON as () => unknown)(); // check for infinite recursion diff --git a/src/jsutils/isPromise.ts b/src/jsutils/isPromise.ts index 94e93e24ec1..69b0a9910e0 100644 --- a/src/jsutils/isPromise.ts +++ b/src/jsutils/isPromise.ts @@ -3,5 +3,6 @@ * otherwise returns false. */ export function isPromise(value: unknown): value is Promise { - return typeof value?.then === 'function'; + // eslint-disable-next-line @typescript-eslint/dot-notation + return typeof value?.['then'] === 'function'; } diff --git a/src/language/__tests__/printer-test.ts b/src/language/__tests__/printer-test.ts index bae12edd21d..cfa1e140523 100644 --- a/src/language/__tests__/printer-test.ts +++ b/src/language/__tests__/printer-test.ts @@ -9,7 +9,10 @@ import { print } from '../printer'; describe('Printer: Query document', () => { it('prints minimal ast', () => { - const ast = { kind: 'Field', name: { kind: 'Name', value: 'foo' } }; + const ast = { + kind: 'Field', + name: { kind: 'Name', value: 'foo' }, + } as const; expect(print(ast)).to.equal('foo'); }); diff --git a/src/language/__tests__/schema-printer-test.ts b/src/language/__tests__/schema-printer-test.ts index aa85ff2b5ae..9ad03393941 100644 --- a/src/language/__tests__/schema-printer-test.ts +++ b/src/language/__tests__/schema-printer-test.ts @@ -12,7 +12,7 @@ describe('Printer: SDL document', () => { const ast = { kind: 'ScalarTypeDefinition', name: { kind: 'Name', value: 'foo' }, - }; + } as const; expect(print(ast)).to.equal('scalar foo'); }); diff --git a/src/language/__tests__/toJSONDeep.ts b/src/language/__tests__/toJSONDeep.ts index 612ed406412..a82606252aa 100644 --- a/src/language/__tests__/toJSONDeep.ts +++ b/src/language/__tests__/toJSONDeep.ts @@ -11,7 +11,6 @@ export function toJSONDeep(value: unknown): unknown { } if (typeof value.toJSON === 'function') { - // @ts-expect-error return value.toJSON(); } diff --git a/src/language/__tests__/visitor-test.ts b/src/language/__tests__/visitor-test.ts index 80d9029c07f..0565af0f387 100644 --- a/src/language/__tests__/visitor-test.ts +++ b/src/language/__tests__/visitor-test.ts @@ -4,6 +4,7 @@ import { describe, it } from 'mocha'; import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery'; import type { ASTNode } from '../ast'; +import { isNode } from '../ast'; import { Kind } from '../kinds'; import { parse } from '../parser'; import { visit, visitInParallel, BREAK } from '../visitor'; @@ -50,6 +51,7 @@ function checkVisitorFnArgs(ast: any, args: any, isEdited: boolean = false) { } function getValue(node: ASTNode) { + // @ts-expect-error FIXME return node.value != null ? node.value : undefined; } @@ -263,6 +265,7 @@ describe('Visitor', () => { if (node.kind === 'Field' && node.name.value === 'a') { return { kind: 'Field', + // @ts-expect-error FIXME selectionSet: [addedField].concat(node.selectionSet), }; } @@ -522,7 +525,7 @@ describe('Visitor', () => { 'enter', node.kind, key, - parent?.kind != null ? parent.kind : undefined, + isNode(parent) ? parent.kind : undefined, ]); checkVisitorFnArgs(ast, arguments); @@ -534,7 +537,7 @@ describe('Visitor', () => { 'leave', node.kind, key, - parent?.kind != null ? parent.kind : undefined, + isNode(parent) ? parent.kind : undefined, ]); expect(argsStack.pop()).to.deep.equal([...arguments]); diff --git a/src/language/ast.ts b/src/language/ast.ts index 104424be829..02c73703400 100644 --- a/src/language/ast.ts +++ b/src/language/ast.ts @@ -125,7 +125,8 @@ export class Token { * @internal */ export function isNode(maybeNode: unknown): maybeNode is ASTNode { - return maybeNode != null && typeof maybeNode.kind === 'string'; + // eslint-disable-next-line @typescript-eslint/dot-notation + return typeof maybeNode?.['kind'] === 'string'; } /** diff --git a/src/language/parser.ts b/src/language/parser.ts index 518c40f9cf2..4d5e33217c4 100644 --- a/src/language/parser.ts +++ b/src/language/parser.ts @@ -440,7 +440,6 @@ export class Parser { } parseConstArgument(): ConstArgumentNode { - // @ts-expect-error FIXME during TS conversion return this.parseArgument(true); } @@ -610,7 +609,6 @@ export class Parser { } parseConstValueLiteral(): ConstValueNode { - // @ts-expect-error FIXME during TS conversion return this.parseValueLiteral(true); } @@ -695,7 +693,6 @@ export class Parser { } parseConstDirectives(): Array { - // @ts-expect-error FIXME during TS conversion return this.parseDirectives(true); } diff --git a/src/language/printLocation.ts b/src/language/printLocation.ts index faa9fda6b23..bcfbda2fca7 100644 --- a/src/language/printLocation.ts +++ b/src/language/printLocation.ts @@ -38,7 +38,7 @@ export function printSourceLocation( if (locationLine.length > 120) { const subLineIndex = Math.floor(columnNum / 80); const subLineColumnNum = columnNum % 80; - const subLines = []; + const subLines: Array = []; for (let i = 0; i < locationLine.length; i += 80) { subLines.push(locationLine.slice(i, i + 80)); } @@ -47,8 +47,11 @@ export function printSourceLocation( locationStr + printPrefixedLines([ [`${lineNum} |`, subLines[0]], + // @ts-expect-error FIXME ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]), + // @ts-expect-error FIXME ['|', '^'.padStart(subLineColumnNum)], + // @ts-expect-error FIXME ['|', subLines[subLineIndex + 1]], ]) ); diff --git a/src/subscription/__tests__/mapAsyncIterator-test.ts b/src/subscription/__tests__/mapAsyncIterator-test.ts index a73ea36e5cf..e5e374e2567 100644 --- a/src/subscription/__tests__/mapAsyncIterator-test.ts +++ b/src/subscription/__tests__/mapAsyncIterator-test.ts @@ -105,6 +105,7 @@ describe('mapAsyncIterator', () => { expect(await doubles.next()).to.deep.equal({ value: 4, done: false }); // Early return + // @ts-expect-error FIXME: TS Conversion expect(await doubles.return()).to.deep.equal({ value: 'The End', done: true, @@ -142,6 +143,7 @@ describe('mapAsyncIterator', () => { expect(await doubles.next()).to.deep.equal({ value: 4, done: false }); // Early return + // @ts-expect-error FIXME: TS Conversion expect(await doubles.return()).to.deep.equal({ value: undefined, done: true, @@ -151,11 +153,11 @@ describe('mapAsyncIterator', () => { it('passes through early return from async values', async () => { async function* source() { try { - yield 1; - yield 2; + yield 'a'; + yield 'b'; // istanbul ignore next (Shouldn't be reached) - yield 3; + yield 'c'; } finally { yield 'Done'; yield 'Last'; @@ -164,8 +166,8 @@ describe('mapAsyncIterator', () => { const doubles = mapAsyncIterator(source(), (x) => x + x); - expect(await doubles.next()).to.deep.equal({ value: 2, done: false }); - expect(await doubles.next()).to.deep.equal({ value: 4, done: false }); + expect(await doubles.next()).to.deep.equal({ value: 'aa', done: false }); + expect(await doubles.next()).to.deep.equal({ value: 'bb', done: false }); // Early return expect(await doubles.return()).to.deep.equal({ diff --git a/src/subscription/__tests__/subscribe-test.ts b/src/subscription/__tests__/subscribe-test.ts index 75c37c988c2..85a0a7e5742 100644 --- a/src/subscription/__tests__/subscribe-test.ts +++ b/src/subscription/__tests__/subscribe-test.ts @@ -482,7 +482,7 @@ describe('Subscription Initialization Phase', () => { // Once a subscription returns a valid AsyncIterator, it can still yield errors. describe('Subscription Publish Phase', () => { it('produces a payload for multiple subscribe in same subscription', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); @@ -525,7 +525,7 @@ describe('Subscription Publish Phase', () => { }); it('produces a payload per subscription event', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); @@ -614,7 +614,7 @@ describe('Subscription Publish Phase', () => { }); it('produces a payload when there are multiple events', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); @@ -680,7 +680,7 @@ describe('Subscription Publish Phase', () => { }); it('should not trigger when subscription is already done', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); @@ -734,7 +734,7 @@ describe('Subscription Publish Phase', () => { }); it('should not trigger when subscription is thrown', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); @@ -786,7 +786,7 @@ describe('Subscription Publish Phase', () => { }); it('event order is correct for multiple publishes', async () => { - const pubsub = new SimplePubSub(); + const pubsub = new SimplePubSub(); const subscription = await createSubscription(pubsub); invariant(isAsyncIterable(subscription)); diff --git a/src/type/__tests__/introspection-test.ts b/src/type/__tests__/introspection-test.ts index 9db9470e975..3a01af5a527 100644 --- a/src/type/__tests__/introspection-test.ts +++ b/src/type/__tests__/introspection-test.ts @@ -1566,12 +1566,12 @@ describe('Introspection', () => { }); // istanbul ignore next (Called only to fail test) - function fieldResolver(_1, _2, _3, info) { + function fieldResolver(_1, _2, _3, info): never { expect.fail(`Called on ${info.parentType.name}::${info.fieldName}`); } // istanbul ignore next (Called only to fail test) - function typeResolver(_1, _2, info) { + function typeResolver(_1, _2, info): never { expect.fail(`Called on ${info.parentType.name}::${info.fieldName}`); } diff --git a/src/type/definition.ts b/src/type/definition.ts index ea7b90b54b9..3d38a43d5a2 100644 --- a/src/type/definition.ts +++ b/src/type/definition.ts @@ -180,6 +180,15 @@ export function assertListType(type: unknown): GraphQLList { return type; } +export function isNonNullType( + type: GraphQLInputType, +): type is GraphQLNonNull; +export function isNonNullType( + type: GraphQLOutputType, +): type is GraphQLNonNull; +export function isNonNullType( + type: unknown, +): type is GraphQLNonNull; export function isNonNullType( type: unknown, ): type is GraphQLNonNull { @@ -819,6 +828,7 @@ function defineFieldMap( `${config.name} fields must be an object with field names as keys or a function which returns such an object.`, ); + // @ts-expect-error FIXME: TS Conversion return mapValue(fieldMap, (fieldConfig, fieldName) => { devAssert( isPlainObj(fieldConfig), diff --git a/src/type/introspection.ts b/src/type/introspection.ts index 3560c8f8124..1a9a655b919 100644 --- a/src/type/introspection.ts +++ b/src/type/introspection.ts @@ -234,16 +234,19 @@ export const __Type: GraphQLObjectType = new GraphQLObjectType({ }, name: { type: GraphQLString, + // @ts-expect-error FIXME: TS Conversion resolve: (type) => (type.name !== undefined ? type.name : undefined), }, description: { type: GraphQLString, resolve: (type) => + // @ts-expect-error FIXME: TS Conversion type.description !== undefined ? type.description : undefined, }, specifiedByURL: { type: GraphQLString, resolve: (obj) => + // @ts-expect-error FIXME: TS Conversion obj.specifiedByURL !== undefined ? obj.specifiedByURL : undefined, }, fields: { @@ -310,6 +313,7 @@ export const __Type: GraphQLObjectType = new GraphQLObjectType({ ofType: { type: __Type, resolve: (type) => + // @ts-expect-error FIXME: TS Conversion type.ofType !== undefined ? type.ofType : undefined, }, } as GraphQLFieldConfigMap), diff --git a/src/type/scalars.ts b/src/type/scalars.ts index 2d590c9e73f..b8a4ee11f49 100644 --- a/src/type/scalars.ts +++ b/src/type/scalars.ts @@ -139,7 +139,6 @@ function serializeObject(outputValue: unknown): unknown { } } if (typeof outputValue.toJSON === 'function') { - // @ts-expect-error return outputValue.toJSON(); } } diff --git a/src/type/validate.ts b/src/type/validate.ts index a8c58e899b4..65062401c79 100644 --- a/src/type/validate.ts +++ b/src/type/validate.ts @@ -117,6 +117,7 @@ function validateRootTypes(context: SchemaValidationContext): void { `Query root type must be Object type, it cannot be ${inspect( queryType, )}.`, + // @ts-expect-error FIXME: TS Conversion getOperationTypeNode(schema, 'query') ?? queryType.astNode, ); } @@ -126,6 +127,7 @@ function validateRootTypes(context: SchemaValidationContext): void { context.reportError( 'Mutation root type must be Object type if provided, it cannot be ' + `${inspect(mutationType)}.`, + // @ts-expect-error FIXME: TS Conversion getOperationTypeNode(schema, 'mutation') ?? mutationType.astNode, ); } @@ -135,6 +137,7 @@ function validateRootTypes(context: SchemaValidationContext): void { context.reportError( 'Subscription root type must be Object type if provided, it cannot be ' + `${inspect(subscriptionType)}.`, + // @ts-expect-error FIXME: TS Conversion getOperationTypeNode(schema, 'subscription') ?? subscriptionType.astNode, ); } @@ -145,10 +148,13 @@ function getOperationTypeNode( operation: OperationTypeNode, ): Maybe { // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203') - return [schema.astNode] - .concat(schema.extensionASTNodes) - .flatMap((schemaNode) => schemaNode?.operationTypes ?? []) - .find((operationNode) => operationNode.operation === operation)?.type; + return ( + [schema.astNode] + // @ts-expect-error FIXME: TS Conversion + .concat(schema.extensionASTNodes) + .flatMap((schemaNode) => schemaNode?.operationTypes ?? []) + .find((operationNode) => operationNode.operation === operation)?.type + ); } function validateDirectives(context: SchemaValidationContext): void { @@ -157,6 +163,7 @@ function validateDirectives(context: SchemaValidationContext): void { if (!isDirective(directive)) { context.reportError( `Expected directive but got: ${inspect(directive)}.`, + // @ts-expect-error FIXME: TS Conversion directive?.astNode, ); continue; @@ -211,6 +218,7 @@ function validateTypes(context: SchemaValidationContext): void { if (!isNamedType(type)) { context.reportError( `Expected GraphQL named type but got: ${inspect(type)}.`, + // @ts-expect-error FIXME: TS Conversion type.astNode, ); continue; diff --git a/src/utilities/__tests__/buildClientSchema-test.ts b/src/utilities/__tests__/buildClientSchema-test.ts index 9c6f4b83d5c..49c4253b532 100644 --- a/src/utilities/__tests__/buildClientSchema-test.ts +++ b/src/utilities/__tests__/buildClientSchema-test.ts @@ -770,6 +770,7 @@ describe('Type System: build schema from introspection', () => { invariant(argType.kind === 'SCALAR'); expect(argType).to.have.property('name', 'String'); + // @ts-expect-error argType.name = 'SomeUnion'; expect(() => buildClientSchema(introspection)).to.throw( @@ -788,6 +789,7 @@ describe('Type System: build schema from introspection', () => { invariant(fieldType.kind === 'SCALAR'); expect(fieldType).to.have.property('name', 'String'); + // @ts-expect-error fieldType.name = 'SomeInputObject'; expect(() => buildClientSchema(introspection)).to.throw( diff --git a/src/utilities/__tests__/coerceInputValue-test.ts b/src/utilities/__tests__/coerceInputValue-test.ts index d587a7547f7..79ee43de234 100644 --- a/src/utilities/__tests__/coerceInputValue-test.ts +++ b/src/utilities/__tests__/coerceInputValue-test.ts @@ -1,8 +1,6 @@ import { expect } from 'chai'; import { describe, it } from 'mocha'; -import { invariant } from '../../jsutils/invariant'; - import type { GraphQLInputType } from '../../type/definition'; import { GraphQLInt } from '../../type/scalars'; import { @@ -84,8 +82,7 @@ describe('coerceInputValue', () => { describe('for GraphQLScalar', () => { const TestScalar = new GraphQLScalarType({ name: 'TestScalar', - parseValue(input) { - invariant(typeof input === 'object' && input !== null); + parseValue(input: { error?: string; value?: unknown }) { if (input.error != null) { throw new Error(input.error); } diff --git a/src/utilities/__tests__/getOperationRootType-test.ts b/src/utilities/__tests__/getOperationRootType-test.ts index 2c6d299a24c..f730e7810a5 100644 --- a/src/utilities/__tests__/getOperationRootType-test.ts +++ b/src/utilities/__tests__/getOperationRootType-test.ts @@ -3,7 +3,7 @@ import { describe, it } from 'mocha'; import { invariant } from '../../jsutils/invariant'; -import type { DocumentNode } from '../../language/ast'; +import type { DocumentNode, OperationDefinitionNode } from '../../language/ast'; import { Kind } from '../../language/kinds'; import { parse } from '../../language/parser'; @@ -34,7 +34,7 @@ const subscriptionType = new GraphQLObjectType({ }), }); -function getOperationNode(doc: DocumentNode) { +function getOperationNode(doc: DocumentNode): OperationDefinitionNode { const operationNode = doc.definitions[0]; invariant(operationNode.kind === Kind.OPERATION_DEFINITION); return operationNode; @@ -146,8 +146,9 @@ describe('getOperationRootType', () => { it('Throws when operation not a valid operation kind', () => { const testSchema = new GraphQLSchema({}); const doc = parse('{ field }'); - const operationNode = { + const operationNode: OperationDefinitionNode = { ...getOperationNode(doc), + // @ts-expect-error operation: 'non_existent_operation', }; diff --git a/src/utilities/extendSchema.ts b/src/utilities/extendSchema.ts index 906dd849d65..5ad120afb68 100644 --- a/src/utilities/extendSchema.ts +++ b/src/utilities/extendSchema.ts @@ -224,6 +224,7 @@ export function extendSchemaImpl( // @ts-expect-error return new GraphQLNonNull(replaceType(type.ofType)); } + // @ts-expect-error FIXME return replaceNamedType(type); } @@ -655,6 +656,7 @@ export function extendSchemaImpl( } const stdTypeMap = keyMap( + // @ts-expect-error FIXME specifiedScalarTypes.concat(introspectionTypes), (type) => type.name, ); diff --git a/src/utilities/introspectionFromSchema.ts b/src/utilities/introspectionFromSchema.ts index 8d30e9bce66..105f5bc0559 100644 --- a/src/utilities/introspectionFromSchema.ts +++ b/src/utilities/introspectionFromSchema.ts @@ -36,7 +36,6 @@ export function introspectionFromSchema( const document = parse(getIntrospectionQuery(optionsWithDefaults)); const result = executeSync({ schema, document }); invariant(!result.errors && result.data); - // $FlowIgnore[incompatible-indexer] - // $FlowIgnore[incompatible-return] + // @ts-expect-error FIXME return result.data; } diff --git a/src/utilities/lexicographicSortSchema.ts b/src/utilities/lexicographicSortSchema.ts index e87106a229c..990ce3727c8 100644 --- a/src/utilities/lexicographicSortSchema.ts +++ b/src/utilities/lexicographicSortSchema.ts @@ -63,7 +63,8 @@ export function lexicographicSortSchema(schema: GraphQLSchema): GraphQLSchema { // @ts-expect-error return new GraphQLNonNull(replaceType(type.ofType)); } - return replaceNamedType(type); + // @ts-expect-error + return replaceNamedType(type); } function replaceNamedType(type: T): T { diff --git a/src/utilities/separateOperations.ts b/src/utilities/separateOperations.ts index 5da3c1d1ea4..6f33d4a2342 100644 --- a/src/utilities/separateOperations.ts +++ b/src/utilities/separateOperations.ts @@ -38,7 +38,7 @@ export function separateOperations( // is necessary for completing that operation. const separatedDocumentASTs = Object.create(null); for (const operation of operations) { - const dependencies = new Set(); + const dependencies = new Set(); for (const fragmentName of collectDependencies(operation.selectionSet)) { collectTransitiveDependencies(dependencies, depGraph, fragmentName); diff --git a/src/utilities/typeFromAST.ts b/src/utilities/typeFromAST.ts index 9c959784f6f..5b3b3f20860 100644 --- a/src/utilities/typeFromAST.ts +++ b/src/utilities/typeFromAST.ts @@ -33,6 +33,10 @@ export function typeFromAST( schema: GraphQLSchema, typeNode: NonNullTypeNode, ): GraphQLNonNull | undefined; +export function typeFromAST( + schema: GraphQLSchema, + typeNode: TypeNode, +): GraphQLType | undefined; export function typeFromAST( schema: GraphQLSchema, typeNode: TypeNode, diff --git a/src/validation/rules/KnownDirectivesRule.ts b/src/validation/rules/KnownDirectivesRule.ts index 04b98566caf..46bc1a16e79 100644 --- a/src/validation/rules/KnownDirectivesRule.ts +++ b/src/validation/rules/KnownDirectivesRule.ts @@ -73,8 +73,10 @@ function getDirectiveLocationForASTPath( const appliedTo = ancestors[ancestors.length - 1]; invariant(!Array.isArray(appliedTo)); + // @ts-expect-error switch (appliedTo.kind) { case Kind.OPERATION_DEFINITION: + // @ts-expect-error return getDirectiveLocationForOperation(appliedTo.operation); case Kind.FIELD: return DirectiveLocation.FIELD; @@ -113,6 +115,7 @@ function getDirectiveLocationForASTPath( return DirectiveLocation.INPUT_OBJECT; case Kind.INPUT_VALUE_DEFINITION: { const parentNode = ancestors[ancestors.length - 3]; + // @ts-expect-error return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ? DirectiveLocation.INPUT_FIELD_DEFINITION : DirectiveLocation.ARGUMENT_DEFINITION; diff --git a/src/validation/rules/KnownTypeNamesRule.ts b/src/validation/rules/KnownTypeNamesRule.ts index 6d2ec6985b3..ba0fcbf5d95 100644 --- a/src/validation/rules/KnownTypeNamesRule.ts +++ b/src/validation/rules/KnownTypeNamesRule.ts @@ -75,6 +75,7 @@ const standardTypeNames = [...specifiedScalarTypes, ...introspectionTypes].map( function isSDLNode(value: ASTNode | ReadonlyArray): boolean { return ( !Array.isArray(value) && + // @ts-expect-error FIXME (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value)) ); } diff --git a/src/validation/rules/ProvidedRequiredArgumentsRule.ts b/src/validation/rules/ProvidedRequiredArgumentsRule.ts index 0ddc8f784dc..e5c970d24f8 100644 --- a/src/validation/rules/ProvidedRequiredArgumentsRule.ts +++ b/src/validation/rules/ProvidedRequiredArgumentsRule.ts @@ -1,5 +1,6 @@ import { inspect } from '../../jsutils/inspect'; import { keyMap } from '../../jsutils/keyMap'; +import type { ObjMap } from '../../jsutils/ObjMap'; import { GraphQLError } from '../../error/GraphQLError'; @@ -10,6 +11,7 @@ import { print } from '../../language/printer'; import { specifiedDirectives } from '../../type/directives'; import { isType, isRequiredArgument } from '../../type/definition'; +import type { GraphQLArgument } from '../../type/definition'; import type { ValidationContext, @@ -62,7 +64,9 @@ export function ProvidedRequiredArgumentsRule( export function ProvidedRequiredArgumentsOnDirectivesRule( context: ValidationContext | SDLValidationContext, ): ASTVisitor { - const requiredArgsMap = Object.create(null); + const requiredArgsMap: ObjMap< + ObjMap + > = Object.create(null); const schema = context.getSchema(); const definedDirectives = schema?.getDirectives() ?? specifiedDirectives; diff --git a/src/validation/rules/UniqueDirectivesPerLocationRule.ts b/src/validation/rules/UniqueDirectivesPerLocationRule.ts index a21c0817903..bbe9647500c 100644 --- a/src/validation/rules/UniqueDirectivesPerLocationRule.ts +++ b/src/validation/rules/UniqueDirectivesPerLocationRule.ts @@ -48,6 +48,7 @@ export function UniqueDirectivesPerLocationRule( // them all, just listen for entering any node, and check to see if it // defines any directives. enter(node) { + // @ts-expect-error if (node.directives == null) { return; } @@ -68,6 +69,7 @@ export function UniqueDirectivesPerLocationRule( seenDirectives = Object.create(null); } + // @ts-expect-error for (const directive of node.directives) { const directiveName = directive.name.value;