22import { ActorContext } from '@/config.js' ;
33import { GQLClientActorConfig , OperationReturnType } from '../actor.js' ;
44import ts from 'typescript' ;
5+ import { operationSchema } from '@/schema/client/operation.js' ;
6+ import { z } from 'zod/v4' ;
57
68function generateFunctionBlock (
79 operationName : string ,
10+ operationType : z . infer < typeof operationSchema > [ 'type' ] ,
811 returnType : OperationReturnType
912) {
13+ const callArgs = [
14+ ts . factory . createIdentifier ( operationName ) ,
15+ ts . factory . createIdentifier ( 'variables' ) ,
16+ ts . factory . createIdentifier ( 'requestContext' )
17+ ]
18+ if ( operationType === 'SUBSCRIPTION' ) {
19+ callArgs . push ( ts . factory . createIdentifier ( 'controller' ) )
20+ }
1021 const awaitExpression = ts . factory . createAwaitExpression (
1122 ts . factory . createCallExpression (
12- ts . factory . createIdentifier ( 'executor' ) ,
23+ ts . factory . createPropertyAccessExpression (
24+ ts . factory . createIdentifier ( 'executor' ) ,
25+ operationType === 'SUBSCRIPTION' ?
26+ 'executeSubscription' :
27+ 'executeSync'
28+ ) ,
1329 undefined ,
14- [
15- ts . factory . createIdentifier ( operationName ) ,
16- ts . factory . createIdentifier ( 'variables' ) ,
17- ts . factory . createIdentifier ( 'requestContext' )
18- ]
30+ callArgs
1931 )
2032 )
2133 if ( returnType === 'ExecuteResult' ) {
@@ -83,31 +95,43 @@ export function generateNodes(
8395 const returnType = getReturnTypeFromConfig ( config , operation . name )
8496 if ( returnType === 'ExecuteResult' )
8597 shouldIncludeExecuteResultType = true
98+ const funcArgs = [
99+ ts . factory . createParameterDeclaration (
100+ undefined ,
101+ undefined ,
102+ 'variables' ,
103+ undefined ,
104+ ts . factory . createTypeReferenceNode ( variablesName )
105+ ) ,
106+ ts . factory . createParameterDeclaration (
107+ undefined ,
108+ undefined ,
109+ 'requestContext' ,
110+ undefined ,
111+ ts . factory . createTypeReferenceNode (
112+ 'TRequestContext'
113+ ) ,
114+ ) ,
115+ ]
116+ if ( operation . type === 'SUBSCRIPTION' ) {
117+ funcArgs . push (
118+ ts . factory . createParameterDeclaration (
119+ undefined ,
120+ undefined ,
121+ 'controller' ,
122+ undefined ,
123+ ts . factory . createTypeReferenceNode ( 'AbortController' ) ,
124+ ) ,
125+ )
126+ }
86127 const propAssignment = ts . factory . createPropertyAssignment (
87128 operation . name ,
88129 ts . factory . createArrowFunction (
89130 ts . factory . createModifiersFromModifierFlags (
90131 ts . ModifierFlags . Async
91132 ) ,
92133 undefined ,
93- [
94- ts . factory . createParameterDeclaration (
95- undefined ,
96- undefined ,
97- 'variables' ,
98- undefined ,
99- ts . factory . createTypeReferenceNode ( variablesName )
100- ) ,
101- ts . factory . createParameterDeclaration (
102- undefined ,
103- undefined ,
104- 'requestContext' ,
105- undefined ,
106- ts . factory . createTypeReferenceNode (
107- 'TRequestContext'
108- ) ,
109- ) ,
110- ] ,
134+ funcArgs ,
111135 ts . factory . createTypeReferenceNode (
112136 'Promise' ,
113137 [
@@ -121,7 +145,7 @@ export function generateNodes(
121145 ts . factory . createToken (
122146 ts . SyntaxKind . EqualsGreaterThanToken
123147 ) ,
124- generateFunctionBlock ( operationName , returnType )
148+ generateFunctionBlock ( operationName , operation . type , returnType )
125149 )
126150 )
127151
@@ -145,7 +169,7 @@ export function generateNodes(
145169 ts . factory . createImportSpecifier (
146170 false ,
147171 undefined ,
148- ts . factory . createIdentifier ( 'Executor ' )
172+ ts . factory . createIdentifier ( 'IExecutor ' )
149173 ) ,
150174 ts . factory . createImportSpecifier (
151175 false ,
@@ -209,7 +233,7 @@ export function generateNodes(
209233 undefined ,
210234 ts . factory . createNamedImports ( gqlClientImports )
211235 ) ,
212- ts . factory . createStringLiteral ( '@vladimirdev635/gql-client' )
236+ ts . factory . createStringLiteral ( '@vladimirdev635/gql-client/types ' )
213237 ) ,
214238 ts . factory . createImportDeclaration (
215239 undefined ,
@@ -242,7 +266,7 @@ export function generateNodes(
242266 undefined ,
243267 'executor' ,
244268 undefined ,
245- ts . factory . createTypeReferenceNode ( 'Executor ' , [
269+ ts . factory . createTypeReferenceNode ( 'IExecutor ' , [
246270 ts . factory . createTypeReferenceNode ( 'TRequestContext' )
247271 ] )
248272 ) ] ,
0 commit comments