@graphql-mesh/transform-replace-field 1.0.0-alpha-3fc47d119.0 → 1.0.0-alpha-20230420181317-a95037648
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{index.js → cjs/index.js} +23 -21
- package/cjs/package.json +1 -0
- package/{index.mjs → esm/index.js} +9 -8
- package/package.json +27 -20
- package/typings/index.d.ts +11 -0
- /package/{index.d.ts → typings/index.d.cts} +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const graphql_1 = require("graphql");
|
|
4
|
+
const utils_1 = require("@graphql-mesh/utils");
|
|
5
|
+
const code_file_loader_1 = require("@graphql-tools/code-file-loader");
|
|
6
|
+
const graphql_file_loader_1 = require("@graphql-tools/graphql-file-loader");
|
|
7
|
+
const load_1 = require("@graphql-tools/load");
|
|
8
|
+
const utils_2 = require("@graphql-tools/utils");
|
|
10
9
|
// Execute original field resolver and return single property to be hoisted from rsesolver reponse
|
|
11
10
|
const defaultHoistFieldComposer = (next, targetFieldName) => async (root, args, context, info) => {
|
|
12
11
|
const rawResult = await next(root, args, context, info);
|
|
@@ -23,7 +22,7 @@ class ReplaceFieldTransform {
|
|
|
23
22
|
for (const replacement of config.replacements) {
|
|
24
23
|
const { from: { type: fromTypeName, field: fromFieldName }, to: toConfig, scope, composer, name, } = replacement;
|
|
25
24
|
const fieldKey = `${fromTypeName}.${fromFieldName}`;
|
|
26
|
-
const composerFn$ =
|
|
25
|
+
const composerFn$ = (0, utils_1.loadFromModuleExportExpression)(composer, {
|
|
27
26
|
cwd: this.baseDir,
|
|
28
27
|
defaultExportName: 'default',
|
|
29
28
|
importFn: this.importFn,
|
|
@@ -31,20 +30,24 @@ class ReplaceFieldTransform {
|
|
|
31
30
|
this.replacementsMap.set(fieldKey, {
|
|
32
31
|
...toConfig,
|
|
33
32
|
scope,
|
|
34
|
-
composer: (fn) => (...args) => composerFn
|
|
33
|
+
composer: (fn) => (...args) => composerFn$
|
|
34
|
+
.then(composerFn => (composerFn ? composerFn(fn) : fn))
|
|
35
|
+
.then(fn => fn(...args)),
|
|
35
36
|
name,
|
|
36
37
|
});
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
transformSchema(schema) {
|
|
40
41
|
const additionalTypeDefs = this.typeDefs &&
|
|
41
|
-
|
|
42
|
+
(0, load_1.loadTypedefsSync)(this.typeDefs, {
|
|
42
43
|
cwd: this.baseDir,
|
|
43
|
-
loaders: [new
|
|
44
|
+
loaders: [new code_file_loader_1.CodeFileLoader(), new graphql_file_loader_1.GraphQLFileLoader()],
|
|
44
45
|
});
|
|
45
|
-
const baseSchema = additionalTypeDefs
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
const baseSchema = additionalTypeDefs
|
|
47
|
+
? (0, graphql_1.extendSchema)(schema, additionalTypeDefs[0].document)
|
|
48
|
+
: schema;
|
|
49
|
+
const transformedSchema = (0, utils_2.mapSchema)(baseSchema, {
|
|
50
|
+
[utils_2.MapperKind.COMPOSITE_FIELD]: (fieldConfig, currentFieldName, typeName) => {
|
|
48
51
|
const fieldKey = `${typeName}.${currentFieldName}`;
|
|
49
52
|
const newFieldConfig = this.replacementsMap.get(fieldKey);
|
|
50
53
|
if (!newFieldConfig) {
|
|
@@ -52,7 +55,7 @@ class ReplaceFieldTransform {
|
|
|
52
55
|
}
|
|
53
56
|
const fieldName = newFieldConfig.name || currentFieldName;
|
|
54
57
|
const targetFieldName = newFieldConfig.field;
|
|
55
|
-
const targetFieldConfig =
|
|
58
|
+
const targetFieldConfig = (0, utils_2.selectObjectFields)(baseSchema, newFieldConfig.type, fieldName => fieldName === targetFieldName)[targetFieldName];
|
|
56
59
|
if (newFieldConfig.scope === 'config') {
|
|
57
60
|
const targetResolver = targetFieldConfig.resolve;
|
|
58
61
|
targetFieldConfig.resolve = newFieldConfig.composer(targetResolver);
|
|
@@ -66,10 +69,10 @@ class ReplaceFieldTransform {
|
|
|
66
69
|
fieldConfig.resolve = source => source[currentFieldName];
|
|
67
70
|
if (newFieldConfig.scope === 'hoistValue') {
|
|
68
71
|
// implement value hoisting by wrapping a default composer that hoists the value from resolver result
|
|
69
|
-
fieldConfig.resolve = defaultHoistFieldComposer(fieldConfig.resolve ||
|
|
72
|
+
fieldConfig.resolve = defaultHoistFieldComposer(fieldConfig.resolve || graphql_1.defaultFieldResolver, targetFieldName);
|
|
70
73
|
}
|
|
71
74
|
// wrap user-defined composer to current field resolver or, if not preset, defaultFieldResolver
|
|
72
|
-
fieldConfig.resolve = newFieldConfig.composer(fieldConfig.resolve ||
|
|
75
|
+
fieldConfig.resolve = newFieldConfig.composer(fieldConfig.resolve || graphql_1.defaultFieldResolver);
|
|
73
76
|
// avoid re-iterating over replacements that have already been applied
|
|
74
77
|
this.replacementsMap.delete(fieldKey);
|
|
75
78
|
return [fieldName, fieldConfig];
|
|
@@ -78,5 +81,4 @@ class ReplaceFieldTransform {
|
|
|
78
81
|
return transformedSchema;
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
|
-
|
|
82
|
-
module.exports = ReplaceFieldTransform;
|
|
84
|
+
exports.default = ReplaceFieldTransform;
|
package/cjs/package.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { extendSchema,
|
|
1
|
+
import { defaultFieldResolver, extendSchema, } from 'graphql';
|
|
2
2
|
import { loadFromModuleExportExpression } from '@graphql-mesh/utils';
|
|
3
3
|
import { CodeFileLoader } from '@graphql-tools/code-file-loader';
|
|
4
4
|
import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
|
|
5
5
|
import { loadTypedefsSync } from '@graphql-tools/load';
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import { MapperKind, mapSchema, selectObjectFields } from '@graphql-tools/utils';
|
|
8
7
|
// Execute original field resolver and return single property to be hoisted from rsesolver reponse
|
|
9
8
|
const defaultHoistFieldComposer = (next, targetFieldName) => async (root, args, context, info) => {
|
|
10
9
|
const rawResult = await next(root, args, context, info);
|
|
11
10
|
return rawResult && rawResult[targetFieldName];
|
|
12
11
|
};
|
|
13
|
-
class ReplaceFieldTransform {
|
|
12
|
+
export default class ReplaceFieldTransform {
|
|
14
13
|
constructor(options) {
|
|
15
14
|
this.noWrap = true;
|
|
16
15
|
const { baseDir, config, importFn } = options;
|
|
@@ -29,7 +28,9 @@ class ReplaceFieldTransform {
|
|
|
29
28
|
this.replacementsMap.set(fieldKey, {
|
|
30
29
|
...toConfig,
|
|
31
30
|
scope,
|
|
32
|
-
composer: (fn) => (...args) => composerFn
|
|
31
|
+
composer: (fn) => (...args) => composerFn$
|
|
32
|
+
.then(composerFn => (composerFn ? composerFn(fn) : fn))
|
|
33
|
+
.then(fn => fn(...args)),
|
|
33
34
|
name,
|
|
34
35
|
});
|
|
35
36
|
}
|
|
@@ -40,7 +41,9 @@ class ReplaceFieldTransform {
|
|
|
40
41
|
cwd: this.baseDir,
|
|
41
42
|
loaders: [new CodeFileLoader(), new GraphQLFileLoader()],
|
|
42
43
|
});
|
|
43
|
-
const baseSchema = additionalTypeDefs
|
|
44
|
+
const baseSchema = additionalTypeDefs
|
|
45
|
+
? extendSchema(schema, additionalTypeDefs[0].document)
|
|
46
|
+
: schema;
|
|
44
47
|
const transformedSchema = mapSchema(baseSchema, {
|
|
45
48
|
[MapperKind.COMPOSITE_FIELD]: (fieldConfig, currentFieldName, typeName) => {
|
|
46
49
|
const fieldKey = `${typeName}.${currentFieldName}`;
|
|
@@ -76,5 +79,3 @@ class ReplaceFieldTransform {
|
|
|
76
79
|
return transformedSchema;
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
|
-
|
|
80
|
-
export default ReplaceFieldTransform;
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphql-mesh/transform-replace-field",
|
|
3
|
-
"version": "1.0.0-alpha-
|
|
3
|
+
"version": "1.0.0-alpha-20230420181317-a95037648",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@graphql-mesh/types": "0.
|
|
7
|
-
"@graphql-mesh/utils": "1.0.0-alpha-
|
|
8
|
-
"graphql": "
|
|
6
|
+
"@graphql-mesh/types": "1.0.0-alpha-20230420181317-a95037648",
|
|
7
|
+
"@graphql-mesh/utils": "1.0.0-alpha-20230420181317-a95037648",
|
|
8
|
+
"@graphql-tools/utils": "^9.2.1",
|
|
9
|
+
"graphql": "*",
|
|
10
|
+
"tslib": "^2.4.0"
|
|
9
11
|
},
|
|
10
12
|
"dependencies": {
|
|
11
|
-
"@graphql-tools/code-file-loader": "7.3.
|
|
12
|
-
"@graphql-tools/graphql-file-loader": "7.
|
|
13
|
-
"@graphql-tools/load": "7.
|
|
14
|
-
"@graphql-tools/utils": "8.8.0",
|
|
15
|
-
"tslib": "^2.4.0"
|
|
13
|
+
"@graphql-tools/code-file-loader": "7.3.22",
|
|
14
|
+
"@graphql-tools/graphql-file-loader": "7.5.17",
|
|
15
|
+
"@graphql-tools/load": "7.8.14"
|
|
16
16
|
},
|
|
17
17
|
"repository": {
|
|
18
18
|
"type": "git",
|
|
@@ -20,21 +20,28 @@
|
|
|
20
20
|
"directory": "packages/transforms/replace-field"
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
|
-
"main": "index.js",
|
|
24
|
-
"module": "index.
|
|
25
|
-
"typings": "index.d.ts",
|
|
23
|
+
"main": "cjs/index.js",
|
|
24
|
+
"module": "esm/index.js",
|
|
25
|
+
"typings": "typings/index.d.ts",
|
|
26
26
|
"typescript": {
|
|
27
|
-
"definition": "index.d.ts"
|
|
27
|
+
"definition": "typings/index.d.ts"
|
|
28
28
|
},
|
|
29
|
+
"type": "module",
|
|
29
30
|
"exports": {
|
|
30
31
|
".": {
|
|
31
|
-
"require":
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
32
|
+
"require": {
|
|
33
|
+
"types": "./typings/index.d.cts",
|
|
34
|
+
"default": "./cjs/index.js"
|
|
35
|
+
},
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./typings/index.d.ts",
|
|
38
|
+
"default": "./esm/index.js"
|
|
39
|
+
},
|
|
40
|
+
"default": {
|
|
41
|
+
"types": "./typings/index.d.ts",
|
|
42
|
+
"default": "./esm/index.js"
|
|
43
|
+
}
|
|
37
44
|
},
|
|
38
45
|
"./package.json": "./package.json"
|
|
39
46
|
}
|
|
40
|
-
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { GraphQLSchema } from 'graphql';
|
|
2
|
+
import { MeshTransform, MeshTransformOptions, YamlConfig } from '@graphql-mesh/types';
|
|
3
|
+
export default class ReplaceFieldTransform implements MeshTransform {
|
|
4
|
+
noWrap: boolean;
|
|
5
|
+
private baseDir;
|
|
6
|
+
private typeDefs;
|
|
7
|
+
private replacementsMap;
|
|
8
|
+
private importFn;
|
|
9
|
+
constructor(options: MeshTransformOptions<YamlConfig.ReplaceFieldTransformConfig>);
|
|
10
|
+
transformSchema(schema: GraphQLSchema): GraphQLSchema;
|
|
11
|
+
}
|
|
File without changes
|