diff --git a/codegen.cjs b/codegen.cjs new file mode 100644 index 000000000..0d7b237a6 --- /dev/null +++ b/codegen.cjs @@ -0,0 +1,171 @@ +// @ts-check + +/** @type {import('@graphql-codegen/cli').CodegenConfig} */ +const config = { + schema: './packages/services/api/src/modules/*/module.graphql.ts', + emitLegacyCommonJSImports: true, + generates: { + // API + './packages/services/api/src/modules': { + preset: 'graphql-modules', + plugins: [ + { + add: { + content: "import { StripeTypes } from '@hive/stripe-billing';", + }, + }, + 'typescript', + 'typescript-resolvers', + ], + presetConfig: { + baseTypesPath: '../__generated__/types.ts', + filename: '__generated__/types.ts', + encapsulateModuleTypes: 'namespace', + }, + config: { + immutableTypes: true, + contextType: 'GraphQLModules.ModuleContext', + enumValues: { + OrganizationType: '../shared/entities#OrganizationType', + ProjectType: '../shared/entities#ProjectType', + TargetAccessScope: '../modules/auth/providers/target-access#TargetAccessScope', + ProjectAccessScope: '../modules/auth/providers/project-access#ProjectAccessScope', + OrganizationAccessScope: + '../modules/auth/providers/organization-access#OrganizationAccessScope', + }, + scalars: { + DateTime: 'string', + SafeInt: 'number', + }, + mappers: { + SchemaChangeConnection: + '../shared/mappers#SchemaChangeConnection as SchemaChangeConnectionMapper', + SchemaErrorConnection: + '../shared/mappers#SchemaErrorConnection as SchemaErrorConnectionMapper', + OrganizationConnection: + '../shared/mappers#OrganizationConnection as OrganizationConnectionMapper', + UserConnection: '../shared/mappers#UserConnection as UserConnectionMapper', + ActivityConnection: '../shared/mappers#ActivityConnection as ActivityConnectionMapper', + MemberConnection: '../shared/mappers#MemberConnection as MemberConnectionMapper', + ProjectConnection: '../shared/mappers#ProjectConnection as ProjectConnectionMapper', + TargetConnection: '../shared/mappers#TargetConnection as TargetConnectionMapper', + SchemaConnection: '../shared/mappers#SchemaConnection as SchemaConnectionMapper', + TokenConnection: '../shared/mappers#TokenConnection as TokenConnectionMapper', + OperationStatsConnection: + '../shared/mappers#OperationStatsConnection as OperationStatsConnectionMapper', + ClientStatsConnection: + '../shared/mappers#ClientStatsConnection as ClientStatsConnectionMapper', + OperationsStats: '../shared/mappers#OperationsStats as OperationsStatsMapper', + DurationStats: '../shared/mappers#DurationStats as DurationStatsMapper', + SchemaComparePayload: + '../shared/mappers#SchemaComparePayload as SchemaComparePayloadMapper', + SchemaCompareResult: '../shared/mappers#SchemaCompareResult as SchemaCompareResultMapper', + SchemaVersionConnection: + '../shared/mappers#SchemaVersionConnection as SchemaVersionConnectionMapper', + SchemaVersion: '../shared/mappers#SchemaVersion as SchemaVersionMapper', + Schema: '../shared/mappers#Schema as SchemaMapper', + SingleSchema: '../shared/mappers#SingleSchema as SingleSchemaMapper', + CompositeSchema: '../shared/mappers#PushedCompositeSchema as PushedCompositeSchemaMapper', + PersistedOperationConnection: + '../shared/mappers#PersistedOperationConnection as PersistedOperationMapper', + Organization: '../shared/entities#Organization as OrganizationMapper', + Project: '../shared/entities#Project as ProjectMapper', + Target: '../shared/entities#Target as TargetMapper', + Member: '../shared/entities#Member as MemberMapper', + Token: '../shared/entities#Token as TokenMapper', + TokenInfo: '../shared/entities#Token as TokenInfoMapper', + Activity: '../shared/entities#ActivityObject as ActivityMapper', + AlertChannel: '../shared/entities#AlertChannel as AlertChannelMapper', + AlertSlackChannel: 'AlertChannelMapper', + AlertWebhookChannel: 'AlertChannelMapper', + Alert: '../shared/entities#Alert as AlertMapper', + AdminQuery: '{}', + AdminStats: '../shared/mappers#AdminStats as AdminStatsMapper', + AdminGeneralStats: '../shared/mappers#AdminStats as AdminGeneralStatsMapper', + AdminOrganizationStats: + '../shared/entities#AdminOrganizationStats as AdminOrganizationStatsMapper', + UsageEstimation: '../shared/mappers#TargetsEstimationFilter', + UsageEstimationScope: '../shared/mappers#TargetsEstimationDateFilter', + BillingPaymentMethod: 'StripeTypes.PaymentMethod.Card', + BillingDetails: 'StripeTypes.PaymentMethod.BillingDetails', + BillingInvoice: 'StripeTypes.Invoice | StripeTypes.UpcomingInvoice', + OrganizationGetStarted: + '../shared/entities#OrganizationGetStarted as OrganizationGetStartedMapper', + SchemaExplorer: '../shared/mappers#SchemaExplorerMapper', + GraphQLObjectType: '../shared/mappers#GraphQLObjectTypeMapper', + GraphQLInterfaceType: '../shared/mappers#GraphQLInterfaceTypeMapper', + GraphQLUnionType: '../shared/mappers#GraphQLUnionTypeMapper', + GraphQLEnumType: '../shared/mappers#GraphQLEnumTypeMapper', + GraphQLInputObjectType: '../shared/mappers#GraphQLInputObjectTypeMapper', + GraphQLScalarType: '../shared/mappers#GraphQLScalarTypeMapper', + GraphQLUnionTypeMember: '../shared/mappers#GraphQLUnionTypeMemberMapper', + GraphQLEnumValue: '../shared/mappers#GraphQLEnumValueMapper', + GraphQLField: '../shared/mappers#GraphQLFieldMapper', + GraphQLInputField: '../shared/mappers#GraphQLInputFieldMapper', + GraphQLArgument: '../shared/mappers#GraphQLArgumentMapper', + OrganizationInvitation: + '../shared/entities#OrganizationInvitation as OrganizationInvitationMapper', + OIDCIntegration: '../shared/entities#OIDCIntegration as OIDCIntegrationMapper', + User: '../shared/entities#User as UserMapper', + }, + }, + }, + // App + './packages/web/app/src/graphql/index.ts': { + documents: [ + './packages/web/app/src/graphql/*.graphql', + './packages/web/app/src/(components|lib)/**/*.ts(x)?', + ], + plugins: ['typescript', 'typescript-operations', 'typed-document-node'], + config: { + dedupeFragments: true, + scalars: { + DateTime: 'string', + SafeInt: 'number', + }, + }, + }, + './packages/web/app/src/gql/': { + documents: [ + './packages/web/app/src/(components|lib)/**/*.ts(x)?', + './packages/web/app/pages/v2/**/*.ts(x)?', + './packages/web/app/pages/**/*.ts(x)?', + './packages/web/app/src/graphql', + '!./packages/web/app/pages/api/github/setup-callback.ts', + ], + preset: 'gql-tag-operations-preset', + plugins: [], + config: { + dedupeFragments: true, + }, + presetConfig: { + augmentedModuleName: '@urql/core', + }, + }, + // CLI + 'packages/libraries/cli/src/sdk.ts': { + documents: './packages/libraries/cli/src/**/*.graphql', + config: { + flattenGeneratedTypes: true, + }, + plugins: ['typescript', 'typescript-operations', 'typescript-graphql-request'], + }, + // Client + 'packages/libraries/client/src/__generated__/types.ts': { + documents: ['./packages/libraries/client/src/**/*.ts'], + config: { + flattenGeneratedTypes: true, + onlyOperationTypes: true, + }, + plugins: ['typescript', 'typescript-operations'], + }, + // Integration tests + './integration-tests/testkit/gql/': { + documents: './integration-tests/(testkit|tests)/**/*.ts', + preset: 'client-preset', + plugins: [], + }, + }, +}; + +module.exports = config; diff --git a/codegen.yml b/codegen.yml deleted file mode 100644 index de2b810e6..000000000 --- a/codegen.yml +++ /dev/null @@ -1,150 +0,0 @@ -schema: ./packages/services/api/src/modules/*/module.graphql.ts -emitLegacyCommonJSImports: true -generates: - # API - ./packages/services/api/src/modules: - preset: graphql-modules - presetConfig: - baseTypesPath: ../__generated__/types.ts - filename: __generated__/types.ts - encapsulateModuleTypes: namespace - config: - immutableTypes: true - contextType: GraphQLModules.ModuleContext - enumValues: - OrganizationType: ../shared/entities#OrganizationType - ProjectType: ../shared/entities#ProjectType - TargetAccessScope: ../modules/auth/providers/target-access#TargetAccessScope - ProjectAccessScope: ../modules/auth/providers/project-access#ProjectAccessScope - OrganizationAccessScope: ../modules/auth/providers/organization-access#OrganizationAccessScope - scalars: - DateTime: string - SafeInt: number - mappers: - SchemaChangeConnection: - ../shared/mappers#SchemaChangeConnection as SchemaChangeConnectionMapper - SchemaErrorConnection: - ../shared/mappers#SchemaErrorConnection as SchemaErrorConnectionMapper - OrganizationConnection: - ../shared/mappers#OrganizationConnection as OrganizationConnectionMapper - UserConnection: ../shared/mappers#UserConnection as UserConnectionMapper - ActivityConnection: ../shared/mappers#ActivityConnection as ActivityConnectionMapper - MemberConnection: ../shared/mappers#MemberConnection as MemberConnectionMapper - ProjectConnection: ../shared/mappers#ProjectConnection as ProjectConnectionMapper - TargetConnection: ../shared/mappers#TargetConnection as TargetConnectionMapper - SchemaConnection: ../shared/mappers#SchemaConnection as SchemaConnectionMapper - TokenConnection: ../shared/mappers#TokenConnection as TokenConnectionMapper - OperationStatsConnection: - ../shared/mappers#OperationStatsConnection as OperationStatsConnectionMapper - ClientStatsConnection: - ../shared/mappers#ClientStatsConnection as ClientStatsConnectionMapper - OperationsStats: ../shared/mappers#OperationsStats as OperationsStatsMapper - DurationStats: ../shared/mappers#DurationStats as DurationStatsMapper - SchemaComparePayload: ../shared/mappers#SchemaComparePayload as SchemaComparePayloadMapper - SchemaCompareResult: ../shared/mappers#SchemaCompareResult as SchemaCompareResultMapper - SchemaVersionConnection: - ../shared/mappers#SchemaVersionConnection as SchemaVersionConnectionMapper - SchemaVersion: ../shared/mappers#SchemaVersion as SchemaVersionMapper - Schema: ../shared/mappers#Schema as SchemaMapper - SingleSchema: ../shared/mappers#SingleSchema as SingleSchemaMapper - CompositeSchema: ../shared/mappers#PushedCompositeSchema as PushedCompositeSchemaMapper - PersistedOperationConnection: - ../shared/mappers#PersistedOperationConnection as PersistedOperationMapper - Organization: ../shared/entities#Organization as OrganizationMapper - Project: ../shared/entities#Project as ProjectMapper - Target: ../shared/entities#Target as TargetMapper - Member: ../shared/entities#Member as MemberMapper - Token: ../shared/entities#Token as TokenMapper - TokenInfo: ../shared/entities#Token as TokenInfoMapper - Activity: ../shared/entities#ActivityObject as ActivityMapper - AlertChannel: ../shared/entities#AlertChannel as AlertChannelMapper - AlertSlackChannel: AlertChannelMapper - AlertWebhookChannel: AlertChannelMapper - Alert: ../shared/entities#Alert as AlertMapper - AdminQuery: '{}' - AdminStats: ../shared/mappers#AdminStats as AdminStatsMapper - AdminGeneralStats: ../shared/mappers#AdminStats as AdminGeneralStatsMapper - AdminOrganizationStats: - ../shared/entities#AdminOrganizationStats as AdminOrganizationStatsMapper - UsageEstimation: '../shared/mappers#TargetsEstimationFilter' - UsageEstimationScope: '../shared/mappers#TargetsEstimationDateFilter' - BillingPaymentMethod: 'StripeTypes.PaymentMethod.Card' - BillingDetails: 'StripeTypes.PaymentMethod.BillingDetails' - BillingInvoice: 'StripeTypes.Invoice | StripeTypes.UpcomingInvoice' - OrganizationGetStarted: - ../shared/entities#OrganizationGetStarted as OrganizationGetStartedMapper - SchemaExplorer: ../shared/mappers#SchemaExplorerMapper - GraphQLObjectType: ../shared/mappers#GraphQLObjectTypeMapper - GraphQLInterfaceType: ../shared/mappers#GraphQLInterfaceTypeMapper - GraphQLUnionType: ../shared/mappers#GraphQLUnionTypeMapper - GraphQLEnumType: ../shared/mappers#GraphQLEnumTypeMapper - GraphQLInputObjectType: ../shared/mappers#GraphQLInputObjectTypeMapper - GraphQLScalarType: ../shared/mappers#GraphQLScalarTypeMapper - GraphQLUnionTypeMember: ../shared/mappers#GraphQLUnionTypeMemberMapper - GraphQLEnumValue: ../shared/mappers#GraphQLEnumValueMapper - GraphQLField: ../shared/mappers#GraphQLFieldMapper - GraphQLInputField: ../shared/mappers#GraphQLInputFieldMapper - GraphQLArgument: ../shared/mappers#GraphQLArgumentMapper - OrganizationInvitation: - ../shared/entities#OrganizationInvitation as OrganizationInvitationMapper - OIDCIntegration: '../shared/entities#OIDCIntegration as OIDCIntegrationMapper' - User: '../shared/entities#User as UserMapper' - plugins: - - add: - content: "import { StripeTypes } from '@hive/stripe-billing';" - - typescript - - typescript-resolvers - - # App - ./packages/web/app/src/graphql/index.ts: - documents: - - ./packages/web/app/src/graphql/*.graphql - - './packages/web/app/src/(components|lib)/**/*.ts(x)?' - config: - dedupeFragments: true - scalars: - DateTime: string - SafeInt: number - plugins: - - typescript - - typescript-operations - - typed-document-node - - ./packages/web/app/src/gql/: - documents: - - './packages/web/app/src/(components|lib)/**/*.ts(x)?' - - './packages/web/app/pages/v2/**/*.ts(x)?' - - './packages/web/app/pages/**/*.ts(x)?' - - './packages/web/app/src/graphql' - - '!./packages/web/app/pages/api/github/setup-callback.ts' - - preset: gql-tag-operations-preset - config: - dedupeFragments: true - presetConfig: - augmentedModuleName: '@urql/core' - - # CLI - packages/libraries/cli/src/sdk.ts: - documents: ./packages/libraries/cli/src/**/*.graphql - config: - flattenGeneratedTypes: true - plugins: - - typescript - - typescript-operations - - typescript-graphql-request - - # Client - packages/libraries/client/src/__generated__/types.ts: - documents: ./packages/libraries/client/src/**/*.ts - config: - flattenGeneratedTypes: true - onlyOperationTypes: true - plugins: - - typescript - - typescript-operations - - # Integration tests - ./integration-tests/testkit/gql/: - documents: ./integration-tests/(testkit|tests)/**/*.ts - preset: client-preset diff --git a/package.json b/package.json index 3fcf4b2d1..04f37496c 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "docker:build": "docker buildx bake -f docker/docker.hcl --load build", "env:sync": "node ./scripts/sync-env-files.js", "generate": "pnpm --filter @hive/storage db:generate && pnpm graphql:generate", - "graphql:generate": "graphql-codegen", + "graphql:generate": "graphql-codegen --config codegen.cjs", "lint": "eslint --cache --ignore-path .gitignore \"{packages,cypress}/**/*.{ts,tsx}\"", "lint:env-template": "tsx scripts/check-env-template.ts", "lint:fix": "pnpm lint --fix",