@vladimirdev635/gql-codegen 0.0.109 → 0.0.111

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 (120) hide show
  1. package/actors/text-diff.d.ts +2 -0
  2. package/actors/text-diff.js +113 -0
  3. package/actors/ts/gql-client/actor.d.ts +8 -2
  4. package/actors/ts/gql-client/actor.js +5 -5
  5. package/actors/ts/gql-client/generators/help-nodes/build-subscription-callback-function.d.ts +4 -0
  6. package/actors/ts/gql-client/generators/help-nodes/build-subscription-callback-function.js +35 -0
  7. package/actors/ts/gql-client/generators/help-nodes/build-sync-callback-function.d.ts +4 -0
  8. package/actors/ts/gql-client/generators/help-nodes/build-sync-callback-function.js +35 -0
  9. package/actors/ts/gql-client/generators/help-nodes/callback-arrow-func.d.ts +3 -0
  10. package/actors/ts/gql-client/generators/help-nodes/callback-arrow-func.js +15 -0
  11. package/actors/ts/gql-client/generators/help-nodes/index.d.ts +9 -0
  12. package/actors/ts/gql-client/generators/help-nodes/index.js +71 -0
  13. package/actors/ts/gql-client/generators/help-nodes/sdk-operations-type-node.d.ts +4 -0
  14. package/actors/ts/gql-client/generators/help-nodes/sdk-operations-type-node.js +17 -0
  15. package/actors/ts/gql-client/generators/help-nodes/sdk-type.d.ts +7 -0
  16. package/actors/ts/gql-client/generators/help-nodes/sdk-type.js +21 -0
  17. package/actors/ts/gql-client/generators/help-nodes/subscription-method-func-alias.d.ts +3 -0
  18. package/actors/ts/gql-client/generators/help-nodes/subscription-method-func-alias.js +14 -0
  19. package/actors/ts/gql-client/generators/help-nodes/sync-method-func-alias.d.ts +3 -0
  20. package/actors/ts/gql-client/generators/help-nodes/sync-method-func-alias.js +13 -0
  21. package/actors/ts/gql-client/generators/main.d.ts +1 -1
  22. package/actors/ts/gql-client/generators/main.js +41 -71
  23. package/actors/ts/gql-client/generators/operation-function-block.d.ts +3 -0
  24. package/actors/ts/gql-client/generators/operation-function-block.js +21 -0
  25. package/actors/ts/gql-client/generators/operation-return-type.d.ts +4 -0
  26. package/actors/ts/gql-client/generators/operation-return-type.js +16 -0
  27. package/actors/ts/gql-client-framework/actor.d.ts +42 -0
  28. package/actors/ts/gql-client-framework/actor.js +11 -0
  29. package/actors/ts/gql-client-framework/generators/help-nodes/index.d.ts +8 -0
  30. package/actors/ts/gql-client-framework/generators/help-nodes/index.js +55 -0
  31. package/actors/ts/gql-client-framework/generators/help-nodes/lazy-hook-builder.d.ts +4 -0
  32. package/actors/ts/gql-client-framework/generators/help-nodes/lazy-hook-builder.js +44 -0
  33. package/actors/ts/gql-client-framework/generators/help-nodes/sdk-operations-type-node.d.ts +4 -0
  34. package/actors/ts/gql-client-framework/generators/help-nodes/sdk-operations-type-node.js +45 -0
  35. package/actors/ts/gql-client-framework/generators/help-nodes/sdk-type.d.ts +7 -0
  36. package/actors/ts/gql-client-framework/generators/help-nodes/sdk-type.js +21 -0
  37. package/actors/ts/gql-client-framework/generators/help-nodes/subscription-hook-builders.d.ts +4 -0
  38. package/actors/ts/gql-client-framework/generators/help-nodes/subscription-hook-builders.js +52 -0
  39. package/actors/ts/gql-client-framework/generators/help-nodes/sync-hook-builders.d.ts +4 -0
  40. package/actors/ts/gql-client-framework/generators/help-nodes/sync-hook-builders.js +52 -0
  41. package/actors/ts/gql-client-framework/generators/main.js +88 -0
  42. package/actors/ts/gql-client-framework/index.d.ts +1 -0
  43. package/actors/ts/gql-client-framework/index.js +1 -0
  44. package/actors/ts/gql-client-react/actor.d.ts +5 -11
  45. package/actors/ts/gql-client-react/actor.js +10 -9
  46. package/actors/ts/gql-client-react/index.d.ts +1 -1
  47. package/actors/ts/gql-client-vue/actor.d.ts +5 -11
  48. package/actors/ts/gql-client-vue/actor.js +27 -9
  49. package/actors/ts/gql-client-vue/index.d.ts +1 -1
  50. package/actors/ts/graphql/actor.d.ts +5 -4
  51. package/actors/ts/graphql/actor.js +6 -6
  52. package/actors/ts/graphql/generators/client/fragments/document.d.ts +5 -0
  53. package/actors/ts/graphql/generators/client/fragments/document.js +10 -0
  54. package/actors/ts/graphql/generators/client/fragments/index.d.ts +4 -0
  55. package/actors/ts/graphql/generators/client/fragments/index.js +24 -0
  56. package/actors/ts/graphql/generators/client/fragments/schema.d.ts +6 -0
  57. package/actors/ts/graphql/generators/client/fragments/schema.js +12 -0
  58. package/actors/ts/graphql/generators/client/fragments/spec/index.d.ts +5 -0
  59. package/actors/ts/graphql/generators/client/fragments/spec/index.js +8 -0
  60. package/actors/ts/graphql/generators/client/fragments/spec/object/field_selection.d.ts +7 -0
  61. package/actors/ts/graphql/generators/client/fragments/spec/object/field_selection.js +27 -0
  62. package/actors/ts/graphql/generators/client/fragments/spec/object/index.d.ts +8 -0
  63. package/actors/ts/graphql/generators/client/fragments/spec/object/index.js +23 -0
  64. package/actors/ts/graphql/generators/client/fragments/spec/object/selection.d.ts +8 -0
  65. package/actors/ts/graphql/generators/client/fragments/spec/object/selection.js +25 -0
  66. package/actors/ts/graphql/generators/client/fragments/spec/object/spread_selection.d.ts +2 -0
  67. package/actors/ts/graphql/generators/client/fragments/spec/object/spread_selection.js +13 -0
  68. package/actors/ts/graphql/generators/client/fragments/spec/object/typename_field.d.ts +5 -0
  69. package/actors/ts/graphql/generators/client/fragments/spec/object/typename_field.js +13 -0
  70. package/actors/ts/graphql/generators/client/{fragments.d.ts → fragments/spec/shared.d.ts} +5 -10
  71. package/actors/ts/graphql/generators/client/fragments/spec/shared.js +59 -0
  72. package/actors/ts/graphql/generators/client/fragments/spec/union/index.d.ts +6 -0
  73. package/actors/ts/graphql/generators/client/fragments/spec/union/index.js +28 -0
  74. package/actors/ts/graphql/generators/client/fragments/spec/union/selections.d.ts +7 -0
  75. package/actors/ts/graphql/generators/client/fragments/spec/union/selections.js +21 -0
  76. package/actors/ts/graphql/generators/client/main.d.ts +3 -3
  77. package/actors/ts/graphql/generators/client/main.js +5 -21
  78. package/actors/ts/graphql/generators/client/operations/index.d.ts +8 -0
  79. package/actors/ts/graphql/generators/client/operations/index.js +33 -0
  80. package/actors/ts/graphql/generators/client/operations/input-schema.d.ts +5 -0
  81. package/actors/ts/graphql/generators/client/operations/input-schema.js +16 -0
  82. package/actors/ts/graphql/generators/client/operations/node.d.ts +6 -0
  83. package/actors/ts/graphql/generators/client/operations/node.js +20 -0
  84. package/actors/ts/graphql/generators/client/operations/output-schema.d.ts +6 -0
  85. package/actors/ts/graphql/generators/client/operations/output-schema.js +8 -0
  86. package/actors/ts/graphql/generators/main.d.ts +2 -2
  87. package/actors/ts/graphql/generators/main.js +1 -1
  88. package/actors/ts/graphql/generators/server/inputs.d.ts +1 -1
  89. package/actors/ts/graphql/generators/server/inputs.js +6 -6
  90. package/actors/ts/graphql/generators/server/main.d.ts +2 -2
  91. package/actors/ts/graphql/generators/server/objects.js +2 -2
  92. package/actors/ts/graphql/generators/server/scalars/additional.d.ts +1 -0
  93. package/actors/ts/graphql/generators/server/scalars/additional.js +2 -1
  94. package/actors/ts/graphql/generators/server/shared.d.ts +3 -2
  95. package/actors/ts/graphql/generators/server/shared.js +10 -1
  96. package/actors/ts/graphql/generators/server/unions.js +2 -2
  97. package/actors/ts/graphql/index.d.ts +1 -1
  98. package/actors/ts/graphql/index.js +1 -1
  99. package/actors/ts/index.d.ts +2 -1
  100. package/actors/ts/index.js +1 -0
  101. package/actors/ts/shared.d.ts +5 -0
  102. package/actors/ts/utils.d.ts +2 -4
  103. package/actors/ts/utils.js +4 -3
  104. package/actors/utils.d.ts +3 -0
  105. package/actors/utils.js +22 -0
  106. package/config.d.ts +6 -1
  107. package/config.js +18 -1
  108. package/index.d.ts +1 -1
  109. package/index.js +1 -0
  110. package/main.d.ts +2 -2
  111. package/main.js +2 -2
  112. package/package.json +5 -1
  113. package/schema/client/operation.d.ts +3 -0
  114. package/actors/ts/gql-client-react/generators/main.d.ts +0 -4
  115. package/actors/ts/gql-client-react/generators/main.js +0 -121
  116. package/actors/ts/gql-client-vue/generators/main.js +0 -135
  117. package/actors/ts/graphql/generators/client/fragments.js +0 -195
  118. package/actors/ts/graphql/generators/client/operations.d.ts +0 -7
  119. package/actors/ts/graphql/generators/client/operations.js +0 -68
  120. /package/actors/ts/{gql-client-vue → gql-client-framework}/generators/main.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ import { Change } from 'diff';
2
+ export declare function printChanges(changes: Change[]): void;
@@ -0,0 +1,113 @@
1
+ import pc from 'picocolors';
2
+ var LineType;
3
+ (function (LineType) {
4
+ LineType[LineType["Added"] = 0] = "Added";
5
+ LineType[LineType["Removed"] = 1] = "Removed";
6
+ LineType[LineType["Unchanged"] = 2] = "Unchanged";
7
+ })(LineType || (LineType = {}));
8
+ function buildLineNumbersString(newLineNumber, oldLineNumber, lineType) {
9
+ switch (lineType) {
10
+ case LineType.Added: {
11
+ const newStr = String(newLineNumber);
12
+ const oldStr = ' '.repeat(newStr.length);
13
+ return pc.green('+ ' + oldStr + ' ' + newStr);
14
+ }
15
+ case LineType.Removed: {
16
+ const oldStr = String(oldLineNumber);
17
+ const newStr = ' '.repeat(oldStr.length);
18
+ return pc.red('- ' + oldStr + ' ' + newStr);
19
+ }
20
+ case LineType.Unchanged: {
21
+ const oldStr = String(oldLineNumber);
22
+ const newStr = String(newLineNumber);
23
+ return pc.dim(' ' + oldStr + ' ' + newStr);
24
+ }
25
+ }
26
+ }
27
+ function getColorFunc(lineType) {
28
+ switch (lineType) {
29
+ case LineType.Added:
30
+ return pc.green;
31
+ case LineType.Removed:
32
+ return pc.red;
33
+ case LineType.Unchanged:
34
+ return pc.white;
35
+ }
36
+ }
37
+ function formatPrefix(newLineNumber, oldLineNumber, lineType) {
38
+ const colorFunc = getColorFunc(lineType);
39
+ return (buildLineNumbersString(newLineNumber, oldLineNumber, lineType) +
40
+ ' ' +
41
+ colorFunc('|'));
42
+ }
43
+ function formatLine(newLineNumber, oldLineNumber, lineType, line) {
44
+ const colorFunc = getColorFunc(lineType);
45
+ return (formatPrefix(newLineNumber, oldLineNumber, lineType) +
46
+ colorFunc(' ' + line));
47
+ }
48
+ function buildSeparatorLine(newLineNumber, oldLineNumber) {
49
+ return pc
50
+ .blue('-')
51
+ .repeat(2 +
52
+ String(newLineNumber).length +
53
+ 1 +
54
+ String(oldLineNumber).length +
55
+ 2);
56
+ }
57
+ const n = 10;
58
+ function printLine(state, part, line) {
59
+ if (part.added) {
60
+ if (state.beforeBufferList.length !== 0) {
61
+ process.stdout.write(buildSeparatorLine(state.newLineNumber, state.oldLineNumber) +
62
+ '\n');
63
+ process.stdout.write(state.beforeBufferList.join('\n') + '\n');
64
+ state.beforeBufferList = [];
65
+ }
66
+ state.nextN = n;
67
+ process.stdout.write(formatLine(state.newLineNumber, state.oldLineNumber, LineType.Added, line) + '\n');
68
+ state.newLineNumber++;
69
+ }
70
+ else if (part.removed) {
71
+ if (state.beforeBufferList.length !== 0) {
72
+ process.stdout.write(buildSeparatorLine(state.newLineNumber, state.oldLineNumber) +
73
+ '\n');
74
+ process.stdout.write(state.beforeBufferList.join('\n') + '\n');
75
+ state.beforeBufferList = [];
76
+ }
77
+ state.nextN = n;
78
+ process.stdout.write(formatLine(state.newLineNumber, state.oldLineNumber, LineType.Removed, line) + '\n');
79
+ state.oldLineNumber++;
80
+ }
81
+ else {
82
+ const formattedLine = formatLine(state.newLineNumber, state.oldLineNumber, LineType.Unchanged, line);
83
+ if (state.nextN !== 0) {
84
+ process.stdout.write(formattedLine + '\n');
85
+ state.nextN -= 1;
86
+ }
87
+ else {
88
+ if (state.beforeBufferList.length < n) {
89
+ state.beforeBufferList.push(formattedLine);
90
+ }
91
+ else {
92
+ state.beforeBufferList.shift();
93
+ state.beforeBufferList.push(formattedLine);
94
+ }
95
+ }
96
+ state.oldLineNumber++;
97
+ state.newLineNumber++;
98
+ }
99
+ }
100
+ export function printChanges(changes) {
101
+ let state = {
102
+ oldLineNumber: 1,
103
+ newLineNumber: 1,
104
+ beforeBufferList: [],
105
+ nextN: 0,
106
+ };
107
+ for (const part of changes) {
108
+ const lines = part.value.replace(/\n$/, '').split('\n');
109
+ for (const line of lines) {
110
+ printLine(state, part, line);
111
+ }
112
+ }
113
+ }
@@ -1,7 +1,8 @@
1
+ import { Actor, ActorContext } from '../../../config.js';
2
+ import { OperationType } from '../../../schema/client/operation.js';
1
3
  import { PathOrFileDescriptor } from 'fs';
2
4
  import ts from 'typescript';
3
- import { Actor, ActorContext } from '../../../config.js';
4
- import { TSActorConfig } from '../shared.js';
5
+ import { ClientTypeNameBuilders, TSActorConfig } from '../shared.js';
5
6
  export type OperationReturnType = 'ExecuteResult' | 'ExecuteResult.result';
6
7
  export interface SDKConfig {
7
8
  defaultOperationReturnType: OperationReturnType;
@@ -9,6 +10,11 @@ export interface SDKConfig {
9
10
  queriesKey: string;
10
11
  mutationsKey: string;
11
12
  subscriptionsKey: string;
13
+ gqlSyncMethodFuncTypeName: string;
14
+ gqlSubscriptionMethodFuncTypeName: string;
15
+ operationRequestsTypeNameBuilder: (type: OperationType) => string;
16
+ typeName: string;
17
+ clientTypeNameBuilders: ClientTypeNameBuilders;
12
18
  }
13
19
  export interface Config extends TSActorConfig {
14
20
  outPath: PathOrFileDescriptor;
@@ -1,11 +1,11 @@
1
- import { writeFileSync } from 'fs';
2
- import { renderNodes } from '../shared.js';
1
+ import { executeRunAction } from '../../utils.js';
2
+ import { renderNodes, } from '../shared.js';
3
3
  import { generateNodes } from './generators/main.js';
4
- async function actor(config, context) {
4
+ async function actor(config, context, action) {
5
5
  const nodes = generateNodes(config, context);
6
6
  const code = await renderNodes(config, nodes);
7
- writeFileSync(config.outPath, code);
7
+ executeRunAction(config.outPath, action, code);
8
8
  }
9
9
  export function build(config) {
10
- return (context) => actor(config, context);
10
+ return (context, action) => actor(config, context, action);
11
11
  }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config, OperationReturnType } from '../../actor.js';
3
+ export declare function createBuildSubscriptionCallbackFunctionName(returnType: OperationReturnType): string;
4
+ export declare function generateBuildSubscriptionCallbackFunction(config: Config, returnType: OperationReturnType): ts.Node;
@@ -0,0 +1,35 @@
1
+ /* oxlint-disable max-lines */
2
+ import ts from 'typescript';
3
+ import { generateCallbackArrowFunction } from './callback-arrow-func.js';
4
+ export function createBuildSubscriptionCallbackFunctionName(returnType) {
5
+ switch (returnType) {
6
+ case 'ExecuteResult':
7
+ return 'buildSubscriptionExecuteResultCallback';
8
+ case 'ExecuteResult.result':
9
+ return 'buildSubscriptionResultCallback';
10
+ }
11
+ }
12
+ export function generateBuildSubscriptionCallbackFunction(config, returnType) {
13
+ return ts.factory.createFunctionDeclaration(undefined, undefined, ts.factory.createIdentifier(createBuildSubscriptionCallbackFunctionName(returnType)), [
14
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TExecutor'), ts.factory.createTypeReferenceNode('types.IExecutor', [
15
+ ts.factory.createTypeReferenceNode('TRequestContext'),
16
+ ]), undefined),
17
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('types.RequestContext'), undefined), undefined),
18
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('V'), undefined, undefined),
19
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('R'), undefined, undefined),
20
+ ], [
21
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('executor'), undefined, ts.factory.createTypeReferenceNode('TExecutor'), undefined),
22
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('operation'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('types.SubscriptionOperation'), [
23
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined),
24
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('R'), undefined),
25
+ ]), undefined),
26
+ ], ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(config.sdk.gqlSubscriptionMethodFuncTypeName), [
27
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('TRequestContext'), undefined),
28
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined),
29
+ returnType === 'ExecuteResult.result'
30
+ ? ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('R'))
31
+ : ts.factory.createTypeReferenceNode('types.ExecuteResult', [ts.factory.createTypeReferenceNode('R')]),
32
+ ]), ts.factory.createBlock([
33
+ ts.factory.createReturnStatement(generateCallbackArrowFunction(config, 'V', 'R', true, returnType)),
34
+ ], true));
35
+ }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config, OperationReturnType } from '../../actor.js';
3
+ export declare function createBuildSyncCallbackFunctionName(returnType: OperationReturnType): string;
4
+ export declare function generateBuildSyncCallbackFunction(config: Config, returnType: OperationReturnType): ts.Node;
@@ -0,0 +1,35 @@
1
+ /* oxlint-disable max-lines */
2
+ import ts from 'typescript';
3
+ import { generateCallbackArrowFunction } from './callback-arrow-func.js';
4
+ export function createBuildSyncCallbackFunctionName(returnType) {
5
+ switch (returnType) {
6
+ case 'ExecuteResult':
7
+ return 'buildSyncExecuteResultCallback';
8
+ case 'ExecuteResult.result':
9
+ return 'buildSyncResultCallback';
10
+ }
11
+ }
12
+ export function generateBuildSyncCallbackFunction(config, returnType) {
13
+ return ts.factory.createFunctionDeclaration(undefined, undefined, ts.factory.createIdentifier(createBuildSyncCallbackFunctionName(returnType)), [
14
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TExecutor'), ts.factory.createTypeReferenceNode('types.IExecutor', [
15
+ ts.factory.createTypeReferenceNode('TRequestContext'),
16
+ ]), undefined),
17
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('types.RequestContext'), undefined), undefined),
18
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('V'), undefined, undefined),
19
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('R'), undefined, undefined),
20
+ ], [
21
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('executor'), undefined, ts.factory.createTypeReferenceNode('TExecutor'), undefined),
22
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('operation'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('types.SyncOperation'), [
23
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined),
24
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('R'), undefined),
25
+ ]), undefined),
26
+ ], ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(config.sdk.gqlSyncMethodFuncTypeName), [
27
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('TRequestContext'), undefined),
28
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined),
29
+ returnType === 'ExecuteResult.result'
30
+ ? ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('R'))
31
+ : ts.factory.createTypeReferenceNode('types.ExecuteResult', [ts.factory.createTypeReferenceNode('R')]),
32
+ ]), ts.factory.createBlock([
33
+ ts.factory.createReturnStatement(generateCallbackArrowFunction(config, 'V', 'R', false, returnType)),
34
+ ], true));
35
+ }
@@ -0,0 +1,3 @@
1
+ import ts from 'typescript';
2
+ import { Config, OperationReturnType } from '../../actor.js';
3
+ export declare function generateCallbackArrowFunction(config: Config, variablesTypeName: string, resultTypeName: string, isSubscription: boolean, returnType: OperationReturnType): ts.ArrowFunction;
@@ -0,0 +1,15 @@
1
+ import ts from 'typescript';
2
+ import { generateFunctionBlock } from '../operation-function-block.js';
3
+ import { createReturnTypeNode } from '../operation-return-type.js';
4
+ export function generateCallbackArrowFunction(config, variablesTypeName, resultTypeName, isSubscription, returnType) {
5
+ const funcArgs = [
6
+ ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, ts.factory.createTypeReferenceNode(variablesTypeName)),
7
+ ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, ts.factory.createTypeReferenceNode('TRequestContext')),
8
+ ];
9
+ if (isSubscription) {
10
+ funcArgs.push(ts.factory.createParameterDeclaration(undefined, undefined, 'controller', undefined, ts.factory.createTypeReferenceNode('AbortController')));
11
+ }
12
+ return ts.factory.createArrowFunction(ts.factory.createModifiersFromModifierFlags(ts.ModifierFlags.Async), undefined, funcArgs, ts.factory.createTypeReferenceNode('Promise', [
13
+ createReturnTypeNode(resultTypeName, returnType, isSubscription),
14
+ ]), ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), generateFunctionBlock(isSubscription, returnType));
15
+ }
@@ -0,0 +1,9 @@
1
+ import { ActorContext } from '../../../../../config.js';
2
+ import { Config, OperationReturnType } from '../../actor.js';
3
+ import ts from 'typescript';
4
+ export declare function hasReturnType(config: Config, returnType: OperationReturnType): boolean;
5
+ export declare function generateHelpNodes(config: Config, context: ActorContext, state: {
6
+ hasQueries: boolean;
7
+ hasMutations: boolean;
8
+ hasSubscriptions: boolean;
9
+ }): ts.Node[];
@@ -0,0 +1,71 @@
1
+ import { generateSdkTypeNode } from './sdk-operations-type-node.js';
2
+ import { generateSdkType } from './sdk-type.js';
3
+ import { generateBuildSyncCallbackFunction } from './build-sync-callback-function.js';
4
+ import { generateBuildSubscriptionCallbackFunction } from './build-subscription-callback-function.js';
5
+ import { generateSyncMethodFuncAlias } from './sync-method-func-alias.js';
6
+ import { generateSubscriptionMethodFuncAlias } from './subscription-method-func-alias.js';
7
+ function generateSdkTypeNodes(config, context, state) {
8
+ return [
9
+ ...(state.hasQueries
10
+ ? [
11
+ generateSdkTypeNode(config, 'QUERY', context.schema.client.operations),
12
+ ]
13
+ : []),
14
+ ...(state.hasMutations
15
+ ? [
16
+ generateSdkTypeNode(config, 'MUTATION', context.schema.client.operations),
17
+ ]
18
+ : []),
19
+ ...(state.hasSubscriptions
20
+ ? [
21
+ generateSdkTypeNode(config, 'SUBSCRIPTION', context.schema.client.operations),
22
+ ]
23
+ : []),
24
+ ];
25
+ }
26
+ export function hasReturnType(config, returnType) {
27
+ return (config.sdk.defaultOperationReturnType == returnType ||
28
+ Object.values(config.sdk.operationReturnTypeMapping).includes(returnType));
29
+ }
30
+ export function generateHelpNodes(config, context, state) {
31
+ const hasExecuteResultType = hasReturnType(config, 'ExecuteResult');
32
+ const hasResultType = hasReturnType(config, 'ExecuteResult.result');
33
+ return [
34
+ ...(state.hasQueries || state.hasMutations
35
+ ? [generateSyncMethodFuncAlias(config)]
36
+ : []),
37
+ ...(state.hasSubscriptions
38
+ ? [generateSubscriptionMethodFuncAlias(config)]
39
+ : []),
40
+ ...generateSdkTypeNodes(config, context, state),
41
+ generateSdkType(config, state),
42
+ ...(state.hasQueries || state.hasMutations
43
+ ? [
44
+ ...(hasExecuteResultType
45
+ ? [
46
+ generateBuildSyncCallbackFunction(config, 'ExecuteResult'),
47
+ ]
48
+ : []),
49
+ ...(hasResultType
50
+ ? [
51
+ generateBuildSyncCallbackFunction(config, 'ExecuteResult.result'),
52
+ ]
53
+ : []),
54
+ ]
55
+ : []),
56
+ ...(state.hasSubscriptions
57
+ ? [
58
+ ...(hasExecuteResultType
59
+ ? [
60
+ generateBuildSubscriptionCallbackFunction(config, 'ExecuteResult'),
61
+ ]
62
+ : []),
63
+ ...(hasResultType
64
+ ? [
65
+ generateBuildSubscriptionCallbackFunction(config, 'ExecuteResult.result'),
66
+ ]
67
+ : []),
68
+ ]
69
+ : []),
70
+ ];
71
+ }
@@ -0,0 +1,4 @@
1
+ import { Operation, OperationType } from '../../../../../schema/client/operation.js';
2
+ import ts from 'typescript';
3
+ import { Config } from '../../actor.js';
4
+ export declare function generateSdkTypeNode(config: Config, type: OperationType, operations: Record<string, Operation>): ts.InterfaceDeclaration;
@@ -0,0 +1,17 @@
1
+ import ts from 'typescript';
2
+ function generateOperationPropertySignature(config, type, operation) {
3
+ return ts.factory.createPropertySignature(undefined, ts.factory.createIdentifier(operation.name), undefined, ts.factory.createTypeReferenceNode(type !== 'SUBSCRIPTION'
4
+ ? config.sdk.gqlSyncMethodFuncTypeName
5
+ : config.sdk.gqlSubscriptionMethodFuncTypeName, [
6
+ ts.factory.createTypeReferenceNode('TRequestContext'),
7
+ ts.factory.createTypeReferenceNode(operation.name + 'Variables'),
8
+ ts.factory.createTypeReferenceNode(operation.name + 'Result', undefined),
9
+ ]));
10
+ }
11
+ export function generateSdkTypeNode(config, type, operations) {
12
+ return ts.factory.createInterfaceDeclaration([ts.factory.createToken(ts.SyntaxKind.ExportKeyword)], ts.factory.createIdentifier(config.sdk.operationRequestsTypeNameBuilder(type)), [
13
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), undefined, undefined),
14
+ ], undefined, Object.values(operations)
15
+ .filter((op) => op.type == type)
16
+ .map((op) => generateOperationPropertySignature(config, type, op)));
17
+ }
@@ -0,0 +1,7 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateSdkType(config: Config, state: {
4
+ hasQueries: boolean;
5
+ hasMutations: boolean;
6
+ hasSubscriptions: boolean;
7
+ }): ts.InterfaceDeclaration;
@@ -0,0 +1,21 @@
1
+ import ts from 'typescript';
2
+ function generateSdkPropertySignature(key, typeName) {
3
+ return ts.factory.createPropertySignature(undefined, ts.factory.createIdentifier(key), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(typeName), [
4
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('TRequestContext'), undefined),
5
+ ]));
6
+ }
7
+ export function generateSdkType(config, state) {
8
+ const properties = [];
9
+ if (state.hasQueries) {
10
+ properties.push(generateSdkPropertySignature(config.sdk.queriesKey, config.sdk.operationRequestsTypeNameBuilder('QUERY')));
11
+ }
12
+ if (state.hasMutations) {
13
+ properties.push(generateSdkPropertySignature(config.sdk.mutationsKey, config.sdk.operationRequestsTypeNameBuilder('MUTATION')));
14
+ }
15
+ if (state.hasSubscriptions) {
16
+ properties.push(generateSdkPropertySignature(config.sdk.subscriptionsKey, config.sdk.operationRequestsTypeNameBuilder('SUBSCRIPTION')));
17
+ }
18
+ return ts.factory.createInterfaceDeclaration([ts.factory.createToken(ts.SyntaxKind.ExportKeyword)], ts.factory.createIdentifier(config.sdk.typeName), [
19
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), undefined, undefined),
20
+ ], undefined, properties);
21
+ }
@@ -0,0 +1,3 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateSubscriptionMethodFuncAlias(config: Config): ts.TypeAliasDeclaration;
@@ -0,0 +1,14 @@
1
+ import ts from 'typescript';
2
+ export function generateSubscriptionMethodFuncAlias(config) {
3
+ return ts.factory.createTypeAliasDeclaration(undefined, ts.factory.createIdentifier(config.sdk.gqlSubscriptionMethodFuncTypeName), [
4
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), undefined, undefined),
5
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('V'), undefined, undefined),
6
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('R'), undefined, undefined),
7
+ ], ts.factory.createFunctionTypeNode(undefined, [
8
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('variables'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined), undefined),
9
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('context'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('TRequestContext'), undefined), undefined),
10
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('controller'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('AbortController'), undefined), undefined),
11
+ ], ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('Promise'), [
12
+ ts.factory.createTypeReferenceNode('types.SubOpAsyncIterable', [ts.factory.createTypeReferenceNode('R')]),
13
+ ])));
14
+ }
@@ -0,0 +1,3 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateSyncMethodFuncAlias(config: Config): ts.TypeAliasDeclaration;
@@ -0,0 +1,13 @@
1
+ import ts from 'typescript';
2
+ export function generateSyncMethodFuncAlias(config) {
3
+ return ts.factory.createTypeAliasDeclaration(undefined, ts.factory.createIdentifier(config.sdk.gqlSyncMethodFuncTypeName), [
4
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), undefined, undefined),
5
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('V'), undefined, undefined),
6
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('R'), undefined, undefined),
7
+ ], ts.factory.createFunctionTypeNode(undefined, [
8
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('variables'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('V'), undefined), undefined),
9
+ ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('context'), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('TRequestContext'), undefined), undefined),
10
+ ], ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('Promise'), [
11
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('R'), undefined),
12
+ ])));
13
+ }
@@ -1,4 +1,4 @@
1
1
  import { ActorContext } from '../../../../config.js';
2
- import { Config } from '../actor.js';
3
2
  import ts from 'typescript';
3
+ import { Config } from '../actor.js';
4
4
  export declare function generateNodes(config: Config, context: ActorContext): ts.Node[];
@@ -1,65 +1,31 @@
1
1
  import ts from 'typescript';
2
- function generateFunctionBlock(operationName, operationType, returnType) {
3
- const callArgs = [
4
- ts.factory.createIdentifier(operationName),
5
- ts.factory.createIdentifier('variables'),
6
- ts.factory.createIdentifier('requestContext'),
7
- ];
8
- if (operationType === 'SUBSCRIPTION') {
9
- callArgs.push(ts.factory.createIdentifier('controller'));
10
- }
11
- const awaitExpression = ts.factory.createAwaitExpression(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('executor'), operationType === 'SUBSCRIPTION'
12
- ? 'executeSubscription'
13
- : 'executeSync'), undefined, callArgs));
14
- if (returnType === 'ExecuteResult') {
15
- return ts.factory.createBlock([ts.factory.createReturnStatement(awaitExpression)], true);
16
- }
17
- return ts.factory.createBlock([
18
- ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
19
- ts.factory.createVariableDeclaration('executorResult', undefined, undefined, awaitExpression),
20
- ], ts.NodeFlags.Const)),
21
- ts.factory.createReturnStatement(ts.factory.createPropertyAccessChain(ts.factory.createIdentifier('executorResult'), undefined, 'result')),
22
- ], true);
23
- }
24
- function createReturnTypeNode(resultName, returnType, operationType) {
25
- const rOpType = ts.factory.createTypeReferenceNode(resultName);
26
- const rType = operationType === 'SUBSCRIPTION'
27
- ? ts.factory.createTypeReferenceNode('SubOpAsyncIterable', [
28
- rOpType,
29
- ])
30
- : rOpType;
31
- if (returnType === 'ExecuteResult.result')
32
- return rType;
33
- return ts.factory.createTypeReferenceNode('ExecuteResult', [rType]);
34
- }
35
- function getReturnTypeFromConfig(config, operationName) {
36
- return (config.sdk.operationReturnTypeMapping[operationName] ||
37
- config.sdk.defaultOperationReturnType);
38
- }
2
+ import { createBuildSubscriptionCallbackFunctionName } from './help-nodes/build-subscription-callback-function.js';
3
+ import { createBuildSyncCallbackFunctionName } from './help-nodes/build-sync-callback-function.js';
4
+ import { generateHelpNodes } from './help-nodes/index.js';
5
+ import { getReturnTypeFromConfig } from './operation-return-type.js';
39
6
  export function generateNodes(config, context) {
40
7
  const graphqlImports = [];
41
- let shouldIncludeExecuteResultType = false;
42
8
  const queryNodes = [];
43
9
  const mutationNodes = [];
44
10
  const subscriptionNodes = [];
45
11
  for (const operation of Object.values(context.schema.client.operations)) {
46
- const operationName = operation.name + 'Operation';
47
- const variablesName = operation.name + 'Variables';
48
- const resultName = operation.name + 'Result';
49
- graphqlImports.push(operationName, variablesName, resultName);
50
- const returnType = getReturnTypeFromConfig(config, operation.name);
51
- if (returnType === 'ExecuteResult')
52
- shouldIncludeExecuteResultType = true;
53
- const funcArgs = [
54
- ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, ts.factory.createTypeReferenceNode(variablesName)),
55
- ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, ts.factory.createTypeReferenceNode('TRequestContext')),
56
- ];
57
- if (operation.type === 'SUBSCRIPTION') {
58
- funcArgs.push(ts.factory.createParameterDeclaration(undefined, undefined, 'controller', undefined, ts.factory.createTypeReferenceNode('AbortController')));
59
- }
60
- const propAssignment = ts.factory.createPropertyAssignment(operation.name, ts.factory.createArrowFunction(ts.factory.createModifiersFromModifierFlags(ts.ModifierFlags.Async), undefined, funcArgs, ts.factory.createTypeReferenceNode('Promise', [
61
- createReturnTypeNode(resultName, returnType, operation.type),
62
- ]), ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), generateFunctionBlock(operationName, operation.type, returnType)));
12
+ const operationName = config.sdk.clientTypeNameBuilders.operationTypeName(operation.name);
13
+ const variablesName = config.sdk.clientTypeNameBuilders.variablesTypeName(operation.name);
14
+ const resultName = config.sdk.clientTypeNameBuilders.resultTypeName(operation.name);
15
+ graphqlImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier(operationName)), ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier(variablesName)), ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier(resultName)));
16
+ const operationReturnType = getReturnTypeFromConfig(config, operation.name);
17
+ const functionName = operation.type === 'SUBSCRIPTION'
18
+ ? createBuildSubscriptionCallbackFunctionName(operationReturnType)
19
+ : createBuildSyncCallbackFunctionName(operationReturnType);
20
+ const propAssignment = ts.factory.createPropertyAssignment(operation.name, ts.factory.createCallExpression(ts.factory.createIdentifier(functionName), [
21
+ ts.factory.createTypeReferenceNode('TExecutor', undefined),
22
+ ts.factory.createTypeReferenceNode('TRequestContext', undefined),
23
+ ts.factory.createTypeReferenceNode(variablesName, undefined),
24
+ ts.factory.createTypeReferenceNode(resultName, undefined),
25
+ ], [
26
+ ts.factory.createIdentifier('executor'),
27
+ ts.factory.createIdentifier(operationName),
28
+ ]));
63
29
  switch (operation.type) {
64
30
  case 'QUERY': {
65
31
  queryNodes.push(propAssignment);
@@ -76,36 +42,40 @@ export function generateNodes(config, context) {
76
42
  }
77
43
  }
78
44
  const gqlClientImports = [
79
- ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('IExecutor')),
80
- ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('RequestContext')),
45
+ ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('types')),
81
46
  ];
82
- if (shouldIncludeExecuteResultType) {
83
- gqlClientImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('ExecuteResult')));
84
- }
85
47
  const returnObjectNodes = [];
86
- if (queryNodes.length !== 0) {
48
+ const state = {
49
+ hasQueries: queryNodes.length !== 0,
50
+ hasMutations: mutationNodes.length !== 0,
51
+ hasSubscriptions: subscriptionNodes.length !== 0,
52
+ };
53
+ if (state.hasQueries) {
87
54
  returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.queriesKey, ts.factory.createObjectLiteralExpression(queryNodes, true)));
88
55
  }
89
- if (mutationNodes.length !== 0) {
56
+ if (state.hasMutations) {
90
57
  returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.mutationsKey, ts.factory.createObjectLiteralExpression(mutationNodes, true)));
91
58
  }
92
- if (subscriptionNodes.length !== 0) {
93
- gqlClientImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('SubOpAsyncIterable')));
59
+ if (state.hasSubscriptions) {
94
60
  returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.subscriptionsKey, ts.factory.createObjectLiteralExpression(subscriptionNodes, true)));
95
61
  }
96
62
  return [
97
- ts.factory.createIdentifier('// @ts-nocheck'),
98
63
  ...config.importDeclarations,
99
- ts.factory.createImportDeclaration([], ts.factory.createImportClause(true, undefined, ts.factory.createNamedImports(gqlClientImports)), ts.factory.createStringLiteral('@vladimirdev635/gql-client/types')),
100
- ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports(graphqlImports.map((i) => ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier(i))))), ts.factory.createStringLiteral(config.graphqlModulePath)),
64
+ ts.factory.createImportDeclaration([], ts.factory.createImportClause(true, undefined, ts.factory.createNamedImports(gqlClientImports)), ts.factory.createStringLiteral('@vladimirdev635/gql-client')),
65
+ ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(undefined, undefined, ts.factory.createNamedImports(graphqlImports)), ts.factory.createStringLiteral(config.graphqlModulePath)),
66
+ ts.factory.createIdentifier('\n'),
67
+ ...generateHelpNodes(config, context, state),
101
68
  ts.factory.createIdentifier('\n'),
102
69
  ts.factory.createFunctionDeclaration(ts.factory.createModifiersFromModifierFlags(ts.ModifierFlags.Export), undefined, 'createSdk', [
103
- ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('RequestContext')),
104
- ], [
105
- ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('IExecutor', [
70
+ ts.factory.createTypeParameterDeclaration(undefined, 'TExecutor', ts.factory.createTypeReferenceNode('types.IExecutor', [
106
71
  ts.factory.createTypeReferenceNode('TRequestContext'),
107
72
  ])),
108
- ], undefined, ts.factory.createBlock([
73
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
74
+ ], [
75
+ ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('TExecutor')),
76
+ ], ts.factory.createTypeReferenceNode('SdkType', [
77
+ ts.factory.createTypeReferenceNode('TRequestContext'),
78
+ ]), ts.factory.createBlock([
109
79
  ts.factory.createReturnStatement(ts.factory.createAsExpression(ts.factory.createObjectLiteralExpression(returnObjectNodes, true), ts.factory.createTypeReferenceNode('const'))),
110
80
  ], true)),
111
81
  ];
@@ -0,0 +1,3 @@
1
+ import { OperationReturnType } from '../actor.js';
2
+ import ts from 'typescript';
3
+ export declare function generateFunctionBlock(isSubscription: boolean, returnType: OperationReturnType): ts.Block;
@@ -0,0 +1,21 @@
1
+ import ts from 'typescript';
2
+ export function generateFunctionBlock(isSubscription, returnType) {
3
+ const callArgs = [
4
+ ts.factory.createIdentifier('operation'),
5
+ ts.factory.createIdentifier('variables'),
6
+ ts.factory.createIdentifier('requestContext'),
7
+ ];
8
+ if (isSubscription) {
9
+ callArgs.push(ts.factory.createIdentifier('controller'));
10
+ }
11
+ const awaitExpression = ts.factory.createAwaitExpression(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('executor'), isSubscription ? 'executeSubscription' : 'executeSync'), undefined, callArgs));
12
+ if (returnType === 'ExecuteResult') {
13
+ return ts.factory.createBlock([ts.factory.createReturnStatement(awaitExpression)], true);
14
+ }
15
+ return ts.factory.createBlock([
16
+ ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
17
+ ts.factory.createVariableDeclaration('executorResult', undefined, undefined, awaitExpression),
18
+ ], ts.NodeFlags.Const)),
19
+ ts.factory.createReturnStatement(ts.factory.createPropertyAccessChain(ts.factory.createIdentifier('executorResult'), undefined, 'result')),
20
+ ], true);
21
+ }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config, OperationReturnType } from '../actor.js';
3
+ export declare function createReturnTypeNode(resultName: string, returnType: OperationReturnType, isSubscription: boolean): ts.TypeReferenceNode;
4
+ export declare function getReturnTypeFromConfig(config: Config, operationName: string): OperationReturnType;