1111
1212namespace Overblog \GraphQLBundle \Generator ;
1313
14- use Overblog \GraphQLBundle \Request \Executor ;
1514use Overblog \GraphQLGenerator \Generator \TypeGenerator as BaseTypeGenerator ;
1615use Symfony \Component \ClassLoader \MapClassLoader ;
1716use Symfony \Component \Filesystem \Filesystem ;
@@ -77,10 +76,12 @@ protected function generateResolve(array $value)
7776 {
7877 $ accessIsSet = $ this ->arrayKeyExistsAndIsNotNull ($ value , 'access ' );
7978 $ fieldOptions = $ value ;
80- $ fieldOptions ['resolve ' ] = $ this ->arrayKeyExistsAndIsNotNull ($ fieldOptions , 'resolve ' ) ? $ fieldOptions ['resolve ' ] : $ this ->defaultResolver ;
79+ if (!$ this ->arrayKeyExistsAndIsNotNull ($ fieldOptions , 'resolve ' )) {
80+ $ fieldOptions ['resolve ' ] = $ this ->defaultResolver ;
81+ }
82+ $ resolveCallback = parent ::generateResolve ($ fieldOptions );
8183
8284 if (!$ accessIsSet || true === $ fieldOptions ['access ' ]) { // access granted to this field
83- $ resolveCallback = parent ::generateResolve ($ fieldOptions );
8485 if ('null ' === $ resolveCallback ) {
8586 return $ resolveCallback ;
8687 }
@@ -90,60 +91,37 @@ protected function generateResolve(array $value)
9091
9192 $ code = <<<'CODE'
9293function ($value, $args, $context, %s $info) <closureUseStatements> {
93- <spaces><spaces>$onFulFilled = function ($value) use (%s, $args, $context, $info) {
94- <spaces><spaces><spaces>$resolverCallback = %s;
95-
96- <spaces><spaces><spaces>return call_user_func_array($resolverCallback, [$value, new %s($args), $context, $info]);
97- <spaces><spaces>};
98-
99- %s
94+ <spaces><spaces>$resolverCallback = %s;
95+ <spaces><spaces>return call_user_func_array($resolverCallback, [$value, new %s($args), $context, $info]);
10096<spaces>}
10197CODE;
10298
103- return sprintf ($ code , $ resolveInfoClass , static :: USE_FOR_CLOSURES , $ resolveCallback , $ argumentClass, $ this -> promiseAdapter () );
99+ return sprintf ($ code , $ resolveInfoClass , $ resolveCallback , $ argumentClass );
104100 } elseif ($ accessIsSet && false === $ fieldOptions ['access ' ]) { // access deny to this field
105101 $ exceptionClass = $ this ->shortenClassName ('\\Overblog \\GraphQLBundle \\Error \\UserWarning ' );
106102
107103 return sprintf ('function () { throw new %s( \'Access denied to this field. \'); } ' , $ exceptionClass );
108104 } else { // wrap resolver with access
109- $ resolveCallback = parent :: generateResolve ( $ fieldOptions );
105+
110106 $ accessChecker = $ this ->callableCallbackFromArrayValue ($ fieldOptions , 'access ' , '$value, $args, $context, \\GraphQL \\Type \\Definition \\ResolveInfo $info, $object ' );
111107 $ resolveInfoClass = $ this ->shortenClassName ('\\GraphQL \\Type \\Definition \\ResolveInfo ' );
112108 $ argumentClass = $ this ->shortenClassName ('\\Overblog \\GraphQLBundle \\Definition \\Argument ' );
113109
114110 $ code = <<<'CODE'
115111function ($value, $args, $context, %s $info) <closureUseStatements> {
116- <spaces><spaces>$onFulFilled = function ($value) use (%s, $args, $context, $info) {
117- <spaces><spaces><spaces>$resolverCallback = %s;
118- <spaces><spaces><spaces>$accessChecker = %s;
119- <spaces><spaces><spaces>$isMutation = $info instanceof ResolveInfo && 'mutation' === $info->operation->operation && $info->parentType === $info->schema->getMutationType();
120- <spaces><spaces><spaces>return $container->get('overblog_graphql.access_resolver')->resolve($accessChecker, $resolverCallback, [$value, new %s($args), $context, $info], $isMutation);
121- <spaces><spaces>};
122-
123- %s
112+ <spaces><spaces>$resolverCallback = %s;
113+ <spaces><spaces>$accessChecker = %s;
114+ <spaces><spaces>$isMutation = $info instanceof ResolveInfo && 'mutation' === $info->operation->operation && $info->parentType === $info->schema->getMutationType();
115+ <spaces><spaces>return $container->get('overblog_graphql.access_resolver')->resolve($accessChecker, $resolverCallback, [$value, new %s($args), $context, $info], $isMutation);
124116<spaces>}
125117CODE;
126118
127- $ code = sprintf ($ code , $ resolveInfoClass , static :: USE_FOR_CLOSURES , $ resolveCallback , $ accessChecker , $ argumentClass, $ this -> promiseAdapter () );
119+ $ code = sprintf ($ code , $ resolveInfoClass , $ resolveCallback , $ accessChecker , $ argumentClass );
128120
129121 return $ code ;
130122 }
131123 }
132124
133- private function promiseAdapter ()
134- {
135- $ code = <<<'CODE'
136- <spaces><spaces>$promiseAdapter = $container->get('%s');
137- <spaces><spaces>if ($promiseAdapter->isThenable($value)) {
138- <spaces><spaces><spaces>return $promiseAdapter->isThenable($value, $onFulFilled);
139- <spaces><spaces>}
140- <spaces><spaces>return $onFulFilled($value);
141- CODE;
142- $ code = sprintf ($ code , Executor::PROMISE_ADAPTER_SERVICE_ID );
143-
144- return $ code ;
145- }
146-
147125 /**
148126 * @param array $value
149127 *
0 commit comments