@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,16 @@
1
+ import ts from 'typescript';
2
+ export function createReturnTypeNode(resultName, returnType, isSubscription) {
3
+ const rOpType = ts.factory.createTypeReferenceNode(resultName);
4
+ const rType = isSubscription
5
+ ? ts.factory.createTypeReferenceNode('types.SubOpAsyncIterable', [
6
+ rOpType,
7
+ ])
8
+ : rOpType;
9
+ if (returnType === 'ExecuteResult.result')
10
+ return rType;
11
+ return ts.factory.createTypeReferenceNode('types.ExecuteResult', [rType]);
12
+ }
13
+ export function getReturnTypeFromConfig(config, operationName) {
14
+ return (config.sdk.operationReturnTypeMapping[operationName] ||
15
+ config.sdk.defaultOperationReturnType);
16
+ }
@@ -0,0 +1,42 @@
1
+ import { Actor, ActorContext } from '../../../config.js';
2
+ import { OperationType } from '../../../schema/client/operation.js';
3
+ import { PathOrFileDescriptor } from 'fs';
4
+ import ts from 'typescript';
5
+ import { ClientTypeNameBuilders, TSActorConfig } from '../shared.js';
6
+ export interface HookNameBuilders {
7
+ query: {
8
+ immediate: (operationName: string) => string;
9
+ lazy: (operationName: string) => string;
10
+ };
11
+ mutation: {
12
+ lazy: (operationName: string) => string;
13
+ };
14
+ subscription: {
15
+ immediate: (operationName: string) => string;
16
+ };
17
+ }
18
+ export interface SDKConfig {
19
+ typeName: string;
20
+ queriesKey: string;
21
+ mutationsKey: string;
22
+ subscriptionsKey: string;
23
+ clientTypeNameBuilders: ClientTypeNameBuilders;
24
+ hookNameBuilders: HookNameBuilders;
25
+ operationHooksTypeNameBuilder: (type: OperationType) => string;
26
+ lazyHookBuilderName: string;
27
+ lazyHookTypeName: string;
28
+ syncHookBuilderName: string;
29
+ syncHookTypeName: string;
30
+ subscriptionHookBuilderName: string;
31
+ subscriptionHookTypeName: string;
32
+ buildVariablesType: (variablesTypeNode: ts.TypeReferenceNode) => ts.TypeNode;
33
+ buildRequestContextType: (requestContextTypeNode: ts.TypeReferenceNode) => ts.TypeNode;
34
+ }
35
+ export interface Config extends TSActorConfig {
36
+ outPath: PathOrFileDescriptor;
37
+ importDeclarations: ts.ImportDeclaration[];
38
+ frameworkImportName: string;
39
+ graphqlModulePath: string;
40
+ sdk: SDKConfig;
41
+ }
42
+ export declare function build(config: Config): Actor<ActorContext>;
@@ -0,0 +1,11 @@
1
+ import { executeRunAction } from '../../utils.js';
2
+ import { renderNodes, } from '../shared.js';
3
+ import { generateNodes } from './generators/main.js';
4
+ async function actor(config, context, action) {
5
+ const nodes = generateNodes(config, context);
6
+ const code = await renderNodes(config, nodes);
7
+ executeRunAction(config.outPath, action, code);
8
+ }
9
+ export function build(config) {
10
+ return (context, action) => actor(config, context, action);
11
+ }
@@ -0,0 +1,8 @@
1
+ import { ActorContext } from '../../../../../config.js';
2
+ import { Config } from '../../actor.js';
3
+ import ts from 'typescript';
4
+ export declare function generateHelpNodes(config: Config, context: ActorContext, state: {
5
+ hasQueries: boolean;
6
+ hasMutations: boolean;
7
+ hasSubscriptions: boolean;
8
+ }): ts.Node[];
@@ -0,0 +1,55 @@
1
+ import ts from 'typescript';
2
+ import { generateSdkTypeNode } from './sdk-operations-type-node.js';
3
+ import { generateSdkType } from './sdk-type.js';
4
+ import { generateSyncHookBuilder, generateSyncHookType, } from './sync-hook-builders.js';
5
+ import { generateLazyHookBuilder, generateLazyHookType, } from './lazy-hook-builder.js';
6
+ import { generateSubscriptionHookBuilder, generateSubscriptionHookType, } from './subscription-hook-builders.js';
7
+ function generateSdkTypeNodes(config, context, state) {
8
+ return [
9
+ ...(state.hasQueries
10
+ ? [
11
+ generateSdkTypeNode(config, 'QUERY', context.schema.client.operations),
12
+ ts.factory.createIdentifier('\n'),
13
+ ]
14
+ : []),
15
+ ...(state.hasMutations
16
+ ? [
17
+ generateSdkTypeNode(config, 'MUTATION', context.schema.client.operations),
18
+ ts.factory.createIdentifier('\n'),
19
+ ]
20
+ : []),
21
+ ...(state.hasSubscriptions
22
+ ? [
23
+ generateSdkTypeNode(config, 'SUBSCRIPTION', context.schema.client.operations),
24
+ ts.factory.createIdentifier('\n'),
25
+ ]
26
+ : []),
27
+ ];
28
+ }
29
+ export function generateHelpNodes(config, context, state) {
30
+ return [
31
+ ...(state.hasQueries
32
+ ? [
33
+ generateSyncHookType(config),
34
+ ts.factory.createIdentifier('\n'),
35
+ generateSyncHookBuilder(config),
36
+ ]
37
+ : []),
38
+ ...(state.hasQueries || state.hasMutations
39
+ ? [
40
+ generateLazyHookType(config),
41
+ ts.factory.createIdentifier('\n'),
42
+ generateLazyHookBuilder(config),
43
+ ]
44
+ : []),
45
+ ...(state.hasSubscriptions
46
+ ? [
47
+ generateSubscriptionHookType(config),
48
+ ts.factory.createIdentifier('\n'),
49
+ generateSubscriptionHookBuilder(config),
50
+ ]
51
+ : []),
52
+ ...generateSdkTypeNodes(config, context, state),
53
+ generateSdkType(config, state),
54
+ ];
55
+ }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateLazyHookType(config: Config): ts.TypeAliasDeclaration;
4
+ export declare function generateLazyHookBuilder(config: Config): ts.FunctionDeclaration;
@@ -0,0 +1,44 @@
1
+ /* oxlint-disable max-lines */
2
+ import ts from 'typescript';
3
+ function generateLazyHookReturnType(variablesTypeNode, resultTypeNode) {
4
+ return ts.factory.createTypeReferenceNode('UseLazyOperationHookReturnType', [
5
+ ts.factory.createTypeReferenceNode('TRequestContext'),
6
+ variablesTypeNode,
7
+ resultTypeNode,
8
+ ]);
9
+ }
10
+ export function generateLazyHookType(config) {
11
+ return ts.factory.createTypeAliasDeclaration([], config.sdk.lazyHookTypeName, [
12
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
13
+ ts.factory.createTypeParameterDeclaration(undefined, 'TVariables'),
14
+ ts.factory.createTypeParameterDeclaration(undefined, 'TResult'),
15
+ ], ts.factory.createFunctionTypeNode(undefined, [], generateLazyHookReturnType(ts.factory.createTypeReferenceNode('TVariables'), ts.factory.createTypeReferenceNode('TResult'))));
16
+ }
17
+ export function generateLazyHookBuilder(config) {
18
+ return ts.factory.createFunctionDeclaration(undefined, undefined, config.sdk.lazyHookBuilderName, [
19
+ ts.factory.createTypeParameterDeclaration(undefined, 'TExecutor', ts.factory.createTypeReferenceNode('types.IExecutor', [
20
+ ts.factory.createTypeReferenceNode('TRequestContext'),
21
+ ])),
22
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
23
+ ts.factory.createTypeParameterDeclaration(undefined, 'TOperation', ts.factory.createTypeReferenceNode('types.SyncOperation', [
24
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
25
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
26
+ ])),
27
+ ], [
28
+ ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('TExecutor')),
29
+ ts.factory.createParameterDeclaration(undefined, undefined, 'operation', undefined, ts.factory.createTypeReferenceNode('TOperation')),
30
+ ], ts.factory.createTypeReferenceNode(config.sdk.lazyHookTypeName, [
31
+ ts.factory.createTypeReferenceNode('TRequestContext'),
32
+ ts.factory.createTypeReferenceNode('types.OperationVariables', [
33
+ ts.factory.createTypeReferenceNode('TOperation'),
34
+ ]),
35
+ ts.factory.createTypeReferenceNode('types.OperationResult', [
36
+ ts.factory.createTypeReferenceNode('TOperation'),
37
+ ]),
38
+ ]), ts.factory.createBlock([
39
+ ts.factory.createReturnStatement(ts.factory.createArrowFunction(undefined, undefined, [], generateLazyHookReturnType(ts.factory.createTypeReferenceNode('types.OperationVariables', [ts.factory.createTypeReferenceNode('TOperation')]), ts.factory.createTypeReferenceNode('types.OperationResult', [ts.factory.createTypeReferenceNode('TOperation')])), ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), ts.factory.createCallExpression(ts.factory.createIdentifier('useLazyOperation'), [], [
40
+ ts.factory.createIdentifier('executor'),
41
+ ts.factory.createIdentifier('operation'),
42
+ ]))),
43
+ ]));
44
+ }
@@ -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,45 @@
1
+ import ts from 'typescript';
2
+ import { assertUnreachable } from '../../../../../utils.js';
3
+ function getHookTypeName(config, type) {
4
+ switch (type) {
5
+ case 'SYNC':
6
+ return config.sdk.syncHookTypeName;
7
+ case 'LAZY':
8
+ return config.sdk.lazyHookTypeName;
9
+ case 'SUBSCRIPTION':
10
+ return config.sdk.subscriptionHookTypeName;
11
+ }
12
+ }
13
+ function generateOperationPropertySignature(config, hookName, type, operation) {
14
+ return ts.factory.createPropertySignature(undefined, ts.factory.createIdentifier(hookName), undefined, ts.factory.createTypeReferenceNode(getHookTypeName(config, type), [
15
+ ts.factory.createTypeReferenceNode('TRequestContext'),
16
+ ts.factory.createTypeReferenceNode(config.sdk.clientTypeNameBuilders.variablesTypeName(operation.name)),
17
+ ts.factory.createTypeReferenceNode(config.sdk.clientTypeNameBuilders.resultTypeName(operation.name)),
18
+ ]));
19
+ }
20
+ export function generateSdkTypeNode(config, type, operations) {
21
+ return ts.factory.createInterfaceDeclaration([ts.factory.createToken(ts.SyntaxKind.ExportKeyword)], ts.factory.createIdentifier(config.sdk.operationHooksTypeNameBuilder(type)), [
22
+ ts.factory.createTypeParameterDeclaration(undefined, ts.factory.createIdentifier('TRequestContext'), ts.factory.createTypeReferenceNode('types.RequestContext'), undefined),
23
+ ], undefined, Object.values(operations)
24
+ .filter((op) => op.type == type)
25
+ .map((op) => {
26
+ switch (op.type) {
27
+ case 'QUERY':
28
+ return [
29
+ generateOperationPropertySignature(config, config.sdk.hookNameBuilders.query.immediate(op.name), 'SYNC', op),
30
+ generateOperationPropertySignature(config, config.sdk.hookNameBuilders.query.lazy(op.name), 'LAZY', op),
31
+ ];
32
+ case 'MUTATION':
33
+ return [
34
+ generateOperationPropertySignature(config, config.sdk.hookNameBuilders.mutation.lazy(op.name), 'LAZY', op),
35
+ ];
36
+ case 'SUBSCRIPTION':
37
+ return [
38
+ generateOperationPropertySignature(config, config.sdk.hookNameBuilders.subscription.immediate(op.name), 'SUBSCRIPTION', op),
39
+ ];
40
+ default:
41
+ return assertUnreachable(op.type);
42
+ }
43
+ })
44
+ .flat());
45
+ }
@@ -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')),
5
+ ]));
6
+ }
7
+ export function generateSdkType(config, state) {
8
+ const properties = [];
9
+ if (state.hasQueries) {
10
+ properties.push(generateSdkPropertySignature(config.sdk.queriesKey, config.sdk.operationHooksTypeNameBuilder('QUERY')));
11
+ }
12
+ if (state.hasMutations) {
13
+ properties.push(generateSdkPropertySignature(config.sdk.mutationsKey, config.sdk.operationHooksTypeNameBuilder('MUTATION')));
14
+ }
15
+ if (state.hasSubscriptions) {
16
+ properties.push(generateSdkPropertySignature(config.sdk.subscriptionsKey, config.sdk.operationHooksTypeNameBuilder('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'), ts.factory.createTypeReferenceNode('types.RequestContext'), undefined),
20
+ ], undefined, properties);
21
+ }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateSubscriptionHookType(config: Config): ts.TypeAliasDeclaration;
4
+ export declare function generateSubscriptionHookBuilder(config: Config): ts.FunctionDeclaration;
@@ -0,0 +1,52 @@
1
+ /* oxlint-disable max-lines */
2
+ import ts from 'typescript';
3
+ function generateSubscriptionHookReturnType(resultTypeNode) {
4
+ return ts.factory.createTypeReferenceNode('UseSubscriptionHookReturnType', [
5
+ resultTypeNode,
6
+ ]);
7
+ }
8
+ export function generateSubscriptionHookType(config) {
9
+ return ts.factory.createTypeAliasDeclaration([], config.sdk.subscriptionHookTypeName, [
10
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
11
+ ts.factory.createTypeParameterDeclaration(undefined, 'TVariables'),
12
+ ts.factory.createTypeParameterDeclaration(undefined, 'TResult'),
13
+ ], ts.factory.createFunctionTypeNode(undefined, [
14
+ ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, config.sdk.buildVariablesType(ts.factory.createTypeReferenceNode('TVariables'))),
15
+ ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, ts.factory.createTypeReferenceNode('TRequestContext')),
16
+ ], generateSubscriptionHookReturnType(ts.factory.createTypeReferenceNode('TResult'))));
17
+ }
18
+ export function generateSubscriptionHookBuilder(config) {
19
+ return ts.factory.createFunctionDeclaration(undefined, undefined, config.sdk.syncHookBuilderName, [
20
+ ts.factory.createTypeParameterDeclaration(undefined, 'TExecutor', ts.factory.createTypeReferenceNode('types.IExecutor', [
21
+ ts.factory.createTypeReferenceNode('TRequestContext'),
22
+ ])),
23
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
24
+ ts.factory.createTypeParameterDeclaration(undefined, 'TOperation', ts.factory.createTypeReferenceNode('types.SubscriptionOperation', [
25
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
26
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
27
+ ])),
28
+ ], [
29
+ ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('TExecutor')),
30
+ ts.factory.createParameterDeclaration(undefined, undefined, 'operation', undefined, ts.factory.createTypeReferenceNode('TOperation')),
31
+ ], ts.factory.createTypeReferenceNode(config.sdk.subscriptionHookTypeName, [
32
+ ts.factory.createTypeReferenceNode('TRequestContext'),
33
+ ts.factory.createTypeReferenceNode('types.OperationVariables', [
34
+ ts.factory.createTypeReferenceNode('TOperation'),
35
+ ]),
36
+ ts.factory.createTypeReferenceNode('types.OperationResult', [
37
+ ts.factory.createTypeReferenceNode('TOperation'),
38
+ ]),
39
+ ]), ts.factory.createBlock([
40
+ ts.factory.createReturnStatement(ts.factory.createArrowFunction(undefined, undefined, [
41
+ ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, config.sdk.buildVariablesType(ts.factory.createTypeReferenceNode('types.OperationVariables', [
42
+ ts.factory.createTypeReferenceNode('TOperation'),
43
+ ]))),
44
+ ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, config.sdk.buildRequestContextType(ts.factory.createTypeReferenceNode('TRequestContext'))),
45
+ ], generateSubscriptionHookReturnType(ts.factory.createTypeReferenceNode('types.OperationResult', [ts.factory.createTypeReferenceNode('TOperation')])), ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), ts.factory.createCallExpression(ts.factory.createIdentifier('useSubscription'), [], [
46
+ ts.factory.createIdentifier('executor'),
47
+ ts.factory.createIdentifier('operation'),
48
+ ts.factory.createIdentifier('variables'),
49
+ ts.factory.createIdentifier('requestContext'),
50
+ ]))),
51
+ ]));
52
+ }
@@ -0,0 +1,4 @@
1
+ import ts from 'typescript';
2
+ import { Config } from '../../actor.js';
3
+ export declare function generateSyncHookType(config: Config): ts.TypeAliasDeclaration;
4
+ export declare function generateSyncHookBuilder(config: Config): ts.FunctionDeclaration;
@@ -0,0 +1,52 @@
1
+ /* oxlint-disable max-lines */
2
+ import ts from 'typescript';
3
+ function generateSyncHookReturnType(resultTypeNode) {
4
+ return ts.factory.createTypeReferenceNode('UseOperationHookReturnType', [
5
+ resultTypeNode,
6
+ ]);
7
+ }
8
+ export function generateSyncHookType(config) {
9
+ return ts.factory.createTypeAliasDeclaration([], config.sdk.syncHookTypeName, [
10
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
11
+ ts.factory.createTypeParameterDeclaration(undefined, 'TVariables'),
12
+ ts.factory.createTypeParameterDeclaration(undefined, 'TResult'),
13
+ ], ts.factory.createFunctionTypeNode(undefined, [
14
+ ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, config.sdk.buildVariablesType(ts.factory.createTypeReferenceNode('TVariables'))),
15
+ ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, config.sdk.buildRequestContextType(ts.factory.createTypeReferenceNode('TRequestContext'))),
16
+ ], generateSyncHookReturnType(ts.factory.createTypeReferenceNode('TResult'))));
17
+ }
18
+ export function generateSyncHookBuilder(config) {
19
+ return ts.factory.createFunctionDeclaration(undefined, undefined, config.sdk.syncHookBuilderName, [
20
+ ts.factory.createTypeParameterDeclaration(undefined, 'TExecutor', ts.factory.createTypeReferenceNode('types.IExecutor', [
21
+ ts.factory.createTypeReferenceNode('TRequestContext'),
22
+ ])),
23
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
24
+ ts.factory.createTypeParameterDeclaration(undefined, 'TOperation', ts.factory.createTypeReferenceNode('types.SyncOperation', [
25
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
26
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
27
+ ])),
28
+ ], [
29
+ ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('TExecutor')),
30
+ ts.factory.createParameterDeclaration(undefined, undefined, 'operation', undefined, ts.factory.createTypeReferenceNode('TOperation')),
31
+ ], ts.factory.createTypeReferenceNode(config.sdk.syncHookTypeName, [
32
+ ts.factory.createTypeReferenceNode('TRequestContext'),
33
+ ts.factory.createTypeReferenceNode('types.OperationVariables', [
34
+ ts.factory.createTypeReferenceNode('TOperation'),
35
+ ]),
36
+ ts.factory.createTypeReferenceNode('types.OperationResult', [
37
+ ts.factory.createTypeReferenceNode('TOperation'),
38
+ ]),
39
+ ]), ts.factory.createBlock([
40
+ ts.factory.createReturnStatement(ts.factory.createArrowFunction(undefined, undefined, [
41
+ ts.factory.createParameterDeclaration(undefined, undefined, 'variables', undefined, config.sdk.buildVariablesType(ts.factory.createTypeReferenceNode('types.OperationVariables', [
42
+ ts.factory.createTypeReferenceNode('TOperation'),
43
+ ]))),
44
+ ts.factory.createParameterDeclaration(undefined, undefined, 'requestContext', undefined, config.sdk.buildRequestContextType(ts.factory.createTypeReferenceNode('TRequestContext'))),
45
+ ], generateSyncHookReturnType(ts.factory.createTypeReferenceNode('types.OperationResult', [ts.factory.createTypeReferenceNode('TOperation')])), ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), ts.factory.createCallExpression(ts.factory.createIdentifier('useOperation'), [], [
46
+ ts.factory.createIdentifier('executor'),
47
+ ts.factory.createIdentifier('operation'),
48
+ ts.factory.createIdentifier('variables'),
49
+ ts.factory.createIdentifier('requestContext'),
50
+ ]))),
51
+ ]));
52
+ }
@@ -0,0 +1,88 @@
1
+ import ts from 'typescript';
2
+ import { generateHelpNodes } from './help-nodes/index.js';
3
+ function getHookBuilderName(config, type) {
4
+ switch (type) {
5
+ case 'SYNC':
6
+ return config.sdk.syncHookBuilderName;
7
+ case 'LAZY':
8
+ return config.sdk.lazyHookBuilderName;
9
+ case 'SUBSCRIPTION':
10
+ return config.sdk.subscriptionHookBuilderName;
11
+ }
12
+ }
13
+ function generateHookValueExpression(config, operationName, type) {
14
+ return ts.factory.createCallExpression(ts.factory.createIdentifier(getHookBuilderName(config, type)), undefined, [
15
+ ts.factory.createIdentifier('executor'),
16
+ ts.factory.createIdentifier(operationName),
17
+ ]);
18
+ }
19
+ export function generateNodes(config, context) {
20
+ const graphqlImports = [];
21
+ const queryNodes = [];
22
+ const mutationNodes = [];
23
+ const subscriptionNodes = [];
24
+ for (const operation of Object.values(context.schema.client.operations)) {
25
+ const operationName = config.sdk.clientTypeNameBuilders.operationTypeName(operation.name);
26
+ const variablesName = config.sdk.clientTypeNameBuilders.variablesTypeName(operation.name);
27
+ const resultName = config.sdk.clientTypeNameBuilders.resultTypeName(operation.name);
28
+ 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)));
29
+ switch (operation.type) {
30
+ case 'SUBSCRIPTION': {
31
+ subscriptionNodes.push(ts.factory.createPropertyAssignment(config.sdk.hookNameBuilders.subscription.immediate(operation.name), generateHookValueExpression(config, operationName, 'SUBSCRIPTION')));
32
+ break;
33
+ }
34
+ case 'MUTATION': {
35
+ mutationNodes.push(ts.factory.createPropertyAssignment(config.sdk.hookNameBuilders.mutation.lazy(operation.name), generateHookValueExpression(config, operationName, 'LAZY')));
36
+ break;
37
+ }
38
+ case 'QUERY': {
39
+ queryNodes.push(ts.factory.createPropertyAssignment(config.sdk.hookNameBuilders.query.immediate(operation.name), generateHookValueExpression(config, operationName, 'SYNC')), ts.factory.createPropertyAssignment(config.sdk.hookNameBuilders.query.lazy(operation.name), generateHookValueExpression(config, operationName, 'LAZY')));
40
+ break;
41
+ }
42
+ }
43
+ }
44
+ const gqlClientReactImports = [];
45
+ const state = {
46
+ hasQueries: queryNodes.length !== 0,
47
+ hasMutations: mutationNodes.length !== 0,
48
+ hasSubscriptions: subscriptionNodes.length !== 0,
49
+ };
50
+ const returnObjectNodes = [];
51
+ if (state.hasQueries) {
52
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('useOperation')));
53
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier('UseOperationHookReturnType')));
54
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier('types')));
55
+ returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.queriesKey, ts.factory.createObjectLiteralExpression(queryNodes, true)));
56
+ }
57
+ if (state.hasMutations) {
58
+ returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.mutationsKey, ts.factory.createObjectLiteralExpression(mutationNodes, true)));
59
+ }
60
+ if (state.hasQueries || state.hasMutations) {
61
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('useLazyOperation')));
62
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier('UseLazyOperationHookReturnType')));
63
+ }
64
+ if (state.hasSubscriptions) {
65
+ gqlClientReactImports.push(ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('useSubscription')), ts.factory.createImportSpecifier(true, undefined, ts.factory.createIdentifier('UseSubscriptionHookReturnType')));
66
+ returnObjectNodes.push(ts.factory.createPropertyAssignment(config.sdk.subscriptionsKey, ts.factory.createObjectLiteralExpression(subscriptionNodes, true)));
67
+ }
68
+ return [
69
+ ...config.importDeclarations,
70
+ ts.factory.createImportDeclaration([], ts.factory.createImportClause(undefined, undefined, ts.factory.createNamedImports(gqlClientReactImports)), ts.factory.createStringLiteral(config.frameworkImportName)),
71
+ ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(undefined, undefined, ts.factory.createNamedImports(graphqlImports)), ts.factory.createStringLiteral(config.graphqlModulePath)),
72
+ ts.factory.createIdentifier('\n'),
73
+ ...generateHelpNodes(config, context, state),
74
+ ts.factory.createIdentifier('\n'),
75
+ ts.factory.createFunctionDeclaration(ts.factory.createModifiersFromModifierFlags(ts.ModifierFlags.Export), undefined, 'createSdk', [
76
+ ts.factory.createTypeParameterDeclaration(undefined, 'TExecutor', ts.factory.createTypeReferenceNode('types.IExecutor', [
77
+ ts.factory.createTypeReferenceNode('TRequestContext'),
78
+ ])),
79
+ ts.factory.createTypeParameterDeclaration(undefined, 'TRequestContext', ts.factory.createTypeReferenceNode('types.RequestContext')),
80
+ ], [
81
+ ts.factory.createParameterDeclaration(undefined, undefined, 'executor', undefined, ts.factory.createTypeReferenceNode('TExecutor')),
82
+ ], ts.factory.createTypeReferenceNode(config.sdk.typeName, [
83
+ ts.factory.createTypeReferenceNode('TRequestContext'),
84
+ ]), ts.factory.createBlock([
85
+ ts.factory.createReturnStatement(ts.factory.createObjectLiteralExpression(returnObjectNodes, true)),
86
+ ], true)),
87
+ ];
88
+ }
@@ -0,0 +1 @@
1
+ export { type Config, type SDKConfig, build } from './actor.js';
@@ -0,0 +1 @@
1
+ export { build } from './actor.js';
@@ -1,15 +1,9 @@
1
- import { PathOrFileDescriptor } from 'fs';
2
1
  import { Actor, ActorContext } from '../../../config.js';
2
+ import { Config as FrameworkConfig, SDKConfig as FrameworkSDKConfig } from '../gql-client-framework/index.js';
3
3
  import { TSActorConfig } from '../shared.js';
4
- import ts from 'typescript';
5
- export interface Config extends TSActorConfig {
6
- outPath: PathOrFileDescriptor;
7
- importDeclarations: ts.ImportDeclaration[];
8
- graphqlModulePath: string;
9
- sdk: {
10
- queriesKey: string;
11
- mutationsKey: string;
12
- subscriptionsKey: string;
13
- };
4
+ export interface SDKConfig extends Pick<FrameworkSDKConfig, 'typeName' | 'queriesKey' | 'mutationsKey' | 'subscriptionsKey' | 'clientTypeNameBuilders' | 'hookNameBuilders' | 'operationHooksTypeNameBuilder' | 'lazyHookBuilderName' | 'lazyHookTypeName' | 'syncHookBuilderName' | 'syncHookTypeName' | 'subscriptionHookBuilderName' | 'subscriptionHookTypeName'> {
5
+ }
6
+ export interface Config extends Pick<FrameworkConfig, 'outPath' | 'importDeclarations' | 'graphqlModulePath' | keyof TSActorConfig> {
7
+ sdk: SDKConfig;
14
8
  }
15
9
  export declare function build(config: Config): Actor<ActorContext>;
@@ -1,11 +1,12 @@
1
- import { writeFileSync } from 'fs';
2
- import { renderNodes } from '../shared.js';
3
- import { generateNodes } from './generators/main.js';
4
- async function actor(config, context) {
5
- const nodes = generateNodes(config, context);
6
- const code = await renderNodes(config, nodes);
7
- writeFileSync(config.outPath, code);
8
- }
1
+ import { build as frameworkBuild, } from '../gql-client-framework/index.js';
9
2
  export function build(config) {
10
- return (context) => actor(config, context);
3
+ return frameworkBuild({
4
+ ...config,
5
+ frameworkImportName: '@vladimirdev635/gql-client-react',
6
+ sdk: {
7
+ ...config.sdk,
8
+ buildVariablesType: (variablesTypeNode) => variablesTypeNode,
9
+ buildRequestContextType: (requestContextTypeNode) => requestContextTypeNode,
10
+ },
11
+ });
11
12
  }
@@ -1 +1 @@
1
- export { type Config, build } from './actor.js';
1
+ export { type Config, type SDKConfig, build } from './actor.js';
@@ -1,15 +1,9 @@
1
1
  import { Actor, ActorContext } from '../../../config.js';
2
- import { PathOrFileDescriptor } from 'fs';
3
- import ts from 'typescript';
2
+ import { Config as FrameworkConfig, SDKConfig as FrameworkSDKConfig } from '../gql-client-framework/index.js';
4
3
  import { TSActorConfig } from '../shared.js';
5
- export interface Config extends TSActorConfig {
6
- outPath: PathOrFileDescriptor;
7
- importDeclarations: ts.ImportDeclaration[];
8
- graphqlModulePath: string;
9
- sdk: {
10
- queriesKey: string;
11
- mutationsKey: string;
12
- subscriptionsKey: string;
13
- };
4
+ export interface SDKConfig extends Pick<FrameworkSDKConfig, 'typeName' | 'queriesKey' | 'mutationsKey' | 'subscriptionsKey' | 'clientTypeNameBuilders' | 'hookNameBuilders' | 'operationHooksTypeNameBuilder' | 'lazyHookBuilderName' | 'lazyHookTypeName' | 'syncHookBuilderName' | 'syncHookTypeName' | 'subscriptionHookBuilderName' | 'subscriptionHookTypeName'> {
5
+ }
6
+ export interface Config extends Pick<FrameworkConfig, 'outPath' | 'importDeclarations' | 'graphqlModulePath' | keyof TSActorConfig> {
7
+ sdk: SDKConfig;
14
8
  }
15
9
  export declare function build(config: Config): Actor<ActorContext>;
@@ -1,11 +1,29 @@
1
- import { writeFileSync } from 'fs';
2
- import { renderNodes } from '../shared.js';
3
- import { generateNodes } from './generators/main.js';
4
- async function actor(config, context) {
5
- const nodes = generateNodes(config, context);
6
- const code = await renderNodes(config, nodes);
7
- writeFileSync(config.outPath, code);
8
- }
1
+ import ts from 'typescript';
2
+ import { build as frameworkBuild, } from '../gql-client-framework/index.js';
9
3
  export function build(config) {
10
- return (context) => actor(config, context);
4
+ return frameworkBuild({
5
+ ...config,
6
+ importDeclarations: [
7
+ ...config.importDeclarations,
8
+ ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(ts.SyntaxKind.TypeKeyword, undefined, ts.factory.createNamedImports([
9
+ ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('Ref')),
10
+ ])), ts.factory.createStringLiteral('vue')),
11
+ ],
12
+ frameworkImportName: '@vladimirdev635/gql-client-vue',
13
+ sdk: {
14
+ ...config.sdk,
15
+ buildVariablesType: (variablesTypeNode) => ts.factory.createUnionTypeNode([
16
+ variablesTypeNode,
17
+ ts.factory.createTypeReferenceNode('Ref', [
18
+ variablesTypeNode,
19
+ ]),
20
+ ]),
21
+ buildRequestContextType: (requestContextTypeNode) => ts.factory.createUnionTypeNode([
22
+ requestContextTypeNode,
23
+ ts.factory.createTypeReferenceNode('Ref', [
24
+ requestContextTypeNode,
25
+ ]),
26
+ ]),
27
+ },
28
+ });
11
29
  }
@@ -1 +1 @@
1
- export { type Config, build } from './actor.js';
1
+ export { type Config, type SDKConfig, build } from './actor.js';
@@ -1,12 +1,13 @@
1
- import { ScalarsMapping } from './generators/server/scalars/index.js';
2
1
  import { PathOrFileDescriptor } from 'fs';
3
2
  import ts from 'typescript';
4
3
  import { Actor, ActorContext } from '../../../config.js';
5
- import { TSActorConfig } from '../shared.js';
6
- export interface GraphqlActorConfig extends TSActorConfig {
4
+ import { ClientTypeNameBuilders, TSActorConfig } from '../shared.js';
5
+ import { ScalarsMapping } from './generators/server/scalars/index.js';
6
+ export interface Config extends TSActorConfig {
7
7
  outPath: PathOrFileDescriptor;
8
8
  scalarsMapping: ScalarsMapping;
9
9
  importDeclarations: ts.ImportDeclaration[];
10
10
  onlyRequiredForOperations: boolean;
11
+ clientTypeNameBuilders: ClientTypeNameBuilders;
11
12
  }
12
- export declare function buildGraphqlActor(config: GraphqlActorConfig): Actor<ActorContext>;
13
+ export declare function build(config: Config): Actor<ActorContext>;