Skip to content

Commit 6c90e0e

Browse files
santinoardatan
authored andcommitted
Add wrap mode to resolvers-composition transform (#1928)
* Implement "wrap" mode on resolvers composition transform so this works on GraphQL sources as well * Update documentation
1 parent ad36051 commit 6c90e0e

File tree

9 files changed

+102
-24
lines changed

9 files changed

+102
-24
lines changed

β€Ž.changeset/young-yaks-prove.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@graphql-mesh/transform-resolvers-composition': minor
3+
'@graphql-mesh/types': minor
4+
---
5+
6+
Add wrap mode to resolvers-composition transform (#1928)

β€Žpackages/transforms/resolvers-composition/src/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@ import { composeResolvers, ResolversComposerMapping } from '@graphql-tools/resol
55
import { extractResolvers, loadFromModuleExportExpressionSync } from '@graphql-mesh/utils';
66

77
export default class ResolversCompositionTransform implements MeshTransform {
8-
public noWrap = true;
9-
private config: YamlConfig.Transform['resolversComposition'];
8+
public noWrap: boolean;
9+
private compositions: YamlConfig.ResolversCompositionTransform['compositions'];
1010
private baseDir: string;
1111

1212
constructor({ baseDir, config }: MeshTransformOptions<YamlConfig.Transform['resolversComposition']>) {
13-
this.config = config;
13+
this.noWrap = config.mode ? config.mode !== 'wrap' : false; // use config.mode value or default to false
14+
this.compositions = Array.isArray(config) ? config : config.compositions;
1415
this.baseDir = baseDir;
1516
}
1617

1718
transformSchema(schema: GraphQLSchema) {
1819
const resolversComposition: ResolversComposerMapping = {};
1920

20-
for (const { resolver, composer } of this.config) {
21+
for (const { resolver, composer } of this.compositions) {
2122
resolversComposition[resolver] = loadFromModuleExportExpressionSync(composer, {
2223
defaultExportName: 'default',
2324
cwd: this.baseDir,

β€Žpackages/transforms/resolvers-composition/yaml-config.graphql

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,23 @@ extend type Transform {
22
"""
33
Transformer to apply composition to resolvers
44
"""
5-
resolversComposition: [ResolversCompositionTransformObject!]
5+
resolversComposition: ResolversCompositionTransformConfig
66
}
77

8-
type ResolversCompositionTransformObject @md {
8+
union ResolversCompositionTransformConfig = ResolversCompositionTransform | Any
9+
10+
type ResolversCompositionTransform @md {
11+
"""
12+
Specify to apply resolvers-composition transforms to bare schema or by wrapping original schema
13+
"""
14+
mode: ResolversCompositionTransformMode
15+
"""
16+
Array of resolver/composer to apply
17+
"""
18+
compositions: [ResolversCompositionTransformObject!]!
19+
}
20+
21+
type ResolversCompositionTransformObject {
922
"""
1023
The GraphQL Resolver path
1124
Example: Query.users
@@ -17,3 +30,8 @@ type ResolversCompositionTransformObject @md {
1730
"""
1831
composer: Any!
1932
}
33+
34+
enum ResolversCompositionTransformMode {
35+
bare
36+
wrap
37+
}

β€Žpackages/types/src/config-schema.json

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -410,12 +410,27 @@
410410
]
411411
},
412412
"resolversComposition": {
413-
"type": "array",
414-
"items": {
415-
"$ref": "#/definitions/ResolversCompositionTransformObject"
416-
},
417-
"additionalItems": false,
418-
"description": "Transformer to apply composition to resolvers"
413+
"description": "Transformer to apply composition to resolvers (Any of: ResolversCompositionTransform, Any)",
414+
"anyOf": [
415+
{
416+
"$ref": "#/definitions/ResolversCompositionTransform"
417+
},
418+
{
419+
"anyOf": [
420+
{
421+
"type": "object",
422+
"additionalProperties": true
423+
},
424+
{
425+
"type": "string"
426+
},
427+
{
428+
"type": "array",
429+
"additionalItems": true
430+
}
431+
]
432+
}
433+
]
419434
},
420435
"snapshot": {
421436
"$ref": "#/definitions/SnapshotTransformConfig",
@@ -2233,6 +2248,27 @@
22332248
}
22342249
}
22352250
},
2251+
"ResolversCompositionTransform": {
2252+
"additionalProperties": false,
2253+
"type": "object",
2254+
"title": "ResolversCompositionTransform",
2255+
"properties": {
2256+
"mode": {
2257+
"type": "string",
2258+
"enum": ["bare", "wrap"],
2259+
"description": "Specify to apply resolvers-composition transforms to bare schema or by wrapping original schema (Allowed values: bare, wrap)"
2260+
},
2261+
"compositions": {
2262+
"type": "array",
2263+
"items": {
2264+
"$ref": "#/definitions/ResolversCompositionTransformObject"
2265+
},
2266+
"additionalItems": false,
2267+
"description": "Array of resolver/composer to apply"
2268+
}
2269+
},
2270+
"required": ["compositions"]
2271+
},
22362272
"ResolversCompositionTransformObject": {
22372273
"additionalProperties": false,
22382274
"type": "object",

β€Žpackages/types/src/config.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -891,9 +891,9 @@ export interface Transform {
891891
*/
892892
rename?: RenameTransform | any;
893893
/**
894-
* Transformer to apply composition to resolvers
894+
* Transformer to apply composition to resolvers (Any of: ResolversCompositionTransform, Any)
895895
*/
896-
resolversComposition?: ResolversCompositionTransformObject[];
896+
resolversComposition?: ResolversCompositionTransform | any;
897897
snapshot?: SnapshotTransformConfig;
898898
[k: string]: any;
899899
}
@@ -1161,6 +1161,16 @@ export interface RenameConfig1 {
11611161
type?: string;
11621162
field?: string;
11631163
}
1164+
export interface ResolversCompositionTransform {
1165+
/**
1166+
* Specify to apply resolvers-composition transforms to bare schema or by wrapping original schema (Allowed values: bare, wrap)
1167+
*/
1168+
mode?: 'bare' | 'wrap';
1169+
/**
1170+
* Array of resolver/composer to apply
1171+
*/
1172+
compositions: ResolversCompositionTransformObject[];
1173+
}
11641174
export interface ResolversCompositionTransformObject {
11651175
/**
11661176
* The GraphQL Resolver path

β€Žpatches/@changesets+cli+2.14.1.patch renamed to β€Žpatches/@changesets+cli+2.16.0.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
diff --git a/node_modules/@changesets/cli/dist/cli.cjs.dev.js b/node_modules/@changesets/cli/dist/cli.cjs.dev.js
2-
index f2a2bfc..0e0b3ff 100644
2+
index f771824..bcb14cc 100644
33
--- a/node_modules/@changesets/cli/dist/cli.cjs.dev.js
44
+++ b/node_modules/@changesets/cli/dist/cli.cjs.dev.js
5-
@@ -556,8 +556,8 @@ async function version(cwd, options, config) {
5+
@@ -576,8 +576,8 @@ async function version(cwd, options, config) {
66
// @ts-ignore
77
var isCI = !!(isCI__default['default'] || process.env.GITHUB_ACTIONS);
88

@@ -14,10 +14,10 @@ index f2a2bfc..0e0b3ff 100644
1414
function jsonParse(input) {
1515
try {
1616
diff --git a/node_modules/@changesets/cli/dist/cli.esm.js b/node_modules/@changesets/cli/dist/cli.esm.js
17-
index 82f2141..d320958 100644
17+
index 40bcc31..258c15a 100644
1818
--- a/node_modules/@changesets/cli/dist/cli.esm.js
1919
+++ b/node_modules/@changesets/cli/dist/cli.esm.js
20-
@@ -533,8 +533,8 @@ async function version(cwd, options, config) {
20+
@@ -553,8 +553,8 @@ async function version(cwd, options, config) {
2121
// @ts-ignore
2222
var isCI = !!(isCI$1 || process.env.GITHUB_ACTIONS);
2323

β€Žpatches/@docusaurus+theme-search-algolia+2.0.0-alpha.72.patch renamed to β€Žpatches/@docusaurus+theme-search-algolia+2.0.0-alpha.ffe8b6106.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ index 033a105..a4148d8 100644
3232
+
3333
return searchClient;
3434
},
35-
[siteMetadata.docusaurusVersion],
35+
[siteMetadata.docusaurusVersion],

β€Žwebsite/docs/getting-started/mesh-transforms.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,17 +186,21 @@ transforms:
186186
field: code
187187
```
188188

189-
### Transforms supporting "bare" mode
189+
### Modes support
190190

191-
Being a recent addition, "bare" mode is not available to all transforms yet.
192-
The table below gives you the list of transforms that support "bare" mode. Transforms not listed here do not support "bare", and so only implement default "wrap" mode.
193-
If you have use cases where you believe "bare" mode should be added to a transform not listed here, feel free to [open a feature request](https://github.com/Urigo/graphql-mesh/issues/new/choose).
191+
The table below illustrates how "bare" and "wrap" modes are supported across all transforms.
192+
If you have use cases for which you would require to introduce either "bare" or "wrap" mode to one of the transforms, feel free to [open a feature request](https://github.com/Urigo/graphql-mesh/issues/new/choose).
194193

195194
| Transform | Bare | Wrap | Docs |
196195
| --------------------- | :--: | :--: | :--------------------------------------------: |
197196
| Cache | βœ… | ❌ | [docs](/docs/transforms/cache) |
197+
| Encapsulate | ❌ | βœ… | [docs](/docs/transforms/encapsulate) |
198198
| Extend | βœ… | ❌ | [docs](/docs/transforms/extend) |
199+
| Federation | ❌ | βœ… | [docs](/docs/transforms/federation) |
199200
| Filter Schema | βœ… | βœ… | [docs](/docs/transforms/filter-schema) |
201+
| Mock | ❌ | βœ… | [docs](/docs/transforms/mock) |
202+
| Naming Convention | ❌ | βœ… | [docs](/docs/transforms/naming-convention) |
203+
| Prefix | ❌ | βœ… | [docs](/docs/transforms/prefix) |
200204
| Rename | βœ… | βœ… | [docs](/docs/transforms/rename) |
201-
| Resolvers Composition | βœ… | ❌ | [docs](/docs/transforms/resolvers-composition) |
205+
| Resolvers Composition | βœ… | βœ… | [docs](/docs/transforms/resolvers-composition) |
202206
| Snapshot | βœ… | ❌ | [docs](/docs/transforms/snapshot) |

β€Žwebsite/docs/transforms/resolvers-composition.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Add the following configuration to your Mesh config file:
1717
```yml
1818
transforms:
1919
- resolversComposition:
20+
mode: bare | wrap
21+
compositions:
2022
- resolver: 'Query.me'
2123
composer: is-auth#isAuth
2224
- resolver: 'Mutation.*'
@@ -35,6 +37,7 @@ module.exports = {
3537
};
3638
```
3739

40+
> For information about "bare" and "wrap" modes, please read the [dedicated section](/docs/getting-started/mesh-transforms#two-different-modes).
3841
3942
<iframe
4043
src="https://codesandbox.io/embed/github/Urigo/graphql-mesh/tree/master/examples/openapi-youtrack?fontsize=14&hidenavigation=1&theme=dark&module=%2F.meshrc.yml"

0 commit comments

Comments
Β (0)