Closed HsuTing closed 5 years ago
I had fixed 1
and 4
, but I do not have any idea to fix 2
, 3
.
Can someone help me?
@HsuTing I don't get any errors.
Can you please change new files in test/
folder proper examples with errors.
Thanks.
@nodkz I add a new example about how I use react-relay-network-modern-ssr
.
I get error like this:
Error ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ test/example/client.js:30:9
Cannot call RelayNetworkLayer with array literal bound to middlewares because in array element:
• Either a call signature declaring the expected parameter / return type is missing in MiddlewareSync [1] but exists
in Middleware [2].
• Or inexact RelayResponse [3] is incompatible with exact object type [4] in property subscribe.error of property
execute.
• Or RelayResponse [3] is incompatible with RelayResponse [5] in property subscribe.error of property execute.
• Or RelayObservable [6] is incompatible with Promise [7] in property execute.
• Or inexact RelayObservable [6] is incompatible with exact object type [4] in property execute.
• Or RelayObservable [6] is incompatible with RelayResponse [5] in property execute.
• Or a call signature declaring the expected parameter / return type is missing in MiddlewareSync [1] but exists in
MiddlewareRaw [8].
test/example/client.js
22│
23│ storeEnvironment = new Environment({
24│ store,
25│ network: new RelayNetworkLayer([
26│ cacheMiddleware({
27│ size: 100,
28│ ttl: 60 * 1000,
29│ }),
30│ new RelaySSR(relayData).getMiddleware({
31│ lookup: false,
32│ }),
33│ urlMiddleware({
34│ url: (req: mixed) => 'http://localhost:8000/graphql',
35│ }),
36│ ]),
37│ });
38│
39│ return storeEnvironment;
node_modules/react-relay-network-modern/lib/definition.js.flow
[6][3] 23│ ) => ?ObservableFromValue<QueryPayload>,
node_modules/react-relay-network-modern/node8/RelayNetworkLayer.js.flow
[2][8] 33│ middlewares: Array<?Middleware | MiddlewareSync | MiddlewareRaw>,
node_modules/react-relay-network-modern/node8/definition.js.flow
[4] 96│ | {|
97│ data?: ?PayloadData,
98│ errors?: Array<any>,
99│ rerunVariables?: Variables,
100│ |}
[5] 101│ | RelayResponse;
:
[7] 115│ export type ObservableFromValue<T> = RelayObservable<T> | Promise<T> | T;
src/client.js
[1] 23│ getMiddleware(opts?: RelayClientSSRMiddlewareOpts): MiddlewareSync {
Error ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ test/example/server.js:33:11
Cannot call RelayNetworkLayer with array literal bound to middlewares because in array element:
• Either inexact Middleware [1] is incompatible with exact MiddlewareSync [2].
• Or RelayRequest [3] is incompatible with RelayRequest [4] in the first argument of the first argument.
• Or RelayRequest [3] is incompatible with RelayRequestBatch [5] in the first argument of the first argument.
test/example/server.js
26│ relaySSR,
27│ environment: new Environment({
28│ store,
29│ network: new RelayNetworkLayer([
30│ urlMiddleware({
31│ url: (req: mixed) => 'http://localhost:8000/graphql',
32│ }),
33│ relaySSR.getMiddleware(),
34│ ]),
35│ }),
36│ };
37│ },
node_modules/react-relay-network-modern/lib/definition.js.flow
[3] 8│ export type MiddlewareNextFn = (req: RelayRequestAny) => Promise<RelayResponse>;
node_modules/react-relay-network-modern/node8/RelayNetworkLayer.js.flow
[2] 33│ middlewares: Array<?Middleware | MiddlewareSync | MiddlewareRaw>,
node_modules/react-relay-network-modern/node8/definition.js.flow
[4][5] 7│ export type RelayRequestAny = RelayRequest | RelayRequestBatch;
src/server.js
[1] 33│ getMiddleware(args?: SSRGraphQLArgs | (() => Promise<SSRGraphQLArgs>)): Middleware {
The problem that you are using react-relay-network-modern/node8
with react-relay-network-modern-ssr
which under the hood uses react-relay-network-modern/lib/definitions.js.flow
.
So need to fix somehow react-relay-network-modern
where {node8,mjs,es}/definitions.js.flow
will re-export definitions from react-relay-network-modern/lib/definitions.js.flow
. In such case, all typedefs will be the same and no flow errors occur.
You may try to remove in your example /node8
from imports. After that flow will not throw errors.
@nodkz That work. So, we should not use react-relay-network-modern-ssr/node8
? Maybe we need to modify build-node8
to fix the flow files?
Better to fix build-node8. Can you fix it?
I use
react-relay-network-modern-ssr
withflow@0.101.0
and I get error: 1.Error ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ node_modules/react-relay-network-modern-ssr/node8/utils.js.flow:24:10 Cannot return JSON.stringify(...) because undefined [1] is incompatible with string [2]. node_modules/react-relay-network-modern-ssr/node8/utils.js.flow 21│ } 22│ [2] 23│ export function getCacheKey(queryID: string, variables: Object): string { 24│ return JSON.stringify(stableCopy({ queryID, variables })); 25│ } 26│ /private/tmp/flow/flowlib_3a473c68/core.js [1] 507│ ): string | void;
Error ┈┈┈ path-to-client/client.js:29:9 Cannot call RelayNetworkLayer with array literal bound to middlewares because in array element: • Either a call signature declaring the expected parameter / return type is missing in MiddlewareSync [1] but exists in Middleware [2]. • Or inexact RelayResponse [3] is incompatible with exact object type [4] in property subscribe.error of property execute. • Or RelayResponse [3] is incompatible with RelayResponse [5] in property subscribe.error of property execute. • Or RelayObservable [6] is incompatible with Promise [7] in property execute. • Or inexact RelayObservable [6] is incompatible with exact object type [4] in property execute. • Or RelayObservable [6] is incompatible with RelayResponse [5] in property execute. • Or a call signature declaring the expected parameter / return type is missing in MiddlewareSync [1] but exists in MiddlewareRaw [8]. path-to-client/client.js 21│ 22│ storeEnvironment = new Environment({ 23│ store, 24│ network: new RelayNetworkLayer([ 25│ cacheMiddleware({ 26│ size: 100, 27│ ttl: 60 * 1000, 28│ }), 29│ new RelaySSR(relayData).getMiddleware({ 30│ lookup: false, 31│ }), 32│ urlMiddleware({ 33│ url: (req: mixed) => 'http://localhost:8000/graphql', 34│ }), 35│ ]), 36│ }); 37│ 38│ return storeEnvironment; node_modules/react-relay-network-modern-ssr/node8/client.js.flow [1] 23│ getMiddleware(opts?: RelayClientSSRMiddlewareOpts): MiddlewareSync { node_modules/react-relay-network-modern/lib/definition.js.flow [6][3] 23│ ) => ?ObservableFromValue<QueryPayload>, node_modules/react-relay-network-modern/node8/RelayNetworkLayer.js.flow [2][8] 33│ middlewares: Array<?Middleware | MiddlewareSync | MiddlewareRaw>, node_modules/react-relay-network-modern/node8/definition.js.flow [4] 96│ | {| 97│ data?: ?PayloadData, 98│ errors?: Array<any>, 99│ rerunVariables?: Variables, 100│ |} [5] 101│ | RelayResponse; : [7] 115│ export type ObservableFromValue<T> = RelayObservable<T> | Promise<T> | T;
Error ┈┈ path-to-server/server.js:32:11 Cannot call RelayNetworkLayer with array literal bound to middlewares because in array element: • Either inexact Middleware [1] is incompatible with exact MiddlewareSync [2]. • Or RelayRequest [3] is incompatible with RelayRequest [4] in the first argument of the first argument. • Or RelayRequest [3] is incompatible with RelayRequestBatch [5] in the first argument of the first argument. path-to-server/server.js 25│ relaySSR, 26│ environment: new Environment({ 27│ store, 28│ network: new RelayNetworkLayer([ 29│ urlMiddleware({ 30│ url: (req: mixed) => 'http://localhost:8000/graphql', 31│ }), 32│ relaySSR.getMiddleware(), 33│ ]), 34│ }), 35│ }; 36│ }, node_modules/react-relay-network-modern-ssr/node8/server.js.flow [1] 33│ getMiddleware(args: SSRGraphQLArgs | (() => Promise<SSRGraphQLArgs>)): Middleware { node_modules/react-relay-network-modern/lib/definition.js.flow [3] 8│ export type MiddlewareNextFn = (req: RelayRequestAny) => Promise<RelayResponse>; node_modules/react-relay-network-modern/node8/RelayNetworkLayer.js.flow [2] 33│ middlewares: Array<?Middleware | MiddlewareSync | MiddlewareRaw>, node_modules/react-relay-network-modern/node8/definition.js.flow [4][5] 7│ export type RelayRequestAny = RelayRequest | RelayRequestBatch;
Error ┈┈ path-to-server/server.js:32:20 Cannot call relaySSR.getMiddleware because: • Either inexact undefined [1] is incompatible with exact SSRGraphQLArgs [2]. • Or undefined [1] is incompatible with function type [3]. path-to-server/server.js 29│ urlMiddleware({ 30│ url: (req: mixed) => 'http://localhost:8000/graphql', 31│ }), [1] 32│ relaySSR.getMiddleware(), 33│ ]), 34│ }), 35│ }; node_modules/react-relay-network-modern-ssr/node8/server.js.flow [2][3] 33│ getMiddleware(args: SSRGraphQLArgs | (() => Promise<SSRGraphQLArgs>)): Middleware {
Example code:
- server.js
... new Environment({ store, network: new RelayNetworkLayer([ urlMiddleware({ url: (req: mixed) => 'http://localhost:8000/graphql', }), relaySSR.getMiddleware(), ]), }) ...
- client.js
... new Environment({ store, network: new RelayNetworkLayer([ cacheMiddleware({ size: 100, ttl: 60 * 1000, }), new RelaySSR(relayData).getMiddleware({ lookup: false, }), urlMiddleware({ url: (req: mixed) => 'http://localhost:8000/graphql', }), ]), }); ...
@nodkz
I think we can fix 1
and 4
error at this pr
. When flow
has the more better way to fix the other problems, I will fix those problems in the other pr
.
Thanks a lot! 🙏
:tada: This PR is included in version 1.2.4 :tada:
The release is available on:
Your semantic-release bot :package::rocket:
@nodkz Thank for your help 👍 .
I use
react-relay-network-modern-ssr
withflow@0.101.0
and I get error: 1.2.
3.
4.
Example code: