Priority: MED
Package: @saga-ed/soa-api-core
Coach ref: hipponot/nimbee#8015
The AbstractGQLController.getResolvers() method returns ResolverMap, which is untyped (Record<string, any>). This means resolver _ (parent) and args parameters are unknown/any — no type inference from .gql schema files. Each consuming project must independently set up @graphql-codegen with typescript-resolvers plugin and cast return values (as ResolverMap) to bridge between generated types and the base class contract.
Requested changes:
- Add
@graphql-codegen/cli, @graphql-codegen/typescript, and @graphql-codegen/typescript-resolvers to the SOA API core toolchain or provide a shared codegen preset
- Consider making
ResolverMap generic or providing a typed alternative so resolvers get full type inference (_ as Record<PropertyKey, never>, args as RequireFields<QueryFooArgs, "bar">) without requiring per-project codegen setup
- Document the recommended codegen configuration (mappers, enumValues, contextType) for consuming projects
Coach workaround: Coach API has its own codegen.ts, graphql-codegen devDependencies, and extensive mappers config mapping generated GQL types back to existing TS types. Resolvers use satisfies QueryResolvers / satisfies MutationResolvers on inline objects to get type inference while returning the untyped ResolverMap.
Priority: MED
Package:
@saga-ed/soa-api-coreCoach ref: hipponot/nimbee#8015
The
AbstractGQLController.getResolvers()method returnsResolverMap, which is untyped (Record<string, any>). This means resolver_(parent) andargsparameters areunknown/any— no type inference from.gqlschema files. Each consuming project must independently set up@graphql-codegenwithtypescript-resolversplugin and cast return values (as ResolverMap) to bridge between generated types and the base class contract.Requested changes:
@graphql-codegen/cli,@graphql-codegen/typescript, and@graphql-codegen/typescript-resolversto the SOA API core toolchain or provide a shared codegen presetResolverMapgeneric or providing a typed alternative so resolvers get full type inference (_asRecord<PropertyKey, never>,argsasRequireFields<QueryFooArgs, "bar">) without requiring per-project codegen setupCoach workaround: Coach API has its own
codegen.ts,graphql-codegendevDependencies, and extensivemappersconfig mapping generated GQL types back to existing TS types. Resolvers usesatisfies QueryResolvers/satisfies MutationResolverson inline objects to get type inference while returning the untypedResolverMap.