From 3cd78a719cf43d81a60dce804e3262828fb77432 Mon Sep 17 00:00:00 2001 From: vejrj <77059398+vejrj@users.noreply.github.com> Date: Wed, 28 Jan 2026 11:05:05 +0100 Subject: [PATCH 1/2] Fix missing base context in resolvers in empty schema --- .../ts-codegen/src/__tests__/context.test.ts | 47 +++++++++++++++++++ packages/ts-codegen/src/resolvers.ts | 16 +++++++ 2 files changed, 63 insertions(+) diff --git a/packages/ts-codegen/src/__tests__/context.test.ts b/packages/ts-codegen/src/__tests__/context.test.ts index 8cfc2f1a6..48d782b19 100644 --- a/packages/ts-codegen/src/__tests__/context.test.ts +++ b/packages/ts-codegen/src/__tests__/context.test.ts @@ -1336,6 +1336,53 @@ describe(generateTS, () => { `); }); + test("just base context is used", () => { + const { resolvers } = runGenerateTest( + graphql` + extend type Query { + user(id: ID!): String! @context(extends: "baseContextOnly") + } + + type User { + id: ID! + } + `, + { + contextTypeExtensions: { + baseContextTypePath: "@package/default-context", + baseContextTypeName: "DefaultContextType", + legacyBaseContextTypePath: "@package/default-context", + legacyBaseContextTypeName: "DefaultLegacyContextType", + groups: { + baseContextOnly: {}, + }, + contextTypes: {}, + }, + }, + ); + expect(resolvers).toMatchInlineSnapshot(` + "import type { PromiseOrValue } from "@graphitation/supermassive"; + import type { ResolveInfo } from "@graphitation/supermassive"; + import * as Models from "./models.interface"; + import type { DefaultContextType } from "@package/default-context"; + export declare namespace Query { + export interface Resolvers { + readonly user?: user; + } + export type user = (model: unknown, args: { + readonly id: string; + }, context: DefaultContextType, info: ResolveInfo) => PromiseOrValue; + } + export declare namespace User { + export interface Resolvers { + readonly id?: id; + } + export type id = (model: Models.User, args: {}, context: unknown, info: ResolveInfo) => PromiseOrValue; + } + " + `); + }); + test("enum is used as @context namespace value", () => { const { resolvers, models, enums, inputs, contextMappingOutput } = runGenerateTest( diff --git a/packages/ts-codegen/src/resolvers.ts b/packages/ts-codegen/src/resolvers.ts index e887fd124..4f9c8555b 100644 --- a/packages/ts-codegen/src/resolvers.ts +++ b/packages/ts-codegen/src/resolvers.ts @@ -170,12 +170,24 @@ function generateImports(context: TsCodegenContext) { } }; + const markBaseContextUsed = (contextTypeItem: ContextTypeItem) => { + if (contextTypeItem.isLegacy) { + legacyBaseContextUsed = true; + } else { + baseContextUsed = true; + } + }; + for (const [, root] of Object.entries(context.getContextMap())) { const rootValue: ContextTypeItem | undefined = root.__context; if (rootValue) { if ( rootValue.values.every(({ id }) => uniqueContextImportNames.has(id)) ) { + // When values is empty, we still need to mark base context as used + if (rootValue.values.length === 0) { + markBaseContextUsed(rootValue); + } continue; } @@ -190,6 +202,10 @@ function generateImports(context: TsCodegenContext) { uniqueContextImportNames.has(id), ) ) { + // When values is empty, we still need to mark base context as used + if (contextTypeItem.values.length === 0) { + markBaseContextUsed(contextTypeItem); + } continue; } From ef901126b798d76bde70253a27bab07a510dfc81 Mon Sep 17 00:00:00 2001 From: vejrj <77059398+vejrj@users.noreply.github.com> Date: Wed, 28 Jan 2026 11:05:19 +0100 Subject: [PATCH 2/2] Change files --- ...on-ts-codegen-04ef6aa6-8b45-4057-b1c6-ffb83ba2dc31.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@graphitation-ts-codegen-04ef6aa6-8b45-4057-b1c6-ffb83ba2dc31.json diff --git a/change/@graphitation-ts-codegen-04ef6aa6-8b45-4057-b1c6-ffb83ba2dc31.json b/change/@graphitation-ts-codegen-04ef6aa6-8b45-4057-b1c6-ffb83ba2dc31.json new file mode 100644 index 000000000..46e451d0b --- /dev/null +++ b/change/@graphitation-ts-codegen-04ef6aa6-8b45-4057-b1c6-ffb83ba2dc31.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix missing base context in resolvers in empty schema", + "packageName": "@graphitation/ts-codegen", + "email": "77059398+vejrj@users.noreply.github.com", + "dependentChangeType": "patch" +}