@depup/graphql-middleware 6.1.35-depup.0

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.
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const graphql = require('graphql');
6
+
7
+ function extractFragmentReplacements(resolvers) {
8
+ const allFragmentReplacements = [];
9
+ for (const typeName in resolvers) {
10
+ const fieldResolvers = resolvers[typeName];
11
+ for (const fieldName in fieldResolvers) {
12
+ const fieldResolver = fieldResolvers[fieldName];
13
+ if (typeof fieldResolver === "object" && fieldResolver.fragment) {
14
+ allFragmentReplacements.push({
15
+ field: fieldName,
16
+ fragment: fieldResolver.fragment
17
+ });
18
+ }
19
+ if (typeof fieldResolver === "object" && fieldResolver.fragments) {
20
+ for (const fragment of fieldResolver.fragments) {
21
+ allFragmentReplacements.push({
22
+ field: fieldName,
23
+ fragment
24
+ });
25
+ }
26
+ }
27
+ }
28
+ }
29
+ const fragmentReplacements = allFragmentReplacements.filter((fragment) => Boolean(fragment)).map((fragmentReplacement) => {
30
+ const fragment = parseFragmentToInlineFragment(fragmentReplacement.fragment);
31
+ const newSelections = fragment.selectionSet.selections.filter((node) => {
32
+ switch (node.kind) {
33
+ case graphql.Kind.FIELD: {
34
+ return node.name.value !== fragmentReplacement.field;
35
+ }
36
+ default: {
37
+ return true;
38
+ }
39
+ }
40
+ });
41
+ if (newSelections.length === 0) {
42
+ return null;
43
+ }
44
+ const newFragment = {
45
+ ...fragment,
46
+ selectionSet: {
47
+ kind: fragment.selectionSet.kind,
48
+ loc: fragment.selectionSet.loc,
49
+ selections: newSelections
50
+ }
51
+ };
52
+ const parsedFragment = graphql.print(newFragment);
53
+ return {
54
+ field: fragmentReplacement.field,
55
+ fragment: parsedFragment
56
+ };
57
+ }).filter((fr) => fr !== null);
58
+ return fragmentReplacements;
59
+ function parseFragmentToInlineFragment(definitions) {
60
+ if (definitions.trim().startsWith("fragment")) {
61
+ const document = graphql.parse(definitions);
62
+ for (const definition of document.definitions) {
63
+ if (definition.kind === graphql.Kind.FRAGMENT_DEFINITION) {
64
+ return {
65
+ kind: graphql.Kind.INLINE_FRAGMENT,
66
+ typeCondition: definition.typeCondition,
67
+ selectionSet: definition.selectionSet
68
+ };
69
+ }
70
+ }
71
+ }
72
+ const query = graphql.parse(`{${definitions}}`).definitions[0];
73
+ for (const selection of query.selectionSet.selections) {
74
+ if (selection.kind === graphql.Kind.INLINE_FRAGMENT) {
75
+ return selection;
76
+ }
77
+ }
78
+ throw new Error("Could not parse fragment");
79
+ }
80
+ }
81
+
82
+ exports.extractFragmentReplacements = extractFragmentReplacements;
@@ -0,0 +1,78 @@
1
+ import { Kind, print, parse } from 'graphql';
2
+
3
+ function extractFragmentReplacements(resolvers) {
4
+ const allFragmentReplacements = [];
5
+ for (const typeName in resolvers) {
6
+ const fieldResolvers = resolvers[typeName];
7
+ for (const fieldName in fieldResolvers) {
8
+ const fieldResolver = fieldResolvers[fieldName];
9
+ if (typeof fieldResolver === "object" && fieldResolver.fragment) {
10
+ allFragmentReplacements.push({
11
+ field: fieldName,
12
+ fragment: fieldResolver.fragment
13
+ });
14
+ }
15
+ if (typeof fieldResolver === "object" && fieldResolver.fragments) {
16
+ for (const fragment of fieldResolver.fragments) {
17
+ allFragmentReplacements.push({
18
+ field: fieldName,
19
+ fragment
20
+ });
21
+ }
22
+ }
23
+ }
24
+ }
25
+ const fragmentReplacements = allFragmentReplacements.filter((fragment) => Boolean(fragment)).map((fragmentReplacement) => {
26
+ const fragment = parseFragmentToInlineFragment(fragmentReplacement.fragment);
27
+ const newSelections = fragment.selectionSet.selections.filter((node) => {
28
+ switch (node.kind) {
29
+ case Kind.FIELD: {
30
+ return node.name.value !== fragmentReplacement.field;
31
+ }
32
+ default: {
33
+ return true;
34
+ }
35
+ }
36
+ });
37
+ if (newSelections.length === 0) {
38
+ return null;
39
+ }
40
+ const newFragment = {
41
+ ...fragment,
42
+ selectionSet: {
43
+ kind: fragment.selectionSet.kind,
44
+ loc: fragment.selectionSet.loc,
45
+ selections: newSelections
46
+ }
47
+ };
48
+ const parsedFragment = print(newFragment);
49
+ return {
50
+ field: fragmentReplacement.field,
51
+ fragment: parsedFragment
52
+ };
53
+ }).filter((fr) => fr !== null);
54
+ return fragmentReplacements;
55
+ function parseFragmentToInlineFragment(definitions) {
56
+ if (definitions.trim().startsWith("fragment")) {
57
+ const document = parse(definitions);
58
+ for (const definition of document.definitions) {
59
+ if (definition.kind === Kind.FRAGMENT_DEFINITION) {
60
+ return {
61
+ kind: Kind.INLINE_FRAGMENT,
62
+ typeCondition: definition.typeCondition,
63
+ selectionSet: definition.selectionSet
64
+ };
65
+ }
66
+ }
67
+ }
68
+ const query = parse(`{${definitions}}`).definitions[0];
69
+ for (const selection of query.selectionSet.selections) {
70
+ if (selection.kind === Kind.INLINE_FRAGMENT) {
71
+ return selection;
72
+ }
73
+ }
74
+ throw new Error("Could not parse fragment");
75
+ }
76
+ }
77
+
78
+ export { extractFragmentReplacements };
@@ -0,0 +1,7 @@
1
+ import { IMiddlewareGeneratorConstructor, IMiddleware, IMiddlewareGenerator } from './types';
2
+ import { GraphQLSchema } from 'graphql';
3
+ export declare class MiddlewareGenerator<TSource, TContext, TArgs> implements IMiddlewareGenerator<TSource, TContext, TArgs> {
4
+ private generator;
5
+ constructor(generator: IMiddlewareGeneratorConstructor<TSource, TContext, TArgs>);
6
+ generate(schema: GraphQLSchema): IMiddleware<TSource, TContext, TArgs>;
7
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ class MiddlewareGenerator {
6
+ constructor(generator) {
7
+ this.generator = generator;
8
+ }
9
+ generate(schema) {
10
+ return this.generator(schema);
11
+ }
12
+ }
13
+
14
+ exports.MiddlewareGenerator = MiddlewareGenerator;
@@ -0,0 +1,10 @@
1
+ class MiddlewareGenerator {
2
+ constructor(generator) {
3
+ this.generator = generator;
4
+ }
5
+ generate(schema) {
6
+ return this.generator(schema);
7
+ }
8
+ }
9
+
10
+ export { MiddlewareGenerator };
@@ -0,0 +1,4 @@
1
+ export type { FragmentReplacement, IMiddleware, IMiddlewareTypeMap, IMiddlewareFieldMap, IMiddlewareFunction, IMiddlewareGenerator, IMiddlewareGeneratorConstructor, } from './types';
2
+ export { applyMiddleware, applyMiddlewareToDeclaredResolvers, } from './middleware';
3
+ export { middleware } from './constructors';
4
+ export { MiddlewareError } from './validation';
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const middleware = require('./middleware.js');
6
+ const constructors = require('./constructors.js');
7
+ const validation = require('./validation.js');
8
+
9
+
10
+
11
+ exports.applyMiddleware = middleware.applyMiddleware;
12
+ exports.applyMiddlewareToDeclaredResolvers = middleware.applyMiddlewareToDeclaredResolvers;
13
+ exports.middleware = constructors.middleware;
14
+ exports.MiddlewareError = validation.MiddlewareError;
package/dist/index.mjs ADDED
@@ -0,0 +1,3 @@
1
+ export { applyMiddleware, applyMiddlewareToDeclaredResolvers } from './middleware.mjs';
2
+ export { middleware } from './constructors.mjs';
3
+ export { MiddlewareError } from './validation.mjs';
@@ -0,0 +1,34 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { IApplyOptions, IMiddleware, FragmentReplacement, IMiddlewareGenerator, GraphQLSchemaWithFragmentReplacements } from './types';
3
+ /**
4
+ *
5
+ * @param schema
6
+ * @param options
7
+ * @param middleware
8
+ *
9
+ * Validates middleware and generates resolvers map for provided middleware.
10
+ * Applies middleware to the current schema and returns the modified one.
11
+ *
12
+ */
13
+ export declare function addMiddlewareToSchema<TSource, TContext, TArgs>(schema: GraphQLSchema, options: IApplyOptions, middleware: IMiddleware<TSource, TContext, TArgs>): {
14
+ schema: GraphQLSchema;
15
+ fragmentReplacements: FragmentReplacement[];
16
+ };
17
+ /**
18
+ *
19
+ * @param schema
20
+ * @param middlewares
21
+ *
22
+ * Apply middleware to resolvers and return generated schema.
23
+ *
24
+ */
25
+ export declare function applyMiddleware<TSource = any, TContext = any, TArgs = any>(schema: GraphQLSchema, ...middlewares: (IMiddleware<TSource, TContext, TArgs> | IMiddlewareGenerator<TSource, TContext, TArgs>)[]): GraphQLSchemaWithFragmentReplacements;
26
+ /**
27
+ *
28
+ * @param schema
29
+ * @param middlewares
30
+ *
31
+ * Apply middleware to declared resolvers and return new schema.
32
+ *
33
+ */
34
+ export declare function applyMiddlewareToDeclaredResolvers<TSource = any, TContext = any, TArgs = any>(schema: GraphQLSchema, ...middlewares: (IMiddleware<TSource, TContext, TArgs> | IMiddlewareGenerator<TSource, TContext, TArgs>)[]): GraphQLSchemaWithFragmentReplacements;
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const schema = require('@graphql-tools/schema');
6
+ const applicator = require('./applicator.js');
7
+ const validation = require('./validation.js');
8
+ const fragments = require('./fragments.js');
9
+ const utils = require('./utils.js');
10
+
11
+ function addMiddlewareToSchema(schema$1, options, middleware) {
12
+ const validMiddleware = validation.validateMiddleware(schema$1, middleware);
13
+ const resolvers = applicator.generateResolverFromSchemaAndMiddleware(schema$1, options, validMiddleware);
14
+ const fragmentReplacements = fragments.extractFragmentReplacements(resolvers);
15
+ const newSchema = schema.addResolversToSchema({
16
+ schema: schema$1,
17
+ resolvers,
18
+ updateResolversInPlace: false,
19
+ resolverValidationOptions: {
20
+ requireResolversForResolveType: "ignore"
21
+ }
22
+ });
23
+ return { schema: newSchema, fragmentReplacements };
24
+ }
25
+ function applyMiddlewareWithOptions(schema, options, ...middlewares) {
26
+ const normalisedMiddlewares = middlewares.map((middleware) => {
27
+ if (utils.isMiddlewareGenerator(middleware)) {
28
+ return middleware.generate(schema);
29
+ } else {
30
+ return middleware;
31
+ }
32
+ });
33
+ const schemaWithMiddlewareAndFragmentReplacements = normalisedMiddlewares.reduceRight(({
34
+ schema: currentSchema,
35
+ fragmentReplacements: currentFragmentReplacements
36
+ }, middleware) => {
37
+ const {
38
+ schema: newSchema,
39
+ fragmentReplacements: newFragmentReplacements
40
+ } = addMiddlewareToSchema(currentSchema, options, middleware);
41
+ return {
42
+ schema: newSchema,
43
+ fragmentReplacements: [
44
+ ...currentFragmentReplacements,
45
+ ...newFragmentReplacements
46
+ ]
47
+ };
48
+ }, { schema, fragmentReplacements: [] });
49
+ const schemaWithMiddleware = schemaWithMiddlewareAndFragmentReplacements.schema;
50
+ schemaWithMiddleware.schema = schemaWithMiddlewareAndFragmentReplacements.schema;
51
+ schemaWithMiddleware.fragmentReplacements = schemaWithMiddlewareAndFragmentReplacements.fragmentReplacements;
52
+ return schemaWithMiddleware;
53
+ }
54
+ function applyMiddleware(schema, ...middlewares) {
55
+ return applyMiddlewareWithOptions(schema, { onlyDeclaredResolvers: false }, ...middlewares);
56
+ }
57
+ function applyMiddlewareToDeclaredResolvers(schema, ...middlewares) {
58
+ return applyMiddlewareWithOptions(schema, { onlyDeclaredResolvers: true }, ...middlewares);
59
+ }
60
+
61
+ exports.addMiddlewareToSchema = addMiddlewareToSchema;
62
+ exports.applyMiddleware = applyMiddleware;
63
+ exports.applyMiddlewareToDeclaredResolvers = applyMiddlewareToDeclaredResolvers;
@@ -0,0 +1,57 @@
1
+ import { addResolversToSchema } from '@graphql-tools/schema';
2
+ import { generateResolverFromSchemaAndMiddleware } from './applicator.mjs';
3
+ import { validateMiddleware } from './validation.mjs';
4
+ import { extractFragmentReplacements } from './fragments.mjs';
5
+ import { isMiddlewareGenerator } from './utils.mjs';
6
+
7
+ function addMiddlewareToSchema(schema, options, middleware) {
8
+ const validMiddleware = validateMiddleware(schema, middleware);
9
+ const resolvers = generateResolverFromSchemaAndMiddleware(schema, options, validMiddleware);
10
+ const fragmentReplacements = extractFragmentReplacements(resolvers);
11
+ const newSchema = addResolversToSchema({
12
+ schema,
13
+ resolvers,
14
+ updateResolversInPlace: false,
15
+ resolverValidationOptions: {
16
+ requireResolversForResolveType: "ignore"
17
+ }
18
+ });
19
+ return { schema: newSchema, fragmentReplacements };
20
+ }
21
+ function applyMiddlewareWithOptions(schema, options, ...middlewares) {
22
+ const normalisedMiddlewares = middlewares.map((middleware) => {
23
+ if (isMiddlewareGenerator(middleware)) {
24
+ return middleware.generate(schema);
25
+ } else {
26
+ return middleware;
27
+ }
28
+ });
29
+ const schemaWithMiddlewareAndFragmentReplacements = normalisedMiddlewares.reduceRight(({
30
+ schema: currentSchema,
31
+ fragmentReplacements: currentFragmentReplacements
32
+ }, middleware) => {
33
+ const {
34
+ schema: newSchema,
35
+ fragmentReplacements: newFragmentReplacements
36
+ } = addMiddlewareToSchema(currentSchema, options, middleware);
37
+ return {
38
+ schema: newSchema,
39
+ fragmentReplacements: [
40
+ ...currentFragmentReplacements,
41
+ ...newFragmentReplacements
42
+ ]
43
+ };
44
+ }, { schema, fragmentReplacements: [] });
45
+ const schemaWithMiddleware = schemaWithMiddlewareAndFragmentReplacements.schema;
46
+ schemaWithMiddleware.schema = schemaWithMiddlewareAndFragmentReplacements.schema;
47
+ schemaWithMiddleware.fragmentReplacements = schemaWithMiddlewareAndFragmentReplacements.fragmentReplacements;
48
+ return schemaWithMiddleware;
49
+ }
50
+ function applyMiddleware(schema, ...middlewares) {
51
+ return applyMiddlewareWithOptions(schema, { onlyDeclaredResolvers: false }, ...middlewares);
52
+ }
53
+ function applyMiddlewareToDeclaredResolvers(schema, ...middlewares) {
54
+ return applyMiddlewareWithOptions(schema, { onlyDeclaredResolvers: true }, ...middlewares);
55
+ }
56
+
57
+ export { addMiddlewareToSchema, applyMiddleware, applyMiddlewareToDeclaredResolvers };
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "graphql-middleware",
3
+ "version": "6.1.35",
4
+ "description": "GraphQL Middleware done right!",
5
+ "peerDependencies": {
6
+ "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
7
+ },
8
+ "dependencies": {
9
+ "@graphql-tools/delegate": "^8.8.1",
10
+ "@graphql-tools/schema": "^8.5.1"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/maticzav/graphql-middleware.git"
15
+ },
16
+ "homepage": "https://github.com/maticzav/graphql-middleware",
17
+ "keywords": [
18
+ "graphql",
19
+ "middleware",
20
+ "schema",
21
+ "resolvers",
22
+ "server",
23
+ "yoga"
24
+ ],
25
+ "author": "Matic Zavadlal <matic.zavadlal@gmail.com>",
26
+ "license": "MIT",
27
+ "main": "index.js",
28
+ "module": "index.mjs",
29
+ "types": "index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "require": "./index.js",
33
+ "import": "./index.mjs"
34
+ },
35
+ "./*": {
36
+ "require": "./*.js",
37
+ "import": "./*.mjs"
38
+ },
39
+ "./package.json": "./package.json"
40
+ }
41
+ }
@@ -0,0 +1,54 @@
1
+ import { GraphQLResolveInfo, GraphQLSchema, GraphQLTypeResolver, GraphQLIsTypeOfFn } from 'graphql';
2
+ import { StitchingInfo } from '@graphql-tools/delegate';
3
+ export declare type IMiddlewareFragment = string;
4
+ export declare type IMiddlewareResolver<TSource = any, TContext = any, TArgs = any> = (resolve: (source?: TSource, args?: TArgs, context?: TContext, info?: GraphQLResolveInfo & {
5
+ stitchingInfo?: StitchingInfo;
6
+ }) => any, parent: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo) => Promise<any>;
7
+ export interface IMiddlewareWithOptions<TSource = any, TContext = any, TArgs = any> {
8
+ fragment?: IMiddlewareFragment;
9
+ fragments?: IMiddlewareFragment[];
10
+ resolve?: IMiddlewareResolver<TSource, TContext, TArgs>;
11
+ }
12
+ export declare type IMiddlewareFunction<TSource = any, TContext = any, TArgs = any> = IMiddlewareWithOptions<TSource, TContext, TArgs> | IMiddlewareResolver<TSource, TContext, TArgs>;
13
+ export interface IMiddlewareTypeMap<TSource = any, TContext = any, TArgs = any> {
14
+ [key: string]: IMiddlewareFunction<TSource, TContext, TArgs> | IMiddlewareFieldMap<TSource, TContext, TArgs>;
15
+ }
16
+ export interface IMiddlewareFieldMap<TSource = any, TContext = any, TArgs = any> {
17
+ [key: string]: IMiddlewareFunction<TSource, TContext, TArgs>;
18
+ }
19
+ export declare class IMiddlewareGenerator<TSource, TContext, TArgs> {
20
+ constructor(generator: IMiddlewareGeneratorConstructor<TSource, TContext, TArgs>);
21
+ generate(schema: GraphQLSchema): IMiddleware<TSource, TContext, TArgs>;
22
+ }
23
+ export declare type IMiddlewareGeneratorConstructor<TSource = any, TContext = any, TArgs = any> = (schema: GraphQLSchema) => IMiddleware<TSource, TContext, TArgs>;
24
+ export declare type IMiddleware<TSource = any, TContext = any, TArgs = any> = IMiddlewareFunction<TSource, TContext, TArgs> | IMiddlewareTypeMap<TSource, TContext, TArgs>;
25
+ export declare type IApplyOptions = {
26
+ onlyDeclaredResolvers: boolean;
27
+ };
28
+ export declare type GraphQLSchemaWithFragmentReplacements = GraphQLSchema & {
29
+ schema?: GraphQLSchema;
30
+ fragmentReplacements?: FragmentReplacement[];
31
+ };
32
+ export interface FragmentReplacement {
33
+ field: string;
34
+ fragment: string;
35
+ }
36
+ export interface IResolvers<TSource = any, TContext = any> {
37
+ [key: string]: IResolverObject<TSource, TContext>;
38
+ }
39
+ export interface IResolverObject<TSource = any, TContext = any> {
40
+ [key: string]: IFieldResolver<TSource, TContext> | IResolverOptions<TSource, TContext>;
41
+ }
42
+ export interface IResolverOptions<TSource = any, TContext = any> {
43
+ fragment?: string;
44
+ fragments?: string[];
45
+ resolve?: IFieldResolver<TSource, TContext>;
46
+ subscribe?: IFieldResolver<TSource, TContext>;
47
+ __resolveType?: GraphQLTypeResolver<TSource, TContext>;
48
+ __isTypeOf?: GraphQLIsTypeOfFn<TSource, TContext>;
49
+ }
50
+ export declare type IFieldResolver<TSource, TContext> = (source: TSource, args: {
51
+ [argument: string]: any;
52
+ }, context: TContext, info: GraphQLResolveInfo & {
53
+ stitchingInfo?: StitchingInfo;
54
+ }) => any;
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
package/dist/types.mjs ADDED
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,7 @@
1
+ import { GraphQLObjectType, GraphQLInterfaceType } from 'graphql';
2
+ import { IMiddlewareResolver, IMiddlewareWithOptions, IMiddlewareFunction, IMiddlewareGenerator } from './types';
3
+ export declare function isMiddlewareResolver<TSource, TContext, TArgs>(obj: any): obj is IMiddlewareResolver<TSource, TContext, TArgs>;
4
+ export declare function isMiddlewareWithFragment<TSource, TContext, TArgs>(obj: any): obj is IMiddlewareWithOptions<TSource, TContext, TArgs>;
5
+ export declare function isMiddlewareFunction<TSource, TContext, TArgs>(obj: any): obj is IMiddlewareFunction<TSource, TContext, TArgs>;
6
+ export declare function isMiddlewareGenerator<TSource, TContext, TArgs>(x: any): x is IMiddlewareGenerator<TSource, TContext, TArgs>;
7
+ export declare function isGraphQLObjectType(obj: any): obj is GraphQLObjectType | GraphQLInterfaceType;
package/dist/utils.js ADDED
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const graphql = require('graphql');
6
+ const generator = require('./generator.js');
7
+
8
+ function isMiddlewareResolver(obj) {
9
+ return typeof obj === "function" || typeof obj === "object" && obj.then !== void 0;
10
+ }
11
+ function isMiddlewareWithFragment(obj) {
12
+ return (typeof obj.fragment === "string" || typeof obj.fragments === "object") && isMiddlewareResolver(obj.resolve);
13
+ }
14
+ function isMiddlewareFunction(obj) {
15
+ return isMiddlewareWithFragment(obj) || isMiddlewareResolver(obj);
16
+ }
17
+ function isMiddlewareGenerator(x) {
18
+ return x instanceof generator.MiddlewareGenerator;
19
+ }
20
+ function isGraphQLObjectType(obj) {
21
+ return obj instanceof graphql.GraphQLObjectType || obj instanceof graphql.GraphQLInterfaceType;
22
+ }
23
+
24
+ exports.isGraphQLObjectType = isGraphQLObjectType;
25
+ exports.isMiddlewareFunction = isMiddlewareFunction;
26
+ exports.isMiddlewareGenerator = isMiddlewareGenerator;
27
+ exports.isMiddlewareResolver = isMiddlewareResolver;
28
+ exports.isMiddlewareWithFragment = isMiddlewareWithFragment;
package/dist/utils.mjs ADDED
@@ -0,0 +1,20 @@
1
+ import { GraphQLObjectType, GraphQLInterfaceType } from 'graphql';
2
+ import { MiddlewareGenerator } from './generator.mjs';
3
+
4
+ function isMiddlewareResolver(obj) {
5
+ return typeof obj === "function" || typeof obj === "object" && obj.then !== void 0;
6
+ }
7
+ function isMiddlewareWithFragment(obj) {
8
+ return (typeof obj.fragment === "string" || typeof obj.fragments === "object") && isMiddlewareResolver(obj.resolve);
9
+ }
10
+ function isMiddlewareFunction(obj) {
11
+ return isMiddlewareWithFragment(obj) || isMiddlewareResolver(obj);
12
+ }
13
+ function isMiddlewareGenerator(x) {
14
+ return x instanceof MiddlewareGenerator;
15
+ }
16
+ function isGraphQLObjectType(obj) {
17
+ return obj instanceof GraphQLObjectType || obj instanceof GraphQLInterfaceType;
18
+ }
19
+
20
+ export { isGraphQLObjectType, isMiddlewareFunction, isMiddlewareGenerator, isMiddlewareResolver, isMiddlewareWithFragment };
@@ -0,0 +1,5 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { IMiddleware } from './types';
3
+ export declare function validateMiddleware<TSource, TContext, TArgs>(schema: GraphQLSchema, middleware: IMiddleware<TSource, TContext, TArgs>): IMiddleware<TSource, TContext, TArgs>;
4
+ export declare class MiddlewareError extends Error {
5
+ }
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const utils = require('./utils.js');
6
+
7
+ function validateMiddleware(schema, middleware) {
8
+ if (utils.isMiddlewareFunction(middleware)) {
9
+ return middleware;
10
+ }
11
+ const types = schema.getTypeMap();
12
+ Object.keys(middleware).forEach((type) => {
13
+ if (!Object.keys(types).includes(type)) {
14
+ throw new MiddlewareError(`Type ${type} exists in middleware but is missing in Schema.`);
15
+ }
16
+ if (!utils.isMiddlewareFunction(middleware[type])) {
17
+ const fields = types[type].getFields();
18
+ Object.keys(middleware[type]).forEach((field) => {
19
+ if (!Object.keys(fields).includes(field)) {
20
+ throw new MiddlewareError(`Field ${type}.${field} exists in middleware but is missing in Schema.`);
21
+ }
22
+ if (!utils.isMiddlewareFunction(middleware[type][field])) {
23
+ throw new MiddlewareError(`Expected ${type}.${field} to be a function but found ` + typeof middleware[type][field]);
24
+ }
25
+ });
26
+ }
27
+ });
28
+ return middleware;
29
+ }
30
+ class MiddlewareError extends Error {
31
+ }
32
+
33
+ exports.MiddlewareError = MiddlewareError;
34
+ exports.validateMiddleware = validateMiddleware;
@@ -0,0 +1,29 @@
1
+ import { isMiddlewareFunction } from './utils.mjs';
2
+
3
+ function validateMiddleware(schema, middleware) {
4
+ if (isMiddlewareFunction(middleware)) {
5
+ return middleware;
6
+ }
7
+ const types = schema.getTypeMap();
8
+ Object.keys(middleware).forEach((type) => {
9
+ if (!Object.keys(types).includes(type)) {
10
+ throw new MiddlewareError(`Type ${type} exists in middleware but is missing in Schema.`);
11
+ }
12
+ if (!isMiddlewareFunction(middleware[type])) {
13
+ const fields = types[type].getFields();
14
+ Object.keys(middleware[type]).forEach((field) => {
15
+ if (!Object.keys(fields).includes(field)) {
16
+ throw new MiddlewareError(`Field ${type}.${field} exists in middleware but is missing in Schema.`);
17
+ }
18
+ if (!isMiddlewareFunction(middleware[type][field])) {
19
+ throw new MiddlewareError(`Expected ${type}.${field} to be a function but found ` + typeof middleware[type][field]);
20
+ }
21
+ });
22
+ }
23
+ });
24
+ return middleware;
25
+ }
26
+ class MiddlewareError extends Error {
27
+ }
28
+
29
+ export { MiddlewareError, validateMiddleware };