diff --git a/CHANGELOG.md b/CHANGELOG.md
index 758e62425d7..7698f45bd12 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,10 @@
### Next
-- Fix visitEnumValue to allow modifying the enum value
+- Fix visitEnumValue to allow modifying the enum value
[@danielrearden](https://github.com/danielrearden) in [#1003](https://github.com/ardatan/graphql-tools/pull/1391)
+- Export `generateProxyingResolvers` from `@graphql-tools/wrap`.
+- Fix `stitchSchemas` from `@graphql-tools/stitch` from the case there the typeDefs array is empty. [#1575](https://github.com/ardatan/graphql-tools/pull/1575)
### 5.0.0
diff --git a/package.json b/package.json
index a0c3def7551..8e79da79e68 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "graphql-tools-monorepo",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Useful tools to create and manipulate GraphQL schemas.",
"private": true,
"scripts": {
@@ -43,8 +43,8 @@
"jest": "26.0.1",
"ts-jest": "26.1.0",
"typescript": "3.9.3",
- "@typescript-eslint/eslint-plugin": "3.0.2",
- "@typescript-eslint/parser": "3.0.2",
+ "@typescript-eslint/eslint-plugin": "3.1.0",
+ "@typescript-eslint/parser": "3.1.0",
"bob-the-bundler": "1.0.2",
"eslint": "7.1.0",
"eslint-config-prettier": "6.11.0",
diff --git a/packages/delegate/package.json b/packages/delegate/package.json
index fa7605f294e..51682edadd0 100644
--- a/packages/delegate/package.json
+++ b/packages/delegate/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/delegate",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -18,8 +18,8 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/delegate/src/results/handleNull.ts b/packages/delegate/src/results/handleNull.ts
index cfea57daf00..791682fc674 100644
--- a/packages/delegate/src/results/handleNull.ts
+++ b/packages/delegate/src/results/handleNull.ts
@@ -1,6 +1,6 @@
import { GraphQLError } from 'graphql';
-import { getErrorsByPathSegment, CombinedError } from '@graphql-tools/utils';
+import { getErrorsByPathSegment, CombinedError, relocatedError } from '@graphql-tools/utils';
export function handleNull(errors: ReadonlyArray) {
if (errors.length) {
@@ -10,7 +10,7 @@ export function handleNull(errors: ReadonlyArray) {
return combinedError;
}
const error = errors[0];
- return error.originalError || error;
+ return error.originalError || relocatedError(error, null);
} else if (errors.some(error => typeof error.path[1] === 'string')) {
const childErrors = getErrorsByPathSegment(errors);
diff --git a/packages/graphql-tag-pluck/package.json b/packages/graphql-tag-pluck/package.json
index a888caf981c..d4144c51848 100644
--- a/packages/graphql-tag-pluck/package.json
+++ b/packages/graphql-tag-pluck/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/graphql-tag-pluck",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Pluck graphql-tag template literals",
"license": "MIT",
"repository": "git@github.com:ardatan/graphql-tools.git",
@@ -18,13 +18,13 @@
"@babel/parser": "7.10.2",
"@babel/traverse": "7.10.1",
"@babel/types": "7.10.2",
- "@graphql-tools/utils": "6.0.5"
+ "@graphql-tools/utils": "6.0.6"
},
"optionalDependencies": {
"vue-template-compiler": "^2.6.11"
},
"devDependencies": {
- "@types/babel__traverse": "7.0.11",
+ "@types/babel__traverse": "7.0.12",
"vue-template-compiler": "2.6.11"
},
"publishConfig": {
diff --git a/packages/graphql-tools/package.json b/packages/graphql-tools/package.json
index 86bdcbf1e55..2815842a9d7 100644
--- a/packages/graphql-tools/package.json
+++ b/packages/graphql-tools/package.json
@@ -1,6 +1,6 @@
{
"name": "graphql-tools",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Useful tools to create and manipulate GraphQL schemas.",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -19,26 +19,26 @@
"directory": "dist"
},
"dependencies": {
- "@graphql-tools/delegate": "6.0.5",
- "@graphql-tools/graphql-tag-pluck": "6.0.5",
- "@graphql-tools/import": "6.0.5",
- "@graphql-tools/links": "6.0.5",
- "@graphql-tools/load": "6.0.5",
- "@graphql-tools/code-file-loader": "6.0.5",
- "@graphql-tools/git-loader": "6.0.5",
- "@graphql-tools/github-loader": "6.0.5",
- "@graphql-tools/graphql-file-loader": "6.0.5",
- "@graphql-tools/json-file-loader": "6.0.5",
- "@graphql-tools/module-loader": "6.0.5",
- "@graphql-tools/url-loader": "6.0.5",
- "@graphql-tools/load-files": "6.0.5",
- "@graphql-tools/merge": "6.0.5",
- "@graphql-tools/mock": "6.0.5",
- "@graphql-tools/relay-operation-optimizer": "6.0.5",
- "@graphql-tools/resolvers-composition": "6.0.5",
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/stitch": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/wrap": "6.0.5"
+ "@graphql-tools/delegate": "6.0.6",
+ "@graphql-tools/graphql-tag-pluck": "6.0.6",
+ "@graphql-tools/import": "6.0.6",
+ "@graphql-tools/links": "6.0.6",
+ "@graphql-tools/load": "6.0.6",
+ "@graphql-tools/code-file-loader": "6.0.6",
+ "@graphql-tools/git-loader": "6.0.6",
+ "@graphql-tools/github-loader": "6.0.6",
+ "@graphql-tools/graphql-file-loader": "6.0.6",
+ "@graphql-tools/json-file-loader": "6.0.6",
+ "@graphql-tools/module-loader": "6.0.6",
+ "@graphql-tools/url-loader": "6.0.6",
+ "@graphql-tools/load-files": "6.0.6",
+ "@graphql-tools/merge": "6.0.6",
+ "@graphql-tools/mock": "6.0.6",
+ "@graphql-tools/relay-operation-optimizer": "6.0.6",
+ "@graphql-tools/resolvers-composition": "6.0.6",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/stitch": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/wrap": "6.0.6"
}
}
\ No newline at end of file
diff --git a/packages/import/package.json b/packages/import/package.json
index 3b2ab46f77b..e78aff952e5 100644
--- a/packages/import/package.json
+++ b/packages/import/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/import",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
diff --git a/packages/import/src/index.ts b/packages/import/src/index.ts
index 892c5e55ccc..bcf814c3dd4 100644
--- a/packages/import/src/index.ts
+++ b/packages/import/src/index.ts
@@ -31,6 +31,8 @@ import {
SchemaDefinitionNode,
OperationTypeDefinitionNode,
DocumentNode,
+ ScalarTypeDefinitionNode,
+ ScalarTypeExtensionNode,
} from 'graphql';
import { readFileSync, realpathSync } from 'fs-extra';
import { dirname, join, isAbsolute } from 'path';
@@ -138,6 +140,12 @@ function visitFile(
case Kind.DIRECTIVE_DEFINITION:
visitDirectiveDefinitionNode(definition, dependencySet, dependenciesByDefinitionName);
break;
+ case Kind.SCALAR_TYPE_DEFINITION:
+ visitScalarDefinitionNode(definition, dependencySet);
+ break;
+ case Kind.SCHEMA_DEFINITION:
+ visitSchemaDefinitionNode(definition, dependencySet);
+ break;
case Kind.OBJECT_TYPE_EXTENSION:
visitObjectTypeExtensionNode(definition, dependencySet, dependenciesByDefinitionName);
break;
@@ -153,8 +161,8 @@ function visitFile(
case Kind.INPUT_OBJECT_TYPE_EXTENSION:
visitInputObjectTypeExtensionNode(definition, dependencySet, dependenciesByDefinitionName);
break;
- case Kind.SCHEMA_DEFINITION:
- visitSchemaDefinitionNode(definition, dependencySet);
+ case Kind.SCALAR_TYPE_EXTENSION:
+ visitScalarExtensionNode(definition, dependencySet);
break;
}
if ('fields' in definition) {
@@ -365,11 +373,11 @@ function visitObjectTypeDefinitionNode(
) {
const typeName = node.name.value;
dependencySet.add(typeName);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(fieldDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(fieldDefinitionNode =>
visitFieldDefinitionNode(fieldDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
- node.interfaces.forEach(namedTypeNode => {
+ node.interfaces?.forEach(namedTypeNode => {
visitNamedTypeNode(namedTypeNode, dependencySet);
const interfaceName = namedTypeNode.name.value;
// interface should be dependent to the type as well
@@ -392,10 +400,10 @@ function visitFieldDefinitionNode(
dependencySet: Set,
dependenciesByDefinitionName: Map>
) {
- node.arguments.forEach(inputValueDefinitionNode =>
+ node.arguments?.forEach(inputValueDefinitionNode =>
visitInputValueDefinitionNode(inputValueDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
visitTypeNode(node.type, dependencySet, dependenciesByDefinitionName);
}
@@ -445,7 +453,7 @@ function visitInputValueDefinitionNode(
dependencySet: Set,
dependenciesByDefinitionName: Map>
) {
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
visitTypeNode(node.type, dependencySet, dependenciesByDefinitionName);
}
@@ -456,8 +464,8 @@ function visitInterfaceTypeDefinitionNode(
) {
const typeName = node.name.value;
dependencySet.add(typeName);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(fieldDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(fieldDefinitionNode =>
visitFieldDefinitionNode(fieldDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
(node as any).interfaces?.forEach((namedTypeNode: NamedTypeNode) => {
@@ -473,13 +481,13 @@ function visitInterfaceTypeDefinitionNode(
function visitUnionTypeDefinitionNode(node: UnionTypeDefinitionNode, dependencySet: Set) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
node.types.forEach(namedTypeNode => visitNamedTypeNode(namedTypeNode, dependencySet));
}
function visitEnumTypeDefinitionNode(node: EnumTypeDefinitionNode, dependencySet: Set) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
}
function visitInputObjectTypeDefinitionNode(
@@ -488,8 +496,8 @@ function visitInputObjectTypeDefinitionNode(
dependenciesByDefinitionName: Map>
) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(inputValueDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(inputValueDefinitionNode =>
visitInputValueDefinitionNode(inputValueDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
}
@@ -500,7 +508,7 @@ function visitDirectiveDefinitionNode(
dependenciesByDefinitionName: Map>
) {
dependencySet.add(node.name.value);
- node.arguments.forEach(inputValueDefinitionNode =>
+ node.arguments?.forEach(inputValueDefinitionNode =>
visitInputValueDefinitionNode(inputValueDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
}
@@ -512,11 +520,11 @@ function visitObjectTypeExtensionNode(
) {
const typeName = node.name.value;
dependencySet.add(typeName);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(fieldDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(fieldDefinitionNode =>
visitFieldDefinitionNode(fieldDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
- node.interfaces.forEach(namedTypeNode => {
+ node.interfaces?.forEach(namedTypeNode => {
visitNamedTypeNode(namedTypeNode, dependencySet);
const interfaceName = namedTypeNode.name.value;
// interface should be dependent to the type as well
@@ -534,8 +542,8 @@ function visitInterfaceTypeExtensionNode(
) {
const typeName = node.name.value;
dependencySet.add(typeName);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(fieldDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(fieldDefinitionNode =>
visitFieldDefinitionNode(fieldDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
(node as any).interfaces?.forEach((namedTypeNode: NamedTypeNode) => {
@@ -551,13 +559,13 @@ function visitInterfaceTypeExtensionNode(
function visitUnionTypeExtensionNode(node: UnionTypeExtensionNode, dependencySet: Set) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
node.types.forEach(namedTypeNode => visitNamedTypeNode(namedTypeNode, dependencySet));
}
function visitEnumTypeExtensionNode(node: EnumTypeExtensionNode, dependencySet: Set) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
}
function visitInputObjectTypeExtensionNode(
@@ -566,20 +574,30 @@ function visitInputObjectTypeExtensionNode(
dependenciesByDefinitionName: Map>
) {
dependencySet.add(node.name.value);
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
- node.fields.forEach(inputValueDefinitionNode =>
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.fields?.forEach(inputValueDefinitionNode =>
visitInputValueDefinitionNode(inputValueDefinitionNode, dependencySet, dependenciesByDefinitionName)
);
}
function visitSchemaDefinitionNode(node: SchemaDefinitionNode, dependencySet: Set) {
dependencySet.add('schema');
- node.directives.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
node.operationTypes.forEach(operationTypeDefinitionNode =>
visitOperationTypeDefinitionNode(operationTypeDefinitionNode, dependencySet)
);
}
+function visitScalarDefinitionNode(node: ScalarTypeDefinitionNode, dependencySet: Set) {
+ dependencySet.add(node.name.value);
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+}
+
+function visitScalarExtensionNode(node: ScalarTypeExtensionNode, dependencySet: Set) {
+ dependencySet.add(node.name.value);
+ node.directives?.forEach(directiveNode => visitDirectiveNode(directiveNode, dependencySet));
+}
+
function visitOperationTypeDefinitionNode(node: OperationTypeDefinitionNode, dependencySet: Set) {
visitNamedTypeNode(node.type, dependencySet);
}
diff --git a/packages/import/tests/schema/fixtures/mix-n-match/a.graphql b/packages/import/tests/schema/fixtures/mix-n-match/a.graphql
index 9cec6fbf524..a296d31f608 100644
--- a/packages/import/tests/schema/fixtures/mix-n-match/a.graphql
+++ b/packages/import/tests/schema/fixtures/mix-n-match/a.graphql
@@ -4,4 +4,5 @@ type A {
first: String
second: Float
b: B
+ date: Date
}
diff --git a/packages/import/tests/schema/fixtures/mix-n-match/b.graphql b/packages/import/tests/schema/fixtures/mix-n-match/b.graphql
index d1072a528eb..d167a24e90f 100644
--- a/packages/import/tests/schema/fixtures/mix-n-match/b.graphql
+++ b/packages/import/tests/schema/fixtures/mix-n-match/b.graphql
@@ -1,4 +1,5 @@
# import C1, C2 from '../import-all/c.graphql'
+scalar Date
type B {
hello: String!
c1: C1
diff --git a/packages/import/tests/schema/import-schema.spec.ts b/packages/import/tests/schema/import-schema.spec.ts
index 4ed3ac5aaef..bbddb4141d0 100644
--- a/packages/import/tests/schema/import-schema.spec.ts
+++ b/packages/import/tests/schema/import-schema.spec.ts
@@ -6,7 +6,7 @@ import { Kind, print } from 'graphql';
const importSchema = (schema: string, schemas?: Record) => {
const document = processImport(schema, __dirname, schemas);
- return print(mergeTypeDefs(document.definitions.map(definition => ({ kind: Kind.DOCUMENT, definitions: [definition]})), {
+ return print(mergeTypeDefs(document.definitions.map(definition => ({ kind: Kind.DOCUMENT, definitions: [definition] })), {
sort: true,
useSchemaDefinition: false,
}))
@@ -290,10 +290,13 @@ describe('importSchema', () => {
test(`importSchema: import all mix 'n match`, () => {
const expectedSDL = /* GraphQL */`\
+ scalar Date
+
type A {
first: String
second: Float
b: B
+ date: Date
}
type C1 {
diff --git a/packages/links/package.json b/packages/links/package.json
index 9354c4e28de..33e54f9b0c4 100644
--- a/packages/links/package.json
+++ b/packages/links/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/links",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -23,7 +23,7 @@
"graphql-upload": "11.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"apollo-link": "1.2.14",
"apollo-upload-client": "13.0.0",
"form-data": "3.0.0",
diff --git a/packages/load-files/package.json b/packages/load-files/package.json
index 3776480a490..dd16436e8bc 100644
--- a/packages/load-files/package.json
+++ b/packages/load-files/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/load-files",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,7 +16,7 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "globby": "11.0.0",
+ "globby": "11.0.1",
"unixify": "1.0.0",
"fs-extra": "9.0.0"
},
diff --git a/packages/load/package.json b/packages/load/package.json
index 64d567428b3..92d52f0e1b5 100644
--- a/packages/load/package.json
+++ b/packages/load/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/load",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -22,9 +22,9 @@
"graphql-type-json": "0.3.1"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/merge": "6.0.5",
- "globby": "11.0.0",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/merge": "6.0.6",
+ "globby": "11.0.1",
"import-from": "3.0.0",
"is-glob": "4.0.1",
"p-limit": "2.3.0",
diff --git a/packages/load/src/load-typedefs.ts b/packages/load/src/load-typedefs.ts
index f7e1cba63ce..17c1a004770 100644
--- a/packages/load/src/load-typedefs.ts
+++ b/packages/load/src/load-typedefs.ts
@@ -14,8 +14,6 @@ export type LoadTypedefsOptions = SingleFi
filterKinds?: string[];
ignore?: string | string[];
sort?: boolean;
- skipGraphQLImport?: boolean;
- forceGraphQLImport?: boolean;
};
export type UnnormalizedTypeDefPointer = { [key: string]: any } | string;
diff --git a/packages/loaders/apollo-engine/package.json b/packages/loaders/apollo-engine/package.json
index b733e171bd4..f5891cfc8d9 100644
--- a/packages/loaders/apollo-engine/package.json
+++ b/packages/loaders/apollo-engine/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/apollo-engine-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,7 +16,7 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"cross-fetch": "3.0.4",
"tslib": "~2.0.0"
},
diff --git a/packages/loaders/code-file/package.json b/packages/loaders/code-file/package.json
index c74b9fdcb12..9113ad83660 100644
--- a/packages/loaders/code-file/package.json
+++ b/packages/loaders/code-file/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/code-file-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,8 +16,8 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/graphql-tag-pluck": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/graphql-tag-pluck": "6.0.6",
"fs-extra": "9.0.0",
"tslib": "~2.0.0"
},
diff --git a/packages/loaders/code-file/src/index.ts b/packages/loaders/code-file/src/index.ts
index 65125a5e658..8e9f6557d27 100644
--- a/packages/loaders/code-file/src/index.ts
+++ b/packages/loaders/code-file/src/index.ts
@@ -18,13 +18,14 @@ import {
} from '@graphql-tools/graphql-tag-pluck';
import { tryToLoadFromExport, tryToLoadFromExportSync } from './load-from-module';
import { isAbsolute, resolve } from 'path';
-import { exists, existsSync, readFileSync, readFile } from 'fs-extra';
+import { readFileSync, readFile, pathExists, pathExistsSync } from 'fs-extra';
import { cwd } from 'process';
export type CodeFileLoaderOptions = {
require?: string | string[];
pluckConfig?: GraphQLTagPluckOptions;
noPluck?: boolean;
+ noRequire?: boolean;
} & SingleFileOptions;
const FILE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.vue'];
@@ -41,7 +42,7 @@ export class CodeFileLoader implements UniversalLoader {
if (isValidPath(pointer)) {
if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd || cwd(), pointer);
- return new Promise(resolve => exists(normalizedFilePath, resolve));
+ return pathExists(normalizedFilePath);
}
}
@@ -52,9 +53,7 @@ export class CodeFileLoader implements UniversalLoader {
if (isValidPath(pointer)) {
if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd || cwd(), pointer);
- if (existsSync(normalizedFilePath)) {
- return true;
- }
+ return pathExistsSync(normalizedFilePath);
}
}
diff --git a/packages/loaders/git/package.json b/packages/loaders/git/package.json
index 9a799f1a2d6..6c9c413a918 100644
--- a/packages/loaders/git/package.json
+++ b/packages/loaders/git/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/git-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,8 +16,8 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/graphql-tag-pluck": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/graphql-tag-pluck": "6.0.6",
"simple-git": "2.5.0"
},
"buildOptions": {
diff --git a/packages/loaders/github/package.json b/packages/loaders/github/package.json
index 6a44cf9b877..ae3a61ac004 100644
--- a/packages/loaders/github/package.json
+++ b/packages/loaders/github/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/github-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,8 +16,8 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/graphql-tag-pluck": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/graphql-tag-pluck": "6.0.6",
"cross-fetch": "3.0.4"
},
"publishConfig": {
diff --git a/packages/loaders/graphql-file/package.json b/packages/loaders/graphql-file/package.json
index 9d3f821e9aa..9a08b125c12 100644
--- a/packages/loaders/graphql-file/package.json
+++ b/packages/loaders/graphql-file/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/graphql-file-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -19,8 +19,8 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/import": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/import": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"fs-extra": "9.0.0",
"tslib": "~2.0.0"
},
diff --git a/packages/loaders/graphql-file/src/index.ts b/packages/loaders/graphql-file/src/index.ts
index f574b0f7df1..d2ce34312ec 100644
--- a/packages/loaders/graphql-file/src/index.ts
+++ b/packages/loaders/graphql-file/src/index.ts
@@ -8,13 +8,15 @@ import {
SingleFileOptions,
} from '@graphql-tools/utils';
import { isAbsolute, resolve } from 'path';
-import { exists, existsSync, readFile, readFileSync } from 'fs-extra';
+import { readFile, readFileSync, pathExists, pathExistsSync } from 'fs-extra';
import { cwd as processCwd } from 'process';
import { processImport } from '@graphql-tools/import';
const FILE_EXTENSIONS = ['.gql', '.gqls', '.graphql', '.graphqls'];
-export interface GraphQLFileLoaderOptions extends SingleFileOptions {}
+export interface GraphQLFileLoaderOptions extends SingleFileOptions {
+ skipGraphQLImport?: boolean;
+}
function isGraphQLImportFile(rawSDL: string) {
const trimmedRawSDL = rawSDL.trim();
@@ -33,7 +35,7 @@ export class GraphQLFileLoader implements UniversalLoader pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd, pointer);
- return new Promise(resolve => exists(normalizedFilePath, resolve));
+ return pathExists(normalizedFilePath);
}
}
@@ -44,7 +46,7 @@ export class GraphQLFileLoader implements UniversalLoader pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd, pointer);
- return existsSync(normalizedFilePath);
+ return pathExistsSync(normalizedFilePath);
}
}
@@ -55,21 +57,18 @@ export class GraphQLFileLoader implements UniversalLoader",
@@ -16,7 +16,7 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"fs-extra": "9.0.0",
"tslib": "~2.0.0"
},
diff --git a/packages/loaders/json-file/src/index.ts b/packages/loaders/json-file/src/index.ts
index 94253a5f768..f9adb7562fb 100644
--- a/packages/loaders/json-file/src/index.ts
+++ b/packages/loaders/json-file/src/index.ts
@@ -7,7 +7,7 @@ import {
SingleFileOptions,
} from '@graphql-tools/utils';
import { isAbsolute, resolve } from 'path';
-import { exists, existsSync, readFile, readFileSync } from 'fs-extra';
+import { readFile, readFileSync, pathExists, pathExistsSync } from 'fs-extra';
import { cwd } from 'process';
const FILE_EXTENSIONS = ['.json'];
@@ -23,7 +23,7 @@ export class JsonFileLoader implements DocumentLoader {
if (isValidPath(pointer)) {
if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd || cwd(), pointer);
- return new Promise(resolve => exists(normalizedFilePath, resolve));
+ return pathExists(normalizedFilePath);
}
}
@@ -35,9 +35,7 @@ export class JsonFileLoader implements DocumentLoader {
if (FILE_EXTENSIONS.find(extension => pointer.endsWith(extension))) {
const normalizedFilePath = isAbsolute(pointer) ? pointer : resolve(options.cwd || cwd(), pointer);
- if (existsSync(normalizedFilePath)) {
- return true;
- }
+ return pathExistsSync(normalizedFilePath);
}
}
diff --git a/packages/loaders/module/package.json b/packages/loaders/module/package.json
index f5708426201..b077892ad76 100644
--- a/packages/loaders/module/package.json
+++ b/packages/loaders/module/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/module-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,7 +16,7 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/loaders/prisma/package.json b/packages/loaders/prisma/package.json
index ac5ad7ef6c5..6cc5f9e2e0b 100644
--- a/packages/loaders/prisma/package.json
+++ b/packages/loaders/prisma/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/prisma-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -16,8 +16,8 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
- "@graphql-tools/url-loader": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
+ "@graphql-tools/url-loader": "6.0.6",
"fs-extra": "9.0.0",
"prisma-yml": "1.34.10",
"tslib": "~2.0.0"
diff --git a/packages/loaders/prisma/src/index.ts b/packages/loaders/prisma/src/index.ts
index 005db105b4c..862079d8248 100644
--- a/packages/loaders/prisma/src/index.ts
+++ b/packages/loaders/prisma/src/index.ts
@@ -1,7 +1,7 @@
import { UrlLoader, LoadFromUrlOptions } from '@graphql-tools/url-loader';
import { PrismaDefinitionClass, Environment } from 'prisma-yml';
import { join } from 'path';
-import { exists } from 'fs-extra';
+import { pathExists } from 'fs-extra';
import { homedir } from 'os';
import { cwd } from 'process';
@@ -19,7 +19,7 @@ export class PrismaLoader extends UrlLoader {
async canLoad(prismaConfigFilePath: string, options: PrismaLoaderOptions): Promise {
if (typeof prismaConfigFilePath === 'string' && prismaConfigFilePath.endsWith('prisma.yml')) {
const joinedYmlPath = join(options.cwd || cwd(), prismaConfigFilePath);
- return new Promise(resolve => exists(joinedYmlPath, resolve));
+ return pathExists(joinedYmlPath);
}
return false;
}
diff --git a/packages/loaders/url/package.json b/packages/loaders/url/package.json
index 69dc466c9ca..8010046ebe6 100644
--- a/packages/loaders/url/package.json
+++ b/packages/loaders/url/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/url-loader",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -23,8 +23,8 @@
"supertest": "4.0.2"
},
"dependencies": {
- "@graphql-tools/wrap": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/wrap": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"@types/websocket": "1.0.0",
"cross-fetch": "3.0.4",
"tslib": "~2.0.0",
diff --git a/packages/merge/package.json b/packages/merge/package.json
index 3226a5945f1..a63f359b6eb 100644
--- a/packages/merge/package.json
+++ b/packages/merge/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/merge",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -19,8 +19,8 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/mock/package.json b/packages/mock/package.json
index 585df51c99a..e270e66bacd 100644
--- a/packages/mock/package.json
+++ b/packages/mock/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/mock",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -18,8 +18,8 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"devDependencies": {
diff --git a/packages/node-require/package.json b/packages/node-require/package.json
new file mode 100644
index 00000000000..55e288a40fc
--- /dev/null
+++ b/packages/node-require/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@graphql-tools/node-require",
+ "version": "6.0.5",
+ "description": "A set of utils for faster development of GraphQL tools",
+ "repository": "git@github.com:ardatan/graphql-tools.git",
+ "license": "MIT",
+ "sideEffects": false,
+ "main": "dist/index.cjs.js",
+ "module": "dist/index.esm.js",
+ "typings": "dist/index.d.ts",
+ "typescript": {
+ "definition": "dist/index.d.ts"
+ },
+ "peerDependencies": {
+ "graphql": "^14.0.0 || ^15.0.0"
+ },
+ "buildOptions": {
+ "input": "./src/index.ts"
+ },
+ "dependencies": {
+ "@graphql-tools/load": "6.0.5",
+ "@graphql-tools/graphql-file-loader": "6.0.5",
+ "tslib": "~2.0.0"
+ },
+ "publishConfig": {
+ "access": "public",
+ "directory": "dist"
+ }
+}
diff --git a/packages/node-require/src/declarations.d.ts b/packages/node-require/src/declarations.d.ts
new file mode 100644
index 00000000000..5e21ef929d0
--- /dev/null
+++ b/packages/node-require/src/declarations.d.ts
@@ -0,0 +1,28 @@
+/* eslint-disable import/no-duplicates */
+declare module '*.graphql' {
+ import { DocumentNode } from 'graphql';
+
+ const value: DocumentNode;
+ export = value;
+}
+
+declare module '*.gql' {
+ import { DocumentNode } from 'graphql';
+
+ const value: DocumentNode;
+ export = value;
+}
+
+declare module '*.gqls' {
+ import { DocumentNode } from 'graphql';
+
+ const value: DocumentNode;
+ export = value;
+}
+
+declare module '*.graphqls' {
+ import { DocumentNode } from 'graphql';
+
+ const value: DocumentNode;
+ export = value;
+}
diff --git a/packages/node-require/src/index.ts b/packages/node-require/src/index.ts
new file mode 100644
index 00000000000..3b7ee84a928
--- /dev/null
+++ b/packages/node-require/src/index.ts
@@ -0,0 +1,30 @@
+/* eslint-disable @typescript-eslint/triple-slash-reference */
+/* eslint-disable spaced-comment */
+/* eslint-disable node/no-deprecated-api */
+
+///
+
+import { loadTypedefsSync } from '@graphql-tools/load';
+import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
+import { concatAST } from 'graphql';
+
+const VALID_EXTENSIONS = ['graphql', 'graphqls', 'gql', 'gqls'];
+
+function handleModule(m: NodeModule, filename: string) {
+ console.log(m, filename);
+ const sources = loadTypedefsSync(filename, {
+ loaders: [new GraphQLFileLoader()],
+ });
+
+ const documents = sources.map(source => source.document);
+ const mergedDoc = concatAST(documents);
+ m.exports = mergedDoc;
+}
+
+export function registerGraphQLExtensions(require: NodeRequire) {
+ VALID_EXTENSIONS.forEach(ext => {
+ require.extensions[`.${ext}`] = handleModule;
+ });
+}
+
+registerGraphQLExtensions(require);
diff --git a/packages/node-require/test/fixtures/test.graphql b/packages/node-require/test/fixtures/test.graphql
new file mode 100644
index 00000000000..6a59a3af225
--- /dev/null
+++ b/packages/node-require/test/fixtures/test.graphql
@@ -0,0 +1,3 @@
+type Query {
+ foo: String
+}
diff --git a/packages/node-require/test/node-require.spec.ts b/packages/node-require/test/node-require.spec.ts
new file mode 100644
index 00000000000..534b3358077
--- /dev/null
+++ b/packages/node-require/test/node-require.spec.ts
@@ -0,0 +1,14 @@
+import '../src';
+import { print } from 'graphql';
+import { readFileSync } from 'fs';
+
+describe('GraphQL Node Import', () => {
+ it('should import correct definitions', () => {
+ console.log(require.main);
+ const filePath = './fixtures/test.graphql';
+ const typeDefs = require(filePath);
+ expect(print(typeDefs).replace(/\s\s+/g, ' ')).toBe(
+ readFileSync(require.resolve(filePath), 'utf8').replace(/\s\s+/g, ' ')
+ );
+ });
+});
diff --git a/packages/relay-operation-optimizer/package.json b/packages/relay-operation-optimizer/package.json
index 99a1a618abf..e6fb0986245 100644
--- a/packages/relay-operation-optimizer/package.json
+++ b/packages/relay-operation-optimizer/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/relay-operation-optimizer",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Package for optimizing your GraphQL operations relay style.",
"author": {
"name": "Laurin Quast",
@@ -27,7 +27,7 @@
"graphql": "^14.0.0 || ^15.0.0"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"relay-compiler": "9.1.0"
},
"devDependencies": {
diff --git a/packages/resolvers-composition/package.json b/packages/resolvers-composition/package.json
index eca89962906..aa802f62032 100644
--- a/packages/resolvers-composition/package.json
+++ b/packages/resolvers-composition/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/resolvers-composition",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Common package containting utils and types for GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
@@ -19,7 +19,7 @@
"@types/lodash": "4.14.154"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"lodash": "4.17.15"
},
"publishConfig": {
diff --git a/packages/schema/package.json b/packages/schema/package.json
index 4e802e70577..dfa1385e24d 100644
--- a/packages/schema/package.json
+++ b/packages/schema/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/schema",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -21,7 +21,7 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/stitch/package.json b/packages/stitch/package.json
index f62f9c3b7e7..7ac56e653cb 100644
--- a/packages/stitch/package.json
+++ b/packages/stitch/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/stitch",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -21,10 +21,10 @@
"dataloader": "2.0.0"
},
"dependencies": {
- "@graphql-tools/delegate": "6.0.5",
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/wrap": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/delegate": "6.0.6",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/wrap": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/stitch/src/stitchSchemas.ts b/packages/stitch/src/stitchSchemas.ts
index 27ad05f31a3..da547adc9b1 100644
--- a/packages/stitch/src/stitchSchemas.ts
+++ b/packages/stitch/src/stitchSchemas.ts
@@ -51,7 +51,7 @@ export function stitchSchemas({
}
let schemaLikeObjects: Array = [...subschemas];
- if (typeDefs) {
+ if ((typeDefs && !Array.isArray(typeDefs)) || (Array.isArray(typeDefs) && typeDefs.length)) {
schemaLikeObjects.push(buildDocumentFromTypeDefinitions(typeDefs, parseOptions));
}
if (types != null) {
diff --git a/packages/stitch/tests/errors.test.ts b/packages/stitch/tests/errors.test.ts
index b690b253881..c0caf77f734 100644
--- a/packages/stitch/tests/errors.test.ts
+++ b/packages/stitch/tests/errors.test.ts
@@ -1,8 +1,9 @@
-import { graphql } from 'graphql';
+import { graphql, GraphQLError, buildSchema } from 'graphql';
+import { Executor } from '@graphql-tools/delegate';
import { makeExecutableSchema } from '@graphql-tools/schema';
-
-import { stitchSchemas } from '../src/stitchSchemas';
+import { stitchSchemas } from '@graphql-tools/stitch';
+import { ExecutionResult } from '@graphql-tools/utils';
describe('passes along errors for missing fields on list', () => {
test('if non-null', async () => {
@@ -143,3 +144,60 @@ describe('passes along errors when list field errors', () => {
expect(stitchedResult).toEqual(originalResult);
});
});
+
+describe('passes along errors for remote schemas', () => {
+ it('it works', async () => {
+ const typeDefs = `
+ type Test {
+ field: String!
+ }
+
+ type Query {
+ test: Test!
+ }
+ `;
+
+ const schema = buildSchema(typeDefs)
+
+ const executor: Executor = () => ({
+ data: {
+ test: null
+ },
+ errors: [
+ {
+ message: 'INVALID_CREDENTIALS',
+ path: ['test'],
+ } as unknown as GraphQLError
+ ],
+ }) as ExecutionResult;
+
+ const stitchedSchema = stitchSchemas({
+ schemas: [{
+ schema,
+ executor,
+ }]
+ });
+
+ const expectedResult: ExecutionResult = {
+ data: null,
+ errors: [
+ new GraphQLError(
+ 'INVALID_CREDENTIALS',
+ undefined,
+ undefined,
+ undefined,
+ ['test'],
+ )
+ ],
+ };
+
+ const query = `{
+ test {
+ field
+ }
+ }`
+
+ const result = await graphql(stitchedSchema, query);
+ expect(result).toEqual(expectedResult);
+ });
+});
diff --git a/packages/stitch/tests/fixtures/schemas.ts b/packages/stitch/tests/fixtures/schemas.ts
index 35dda15dc99..09a5365d3e0 100644
--- a/packages/stitch/tests/fixtures/schemas.ts
+++ b/packages/stitch/tests/fixtures/schemas.ts
@@ -16,6 +16,7 @@ import { introspectSchema } from '@graphql-tools/wrap';
import {
IResolvers,
ExecutionResult,
+ mapAsyncIterator,
} from '@graphql-tools/utils';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { PromiseOrValue } from 'graphql/jsutils/PromiseOrValue';
@@ -680,23 +681,36 @@ export const subscriptionSchema: GraphQLSchema = makeExecutableSchema({
});
function makeExecutorFromSchema(schema: GraphQLSchema) {
- return async ({ document, variables, context }: ExecutionParams) => graphql(
- schema,
- print(document),
- null,
- context,
- variables,
- ) as PromiseOrValue>;
+ return async ({ document, variables, context }: ExecutionParams) => {
+ const result = graphql(
+ schema,
+ print(document),
+ null,
+ context,
+ variables,
+ ) as PromiseOrValue>;
+ if (result instanceof Promise) {
+ return result.then(originalResult => JSON.parse(JSON.stringify(originalResult)));
+ }
+ return JSON.parse(JSON.stringify(result));
+ };
}
function makeSubscriberFromSchema(schema: GraphQLSchema) {
- return async ({ document, variables, context }: ExecutionParams) => subscribe(
- schema,
- document,
- null,
- context,
- variables,
- ) as Promise> | ExecutionResult>
+ return async ({ document, variables, context }: ExecutionParams) => {
+ const result = subscribe(
+ schema,
+ document,
+ null,
+ context,
+ variables,
+ ) as Promise> | ExecutionResult>;
+ if (result instanceof Promise) {
+ return result.then(asyncIterator =>
+ mapAsyncIterator(asyncIterator as AsyncIterator, (originalResult: ExecutionResult) => JSON.parse(JSON.stringify(originalResult))));
+ }
+ return JSON.parse(JSON.stringify(result));
+ };
}
export async function makeSchemaRemote(
diff --git a/packages/stitch/tests/stitchSchemas.test.ts b/packages/stitch/tests/stitchSchemas.test.ts
index 65e53038d2d..928682c3c3f 100644
--- a/packages/stitch/tests/stitchSchemas.test.ts
+++ b/packages/stitch/tests/stitchSchemas.test.ts
@@ -2982,6 +2982,36 @@ fragment BookingFragment on Booking {
});
});
+ describe('empty typeDefs array', () => {
+ test('works', async () => {
+ const typeDefs = `
+ type Query {
+ book: Book
+ }
+ type Book {
+ category: String!
+ }
+ `;
+ let schema = makeExecutableSchema({ typeDefs });
+
+ const resolvers = {
+ Query: {
+ book: () => ({ category: 'Test' }),
+ },
+ };
+
+ schema = stitchSchemas({
+ schemas: [schema],
+ resolvers,
+ typeDefs: [],
+ });
+
+ const result = await graphql(schema, '{ book { cat: category } }');
+
+ expect(result.data.book.cat).toBe('Test');
+ });
+ });
+
describe('new root type name', () => {
test('works', async () => {
let bookSchema = makeExecutableSchema({
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 6f1b6e47ab4..399b84eb08f 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/utils",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "Common package containting utils and types for GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"author": "Dotan Simha ",
diff --git a/packages/utils/src/errors.ts b/packages/utils/src/errors.ts
index 330c4099b89..b3562d94b40 100644
--- a/packages/utils/src/errors.ts
+++ b/packages/utils/src/errors.ts
@@ -2,13 +2,13 @@ import { GraphQLError } from 'graphql';
export const ERROR_SYMBOL = Symbol('subschemaErrors');
-export function relocatedError(originalError: GraphQLError, path: ReadonlyArray): GraphQLError {
+export function relocatedError(originalError: GraphQLError, path?: ReadonlyArray): GraphQLError {
return new GraphQLError(
originalError.message,
originalError.nodes,
originalError.source,
originalError.positions,
- path != null ? path : originalError.path,
+ path === null ? undefined : path === undefined ? originalError.path : path,
originalError.originalError,
originalError.extensions
);
diff --git a/packages/utils/src/loaders.ts b/packages/utils/src/loaders.ts
index 6ab43eb3b2b..24ba845a6d1 100644
--- a/packages/utils/src/loaders.ts
+++ b/packages/utils/src/loaders.ts
@@ -11,7 +11,6 @@ export interface Source {
export type SingleFileOptions = ParseOptions &
GraphQLSchemaValidationOptions &
BuildSchemaOptions & {
- noRequire?: boolean;
cwd?: string;
};
diff --git a/packages/webpack-loader/package.json b/packages/webpack-loader/package.json
new file mode 100644
index 00000000000..3b263c61e4a
--- /dev/null
+++ b/packages/webpack-loader/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@graphql-tools/webpack-loader",
+ "version": "6.0.5",
+ "description": "A set of utils for faster development of GraphQL tools",
+ "repository": "git@github.com:ardatan/graphql-tools.git",
+ "license": "MIT",
+ "sideEffects": false,
+ "main": "dist/index.cjs.js",
+ "module": "dist/index.esm.js",
+ "typings": "dist/index.d.ts",
+ "typescript": {
+ "definition": "dist/index.d.ts"
+ },
+ "peerDependencies": {
+ "graphql": "^14.0.0 || ^15.0.0"
+ },
+ "buildOptions": {
+ "input": "./src/index.ts"
+ },
+ "dependencies": {
+ "@graphql-tools/load": "6.0.5",
+ "@graphql-tools/graphql-file-loader": "6.0.5",
+ "tslib": "~2.0.0"
+ },
+ "publishConfig": {
+ "access": "public",
+ "directory": "dist"
+ }
+}
diff --git a/packages/webpack-loader/src/index.ts b/packages/webpack-loader/src/index.ts
new file mode 100644
index 00000000000..d5ce628001a
--- /dev/null
+++ b/packages/webpack-loader/src/index.ts
@@ -0,0 +1,17 @@
+import { loadTypedefs } from '@graphql-tools/load';
+import { GraphQLFileLoader } from 'packages/graphql-tools/src';
+import { concatAST } from 'graphql';
+
+export default function (this: any, path: string) {
+ const callback = this.async();
+
+ this.cacheable();
+
+ loadTypedefs(path, {
+ loaders: [new GraphQLFileLoader()],
+ }).then(sources => {
+ const documents = sources.map(source => source.document);
+ const mergedDoc = concatAST(documents);
+ return callback(null, `module.exports = ${JSON.stringify(mergedDoc)}`);
+ });
+}
diff --git a/packages/wrap/package.json b/packages/wrap/package.json
index 7022a88c724..e5ed00ff70f 100644
--- a/packages/wrap/package.json
+++ b/packages/wrap/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/wrap",
- "version": "6.0.5",
+ "version": "6.0.6",
"description": "A set of utils for faster development of GraphQL tools",
"repository": "git@github.com:ardatan/graphql-tools.git",
"license": "MIT",
@@ -18,9 +18,9 @@
"input": "./src/index.ts"
},
"dependencies": {
- "@graphql-tools/delegate": "6.0.5",
- "@graphql-tools/schema": "6.0.5",
- "@graphql-tools/utils": "6.0.5",
+ "@graphql-tools/delegate": "6.0.6",
+ "@graphql-tools/schema": "6.0.6",
+ "@graphql-tools/utils": "6.0.6",
"tslib": "~2.0.0"
},
"publishConfig": {
diff --git a/packages/wrap/src/index.ts b/packages/wrap/src/index.ts
index bf5d0ecf8c1..7be4ebcc7bf 100644
--- a/packages/wrap/src/index.ts
+++ b/packages/wrap/src/index.ts
@@ -1,5 +1,5 @@
export { wrapSchema } from './wrapSchema';
-export { defaultCreateProxyingResolver } from './generateProxyingResolvers';
+export { defaultCreateProxyingResolver, generateProxyingResolvers } from './generateProxyingResolvers';
export * from './transforms/index';
diff --git a/packages/wrap/tests/fixtures/schemas.ts b/packages/wrap/tests/fixtures/schemas.ts
index d134a35e904..bf2fe7df7e0 100644
--- a/packages/wrap/tests/fixtures/schemas.ts
+++ b/packages/wrap/tests/fixtures/schemas.ts
@@ -16,6 +16,7 @@ import { introspectSchema } from '../../src/introspect';
import {
IResolvers,
ExecutionResult,
+ mapAsyncIterator,
} from '@graphql-tools/utils';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { SubschemaConfig, ExecutionParams } from '@graphql-tools/delegate';
@@ -680,23 +681,36 @@ export const subscriptionSchema: GraphQLSchema = makeExecutableSchema({
});
function makeExecutorFromSchema(schema: GraphQLSchema) {
- return async ({ document, variables, context }: ExecutionParams) => graphql(
- schema,
- print(document),
- null,
- context,
- variables,
- ) as PromiseOrValue>;
+ return async ({ document, variables, context }: ExecutionParams) => {
+ const result = graphql(
+ schema,
+ print(document),
+ null,
+ context,
+ variables,
+ ) as PromiseOrValue>;
+ if (result instanceof Promise) {
+ return result.then(originalResult => JSON.parse(JSON.stringify(originalResult)));
+ }
+ return JSON.parse(JSON.stringify(result));
+ };
}
function makeSubscriberFromSchema(schema: GraphQLSchema) {
- return async ({ document, variables, context }: ExecutionParams) => subscribe(
- schema,
- document,
- null,
- context,
- variables,
- ) as Promise> | ExecutionResult>
+ return async ({ document, variables, context }: ExecutionParams) => {
+ const result = subscribe(
+ schema,
+ document,
+ null,
+ context,
+ variables,
+ ) as Promise> | ExecutionResult>;
+ if (result instanceof Promise) {
+ return result.then(asyncIterator =>
+ mapAsyncIterator(asyncIterator as AsyncIterator, (originalResult: ExecutionResult) => JSON.parse(JSON.stringify(originalResult))));
+ }
+ return JSON.parse(JSON.stringify(result));
+ };
}
export async function makeSchemaRemote(
diff --git a/website/docs/merge-typedefs.md b/website/docs/merge-typedefs.md
index e5b59502f51..6870cf9ca2f 100644
--- a/website/docs/merge-typedefs.md
+++ b/website/docs/merge-typedefs.md
@@ -102,21 +102,21 @@ module.exports = mergeTypeDefs(types, { all: true });
### Import everything from a specified folder
-In this way we use the `loadFiles` function from `@graphql-tools/load-files` to import all files from the specified folder.
+In this way we use the `loadFilesSync` function from `@graphql-tools/load-files` to import all files from the specified folder.
```js
// ./graphql/typeDefs.js
const path = require('path');
-const { loadFiles } = require('@graphql-tools/load-files');
+const { loadFilesSync } = require('@graphql-tools/load-files');
const { mergeTypeDefs } = require('@graphql-tools/merge');
-const typesArray = loadFiles(path.join(__dirname, './types'));
+const typesArray = loadFilesSync(path.join(__dirname, './types'));
module.exports = mergeTypeDefs(typesArray, { all: true });
```
-When using the `loadFiles` function you can also implement your type definitions using `.graphql` or `.gql` or `.graphqls` files.
+When using the `loadFilesSync` function you can also implement your type definitions using `.graphql` or `.gql` or `.graphqls` files.
-> The `loadFiles` function will by default ignore files named `index.js` or `index.ts` (use `{ignoreIndex: false}` option to change this behavior). This allows you to create your index file inside the actual types folder if desired.
+> The `loadFilesSync` function will by default ignore files named `index.js` or `index.ts` (use `{ignoreIndex: false}` option to change this behavior). This allows you to create your index file inside the actual types folder if desired.
```graphql
# ./graphql/types/clientType.graphql
@@ -170,15 +170,15 @@ Here's how your `index` file could look like:
```js
const path = require('path');
-const { loadFiles } = require('@graphql-tools/load-files');
+const { loadFilesSync } = require('@graphql-tools/load-files');
const { mergeTypeDefs } = require('@graphql-tools/merge');
-const typesArray = loadFiles(path.join(__dirname, '.'), { recursive: true })
+const typesArray = loadFilesSync(path.join(__dirname, '.'), { recursive: true })
module.exports = mergeTypeDefs(typesArray, { all: true })
```
-You can also load files in different folders by passing a glob pattern in `loadFiles`.
+You can also load files in different folders by passing a glob pattern in `loadFilesSync`.
Given the file structure below:
```
@@ -196,10 +196,10 @@ Here's how your `index` file could look like:
```js
const path = require('path');
-const { loadFiles } = require('@graphql-tools/load-files');
+const { loadFilesSync } = require('@graphql-tools/load-files');
const { mergeTypeDefs } = require('@graphql-tools/merge');
-const typesArray = loadFiles(path.join(__dirname, 'graphql/**/*.graphql'))
+const typesArray = loadFilesSync(path.join(__dirname, 'graphql/**/*.graphql'))
module.exports = mergeTypeDefs(typesArray, { all: true })
```
@@ -209,12 +209,12 @@ module.exports = mergeTypeDefs(typesArray, { all: true })
Since the output of `mergeTypeDefs` is `DocumentNode`, after you merge your types, you can save it to a file to be passed around to other systems. Here is an example using ES6 modules:
```js
-const { loadFiles } = require('@graphql-tools/load-files');
+const { loadFilesSync } = require('@graphql-tools/load-files');
const { mergeTypeDefs } = require('@graphql-tools/merge');
const { print } = require('graphql');
const fs = require('fs');
-const loadedFiles = loadFiles(`${__dirname}/schema/**/*.graphql`);
+const loadedFiles = loadFilesSync(`${__dirname}/schema/**/*.graphql`);
const typeDefs = mergeTypeDefs(loadedFiles, { all: true });
const printedTypeDefs = print(typeDefs);
fs.writeFileSync('joined.graphql', printedTypeDefs);
diff --git a/website/docs/migration-from-merge-graphql-schemas.md b/website/docs/migration-from-merge-graphql-schemas.md
index 92dbe8e6e99..e6ac71ccbd7 100644
--- a/website/docs/migration-from-merge-graphql-schemas.md
+++ b/website/docs/migration-from-merge-graphql-schemas.md
@@ -35,12 +35,14 @@ export const mergeTypes = (types: any[], options?: { schemaDefinition?: boolean,
So if you want to have exact behavior, you can use the options above. Other than that, the API and behavior are almost same.
```ts
-import { mergeTypes, mergeResolvers, loadFiles } from 'merge-graphql-schemas';
+import { mergeTypes, mergeResolvers, fileLoader } from 'merge-graphql-schemas';
```
should become
```ts
import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge';
-import { loadFiles } from '@graphql-tools/load-files';
+import { loadFilesSync } from '@graphql-tools/load-files';
```
+
+So you can replace `mergeTypes` with `mergeTypeDefs` and `fileLoader` with `loadFilesSync`.
diff --git a/website/package.json b/website/package.json
index c29ec351001..2c8003ec3b6 100644
--- a/website/package.json
+++ b/website/package.json
@@ -1,6 +1,6 @@
{
"name": "@graphql-tools/website",
- "version": "6.0.5",
+ "version": "6.0.6",
"private": true,
"scripts": {
"start": "docusaurus start",
diff --git a/yarn.lock b/yarn.lock
index e7d934c8f4f..138a2d02e51 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1946,10 +1946,10 @@
dependencies:
"@babel/types" "^7.3.0"
-"@types/babel__traverse@7.0.11":
- version "7.0.11"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18"
- integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==
+"@types/babel__traverse@7.0.12":
+ version "7.0.12"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.12.tgz#22f49a028e69465390f87bb103ebd61bd086b8f5"
+ integrity sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA==
dependencies:
"@babel/types" "^7.3.0"
@@ -2357,41 +2357,41 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.2.tgz#4a114a066e2f9659b25682ee59d4866e15a17ec3"
- integrity sha512-ER3bSS/A/pKQT/hjMGCK8UQzlL0yLjuCZ/G8CDFJFVTfl3X65fvq2lNYqOG8JPTfrPa2RULCdwfOyFjZEMNExQ==
+"@typescript-eslint/eslint-plugin@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.1.0.tgz#4ac00ecca3bbea740c577f1843bc54fa69c3def2"
+ integrity sha512-D52KwdgkjYc+fmTZKW7CZpH5ZBJREJKZXRrveMiRCmlzZ+Rw9wRVJ1JAmHQ9b/+Ehy1ZeaylofDB9wwXUt83wg==
dependencies:
- "@typescript-eslint/experimental-utils" "3.0.2"
+ "@typescript-eslint/experimental-utils" "3.1.0"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
semver "^7.3.2"
tsutils "^3.17.1"
-"@typescript-eslint/experimental-utils@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.2.tgz#bb2131baede8df28ec5eacfa540308ca895e5fee"
- integrity sha512-4Wc4EczvoY183SSEnKgqAfkj1eLtRgBQ04AAeG+m4RhTVyaazxc1uI8IHf0qLmu7xXe9j1nn+UoDJjbmGmuqXQ==
+"@typescript-eslint/experimental-utils@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.1.0.tgz#2d5dba7c2ac2a3da3bfa3f461ff64de38587a872"
+ integrity sha512-Zf8JVC2K1svqPIk1CB/ehCiWPaERJBBokbMfNTNRczCbQSlQXaXtO/7OfYz9wZaecNvdSvVADt6/XQuIxhC79w==
dependencies:
"@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "3.0.2"
+ "@typescript-eslint/typescript-estree" "3.1.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
-"@typescript-eslint/parser@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.0.2.tgz#a92ef339added9bf7fb92605ac99c93ef243e834"
- integrity sha512-80Z7s83e8QXHNUspqVlWwb4t5gdz/1bBBmafElbK1wwAwiD/yvJsFyHRxlEpNrt4rdK6eB3p+2WEFkEDHAKk9w==
+"@typescript-eslint/parser@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.1.0.tgz#9c02ba5d88ad2355672f39e6cd4176f172dd47f8"
+ integrity sha512-NcDSJK8qTA2tPfyGiPes9HtVKLbksmuYjlgGAUs7Ld2K0swdWibnCq9IJx9kJN8JJdgUJSorFiGaPHBgH81F/Q==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
- "@typescript-eslint/experimental-utils" "3.0.2"
- "@typescript-eslint/typescript-estree" "3.0.2"
+ "@typescript-eslint/experimental-utils" "3.1.0"
+ "@typescript-eslint/typescript-estree" "3.1.0"
eslint-visitor-keys "^1.1.0"
-"@typescript-eslint/typescript-estree@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.2.tgz#67a1ce4307ebaea43443fbf3f3be7e2627157293"
- integrity sha512-cs84mxgC9zQ6viV8MEcigfIKQmKtBkZNDYf8Gru2M+MhnA6z9q0NFMZm2IEzKqAwN8lY5mFVd1Z8DiHj6zQ3Tw==
+"@typescript-eslint/typescript-estree@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.1.0.tgz#eaff52d31e615e05b894f8b9d2c3d8af152a5dd2"
+ integrity sha512-+4nfYauqeQvK55PgFrmBWFVYb6IskLyOosYEmhH3mSVhfBp9AIJnjExdgDmKWoOBHRcPM8Ihfm2BFpZf0euUZQ==
dependencies:
debug "^4.1.1"
eslint-visitor-keys "^1.1.0"
@@ -6363,6 +6363,18 @@ globby@11.0.0:
merge2 "^1.3.0"
slash "^3.0.0"
+globby@11.0.1:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
+ integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
globby@8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"