@payloadcms/graphql 3.0.0-alpha.7 → 3.0.0-alpha.70

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.
Files changed (211) hide show
  1. package/dist/index.d.ts +4 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +39 -95
  4. package/dist/index.js.map +1 -0
  5. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts +51 -0
  6. package/dist/packages/graphql-query-complexity/QueryComplexity.d.ts.map +1 -0
  7. package/dist/packages/graphql-query-complexity/QueryComplexity.js +270 -0
  8. package/dist/packages/graphql-query-complexity/QueryComplexity.js.map +1 -0
  9. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts +5 -0
  10. package/dist/packages/graphql-query-complexity/createComplexityRule.d.ts.map +1 -0
  11. package/dist/packages/graphql-query-complexity/createComplexityRule.js +8 -0
  12. package/dist/packages/graphql-query-complexity/createComplexityRule.js.map +1 -0
  13. package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.d.ts +3 -0
  14. package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.d.ts.map +1 -0
  15. package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js +14 -0
  16. package/dist/packages/graphql-query-complexity/estimators/fieldExtensions/index.js.map +1 -0
  17. package/dist/packages/graphql-query-complexity/estimators/simple/index.d.ts +5 -0
  18. package/dist/packages/graphql-query-complexity/estimators/simple/index.d.ts.map +1 -0
  19. package/dist/packages/graphql-query-complexity/estimators/simple/index.js +8 -0
  20. package/dist/packages/graphql-query-complexity/estimators/simple/index.js.map +1 -0
  21. package/dist/packages/graphql-query-complexity/index.d.ts +4 -0
  22. package/dist/packages/graphql-query-complexity/index.d.ts.map +1 -0
  23. package/dist/packages/graphql-query-complexity/index.js +5 -0
  24. package/dist/packages/graphql-query-complexity/index.js.map +1 -0
  25. package/dist/packages/graphql-type-json/index.d.ts +4 -0
  26. package/dist/packages/graphql-type-json/index.d.ts.map +1 -0
  27. package/dist/packages/graphql-type-json/index.js +64 -0
  28. package/dist/packages/graphql-type-json/index.js.map +1 -0
  29. package/dist/resolvers/auth/access.d.ts +1 -1
  30. package/dist/resolvers/auth/access.d.ts.map +1 -1
  31. package/dist/resolvers/auth/access.js +8 -23
  32. package/dist/resolvers/auth/access.js.map +1 -0
  33. package/dist/resolvers/auth/forgotPassword.d.ts.map +1 -1
  34. package/dist/resolvers/auth/forgotPassword.js +6 -16
  35. package/dist/resolvers/auth/forgotPassword.js.map +1 -0
  36. package/dist/resolvers/auth/init.d.ts +1 -1
  37. package/dist/resolvers/auth/init.d.ts.map +1 -1
  38. package/dist/resolvers/auth/init.js +6 -16
  39. package/dist/resolvers/auth/init.js.map +1 -0
  40. package/dist/resolvers/auth/login.d.ts +1 -4
  41. package/dist/resolvers/auth/login.d.ts.map +1 -1
  42. package/dist/resolvers/auth/login.js +10 -20
  43. package/dist/resolvers/auth/login.js.map +1 -0
  44. package/dist/resolvers/auth/logout.d.ts.map +1 -1
  45. package/dist/resolvers/auth/logout.js +8 -18
  46. package/dist/resolvers/auth/logout.js.map +1 -0
  47. package/dist/resolvers/auth/me.d.ts.map +1 -1
  48. package/dist/resolvers/auth/me.js +6 -16
  49. package/dist/resolvers/auth/me.js.map +1 -0
  50. package/dist/resolvers/auth/refresh.d.ts +1 -2
  51. package/dist/resolvers/auth/refresh.d.ts.map +1 -1
  52. package/dist/resolvers/auth/refresh.js +11 -21
  53. package/dist/resolvers/auth/refresh.js.map +1 -0
  54. package/dist/resolvers/auth/resetPassword.d.ts +1 -2
  55. package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
  56. package/dist/resolvers/auth/resetPassword.js +10 -20
  57. package/dist/resolvers/auth/resetPassword.js.map +1 -0
  58. package/dist/resolvers/auth/unlock.d.ts +1 -1
  59. package/dist/resolvers/auth/unlock.d.ts.map +1 -1
  60. package/dist/resolvers/auth/unlock.js +6 -16
  61. package/dist/resolvers/auth/unlock.js.map +1 -0
  62. package/dist/resolvers/auth/verifyEmail.d.ts +1 -1
  63. package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
  64. package/dist/resolvers/auth/verifyEmail.js +6 -16
  65. package/dist/resolvers/auth/verifyEmail.js.map +1 -0
  66. package/dist/resolvers/collections/count.d.ts +13 -0
  67. package/dist/resolvers/collections/count.d.ts.map +1 -0
  68. package/dist/resolvers/collections/count.js +23 -0
  69. package/dist/resolvers/collections/count.js.map +1 -0
  70. package/dist/resolvers/collections/create.d.ts +3 -3
  71. package/dist/resolvers/collections/create.d.ts.map +1 -1
  72. package/dist/resolvers/collections/create.js +6 -16
  73. package/dist/resolvers/collections/create.js.map +1 -0
  74. package/dist/resolvers/collections/delete.d.ts +5 -3
  75. package/dist/resolvers/collections/delete.d.ts.map +1 -1
  76. package/dist/resolvers/collections/delete.js +14 -21
  77. package/dist/resolvers/collections/delete.js.map +1 -0
  78. package/dist/resolvers/collections/docAccess.d.ts +2 -2
  79. package/dist/resolvers/collections/docAccess.d.ts.map +1 -1
  80. package/dist/resolvers/collections/docAccess.js +7 -17
  81. package/dist/resolvers/collections/docAccess.js.map +1 -0
  82. package/dist/resolvers/collections/duplicate.d.ts +13 -0
  83. package/dist/resolvers/collections/duplicate.d.ts.map +1 -0
  84. package/dist/resolvers/collections/duplicate.js +23 -0
  85. package/dist/resolvers/collections/duplicate.js.map +1 -0
  86. package/dist/resolvers/collections/find.d.ts +3 -3
  87. package/dist/resolvers/collections/find.d.ts.map +1 -1
  88. package/dist/resolvers/collections/find.js +12 -18
  89. package/dist/resolvers/collections/find.js.map +1 -0
  90. package/dist/resolvers/collections/findByID.d.ts +3 -3
  91. package/dist/resolvers/collections/findByID.d.ts.map +1 -1
  92. package/dist/resolvers/collections/findByID.js +12 -18
  93. package/dist/resolvers/collections/findByID.js.map +1 -0
  94. package/dist/resolvers/collections/findVersionByID.d.ts +4 -5
  95. package/dist/resolvers/collections/findVersionByID.d.ts.map +1 -1
  96. package/dist/resolvers/collections/findVersionByID.js +9 -19
  97. package/dist/resolvers/collections/findVersionByID.js.map +1 -0
  98. package/dist/resolvers/collections/findVersions.d.ts +4 -3
  99. package/dist/resolvers/collections/findVersions.d.ts.map +1 -1
  100. package/dist/resolvers/collections/findVersions.js +14 -21
  101. package/dist/resolvers/collections/findVersions.js.map +1 -0
  102. package/dist/resolvers/collections/restoreVersion.d.ts +2 -2
  103. package/dist/resolvers/collections/restoreVersion.d.ts.map +1 -1
  104. package/dist/resolvers/collections/restoreVersion.js +6 -16
  105. package/dist/resolvers/collections/restoreVersion.js.map +1 -0
  106. package/dist/resolvers/collections/update.d.ts +4 -3
  107. package/dist/resolvers/collections/update.d.ts.map +1 -1
  108. package/dist/resolvers/collections/update.js +14 -21
  109. package/dist/resolvers/collections/update.js.map +1 -0
  110. package/dist/resolvers/globals/docAccess.d.ts +2 -2
  111. package/dist/resolvers/globals/docAccess.d.ts.map +1 -1
  112. package/dist/resolvers/globals/docAccess.js +6 -16
  113. package/dist/resolvers/globals/docAccess.js.map +1 -0
  114. package/dist/resolvers/globals/findOne.d.ts.map +1 -1
  115. package/dist/resolvers/globals/findOne.js +6 -16
  116. package/dist/resolvers/globals/findOne.js.map +1 -0
  117. package/dist/resolvers/globals/findVersionByID.d.ts +2 -2
  118. package/dist/resolvers/globals/findVersionByID.d.ts.map +1 -1
  119. package/dist/resolvers/globals/findVersionByID.js +6 -16
  120. package/dist/resolvers/globals/findVersionByID.js.map +1 -0
  121. package/dist/resolvers/globals/findVersions.d.ts +2 -2
  122. package/dist/resolvers/globals/findVersions.d.ts.map +1 -1
  123. package/dist/resolvers/globals/findVersions.js +6 -16
  124. package/dist/resolvers/globals/findVersions.js.map +1 -0
  125. package/dist/resolvers/globals/index.d.ts +5 -5
  126. package/dist/resolvers/globals/index.d.ts.map +1 -1
  127. package/dist/resolvers/globals/index.js +7 -38
  128. package/dist/resolvers/globals/index.js.map +1 -0
  129. package/dist/resolvers/globals/restoreVersion.d.ts +2 -2
  130. package/dist/resolvers/globals/restoreVersion.d.ts.map +1 -1
  131. package/dist/resolvers/globals/restoreVersion.js +6 -16
  132. package/dist/resolvers/globals/restoreVersion.js.map +1 -0
  133. package/dist/resolvers/globals/update.d.ts +3 -3
  134. package/dist/resolvers/globals/update.d.ts.map +1 -1
  135. package/dist/resolvers/globals/update.js +6 -16
  136. package/dist/resolvers/globals/update.js.map +1 -0
  137. package/dist/resolvers/types.d.ts +2 -2
  138. package/dist/resolvers/types.d.ts.map +1 -1
  139. package/dist/resolvers/types.js +2 -5
  140. package/dist/resolvers/types.js.map +1 -0
  141. package/dist/schema/buildFallbackLocaleInputType.d.ts +1 -1
  142. package/dist/schema/buildFallbackLocaleInputType.d.ts.map +1 -1
  143. package/dist/schema/buildFallbackLocaleInputType.js +6 -21
  144. package/dist/schema/buildFallbackLocaleInputType.js.map +1 -0
  145. package/dist/schema/buildLocaleInputType.d.ts +1 -1
  146. package/dist/schema/buildLocaleInputType.d.ts.map +1 -1
  147. package/dist/schema/buildLocaleInputType.js +6 -21
  148. package/dist/schema/buildLocaleInputType.js.map +1 -0
  149. package/dist/schema/buildMutationInputType.d.ts +6 -6
  150. package/dist/schema/buildMutationInputType.d.ts.map +1 -1
  151. package/dist/schema/buildMutationInputType.js +59 -81
  152. package/dist/schema/buildMutationInputType.js.map +1 -0
  153. package/dist/schema/buildObjectType.d.ts +5 -5
  154. package/dist/schema/buildObjectType.d.ts.map +1 -1
  155. package/dist/schema/buildObjectType.js +125 -118
  156. package/dist/schema/buildObjectType.js.map +1 -0
  157. package/dist/schema/buildPaginatedListType.js +15 -25
  158. package/dist/schema/buildPaginatedListType.js.map +1 -0
  159. package/dist/schema/buildPoliciesType.d.ts +1 -1
  160. package/dist/schema/buildPoliciesType.d.ts.map +1 -1
  161. package/dist/schema/buildPoliciesType.js +31 -57
  162. package/dist/schema/buildPoliciesType.js.map +1 -0
  163. package/dist/schema/buildWhereInputType.d.ts +1 -1
  164. package/dist/schema/buildWhereInputType.d.ts.map +1 -1
  165. package/dist/schema/buildWhereInputType.js +19 -34
  166. package/dist/schema/buildWhereInputType.js.map +1 -0
  167. package/dist/schema/fieldToWhereInputSchemaMap.js +33 -48
  168. package/dist/schema/fieldToWhereInputSchemaMap.js.map +1 -0
  169. package/dist/schema/initCollections.d.ts.map +1 -1
  170. package/dist/schema/initCollections.js +207 -185
  171. package/dist/schema/initCollections.js.map +1 -0
  172. package/dist/schema/initGlobals.d.ts.map +1 -1
  173. package/dist/schema/initGlobals.js +59 -73
  174. package/dist/schema/initGlobals.js.map +1 -0
  175. package/dist/schema/isFieldNullable.js +4 -14
  176. package/dist/schema/isFieldNullable.js.map +1 -0
  177. package/dist/schema/operators.js +2 -12
  178. package/dist/schema/operators.js.map +1 -0
  179. package/dist/schema/recursivelyBuildNestedPaths.d.ts.map +1 -1
  180. package/dist/schema/recursivelyBuildNestedPaths.js +11 -26
  181. package/dist/schema/recursivelyBuildNestedPaths.js.map +1 -0
  182. package/dist/schema/withNullableType.d.ts.map +1 -1
  183. package/dist/schema/withNullableType.js +4 -14
  184. package/dist/schema/withNullableType.js.map +1 -0
  185. package/dist/schema/withOperators.d.ts +1 -1
  186. package/dist/schema/withOperators.d.ts.map +1 -1
  187. package/dist/schema/withOperators.js +82 -86
  188. package/dist/schema/withOperators.js.map +1 -0
  189. package/dist/utilities/combineParentName.js +4 -19
  190. package/dist/utilities/combineParentName.js.map +1 -0
  191. package/dist/utilities/formatName.js +2 -12
  192. package/dist/utilities/formatName.js.map +1 -0
  193. package/dist/utilities/formatName.spec.js +3 -12
  194. package/dist/utilities/formatName.spec.js.map +1 -0
  195. package/dist/utilities/formatOptions.js +5 -20
  196. package/dist/utilities/formatOptions.js.map +1 -0
  197. package/dist/utilities/getCheckIfLocaleObject.js +2 -12
  198. package/dist/utilities/getCheckIfLocaleObject.js.map +1 -0
  199. package/dist/utilities/groupOrTabHasRequiredSubfield.js +4 -14
  200. package/dist/utilities/groupOrTabHasRequiredSubfield.js.map +1 -0
  201. package/dist/utilities/uppercase.js +2 -12
  202. package/dist/utilities/uppercase.js.map +1 -0
  203. package/dist/utilities/wrapCustomResolver.d.ts +4 -4
  204. package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
  205. package/dist/utilities/wrapCustomResolver.js +4 -14
  206. package/dist/utilities/wrapCustomResolver.js.map +1 -0
  207. package/package.json +23 -21
  208. package/dist/utilities/isolateTransactionID.d.ts +0 -2
  209. package/dist/utilities/isolateTransactionID.d.ts.map +0 -1
  210. package/dist/utilities/isolateTransactionID.js +0 -3
  211. package/src/index.ts +0 -126
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import * as GraphQL from 'graphql';
2
- import { OperationArgs } from 'graphql-http';
1
+ import type { OperationArgs } from 'graphql-http';
3
2
  import type { SanitizedConfig } from 'payload/types';
4
- export declare function configToSchema(config: SanitizedConfig): Promise<{
3
+ import * as GraphQL from 'graphql';
4
+ export declare function configToSchema(config: SanitizedConfig): {
5
5
  schema: GraphQL.GraphQLSchema;
6
6
  validationRules: (args: OperationArgs<any>) => GraphQL.ValidationRule[];
7
- }>;
7
+ };
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAS5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AASpD,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;IACrE,MAAM,EAAE,OAAO,CAAC,aAAa,CAAA;IAC7B,eAAe,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,cAAc,EAAE,CAAA;CACxE,CAAC,CAsGD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAelC,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG;IACvD,MAAM,EAAE,OAAO,CAAC,aAAa,CAAA;IAC7B,eAAe,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,cAAc,EAAE,CAAA;CACxE,CAsGA"}
package/dist/index.js CHANGED
@@ -1,69 +1,13 @@
1
- /* eslint-disable no-param-reassign */ "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "configToSchema", {
6
- enumerable: true,
7
- get: function() {
8
- return configToSchema;
9
- }
10
- });
11
- const _graphql = /*#__PURE__*/ _interop_require_wildcard(require("graphql"));
12
- const _graphqlquerycomplexity = require("graphql-query-complexity");
13
- const _access = /*#__PURE__*/ _interop_require_default(require("./resolvers/auth/access"));
14
- const _initCollections = /*#__PURE__*/ _interop_require_default(require("./schema/initCollections"));
15
- const _initGlobals = /*#__PURE__*/ _interop_require_default(require("./schema/initGlobals"));
16
- const _buildFallbackLocaleInputType = /*#__PURE__*/ _interop_require_default(require("./schema/buildFallbackLocaleInputType"));
17
- const _buildLocaleInputType = /*#__PURE__*/ _interop_require_default(require("./schema/buildLocaleInputType"));
18
- const _buildPoliciesType = /*#__PURE__*/ _interop_require_default(require("./schema/buildPoliciesType"));
19
- const _wrapCustomResolver = require("./utilities/wrapCustomResolver");
20
- function _interop_require_default(obj) {
21
- return obj && obj.__esModule ? obj : {
22
- default: obj
23
- };
24
- }
25
- function _getRequireWildcardCache(nodeInterop) {
26
- if (typeof WeakMap !== "function") return null;
27
- var cacheBabelInterop = new WeakMap();
28
- var cacheNodeInterop = new WeakMap();
29
- return (_getRequireWildcardCache = function(nodeInterop) {
30
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
31
- })(nodeInterop);
32
- }
33
- function _interop_require_wildcard(obj, nodeInterop) {
34
- if (!nodeInterop && obj && obj.__esModule) {
35
- return obj;
36
- }
37
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
38
- return {
39
- default: obj
40
- };
41
- }
42
- var cache = _getRequireWildcardCache(nodeInterop);
43
- if (cache && cache.has(obj)) {
44
- return cache.get(obj);
45
- }
46
- var newObj = {
47
- __proto__: null
48
- };
49
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
50
- for(var key in obj){
51
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
52
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
53
- if (desc && (desc.get || desc.set)) {
54
- Object.defineProperty(newObj, key, desc);
55
- } else {
56
- newObj[key] = obj[key];
57
- }
58
- }
59
- }
60
- newObj.default = obj;
61
- if (cache) {
62
- cache.set(obj, newObj);
63
- }
64
- return newObj;
65
- }
66
- async function configToSchema(config) {
1
+ /* eslint-disable no-param-reassign */ import * as GraphQL from 'graphql';
2
+ import { createComplexityRule, fieldExtensionsEstimator, simpleEstimator } from './packages/graphql-query-complexity/index.js';
3
+ import accessResolver from './resolvers/auth/access.js';
4
+ import buildFallbackLocaleInputType from './schema/buildFallbackLocaleInputType.js';
5
+ import buildLocaleInputType from './schema/buildLocaleInputType.js';
6
+ import buildPoliciesType from './schema/buildPoliciesType.js';
7
+ import initCollections from './schema/initCollections.js';
8
+ import initGlobals from './schema/initGlobals.js';
9
+ import { wrapCustomFields } from './utilities/wrapCustomResolver.js';
10
+ export function configToSchema(config) {
67
11
  const collections = config.collections.reduce((acc, collection)=>{
68
12
  acc[collection.slug] = {
69
13
  config: collection
@@ -73,43 +17,43 @@ async function configToSchema(config) {
73
17
  const globals = {
74
18
  config: config.globals
75
19
  };
76
- let graphqlResult = {
77
- types: {
78
- arrayTypes: {},
79
- blockInputTypes: {},
80
- blockTypes: {},
81
- groupTypes: {},
82
- tabTypes: {}
20
+ const graphqlResult = {
21
+ Mutation: {
22
+ name: 'Mutation',
23
+ fields: {}
83
24
  },
84
25
  Query: {
85
26
  name: 'Query',
86
27
  fields: {}
87
28
  },
88
- Mutation: {
89
- name: 'Mutation',
90
- fields: {}
91
- },
92
29
  collections,
93
- globals
30
+ globals,
31
+ types: {
32
+ arrayTypes: {},
33
+ blockInputTypes: {},
34
+ blockTypes: {},
35
+ groupTypes: {},
36
+ tabTypes: {}
37
+ }
94
38
  };
95
39
  if (config.localization) {
96
- graphqlResult.types['localeInputType'] = (0, _buildLocaleInputType.default)(config.localization);
97
- graphqlResult.types['fallbackLocaleInputType'] = (0, _buildFallbackLocaleInputType.default)(config.localization);
40
+ graphqlResult.types['localeInputType'] = buildLocaleInputType(config.localization);
41
+ graphqlResult.types['fallbackLocaleInputType'] = buildFallbackLocaleInputType(config.localization);
98
42
  }
99
- (0, _initCollections.default)({
43
+ initCollections({
100
44
  config,
101
45
  graphqlResult
102
46
  });
103
- (0, _initGlobals.default)({
47
+ initGlobals({
104
48
  config,
105
49
  graphqlResult
106
50
  });
107
51
  graphqlResult.Query.fields['Access'] = {
108
- resolve: (0, _access.default)(config),
109
- type: (0, _buildPoliciesType.default)(config)
52
+ type: buildPoliciesType(config),
53
+ resolve: accessResolver(config)
110
54
  };
111
55
  if (typeof config.graphQL.queries === 'function') {
112
- const customQueries = config.graphQL.queries(_graphql, {
56
+ const customQueries = config.graphQL.queries(GraphQL, {
113
57
  ...graphqlResult,
114
58
  config
115
59
  });
@@ -117,12 +61,12 @@ async function configToSchema(config) {
117
61
  ...graphqlResult.Query,
118
62
  fields: {
119
63
  ...graphqlResult.Query.fields,
120
- ...(0, _wrapCustomResolver.wrapCustomFields)(customQueries || {})
64
+ ...wrapCustomFields(customQueries || {})
121
65
  }
122
66
  };
123
67
  }
124
68
  if (typeof config.graphQL.mutations === 'function') {
125
- const customMutations = config.graphQL.mutations(_graphql, {
69
+ const customMutations = config.graphQL.mutations(GraphQL, {
126
70
  ...graphqlResult,
127
71
  config
128
72
  });
@@ -130,22 +74,22 @@ async function configToSchema(config) {
130
74
  ...graphqlResult.Mutation,
131
75
  fields: {
132
76
  ...graphqlResult.Mutation.fields,
133
- ...(0, _wrapCustomResolver.wrapCustomFields)(customMutations || {})
77
+ ...wrapCustomFields(customMutations || {})
134
78
  }
135
79
  };
136
80
  }
137
- const query = new _graphql.GraphQLObjectType(graphqlResult.Query);
138
- const mutation = new _graphql.GraphQLObjectType(graphqlResult.Mutation);
81
+ const query = new GraphQL.GraphQLObjectType(graphqlResult.Query);
82
+ const mutation = new GraphQL.GraphQLObjectType(graphqlResult.Mutation);
139
83
  const schemaToCreate = {
140
84
  mutation,
141
85
  query
142
86
  };
143
- const schema = new _graphql.GraphQLSchema(schemaToCreate);
87
+ const schema = new GraphQL.GraphQLSchema(schemaToCreate);
144
88
  const validationRules = (args)=>[
145
- (0, _graphqlquerycomplexity.createComplexityRule)({
89
+ createComplexityRule({
146
90
  estimators: [
147
- (0, _graphqlquerycomplexity.fieldExtensionsEstimator)(),
148
- (0, _graphqlquerycomplexity.simpleEstimator)({
91
+ fieldExtensionsEstimator(),
92
+ simpleEstimator({
149
93
  defaultComplexity: 1
150
94
  })
151
95
  ],
@@ -159,4 +103,4 @@ async function configToSchema(config) {
159
103
  };
160
104
  }
161
105
 
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0ICogYXMgR3JhcGhRTCBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgT3BlcmF0aW9uQXJncyB9IGZyb20gJ2dyYXBocWwtaHR0cCdcblxuaW1wb3J0IHtcbiAgZmllbGRFeHRlbnNpb25zRXN0aW1hdG9yLFxuICBzaW1wbGVFc3RpbWF0b3IsXG4gIGNyZWF0ZUNvbXBsZXhpdHlSdWxlLFxufSBmcm9tICdncmFwaHFsLXF1ZXJ5LWNvbXBsZXhpdHknXG5cbmltcG9ydCB0eXBlIHsgR3JhcGhRTEluZm8gfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCBhY2Nlc3NSZXNvbHZlciBmcm9tICcuL3Jlc29sdmVycy9hdXRoL2FjY2VzcydcbmltcG9ydCBpbml0Q29sbGVjdGlvbnMgZnJvbSAnLi9zY2hlbWEvaW5pdENvbGxlY3Rpb25zJ1xuaW1wb3J0IGluaXRHbG9iYWxzIGZyb20gJy4vc2NoZW1hL2luaXRHbG9iYWxzJ1xuaW1wb3J0IGJ1aWxkRmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUgZnJvbSAnLi9zY2hlbWEvYnVpbGRGYWxsYmFja0xvY2FsZUlucHV0VHlwZSdcbmltcG9ydCBidWlsZExvY2FsZUlucHV0VHlwZSBmcm9tICcuL3NjaGVtYS9idWlsZExvY2FsZUlucHV0VHlwZSdcbmltcG9ydCBidWlsZFBvbGljaWVzVHlwZSBmcm9tICcuL3NjaGVtYS9idWlsZFBvbGljaWVzVHlwZSdcbmltcG9ydCB7IHdyYXBDdXN0b21GaWVsZHMgfSBmcm9tICcuL3V0aWxpdGllcy93cmFwQ3VzdG9tUmVzb2x2ZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25maWdUb1NjaGVtYShjb25maWc6IFNhbml0aXplZENvbmZpZyk6IFByb21pc2U8e1xuICBzY2hlbWE6IEdyYXBoUUwuR3JhcGhRTFNjaGVtYVxuICB2YWxpZGF0aW9uUnVsZXM6IChhcmdzOiBPcGVyYXRpb25BcmdzPGFueT4pID0+IEdyYXBoUUwuVmFsaWRhdGlvblJ1bGVbXVxufT4ge1xuICBjb25zdCBjb2xsZWN0aW9ucyA9IGNvbmZpZy5jb2xsZWN0aW9ucy5yZWR1Y2UoKGFjYywgY29sbGVjdGlvbikgPT4ge1xuICAgIGFjY1tjb2xsZWN0aW9uLnNsdWddID0ge1xuICAgICAgY29uZmlnOiBjb2xsZWN0aW9uLFxuICAgIH1cblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG5cbiAgY29uc3QgZ2xvYmFscyA9IHtcbiAgICBjb25maWc6IGNvbmZpZy5nbG9iYWxzLFxuICB9XG5cbiAgbGV0IGdyYXBocWxSZXN1bHQ6IEdyYXBoUUxJbmZvID0ge1xuICAgIHR5cGVzOiB7XG4gICAgICBhcnJheVR5cGVzOiB7fSxcbiAgICAgIGJsb2NrSW5wdXRUeXBlczoge30sXG4gICAgICBibG9ja1R5cGVzOiB7fSxcbiAgICAgIGdyb3VwVHlwZXM6IHt9LFxuICAgICAgdGFiVHlwZXM6IHt9LFxuICAgIH0sXG4gICAgUXVlcnk6IHtcbiAgICAgIG5hbWU6ICdRdWVyeScsXG4gICAgICBmaWVsZHM6IHt9LFxuICAgIH0sXG4gICAgTXV0YXRpb246IHtcbiAgICAgIG5hbWU6ICdNdXRhdGlvbicsXG4gICAgICBmaWVsZHM6IHt9LFxuICAgIH0sXG4gICAgY29sbGVjdGlvbnMsXG4gICAgZ2xvYmFscyxcbiAgfVxuXG4gIGlmIChjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgZ3JhcGhxbFJlc3VsdC50eXBlc1snbG9jYWxlSW5wdXRUeXBlJ10gPSBidWlsZExvY2FsZUlucHV0VHlwZShjb25maWcubG9jYWxpemF0aW9uKVxuICAgIGdyYXBocWxSZXN1bHQudHlwZXNbJ2ZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlJ10gPSBidWlsZEZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlKFxuICAgICAgY29uZmlnLmxvY2FsaXphdGlvbixcbiAgICApXG4gIH1cblxuICBpbml0Q29sbGVjdGlvbnMoeyBjb25maWcsIGdyYXBocWxSZXN1bHQgfSlcbiAgaW5pdEdsb2JhbHMoeyBjb25maWcsIGdyYXBocWxSZXN1bHQgfSlcblxuICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1snQWNjZXNzJ10gPSB7XG4gICAgcmVzb2x2ZTogYWNjZXNzUmVzb2x2ZXIoY29uZmlnKSxcbiAgICB0eXBlOiBidWlsZFBvbGljaWVzVHlwZShjb25maWcpLFxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb25maWcuZ3JhcGhRTC5xdWVyaWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgY3VzdG9tUXVlcmllcyA9IGNvbmZpZy5ncmFwaFFMLnF1ZXJpZXMoR3JhcGhRTCwge1xuICAgICAgLi4uZ3JhcGhxbFJlc3VsdCxcbiAgICAgIGNvbmZpZyxcbiAgICB9KVxuICAgIGdyYXBocWxSZXN1bHQuUXVlcnkgPSB7XG4gICAgICAuLi5ncmFwaHFsUmVzdWx0LlF1ZXJ5LFxuICAgICAgZmllbGRzOiB7XG4gICAgICAgIC4uLmdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzLFxuICAgICAgICAuLi53cmFwQ3VzdG9tRmllbGRzKChjdXN0b21RdWVyaWVzIHx8IHt9KSBhcyBuZXZlciksXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29uZmlnLmdyYXBoUUwubXV0YXRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgY3VzdG9tTXV0YXRpb25zID0gY29uZmlnLmdyYXBoUUwubXV0YXRpb25zKEdyYXBoUUwsIHtcbiAgICAgIC4uLmdyYXBocWxSZXN1bHQsXG4gICAgICBjb25maWcsXG4gICAgfSlcbiAgICBncmFwaHFsUmVzdWx0Lk11dGF0aW9uID0ge1xuICAgICAgLi4uZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbixcbiAgICAgIGZpZWxkczoge1xuICAgICAgICAuLi5ncmFwaHFsUmVzdWx0Lk11dGF0aW9uLmZpZWxkcyxcbiAgICAgICAgLi4ud3JhcEN1c3RvbUZpZWxkcygoY3VzdG9tTXV0YXRpb25zIHx8IHt9KSBhcyBuZXZlciksXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5ID0gbmV3IEdyYXBoUUwuR3JhcGhRTE9iamVjdFR5cGUoZ3JhcGhxbFJlc3VsdC5RdWVyeSlcbiAgY29uc3QgbXV0YXRpb24gPSBuZXcgR3JhcGhRTC5HcmFwaFFMT2JqZWN0VHlwZShncmFwaHFsUmVzdWx0Lk11dGF0aW9uKVxuXG4gIGNvbnN0IHNjaGVtYVRvQ3JlYXRlID0ge1xuICAgIG11dGF0aW9uLFxuICAgIHF1ZXJ5LFxuICB9XG5cbiAgY29uc3Qgc2NoZW1hID0gbmV3IEdyYXBoUUwuR3JhcGhRTFNjaGVtYShzY2hlbWFUb0NyZWF0ZSlcblxuICBjb25zdCB2YWxpZGF0aW9uUnVsZXMgPSAoYXJncykgPT4gW1xuICAgIGNyZWF0ZUNvbXBsZXhpdHlSdWxlKHtcbiAgICAgIGVzdGltYXRvcnM6IFtcbiAgICAgICAgZmllbGRFeHRlbnNpb25zRXN0aW1hdG9yKCksXG4gICAgICAgIHNpbXBsZUVzdGltYXRvcih7IGRlZmF1bHRDb21wbGV4aXR5OiAxIH0pLCAvLyBGYWxsYmFjayBpZiBjb21wbGV4aXR5IG5vdCBzZXRcbiAgICAgIF0sXG4gICAgICBtYXhpbXVtQ29tcGxleGl0eTogY29uZmlnLmdyYXBoUUwubWF4Q29tcGxleGl0eSxcbiAgICAgIHZhcmlhYmxlczogYXJncy52YXJpYWJsZVZhbHVlcyxcbiAgICAgIC8vIG9uQ29tcGxldGU6IChjb21wbGV4aXR5KSA9PiB7IGNvbnNvbGUubG9nKCdRdWVyeSBDb21wbGV4aXR5OicsIGNvbXBsZXhpdHkpOyB9LFxuICAgIH0pLFxuICBdXG5cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWEsXG4gICAgdmFsaWRhdGlvblJ1bGVzLFxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uZmlnVG9TY2hlbWEiLCJjb25maWciLCJjb2xsZWN0aW9ucyIsInJlZHVjZSIsImFjYyIsImNvbGxlY3Rpb24iLCJzbHVnIiwiZ2xvYmFscyIsImdyYXBocWxSZXN1bHQiLCJ0eXBlcyIsImFycmF5VHlwZXMiLCJibG9ja0lucHV0VHlwZXMiLCJibG9ja1R5cGVzIiwiZ3JvdXBUeXBlcyIsInRhYlR5cGVzIiwiUXVlcnkiLCJuYW1lIiwiZmllbGRzIiwiTXV0YXRpb24iLCJsb2NhbGl6YXRpb24iLCJidWlsZExvY2FsZUlucHV0VHlwZSIsImJ1aWxkRmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUiLCJpbml0Q29sbGVjdGlvbnMiLCJpbml0R2xvYmFscyIsInJlc29sdmUiLCJhY2Nlc3NSZXNvbHZlciIsInR5cGUiLCJidWlsZFBvbGljaWVzVHlwZSIsImdyYXBoUUwiLCJxdWVyaWVzIiwiY3VzdG9tUXVlcmllcyIsIkdyYXBoUUwiLCJ3cmFwQ3VzdG9tRmllbGRzIiwibXV0YXRpb25zIiwiY3VzdG9tTXV0YXRpb25zIiwicXVlcnkiLCJHcmFwaFFMT2JqZWN0VHlwZSIsIm11dGF0aW9uIiwic2NoZW1hVG9DcmVhdGUiLCJzY2hlbWEiLCJHcmFwaFFMU2NoZW1hIiwidmFsaWRhdGlvblJ1bGVzIiwiYXJncyIsImNyZWF0ZUNvbXBsZXhpdHlSdWxlIiwiZXN0aW1hdG9ycyIsImZpZWxkRXh0ZW5zaW9uc0VzdGltYXRvciIsInNpbXBsZUVzdGltYXRvciIsImRlZmF1bHRDb21wbGV4aXR5IiwibWF4aW11bUNvbXBsZXhpdHkiLCJtYXhDb21wbGV4aXR5IiwidmFyaWFibGVzIiwidmFyaWFibGVWYWx1ZXMiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkFvQmRBOzs7ZUFBQUE7OztpRUFuQkc7d0NBT2xCOytEQUlvQjt3RUFDQztvRUFDSjtxRkFDaUI7NkVBQ1I7MEVBQ0g7b0NBQ0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFCLGVBQWVBLGVBQWVDLE1BQXVCO0lBSTFELE1BQU1DLGNBQWNE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
106
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { OperationArgs } from 'graphql-http'\nimport type { GraphQLInfo } from 'payload/config'\nimport type { SanitizedConfig } from 'payload/types'\n\nimport * as GraphQL from 'graphql'\n\nimport {\n createComplexityRule,\n fieldExtensionsEstimator,\n simpleEstimator,\n} from './packages/graphql-query-complexity/index.js'\nimport accessResolver from './resolvers/auth/access.js'\nimport buildFallbackLocaleInputType from './schema/buildFallbackLocaleInputType.js'\nimport buildLocaleInputType from './schema/buildLocaleInputType.js'\nimport buildPoliciesType from './schema/buildPoliciesType.js'\nimport initCollections from './schema/initCollections.js'\nimport initGlobals from './schema/initGlobals.js'\nimport { wrapCustomFields } from './utilities/wrapCustomResolver.js'\n\nexport function configToSchema(config: SanitizedConfig): {\n schema: GraphQL.GraphQLSchema\n validationRules: (args: OperationArgs<any>) => GraphQL.ValidationRule[]\n} {\n const collections = config.collections.reduce((acc, collection) => {\n acc[collection.slug] = {\n config: collection,\n }\n\n return acc\n }, {})\n\n const globals = {\n config: config.globals,\n }\n\n const graphqlResult: GraphQLInfo = {\n Mutation: {\n name: 'Mutation',\n fields: {},\n },\n Query: {\n name: 'Query',\n fields: {},\n },\n collections,\n globals,\n types: {\n arrayTypes: {},\n blockInputTypes: {},\n blockTypes: {},\n groupTypes: {},\n tabTypes: {},\n },\n }\n\n if (config.localization) {\n graphqlResult.types['localeInputType'] = buildLocaleInputType(config.localization)\n graphqlResult.types['fallbackLocaleInputType'] = buildFallbackLocaleInputType(\n config.localization,\n )\n }\n\n initCollections({ config, graphqlResult })\n initGlobals({ config, graphqlResult })\n\n graphqlResult.Query.fields['Access'] = {\n type: buildPoliciesType(config),\n resolve: accessResolver(config),\n }\n\n if (typeof config.graphQL.queries === 'function') {\n const customQueries = config.graphQL.queries(GraphQL, {\n ...graphqlResult,\n config,\n })\n graphqlResult.Query = {\n ...graphqlResult.Query,\n fields: {\n ...graphqlResult.Query.fields,\n ...wrapCustomFields((customQueries || {}) as never),\n },\n }\n }\n\n if (typeof config.graphQL.mutations === 'function') {\n const customMutations = config.graphQL.mutations(GraphQL, {\n ...graphqlResult,\n config,\n })\n graphqlResult.Mutation = {\n ...graphqlResult.Mutation,\n fields: {\n ...graphqlResult.Mutation.fields,\n ...wrapCustomFields((customMutations || {}) as never),\n },\n }\n }\n\n const query = new GraphQL.GraphQLObjectType(graphqlResult.Query)\n const mutation = new GraphQL.GraphQLObjectType(graphqlResult.Mutation)\n\n const schemaToCreate = {\n mutation,\n query,\n }\n\n const schema = new GraphQL.GraphQLSchema(schemaToCreate)\n\n const validationRules = (args) => [\n createComplexityRule({\n estimators: [\n fieldExtensionsEstimator(),\n simpleEstimator({ defaultComplexity: 1 }), // Fallback if complexity not set\n ],\n maximumComplexity: config.graphQL.maxComplexity,\n variables: args.variableValues,\n // onComplete: (complexity) => { console.log('Query Complexity:', complexity); },\n }),\n ]\n\n return {\n schema,\n validationRules,\n }\n}\n"],"names":["GraphQL","createComplexityRule","fieldExtensionsEstimator","simpleEstimator","accessResolver","buildFallbackLocaleInputType","buildLocaleInputType","buildPoliciesType","initCollections","initGlobals","wrapCustomFields","configToSchema","config","collections","reduce","acc","collection","slug","globals","graphqlResult","Mutation","name","fields","Query","types","arrayTypes","blockInputTypes","blockTypes","groupTypes","tabTypes","localization","type","resolve","graphQL","queries","customQueries","mutations","customMutations","query","GraphQLObjectType","mutation","schemaToCreate","schema","GraphQLSchema","validationRules","args","estimators","defaultComplexity","maximumComplexity","maxComplexity","variables","variableValues"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,oCAAoC,GAKpC,YAAYA,aAAa,UAAS;AAElC,SACEC,oBAAoB,EACpBC,wBAAwB,EACxBC,eAAe,QACV,+CAA8C;AACrD,OAAOC,oBAAoB,6BAA4B;AACvD,OAAOC,kCAAkC,2CAA0C;AACnF,OAAOC,0BAA0B,mCAAkC;AACnE,OAAOC,uBAAuB,gCAA+B;AAC7D,OAAOC,qBAAqB,8BAA6B;AACzD,OAAOC,iBAAiB,0BAAyB;AACjD,SAASC,gBAAgB,QAAQ,oCAAmC;AAEpE,OAAO,SAASC,eAAeC,MAAuB;IAIpD,MAAMC,cAAcD,OAAOC,WAAW,CAACC,MAAM,CAAC,CAACC,KAAKC;QAClDD,GAAG,CAACC,WAAWC,IAAI,CAAC,GAAG;YACrBL,QAAQI;QACV;QAEA,OAAOD;IACT,GAAG,CAAC;IAEJ,MAAMG,UAAU;QACdN,QAAQA,OAAOM,OAAO;IACxB;IAEA,MAAMC,gBAA6B;QACjCC,UAAU;YACRC,MAAM;YACNC,QAAQ,CAAC;QACX;QACAC,OAAO;YACLF,MAAM;YACNC,QAAQ,CAAC;QACX;QACAT;QACAK;QACAM,OAAO;YACLC,YAAY,CAAC;YACbC,iBAAiB,CAAC;YAClBC,YAAY,CAAC;YACbC,YAAY,CAAC;YACbC,UAAU,CAAC;QACb;IACF;IAEA,IAAIjB,OAAOkB,YAAY,EAAE;QACvBX,cAAcK,KAAK,CAAC,kBAAkB,GAAGlB,qBAAqBM,OAAOkB,YAAY;QACjFX,cAAcK,KAAK,CAAC,0BAA0B,GAAGnB,6BAC/CO,OAAOkB,YAAY;IAEvB;IAEAtB,gBAAgB;QAAEI;QAAQO;IAAc;IACxCV,YAAY;QAAEG;QAAQO;IAAc;IAEpCA,cAAcI,KAAK,CAACD,MAAM,CAAC,SAAS,GAAG;QACrCS,MAAMxB,kBAAkBK;QACxBoB,SAAS5B,eAAeQ;IAC1B;IAEA,IAAI,OAAOA,OAAOqB,OAAO,CAACC,OAAO,KAAK,YAAY;QAChD,MAAMC,gBAAgBvB,OAAOqB,OAAO,CAACC,OAAO,CAAClC,SAAS;YACpD,GAAGmB,aAAa;YAChBP;QACF;QACAO,cAAcI,KAAK,GAAG;YACpB,GAAGJ,cAAcI,KAAK;YACtBD,QAAQ;gBACN,GAAGH,cAAcI,KAAK,CAACD,MAAM;gBAC7B,GAAGZ,iBAAkByB,iBAAiB,CAAC,EAAY;YACrD;QACF;IACF;IAEA,IAAI,OAAOvB,OAAOqB,OAAO,CAACG,SAAS,KAAK,YAAY;QAClD,MAAMC,kBAAkBzB,OAAOqB,OAAO,CAACG,SAAS,CAACpC,SAAS;YACxD,GAAGmB,aAAa;YAChBP;QACF;QACAO,cAAcC,QAAQ,GAAG;YACvB,GAAGD,cAAcC,QAAQ;YACzBE,QAAQ;gBACN,GAAGH,cAAcC,QAAQ,CAACE,MAAM;gBAChC,GAAGZ,iBAAkB2B,mBAAmB,CAAC,EAAY;YACvD;QACF;IACF;IAEA,MAAMC,QAAQ,IAAItC,QAAQuC,iBAAiB,CAACpB,cAAcI,KAAK;IAC/D,MAAMiB,WAAW,IAAIxC,QAAQuC,iBAAiB,CAACpB,cAAcC,QAAQ;IAErE,MAAMqB,iBAAiB;QACrBD;QACAF;IACF;IAEA,MAAMI,SAAS,IAAI1C,QAAQ2C,aAAa,CAACF;IAEzC,MAAMG,kBAAkB,CAACC,OAAS;YAChC5C,qBAAqB;gBACnB6C,YAAY;oBACV5C;oBACAC,gBAAgB;wBAAE4C,mBAAmB;oBAAE;iBACxC;gBACDC,mBAAmBpC,OAAOqB,OAAO,CAACgB,aAAa;gBAC/CC,WAAWL,KAAKM,cAAc;YAEhC;SACD;IAED,OAAO;QACLT;QACAE;IACF;AACF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Created by Ivo Meißner on 28.07.17.
3
+ */
4
+ import type { DocumentNode, FieldNode, FragmentDefinitionNode, GraphQLCompositeType, GraphQLDirective, GraphQLField, GraphQLSchema, GraphQLUnionType, InlineFragmentNode, OperationDefinitionNode } from 'graphql';
5
+ import { GraphQLError, GraphQLInterfaceType, GraphQLObjectType, ValidationContext } from 'graphql';
6
+ export type ComplexityEstimatorArgs = {
7
+ args: {
8
+ [key: string]: any;
9
+ };
10
+ childComplexity: number;
11
+ context?: Record<string, any>;
12
+ field: GraphQLField<any, any>;
13
+ node: FieldNode;
14
+ type: GraphQLCompositeType;
15
+ };
16
+ export type ComplexityEstimator = (options: ComplexityEstimatorArgs) => number | void;
17
+ export type Complexity = any;
18
+ export interface QueryComplexityOptions {
19
+ context?: Record<string, any>;
20
+ createError?: (max: number, actual: number) => GraphQLError;
21
+ estimators: Array<ComplexityEstimator>;
22
+ maximumComplexity: number;
23
+ onComplete?: (complexity: number) => void;
24
+ operationName?: string;
25
+ variables?: Record<string, any>;
26
+ }
27
+ export declare function getComplexity(options: {
28
+ context?: Record<string, any>;
29
+ estimators: ComplexityEstimator[];
30
+ operationName?: string;
31
+ query: DocumentNode;
32
+ schema: GraphQLSchema;
33
+ variables?: Record<string, any>;
34
+ }): number;
35
+ export default class QueryComplexity {
36
+ OperationDefinition: Record<string, any>;
37
+ complexity: number;
38
+ context: ValidationContext;
39
+ estimators: Array<ComplexityEstimator>;
40
+ includeDirectiveDef: GraphQLDirective;
41
+ options: QueryComplexityOptions;
42
+ requestContext?: Record<string, any>;
43
+ skipDirectiveDef: GraphQLDirective;
44
+ variableValues: Record<string, any>;
45
+ constructor(context: ValidationContext, options: QueryComplexityOptions);
46
+ createError(): GraphQLError;
47
+ nodeComplexity(node: FieldNode | FragmentDefinitionNode | InlineFragmentNode | OperationDefinitionNode, typeDef: GraphQLInterfaceType | GraphQLObjectType | GraphQLUnionType): number;
48
+ onOperationDefinitionEnter(operation: OperationDefinitionNode): void;
49
+ onOperationDefinitionLeave(operation: OperationDefinitionNode): GraphQLError | void;
50
+ }
51
+ //# sourceMappingURL=QueryComplexity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryComplexity.d.ts","sourceRoot":"","sources":["../../../src/packages/graphql-query-complexity/QueryComplexity.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,sBAAsB,EAEtB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EAGZ,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EAAC,MAAM,SAAS,CAAC;AAE1C,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAGjB,iBAAiB,EAMlB,MAAM,SAAS,CAAA;AAOhB,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,oBAAoB,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,GAAG,IAAI,CAAA;AAGrF,MAAM,MAAM,UAAU,GAAG,GAAG,CAAA;AAO5B,MAAM,WAAW,sBAAsB;IAErC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAI7B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,YAAY,CAAA;IAG3D,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAKtC,iBAAiB,EAAE,MAAM,CAAA;IAGzB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAGzC,aAAa,CAAC,EAAE,MAAM,CAAA;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAChC;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,UAAU,EAAE,mBAAmB,EAAE,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAChC,GAAG,MAAM,CAwBT;AAED,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,iBAAiB,CAAA;IAC1B,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,mBAAmB,EAAE,gBAAgB,CAAA;IACrC,OAAO,EAAE,sBAAsB,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBAEvB,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB;IAqBvE,WAAW,IAAI,YAAY;IAO3B,cAAc,CACZ,IAAI,EAAE,SAAS,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,uBAAuB,EACvF,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,gBAAgB,GACnE,MAAM;IA8MT,0BAA0B,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IA8CpE,0BAA0B,CAAC,SAAS,EAAE,uBAAuB,GAAG,YAAY,GAAG,IAAI;CAgBpF"}
@@ -0,0 +1,270 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */ /**
2
+ * Created by Ivo Meißner on 28.07.17.
3
+ */ import { GraphQLError, GraphQLInterfaceType, GraphQLObjectType, Kind, TypeInfo, ValidationContext, getNamedType, isAbstractType, isCompositeType, visit, visitWithTypeInfo } from 'graphql';
4
+ import { getArgumentValues, getDirectiveValues, getVariableValues } from 'graphql/execution/values.js';
5
+ function queryComplexityMessage(max, actual) {
6
+ return `The query exceeds the maximum complexity of ${max}. ` + `Actual complexity is ${actual}`;
7
+ }
8
+ export function getComplexity(options) {
9
+ const typeInfo = new TypeInfo(options.schema);
10
+ const errors = [];
11
+ const context = new ValidationContext(options.schema, options.query, typeInfo, (error)=>errors.push(error));
12
+ const visitor = new QueryComplexity(context, {
13
+ // Maximum complexity does not matter since we're only interested in the calculated complexity.
14
+ context: options.context,
15
+ estimators: options.estimators,
16
+ maximumComplexity: Infinity,
17
+ operationName: options.operationName,
18
+ variables: options.variables
19
+ });
20
+ visit(options.query, visitWithTypeInfo(typeInfo, visitor));
21
+ // Throw first error if any
22
+ if (errors.length) {
23
+ throw errors.pop();
24
+ }
25
+ return visitor.complexity;
26
+ }
27
+ export default class QueryComplexity {
28
+ OperationDefinition;
29
+ complexity;
30
+ context;
31
+ estimators;
32
+ includeDirectiveDef;
33
+ options;
34
+ requestContext;
35
+ skipDirectiveDef;
36
+ variableValues;
37
+ constructor(context, options){
38
+ if (!(typeof options.maximumComplexity === 'number' && options.maximumComplexity > 0)) {
39
+ throw new Error('Maximum query complexity must be a positive number');
40
+ }
41
+ this.context = context;
42
+ this.complexity = 0;
43
+ this.options = options;
44
+ this.includeDirectiveDef = this.context.getSchema().getDirective('include');
45
+ this.skipDirectiveDef = this.context.getSchema().getDirective('skip');
46
+ this.estimators = options.estimators;
47
+ this.variableValues = {};
48
+ this.requestContext = options.context;
49
+ this.OperationDefinition = {
50
+ enter: this.onOperationDefinitionEnter,
51
+ leave: this.onOperationDefinitionLeave
52
+ };
53
+ }
54
+ createError() {
55
+ if (typeof this.options.createError === 'function') {
56
+ return this.options.createError(this.options.maximumComplexity, this.complexity);
57
+ }
58
+ return new GraphQLError(queryComplexityMessage(this.options.maximumComplexity, this.complexity));
59
+ }
60
+ nodeComplexity(node, typeDef) {
61
+ if (node.selectionSet) {
62
+ let fields = {};
63
+ if (typeDef instanceof GraphQLObjectType || typeDef instanceof GraphQLInterfaceType) {
64
+ fields = typeDef.getFields();
65
+ }
66
+ // Determine all possible types of the current node
67
+ let possibleTypeNames;
68
+ if (isAbstractType(typeDef)) {
69
+ possibleTypeNames = this.context.getSchema().getPossibleTypes(typeDef).map((t)=>t.name);
70
+ } else {
71
+ possibleTypeNames = [
72
+ typeDef.name
73
+ ];
74
+ }
75
+ // Collect complexities for all possible types individually
76
+ const selectionSetComplexities = node.selectionSet.selections.reduce((complexities, childNode)=>{
77
+ // let nodeComplexity = 0;
78
+ let innerComplexities = complexities;
79
+ let includeNode = true;
80
+ let skipNode = false;
81
+ for (const directive of childNode.directives ?? []){
82
+ const directiveName = directive.name.value;
83
+ switch(directiveName){
84
+ case 'include':
85
+ {
86
+ const values = getDirectiveValues(this.includeDirectiveDef, childNode, this.variableValues || {});
87
+ if (typeof values.if === 'boolean') {
88
+ includeNode = values.if;
89
+ }
90
+ break;
91
+ }
92
+ case 'skip':
93
+ {
94
+ const values = getDirectiveValues(this.skipDirectiveDef, childNode, this.variableValues || {});
95
+ if (typeof values.if === 'boolean') {
96
+ skipNode = values.if;
97
+ }
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ if (!includeNode || skipNode) {
103
+ return complexities;
104
+ }
105
+ switch(childNode.kind){
106
+ case Kind.FIELD:
107
+ {
108
+ const field = fields[childNode.name.value];
109
+ // Invalid field, should be caught by other validation rules
110
+ if (!field) {
111
+ break;
112
+ }
113
+ const fieldType = getNamedType(field.type);
114
+ // Get arguments
115
+ let args;
116
+ try {
117
+ args = getArgumentValues(field, childNode, this.variableValues || {});
118
+ } catch (e) {
119
+ this.context.reportError(e);
120
+ return complexities;
121
+ }
122
+ // Check if we have child complexity
123
+ let childComplexity = 0;
124
+ if (isCompositeType(fieldType)) {
125
+ childComplexity = this.nodeComplexity(childNode, fieldType);
126
+ }
127
+ // Run estimators one after another and return first valid complexity
128
+ // score
129
+ const estimatorArgs = {
130
+ type: typeDef,
131
+ args,
132
+ childComplexity,
133
+ context: this.requestContext,
134
+ field,
135
+ node: childNode
136
+ };
137
+ const validScore = this.estimators.find((estimator)=>{
138
+ const tmpComplexity = estimator(estimatorArgs);
139
+ if (typeof tmpComplexity === 'number' && !isNaN(tmpComplexity)) {
140
+ innerComplexities = addComplexities(tmpComplexity, complexities, possibleTypeNames);
141
+ return true;
142
+ }
143
+ return false;
144
+ });
145
+ if (!validScore) {
146
+ this.context.reportError(new GraphQLError(`No complexity could be calculated for field ${typeDef.name}.${field.name}. ` + 'At least one complexity estimator has to return a complexity score.'));
147
+ return complexities;
148
+ }
149
+ break;
150
+ }
151
+ case Kind.FRAGMENT_SPREAD:
152
+ {
153
+ const fragment = this.context.getFragment(childNode.name.value);
154
+ // Unknown fragment, should be caught by other validation rules
155
+ if (!fragment) {
156
+ break;
157
+ }
158
+ const fragmentType = this.context.getSchema().getType(fragment.typeCondition.name.value);
159
+ // Invalid fragment type, ignore. Should be caught by other validation rules
160
+ if (!isCompositeType(fragmentType)) {
161
+ break;
162
+ }
163
+ const nodeComplexity = this.nodeComplexity(fragment, fragmentType);
164
+ if (isAbstractType(fragmentType)) {
165
+ // Add fragment complexity for all possible types
166
+ innerComplexities = addComplexities(nodeComplexity, complexities, this.context.getSchema().getPossibleTypes(fragmentType).map((t)=>t.name));
167
+ } else {
168
+ // Add complexity for object type
169
+ innerComplexities = addComplexities(nodeComplexity, complexities, [
170
+ fragmentType.name
171
+ ]);
172
+ }
173
+ break;
174
+ }
175
+ case Kind.INLINE_FRAGMENT:
176
+ {
177
+ let inlineFragmentType = typeDef;
178
+ if (childNode.typeCondition && childNode.typeCondition.name) {
179
+ inlineFragmentType = this.context.getSchema().getType(childNode.typeCondition.name.value);
180
+ if (!isCompositeType(inlineFragmentType)) {
181
+ break;
182
+ }
183
+ }
184
+ const nodeComplexity = this.nodeComplexity(childNode, inlineFragmentType);
185
+ if (isAbstractType(inlineFragmentType)) {
186
+ // Add fragment complexity for all possible types
187
+ innerComplexities = addComplexities(nodeComplexity, complexities, this.context.getSchema().getPossibleTypes(inlineFragmentType).map((t)=>t.name));
188
+ } else {
189
+ // Add complexity for object type
190
+ innerComplexities = addComplexities(nodeComplexity, complexities, [
191
+ inlineFragmentType.name
192
+ ]);
193
+ }
194
+ break;
195
+ }
196
+ default:
197
+ {
198
+ innerComplexities = addComplexities(this.nodeComplexity(childNode, typeDef), complexities, possibleTypeNames);
199
+ break;
200
+ }
201
+ }
202
+ return innerComplexities;
203
+ }, {});
204
+ // Only return max complexity of all possible types
205
+ if (!selectionSetComplexities) {
206
+ return NaN;
207
+ }
208
+ return Math.max(...Object.values(selectionSetComplexities), 0);
209
+ }
210
+ return 0;
211
+ }
212
+ onOperationDefinitionEnter(operation) {
213
+ if (typeof this.options.operationName === 'string' && this.options.operationName !== operation.name.value) {
214
+ return;
215
+ }
216
+ // Get variable values from variables that are passed from options, merged
217
+ // with default values defined in the operation
218
+ const { coerced, errors } = getVariableValues(this.context.getSchema(), // We have to create a new array here because input argument is not readonly in graphql ~14.6.0
219
+ operation.variableDefinitions ? [
220
+ ...operation.variableDefinitions
221
+ ] : [], this.options.variables ?? {});
222
+ if (errors && errors.length) {
223
+ // We have input validation errors, report errors and abort
224
+ errors.forEach((error)=>this.context.reportError(error));
225
+ return;
226
+ }
227
+ this.variableValues = coerced;
228
+ switch(operation.operation){
229
+ case 'query':
230
+ this.complexity += this.nodeComplexity(operation, this.context.getSchema().getQueryType());
231
+ break;
232
+ case 'mutation':
233
+ this.complexity += this.nodeComplexity(operation, this.context.getSchema().getMutationType());
234
+ break;
235
+ case 'subscription':
236
+ this.complexity += this.nodeComplexity(operation, this.context.getSchema().getSubscriptionType());
237
+ break;
238
+ default:
239
+ throw new Error(`Query complexity could not be calculated for operation of type ${operation.operation}`);
240
+ }
241
+ }
242
+ onOperationDefinitionLeave(operation) {
243
+ if (typeof this.options.operationName === 'string' && this.options.operationName !== operation.name.value) {
244
+ return;
245
+ }
246
+ if (this.options.onComplete) {
247
+ this.options.onComplete(this.complexity);
248
+ }
249
+ if (this.complexity > this.options.maximumComplexity) {
250
+ return this.context.reportError(this.createError());
251
+ }
252
+ }
253
+ }
254
+ /**
255
+ * Adds a complexity to the complexity map for all possible types
256
+ * @param complexity
257
+ * @param complexityMap
258
+ * @param possibleTypes
259
+ */ function addComplexities(complexity, complexityMap, possibleTypes) {
260
+ for (const type of possibleTypes){
261
+ if (Object.prototype.hasOwnProperty.call(complexityMap, type)) {
262
+ complexityMap[type] += complexity;
263
+ } else {
264
+ complexityMap[type] = complexity;
265
+ }
266
+ }
267
+ return complexityMap;
268
+ }
269
+
270
+ //# sourceMappingURL=QueryComplexity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/packages/graphql-query-complexity/QueryComplexity.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n/**\n * Created by Ivo Meißner on 28.07.17.\n */\n\nimport type {\n DocumentNode,\n FieldNode,\n FragmentDefinitionNode,\n FragmentSpreadNode,\n GraphQLCompositeType,\n GraphQLDirective,\n GraphQLField,\n GraphQLFieldMap,\n GraphQLNamedType,\n GraphQLSchema,\n GraphQLUnionType,\n InlineFragmentNode,\n OperationDefinitionNode} from 'graphql';\n\nimport {\n GraphQLError,\n GraphQLInterfaceType,\n GraphQLObjectType,\n Kind,\n TypeInfo,\n ValidationContext,\n getNamedType,\n isAbstractType,\n isCompositeType,\n visit,\n visitWithTypeInfo,\n} from 'graphql'\nimport {\n getArgumentValues,\n getDirectiveValues,\n getVariableValues,\n} from 'graphql/execution/values.js'\n\nexport type ComplexityEstimatorArgs = {\n args: { [key: string]: any }\n childComplexity: number\n context?: Record<string, any>\n field: GraphQLField<any, any>\n node: FieldNode\n type: GraphQLCompositeType\n}\n\nexport type ComplexityEstimator = (options: ComplexityEstimatorArgs) => number | void\n\n// Complexity can be anything that is supported by the configured estimators\nexport type Complexity = any\n\n// Map of complexities for possible types (of Union, Interface types)\ntype ComplexityMap = {\n [typeName: string]: number\n}\n\nexport interface QueryComplexityOptions {\n // Pass request context to the estimators via estimationContext\n context?: Record<string, any>\n\n // The query variables. This is needed because the variables are not available\n // Optional function to create a custom error\n createError?: (max: number, actual: number) => GraphQLError\n\n // An array of complexity estimators to use for estimating the complexity\n estimators: Array<ComplexityEstimator>\n\n // Optional callback function to retrieve the determined query complexity\n // Will be invoked whether the query is rejected or not\n // The maximum allowed query complexity, queries above this threshold will be rejected\n maximumComplexity: number\n\n // This can be used for logging or to implement rate limiting\n onComplete?: (complexity: number) => void\n\n // specify operation name only when pass multi-operation documents\n operationName?: string\n\n // in the visitor of the graphql-js library\n variables?: Record<string, any>\n}\n\nfunction queryComplexityMessage(max: number, actual: number): string {\n return `The query exceeds the maximum complexity of ${max}. ` + `Actual complexity is ${actual}`\n}\n\nexport function getComplexity(options: {\n context?: Record<string, any>\n estimators: ComplexityEstimator[]\n operationName?: string\n query: DocumentNode\n schema: GraphQLSchema\n variables?: Record<string, any>\n}): number {\n const typeInfo = new TypeInfo(options.schema)\n\n const errors: GraphQLError[] = []\n const context = new ValidationContext(options.schema, options.query, typeInfo, (error) =>\n errors.push(error),\n )\n const visitor = new QueryComplexity(context, {\n // Maximum complexity does not matter since we're only interested in the calculated complexity.\n context: options.context,\n estimators: options.estimators,\n maximumComplexity: Infinity,\n operationName: options.operationName,\n variables: options.variables,\n })\n\n visit(options.query, visitWithTypeInfo(typeInfo, visitor))\n\n // Throw first error if any\n if (errors.length) {\n throw errors.pop()\n }\n\n return visitor.complexity\n}\n\nexport default class QueryComplexity {\n OperationDefinition: Record<string, any>\n complexity: number\n context: ValidationContext\n estimators: Array<ComplexityEstimator>\n includeDirectiveDef: GraphQLDirective\n options: QueryComplexityOptions\n requestContext?: Record<string, any>\n skipDirectiveDef: GraphQLDirective\n variableValues: Record<string, any>\n\n constructor(context: ValidationContext, options: QueryComplexityOptions) {\n if (!(typeof options.maximumComplexity === 'number' && options.maximumComplexity > 0)) {\n throw new Error('Maximum query complexity must be a positive number')\n }\n\n this.context = context\n this.complexity = 0\n this.options = options\n\n this.includeDirectiveDef = this.context.getSchema().getDirective('include')\n this.skipDirectiveDef = this.context.getSchema().getDirective('skip')\n this.estimators = options.estimators\n this.variableValues = {}\n this.requestContext = options.context\n\n this.OperationDefinition = {\n enter: this.onOperationDefinitionEnter,\n leave: this.onOperationDefinitionLeave,\n }\n }\n\n createError(): GraphQLError {\n if (typeof this.options.createError === 'function') {\n return this.options.createError(this.options.maximumComplexity, this.complexity)\n }\n return new GraphQLError(queryComplexityMessage(this.options.maximumComplexity, this.complexity))\n }\n\n nodeComplexity(\n node: FieldNode | FragmentDefinitionNode | InlineFragmentNode | OperationDefinitionNode,\n typeDef: GraphQLInterfaceType | GraphQLObjectType | GraphQLUnionType,\n ): number {\n if (node.selectionSet) {\n let fields: GraphQLFieldMap<any, any> = {}\n if (typeDef instanceof GraphQLObjectType || typeDef instanceof GraphQLInterfaceType) {\n fields = typeDef.getFields()\n }\n\n // Determine all possible types of the current node\n let possibleTypeNames: string[]\n if (isAbstractType(typeDef)) {\n possibleTypeNames = this.context\n .getSchema()\n .getPossibleTypes(typeDef)\n .map((t) => t.name)\n } else {\n possibleTypeNames = [typeDef.name]\n }\n\n // Collect complexities for all possible types individually\n const selectionSetComplexities: ComplexityMap = node.selectionSet.selections.reduce(\n (\n complexities: ComplexityMap,\n childNode: FieldNode | FragmentSpreadNode | InlineFragmentNode,\n ): ComplexityMap => {\n // let nodeComplexity = 0;\n let innerComplexities = complexities\n\n let includeNode = true\n let skipNode = false\n\n for (const directive of childNode.directives ?? []) {\n const directiveName = directive.name.value\n switch (directiveName) {\n case 'include': {\n const values = getDirectiveValues(\n this.includeDirectiveDef,\n childNode,\n this.variableValues || {},\n )\n if (typeof values.if === 'boolean') {\n includeNode = values.if\n }\n break\n }\n case 'skip': {\n const values = getDirectiveValues(\n this.skipDirectiveDef,\n childNode,\n this.variableValues || {},\n )\n if (typeof values.if === 'boolean') {\n skipNode = values.if\n }\n break\n }\n }\n }\n\n if (!includeNode || skipNode) {\n return complexities\n }\n\n switch (childNode.kind) {\n case Kind.FIELD: {\n const field = fields[childNode.name.value]\n // Invalid field, should be caught by other validation rules\n if (!field) {\n break\n }\n const fieldType = getNamedType(field.type)\n\n // Get arguments\n let args: { [key: string]: any }\n try {\n args = getArgumentValues(field, childNode, this.variableValues || {})\n } catch (e) {\n this.context.reportError(e)\n return complexities\n }\n\n // Check if we have child complexity\n let childComplexity = 0\n if (isCompositeType(fieldType)) {\n childComplexity = this.nodeComplexity(childNode, fieldType)\n }\n\n // Run estimators one after another and return first valid complexity\n // score\n const estimatorArgs: ComplexityEstimatorArgs = {\n type: typeDef,\n args,\n childComplexity,\n context: this.requestContext,\n field,\n node: childNode,\n }\n const validScore = this.estimators.find((estimator) => {\n const tmpComplexity = estimator(estimatorArgs)\n\n if (typeof tmpComplexity === 'number' && !isNaN(tmpComplexity)) {\n innerComplexities = addComplexities(\n tmpComplexity,\n complexities,\n possibleTypeNames,\n )\n return true\n }\n\n return false\n })\n if (!validScore) {\n this.context.reportError(\n new GraphQLError(\n `No complexity could be calculated for field ${typeDef.name}.${field.name}. ` +\n 'At least one complexity estimator has to return a complexity score.',\n ),\n )\n return complexities\n }\n break\n }\n case Kind.FRAGMENT_SPREAD: {\n const fragment = this.context.getFragment(childNode.name.value)\n // Unknown fragment, should be caught by other validation rules\n if (!fragment) {\n break\n }\n const fragmentType = this.context\n .getSchema()\n .getType(fragment.typeCondition.name.value)\n // Invalid fragment type, ignore. Should be caught by other validation rules\n if (!isCompositeType(fragmentType)) {\n break\n }\n const nodeComplexity = this.nodeComplexity(fragment, fragmentType)\n if (isAbstractType(fragmentType)) {\n // Add fragment complexity for all possible types\n innerComplexities = addComplexities(\n nodeComplexity,\n complexities,\n this.context\n .getSchema()\n .getPossibleTypes(fragmentType)\n .map((t) => t.name),\n )\n } else {\n // Add complexity for object type\n innerComplexities = addComplexities(nodeComplexity, complexities, [\n fragmentType.name,\n ])\n }\n break\n }\n case Kind.INLINE_FRAGMENT: {\n let inlineFragmentType: GraphQLNamedType = typeDef\n if (childNode.typeCondition && childNode.typeCondition.name) {\n inlineFragmentType = this.context\n .getSchema()\n .getType(childNode.typeCondition.name.value)\n if (!isCompositeType(inlineFragmentType)) {\n break\n }\n }\n\n const nodeComplexity = this.nodeComplexity(childNode, inlineFragmentType)\n if (isAbstractType(inlineFragmentType)) {\n // Add fragment complexity for all possible types\n innerComplexities = addComplexities(\n nodeComplexity,\n complexities,\n this.context\n .getSchema()\n .getPossibleTypes(inlineFragmentType)\n .map((t) => t.name),\n )\n } else {\n // Add complexity for object type\n innerComplexities = addComplexities(nodeComplexity, complexities, [\n inlineFragmentType.name,\n ])\n }\n break\n }\n default: {\n innerComplexities = addComplexities(\n this.nodeComplexity(childNode, typeDef),\n complexities,\n possibleTypeNames,\n )\n break\n }\n }\n\n return innerComplexities\n },\n {},\n )\n // Only return max complexity of all possible types\n if (!selectionSetComplexities) {\n return NaN\n }\n return Math.max(...Object.values(selectionSetComplexities), 0)\n }\n return 0\n }\n\n onOperationDefinitionEnter(operation: OperationDefinitionNode): void {\n if (\n typeof this.options.operationName === 'string' &&\n this.options.operationName !== operation.name.value\n ) {\n return\n }\n\n // Get variable values from variables that are passed from options, merged\n // with default values defined in the operation\n const { coerced, errors } = getVariableValues(\n this.context.getSchema(),\n // We have to create a new array here because input argument is not readonly in graphql ~14.6.0\n operation.variableDefinitions ? [...operation.variableDefinitions] : [],\n this.options.variables ?? {},\n )\n if (errors && errors.length) {\n // We have input validation errors, report errors and abort\n errors.forEach((error) => this.context.reportError(error))\n return\n }\n this.variableValues = coerced\n\n switch (operation.operation) {\n case 'query':\n this.complexity += this.nodeComplexity(operation, this.context.getSchema().getQueryType())\n break\n case 'mutation':\n this.complexity += this.nodeComplexity(\n operation,\n this.context.getSchema().getMutationType(),\n )\n break\n case 'subscription':\n this.complexity += this.nodeComplexity(\n operation,\n this.context.getSchema().getSubscriptionType(),\n )\n break\n default:\n throw new Error(\n `Query complexity could not be calculated for operation of type ${operation.operation}`,\n )\n }\n }\n\n onOperationDefinitionLeave(operation: OperationDefinitionNode): GraphQLError | void {\n if (\n typeof this.options.operationName === 'string' &&\n this.options.operationName !== operation.name.value\n ) {\n return\n }\n\n if (this.options.onComplete) {\n this.options.onComplete(this.complexity)\n }\n\n if (this.complexity > this.options.maximumComplexity) {\n return this.context.reportError(this.createError())\n }\n }\n}\n\n/**\n * Adds a complexity to the complexity map for all possible types\n * @param complexity\n * @param complexityMap\n * @param possibleTypes\n */\nfunction addComplexities(\n complexity: number,\n complexityMap: ComplexityMap,\n possibleTypes: string[],\n): ComplexityMap {\n for (const type of possibleTypes) {\n if (Object.prototype.hasOwnProperty.call(complexityMap, type)) {\n complexityMap[type] += complexity\n } else {\n complexityMap[type] = complexity\n }\n }\n return complexityMap\n}\n"],"names":["GraphQLError","GraphQLInterfaceType","GraphQLObjectType","Kind","TypeInfo","ValidationContext","getNamedType","isAbstractType","isCompositeType","visit","visitWithTypeInfo","getArgumentValues","getDirectiveValues","getVariableValues","queryComplexityMessage","max","actual","getComplexity","options","typeInfo","schema","errors","context","query","error","push","visitor","QueryComplexity","estimators","maximumComplexity","Infinity","operationName","variables","length","pop","complexity","OperationDefinition","includeDirectiveDef","requestContext","skipDirectiveDef","variableValues","constructor","Error","getSchema","getDirective","enter","onOperationDefinitionEnter","leave","onOperationDefinitionLeave","createError","nodeComplexity","node","typeDef","selectionSet","fields","getFields","possibleTypeNames","getPossibleTypes","map","t","name","selectionSetComplexities","selections","reduce","complexities","childNode","innerComplexities","includeNode","skipNode","directive","directives","directiveName","value","values","if","kind","FIELD","field","fieldType","type","args","e","reportError","childComplexity","estimatorArgs","validScore","find","estimator","tmpComplexity","isNaN","addComplexities","FRAGMENT_SPREAD","fragment","getFragment","fragmentType","getType","typeCondition","INLINE_FRAGMENT","inlineFragmentType","NaN","Math","Object","operation","coerced","variableDefinitions","forEach","getQueryType","getMutationType","getSubscriptionType","onComplete","complexityMap","possibleTypes","prototype","hasOwnProperty","call"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ValidationContext } from 'graphql';
2
+ import type { QueryComplexityOptions } from './QueryComplexity.js';
3
+ import QueryComplexity from './QueryComplexity.js';
4
+ export declare function createComplexityRule(options: QueryComplexityOptions): (context: ValidationContext) => QueryComplexity;
5
+ //# sourceMappingURL=createComplexityRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createComplexityRule.d.ts","sourceRoot":"","sources":["../../../src/packages/graphql-query-complexity/createComplexityRule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAElE,OAAO,eAAe,MAAM,sBAAsB,CAAA;AAElD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,sBAAsB,GAC9B,CAAC,OAAO,EAAE,iBAAiB,KAAK,eAAe,CAIjD"}