@colisweb/rescript-toolkit 5.7.0 → 5.8.0
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colisweb/rescript-toolkit",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rescript clean",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@colisweb/bs-react-intl-extractor-bin": "0.12.2",
|
|
31
31
|
"@datadog/browser-rum": "5.8.0",
|
|
32
|
-
"@dck/rescript-ky": "2.0.
|
|
32
|
+
"@dck/rescript-ky": "2.0.3",
|
|
33
33
|
"@dck/rescript-promise": "1.1.0",
|
|
34
34
|
"@dck/restorative": "1.1.0",
|
|
35
35
|
"@greenlabs/ppx-spice": "0.2.1",
|
package/rescript.json
CHANGED
|
@@ -34,7 +34,9 @@
|
|
|
34
34
|
"@dck/rescript-ky"
|
|
35
35
|
],
|
|
36
36
|
"ppx-flags": [
|
|
37
|
-
[
|
|
37
|
+
[
|
|
38
|
+
"@greenlabs/ppx-spice/ppx"
|
|
39
|
+
],
|
|
38
40
|
"lenses-ppx/ppx",
|
|
39
41
|
"res-react-intl/ppx"
|
|
40
42
|
],
|
|
@@ -46,6 +48,7 @@
|
|
|
46
48
|
"-bs-super-errors",
|
|
47
49
|
"-bs-no-version-header",
|
|
48
50
|
"-open Belt",
|
|
51
|
+
"-open Toolkit__Primitives_Result",
|
|
49
52
|
"-open Cx"
|
|
50
53
|
]
|
|
51
|
-
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Result = {
|
|
2
|
+
include Belt.Result
|
|
3
|
+
|
|
4
|
+
let get = result =>
|
|
5
|
+
switch result {
|
|
6
|
+
| Ok(v) => Some(v)
|
|
7
|
+
| Error(_) => None
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let mapError = (result: t<'a, 'b>, fn: 'b => 'c) => {
|
|
11
|
+
switch result {
|
|
12
|
+
| Ok(_) as ok => ok
|
|
13
|
+
| Error(err) => Error(fn(err))
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let mapOk = map
|
|
18
|
+
}
|
package/src/request/Request.res
CHANGED
|
@@ -8,13 +8,13 @@ type requestConfig<'apiError, 'response> = {
|
|
|
8
8
|
path: string,
|
|
9
9
|
requestOptions: Ky.requestOptions<Js.Json.t>,
|
|
10
10
|
key?: array<string>,
|
|
11
|
-
mapCustomErrors?: Ky.error => error<'apiError
|
|
12
|
-
mapRawResponse?:
|
|
11
|
+
mapCustomErrors?: Ky.error => Promise.t<error<'apiError>>,
|
|
12
|
+
mapRawResponse?: result<Js.Json.t, Ky.error> => Promise.t<result<'response, error<'apiError>>>,
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
%%private(
|
|
16
16
|
let fetch = (
|
|
17
|
-
~instance
|
|
17
|
+
~instance,
|
|
18
18
|
~path,
|
|
19
19
|
~requestOptions,
|
|
20
20
|
~mapRawResponse=?,
|
|
@@ -25,35 +25,40 @@ type requestConfig<'apiError, 'response> = {
|
|
|
25
25
|
// - parseJson
|
|
26
26
|
// - abort controller signal
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
})
|
|
31
|
-
kyResponse
|
|
32
|
-
->Ky.Response.json()
|
|
28
|
+
(instance->Ky.Instance.asCallable)(path, ~options=requestOptions)
|
|
29
|
+
->Ky.Response.jsonFromPromise()
|
|
33
30
|
->Promise.Js.fromBsPromise
|
|
34
31
|
->Promise.Js.toResult
|
|
35
32
|
->Promise.flatMap(result => {
|
|
36
33
|
let result: result<Js.Json.t, Ky.error> = result->Obj.magic
|
|
37
34
|
|
|
38
35
|
let mapRawResponseOrDecode = switch mapRawResponse {
|
|
39
|
-
| Some(fn) => fn(result
|
|
36
|
+
| Some(fn) => fn(result)
|
|
40
37
|
| None =>
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
Promise.resolved(
|
|
39
|
+
switch result {
|
|
40
|
+
| Error(err) => Error(Unknown(err))
|
|
41
|
+
| Ok(response) =>
|
|
42
|
+
switch response->response_decode {
|
|
43
|
+
| Ok(response) => Ok(response)
|
|
44
|
+
| Error(decodeError) => Error(DecodeError(decodeError))
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
)
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
let mappedCustomErrors =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
let mappedCustomErrors = mapRawResponseOrDecode->Promise.flatMapError(error => {
|
|
51
|
+
switch error {
|
|
52
|
+
| Unknown(err) =>
|
|
53
|
+
mapCustomErrors->Option.mapWithDefault(
|
|
54
|
+
Promise.resolved(Error(Unknown(err))),
|
|
55
|
+
fn => fn(err)->Promise.map(v => {Error(v)}),
|
|
56
|
+
)
|
|
57
|
+
| err => Promise.resolved(Error(err))
|
|
58
|
+
}
|
|
59
|
+
})
|
|
55
60
|
|
|
56
|
-
|
|
61
|
+
mappedCustomErrors
|
|
57
62
|
})
|
|
58
63
|
}
|
|
59
64
|
)
|
|
@@ -127,7 +132,7 @@ let useOptionalFetcher = (
|
|
|
127
132
|
and type error = error
|
|
128
133
|
),
|
|
129
134
|
argument: option<argument>,
|
|
130
|
-
): Toolkit__Hooks.fetcher<response
|
|
135
|
+
): Toolkit__Hooks.fetcher<option<response>> => {
|
|
131
136
|
let module(C) = config
|
|
132
137
|
|
|
133
138
|
Toolkit__Hooks.useOptionalFetcher(
|
|
@@ -210,3 +215,12 @@ let decodeResponseError = (responseError, decoder) => {
|
|
|
210
215
|
->Promise.mapError(Obj.magic)
|
|
211
216
|
->Promise.flatMapOk(json => json->decoder->Promise.resolved)
|
|
212
217
|
}
|
|
218
|
+
|
|
219
|
+
let decodeRawResponse = (result: result<Js.Json.t, Ky.error>, decoder): result<
|
|
220
|
+
'a,
|
|
221
|
+
error<'apiError>,
|
|
222
|
+
> => {
|
|
223
|
+
result
|
|
224
|
+
->Result.mapError(err => Unknown(err))
|
|
225
|
+
->Result.flatMap(json => json->decoder->Result.mapError(err => DecodeError(err)))
|
|
226
|
+
}
|
|
@@ -83,7 +83,7 @@ let make = (
|
|
|
83
83
|
}}
|
|
84
84
|
value={value->Js.Nullable.fromOption}
|
|
85
85
|
nullable={true}>
|
|
86
|
-
<div className="relative z-0 w-full cursor-default rounded bg-white text-left
|
|
86
|
+
<div className="relative z-0 w-full cursor-default rounded bg-white text-left">
|
|
87
87
|
<HeadlessUi.Combobox.Input
|
|
88
88
|
?placeholder
|
|
89
89
|
?autoFocus
|
|
@@ -91,7 +91,7 @@ let make = (
|
|
|
91
91
|
onChange=onInputChange
|
|
92
92
|
autocomplete="off"
|
|
93
93
|
className={cx([
|
|
94
|
-
"w-full border py-2 rounded pl-3 pr-10 text-
|
|
94
|
+
"w-full border py-2 rounded pl-3 pr-10 text-base leading-5 text-gray-900",
|
|
95
95
|
isInvalid ? "border-danger-500" : "border-gray-300",
|
|
96
96
|
inputClassName,
|
|
97
97
|
])}
|
package/src/vendors/Swr.res
CHANGED
|
@@ -95,6 +95,8 @@ module SwrConfig = {
|
|
|
95
95
|
external mutate0: (t, SwrKey.t) => unit = "mutate"
|
|
96
96
|
@send
|
|
97
97
|
external mutateByKey: (t, key) => unit = "mutate"
|
|
98
|
+
@send
|
|
99
|
+
external mutateByKeyWithParams: (t, key, 'data, bool) => unit = "mutate"
|
|
98
100
|
|
|
99
101
|
@send
|
|
100
102
|
external mutate: (t, SwrKey.t, 'data, bool) => unit = "mutate"
|