From 19c2a7ae9a768751222a99e754130a98a0695512 Mon Sep 17 00:00:00 2001 From: Alle <111279668+a-alle@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:15:45 +0000 Subject: [PATCH] Add deprecated directives to AggregationWhereInput (#4797) --- .changeset/violet-penguins-relate.md | 5 ++ .../create-relationship-fields.ts | 14 +++- .../src/schema/generation/aggregate-types.ts | 69 +++++++++++++++---- .../src/schema/generation/where-input.ts | 3 + .../tests/schema/directive-preserve.test.ts | 31 +++++---- .../directive-preserve.test.ts | 31 +++++---- .../graphql/tests/schema/issues/2187.test.ts | 30 ++++---- 7 files changed, 123 insertions(+), 60 deletions(-) create mode 100644 .changeset/violet-penguins-relate.md diff --git a/.changeset/violet-penguins-relate.md b/.changeset/violet-penguins-relate.md new file mode 100644 index 0000000000..070bd8e050 --- /dev/null +++ b/.changeset/violet-penguins-relate.md @@ -0,0 +1,5 @@ +--- +"@neo4j/graphql": patch +--- + +Fix user defined deprecated directives not propagated on all generated types diff --git a/packages/graphql/src/schema/create-relationship-fields/create-relationship-fields.ts b/packages/graphql/src/schema/create-relationship-fields/create-relationship-fields.ts index 9cae305165..a257e10801 100644 --- a/packages/graphql/src/schema/create-relationship-fields/create-relationship-fields.ts +++ b/packages/graphql/src/schema/create-relationship-fields/create-relationship-fields.ts @@ -226,6 +226,9 @@ export function createRelationshipFields({ const deprecatedDirectives = graphqlDirectivesToCompose( (userDefinedDirectivesOnField || []).filter((directive) => directive.name.value === DEPRECATED) ); + const userDefinedDirectivesOnTargetFields = userDefinedFieldDirectivesForNode.get( + relationshipAdapter.target.name + ); const relationshipFieldsOpts: { relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter; @@ -233,6 +236,7 @@ export function createRelationshipFields({ composeNode: ObjectTypeComposer | InterfaceTypeComposer; userDefinedFieldDirectives: Map; deprecatedDirectives: Directive[]; + userDefinedDirectivesOnTargetFields: Map | undefined; subgraph?: Subgraph; } = { relationshipAdapter, @@ -240,6 +244,7 @@ export function createRelationshipFields({ composeNode, userDefinedFieldDirectives, deprecatedDirectives, + userDefinedDirectivesOnTargetFields, }; if (relationshipTarget instanceof UnionEntityAdapter) { @@ -285,16 +290,23 @@ function createRelationshipFieldsForTarget({ composeNode, userDefinedFieldDirectives, deprecatedDirectives, + userDefinedDirectivesOnTargetFields, subgraph, // only for concrete targets }: { relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter; composer: SchemaComposer; composeNode: ObjectTypeComposer | InterfaceTypeComposer; userDefinedFieldDirectives: Map; + userDefinedDirectivesOnTargetFields: Map | undefined; deprecatedDirectives: Directive[]; subgraph?: Subgraph; }) { - withSourceWhereInputType({ relationshipAdapter, composer, deprecatedDirectives }); + withSourceWhereInputType({ + relationshipAdapter, + composer, + deprecatedDirectives, + userDefinedDirectivesOnTargetFields, + }); if (relationshipAdapter.target instanceof InterfaceEntityAdapter) { withFieldInputType({ relationshipAdapter, composer, userDefinedFieldDirectives }); diff --git a/packages/graphql/src/schema/generation/aggregate-types.ts b/packages/graphql/src/schema/generation/aggregate-types.ts index 84b70562fe..b6a515e4ab 100644 --- a/packages/graphql/src/schema/generation/aggregate-types.ts +++ b/packages/graphql/src/schema/generation/aggregate-types.ts @@ -25,7 +25,7 @@ import type { ObjectTypeComposerFieldConfigMapDefinition, SchemaComposer, } from "graphql-compose"; -import { AGGREGATION_COMPARISON_OPERATORS } from "../../constants"; +import { AGGREGATION_COMPARISON_OPERATORS, DEPRECATED } from "../../constants"; import type { AttributeAdapter } from "../../schema-model/attribute/model-adapters/AttributeAdapter"; import { ConcreteEntityAdapter } from "../../schema-model/entity/model-adapters/ConcreteEntityAdapter"; import type { InterfaceEntityAdapter } from "../../schema-model/entity/model-adapters/InterfaceEntityAdapter"; @@ -84,10 +84,12 @@ export function withAggregateInputType({ relationshipAdapter, entityAdapter, // TODO: this is relationshipAdapter.target but from the context above it is known to be ConcreteEntity and we don't know this yet!!! composer, + userDefinedDirectivesOnTargetFields, }: { relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter; entityAdapter: ConcreteEntityAdapter; composer: SchemaComposer; + userDefinedDirectivesOnTargetFields: Map | undefined; }): InputTypeComposer { const aggregateInputTypeName = relationshipAdapter.operations.aggregateInputTypeName; if (composer.has(aggregateInputTypeName)) { @@ -113,6 +115,7 @@ export function withAggregateInputType({ relationshipAdapter, entityAdapter, composer, + userDefinedDirectivesOnTargetFields, }); if (nodeWhereInputType) { aggregateSelection.addFields({ node: nodeWhereInputType }); @@ -121,6 +124,7 @@ export function withAggregateInputType({ relationshipAdapter, entityAdapter: relationshipAdapter, composer, + userDefinedDirectivesOnTargetFields, }); if (edgeWhereInputType) { aggregateSelection.addFields({ edge: edgeWhereInputType }); @@ -132,10 +136,12 @@ function withAggregationWhereInputType({ relationshipAdapter, entityAdapter, composer, + userDefinedDirectivesOnTargetFields, }: { relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter; entityAdapter: ConcreteEntityAdapter | RelationshipAdapter | RelationshipDeclarationAdapter; composer: SchemaComposer; + userDefinedDirectivesOnTargetFields: Map | undefined; }): InputTypeComposer | undefined { const aggregationInputName = entityAdapter instanceof ConcreteEntityAdapter @@ -160,20 +166,31 @@ function withAggregationWhereInputType({ OR: aggregationInput.NonNull.List, NOT: aggregationInput, }); - aggregationInput.addFields(makeAggregationFields(aggregationFields)); + aggregationInput.addFields(makeAggregationFields(aggregationFields, userDefinedDirectivesOnTargetFields)); return aggregationInput; } -function makeAggregationFields(attributes: AttributeAdapter[]): InputTypeComposerFieldConfigMapDefinition { +function makeAggregationFields( + attributes: AttributeAdapter[], + userDefinedDirectivesOnTargetFields: Map | undefined +): InputTypeComposerFieldConfigMapDefinition { const aggregationFields = attributes - .map((attribute) => getAggregationFieldsByType(attribute)) + .map((attribute) => + getAggregationFieldsByType(attribute, userDefinedDirectivesOnTargetFields?.get(attribute.name)) + ) .reduce((acc, el) => ({ ...acc, ...el }), {}); return aggregationFields; } // TODO: refactor this by introducing specialized Adapters -function getAggregationFieldsByType(attribute: AttributeAdapter): InputTypeComposerFieldConfigMapDefinition { +function getAggregationFieldsByType( + attribute: AttributeAdapter, + directivesOnField: DirectiveNode[] | undefined +): InputTypeComposerFieldConfigMapDefinition { const fields: InputTypeComposerFieldConfigMapDefinition = {}; + const deprecatedDirectives = graphqlDirectivesToCompose( + (directivesOnField || []).filter((d) => d.name.value === DEPRECATED) + ); if (attribute.typeHelper.isID()) { fields[`${attribute.name}_EQUAL`] = { type: GraphQLID, @@ -199,9 +216,18 @@ function getAggregationFieldsByType(attribute: AttributeAdapter): InputTypeCompo type: GraphQLInt, directives: [DEPRECATE_IMPLICIT_LENGTH_AGGREGATION_FILTERS], }; - fields[`${attribute.name}_AVERAGE_LENGTH_${operator}`] = GraphQLFloat; - fields[`${attribute.name}_LONGEST_LENGTH_${operator}`] = GraphQLInt; - fields[`${attribute.name}_SHORTEST_LENGTH_${operator}`] = GraphQLInt; + fields[`${attribute.name}_AVERAGE_LENGTH_${operator}`] = { + type: GraphQLFloat, + directives: deprecatedDirectives, + }; + fields[`${attribute.name}_LONGEST_LENGTH_${operator}`] = { + type: GraphQLInt, + directives: deprecatedDirectives, + }; + fields[`${attribute.name}_SHORTEST_LENGTH_${operator}`] = { + type: GraphQLInt, + directives: deprecatedDirectives, + }; } return fields; } @@ -215,17 +241,26 @@ function getAggregationFieldsByType(attribute: AttributeAdapter): InputTypeCompo type: attribute.getTypeName(), directives: [DEPRECATE_INVALID_AGGREGATION_FILTERS], }; - fields[`${attribute.name}_MIN_${operator}`] = attribute.getTypeName(); - fields[`${attribute.name}_MAX_${operator}`] = attribute.getTypeName(); + fields[`${attribute.name}_MIN_${operator}`] = { + type: attribute.getTypeName(), + directives: deprecatedDirectives, + }; + fields[`${attribute.name}_MAX_${operator}`] = { + type: attribute.getTypeName(), + directives: deprecatedDirectives, + }; if (attribute.getTypeName() !== "Duration") { - fields[`${attribute.name}_SUM_${operator}`] = attribute.getTypeName(); + fields[`${attribute.name}_SUM_${operator}`] = { + type: attribute.getTypeName(), + directives: deprecatedDirectives, + }; } const averageType = attribute.typeHelper.isBigInt() ? "BigInt" : attribute.typeHelper.isDuration() ? "Duration" : GraphQLFloat; - fields[`${attribute.name}_AVERAGE_${operator}`] = averageType; + fields[`${attribute.name}_AVERAGE_${operator}`] = { type: averageType, directives: deprecatedDirectives }; } return fields; } @@ -234,8 +269,14 @@ function getAggregationFieldsByType(attribute: AttributeAdapter): InputTypeCompo type: attribute.getTypeName(), directives: [DEPRECATE_INVALID_AGGREGATION_FILTERS], }; - fields[`${attribute.name}_MIN_${operator}`] = attribute.getTypeName(); - fields[`${attribute.name}_MAX_${operator}`] = attribute.getTypeName(); + fields[`${attribute.name}_MIN_${operator}`] = { + type: attribute.getTypeName(), + directives: deprecatedDirectives, + }; + fields[`${attribute.name}_MAX_${operator}`] = { + type: attribute.getTypeName(), + directives: deprecatedDirectives, + }; } return fields; } diff --git a/packages/graphql/src/schema/generation/where-input.ts b/packages/graphql/src/schema/generation/where-input.ts index 238502a422..36314cc372 100644 --- a/packages/graphql/src/schema/generation/where-input.ts +++ b/packages/graphql/src/schema/generation/where-input.ts @@ -153,10 +153,12 @@ export function withSourceWhereInputType({ relationshipAdapter, composer, deprecatedDirectives, + userDefinedDirectivesOnTargetFields, }: { relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter; composer: SchemaComposer; deprecatedDirectives: Directive[]; + userDefinedDirectivesOnTargetFields: Map | undefined; }): InputTypeComposer | undefined { const relationshipTarget = relationshipAdapter.target; const relationshipSource = relationshipAdapter.source; @@ -183,6 +185,7 @@ export function withSourceWhereInputType({ relationshipAdapter, entityAdapter: relationshipTarget, composer: composer, + userDefinedDirectivesOnTargetFields, }); if (relationshipAdapter.isFilterableByAggregate()) { diff --git a/packages/graphql/tests/schema/directive-preserve.test.ts b/packages/graphql/tests/schema/directive-preserve.test.ts index bc19de908b..85bf396b2c 100644 --- a/packages/graphql/tests/schema/directive-preserve.test.ts +++ b/packages/graphql/tests/schema/directive-preserve.test.ts @@ -4036,6 +4036,7 @@ describe("Directive-preserve", () => { `); }); + // https://github.com/neo4j/graphql/issues/2676 test("Directives on unions preserved", async () => { const typeDefs = gql` union Content = Blog | Post @@ -4183,11 +4184,11 @@ describe("Directive-preserve", () => { content_AVERAGE_EQUAL: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_GT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_GTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_AVERAGE_LENGTH_EQUAL: Float - content_AVERAGE_LENGTH_GT: Float - content_AVERAGE_LENGTH_GTE: Float - content_AVERAGE_LENGTH_LT: Float - content_AVERAGE_LENGTH_LTE: Float + content_AVERAGE_LENGTH_EQUAL: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_GT: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_GTE: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_LT: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_LTE: Float @deprecated(reason: \\"Do not use post.content\\") content_AVERAGE_LT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_LTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_EQUAL: String @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -4196,11 +4197,11 @@ describe("Directive-preserve", () => { content_LONGEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_LONGEST_LENGTH_EQUAL: Int - content_LONGEST_LENGTH_GT: Int - content_LONGEST_LENGTH_GTE: Int - content_LONGEST_LENGTH_LT: Int - content_LONGEST_LENGTH_LTE: Int + content_LONGEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use post.content\\") content_LONGEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LT: Int @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -4208,11 +4209,11 @@ describe("Directive-preserve", () => { content_SHORTEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_SHORTEST_LENGTH_EQUAL: Int - content_SHORTEST_LENGTH_GT: Int - content_SHORTEST_LENGTH_GTE: Int - content_SHORTEST_LENGTH_LT: Int - content_SHORTEST_LENGTH_LTE: Int + content_SHORTEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use post.content\\") content_SHORTEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") } diff --git a/packages/graphql/tests/schema/experimental-schema/directive-preserve.test.ts b/packages/graphql/tests/schema/experimental-schema/directive-preserve.test.ts index 0f061abb8f..668064a689 100644 --- a/packages/graphql/tests/schema/experimental-schema/directive-preserve.test.ts +++ b/packages/graphql/tests/schema/experimental-schema/directive-preserve.test.ts @@ -4036,6 +4036,7 @@ describe("Directive-preserve", () => { `); }); + // https://github.com/neo4j/graphql/issues/2676 test("Directives on unions preserved", async () => { const typeDefs = gql` union Content = Blog | Post @@ -4183,11 +4184,11 @@ describe("Directive-preserve", () => { content_AVERAGE_EQUAL: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_GT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_GTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_AVERAGE_LENGTH_EQUAL: Float - content_AVERAGE_LENGTH_GT: Float - content_AVERAGE_LENGTH_GTE: Float - content_AVERAGE_LENGTH_LT: Float - content_AVERAGE_LENGTH_LTE: Float + content_AVERAGE_LENGTH_EQUAL: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_GT: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_GTE: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_LT: Float @deprecated(reason: \\"Do not use post.content\\") + content_AVERAGE_LENGTH_LTE: Float @deprecated(reason: \\"Do not use post.content\\") content_AVERAGE_LT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_AVERAGE_LTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_EQUAL: String @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -4196,11 +4197,11 @@ describe("Directive-preserve", () => { content_LONGEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_LONGEST_LENGTH_EQUAL: Int - content_LONGEST_LENGTH_GT: Int - content_LONGEST_LENGTH_GTE: Int - content_LONGEST_LENGTH_LT: Int - content_LONGEST_LENGTH_LTE: Int + content_LONGEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use post.content\\") + content_LONGEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use post.content\\") content_LONGEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LONGEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_LT: Int @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -4208,11 +4209,11 @@ describe("Directive-preserve", () => { content_SHORTEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - content_SHORTEST_LENGTH_EQUAL: Int - content_SHORTEST_LENGTH_GT: Int - content_SHORTEST_LENGTH_GTE: Int - content_SHORTEST_LENGTH_LT: Int - content_SHORTEST_LENGTH_LTE: Int + content_SHORTEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use post.content\\") + content_SHORTEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use post.content\\") content_SHORTEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") content_SHORTEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") } diff --git a/packages/graphql/tests/schema/issues/2187.test.ts b/packages/graphql/tests/schema/issues/2187.test.ts index c4402a14d3..dfc816650f 100644 --- a/packages/graphql/tests/schema/issues/2187.test.ts +++ b/packages/graphql/tests/schema/issues/2187.test.ts @@ -222,11 +222,11 @@ describe("https://github.com/neo4j/graphql/issues/2187", () => { title_AVERAGE_EQUAL: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_AVERAGE_GT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_AVERAGE_GTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - title_AVERAGE_LENGTH_EQUAL: Float - title_AVERAGE_LENGTH_GT: Float - title_AVERAGE_LENGTH_GTE: Float - title_AVERAGE_LENGTH_LT: Float - title_AVERAGE_LENGTH_LTE: Float + title_AVERAGE_LENGTH_EQUAL: Float @deprecated(reason: \\"Do not use title\\") + title_AVERAGE_LENGTH_GT: Float @deprecated(reason: \\"Do not use title\\") + title_AVERAGE_LENGTH_GTE: Float @deprecated(reason: \\"Do not use title\\") + title_AVERAGE_LENGTH_LT: Float @deprecated(reason: \\"Do not use title\\") + title_AVERAGE_LENGTH_LTE: Float @deprecated(reason: \\"Do not use title\\") title_AVERAGE_LT: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_AVERAGE_LTE: Float @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_EQUAL: String @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -235,11 +235,11 @@ describe("https://github.com/neo4j/graphql/issues/2187", () => { title_LONGEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_LONGEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_LONGEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - title_LONGEST_LENGTH_EQUAL: Int - title_LONGEST_LENGTH_GT: Int - title_LONGEST_LENGTH_GTE: Int - title_LONGEST_LENGTH_LT: Int - title_LONGEST_LENGTH_LTE: Int + title_LONGEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use title\\") + title_LONGEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use title\\") + title_LONGEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use title\\") + title_LONGEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use title\\") + title_LONGEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use title\\") title_LONGEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_LONGEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_LT: Int @deprecated(reason: \\"Aggregation filters that are not relying on an aggregating function will be deprecated.\\") @@ -247,11 +247,11 @@ describe("https://github.com/neo4j/graphql/issues/2187", () => { title_SHORTEST_EQUAL: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_SHORTEST_GT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_SHORTEST_GTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") - title_SHORTEST_LENGTH_EQUAL: Int - title_SHORTEST_LENGTH_GT: Int - title_SHORTEST_LENGTH_GTE: Int - title_SHORTEST_LENGTH_LT: Int - title_SHORTEST_LENGTH_LTE: Int + title_SHORTEST_LENGTH_EQUAL: Int @deprecated(reason: \\"Do not use title\\") + title_SHORTEST_LENGTH_GT: Int @deprecated(reason: \\"Do not use title\\") + title_SHORTEST_LENGTH_GTE: Int @deprecated(reason: \\"Do not use title\\") + title_SHORTEST_LENGTH_LT: Int @deprecated(reason: \\"Do not use title\\") + title_SHORTEST_LENGTH_LTE: Int @deprecated(reason: \\"Do not use title\\") title_SHORTEST_LT: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") title_SHORTEST_LTE: Int @deprecated(reason: \\"Please use the explicit _LENGTH version for string aggregation.\\") year_AVERAGE_EQUAL: Float