Gathering detailed insights and metrics for @eddeee888/gcg-typescript-resolver-files
Gathering detailed insights and metrics for @eddeee888/gcg-typescript-resolver-files
Gathering detailed insights and metrics for @eddeee888/gcg-typescript-resolver-files
Gathering detailed insights and metrics for @eddeee888/gcg-typescript-resolver-files
List of GraphQL Code Generator plugins that complements the official plugins.
npm install @eddeee888/gcg-typescript-resolver-files
Typescript
Module System
Node Version
NPM Version
@eddeee888/gcg-typescript-resolver-files@0.12.1
Updated on May 17, 2025
@eddeee888/gcg-typescript-resolver-files@0.12.0
Updated on Jan 29, 2025
@eddeee888/gcg-server-config@0.2.3
Updated on Jan 29, 2025
@eddeee888/gcg-typescript-resolver-files@0.11.0
Updated on Oct 30, 2024
@eddeee888/gcg-typescript-resolver-files@0.10.4
Updated on Aug 07, 2024
@eddeee888/gcg-typescript-resolver-files@0.10.3
Updated on Aug 01, 2024
TypeScript (99.6%)
JavaScript (0.32%)
Shell (0.08%)
Total Downloads
0
Last Day
0
Last Week
0
Last Month
0
Last Year
0
MIT License
63 Stars
613 Commits
15 Forks
2 Watchers
7 Branches
9 Contributors
Updated on Jul 15, 2025
Latest Version
0.12.1
Package Id
@eddeee888/gcg-typescript-resolver-files@0.12.1
Unpacked Size
269.22 kB
Size
58.52 kB
File Count
167
NPM Version
10.9.2
Node Version
22.15.0
Published on
May 17, 2025
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
This GraphQL Code Generator plugin creates resolvers given GraphQL schema.
This relies on types generated from @graphql-codegen/typescript and @graphql-codegen/typescript-resolvers plugins.
1yarn add -D @graphql-codegen/cli @eddeee888/gcg-typescript-resolver-files 2yarn add graphql-scalars
Mapper
suffix) from accompanying .mappers.ts
files in each module. For example, if the schema file is /path/to/schema.graphql
, the mapper file is /path/to/schema.mappers.ts
.1# src/schema/base/schema.graphql 2type Query 3 4# src/schema/user/schema.graphql 5extend type Query { 6 user(id: ID!): User 7} 8 9type User { 10 id: ID! 11 fullName: String! 12} 13 14type Address { 15 id: ID! 16 address: String! 17}
1// src/schema/user/schema.mappers.ts 2 3// Exporting the following Mapper interfaces and types is the equivalent of this codegen config: 4// ```yml 5// mappers: 6// Address: './user/schema.mappers#AddressMapper' 7// User: './user/schema.mappers#UserMapper' 8// ``` 9 10export { Address as AddressMapper } from 'address-package'; 11 12export interface UserMapper { 13 id: string; 14 firstName: string; 15 lastName: string; 16}
1// codegen.ts 2import type { CodegenConfig } from '@graphql-codegen/cli'; 3import { defineConfig } from '@eddeee888/gcg-typescript-resolver-files'; 4 5const config: CodegenConfig = { 6 schema: '**/schema.graphql', 7 generates: { 8 'src/schema': defineConfig(), 9 }, 10}; 11 12export default config;
OR
1# codegen.yml 2schema: '**/*.graphql' 3generates: 4 src/schema: 5 preset: '@eddeee888/gcg-typescript-resolver-files' 6 watchPattern: '**/*.mappers.ts'
Running codegen will generate the following files:
src/schema/user/resolvers/Query/user.ts
src/schema/user/resolvers/User.ts
src/schema/user/resolvers/Address.ts
src/schema/resolvers.generated.ts
src/schema/typeDefs.generated.ts
src/schema/types.generated.ts
merged
or modules
(Default: modules
)
How files are collocated. modules
detects containing dir of a schema file as "modules", then split resolvers into those modules. merged
treats baseOutputDir
as the one and only module and generates resolvers.
last
or first
or a number (Default: last
)
Specifies how the plugin determines the module name for each schema file.
last
: The module name is derived from the last directory (within the schema directory) in the file's path.first
: The module name is derived from the first directory (within the schema directory) in the file's path.For example:
src/schema/foo/bar/baz/User.graphql
=> module name is baz
src/schema/foo/bar/baz/User.graphql
=> module name is foo
src/schema/foo/bar/baz/User.graphql
=> module name is bar
src/schema/foo/bar/baz/User.graphql
=> module name is bar
string
(Default: ./types.generated.ts
)
Relative path to type file generated by typescript-resolvers
plugin.
string
(Default: resolvers
)
Relative path to target dir. For config.mode=merged
, files will be generated into <baseOutputDir>/<resolverRelativeTargetDir>
. For config.mode=modules
, files will be generated into <baseOutputDir>/**/<moduleName>/<resolverRelativeTargetDir>
.
merged
or modules
(Default: merged
)
How to generate file/s that put resolvers map together:
merged
: one filemodules
: one file per modulestring
(Default: resolvers.generated.ts
)
File that puts all generated resolvers together. Relative from baseOutputDir
.
disabled
or recommended
or all
or object (Default: recommended
)
Decides which resolvers to generate:
disabled
: generates no resolvers. Use this if you want to use your own structures. Note: if custom scalars are detected and used, resolver main files are still generated.recommended
: generates the minimal amount of resolvers. Use this if you want a managed experience.
typescript-resolvers
that make these not required.all
: generates all resolvers. Use this if you want all resolvers to be generated and use the ones you need.Internally, each string option is turned into an object. This object uses glob pattern to tell which files to be generated based on the file's normalized name (*). For example, recommended
option is the equivalent of the following object:
1{ 2 query: '*', 3 mutation: '*', 4 subscription: '*', 5 scalar: '*', 6 object: '*', 7 union: '', 8 interface: '', 9 enum: '', 10}
(*) A normalized name has the following shape: <Module name>.<Top-level type name>.<Field resolver>?
Consider this schema:
1# src/schema/pet/schema.graphql 2extend type Query { 3 pets: [Pet!]! 4} 5 6type Cat { 7 id: ID! 8} 9type Dog { 10 id: ID! 11} 12union Pet = Cat | Dog 13 14# src/schema/user/schema.graphql 15extend type Mutation { 16 createUser(id: ID!): CreateUserResult! 17} 18 19type User { 20 id: ID! 21} 22 23type CreateUserOk { 24 result: User! 25} 26type CreateUserError { 27 error: String! 28} 29union CreateUserResult = CreateUserOk | CreateUserError
Then, the generated files and normalised names are:
src/schema/pet/resolvers/Query/pets.ts
, affected by query
option, normalized name: pet.Query.pets
src/schema/pet/resolvers/Cat.ts
, affected by object
option, normalized name: pet.Cat
src/schema/pet/resolvers/Dog.ts
, affected by object
option, normalized name: pet.Dog
src/schema/pet/resolvers/Pet.ts
, affected by union
option, normalized name: pet.Pet
src/schema/user/resolvers/Mutation/createUser.ts
, affected by mutation
option, normalized name: user.Mutation.createUser
src/schema/user/resolvers/User.ts
, affected by object
option, normalized name: user.User
src/schema/user/resolvers/CreateUserOk.ts
, affected by object
option, normalized name: user.CreateUserOk
src/schema/user/resolvers/CreateUserError.ts
, affected by object
option, normalized name: user.CreateUserError
src/schema/user/resolvers/CreateUserResult.ts
, affected by union
option, normalized name: user.CreateUserResult
Now, let's say we want to disable all union files, types ending with Ok
or Error
, the config would look like this:
1defineConfig({
2 resolverGeneration: {
3 query: '*',
4 mutation: '*',
5 subscription: '*',
6 scalar: '*',
7 object: ['!*.*Ok', '!*.*Error'], // Disables objects ending with `Ok` or `Error` in every module
8 union: '', // Empty string disables all file generation of relevant type in every module
9 interface: '*',
10 },
11});
Hint: To see why certain files are skipped, run codegen command with DEBUG
turned on:
DEBUG="@eddeee888/gcg-typescript-resolver-files" yarn graphql-codegen
merged
or mergedWhitelisted
or modules
(Default: merged
)
How to generate typeDefs file/s:
merged
: one filemergedWhitelisted
: one file but only contains whitelisted modulesmodules
: one file per moduleIf config.mode=merged
, this config is always merged
string
or false
(Default: ./typeDefs.generated.ts
)
Where to generate typeDefs files. If value is false
or empty string, the file/s are not generated.
If typeDefsFileMode=merged
or typeDefsFileMode=mergedWhitelisted
, this path is relative from baseOutputDir
.
If typeDefsFileMode=modules
, this path is relative from each module directory.
boolean
, string
or object
(Default:./schema.generated.graphqls
)
Option to merge multiple schemas into one. Uses schema-ast plugin internally.
Unless false
is used, the input is turned into the following object:
1{ 2 path: string; // path to the generated file 3 config: `(@graphql-codegen/schema-ast).SchemaASTConfig`; // Full config options can be found here: https://the-guild.dev/graphql/codegen/plugins/other/schema-ast 4}
Note: Make sure your Codegen config's schema
field does not include the generated schema file, otherwise unexpected errors may occur.
Record<string, (@graphql-codegen/add).AddPluginConfig>
(Default: undefined
) (EXPERIMENTAL)
Allows using add plugin on a given file.
Note: Currently only supports resolverTypesPath
file i.e. types.generated.ts
Example:
1// codegen.ts 2{ 3 generates: { 4 'src/schema': defineConfig({ 5 add: { 6 './types.generated.ts': { content: '/* eslint-disable */' }, 7 }, 8 }) 9 } 10}
Array<string>
(Only works with config.mode=modules
)
Whitelists modules to generate files and entries in main file. By default all modules are whitelisted. Useful for gradual migrations.
Array<string>
(Only works with config.mode=modules
)
Blacklists modules to avoid generate files and entries in main file. Useful for gradual migrations.
Record<string, string>
Map of relative or absolute path (prefixed with ~
) to external or existing resolvers.
Examples:
DateTime: ~graphql-scalars#DateTimeResolver
Query.me: '~@org/meResolver#default as meResolver'
User: 'otherResolvers#User as UserResolver'
.(@graphql-codegen/typescript).TypeScriptPluginConfig & (@graphql-codegen/typescript-resolvers).TypeScriptResolversPluginConfig
Takes typescript config and typescript-resolvers config to override the defaults.
Experimental options:
namingConvention
string
(Default: ./
)
By default, mappers must be siblings with the schema they represent. For example, if the schema file is /path/to/schema.graphql
, the mapper file is /path/to/schema.mappers.ts
. This extension allows mappers to reside in a different directory relative to the schema file using the pattern <schemaPath>/<mappersRelativeTargetDir>/<schemaName><mappersFileExtension>
.
string
(Default: .mappers.ts
)
The files with this extension provides mappers interfaces and types for the schema files in the same module.
string
(Default: Mapper
)
Exported interfaces and types with this suffix from mappersFile
in each module are put into the mappers object of @graphql-codegen/typescript-resolvers.
string
or false
(Default: graphql-scalars
)
Where Scalar implementation and codegen types come from. Use false
to implement your own Scalars.
If using an module that is not graphql-scalars
, the module must export resolver implementation and codegen type the same way graphql-scalars
does e.g.
1{ 2 resolvers: { 3 DateTime: DateTimeResolver, 4 }, 5 DateTimeResolver: { 6 // ... resolver implementation 7 extensions: { 8 codegenScalarType: 'Date | string', 9 }, 10 } 11}
Record<string, { resolver?: string; type?: string | { input: string; output: string } }>
(Default: {}
)
Overrides scalars' resolver implementation, type or both.
Example:
1// codegen.ts 2{ 3 generates: { 4 'src/schema': defineConfig({ 5 scalarsOverrides: { 6 DateTime: { 7 resolver: './localDateTimeResolver#Resolver', 8 } 9 Currency: { 10 type: 'unknown' 11 }, 12 BigInt: { 13 resolver: '@other/scalars#BigIntResolver', 14 type: { 15 input: 'bigint', 16 output: 'number | string' 17 } 18 } 19 } 20 }) 21 } 22}
string
(Default: ./tsconfig.json
)
Project's TypeScript config, relative from project root. This helps type analysis such as resolving custom module paths.
smart
or disabled
or object (Default: smart
) (Experimental)
smart
option does static analysis and add fields to ensure no runtime errors. The default smart
option is expanded to an object like this to target supported types:
1{ 2 object: 'smart', 3 enum: 'smart' 4}
bool
(Default: true
)
Determines whether imports emitted should use CommonJS syntax or ESM syntax (with .js
file endings)
Custom preset config can be set using the presetConfig
option:
1# codegen.yml 2schema: '**/*.graphql' 3generates: 4 src/schema: 5 preset: '@eddeee888/gcg-typescript-resolver-files' 6 presetConfig: 7 mode: 'modules' 8 resolverTypesPath: './types.gen.ts' 9 typeDefsFilePath: false 10 typesPluginsConfig: # Pass config you'd normally use for `typescript` and `typescript-resolvers` here 11 nonOptionalTypename: false 12 federation: true
If you use codegen.ts
, you can use the exported defineConfig
function to get better TypeScript support:
1import type { CodegenConfig } from '@graphql-codegen/cli';
2import { defineConfig } from '@eddeee888/gcg-typescript-resolver-files';
3
4const config: CodegenConfig = {
5 schema: '**/schema.graphql',
6 generates: {
7 'src/schema': defineConfig({
8 mode: 'modules',
9 resolverTypesPath: './types.gen.ts',
10 typeDefsFilePath: false,
11 typesPluginsConfig: {
12 // Pass config you'd normally use for `typescript` and `typescript-resolvers` here
13 nonOptionalTypename: false,
14 federation: true,
15 },
16 }),
17 },
18};
19export default config;
No vulnerabilities found.
No security vulnerabilities found.