Skip to content

Commit 094654a

Browse files
feat(typedefs-resolvers): add sync function version (#803)
Co-authored-by: Michał Lytek <michal.wojciech.lytek@gmail.com>
1 parent 776e458 commit 094654a

File tree

5 files changed

+560
-455
lines changed

5 files changed

+560
-455
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- allow deprecating input fields and args (#794)
1010
- support disabling inferring default values (#793)
1111
- support readonly arrays for roles of `@Authorized` decorator (#935)
12+
- add sync version of `buildTypeDefsAndResolvers` function (#803)
1213
### Fixes
1314
- **Breaking Change**: properly emit types nullability when `defaultValue` is provided and remove `ConflictingDefaultWithNullableError` error (#751)
1415
- allow defining extension on field resolver level for fields also defined as a property of the class (#776)

docs/bootstrap.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,12 @@ const stateLink = withClientState({
139139
// ...the rest of `ApolloClient` initialization code
140140
```
141141

142-
Be aware that some of the TypeGraphQL features (i.a. [query complexity](complexity.md)) might not work with the `buildTypeDefsAndResolvers` approach because they use some low-level `graphql-js` features.
142+
There's also a sync version of it - `buildTypeDefsAndResolversSync`:
143+
144+
```typescript
145+
const { typeDefs, resolvers } = buildTypeDefsAndResolvers({
146+
resolvers: [FirstResolver, SecondResolver],
147+
});
148+
```
149+
150+
However, be aware that some of the TypeGraphQL features (i.a. [query complexity](complexity.md)) might not work with the `buildTypeDefsAndResolvers` approach because they use some low-level `graphql-js` features.

src/utils/buildTypeDefsAndResolvers.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
1-
import { printSchema } from "graphql";
1+
import { GraphQLSchema, printSchema } from "graphql";
22

3-
import { BuildSchemaOptions, buildSchema } from "./buildSchema";
3+
import { BuildSchemaOptions, buildSchema, buildSchemaSync } from "./buildSchema";
44
import { createResolversMap } from "./createResolversMap";
55

66
export async function buildTypeDefsAndResolvers(options: BuildSchemaOptions) {
77
const schema = await buildSchema(options);
8+
return createTypeDefsAndResolversMap(schema);
9+
}
10+
11+
export function buildTypeDefsAndResolversSync(options: BuildSchemaOptions) {
12+
const schema = buildSchemaSync(options);
13+
return createTypeDefsAndResolversMap(schema);
14+
}
15+
16+
function createTypeDefsAndResolversMap(schema: GraphQLSchema) {
817
const typeDefs = printSchema(schema);
918
const resolvers = createResolversMap(schema);
1019
return { typeDefs, resolvers };

src/utils/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
export { buildSchema, buildSchemaSync, BuildSchemaOptions } from "./buildSchema";
2-
export { buildTypeDefsAndResolvers } from "./buildTypeDefsAndResolvers";
2+
export {
3+
buildTypeDefsAndResolvers,
4+
buildTypeDefsAndResolversSync,
5+
} from "./buildTypeDefsAndResolvers";
36
export { createResolversMap } from "./createResolversMap";
47
export {
58
emitSchemaDefinitionFile,

0 commit comments

Comments
 (0)