diff --git a/.changeset/beige-beds-push.md b/.changeset/beige-beds-push.md new file mode 100644 index 0000000000..d3c03ed6ce --- /dev/null +++ b/.changeset/beige-beds-push.md @@ -0,0 +1,13 @@ +--- +"@neo4j/graphql": patch +--- + +Aggregations on ID fields are now deprecated. +As part of the change, the flag `idAggregations` has been added to the `excludeDeprecatedFields` setting. + +```js +const neoSchema = new Neo4jGraphQL({ + typeDefs, + features: { excludeDeprecatedFields: { idAggregations: true } }, +}); +``` diff --git a/.changeset/fluffy-schools-promise.md b/.changeset/fluffy-schools-promise.md new file mode 100644 index 0000000000..842a12077b --- /dev/null +++ b/.changeset/fluffy-schools-promise.md @@ -0,0 +1,13 @@ +--- +"@neo4j/graphql": minor +--- + +Introduced the `typename` filter that superseded the `typename_IN` filter. +As part of the change, the flag `typename_IN` has been added to the `excludeDeprecatedFields` setting. + +```js +const neoSchema = new Neo4jGraphQL({ + typeDefs, + features: { excludeDeprecatedFields: { typename_IN: true } }, +}); +``` diff --git a/packages/graphql/src/schema/aggregations/aggregation-types-mapper.ts b/packages/graphql/src/schema/aggregations/aggregation-types-mapper.ts index e77e162b61..555a373453 100644 --- a/packages/graphql/src/schema/aggregations/aggregation-types-mapper.ts +++ b/packages/graphql/src/schema/aggregations/aggregation-types-mapper.ts @@ -50,7 +50,7 @@ export class AggregationTypesMapper { resolve: numericalResolver, args: {}, }; - + // TODO: REMOVE ID FIELD ON 7.x const composeId = { type: "ID", resolve: idResolver, @@ -64,6 +64,7 @@ export class AggregationTypesMapper { fields?: Record; directives?: string[]; }> = [ + // TODO: REMOVE ID FIELD ON 7.x { name: "ID", fields: { @@ -140,6 +141,7 @@ export class AggregationTypesMapper { }): ObjectTypeComposer { return composer.getOrCreateOTC(`${name}AggregateSelection`, (tc) => { tc.addFields(fields ?? { min: name, max: name }); + for (const directive of directives) { tc.setDirectiveByName(directive); } diff --git a/packages/graphql/src/schema/aggregations/field-aggregation-composer.ts b/packages/graphql/src/schema/aggregations/field-aggregation-composer.ts index 582b8d4262..7576fb3950 100644 --- a/packages/graphql/src/schema/aggregations/field-aggregation-composer.ts +++ b/packages/graphql/src/schema/aggregations/field-aggregation-composer.ts @@ -18,13 +18,14 @@ */ import { GraphQLInt, GraphQLNonNull } from "graphql"; -import type { ObjectTypeComposer, SchemaComposer } from "graphql-compose"; +import type { ObjectTypeComposer, ObjectTypeComposerFieldConfigMapDefinition, SchemaComposer } from "graphql-compose"; import type { Subgraph } from "../../classes/Subgraph"; import type { ConcreteEntityAdapter } from "../../schema-model/entity/model-adapters/ConcreteEntityAdapter"; import type { InterfaceEntityAdapter } from "../../schema-model/entity/model-adapters/InterfaceEntityAdapter"; import { UnionEntityAdapter } from "../../schema-model/entity/model-adapters/UnionEntityAdapter"; import { RelationshipAdapter } from "../../schema-model/relationship/model-adapters/RelationshipAdapter"; import type { RelationshipDeclarationAdapter } from "../../schema-model/relationship/model-adapters/RelationshipDeclarationAdapter"; +import type { Neo4jFeaturesSettings } from "../../types"; import { numericalResolver } from "../resolvers/field/numerical"; import { AggregationTypesMapper } from "./aggregation-types-mapper"; @@ -39,21 +40,20 @@ export class FieldAggregationComposer { private createAggregationField( name: string, - fields: Record + fields: ObjectTypeComposerFieldConfigMapDefinition ): ObjectTypeComposer | undefined { if (Object.keys(fields).length > 0) { return this.composer.createObjectTC({ name, - fields: { - ...fields, - }, + fields, }); } return undefined; } public createAggregationTypeObject( - relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter + relationshipAdapter: RelationshipAdapter | RelationshipDeclarationAdapter, + features: Neo4jFeaturesSettings | undefined ): ObjectTypeComposer { let aggregateSelectionEdge: ObjectTypeComposer | undefined; @@ -61,7 +61,7 @@ export class FieldAggregationComposer { throw new Error("UnionEntityAdapter not implemented"); } - const aggregateSelectionNodeFields = this.getAggregationFields(relationshipAdapter.target); + const aggregateSelectionNodeFields = this.getAggregationFields(relationshipAdapter.target, features); const aggregateSelectionNodeName = relationshipAdapter.operations.getAggregationFieldTypename("node"); const aggregateSelectionNode = this.createAggregationField( @@ -70,7 +70,7 @@ export class FieldAggregationComposer { ); if (relationshipAdapter instanceof RelationshipAdapter && relationshipAdapter.attributes.size > 0) { - const aggregateSelectionEdgeFields = this.getAggregationFields(relationshipAdapter); + const aggregateSelectionEdgeFields = this.getAggregationFields(relationshipAdapter, features); const aggregateSelectionEdgeName = relationshipAdapter.operations.getAggregationFieldTypename("edge"); aggregateSelectionEdge = this.createAggregationField( @@ -94,13 +94,19 @@ export class FieldAggregationComposer { } private getAggregationFields( - entity: RelationshipAdapter | ConcreteEntityAdapter | InterfaceEntityAdapter - ): Record { + entity: RelationshipAdapter | ConcreteEntityAdapter | InterfaceEntityAdapter, + _features: Neo4jFeaturesSettings | undefined + ): ObjectTypeComposerFieldConfigMapDefinition { return entity.aggregableFields.reduce((res, field) => { const objectTypeComposer = this.aggregationTypesMapper.getAggregationType(field.getTypeName()); - if (!objectTypeComposer) return res; + if (!objectTypeComposer) { + return res; + } + if (field.typeHelper.isID()) { + return res; + } res[field.name] = objectTypeComposer.NonNull; return res; 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 e9797d18fd..30fd3f5faa 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 @@ -268,7 +268,10 @@ export function createRelationshipFields({ // make a new fn augmentObjectTypeWithAggregationField const fieldAggregationComposer = new FieldAggregationComposer(schemaComposer, subgraph); - const aggregationTypeObject = fieldAggregationComposer.createAggregationTypeObject(relationshipAdapter); + const aggregationTypeObject = fieldAggregationComposer.createAggregationTypeObject( + relationshipAdapter, + features + ); const aggregationFieldsBaseArgs = { where: relationshipTarget.operations.whereInputTypeName, diff --git a/packages/graphql/src/schema/generation/aggregate-types.ts b/packages/graphql/src/schema/generation/aggregate-types.ts index 7cc2803ba3..40bc4a4310 100644 --- a/packages/graphql/src/schema/generation/aggregate-types.ts +++ b/packages/graphql/src/schema/generation/aggregate-types.ts @@ -45,11 +45,13 @@ export function withAggregateSelectionType({ aggregationTypesMapper, propagatedDirectives, composer, + features, }: { entityAdapter: ConcreteEntityAdapter | InterfaceEntityAdapter; aggregationTypesMapper: AggregationTypesMapper; propagatedDirectives: DirectiveNode[]; composer: SchemaComposer; + features: Neo4jFeaturesSettings | undefined; }): ObjectTypeComposer { const aggregateSelection = composer.createObjectTC({ name: entityAdapter.operations.aggregateTypeNames.selection, @@ -62,23 +64,25 @@ export function withAggregateSelectionType({ }, directives: graphqlDirectivesToCompose(propagatedDirectives), }); - aggregateSelection.addFields(makeAggregableFields({ entityAdapter, aggregationTypesMapper })); + aggregateSelection.addFields(makeAggregableFields({ entityAdapter, aggregationTypesMapper, features })); return aggregateSelection; } function makeAggregableFields({ entityAdapter, aggregationTypesMapper, + features, }: { entityAdapter: ConcreteEntityAdapter | InterfaceEntityAdapter; aggregationTypesMapper: AggregationTypesMapper; + features: Neo4jFeaturesSettings | undefined; }): ObjectTypeComposerFieldConfigMapDefinition { const aggregableFields: ObjectTypeComposerFieldConfigMapDefinition = {}; const aggregableAttributes = entityAdapter.aggregableFields; for (const attribute of aggregableAttributes) { const objectTypeComposer = aggregationTypesMapper.getAggregationType(attribute.getTypeName()); if (objectTypeComposer) { - aggregableFields[attribute.name] = objectTypeComposer.NonNull; + aggregableFields[attribute.name] = { type: objectTypeComposer.NonNull }; } } return aggregableFields; @@ -214,7 +218,7 @@ function makeAggregationFields( function addDeprecatedAggregationFieldsByType( attribute: AttributeAdapter, directivesOnField: DirectiveNode[] | undefined, - fields: InputTypeComposerFieldConfigMapDefinition + fields: InputTypeComposerFieldConfigMapDefinition, ): InputTypeComposerFieldConfigMapDefinition { if (attribute.typeHelper.isString()) { for (const operator of AGGREGATION_COMPARISON_OPERATORS) { diff --git a/packages/graphql/src/schema/make-augmented-schema.ts b/packages/graphql/src/schema/make-augmented-schema.ts index d7d84948e0..0a211c5d2d 100644 --- a/packages/graphql/src/schema/make-augmented-schema.ts +++ b/packages/graphql/src/schema/make-augmented-schema.ts @@ -701,6 +701,7 @@ function generateObjectType({ aggregationTypesMapper, propagatedDirectives, composer, + features, }); composer.Query.addFields({ @@ -845,6 +846,7 @@ function generateInterfaceObjectType({ aggregationTypesMapper, propagatedDirectives, composer, + features, }); composer.Query.addFields({ diff --git a/packages/graphql/tests/schema/aggregations.test.ts b/packages/graphql/tests/schema/aggregations.test.ts index 86c4458f18..2563238d36 100644 --- a/packages/graphql/tests/schema/aggregations.test.ts +++ b/packages/graphql/tests/schema/aggregations.test.ts @@ -18,13 +18,12 @@ */ import { printSchemaWithDirectives } from "@graphql-tools/utils"; -import { gql } from "graphql-tag"; import { lexicographicSortSchema } from "graphql/utilities"; import { Neo4jGraphQL } from "../../src"; describe("Aggregations", () => { test("Top Level Aggregations", async () => { - const typeDefs = gql` + const typeDefs = /* GraphQL */ ` type Movie @node { id: ID isbn: String! @@ -527,9 +526,9 @@ describe("Aggregations", () => { }); test("Where Level Aggregations", async () => { - const typeDefs = gql` + const typeDefs = /* GraphQL */ ` type User @node { - someId: ID + someID: ID someString: String someFloat: Float someInt: Int @@ -542,12 +541,13 @@ describe("Aggregations", () => { } type Post @node { + someID: ID title: String likes: [User!]! @relationship(type: "LIKES", direction: IN, properties: "Likes") } type Likes @relationshipProperties { - someId: ID + someID: ID someString: String someFloat: Float someInt: Int @@ -779,7 +779,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -937,7 +937,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -950,7 +950,7 @@ describe("Aggregations", () => { someDateTime: SortDirection someDuration: SortDirection someFloat: SortDirection - someId: SortDirection + someID: SortDirection someInt: SortDirection someLocalDateTime: SortDirection someLocalTime: SortDirection @@ -973,8 +973,8 @@ describe("Aggregations", () => { someFloat_MULTIPLY: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { multiply: ... } }' instead.\\") someFloat_SET: Float @deprecated(reason: \\"Please use the generic mutation 'someFloat: { set: ... } }' instead.\\") someFloat_SUBTRACT: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { subtract: ... } }' instead.\\") - someId: IDScalarMutations - someId_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someId: { set: ... } }' instead.\\") + someID: IDScalarMutations + someID_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someID: { set: ... } }' instead.\\") someInt: IntScalarMutations someInt_DECREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { decrement: ... } }' instead.\\") someInt_INCREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { increment: ... } }' instead.\\") @@ -1021,12 +1021,12 @@ describe("Aggregations", () => { someFloat_IN: [Float] @deprecated(reason: \\"Please use the relevant generic filter someFloat: { in: ... }\\") someFloat_LT: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lt: ... }\\") someFloat_LTE: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lte: ... }\\") - someId: IDScalarFilters - someId_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { contains: ... }\\") - someId_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { endsWith: ... }\\") - someId_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { eq: ... }\\") - someId_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someId: { in: ... }\\") - someId_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { startsWith: ... }\\") + someID: IDScalarFilters + someID_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { contains: ... }\\") + someID_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { endsWith: ... }\\") + someID_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { eq: ... }\\") + someID_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someID: { in: ... }\\") + someID_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { startsWith: ... }\\") someInt: IntScalarFilters someInt_EQ: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { eq: ... }\\") someInt_GT: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { gt: ... }\\") @@ -1144,6 +1144,7 @@ describe("Aggregations", () => { likes(limit: Int, offset: Int, sort: [UserSort!], where: UserWhere): [User!]! likesAggregate(where: UserWhere): PostUserLikesAggregationSelection likesConnection(after: String, first: Int, sort: [PostLikesConnectionSort!], where: PostLikesConnectionWhere): PostLikesConnection! + someID: ID title: String } @@ -1154,6 +1155,7 @@ describe("Aggregations", () => { input PostCreateInput { likes: PostLikesFieldInput + someID: ID title: String } @@ -1410,11 +1412,14 @@ describe("Aggregations", () => { Fields to sort Posts by. The order in which sorts are applied is not guaranteed when specifying many fields in one PostSort object. \\"\\"\\" input PostSort { + someID: SortDirection title: SortDirection } input PostUpdateInput { likes: [PostLikesUpdateFieldInput!] + someID: IDScalarMutations + someID_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someID: { set: ... } }' instead.\\") title: StringScalarMutations title_SET: String @deprecated(reason: \\"Please use the generic mutation 'title: { set: ... } }' instead.\\") } @@ -1480,6 +1485,12 @@ describe("Aggregations", () => { likes_SINGLE: UserWhere @deprecated(reason: \\"Please use the relevant generic filter 'likes: { single: ... }' instead.\\") \\"\\"\\"Return Posts where some of the related Users match this filter\\"\\"\\" likes_SOME: UserWhere @deprecated(reason: \\"Please use the relevant generic filter 'likes: { some: ... }' instead.\\") + someID: IDScalarFilters + someID_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { contains: ... }\\") + someID_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { endsWith: ... }\\") + someID_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { eq: ... }\\") + someID_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someID: { in: ... }\\") + someID_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { startsWith: ... }\\") title: StringScalarFilters title_CONTAINS: String @deprecated(reason: \\"Please use the relevant generic filter title: { contains: ... }\\") title_ENDS_WITH: String @deprecated(reason: \\"Please use the relevant generic filter title: { endsWith: ... }\\") @@ -1591,7 +1602,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -1621,7 +1632,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -1653,7 +1664,7 @@ describe("Aggregations", () => { someDateTime: SortDirection someDuration: SortDirection someFloat: SortDirection - someId: SortDirection + someID: SortDirection someInt: SortDirection someLocalDateTime: SortDirection someLocalTime: SortDirection @@ -1676,8 +1687,8 @@ describe("Aggregations", () => { someFloat_MULTIPLY: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { multiply: ... } }' instead.\\") someFloat_SET: Float @deprecated(reason: \\"Please use the generic mutation 'someFloat: { set: ... } }' instead.\\") someFloat_SUBTRACT: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { subtract: ... } }' instead.\\") - someId: IDScalarMutations - someId_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someId: { set: ... } }' instead.\\") + someID: IDScalarMutations + someID_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someID: { set: ... } }' instead.\\") someInt: IntScalarMutations someInt_DECREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { decrement: ... } }' instead.\\") someInt_INCREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { increment: ... } }' instead.\\") @@ -1724,12 +1735,12 @@ describe("Aggregations", () => { someFloat_IN: [Float] @deprecated(reason: \\"Please use the relevant generic filter someFloat: { in: ... }\\") someFloat_LT: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lt: ... }\\") someFloat_LTE: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lte: ... }\\") - someId: IDScalarFilters - someId_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { contains: ... }\\") - someId_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { endsWith: ... }\\") - someId_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { eq: ... }\\") - someId_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someId: { in: ... }\\") - someId_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { startsWith: ... }\\") + someID: IDScalarFilters + someID_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { contains: ... }\\") + someID_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { endsWith: ... }\\") + someID_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { eq: ... }\\") + someID_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someID: { in: ... }\\") + someID_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { startsWith: ... }\\") someInt: IntScalarFilters someInt_EQ: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { eq: ... }\\") someInt_GT: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { gt: ... }\\") @@ -1775,9 +1786,9 @@ describe("Aggregations", () => { }); test("Where Level Aggregations with arrays", async () => { - const typeDefs = gql` + const typeDefs = /* GraphQL */ ` type User @node { - someId: ID + someID: ID someString: String someFloat: Float someInt: Int @@ -1795,7 +1806,7 @@ describe("Aggregations", () => { } type Likes @relationshipProperties { - someId: [ID!]! + someID: [ID!]! someString: [String!]! someFloat: [Float!]! someInt: [Int!]! @@ -2063,7 +2074,7 @@ describe("Aggregations", () => { someDateTime: [DateTime!]! someDuration: [Duration!]! someFloat: [Float!]! - someId: [ID!]! + someID: [ID!]! someInt: [Int!]! someLocalDateTime: [LocalDateTime!]! someLocalTime: [LocalTime!]! @@ -2076,7 +2087,7 @@ describe("Aggregations", () => { someDateTime: [DateTime!]! someDuration: [Duration!]! someFloat: [Float!]! - someId: [ID!]! + someID: [ID!]! someInt: [Int!]! someLocalDateTime: [LocalDateTime!]! someLocalTime: [LocalTime!]! @@ -2089,7 +2100,7 @@ describe("Aggregations", () => { someDateTime: SortDirection someDuration: SortDirection someFloat: SortDirection - someId: SortDirection + someID: SortDirection someInt: SortDirection someLocalDateTime: SortDirection someLocalTime: SortDirection @@ -2114,10 +2125,10 @@ describe("Aggregations", () => { someFloat_POP: Int @deprecated(reason: \\"Please use the generic mutation 'someFloat: { pop: ... } }' instead.\\") someFloat_PUSH: [Float!] @deprecated(reason: \\"Please use the generic mutation 'someFloat: { push: ... } }' instead.\\") someFloat_SET: [Float!] @deprecated(reason: \\"Please use the generic mutation 'someFloat: { set: ... } }' instead.\\") - someId: ListIDMutations - someId_POP: Int @deprecated(reason: \\"Please use the generic mutation 'someId: { pop: ... } }' instead.\\") - someId_PUSH: [ID!] @deprecated(reason: \\"Please use the generic mutation 'someId: { push: ... } }' instead.\\") - someId_SET: [ID!] @deprecated(reason: \\"Please use the generic mutation 'someId: { set: ... } }' instead.\\") + someID: ListIDMutations + someID_POP: Int @deprecated(reason: \\"Please use the generic mutation 'someID: { pop: ... } }' instead.\\") + someID_PUSH: [ID!] @deprecated(reason: \\"Please use the generic mutation 'someID: { push: ... } }' instead.\\") + someID_SET: [ID!] @deprecated(reason: \\"Please use the generic mutation 'someID: { set: ... } }' instead.\\") someInt: ListIntMutations someInt_POP: Int @deprecated(reason: \\"Please use the generic mutation 'someInt: { pop: ... } }' instead.\\") someInt_PUSH: [Int!] @deprecated(reason: \\"Please use the generic mutation 'someInt: { push: ... } }' instead.\\") @@ -2156,9 +2167,9 @@ describe("Aggregations", () => { someFloat: FloatListFilters someFloat_EQ: [Float!] @deprecated(reason: \\"Please use the relevant generic filter someFloat: { eq: ... }\\") someFloat_INCLUDES: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { includes: ... }\\") - someId: IDListFilters - someId_EQ: [ID!] @deprecated(reason: \\"Please use the relevant generic filter someId: { eq: ... }\\") - someId_INCLUDES: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { includes: ... }\\") + someID: IDListFilters + someID_EQ: [ID!] @deprecated(reason: \\"Please use the relevant generic filter someID: { eq: ... }\\") + someID_INCLUDES: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { includes: ... }\\") someInt: IntListFilters someInt_EQ: [Int!] @deprecated(reason: \\"Please use the relevant generic filter someInt: { eq: ... }\\") someInt_INCLUDES: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { includes: ... }\\") @@ -2784,7 +2795,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -2814,7 +2825,7 @@ describe("Aggregations", () => { someDateTime: DateTime someDuration: Duration someFloat: Float - someId: ID + someID: ID someInt: Int someLocalDateTime: LocalDateTime someLocalTime: LocalTime @@ -2846,7 +2857,7 @@ describe("Aggregations", () => { someDateTime: SortDirection someDuration: SortDirection someFloat: SortDirection - someId: SortDirection + someID: SortDirection someInt: SortDirection someLocalDateTime: SortDirection someLocalTime: SortDirection @@ -2869,8 +2880,8 @@ describe("Aggregations", () => { someFloat_MULTIPLY: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { multiply: ... } }' instead.\\") someFloat_SET: Float @deprecated(reason: \\"Please use the generic mutation 'someFloat: { set: ... } }' instead.\\") someFloat_SUBTRACT: Float @deprecated(reason: \\"Please use the relevant generic mutation 'someFloat: { subtract: ... } }' instead.\\") - someId: IDScalarMutations - someId_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someId: { set: ... } }' instead.\\") + someID: IDScalarMutations + someID_SET: ID @deprecated(reason: \\"Please use the generic mutation 'someID: { set: ... } }' instead.\\") someInt: IntScalarMutations someInt_DECREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { decrement: ... } }' instead.\\") someInt_INCREMENT: Int @deprecated(reason: \\"Please use the relevant generic mutation 'someInt: { increment: ... } }' instead.\\") @@ -2917,12 +2928,12 @@ describe("Aggregations", () => { someFloat_IN: [Float] @deprecated(reason: \\"Please use the relevant generic filter someFloat: { in: ... }\\") someFloat_LT: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lt: ... }\\") someFloat_LTE: Float @deprecated(reason: \\"Please use the relevant generic filter someFloat: { lte: ... }\\") - someId: IDScalarFilters - someId_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { contains: ... }\\") - someId_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { endsWith: ... }\\") - someId_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { eq: ... }\\") - someId_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someId: { in: ... }\\") - someId_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someId: { startsWith: ... }\\") + someID: IDScalarFilters + someID_CONTAINS: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { contains: ... }\\") + someID_ENDS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { endsWith: ... }\\") + someID_EQ: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { eq: ... }\\") + someID_IN: [ID] @deprecated(reason: \\"Please use the relevant generic filter someID: { in: ... }\\") + someID_STARTS_WITH: ID @deprecated(reason: \\"Please use the relevant generic filter someID: { startsWith: ... }\\") someInt: IntScalarFilters someInt_EQ: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { eq: ... }\\") someInt_GT: Int @deprecated(reason: \\"Please use the relevant generic filter someInt: { gt: ... }\\")