rescript-relay 0.0.0-autocodesplit-09ee6f6c
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/CHANGELOG.md +942 -0
- package/README.md +111 -0
- package/cli/cli.js +472 -0
- package/compiler.js +11 -0
- package/package.json +65 -0
- package/postinstall.js +189 -0
- package/ppx-linux +0 -0
- package/ppx-macos-arm64 +0 -0
- package/ppx-macos-latest +0 -0
- package/ppx-windows-latest +0 -0
- package/relay-compiler-linux-musl/relay +0 -0
- package/relay-compiler-linux-x64/relay +0 -0
- package/relay-compiler-macos-arm64/relay +0 -0
- package/relay-compiler-macos-x64/relay +0 -0
- package/relay-compiler-win-x64/relay.exe +0 -0
- package/rescript.json +19 -0
- package/src/ReactDOMExperimental.bs.js +23 -0
- package/src/ReactDOMExperimental.res +16 -0
- package/src/ReactExperimental.bs.js +23 -0
- package/src/ReactExperimental.res +21 -0
- package/src/ReactExperimental.resi +18 -0
- package/src/RescriptRelay.bs.js +329 -0
- package/src/RescriptRelay.res +858 -0
- package/src/RescriptRelay.resi +897 -0
- package/src/RescriptRelayUtils.bs.js +76 -0
- package/src/RescriptRelayUtils.res +89 -0
- package/src/RescriptRelayUtils.resi +36 -0
- package/src/RescriptRelay_Fragment.bs.js +122 -0
- package/src/RescriptRelay_Fragment.res +243 -0
- package/src/RescriptRelay_Fragment.resi +85 -0
- package/src/RescriptRelay_Internal.bs.js +102 -0
- package/src/RescriptRelay_Internal.res +71 -0
- package/src/RescriptRelay_Internal.resi +20 -0
- package/src/RescriptRelay_Mutation.bs.js +57 -0
- package/src/RescriptRelay_Mutation.res +144 -0
- package/src/RescriptRelay_Mutation.resi +52 -0
- package/src/RescriptRelay_Query.bs.js +101 -0
- package/src/RescriptRelay_Query.res +177 -0
- package/src/RescriptRelay_Query.resi +62 -0
- package/src/RescriptRelay_RelayResolvers.bs.js +13 -0
- package/src/RescriptRelay_RelayResolvers.res +21 -0
- package/src/RescriptRelay_RelayResolvers.resi +10 -0
- package/src/RescriptRelay_Subscriptions.bs.js +24 -0
- package/src/RescriptRelay_Subscriptions.res +50 -0
- package/src/RescriptRelay_Subscriptions.resi +14 -0
- package/src/utils.js +418 -0
- package/src/utils.mjs +418 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
open RescriptRelay
|
|
2
|
+
|
|
3
|
+
type useQueryConfig = {
|
|
4
|
+
fetchKey?: string,
|
|
5
|
+
fetchPolicy?: fetchPolicy,
|
|
6
|
+
networkCacheConfig?: cacheConfig,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@module("react-relay")
|
|
10
|
+
external useLazyLoadQuery: (queryNode<'node>, 'variables, useQueryConfig) => 'response =
|
|
11
|
+
"useLazyLoadQuery"
|
|
12
|
+
|
|
13
|
+
let useQuery = (
|
|
14
|
+
~convertVariables: 'variables => 'variables,
|
|
15
|
+
~node: 'm,
|
|
16
|
+
~convertResponse: 'response => 'response,
|
|
17
|
+
) => {
|
|
18
|
+
/**
|
|
19
|
+
React hook for using this query.\n\n\
|
|
20
|
+
Prefer using `Query.useLoader()` or \
|
|
21
|
+
`YourQueryName_graphql.load()` in combination with \
|
|
22
|
+
`Query.usePreloaded()` to this whenever you can, as that will \
|
|
23
|
+
allow you to start loading data before your code actually \
|
|
24
|
+
renders.*/
|
|
25
|
+
(~variables: 'variables, ~fetchPolicy=?, ~fetchKey=?, ~networkCacheConfig=?) => {
|
|
26
|
+
useLazyLoadQuery(
|
|
27
|
+
node,
|
|
28
|
+
RescriptRelay_Internal.internal_cleanObjectFromUndefinedRaw(variables->convertVariables),
|
|
29
|
+
{
|
|
30
|
+
?fetchKey,
|
|
31
|
+
?fetchPolicy,
|
|
32
|
+
?networkCacheConfig,
|
|
33
|
+
},
|
|
34
|
+
)->(RescriptRelay_Internal.internal_useConvertedValue(convertResponse, _))
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type useQueryLoaderOptions = {
|
|
39
|
+
fetchPolicy?: fetchPolicy,
|
|
40
|
+
networkCacheConfig?: cacheConfig,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@module("react-relay")
|
|
44
|
+
external useQueryLoader: queryNode<'node> => (
|
|
45
|
+
Js.Nullable.t<'queryRef>,
|
|
46
|
+
('variables, useQueryLoaderOptions) => unit,
|
|
47
|
+
unit => unit,
|
|
48
|
+
) = "useQueryLoader"
|
|
49
|
+
|
|
50
|
+
let useLoader = (
|
|
51
|
+
~convertVariables: 'variables => 'variables,
|
|
52
|
+
~node: 'm,
|
|
53
|
+
~mkQueryRef: option<'queryRef> => option<'queryRef>,
|
|
54
|
+
) => {
|
|
55
|
+
() => {
|
|
56
|
+
let (nullableQueryRef, loadQueryFn, disposableFn) = useQueryLoader(node)
|
|
57
|
+
let loadQuery = React.useMemo1(
|
|
58
|
+
() => (~variables, ~fetchPolicy=?, ~networkCacheConfig=?) =>
|
|
59
|
+
loadQueryFn(variables->convertVariables, {?fetchPolicy, ?networkCacheConfig}),
|
|
60
|
+
[loadQueryFn],
|
|
61
|
+
)
|
|
62
|
+
(nullableQueryRef->Js.Nullable.toOption->mkQueryRef, loadQuery, disposableFn)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@module("react-relay")
|
|
67
|
+
external usePreloadedQuery: (queryNode<'node>, 'queryRef) => 'response = "usePreloadedQuery"
|
|
68
|
+
|
|
69
|
+
let usePreloaded = (
|
|
70
|
+
~node,
|
|
71
|
+
~convertResponse: 'response => 'response,
|
|
72
|
+
~mkQueryRef: 'queryRef => 'queryRef,
|
|
73
|
+
) => /** Combine this with `Query.useLoader` or \
|
|
74
|
+
`YourQueryName_graphql.load()` to use a query you've started \
|
|
75
|
+
preloading before rendering. */
|
|
76
|
+
(~queryRef: 'queryRef) => {
|
|
77
|
+
usePreloadedQuery(node, queryRef->mkQueryRef)->(
|
|
78
|
+
RescriptRelay_Internal.internal_useConvertedValue(convertResponse, _)
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@module("react-relay")
|
|
83
|
+
external fetchQuery: (
|
|
84
|
+
Environment.t,
|
|
85
|
+
queryNode<'node>,
|
|
86
|
+
'variables,
|
|
87
|
+
option<fetchQueryOptions>,
|
|
88
|
+
) => Observable.t<'response> = "fetchQuery"
|
|
89
|
+
|
|
90
|
+
let fetch = (
|
|
91
|
+
~node,
|
|
92
|
+
~convertResponse: 'response => 'response,
|
|
93
|
+
~convertVariables: 'variables => 'variables,
|
|
94
|
+
) => {
|
|
95
|
+
/**\n\
|
|
96
|
+
This fetches the query in a one-off fashion, and returns a \
|
|
97
|
+
`Belt.Result.t` in a callback for convenience. Use \
|
|
98
|
+
`Query.fetchPromised` if you need this but with promises.\n\n\
|
|
99
|
+
Please *avoid* using `Query.fetch` unless you really need it, \
|
|
100
|
+
since the data you fetch here isn't guaranteed to stick around \
|
|
101
|
+
in the store/cache unless you explicitly use it somewhere in \
|
|
102
|
+
your views.*/
|
|
103
|
+
(
|
|
104
|
+
~environment: Environment.t,
|
|
105
|
+
~variables: 'variables,
|
|
106
|
+
~onResult,
|
|
107
|
+
~networkCacheConfig=?,
|
|
108
|
+
~fetchPolicy=?,
|
|
109
|
+
) => {
|
|
110
|
+
open Observable
|
|
111
|
+
|
|
112
|
+
fetchQuery(
|
|
113
|
+
environment,
|
|
114
|
+
node,
|
|
115
|
+
variables->convertVariables,
|
|
116
|
+
Some({?networkCacheConfig, ?fetchPolicy}),
|
|
117
|
+
)
|
|
118
|
+
->subscribe(
|
|
119
|
+
makeObserver(
|
|
120
|
+
~next=res => onResult(Ok(res->convertResponse)),
|
|
121
|
+
~error=err => onResult(Error(err)),
|
|
122
|
+
),
|
|
123
|
+
)
|
|
124
|
+
->ignoreSubscription
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
let fetchPromised = (
|
|
129
|
+
~node,
|
|
130
|
+
~convertResponse: 'response => 'response,
|
|
131
|
+
~convertVariables: 'variables => 'variables,
|
|
132
|
+
) => {
|
|
133
|
+
/**Promise variant of `Query.fetch`.*/
|
|
134
|
+
(~environment: Environment.t, ~variables: 'variables, ~networkCacheConfig=?, ~fetchPolicy=?) => {
|
|
135
|
+
fetchQuery(
|
|
136
|
+
environment,
|
|
137
|
+
node,
|
|
138
|
+
variables->convertVariables,
|
|
139
|
+
Some({?networkCacheConfig, ?fetchPolicy}),
|
|
140
|
+
)
|
|
141
|
+
->Observable.toPromise
|
|
142
|
+
->Js.Promise2.then(res => res->convertResponse->Js.Promise2.resolve)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@module("relay-runtime")
|
|
147
|
+
external createOperationDescriptor: (queryNode<'node>, 'variables) => operationDescriptor =
|
|
148
|
+
"createOperationDescriptor"
|
|
149
|
+
|
|
150
|
+
let retain = (~node, ~convertVariables: 'variables => 'variables) => {
|
|
151
|
+
/**Calling with a set of variables will make Relay _disable \
|
|
152
|
+
garbage collection_ of this query (+ variables) until you \
|
|
153
|
+
explicitly dispose the `Disposable.t` you get back from this \
|
|
154
|
+
call.\n\n\
|
|
155
|
+
Useful for queries and data you know you want to keep in the \
|
|
156
|
+
store regardless of what happens (like it not being used by \
|
|
157
|
+
any view and therefore potentially garbage collected).*/
|
|
158
|
+
(~environment: Environment.t, ~variables: 'variables) => {
|
|
159
|
+
environment->Environment.retain(createOperationDescriptor(node, variables->convertVariables))
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
let commitLocalPayload = (
|
|
164
|
+
~node,
|
|
165
|
+
~convertVariables: 'variables => 'variables,
|
|
166
|
+
~convertWrapRawResponse: 'rawResponse => 'rawResponse,
|
|
167
|
+
) => {
|
|
168
|
+
/** This commits a payload into the store _locally only_. Useful \
|
|
169
|
+
for driving client-only state via Relay for example, or \
|
|
170
|
+
priming the cache with data you don't necessarily want to \
|
|
171
|
+
hit the server for. */
|
|
172
|
+
(~environment: Environment.t, ~variables: 'variables, ~payload: 'rawResponse) =>
|
|
173
|
+
environment->Environment.commitPayload(
|
|
174
|
+
createOperationDescriptor(node, variables->convertVariables),
|
|
175
|
+
payload->convertWrapRawResponse,
|
|
176
|
+
)
|
|
177
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
open RescriptRelay
|
|
2
|
+
|
|
3
|
+
let useQuery: (
|
|
4
|
+
~convertVariables: 'variables => 'variables,
|
|
5
|
+
~node: queryNode<'a>,
|
|
6
|
+
~convertResponse: 'response => 'response,
|
|
7
|
+
) => (
|
|
8
|
+
~variables: 'variables,
|
|
9
|
+
~fetchPolicy: fetchPolicy=?,
|
|
10
|
+
~fetchKey: string=?,
|
|
11
|
+
~networkCacheConfig: cacheConfig=?,
|
|
12
|
+
) => 'response
|
|
13
|
+
|
|
14
|
+
let useLoader: (
|
|
15
|
+
~convertVariables: 'variables => 'variables,
|
|
16
|
+
~node: queryNode<'a>,
|
|
17
|
+
~mkQueryRef: option<'queryRef> => option<'queryRef>,
|
|
18
|
+
) => unit => (
|
|
19
|
+
option<'queryRef>,
|
|
20
|
+
(~variables: 'variables, ~fetchPolicy: fetchPolicy=?, ~networkCacheConfig: cacheConfig=?) => unit,
|
|
21
|
+
unit => unit,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
let usePreloaded: (
|
|
25
|
+
~node: queryNode<'a>,
|
|
26
|
+
~convertResponse: 'response => 'response,
|
|
27
|
+
~mkQueryRef: 'queryRef => 'queryRef,
|
|
28
|
+
) => (~queryRef: 'queryRef) => 'response
|
|
29
|
+
|
|
30
|
+
let fetch: (
|
|
31
|
+
~node: queryNode<'a>,
|
|
32
|
+
~convertResponse: 'response => 'response,
|
|
33
|
+
~convertVariables: 'variables => 'variables,
|
|
34
|
+
) => (
|
|
35
|
+
~environment: Environment.t,
|
|
36
|
+
~variables: 'variables,
|
|
37
|
+
~onResult: result<'response, Js.Exn.t> => unit,
|
|
38
|
+
~networkCacheConfig: cacheConfig=?,
|
|
39
|
+
~fetchPolicy: fetchPolicy=?,
|
|
40
|
+
) => unit
|
|
41
|
+
|
|
42
|
+
let fetchPromised: (
|
|
43
|
+
~node: queryNode<'a>,
|
|
44
|
+
~convertResponse: 'response => 'response,
|
|
45
|
+
~convertVariables: 'variables => 'variables,
|
|
46
|
+
) => (
|
|
47
|
+
~environment: Environment.t,
|
|
48
|
+
~variables: 'variables,
|
|
49
|
+
~networkCacheConfig: cacheConfig=?,
|
|
50
|
+
~fetchPolicy: fetchPolicy=?,
|
|
51
|
+
) => promise<'response>
|
|
52
|
+
|
|
53
|
+
let retain: (
|
|
54
|
+
~node: queryNode<'a>,
|
|
55
|
+
~convertVariables: 'variables => 'variables,
|
|
56
|
+
) => (~environment: Environment.t, ~variables: 'variables) => Disposable.t
|
|
57
|
+
|
|
58
|
+
let commitLocalPayload: (
|
|
59
|
+
~node: queryNode<'a>,
|
|
60
|
+
~convertVariables: 'variables => 'variables,
|
|
61
|
+
~convertWrapRawResponse: 'rawResponse => 'rawResponse,
|
|
62
|
+
) => (~environment: Environment.t, ~variables: 'variables, ~payload: 'rawResponse) => unit
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var ResolverFragments = require("relay-runtime/lib/store/ResolverFragments");
|
|
5
|
+
|
|
6
|
+
function makeRelayResolver(node, convertFragment, resolver) {
|
|
7
|
+
return function (fRef) {
|
|
8
|
+
return resolver(convertFragment(ResolverFragments.readFragment(node, fRef)));
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.makeRelayResolver = makeRelayResolver;
|
|
13
|
+
/* relay-runtime/lib/store/ResolverFragments Not a pure module */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
open RescriptRelay
|
|
2
|
+
|
|
3
|
+
@module("relay-runtime/lib/store/ResolverFragments")
|
|
4
|
+
external readFragment_: (fragmentNode<'node>, 'fragmentRef) => 'fragment = "readFragment"
|
|
5
|
+
|
|
6
|
+
type resolver<'fragment, 't> = 'fragment => option<'t>
|
|
7
|
+
|
|
8
|
+
// This is abstract just to hide the implementation details that don't need to be known anyway.
|
|
9
|
+
type relayResolver
|
|
10
|
+
external mkRelayResolver: 'a => relayResolver = "%identity"
|
|
11
|
+
|
|
12
|
+
let makeRelayResolver = (
|
|
13
|
+
~node,
|
|
14
|
+
~convertFragment: 'fragment => 'fragment,
|
|
15
|
+
resolver: resolver<'fragment, 't>,
|
|
16
|
+
) => {
|
|
17
|
+
let relayResolver = fRef => {
|
|
18
|
+
resolver(readFragment_(node, fRef)->convertFragment)
|
|
19
|
+
}
|
|
20
|
+
relayResolver->mkRelayResolver
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var RelayRuntime = require("relay-runtime");
|
|
5
|
+
|
|
6
|
+
function subscribe(node, convertVariables, convertResponse) {
|
|
7
|
+
return function (environment, variables, onCompleted, onError, onNext, updater) {
|
|
8
|
+
return RelayRuntime.requestSubscription(environment, {
|
|
9
|
+
subscription: node,
|
|
10
|
+
variables: convertVariables(variables),
|
|
11
|
+
onCompleted: onCompleted,
|
|
12
|
+
onError: onError,
|
|
13
|
+
onNext: onNext !== undefined ? (function (response) {
|
|
14
|
+
onNext(convertResponse(response));
|
|
15
|
+
}) : undefined,
|
|
16
|
+
updater: updater !== undefined ? (function (store, response) {
|
|
17
|
+
updater(store, convertResponse(response));
|
|
18
|
+
}) : undefined
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
exports.subscribe = subscribe;
|
|
24
|
+
/* relay-runtime Not a pure module */
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
open RescriptRelay
|
|
2
|
+
|
|
3
|
+
type updaterFn<'response> = (RecordSourceSelectorProxy.t, 'response) => unit
|
|
4
|
+
type subscriptionConfig<'node, 'variables, 'response> = {
|
|
5
|
+
subscription: subscriptionNode<'node>,
|
|
6
|
+
variables: 'variables,
|
|
7
|
+
onCompleted?: unit => unit,
|
|
8
|
+
onError?: Js.Exn.t => unit,
|
|
9
|
+
onNext?: 'response => unit,
|
|
10
|
+
updater?: updaterFn<'response>,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@module("relay-runtime")
|
|
14
|
+
external requestSubscription_: (
|
|
15
|
+
Environment.t,
|
|
16
|
+
subscriptionConfig<'node, 'variables, 'response>,
|
|
17
|
+
) => Disposable.t = "requestSubscription"
|
|
18
|
+
|
|
19
|
+
let subscribe = (
|
|
20
|
+
~node,
|
|
21
|
+
~convertVariables: 'variables => 'variables,
|
|
22
|
+
~convertResponse: 'response => 'response,
|
|
23
|
+
) => {
|
|
24
|
+
(
|
|
25
|
+
~environment: Environment.t,
|
|
26
|
+
~variables: 'variables,
|
|
27
|
+
~onCompleted=?,
|
|
28
|
+
~onError=?,
|
|
29
|
+
~onNext=?,
|
|
30
|
+
~updater=?,
|
|
31
|
+
) => {
|
|
32
|
+
requestSubscription_(
|
|
33
|
+
environment,
|
|
34
|
+
{
|
|
35
|
+
?onCompleted,
|
|
36
|
+
subscription: node,
|
|
37
|
+
variables: variables->convertVariables,
|
|
38
|
+
?onError,
|
|
39
|
+
onNext: ?switch onNext {
|
|
40
|
+
| Some(onNext) => Some(response => onNext(response->convertResponse))
|
|
41
|
+
| None => None
|
|
42
|
+
},
|
|
43
|
+
updater: ?switch updater {
|
|
44
|
+
| Some(updater) => Some((store, response) => updater(store, response->convertResponse))
|
|
45
|
+
| None => None
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
open RescriptRelay
|
|
2
|
+
|
|
3
|
+
let subscribe: (
|
|
4
|
+
~node: subscriptionNode<'a>,
|
|
5
|
+
~convertVariables: 'variables => 'variables,
|
|
6
|
+
~convertResponse: 'response => 'response,
|
|
7
|
+
) => (
|
|
8
|
+
~environment: Environment.t,
|
|
9
|
+
~variables: 'variables,
|
|
10
|
+
~onCompleted: unit => unit=?,
|
|
11
|
+
~onError: Js.Exn.t => unit=?,
|
|
12
|
+
~onNext: 'response => unit=?,
|
|
13
|
+
~updater: (RecordSourceSelectorProxy.t, 'response) => unit=?,
|
|
14
|
+
) => Disposable.t
|