@baeta/plugin-graphql 0.0.2 → 0.0.4

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 (46) hide show
  1. package/index.cjs +1283 -0
  2. package/index.d.ts +14 -0
  3. package/index.js +1281 -0
  4. package/package.json +17 -17
  5. package/dist/codegen.d.ts +0 -6
  6. package/dist/codegen.js +0 -116
  7. package/dist/codegen.mjs +0 -89
  8. package/dist/config.d.ts +0 -10
  9. package/dist/config.js +0 -16
  10. package/dist/config.mjs +0 -0
  11. package/dist/index.d.ts +0 -7
  12. package/dist/index.js +0 -41
  13. package/dist/index.mjs +0 -19
  14. package/dist/modules/builder.d.ts +0 -17
  15. package/dist/modules/builder.js +0 -439
  16. package/dist/modules/builder.mjs +0 -429
  17. package/dist/modules/config.d.ts +0 -11
  18. package/dist/modules/config.js +0 -16
  19. package/dist/modules/config.mjs +0 -0
  20. package/dist/modules/index.d.ts +0 -6
  21. package/dist/modules/index.js +0 -148
  22. package/dist/modules/index.mjs +0 -132
  23. package/dist/modules/utils.d.ts +0 -28
  24. package/dist/modules/utils.js +0 -209
  25. package/dist/modules/utils.mjs +0 -168
  26. package/dist/resolvers/config.d.ts +0 -16
  27. package/dist/resolvers/config.js +0 -16
  28. package/dist/resolvers/config.mjs +0 -0
  29. package/dist/resolvers/index.d.ts +0 -10
  30. package/dist/resolvers/index.js +0 -309
  31. package/dist/resolvers/index.mjs +0 -289
  32. package/dist/resolvers/visitor.d.ts +0 -29
  33. package/dist/resolvers/visitor.js +0 -139
  34. package/dist/resolvers/visitor.mjs +0 -111
  35. package/dist/utils/cache.d.ts +0 -3
  36. package/dist/utils/cache.js +0 -40
  37. package/dist/utils/cache.mjs +0 -16
  38. package/dist/utils/hash.d.ts +0 -6
  39. package/dist/utils/hash.js +0 -38
  40. package/dist/utils/hash.mjs +0 -13
  41. package/dist/utils/load.d.ts +0 -9
  42. package/dist/utils/load.js +0 -62
  43. package/dist/utils/load.mjs +0 -40
  44. package/dist/utils/path.d.ts +0 -3
  45. package/dist/utils/path.js +0 -37
  46. package/dist/utils/path.mjs +0 -7
@@ -1,309 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var resolvers_exports = {};
20
- __export(resolvers_exports, {
21
- plugin: () => plugin
22
- });
23
- module.exports = __toCommonJS(resolvers_exports);
24
- var import_visitor_plugin_common = require("@graphql-codegen/visitor-plugin-common");
25
- var import_plugin_helpers = require("@graphql-codegen/plugin-helpers");
26
- var import_visitor = require("./visitor");
27
- const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
28
- const plugin = (schema, documents, config) => {
29
- const imports = [];
30
- if (!config.customResolveInfo) {
31
- imports.push("GraphQLResolveInfo");
32
- }
33
- const showUnusedMappers = typeof config.showUnusedMappers === "boolean" ? config.showUnusedMappers : true;
34
- const noSchemaStitching = typeof config.noSchemaStitching === "boolean" ? config.noSchemaStitching : true;
35
- const indexSignature = config.useIndexSignature ? [
36
- "export type WithIndex<TObject> = TObject & Record<string, any>;",
37
- "export type ResolversObject<TObject> = WithIndex<TObject>;"
38
- ].join("\n") : "";
39
- const importType = config.useTypeImports ? "import type" : "import";
40
- const prepend = [];
41
- const defsToInclude = [];
42
- const directiveResolverMappings = {};
43
- if (config.directiveResolverMappings) {
44
- for (const [directiveName, mapper] of Object.entries(
45
- config.directiveResolverMappings
46
- )) {
47
- const parsedMapper = (0, import_visitor_plugin_common.parseMapper)(mapper);
48
- const capitalizedDirectiveName = capitalize(directiveName);
49
- const resolverFnName = `ResolverFn${capitalizedDirectiveName}`;
50
- const resolverFnUsage2 = `${resolverFnName}<TResult, TParent, TContext, TArgs>`;
51
- const resolverWithResolveUsage2 = `Resolver${capitalizedDirectiveName}WithResolve<TResult, TParent, TContext, TArgs>`;
52
- const resolverWithResolve2 = `
53
- export type Resolver${capitalizedDirectiveName}WithResolve<TResult, TParent, TContext, TArgs> = {
54
- resolve: ${resolverFnName}<TResult, TParent, TContext, TArgs>;
55
- };`;
56
- const resolverTypeName = `Resolver${capitalizedDirectiveName}`;
57
- const resolverType2 = `export type ${resolverTypeName}<TResult, TParent = {}, TContext = {}, TArgs = {}> =`;
58
- if (parsedMapper.isExternal) {
59
- if (parsedMapper.default) {
60
- prepend.push(
61
- `${importType} ${resolverFnName} from '${parsedMapper.source}';`
62
- );
63
- } else {
64
- prepend.push(
65
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== resolverFnName ? `as ${resolverFnName} ` : ""}} from '${parsedMapper.source}';`
66
- );
67
- }
68
- prepend.push(
69
- `export${config.useTypeImports ? " type" : ""} { ${resolverFnName} };`
70
- );
71
- } else {
72
- defsToInclude.push(
73
- `export type ${resolverFnName}<TResult, TParent, TContext, TArgs> = ${parsedMapper.type}`
74
- );
75
- }
76
- if (config.makeResolverTypeCallable) {
77
- defsToInclude.push(`${resolverType2} ${resolverFnUsage2};`);
78
- } else {
79
- defsToInclude.push(resolverWithResolve2);
80
- defsToInclude.push(
81
- `${resolverType2} ${resolverFnUsage2} | ${resolverWithResolveUsage2};`
82
- );
83
- }
84
- directiveResolverMappings[directiveName] = resolverTypeName;
85
- }
86
- }
87
- const transformedSchema = config.federation ? (0, import_plugin_helpers.addFederationReferencesToSchema)(schema) : schema;
88
- const visitor = new import_visitor.TypeScriptResolversVisitor(
89
- { ...config, directiveResolverMappings },
90
- transformedSchema
91
- );
92
- const namespacedImportPrefix = visitor.config.namespacedImportName ? `${visitor.config.namespacedImportName}.` : "";
93
- const astNode = (0, import_plugin_helpers.getCachedDocumentNodeFromSchema)(transformedSchema);
94
- const visitorResult = (0, import_plugin_helpers.oldVisit)(astNode, { leave: visitor });
95
- const optionalSignForInfoArg = visitor.config.optionalInfoArgument ? "?" : "";
96
- const legacyStitchingResolverType = `
97
- export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
98
- fragment: string;
99
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
100
- };`;
101
- const newStitchingResolverType = `
102
- export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
103
- selectionSet: string | ((fieldNode: FieldNode) => SelectionSetNode);
104
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
105
- };`;
106
- const stitchingResolverType = `export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>;`;
107
- const resolverWithResolve = `
108
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
109
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
110
- };`;
111
- const resolverType = `export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =`;
112
- const resolverFnUsage = `ResolverFn<TResult, TParent, TContext, TArgs>`;
113
- const resolverWithResolveUsage = `ResolverWithResolve<TResult, TParent, TContext, TArgs>`;
114
- const stitchingResolverUsage = `StitchingResolver<TResult, TParent, TContext, TArgs>`;
115
- if (visitor.hasFederation()) {
116
- if (visitor.config.wrapFieldDefinitions) {
117
- defsToInclude.push(`export type UnwrappedObject<T> = {
118
- [P in keyof T]: T[P] extends infer R | Promise<infer R> | (() => infer R2 | Promise<infer R2>)
119
- ? R & R2 : T[P]
120
- };`);
121
- }
122
- defsToInclude.push(`export type ReferenceResolver<TResult, TReference, TContext> = (
123
- reference: TReference,
124
- context: TContext,
125
- info${optionalSignForInfoArg}: GraphQLResolveInfo
126
- ) => Promise<TResult> | TResult;`);
127
- defsToInclude.push(`
128
- type ScalarCheck<T, S> = S extends true ? T : NullableCheck<T, S>;
129
- type NullableCheck<T, S> = ${namespacedImportPrefix}Maybe<T> extends T ? ${namespacedImportPrefix}Maybe<ListCheck<NonNullable<T>, S>> : ListCheck<T, S>;
130
- type ListCheck<T, S> = T extends (infer U)[] ? NullableCheck<U, S>[] : GraphQLRecursivePick<T, S>;
131
- export type GraphQLRecursivePick<T, S> = { [K in keyof T & keyof S]: ScalarCheck<T[K], S[K]> };
132
- `);
133
- }
134
- if (!config.makeResolverTypeCallable) {
135
- defsToInclude.push(resolverWithResolve);
136
- }
137
- if (noSchemaStitching) {
138
- const defs = config.makeResolverTypeCallable ? `${resolverType} ${resolverFnUsage};` : `${resolverType} ${resolverFnUsage} | ${resolverWithResolveUsage};`;
139
- defsToInclude.push(defs);
140
- } else {
141
- defsToInclude.push(
142
- [
143
- legacyStitchingResolverType,
144
- newStitchingResolverType,
145
- stitchingResolverType,
146
- resolverType,
147
- ` | ${resolverFnUsage}`,
148
- config.makeResolverTypeCallable ? `` : ` | ${resolverWithResolveUsage}`,
149
- ` | ${stitchingResolverUsage};`
150
- ].join("\n")
151
- );
152
- imports.push("SelectionSetNode", "FieldNode");
153
- }
154
- if (config.customResolverFn) {
155
- const parsedMapper = (0, import_visitor_plugin_common.parseMapper)(config.customResolverFn);
156
- if (parsedMapper.isExternal) {
157
- if (parsedMapper.default) {
158
- prepend.push(`${importType} ResolverFn from '${parsedMapper.source}';`);
159
- } else {
160
- prepend.push(
161
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== "ResolverFn" ? "as ResolverFn " : ""}} from '${parsedMapper.source}';`
162
- );
163
- }
164
- prepend.push(
165
- `export${config.useTypeImports ? " type" : ""} { ResolverFn };`
166
- );
167
- } else {
168
- prepend.push(
169
- `export type ResolverFn<TResult, TParent, TContext, TArgs> = ${parsedMapper.type}`
170
- );
171
- }
172
- } else {
173
- const defaultResolverFn = `
174
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
175
- parent: TParent,
176
- args: TArgs,
177
- context: TContext,
178
- info${optionalSignForInfoArg}: GraphQLResolveInfo
179
- ) => Promise<TResult> | TResult;`;
180
- defsToInclude.push(defaultResolverFn);
181
- }
182
- if (config.customSubscriptionResolver) {
183
- const parsedMapper = (0, import_visitor_plugin_common.parseMapper)(config.customSubscriptionResolver);
184
- if (parsedMapper.isExternal) {
185
- if (parsedMapper.default) {
186
- prepend.push(
187
- `${importType} SubscriptionResolver from '${parsedMapper.source}';`
188
- );
189
- } else {
190
- prepend.push(
191
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== "SubscriptionResolver" ? "as SubscriptionResolver " : ""}} from '${parsedMapper.source}';`
192
- );
193
- }
194
- prepend.push(
195
- `export${config.useTypeImports ? " type" : ""} { SubscriptionResolver };`
196
- );
197
- } else {
198
- prepend.push(
199
- `export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> = ${parsedMapper.type}`
200
- );
201
- }
202
- } else {
203
- const defaultSubscriptionDef = `
204
- export type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (
205
- parent: TParent,
206
- args: TArgs,
207
- context: TContext,
208
- info${optionalSignForInfoArg}: GraphQLResolveInfo
209
- ) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>;
210
-
211
- export type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (
212
- parent: TParent,
213
- args: TArgs,
214
- context: TContext,
215
- info${optionalSignForInfoArg}: GraphQLResolveInfo
216
- ) => TResult | Promise<TResult>;
217
-
218
- export interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {
219
- subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;
220
- resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>;
221
- }
222
-
223
- export interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {
224
- subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>;
225
- resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>;
226
- }
227
-
228
- export type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> =
229
- | SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>
230
- | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>;
231
-
232
- export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =
233
- | ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>)
234
- | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>;
235
- `;
236
- defsToInclude.push(defaultSubscriptionDef);
237
- }
238
- const header = `${indexSignature}
239
-
240
- ${visitor.getResolverTypeWrapperSignature()}
241
-
242
- ${defsToInclude.join("\n")}
243
-
244
- export type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (
245
- parent: TParent,
246
- context: TContext,
247
- info${optionalSignForInfoArg}: GraphQLResolveInfo
248
- ) => ${namespacedImportPrefix}Maybe<TTypes> | Promise<${namespacedImportPrefix}Maybe<TTypes>>;
249
-
250
- export type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info${optionalSignForInfoArg}: GraphQLResolveInfo) => boolean | Promise<boolean>;
251
-
252
- export type NextResolverFn<T> = () => Promise<T>;
253
-
254
- export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (
255
- next: NextResolverFn<TResult>,
256
- parent: TParent,
257
- args: TArgs,
258
- context: TContext,
259
- info${optionalSignForInfoArg}: GraphQLResolveInfo
260
- ) => TResult | Promise<TResult>;
261
- `;
262
- const resolversTypeMapping = visitor.buildResolversTypes();
263
- const resolversParentTypeMapping = visitor.buildResolversParentTypes();
264
- const {
265
- getRootResolver,
266
- getAllDirectiveResolvers,
267
- mappersImports,
268
- unusedMappers,
269
- hasScalars
270
- } = visitor;
271
- if (hasScalars()) {
272
- imports.push("GraphQLScalarType", "GraphQLScalarTypeConfig");
273
- }
274
- if (showUnusedMappers && unusedMappers.length) {
275
- console.warn(`Unused mappers: ${unusedMappers.join(",")}`);
276
- }
277
- if (imports.length) {
278
- prepend.push(`${importType} { ${imports.join(", ")} } from 'graphql';`);
279
- }
280
- if (config.customResolveInfo) {
281
- const parsedMapper = (0, import_visitor_plugin_common.parseMapper)(config.customResolveInfo);
282
- if (parsedMapper.isExternal) {
283
- if (parsedMapper.default) {
284
- prepend.push(`import GraphQLResolveInfo from '${parsedMapper.source}'`);
285
- }
286
- prepend.push(
287
- `import { ${parsedMapper.import} ${parsedMapper.import !== "GraphQLResolveInfo" ? "as GraphQLResolveInfo" : ""} } from '${parsedMapper.source}';`
288
- );
289
- } else {
290
- prepend.push(`type GraphQLResolveInfo = ${parsedMapper.type}`);
291
- }
292
- }
293
- prepend.push(...mappersImports, ...visitor.globalDeclarations);
294
- return {
295
- prepend,
296
- content: [
297
- header,
298
- resolversTypeMapping,
299
- resolversParentTypeMapping,
300
- ...visitorResult.definitions.filter((d) => typeof d === "string"),
301
- getRootResolver(),
302
- getAllDirectiveResolvers()
303
- ].join("\n")
304
- };
305
- };
306
- // Annotate the CommonJS export names for ESM import in node:
307
- 0 && (module.exports = {
308
- plugin
309
- });
@@ -1,289 +0,0 @@
1
- import { parseMapper } from "@graphql-codegen/visitor-plugin-common";
2
- import {
3
- addFederationReferencesToSchema,
4
- getCachedDocumentNodeFromSchema,
5
- oldVisit
6
- } from "@graphql-codegen/plugin-helpers";
7
- import { TypeScriptResolversVisitor } from "./visitor";
8
- const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
9
- const plugin = (schema, documents, config) => {
10
- const imports = [];
11
- if (!config.customResolveInfo) {
12
- imports.push("GraphQLResolveInfo");
13
- }
14
- const showUnusedMappers = typeof config.showUnusedMappers === "boolean" ? config.showUnusedMappers : true;
15
- const noSchemaStitching = typeof config.noSchemaStitching === "boolean" ? config.noSchemaStitching : true;
16
- const indexSignature = config.useIndexSignature ? [
17
- "export type WithIndex<TObject> = TObject & Record<string, any>;",
18
- "export type ResolversObject<TObject> = WithIndex<TObject>;"
19
- ].join("\n") : "";
20
- const importType = config.useTypeImports ? "import type" : "import";
21
- const prepend = [];
22
- const defsToInclude = [];
23
- const directiveResolverMappings = {};
24
- if (config.directiveResolverMappings) {
25
- for (const [directiveName, mapper] of Object.entries(
26
- config.directiveResolverMappings
27
- )) {
28
- const parsedMapper = parseMapper(mapper);
29
- const capitalizedDirectiveName = capitalize(directiveName);
30
- const resolverFnName = `ResolverFn${capitalizedDirectiveName}`;
31
- const resolverFnUsage2 = `${resolverFnName}<TResult, TParent, TContext, TArgs>`;
32
- const resolverWithResolveUsage2 = `Resolver${capitalizedDirectiveName}WithResolve<TResult, TParent, TContext, TArgs>`;
33
- const resolverWithResolve2 = `
34
- export type Resolver${capitalizedDirectiveName}WithResolve<TResult, TParent, TContext, TArgs> = {
35
- resolve: ${resolverFnName}<TResult, TParent, TContext, TArgs>;
36
- };`;
37
- const resolverTypeName = `Resolver${capitalizedDirectiveName}`;
38
- const resolverType2 = `export type ${resolverTypeName}<TResult, TParent = {}, TContext = {}, TArgs = {}> =`;
39
- if (parsedMapper.isExternal) {
40
- if (parsedMapper.default) {
41
- prepend.push(
42
- `${importType} ${resolverFnName} from '${parsedMapper.source}';`
43
- );
44
- } else {
45
- prepend.push(
46
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== resolverFnName ? `as ${resolverFnName} ` : ""}} from '${parsedMapper.source}';`
47
- );
48
- }
49
- prepend.push(
50
- `export${config.useTypeImports ? " type" : ""} { ${resolverFnName} };`
51
- );
52
- } else {
53
- defsToInclude.push(
54
- `export type ${resolverFnName}<TResult, TParent, TContext, TArgs> = ${parsedMapper.type}`
55
- );
56
- }
57
- if (config.makeResolverTypeCallable) {
58
- defsToInclude.push(`${resolverType2} ${resolverFnUsage2};`);
59
- } else {
60
- defsToInclude.push(resolverWithResolve2);
61
- defsToInclude.push(
62
- `${resolverType2} ${resolverFnUsage2} | ${resolverWithResolveUsage2};`
63
- );
64
- }
65
- directiveResolverMappings[directiveName] = resolverTypeName;
66
- }
67
- }
68
- const transformedSchema = config.federation ? addFederationReferencesToSchema(schema) : schema;
69
- const visitor = new TypeScriptResolversVisitor(
70
- { ...config, directiveResolverMappings },
71
- transformedSchema
72
- );
73
- const namespacedImportPrefix = visitor.config.namespacedImportName ? `${visitor.config.namespacedImportName}.` : "";
74
- const astNode = getCachedDocumentNodeFromSchema(transformedSchema);
75
- const visitorResult = oldVisit(astNode, { leave: visitor });
76
- const optionalSignForInfoArg = visitor.config.optionalInfoArgument ? "?" : "";
77
- const legacyStitchingResolverType = `
78
- export type LegacyStitchingResolver<TResult, TParent, TContext, TArgs> = {
79
- fragment: string;
80
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
81
- };`;
82
- const newStitchingResolverType = `
83
- export type NewStitchingResolver<TResult, TParent, TContext, TArgs> = {
84
- selectionSet: string | ((fieldNode: FieldNode) => SelectionSetNode);
85
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
86
- };`;
87
- const stitchingResolverType = `export type StitchingResolver<TResult, TParent, TContext, TArgs> = LegacyStitchingResolver<TResult, TParent, TContext, TArgs> | NewStitchingResolver<TResult, TParent, TContext, TArgs>;`;
88
- const resolverWithResolve = `
89
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
90
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
91
- };`;
92
- const resolverType = `export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =`;
93
- const resolverFnUsage = `ResolverFn<TResult, TParent, TContext, TArgs>`;
94
- const resolverWithResolveUsage = `ResolverWithResolve<TResult, TParent, TContext, TArgs>`;
95
- const stitchingResolverUsage = `StitchingResolver<TResult, TParent, TContext, TArgs>`;
96
- if (visitor.hasFederation()) {
97
- if (visitor.config.wrapFieldDefinitions) {
98
- defsToInclude.push(`export type UnwrappedObject<T> = {
99
- [P in keyof T]: T[P] extends infer R | Promise<infer R> | (() => infer R2 | Promise<infer R2>)
100
- ? R & R2 : T[P]
101
- };`);
102
- }
103
- defsToInclude.push(`export type ReferenceResolver<TResult, TReference, TContext> = (
104
- reference: TReference,
105
- context: TContext,
106
- info${optionalSignForInfoArg}: GraphQLResolveInfo
107
- ) => Promise<TResult> | TResult;`);
108
- defsToInclude.push(`
109
- type ScalarCheck<T, S> = S extends true ? T : NullableCheck<T, S>;
110
- type NullableCheck<T, S> = ${namespacedImportPrefix}Maybe<T> extends T ? ${namespacedImportPrefix}Maybe<ListCheck<NonNullable<T>, S>> : ListCheck<T, S>;
111
- type ListCheck<T, S> = T extends (infer U)[] ? NullableCheck<U, S>[] : GraphQLRecursivePick<T, S>;
112
- export type GraphQLRecursivePick<T, S> = { [K in keyof T & keyof S]: ScalarCheck<T[K], S[K]> };
113
- `);
114
- }
115
- if (!config.makeResolverTypeCallable) {
116
- defsToInclude.push(resolverWithResolve);
117
- }
118
- if (noSchemaStitching) {
119
- const defs = config.makeResolverTypeCallable ? `${resolverType} ${resolverFnUsage};` : `${resolverType} ${resolverFnUsage} | ${resolverWithResolveUsage};`;
120
- defsToInclude.push(defs);
121
- } else {
122
- defsToInclude.push(
123
- [
124
- legacyStitchingResolverType,
125
- newStitchingResolverType,
126
- stitchingResolverType,
127
- resolverType,
128
- ` | ${resolverFnUsage}`,
129
- config.makeResolverTypeCallable ? `` : ` | ${resolverWithResolveUsage}`,
130
- ` | ${stitchingResolverUsage};`
131
- ].join("\n")
132
- );
133
- imports.push("SelectionSetNode", "FieldNode");
134
- }
135
- if (config.customResolverFn) {
136
- const parsedMapper = parseMapper(config.customResolverFn);
137
- if (parsedMapper.isExternal) {
138
- if (parsedMapper.default) {
139
- prepend.push(`${importType} ResolverFn from '${parsedMapper.source}';`);
140
- } else {
141
- prepend.push(
142
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== "ResolverFn" ? "as ResolverFn " : ""}} from '${parsedMapper.source}';`
143
- );
144
- }
145
- prepend.push(
146
- `export${config.useTypeImports ? " type" : ""} { ResolverFn };`
147
- );
148
- } else {
149
- prepend.push(
150
- `export type ResolverFn<TResult, TParent, TContext, TArgs> = ${parsedMapper.type}`
151
- );
152
- }
153
- } else {
154
- const defaultResolverFn = `
155
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
156
- parent: TParent,
157
- args: TArgs,
158
- context: TContext,
159
- info${optionalSignForInfoArg}: GraphQLResolveInfo
160
- ) => Promise<TResult> | TResult;`;
161
- defsToInclude.push(defaultResolverFn);
162
- }
163
- if (config.customSubscriptionResolver) {
164
- const parsedMapper = parseMapper(config.customSubscriptionResolver);
165
- if (parsedMapper.isExternal) {
166
- if (parsedMapper.default) {
167
- prepend.push(
168
- `${importType} SubscriptionResolver from '${parsedMapper.source}';`
169
- );
170
- } else {
171
- prepend.push(
172
- `${importType} { ${parsedMapper.import} ${parsedMapper.import !== "SubscriptionResolver" ? "as SubscriptionResolver " : ""}} from '${parsedMapper.source}';`
173
- );
174
- }
175
- prepend.push(
176
- `export${config.useTypeImports ? " type" : ""} { SubscriptionResolver };`
177
- );
178
- } else {
179
- prepend.push(
180
- `export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> = ${parsedMapper.type}`
181
- );
182
- }
183
- } else {
184
- const defaultSubscriptionDef = `
185
- export type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (
186
- parent: TParent,
187
- args: TArgs,
188
- context: TContext,
189
- info${optionalSignForInfoArg}: GraphQLResolveInfo
190
- ) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>;
191
-
192
- export type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (
193
- parent: TParent,
194
- args: TArgs,
195
- context: TContext,
196
- info${optionalSignForInfoArg}: GraphQLResolveInfo
197
- ) => TResult | Promise<TResult>;
198
-
199
- export interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {
200
- subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;
201
- resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>;
202
- }
203
-
204
- export interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {
205
- subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>;
206
- resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>;
207
- }
208
-
209
- export type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> =
210
- | SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>
211
- | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>;
212
-
213
- export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =
214
- | ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>)
215
- | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>;
216
- `;
217
- defsToInclude.push(defaultSubscriptionDef);
218
- }
219
- const header = `${indexSignature}
220
-
221
- ${visitor.getResolverTypeWrapperSignature()}
222
-
223
- ${defsToInclude.join("\n")}
224
-
225
- export type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (
226
- parent: TParent,
227
- context: TContext,
228
- info${optionalSignForInfoArg}: GraphQLResolveInfo
229
- ) => ${namespacedImportPrefix}Maybe<TTypes> | Promise<${namespacedImportPrefix}Maybe<TTypes>>;
230
-
231
- export type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info${optionalSignForInfoArg}: GraphQLResolveInfo) => boolean | Promise<boolean>;
232
-
233
- export type NextResolverFn<T> = () => Promise<T>;
234
-
235
- export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (
236
- next: NextResolverFn<TResult>,
237
- parent: TParent,
238
- args: TArgs,
239
- context: TContext,
240
- info${optionalSignForInfoArg}: GraphQLResolveInfo
241
- ) => TResult | Promise<TResult>;
242
- `;
243
- const resolversTypeMapping = visitor.buildResolversTypes();
244
- const resolversParentTypeMapping = visitor.buildResolversParentTypes();
245
- const {
246
- getRootResolver,
247
- getAllDirectiveResolvers,
248
- mappersImports,
249
- unusedMappers,
250
- hasScalars
251
- } = visitor;
252
- if (hasScalars()) {
253
- imports.push("GraphQLScalarType", "GraphQLScalarTypeConfig");
254
- }
255
- if (showUnusedMappers && unusedMappers.length) {
256
- console.warn(`Unused mappers: ${unusedMappers.join(",")}`);
257
- }
258
- if (imports.length) {
259
- prepend.push(`${importType} { ${imports.join(", ")} } from 'graphql';`);
260
- }
261
- if (config.customResolveInfo) {
262
- const parsedMapper = parseMapper(config.customResolveInfo);
263
- if (parsedMapper.isExternal) {
264
- if (parsedMapper.default) {
265
- prepend.push(`import GraphQLResolveInfo from '${parsedMapper.source}'`);
266
- }
267
- prepend.push(
268
- `import { ${parsedMapper.import} ${parsedMapper.import !== "GraphQLResolveInfo" ? "as GraphQLResolveInfo" : ""} } from '${parsedMapper.source}';`
269
- );
270
- } else {
271
- prepend.push(`type GraphQLResolveInfo = ${parsedMapper.type}`);
272
- }
273
- }
274
- prepend.push(...mappersImports, ...visitor.globalDeclarations);
275
- return {
276
- prepend,
277
- content: [
278
- header,
279
- resolversTypeMapping,
280
- resolversParentTypeMapping,
281
- ...visitorResult.definitions.filter((d) => typeof d === "string"),
282
- getRootResolver(),
283
- getAllDirectiveResolvers()
284
- ].join("\n")
285
- };
286
- };
287
- export {
288
- plugin
289
- };
@@ -1,29 +0,0 @@
1
- import { TypeScriptResolversPluginConfig } from './config.js';
2
- import { GraphQLSchema, ListTypeNode, FieldDefinitionNode, NamedTypeNode, NonNullTypeNode, EnumTypeDefinitionNode } from 'graphql';
3
- import { ParsedResolversConfig, BaseResolversVisitor, DeclarationKind } from '@graphql-codegen/visitor-plugin-common';
4
-
5
- declare const ENUM_RESOLVERS_SIGNATURE = "export type EnumResolverSignature<T, AllowedValues = any> = { [key in keyof T]?: AllowedValues };";
6
- interface ParsedTypeScriptResolversConfig extends ParsedResolversConfig {
7
- useIndexSignature: boolean;
8
- wrapFieldDefinitions: boolean;
9
- allowParentTypeOverride: boolean;
10
- optionalInfoArgument: boolean;
11
- }
12
- declare class TypeScriptResolversVisitor extends BaseResolversVisitor<TypeScriptResolversPluginConfig, ParsedTypeScriptResolversConfig> {
13
- constructor(pluginConfig: TypeScriptResolversPluginConfig, schema: GraphQLSchema);
14
- protected transformParentGenericType(parentType: string): string;
15
- protected formatRootResolver(schemaTypeName: string, resolverType: string, declarationKind: DeclarationKind): string;
16
- private clearOptional;
17
- ListType(node: ListTypeNode): string;
18
- protected wrapWithListType(str: string): string;
19
- protected getParentTypeForSignature(node: FieldDefinitionNode): "UnwrappedObject<ParentType>" | "ParentType";
20
- NamedType(node: NamedTypeNode): string;
21
- NonNullType(node: NonNullTypeNode): string;
22
- protected getPunctuation(_declarationKind: DeclarationKind): string;
23
- protected buildEnumResolverContentBlock(node: EnumTypeDefinitionNode, mappedEnumType: string): string;
24
- protected buildEnumResolversExplicitMappedValues(node: EnumTypeDefinitionNode, valuesMapping: {
25
- [valueName: string]: string | number;
26
- }): string;
27
- }
28
-
29
- export { ENUM_RESOLVERS_SIGNATURE, ParsedTypeScriptResolversConfig, TypeScriptResolversVisitor };