From b1c9d6d46e187e5aeb7f2e3dd2ee5e160b5e09b2 Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Fri, 16 Aug 2024 09:08:15 +0100 Subject: [PATCH 1/4] Auto-complete of plugin names in preset --- .../src/plugins/PgContextPlugin.ts | 8 ++++ grafast/grafserv-persisted/src/index.ts | 8 ++++ grafast/grafserv/src/envelop/index.ts | 8 ++++ .../src/examples/NO_DATA_GATHERING.ts | 8 ++++ .../graphile-build-pg/src/examples/config.ts | 8 ++++ .../src/plugins/PgAllRowsPlugin.ts | 6 +++ .../plugins/PgAttributeDeprecationPlugin.ts | 8 ++++ .../src/plugins/PgAttributesPlugin.ts | 6 +++ .../src/plugins/PgBasicsPlugin.ts | 6 +++ .../src/plugins/PgCodecsPlugin.ts | 4 ++ .../src/plugins/PgConditionArgumentPlugin.ts | 6 +++ .../plugins/PgConditionCustomFieldsPlugin.ts | 6 +++ ...gConnectionArgOrderByDefaultValuePlugin.ts | 8 ++++ .../plugins/PgConnectionArgOrderByPlugin.ts | 6 +++ .../plugins/PgConnectionTotalCountPlugin.ts | 6 +++ .../src/plugins/PgCustomTypeFieldPlugin.ts | 6 +++ .../src/plugins/PgEnumTablesPlugin.ts | 4 ++ .../src/plugins/PgFakeConstraintsPlugin.ts | 4 ++ .../PgFirstLastBeforeAfterArgsPlugin.ts | 6 +++ .../src/plugins/PgIndexBehaviorsPlugin.ts | 8 ++++ .../PgInterfaceModeUnionAllRowsPlugin.ts | 6 +++ .../src/plugins/PgIntrospectionPlugin.ts | 4 ++ .../src/plugins/PgJWTPlugin.ts | 4 ++ .../src/plugins/PgLtreePlugin.ts | 8 ++++ .../src/plugins/PgMutationCreatePlugin.ts | 6 +++ .../plugins/PgMutationPayloadEdgePlugin.ts | 6 +++ .../plugins/PgMutationUpdateDeletePlugin.ts | 6 +++ .../src/plugins/PgNodeIdAttributesPlugin.ts | 6 +++ .../src/plugins/PgOrderAllAttributesPlugin.ts | 5 +++ .../src/plugins/PgOrderByPrimaryKeyPlugin.ts | 6 +++ .../src/plugins/PgOrderCustomFieldsPlugin.ts | 6 +++ .../PgPolymorphismOnlyArgumentPlugin.ts | 6 +++ .../src/plugins/PgPolymorphismPlugin.ts | 4 ++ .../src/plugins/PgProceduresPlugin.ts | 4 ++ .../src/plugins/PgRBACPlugin.ts | 4 ++ .../src/plugins/PgRefsPlugin.ts | 4 ++ .../src/plugins/PgRegistryPlugin.ts | 4 ++ .../src/plugins/PgRelationsPlugin.ts | 4 ++ .../PgRemoveExtensionResourcesPlugin.ts | 4 ++ .../src/plugins/PgRowByUniquePlugin.ts | 6 +++ .../src/plugins/PgTableNodePlugin.ts | 6 +++ .../src/plugins/PgTablesPlugin.ts | 6 ++- .../src/plugins/PgTypesPlugin.ts | 5 +++ .../graphile-build/src/examples/README-1.ts | 6 +++ .../AddNodeInterfaceToSuitableTypesPlugin.ts | 8 ++++ .../plugins/BuiltinScalarConnectionsPlugin.ts | 8 ++++ .../ClientMutationIdDescriptionPlugin.ts | 8 ++++ .../src/plugins/CommonTypesPlugin.ts | 6 +++ .../src/plugins/ConnectionPlugin.ts | 6 +++ .../src/plugins/CursorTypePlugin.ts | 6 +++ .../src/plugins/MutationPayloadQueryPlugin.ts | 8 ++++ .../src/plugins/MutationPlugin.ts | 8 ++++ .../src/plugins/NodeAccessorPlugin.ts | 6 +++ .../plugins/NodeIdCodecBase64JSONPlugin.ts | 8 ++++ .../plugins/NodeIdCodecPipeStringPlugin.ts | 8 ++++ .../graphile-build/src/plugins/NodePlugin.ts | 5 +++ .../plugins/PageInfoStartEndCursorPlugin.ts | 6 +++ .../graphile-build/src/plugins/QueryPlugin.ts | 8 ++++ .../src/plugins/QueryQueryPlugin.ts | 8 ++++ .../src/plugins/RegisterQueryNodePlugin.ts | 8 ++++ .../src/plugins/StreamDeferPlugin.ts | 8 ++++ .../src/plugins/SubscriptionPlugin.ts | 8 ++++ .../src/plugins/SwallowErrorsPlugin.ts | 8 ++++ .../plugins/TrimEmptyDescriptionsPlugin.ts | 8 ++++ .../graphile-simplify-inflection/src/index.ts | 8 ++++ .../src/makePgSmartTagsPlugin.ts | 10 ++++- .../src/plugins/PgV4BehaviorPlugin.ts | 4 ++ .../src/plugins/PgV4InflectionPlugin.ts | 3 ++ .../src/plugins/PgV4SmartTagsPlugin.ts | 3 ++ .../postgraphile/src/presets/lazy-jwt.ts | 8 ++++ .../postgraphile/src/presets/relay.ts | 8 ++++ utils/graphile-config/src/index.ts | 40 ++++++++++++++++--- 72 files changed, 478 insertions(+), 9 deletions(-) diff --git a/grafast/dataplan-pg/src/plugins/PgContextPlugin.ts b/grafast/dataplan-pg/src/plugins/PgContextPlugin.ts index cfe2ffca34..4ffc37d324 100644 --- a/grafast/dataplan-pg/src/plugins/PgContextPlugin.ts +++ b/grafast/dataplan-pg/src/plugins/PgContextPlugin.ts @@ -8,6 +8,14 @@ export const EMPTY_OBJECT: Record = Object.freeze( Object.create(null), ); +declare global { + namespace GraphileConfig { + interface Plugins { + PgContextPlugin: true; + } + } +} + export const PgContextPlugin: GraphileConfig.Plugin = { name: "PgContextPlugin", description: diff --git a/grafast/grafserv-persisted/src/index.ts b/grafast/grafserv-persisted/src/index.ts index 975bf399f4..4119ae301d 100644 --- a/grafast/grafserv-persisted/src/index.ts +++ b/grafast/grafserv-persisted/src/index.ts @@ -14,6 +14,14 @@ import LRU from "@graphile/lru"; import type { PersistedOperationGetter } from "./interfaces.js"; import { version } from "./version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + PersistedPlugin: true; + } + } +} + const PersistedPlugin: GraphileConfig.Plugin = { name: "PersistedPlugin", description: "Enables persisted operations in Grafserv", diff --git a/grafast/grafserv/src/envelop/index.ts b/grafast/grafserv/src/envelop/index.ts index 0c4915999a..0a7e216db4 100644 --- a/grafast/grafserv/src/envelop/index.ts +++ b/grafast/grafserv/src/envelop/index.ts @@ -18,6 +18,14 @@ declare global { } } +declare global { + namespace GraphileConfig { + interface Plugins { + GrafservEnvelopPlugin: true; + } + } +} + export const GrafservEnvelopPlugin: GraphileConfig.Plugin = { name: "GrafservEnvelopPlugin", version, diff --git a/graphile-build/graphile-build-pg/src/examples/NO_DATA_GATHERING.ts b/graphile-build/graphile-build-pg/src/examples/NO_DATA_GATHERING.ts index 240c05e68e..a89bc4ecda 100644 --- a/graphile-build/graphile-build-pg/src/examples/NO_DATA_GATHERING.ts +++ b/graphile-build/graphile-build-pg/src/examples/NO_DATA_GATHERING.ts @@ -43,6 +43,14 @@ const pool = new Pool({ }); const withPgClient: WithPgClient = makePgAdaptorWithPgClient(pool); +declare global { + namespace GraphileConfig { + interface Plugins { + UseRelationNamesPlugin: true; + } + } +} + async function main() { // Create our GraphQL schema by applying all the plugins const executor = EXPORTABLE( diff --git a/graphile-build/graphile-build-pg/src/examples/config.ts b/graphile-build/graphile-build-pg/src/examples/config.ts index 10a3872a92..f34133ccfe 100644 --- a/graphile-build/graphile-build-pg/src/examples/config.ts +++ b/graphile-build/graphile-build-pg/src/examples/config.ts @@ -37,6 +37,14 @@ export function getPool() { return pool; } +declare global { + namespace GraphileConfig { + interface Plugins { + EnumManglingPlugin: true; + } + } +} + const EnumManglingPlugin: GraphileConfig.Plugin = { name: "EnumManglingPlugin", description: diff --git a/graphile-build/graphile-build-pg/src/plugins/PgAllRowsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgAllRowsPlugin.ts index 0beb253ffd..8518953998 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgAllRowsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgAllRowsPlugin.ts @@ -10,6 +10,12 @@ import { tagToString } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgAllRowsPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { /** diff --git a/graphile-build/graphile-build-pg/src/plugins/PgAttributeDeprecationPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgAttributeDeprecationPlugin.ts index f817182cf0..ac7a66a339 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgAttributeDeprecationPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgAttributeDeprecationPlugin.ts @@ -2,6 +2,14 @@ import "graphile-config"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + PgAttributeDeprecationPlugin: true; + } + } +} + export const PgAttributeDeprecationPlugin: GraphileConfig.Plugin = { name: "PgAttributeDeprecationPlugin", description: "Marks a attribute as deprecated if it has the deprecated tag", diff --git a/graphile-build/graphile-build-pg/src/plugins/PgAttributesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgAttributesPlugin.ts index b4d7886501..8423659bba 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgAttributesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgAttributesPlugin.ts @@ -21,6 +21,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgAttributesPlugin: true; + } + } + namespace GraphileBuild { interface Build { pgResolveOutputType( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgBasicsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgBasicsPlugin.ts index 28596a24f6..5f866cdf39 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgBasicsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgBasicsPlugin.ts @@ -21,6 +21,12 @@ import { getCodecMetaLookupFromInput, makePgCodecMeta } from "../inputUtils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgBasicsPlugin: true; + } + } + namespace GraphileBuild { interface BuildVersions { "graphile-build-pg": string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts index 5beed51d89..9fb9140c95 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts @@ -79,6 +79,10 @@ declare global { } namespace GraphileConfig { + interface Plugins { + PgCodecsPlugin: true; + } + interface GatherHelpers { pgCodecs: { getCodecFromClass( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgConditionArgumentPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgConditionArgumentPlugin.ts index 730a07def5..eed2a89c0f 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgConditionArgumentPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgConditionArgumentPlugin.ts @@ -13,6 +13,12 @@ import type { GraphQLInputObjectType } from "grafast/graphql"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgConditionArgumentPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { conditionType(this: Inflection, typeName: string): string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgConditionCustomFieldsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgConditionCustomFieldsPlugin.ts index fcad8ee74f..c7a403d864 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgConditionCustomFieldsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgConditionCustomFieldsPlugin.ts @@ -11,6 +11,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgConditionCustomFieldsPlugin: true; + } + } + namespace GraphileBuild { interface ScopeInputObjectFieldsField { isPgConnectionConditionInputField?: boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByDefaultValuePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByDefaultValuePlugin.ts index 4fbd4335ff..7f3aaddeb1 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByDefaultValuePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByDefaultValuePlugin.ts @@ -5,6 +5,14 @@ import type { GraphQLEnumType } from "grafast/graphql"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + PgConnectionArgOrderByDefaultValuePlugin: true; + } + } +} + export const PgConnectionArgOrderByDefaultValuePlugin: GraphileConfig.Plugin = { name: "PgConnectionArgOrderByDefaultValuePlugin", description: "Sets the default 'orderBy' for a table", diff --git a/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByPlugin.ts index b797eb89f2..f7c0a332c8 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgConnectionArgOrderByPlugin.ts @@ -20,6 +20,12 @@ import { inspect } from "util"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgConnectionArgOrderByPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { orderByType(this: Inflection, typeName: string): string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgConnectionTotalCountPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgConnectionTotalCountPlugin.ts index c7ee31840e..7ab327c735 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgConnectionTotalCountPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgConnectionTotalCountPlugin.ts @@ -15,6 +15,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgConnectionTotalCountPlugin: true; + } + } + namespace GraphileBuild { interface ScopeObjectFieldsField { /** diff --git a/graphile-build/graphile-build-pg/src/plugins/PgCustomTypeFieldPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgCustomTypeFieldPlugin.ts index b081781e1f..9169e356d6 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgCustomTypeFieldPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgCustomTypeFieldPlugin.ts @@ -54,6 +54,12 @@ const $$rootMutation = Symbol("PgCustomTypeFieldPluginRootMutationSources"); const $$computed = Symbol("PgCustomTypeFieldPluginComputedSources"); declare global { + namespace GraphileConfig { + interface Plugins { + PgCustomTypeFieldPlugin: true; + } + } + namespace GraphileBuild { interface Build { pgGetArgDetailsFromParameters( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgEnumTablesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgEnumTablesPlugin.ts index 2d3c66371b..502d597506 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgEnumTablesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgEnumTablesPlugin.ts @@ -14,6 +14,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgEnumTablesPlugin: true; + } + interface GatherHelpers { pgEnumTables: { isEnumConstraint(pgConstraint: PgConstraint): boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgFakeConstraintsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgFakeConstraintsPlugin.ts index 246956d44d..658b313a80 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgFakeConstraintsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgFakeConstraintsPlugin.ts @@ -14,6 +14,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgFakeConstraintsPlugin: true; + } + interface GatherHelpers { pgFakeConstraints: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgFirstLastBeforeAfterArgsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgFirstLastBeforeAfterArgsPlugin.ts index 75e68ec884..0139c64c25 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgFirstLastBeforeAfterArgsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgFirstLastBeforeAfterArgsPlugin.ts @@ -12,6 +12,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgFirstLastBeforeAfterArgsPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { conditionType(this: Inflection, typeName: string): string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgIndexBehaviorsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgIndexBehaviorsPlugin.ts index 790fed32b4..4922f4ff40 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgIndexBehaviorsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgIndexBehaviorsPlugin.ts @@ -1,5 +1,13 @@ import { addBehaviorToTags } from "../utils.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + PgIndexBehaviorsPlugin: true; + } + } +} + export const PgIndexBehaviorsPlugin: GraphileConfig.Plugin = { name: "PgIndexBehaviorsPlugin", version: "0.0.0", diff --git a/graphile-build/graphile-build-pg/src/plugins/PgInterfaceModeUnionAllRowsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgInterfaceModeUnionAllRowsPlugin.ts index 74f7c9ccb1..1bdafc41d3 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgInterfaceModeUnionAllRowsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgInterfaceModeUnionAllRowsPlugin.ts @@ -14,6 +14,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgInterfaceModeUnionAllRowsPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { /** diff --git a/graphile-build/graphile-build-pg/src/plugins/PgIntrospectionPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgIntrospectionPlugin.ts index 4fce8b1f21..6c202deb74 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgIntrospectionPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgIntrospectionPlugin.ts @@ -61,6 +61,10 @@ declare global { } namespace GraphileConfig { + interface Plugins { + PgIntrospectionPlugin: true; + } + interface GatherHelpers { pgIntrospection: { getIntrospection(): PromiseOrDirect; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgJWTPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgJWTPlugin.ts index b0e55b8f6f..8c287f854b 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgJWTPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgJWTPlugin.ts @@ -42,6 +42,10 @@ declare global { declare global { namespace GraphileConfig { + interface Plugins { + PgJWTPlugin: true; + } + interface GatherHelpers { pgJWT: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgLtreePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgLtreePlugin.ts index a4898f8d2e..7a994f62a5 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgLtreePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgLtreePlugin.ts @@ -10,6 +10,14 @@ interface State { ltreeArrayCodec: PgCodec; } +declare global { + namespace GraphileConfig { + interface Plugins { + PgLtreePlugin: true; + } + } +} + export const PgLtreePlugin: GraphileConfig.Plugin = { name: "PgLtreePlugin", version, diff --git a/graphile-build/graphile-build-pg/src/plugins/PgMutationCreatePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgMutationCreatePlugin.ts index 6173d4f70b..2f533189ee 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgMutationCreatePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgMutationCreatePlugin.ts @@ -11,6 +11,12 @@ import { tagToString } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgMutationCreatePlugin: true; + } + } + namespace GraphileBuild { interface ScopeObject { isPgCreatePayloadType?: boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgMutationPayloadEdgePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgMutationPayloadEdgePlugin.ts index 68a8caf9bd..9aade6a328 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgMutationPayloadEdgePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgMutationPayloadEdgePlugin.ts @@ -16,6 +16,12 @@ import { version } from "../version.js"; import { applyOrderToPlan } from "./PgConnectionArgOrderByPlugin.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgMutationPayloadEdgePlugin: true; + } + } + namespace GraphileBuild { interface Inflection { tableEdgeField(this: Inflection, codec: PgCodecWithAttributes): string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgMutationUpdateDeletePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgMutationUpdateDeletePlugin.ts index 98fe243399..a8724fc167 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgMutationUpdateDeletePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgMutationUpdateDeletePlugin.ts @@ -27,6 +27,12 @@ import { tagToString } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgMutationUpdateDeletePlugin: true; + } + } + namespace GraphileBuild { interface ScopeObject { isPgUpdatePayloadType?: boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgNodeIdAttributesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgNodeIdAttributesPlugin.ts index fc819b6270..0ec6c143d3 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgNodeIdAttributesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgNodeIdAttributesPlugin.ts @@ -15,6 +15,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgNodeIdAttributesPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { /** diff --git a/graphile-build/graphile-build-pg/src/plugins/PgOrderAllAttributesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgOrderAllAttributesPlugin.ts index d2699054e4..75bb116fbf 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgOrderAllAttributesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgOrderAllAttributesPlugin.ts @@ -10,6 +10,11 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgOrderAllAttributesPlugin: true; + } + } namespace GraphileBuild { interface Inflection { orderByAttributeEnum( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgOrderByPrimaryKeyPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgOrderByPrimaryKeyPlugin.ts index 1024106ae1..1fb9118593 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgOrderByPrimaryKeyPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgOrderByPrimaryKeyPlugin.ts @@ -11,6 +11,12 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgOrderByPrimaryKeyPlugin: true; + } + } + namespace GraphileBuild { interface SchemaOptions { pgOrderByNullsLast?: boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgOrderCustomFieldsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgOrderCustomFieldsPlugin.ts index 18126e7ab0..72aad68061 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgOrderCustomFieldsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgOrderCustomFieldsPlugin.ts @@ -12,6 +12,12 @@ import { version } from "../version.js"; import { isSimpleScalarComputedColumnLike } from "./PgConditionCustomFieldsPlugin.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgOrderCustomFieldsPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { computedAttributeOrder( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismOnlyArgumentPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismOnlyArgumentPlugin.ts index 0083d03455..f2065fa742 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismOnlyArgumentPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismOnlyArgumentPlugin.ts @@ -15,6 +15,12 @@ import type { GraphQLFieldConfigArgumentMap } from "graphql"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgPolymorphismOnlyArgumentPlugin: true; + } + } + namespace GraphileBuild { interface Inflection { pgPolymorphismEnumType(pgCodec: PgCodec): string; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismPlugin.ts index e4567567f3..bee1a09531 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgPolymorphismPlugin.ts @@ -61,6 +61,10 @@ function isNotNullish(v: T | null | undefined): v is T { declare global { namespace GraphileConfig { + interface Plugins { + PgPolymorphismPlugin: true; + } + interface GatherHelpers { pgPolymorphism: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgProceduresPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgProceduresPlugin.ts index 465a6023e3..611b93abc1 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgProceduresPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgProceduresPlugin.ts @@ -59,6 +59,10 @@ declare global { } namespace GraphileConfig { + interface Plugins { + PgProceduresPlugin: true; + } + interface GatherHelpers { pgProcedures: { getResourceOptions( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRBACPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRBACPlugin.ts index b490543573..e742defced 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRBACPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRBACPlugin.ts @@ -8,6 +8,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgRBACPlugin: true; + } + interface GatherHelpers { pgRBAC: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRefsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRefsPlugin.ts index 9c74200706..3c35ef1d1f 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRefsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRefsPlugin.ts @@ -20,6 +20,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgRefsPlugin: true; + } + interface GatherHelpers { pgRefs: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRegistryPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRegistryPlugin.ts index 2ba98c26a9..72ec4fe60c 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRegistryPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRegistryPlugin.ts @@ -8,6 +8,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgRegistryPlugin: true; + } + interface GatherHelpers { pgRegistry: { getRegistryBuilder(): PromiseOrDirect>; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRelationsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRelationsPlugin.ts index 40d797ec9d..901c97e085 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRelationsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRelationsPlugin.ts @@ -107,6 +107,10 @@ declare global { } namespace GraphileConfig { + interface Plugins { + PgRelationsPlugin: true; + } + interface GatherHelpers { pgRelations: { addRelation( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRemoveExtensionResourcesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRemoveExtensionResourcesPlugin.ts index 5757099be1..6b1a4e75e2 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRemoveExtensionResourcesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRemoveExtensionResourcesPlugin.ts @@ -7,6 +7,10 @@ import { version } from "../version.js"; declare global { namespace GraphileConfig { + interface Plugins { + PgRemoveExtensionResourcesPlugin: true; + } + interface GatherHelpers { pgRemoveExtensionResources: Record; } diff --git a/graphile-build/graphile-build-pg/src/plugins/PgRowByUniquePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgRowByUniquePlugin.ts index f837dfdbfc..cbe17d6e12 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgRowByUniquePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgRowByUniquePlugin.ts @@ -14,6 +14,12 @@ import { tagToString } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgRowByUniquePlugin: true; + } + } + namespace GraphileBuild { interface Inflection { rowByUnique( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgTableNodePlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgTableNodePlugin.ts index f165d83a38..0227b5d779 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgTableNodePlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgTableNodePlugin.ts @@ -15,6 +15,12 @@ import { tagToString } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgTableNodePlugin: true; + } + } + namespace GraphileBuild { interface SchemaOptions { pgV4UseTableNameForNodeIdentifier?: boolean; diff --git a/graphile-build/graphile-build-pg/src/plugins/PgTablesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgTablesPlugin.ts index 898cd98ad2..da7b02e92a 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgTablesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgTablesPlugin.ts @@ -160,10 +160,12 @@ declare global { isPgFieldSimpleCollection?: boolean; } } -} -declare global { namespace GraphileConfig { + interface Plugins { + PgTablesPlugin: true; + } + interface GatherHelpers { pgTables: { getResourceOptions( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts index 5b6a201d3b..2337e4f51c 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts @@ -10,6 +10,11 @@ import { EXPORTABLE } from "graphile-build"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PgTypesPlugin: true; + } + } namespace GraphileBuild { interface ScopeObject { isPgIntervalType?: boolean; diff --git a/graphile-build/graphile-build/src/examples/README-1.ts b/graphile-build/graphile-build/src/examples/README-1.ts index 32e52feebf..e91643db8a 100644 --- a/graphile-build/graphile-build/src/examples/README-1.ts +++ b/graphile-build/graphile-build/src/examples/README-1.ts @@ -17,6 +17,12 @@ import { buildSchema, defaultPreset, EXPORTABLE } from "../index.js"; */ declare global { + namespace GraphileConfig { + interface Plugins { + MyRandomFieldPlugin: true; + } + } + namespace GraphileBuild { interface SchemaOptions { myDefaultMin?: number; diff --git a/graphile-build/graphile-build/src/plugins/AddNodeInterfaceToSuitableTypesPlugin.ts b/graphile-build/graphile-build/src/plugins/AddNodeInterfaceToSuitableTypesPlugin.ts index 2234e0dcba..353ddd5c65 100644 --- a/graphile-build/graphile-build/src/plugins/AddNodeInterfaceToSuitableTypesPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/AddNodeInterfaceToSuitableTypesPlugin.ts @@ -7,6 +7,14 @@ import type { GraphQLInterfaceType } from "grafast/graphql"; import { EXPORTABLE } from "../utils.js"; import { NODE_ID_CODECS, NODE_ID_HANDLER_BY_TYPE_NAME } from "./NodePlugin.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + AddNodeInterfaceToSuitableTypesPlugin: true; + } + } +} + export const AddNodeInterfaceToSuitableTypesPlugin: GraphileConfig.Plugin = { name: "AddNodeInterfaceToSuitableTypesPlugin", version: "1.0.0", diff --git a/graphile-build/graphile-build/src/plugins/BuiltinScalarConnectionsPlugin.ts b/graphile-build/graphile-build/src/plugins/BuiltinScalarConnectionsPlugin.ts index ceb091cde1..95f7641e96 100644 --- a/graphile-build/graphile-build/src/plugins/BuiltinScalarConnectionsPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/BuiltinScalarConnectionsPlugin.ts @@ -3,6 +3,14 @@ import "graphile-config"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + BuiltinScalarConnectionsPlugin: true; + } + } +} + export const BuiltinScalarConnectionsPlugin: GraphileConfig.Plugin = { name: "BuiltinScalarConnectionsPlugin", description: "Adds connection types for builtin scalars", diff --git a/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts b/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts index f105f4f34d..06aaa8cfbb 100644 --- a/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts @@ -1,5 +1,13 @@ import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + ClientMutationIdDescriptionPlugin: true; + } + } +} + /** * Adds generic descriptions (where not already present) to: * diff --git a/graphile-build/graphile-build/src/plugins/CommonTypesPlugin.ts b/graphile-build/graphile-build/src/plugins/CommonTypesPlugin.ts index 4f60a05d4f..a5d24f54e1 100644 --- a/graphile-build/graphile-build/src/plugins/CommonTypesPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/CommonTypesPlugin.ts @@ -9,6 +9,12 @@ import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + CommonTypesPlugin: true; + } + } + namespace GraphileBuild { interface ScopeScalar {} interface SchemaOptions { diff --git a/graphile-build/graphile-build/src/plugins/ConnectionPlugin.ts b/graphile-build/graphile-build/src/plugins/ConnectionPlugin.ts index bfae4054cc..4fa0aa044b 100644 --- a/graphile-build/graphile-build/src/plugins/ConnectionPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/ConnectionPlugin.ts @@ -11,6 +11,12 @@ import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + ConnectionPlugin: true; + } + } + namespace GraphileBuild { interface RegisterCursorConnectionOptions { typeName: string; diff --git a/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts b/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts index 5d2c06d26d..3c96fe8111 100644 --- a/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts +++ b/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts @@ -4,6 +4,12 @@ import { stringTypeSpec } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + CursorTypePlugin: true; + } + } + namespace GraphileBuild { interface ScopeScalar extends Scope { isCursorType?: boolean; diff --git a/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts b/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts index aad339bb25..b5199cc0cc 100644 --- a/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts @@ -5,6 +5,14 @@ import { rootValue } from "grafast"; import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + MutationPayloadQueryPlugin: true; + } + } +} + /** * Adds a 'query' field to each mutation payload object type; this often turns * out to be quite helpful but if you don't want it in your schema then it's diff --git a/graphile-build/graphile-build/src/plugins/MutationPlugin.ts b/graphile-build/graphile-build/src/plugins/MutationPlugin.ts index f720c05e13..4e5b988d47 100644 --- a/graphile-build/graphile-build/src/plugins/MutationPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/MutationPlugin.ts @@ -5,6 +5,14 @@ import { __ValueStep } from "grafast"; import { isValidObjectType } from "../utils.js"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + MutationPlugin: true; + } + } +} + /** * This plugin registers the operation type for the 'mutation' operation, and * if that type adds at least one field then it will be added to the GraphQL diff --git a/graphile-build/graphile-build/src/plugins/NodeAccessorPlugin.ts b/graphile-build/graphile-build/src/plugins/NodeAccessorPlugin.ts index ce3e71da80..8e0b389fbd 100644 --- a/graphile-build/graphile-build/src/plugins/NodeAccessorPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/NodeAccessorPlugin.ts @@ -7,6 +7,12 @@ import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + NodeAccessorPlugin: true; + } + } + namespace GraphileBuild { type NodeFetcher = { ($nodeId: ExecutableStep): ExecutableStep; diff --git a/graphile-build/graphile-build/src/plugins/NodeIdCodecBase64JSONPlugin.ts b/graphile-build/graphile-build/src/plugins/NodeIdCodecBase64JSONPlugin.ts index 3c3a628369..204d3f09b9 100644 --- a/graphile-build/graphile-build/src/plugins/NodeIdCodecBase64JSONPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/NodeIdCodecBase64JSONPlugin.ts @@ -1,5 +1,13 @@ import "graphile-config"; +declare global { + namespace GraphileConfig { + interface Plugins { + NodeIdCodecBase64JSONPlugin: true; + } + } +} + export const NodeIdCodecBase64JSONPlugin: GraphileConfig.Plugin = { name: "NodeIdCodecBase64JSONPlugin", version: "1.0.0", diff --git a/graphile-build/graphile-build/src/plugins/NodeIdCodecPipeStringPlugin.ts b/graphile-build/graphile-build/src/plugins/NodeIdCodecPipeStringPlugin.ts index 34973f793c..0813266181 100644 --- a/graphile-build/graphile-build/src/plugins/NodeIdCodecPipeStringPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/NodeIdCodecPipeStringPlugin.ts @@ -1,5 +1,13 @@ import "graphile-config"; +declare global { + namespace GraphileConfig { + interface Plugins { + NodeIdCodecPipeStringPlugin: true; + } + } +} + function pipeStringEncode(value: any): string | null { return Array.isArray(value) ? value.join("|") : null; } diff --git a/graphile-build/graphile-build/src/plugins/NodePlugin.ts b/graphile-build/graphile-build/src/plugins/NodePlugin.ts index 392fba82f0..5664203896 100644 --- a/graphile-build/graphile-build/src/plugins/NodePlugin.ts +++ b/graphile-build/graphile-build/src/plugins/NodePlugin.ts @@ -7,6 +7,11 @@ import type { GraphQLObjectType } from "grafast/graphql"; import { EXPORTABLE } from "../utils.js"; declare global { + namespace GraphileConfig { + interface Plugins { + NodePlugin: true; + } + } namespace GraphileBuild { interface Inflection { nodeIdFieldName(this: Inflection): string; diff --git a/graphile-build/graphile-build/src/plugins/PageInfoStartEndCursorPlugin.ts b/graphile-build/graphile-build/src/plugins/PageInfoStartEndCursorPlugin.ts index 69fcf960bf..19d2978a3a 100644 --- a/graphile-build/graphile-build/src/plugins/PageInfoStartEndCursorPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/PageInfoStartEndCursorPlugin.ts @@ -6,6 +6,12 @@ import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; declare global { + namespace GraphileConfig { + interface Plugins { + PageInfoStartEndCursorPlugin: true; + } + } + namespace GraphileBuild { interface ScopeObjectFieldsField { isPageInfoStartCursorField?: boolean; diff --git a/graphile-build/graphile-build/src/plugins/QueryPlugin.ts b/graphile-build/graphile-build/src/plugins/QueryPlugin.ts index 9ae40ed07a..5f2da413f4 100644 --- a/graphile-build/graphile-build/src/plugins/QueryPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/QueryPlugin.ts @@ -4,6 +4,14 @@ import { __ValueStep } from "grafast"; import { isValidObjectType } from "../utils.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + QueryPlugin: true; + } + } +} + /** * This plugin registers the operation type for the 'query' operation; the * GraphQL spec current requires GraphQL schemas to have an object type for the diff --git a/graphile-build/graphile-build/src/plugins/QueryQueryPlugin.ts b/graphile-build/graphile-build/src/plugins/QueryQueryPlugin.ts index 1bc7500066..766ad871ab 100644 --- a/graphile-build/graphile-build/src/plugins/QueryQueryPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/QueryQueryPlugin.ts @@ -5,6 +5,14 @@ import { rootValue } from "grafast"; import { EXPORTABLE } from "../utils.js"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + QueryQueryPlugin: true; + } + } +} + /** * Adds the Query.query field to the Query type for Relay 1 compatibility. This * is a vestigial field, you probably don't want it. diff --git a/graphile-build/graphile-build/src/plugins/RegisterQueryNodePlugin.ts b/graphile-build/graphile-build/src/plugins/RegisterQueryNodePlugin.ts index a25b04bd64..1a6aeaf46c 100644 --- a/graphile-build/graphile-build/src/plugins/RegisterQueryNodePlugin.ts +++ b/graphile-build/graphile-build/src/plugins/RegisterQueryNodePlugin.ts @@ -4,6 +4,14 @@ import { constant, rootValue } from "grafast"; import { EXPORTABLE } from "../utils.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + RegisterQueryNodePlugin: true; + } + } +} + export const RegisterQueryNodePlugin: GraphileConfig.Plugin = { name: "RegisterQueryNodePlugin", version: "1.0.0", diff --git a/graphile-build/graphile-build/src/plugins/StreamDeferPlugin.ts b/graphile-build/graphile-build/src/plugins/StreamDeferPlugin.ts index f3545456d3..dc83de9a82 100644 --- a/graphile-build/graphile-build/src/plugins/StreamDeferPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/StreamDeferPlugin.ts @@ -1,5 +1,13 @@ import "graphile-config"; +declare global { + namespace GraphileConfig { + interface Plugins { + StreamDeferPlugin: true; + } + } +} + /** * Enables stream/defer on the schema. * diff --git a/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts b/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts index bf2dc94910..3dc5635b2a 100644 --- a/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts @@ -5,6 +5,14 @@ import { __ValueStep } from "grafast"; import { isValidObjectType } from "../utils.js"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + SubscriptionPlugin: true; + } + } +} + /** * This plugin registers the operation type for the 'subscription' operation, and * if that type adds at least one field then it will be added to the GraphQL diff --git a/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts b/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts index 9832624365..58753655c5 100644 --- a/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts @@ -3,6 +3,14 @@ import "graphile-config"; import swallowError from "../swallowError.js"; import { version } from "../version.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + SwallowErrorsPlugin: true; + } + } +} + /** * This plugin changes the default handling for "recoverable" errors from * throwing the error to instead logging it and carrying on. We do not diff --git a/graphile-build/graphile-build/src/plugins/TrimEmptyDescriptionsPlugin.ts b/graphile-build/graphile-build/src/plugins/TrimEmptyDescriptionsPlugin.ts index eec524b762..63aa790e1e 100644 --- a/graphile-build/graphile-build/src/plugins/TrimEmptyDescriptionsPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/TrimEmptyDescriptionsPlugin.ts @@ -7,6 +7,14 @@ import type { GraphQLInputFieldConfig, } from "grafast/graphql"; +declare global { + namespace GraphileConfig { + interface Plugins { + TrimEmptyDescriptionsPlugin: true; + } + } +} + /** * Sets the 'description' attribute to null if it's the empty string; useful * for cleaning up the schema as printing a schema with a lot of empty string diff --git a/graphile-build/graphile-simplify-inflection/src/index.ts b/graphile-build/graphile-simplify-inflection/src/index.ts index ee8e444e5f..6e47460b6a 100644 --- a/graphile-build/graphile-simplify-inflection/src/index.ts +++ b/graphile-build/graphile-simplify-inflection/src/index.ts @@ -3,6 +3,14 @@ import type {} from "graphile-build"; import type {} from "graphile-build-pg"; import type { GraphileConfig } from "graphile-config"; +declare global { + namespace GraphileConfig { + interface Plugins { + PgSimplifyInflectionPlugin: true; + } + } +} + /** * Returns true if array1 and array2 have the same length, and every pair of * values within them pass the `comparator` check (which defaults to `===`). diff --git a/graphile-build/graphile-utils/src/makePgSmartTagsPlugin.ts b/graphile-build/graphile-utils/src/makePgSmartTagsPlugin.ts index d8f8e62138..333d736de1 100644 --- a/graphile-build/graphile-utils/src/makePgSmartTagsPlugin.ts +++ b/graphile-build/graphile-utils/src/makePgSmartTagsPlugin.ts @@ -580,7 +580,7 @@ export function makeJSONPgSmartTagsPlugin( export const makePgSmartTagsFromFilePlugin = ( tagsFile = process.cwd() + "/postgraphile.tags.json5", - name?: string, + name?: keyof GraphileConfig.Plugins, ): GraphileConfig.Plugin => { /* * We're wrapping the `smartTagsPlugin` defined below with a plugin wrapper @@ -640,3 +640,11 @@ export const TagsFilePlugin = makePgSmartTagsFromFilePlugin( undefined, "TagsFilePlugin", ); + +declare global { + namespace GraphileConfig { + interface Plugins { + TagsFilePlugin: true; + } + } +} diff --git a/postgraphile/postgraphile/src/plugins/PgV4BehaviorPlugin.ts b/postgraphile/postgraphile/src/plugins/PgV4BehaviorPlugin.ts index 0f67ee06c2..cd934e0393 100644 --- a/postgraphile/postgraphile/src/plugins/PgV4BehaviorPlugin.ts +++ b/postgraphile/postgraphile/src/plugins/PgV4BehaviorPlugin.ts @@ -7,6 +7,10 @@ import { inspect } from "util"; declare global { namespace GraphileConfig { + interface Plugins { + PgV4BehaviorPlugin: true; + } + interface GatherHelpers { pgV4SmartTags: Record; } diff --git a/postgraphile/postgraphile/src/plugins/PgV4InflectionPlugin.ts b/postgraphile/postgraphile/src/plugins/PgV4InflectionPlugin.ts index 52380b9918..44b098190c 100644 --- a/postgraphile/postgraphile/src/plugins/PgV4InflectionPlugin.ts +++ b/postgraphile/postgraphile/src/plugins/PgV4InflectionPlugin.ts @@ -3,6 +3,9 @@ import "graphile-build-pg"; declare global { namespace GraphileConfig { + interface Plugins { + PgV4InflectionPlugin: true; + } interface GatherHelpers { pgV4SmartTags: Record; } diff --git a/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts b/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts index 5127f1ec5f..50fe2409c5 100644 --- a/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts +++ b/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts @@ -6,6 +6,9 @@ import { inspect } from "util"; declare global { namespace GraphileConfig { + interface Plugins { + PgV4SmartTagsPlugin: true; + } interface GatherHelpers { pgV4SmartTags: Record; } diff --git a/postgraphile/postgraphile/src/presets/lazy-jwt.ts b/postgraphile/postgraphile/src/presets/lazy-jwt.ts index 76f0d65c80..19c096a46a 100644 --- a/postgraphile/postgraphile/src/presets/lazy-jwt.ts +++ b/postgraphile/postgraphile/src/presets/lazy-jwt.ts @@ -21,6 +21,14 @@ declare global { } } +declare global { + namespace GraphileConfig { + interface Plugins { + GrafservPgJWTPlugin: true; + } + } +} + const GrafservPgJWTPlugin: GraphileConfig.Plugin = { name: "GrafservPgJWTPlugin", version, diff --git a/postgraphile/postgraphile/src/presets/relay.ts b/postgraphile/postgraphile/src/presets/relay.ts index 8b5de48822..de4f3d861e 100644 --- a/postgraphile/postgraphile/src/presets/relay.ts +++ b/postgraphile/postgraphile/src/presets/relay.ts @@ -13,6 +13,14 @@ const RELAY_HIDDEN_COLUMN_BEHAVIORS = [ "-orderBy", ] as const; +declare global { + namespace GraphileConfig { + interface Plugins { + PgRelayPlugin: true; + } + } +} + /** @experimental */ export const PgRelayPlugin: GraphileConfig.Plugin = { name: "PgRelayPlugin", diff --git a/utils/graphile-config/src/index.ts b/utils/graphile-config/src/index.ts index e1f29ea568..1512150fe1 100644 --- a/utils/graphile-config/src/index.ts +++ b/utils/graphile-config/src/index.ts @@ -33,14 +33,39 @@ export function sortedPlugins( declare global { namespace GraphileConfig { + /** + * Expand this through declaration merging to get TypeScript + * auto-completion of plugin names in the relevant places. + */ + interface Plugins { + [key: string & {}]: true; + } + + /** + * Expand this through declaration merging to get TypeScript + * auto-completion of things that plugins can provide. + */ + interface PluginProvides { + [key: string & {}]: true; + } + interface Plugin { - name: string; + name: keyof GraphileConfig.Plugins; version: string; experimental?: boolean; description?: string; - provides?: string[]; - after?: string[]; - before?: string[]; + provides?: ( + | keyof GraphileConfig.Plugins + | keyof GraphileConfig.PluginProvides + )[]; + after?: ( + | keyof GraphileConfig.Plugins + | keyof GraphileConfig.PluginProvides + )[]; + before?: ( + | keyof GraphileConfig.Plugins + | keyof GraphileConfig.PluginProvides + )[]; } /** @@ -51,7 +76,10 @@ declare global { interface Preset { extends?: ReadonlyArray; plugins?: Plugin[]; - disablePlugins?: ReadonlyArray; + disablePlugins?: ReadonlyArray; + + // These are to explicitly forbid options used in PostGraphile V4 for + // legacy reasons. appendPlugins?: never; prependPlugins?: never; skipPlugins?: never; @@ -63,7 +91,7 @@ declare global { // As Preset, except extends is an empty array and plugins is definitely set. extends?: ReadonlyArray; plugins?: Plugin[]; - disablePlugins?: ReadonlyArray; + disablePlugins?: ReadonlyArray; } } } From 38674f648314fe2281309493dda30ee044b1c322 Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Fri, 16 Aug 2024 09:20:54 +0100 Subject: [PATCH 2/4] Add 'Provides' autocompletes --- .../src/plugins/PgCodecsPlugin.ts | 4 ++++ .../graphile-build-pg/src/plugins/PgTypesPlugin.ts | 4 ++++ graphile-build/graphile-build/src/index.ts | 5 +++++ .../plugins/ClientMutationIdDescriptionPlugin.ts | 4 ++++ .../graphile-build/src/plugins/CursorTypePlugin.ts | 4 ++++ .../src/plugins/MutationPayloadQueryPlugin.ts | 4 ++++ .../graphile-build/src/plugins/MutationPlugin.ts | 3 +++ .../graphile-build/src/plugins/QueryPlugin.ts | 3 +++ .../src/plugins/SubscriptionPlugin.ts | 4 ++++ .../src/plugins/SwallowErrorsPlugin.ts | 4 ++++ .../src/plugins/PgV4SmartTagsPlugin.ts | 5 +++++ utils/graphile-config/src/functionality.ts | 6 +++--- utils/graphile-config/src/index.ts | 14 ++++---------- utils/graphile-config/src/interfaces.ts | 6 +++--- 14 files changed, 54 insertions(+), 16 deletions(-) diff --git a/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts index 9fb9140c95..6ac539394a 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgCodecsPlugin.ts @@ -83,6 +83,10 @@ declare global { PgCodecsPlugin: true; } + interface Provides { + PgCodecs: true; + } + interface GatherHelpers { pgCodecs: { getCodecFromClass( diff --git a/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts b/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts index 2337e4f51c..046febb82a 100644 --- a/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts +++ b/graphile-build/graphile-build-pg/src/plugins/PgTypesPlugin.ts @@ -14,6 +14,10 @@ declare global { interface Plugins { PgTypesPlugin: true; } + + interface Provides { + "pg-standard-types": true; + } } namespace GraphileBuild { interface ScopeObject { diff --git a/graphile-build/graphile-build/src/index.ts b/graphile-build/graphile-build/src/index.ts index 1642f2a38f..33cb96d492 100644 --- a/graphile-build/graphile-build/src/index.ts +++ b/graphile-build/graphile-build/src/index.ts @@ -701,6 +701,11 @@ export { version } from "./version.js"; declare global { namespace GraphileConfig { + interface Provides { + default: true; + inferred: true; + override: true; + } interface Preset { /** * The inflection phase is the first phase that occurs when building a diff --git a/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts b/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts index 06aaa8cfbb..f6a3d77df1 100644 --- a/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/ClientMutationIdDescriptionPlugin.ts @@ -5,6 +5,10 @@ declare global { interface Plugins { ClientMutationIdDescriptionPlugin: true; } + + interface Provides { + ClientMutationIdDescription: true; + } } } diff --git a/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts b/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts index 3c96fe8111..d87488308f 100644 --- a/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts +++ b/graphile-build/graphile-build/src/plugins/CursorTypePlugin.ts @@ -8,6 +8,10 @@ declare global { interface Plugins { CursorTypePlugin: true; } + + interface Provides { + Cursor: true; + } } namespace GraphileBuild { diff --git a/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts b/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts index b5199cc0cc..f1c4024096 100644 --- a/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/MutationPayloadQueryPlugin.ts @@ -10,6 +10,10 @@ declare global { interface Plugins { MutationPayloadQueryPlugin: true; } + + interface Provides { + MutationPayloadQuery: true; + } } } diff --git a/graphile-build/graphile-build/src/plugins/MutationPlugin.ts b/graphile-build/graphile-build/src/plugins/MutationPlugin.ts index 4e5b988d47..098c9909a3 100644 --- a/graphile-build/graphile-build/src/plugins/MutationPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/MutationPlugin.ts @@ -10,6 +10,9 @@ declare global { interface Plugins { MutationPlugin: true; } + interface Provides { + Mutation: true; + } } } diff --git a/graphile-build/graphile-build/src/plugins/QueryPlugin.ts b/graphile-build/graphile-build/src/plugins/QueryPlugin.ts index 5f2da413f4..8da1843d18 100644 --- a/graphile-build/graphile-build/src/plugins/QueryPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/QueryPlugin.ts @@ -9,6 +9,9 @@ declare global { interface Plugins { QueryPlugin: true; } + interface Provides { + Query: true; + } } } diff --git a/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts b/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts index 3dc5635b2a..7bb4e17b07 100644 --- a/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/SubscriptionPlugin.ts @@ -10,6 +10,10 @@ declare global { interface Plugins { SubscriptionPlugin: true; } + + interface Provides { + Subscription: true; + } } } diff --git a/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts b/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts index 58753655c5..c18dc3d914 100644 --- a/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts +++ b/graphile-build/graphile-build/src/plugins/SwallowErrorsPlugin.ts @@ -8,6 +8,10 @@ declare global { interface Plugins { SwallowErrorsPlugin: true; } + + interface Provides { + SwallowErrors: true; + } } } diff --git a/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts b/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts index 50fe2409c5..92d0220a92 100644 --- a/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts +++ b/postgraphile/postgraphile/src/plugins/PgV4SmartTagsPlugin.ts @@ -9,6 +9,11 @@ declare global { interface Plugins { PgV4SmartTagsPlugin: true; } + + interface Provides { + "smart-tags": true; + } + interface GatherHelpers { pgV4SmartTags: Record; } diff --git a/utils/graphile-config/src/functionality.ts b/utils/graphile-config/src/functionality.ts index 1d7808a121..e140bd03a2 100644 --- a/utils/graphile-config/src/functionality.ts +++ b/utils/graphile-config/src/functionality.ts @@ -27,9 +27,9 @@ export function orderedApply< type FullFunctionalitySpec = { id: string; plugin: GraphileConfig.Plugin; - provides: string[]; - before: string[]; - after: string[]; + provides: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; + before: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; + after: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; callback: UnwrapCallback; }; // Normalize all the hooks and gather them into collections diff --git a/utils/graphile-config/src/index.ts b/utils/graphile-config/src/index.ts index 1512150fe1..53ded33168 100644 --- a/utils/graphile-config/src/index.ts +++ b/utils/graphile-config/src/index.ts @@ -45,7 +45,7 @@ declare global { * Expand this through declaration merging to get TypeScript * auto-completion of things that plugins can provide. */ - interface PluginProvides { + interface Provides { [key: string & {}]: true; } @@ -56,16 +56,10 @@ declare global { description?: string; provides?: ( | keyof GraphileConfig.Plugins - | keyof GraphileConfig.PluginProvides - )[]; - after?: ( - | keyof GraphileConfig.Plugins - | keyof GraphileConfig.PluginProvides - )[]; - before?: ( - | keyof GraphileConfig.Plugins - | keyof GraphileConfig.PluginProvides + | keyof GraphileConfig.Provides )[]; + after?: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; + before?: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; } /** diff --git a/utils/graphile-config/src/interfaces.ts b/utils/graphile-config/src/interfaces.ts index 16318cd56e..a2de0d14f5 100644 --- a/utils/graphile-config/src/interfaces.ts +++ b/utils/graphile-config/src/interfaces.ts @@ -1,9 +1,9 @@ export type AnyCallback = (...args: any[]) => any; export type CallbackDescriptor = { - provides?: string[]; - before?: string[]; - after?: string[]; + provides?: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; + before?: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; + after?: (keyof GraphileConfig.Plugins | keyof GraphileConfig.Provides)[]; callback: T; }; From 8b472cd51cd66d8227f9f2722d09c0a774792b0f Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Fri, 16 Aug 2024 09:22:13 +0100 Subject: [PATCH 3/4] docs(changeset): `disablePlugins` now supports TypeScript auto-completion of known plugin names. Other names are still accepted without error, so this is just a minor DX improvement rather than type safety. --- .changeset/two-balloons-learn.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .changeset/two-balloons-learn.md diff --git a/.changeset/two-balloons-learn.md b/.changeset/two-balloons-learn.md new file mode 100644 index 0000000000..02e5b0468a --- /dev/null +++ b/.changeset/two-balloons-learn.md @@ -0,0 +1,10 @@ +--- +"graphile-build-pg": patch +"graphile-build": patch +"postgraphile": patch +"graphile-config": patch +--- + +`disablePlugins` now supports TypeScript auto-completion of known plugin names. +Other names are still accepted without error, so this is just a minor DX +improvement rather than type safety. From 792988e99ee80bd7d50de9c91c61b015344d78b0 Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Fri, 16 Aug 2024 09:26:07 +0100 Subject: [PATCH 4/4] Disable lint that forbids in TS --- utils/graphile-config/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/graphile-config/src/index.ts b/utils/graphile-config/src/index.ts index 53ded33168..4c01d09fa4 100644 --- a/utils/graphile-config/src/index.ts +++ b/utils/graphile-config/src/index.ts @@ -38,6 +38,7 @@ declare global { * auto-completion of plugin names in the relevant places. */ interface Plugins { + // eslint-disable-next-line @typescript-eslint/ban-types [key: string & {}]: true; } @@ -46,6 +47,7 @@ declare global { * auto-completion of things that plugins can provide. */ interface Provides { + // eslint-disable-next-line @typescript-eslint/ban-types [key: string & {}]: true; }