@vladimirdev635/gql-codegen 0.0.108 → 0.0.110
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.
- package/actors/ts/gql-client/actor.d.ts +7 -1
- package/actors/ts/gql-client/actor.js +1 -1
- package/actors/ts/gql-client/generators/help-nodes/build-subscription-callback-function.d.ts +4 -0
- package/actors/ts/gql-client/generators/help-nodes/build-subscription-callback-function.js +35 -0
- package/actors/ts/gql-client/generators/help-nodes/build-sync-callback-function.d.ts +4 -0
- package/actors/ts/gql-client/generators/help-nodes/build-sync-callback-function.js +35 -0
- package/actors/ts/gql-client/generators/help-nodes/callback-arrow-func.d.ts +3 -0
- package/actors/ts/gql-client/generators/help-nodes/callback-arrow-func.js +15 -0
- package/actors/ts/gql-client/generators/help-nodes/index.d.ts +9 -0
- package/actors/ts/gql-client/generators/help-nodes/index.js +71 -0
- package/actors/ts/gql-client/generators/help-nodes/sdk-operations-type-node.d.ts +4 -0
- package/actors/ts/gql-client/generators/help-nodes/sdk-operations-type-node.js +17 -0
- package/actors/ts/gql-client/generators/help-nodes/sdk-type.d.ts +7 -0
- package/actors/ts/gql-client/generators/help-nodes/sdk-type.js +21 -0
- package/actors/ts/gql-client/generators/help-nodes/subscription-method-func-alias.d.ts +3 -0
- package/actors/ts/gql-client/generators/help-nodes/subscription-method-func-alias.js +14 -0
- package/actors/ts/gql-client/generators/help-nodes/sync-method-func-alias.d.ts +3 -0
- package/actors/ts/gql-client/generators/help-nodes/sync-method-func-alias.js +13 -0
- package/actors/ts/gql-client/generators/main.d.ts +1 -1
- package/actors/ts/gql-client/generators/main.js +41 -71
- package/actors/ts/gql-client/generators/operation-function-block.d.ts +3 -0
- package/actors/ts/gql-client/generators/operation-function-block.js +21 -0
- package/actors/ts/gql-client/generators/operation-return-type.d.ts +4 -0
- package/actors/ts/gql-client/generators/operation-return-type.js +16 -0
- package/actors/ts/gql-client-framework/actor.d.ts +42 -0
- package/actors/ts/gql-client-framework/actor.js +11 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/index.d.ts +8 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/index.js +55 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/lazy-hook-builder.d.ts +4 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/lazy-hook-builder.js +44 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sdk-operations-type-node.d.ts +4 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sdk-operations-type-node.js +45 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sdk-type.d.ts +7 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sdk-type.js +21 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/subscription-hook-builders.d.ts +4 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/subscription-hook-builders.js +52 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sync-hook-builders.d.ts +4 -0
- package/actors/ts/gql-client-framework/generators/help-nodes/sync-hook-builders.js +52 -0
- package/actors/ts/gql-client-framework/generators/main.js +88 -0
- package/actors/ts/gql-client-framework/index.d.ts +1 -0
- package/actors/ts/gql-client-framework/index.js +1 -0
- package/actors/ts/gql-client-react/actor.d.ts +5 -12
- package/actors/ts/gql-client-react/actor.js +10 -9
- package/actors/ts/gql-client-react/index.d.ts +1 -1
- package/actors/ts/gql-client-vue/actor.d.ts +5 -12
- package/actors/ts/gql-client-vue/actor.js +27 -9
- package/actors/ts/gql-client-vue/index.d.ts +1 -1
- package/actors/ts/graphql/actor.d.ts +6 -5
- package/actors/ts/graphql/actor.js +4 -4
- package/actors/ts/graphql/generators/client/fragments.d.ts +3 -3
- package/actors/ts/graphql/generators/client/fragments.js +24 -21
- package/actors/ts/graphql/generators/client/main.d.ts +3 -3
- package/actors/ts/graphql/generators/client/main.js +1 -18
- package/actors/ts/graphql/generators/client/operations.d.ts +4 -3
- package/actors/ts/graphql/generators/client/operations.js +22 -24
- package/actors/ts/graphql/generators/main.d.ts +2 -2
- package/actors/ts/graphql/generators/main.js +1 -1
- package/actors/ts/graphql/generators/server/inputs.d.ts +1 -1
- package/actors/ts/graphql/generators/server/inputs.js +6 -6
- package/actors/ts/graphql/generators/server/main.d.ts +2 -2
- package/actors/ts/graphql/generators/server/objects.js +2 -2
- package/actors/ts/graphql/generators/server/scalars/additional.d.ts +1 -0
- package/actors/ts/graphql/generators/server/scalars/additional.js +2 -1
- package/actors/ts/graphql/generators/server/shared.d.ts +3 -2
- package/actors/ts/graphql/generators/server/shared.js +10 -1
- package/actors/ts/graphql/generators/server/unions.js +2 -2
- package/actors/ts/graphql/index.d.ts +1 -1
- package/actors/ts/graphql/index.js +1 -1
- package/actors/ts/index.d.ts +2 -1
- package/actors/ts/index.js +1 -0
- package/actors/ts/shared.d.ts +5 -0
- package/actors/ts/utils.d.ts +2 -4
- package/actors/ts/utils.js +4 -3
- package/package.json +1 -1
- package/schema/client/operation.d.ts +3 -0
- package/schema/utils.d.ts +6 -6
- package/schema/utils.js +8 -6
- package/actors/ts/gql-client-react/generators/main.d.ts +0 -4
- package/actors/ts/gql-client-react/generators/main.js +0 -121
- package/actors/ts/gql-client-vue/generators/main.js +0 -135
- /package/actors/ts/{gql-client-vue → gql-client-framework}/generators/main.d.ts +0 -0
|
@@ -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,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,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,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,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,8 @@
|
|
|
1
|
-
import { PathOrFileDescriptor } from 'fs';
|
|
2
1
|
import { Actor, ActorContext } from '../../../config.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
graphqlModulePath: string;
|
|
9
|
-
sdk: {
|
|
10
|
-
queriesKey: string;
|
|
11
|
-
mutationsKey: string;
|
|
12
|
-
subscriptionsKey: string;
|
|
13
|
-
};
|
|
2
|
+
import { Config as FrameworkConfig, SDKConfig as FrameworkSDKConfig } from '../gql-client-framework/index.js';
|
|
3
|
+
export interface SDKConfig extends Omit<FrameworkSDKConfig, 'buildVariablesType'> {
|
|
4
|
+
}
|
|
5
|
+
export interface Config extends Omit<FrameworkConfig, 'frameworkImportName' | 'sdk'> {
|
|
6
|
+
sdk: SDKConfig;
|
|
14
7
|
}
|
|
15
8
|
export declare function build(config: Config): Actor<ActorContext>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
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 (
|
|
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,8 @@
|
|
|
1
1
|
import { Actor, ActorContext } from '../../../config.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export interface Config extends
|
|
6
|
-
|
|
7
|
-
importDeclarations: ts.ImportDeclaration[];
|
|
8
|
-
graphqlModulePath: string;
|
|
9
|
-
sdk: {
|
|
10
|
-
queriesKey: string;
|
|
11
|
-
mutationsKey: string;
|
|
12
|
-
subscriptionsKey: string;
|
|
13
|
-
};
|
|
2
|
+
import { Config as FrameworkConfig, SDKConfig as FrameworkSDKConfig } from '../gql-client-framework/index.js';
|
|
3
|
+
export interface SDKConfig extends Omit<FrameworkSDKConfig, 'buildVariablesType'> {
|
|
4
|
+
}
|
|
5
|
+
export interface Config extends Omit<FrameworkConfig, 'frameworkImportName' | 'sdk'> {
|
|
6
|
+
sdk: SDKConfig;
|
|
14
7
|
}
|
|
15
8
|
export declare function build(config: Config): Actor<ActorContext>;
|
|
@@ -1,11 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
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';
|
|
2
|
+
import ts from 'typescript';
|
|
9
3
|
export function build(config) {
|
|
10
|
-
return (
|
|
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 {
|
|
1
|
+
import { Actor, ActorContext } from '../../../config.js';
|
|
2
2
|
import { PathOrFileDescriptor } from 'fs';
|
|
3
3
|
import ts from 'typescript';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export interface
|
|
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
|
|
13
|
+
export declare function build(config: Config): Actor<ActorContext>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { writeFileSync } from 'fs';
|
|
2
|
-
import { renderNodes } from '../shared.js';
|
|
2
|
+
import { renderNodes, } from '../shared.js';
|
|
3
3
|
import { generateNodes } from './generators/main.js';
|
|
4
|
-
async function
|
|
4
|
+
async function actor(config, context) {
|
|
5
5
|
const nodes = generateNodes(config, context);
|
|
6
6
|
const code = await renderNodes(config, nodes);
|
|
7
7
|
writeFileSync(config.outPath, code);
|
|
8
8
|
}
|
|
9
|
-
export function
|
|
10
|
-
return (context) =>
|
|
9
|
+
export function build(config) {
|
|
10
|
+
return (context) => actor(config, context);
|
|
11
11
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import ts from 'typescript';
|
|
2
|
-
import { RootSchema } from '../../../../../schema/root.js';
|
|
3
1
|
import { FragmentSpecSchemaType, objectSelection } from '../../../../../schema/client/fragment.js';
|
|
2
|
+
import { RootSchema } from '../../../../../schema/root.js';
|
|
3
|
+
import ts from 'typescript';
|
|
4
4
|
import { z } from 'zod/v4';
|
|
5
5
|
import { ScalarsMapping } from '../server/scalars/mapping.js';
|
|
6
6
|
export declare function extractFragmentNamesInSpec(schema: RootSchema, fragmentSpec: FragmentSpecSchemaType): string[];
|
|
@@ -90,6 +90,6 @@ declare function resolveSelections(specSelections: z.infer<typeof objectSelectio
|
|
|
90
90
|
})[];
|
|
91
91
|
} | null;
|
|
92
92
|
})[];
|
|
93
|
-
export declare function generateZodFragmentSpecCallExpression(scalarsMapping: ScalarsMapping, schema: RootSchema, spec: FragmentSpecSchemaType, typenameConfig?: Parameters<typeof resolveSelections>[1]): ts.CallExpression;
|
|
93
|
+
export declare function generateZodFragmentSpecCallExpression(scalarsMapping: ScalarsMapping, schema: RootSchema, spec: FragmentSpecSchemaType, typenameConfig?: Parameters<typeof resolveSelections>[1], insideLazy?: boolean): ts.CallExpression;
|
|
94
94
|
export declare function generateFragmentTypes(scalarsMapping: ScalarsMapping, schema: RootSchema): ts.Node[];
|
|
95
95
|
export {};
|