Skip to content

Commit 64aaa9f

Browse files
committed
support @apply.transforms for applying transforms, and add migrations for Js_promise and Js_promise2
1 parent 0c46267 commit 64aaa9f

File tree

10 files changed

+564
-29
lines changed

10 files changed

+564
-29
lines changed

packages/@rescript/runtime/Js_promise.res

Lines changed: 95 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,16 @@ https://rescript-lang.org/docs/manual/latest/promise#promise-legacy
3232

3333
@@warning("-103")
3434

35+
@deprecated({
36+
reason: "Use `promise` directly instead.",
37+
migrate: %replace.type(: promise),
38+
})
3539
type t<+'a> = promise<'a>
40+
41+
@deprecated({
42+
reason: "Use `exn` directly instead.",
43+
migrate: %replace.type(: exn),
44+
})
3645
type error = Js_promise2.error
3746

3847
/*
@@ -43,29 +52,75 @@ type error
4352
```
4453
*/
4554

55+
@deprecated({
56+
reason: "Use `Promise.make` instead.",
57+
migrate: Promise.make(
58+
@apply.transforms(["labelledToUnlabelledArgumentsInFnDefinition"])
59+
%insert.unlabelledArgument(0),
60+
),
61+
})
4662
@new
4763
external make: ((~resolve: 'a => unit, ~reject: exn => unit) => unit) => promise<'a> = "Promise"
4864

4965
/* `make (fun resolve reject -> .. )` */
50-
@val @scope("Promise") external resolve: 'a => promise<'a> = "resolve"
51-
@val @scope("Promise") external reject: exn => promise<'a> = "reject"
52-
53-
@val @scope("Promise") external all: array<promise<'a>> => promise<array<'a>> = "all"
54-
55-
@val @scope("Promise") external all2: ((promise<'a0>, promise<'a1>)) => promise<('a0, 'a1)> = "all"
56-
57-
@val @scope("Promise")
66+
@deprecated({
67+
reason: "Use `Promise.resolve` instead.",
68+
migrate: Promise.resolve(),
69+
})
70+
@val
71+
@scope("Promise")
72+
external resolve: 'a => promise<'a> = "resolve"
73+
@deprecated({
74+
reason: "Use `Promise.reject` instead.",
75+
migrate: Promise.reject(),
76+
})
77+
@val
78+
@scope("Promise")
79+
external reject: exn => promise<'a> = "reject"
80+
81+
@deprecated({
82+
reason: "Use `Promise.all` instead.",
83+
migrate: Promise.all(),
84+
})
85+
@val
86+
@scope("Promise")
87+
external all: array<promise<'a>> => promise<array<'a>> = "all"
88+
89+
@deprecated({
90+
reason: "Use `Promise.all2` instead.",
91+
migrate: Promise.all2(),
92+
})
93+
@val
94+
@scope("Promise")
95+
external all2: ((promise<'a0>, promise<'a1>)) => promise<('a0, 'a1)> = "all"
96+
97+
@deprecated({
98+
reason: "Use `Promise.all3` instead.",
99+
migrate: Promise.all3(),
100+
})
101+
@val
102+
@scope("Promise")
58103
external all3: ((promise<'a0>, promise<'a1>, promise<'a2>)) => promise<('a0, 'a1, 'a2)> = "all"
59104

60-
@val @scope("Promise")
105+
@deprecated({
106+
reason: "Use `Promise.all4` instead.",
107+
migrate: Promise.all4(),
108+
})
109+
@val
110+
@scope("Promise")
61111
external all4: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>)) => promise<(
62112
'a0,
63113
'a1,
64114
'a2,
65115
'a3,
66116
)> = "all"
67117

68-
@val @scope("Promise")
118+
@deprecated({
119+
reason: "Use `Promise.all5` instead.",
120+
migrate: Promise.all5(),
121+
})
122+
@val
123+
@scope("Promise")
69124
external all5: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise<'a4>)) => promise<(
70125
'a0,
71126
'a1,
@@ -74,18 +129,44 @@ external all5: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise
74129
'a4,
75130
)> = "all"
76131

77-
@val @scope("Promise")
132+
@deprecated({
133+
reason: "Use `Promise.all6` instead.",
134+
migrate: Promise.all6(),
135+
})
136+
@val
137+
@scope("Promise")
78138
external all6: (
79139
(promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise<'a4>, promise<'a5>)
80140
) => promise<('a0, 'a1, 'a2, 'a3, 'a4, 'a5)> = "all"
81141

82-
@val @scope("Promise") external race: array<promise<'a>> => promise<'a> = "race"
83-
84-
@send external then_: (promise<'a>, 'a => promise<'b>) => promise<'b> = "then"
142+
@deprecated({
143+
reason: "Use `Promise.race` instead.",
144+
migrate: Promise.race(),
145+
})
146+
@val
147+
@scope("Promise")
148+
external race: array<promise<'a>> => promise<'a> = "race"
149+
150+
@deprecated({
151+
reason: "Use `Promise.then` instead.",
152+
migrate: Promise.then(),
153+
})
154+
@send
155+
external then_: (promise<'a>, 'a => promise<'b>) => promise<'b> = "then"
156+
@deprecated({
157+
reason: "Use `Promise.then` instead.",
158+
migrate: Promise.then(%insert.unlabelledArgument(1), %insert.unlabelledArgument(0)),
159+
migrateInPipeChain: Promise.then(%insert.unlabelledArgument(0)),
160+
})
85161
let then_ = (arg1, obj) => then_(obj, arg1)
86162

87163
@send
88164
external catch: (promise<'a>, error => promise<'a>) => promise<'a> = "catch"
165+
@deprecated({
166+
reason: "Use `Promise.catch` instead.",
167+
migrate: Promise.catch(%insert.unlabelledArgument(1), %insert.unlabelledArgument(0)),
168+
migrateInPipeChain: Promise.catch(%insert.unlabelledArgument(0)),
169+
})
89170
let catch = (arg1, obj) => catch(obj, arg1)
90171
/* ` p|> catch handler`
91172
Note in JS the returned promise type is actually runtime dependent,
Lines changed: 78 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,100 @@
1+
@deprecated({
2+
reason: "Use `promise` directly instead.",
3+
migrate: %replace.type(: promise),
4+
})
15
type t<+'a> = promise<'a>
26
type error
37

48
/** Type-safe t-first then */
9+
@deprecated({
10+
reason: "Use `Promise.then` instead.",
11+
migrate: Promise.then(),
12+
})
513
let then: (promise<'a>, 'a => promise<'b>) => promise<'b> = %raw(`
614
function(p, cont) {
715
return Promise.resolve(p).then(cont)
816
}
917
`)
1018

1119
/** Type-safe t-first catch */
20+
@deprecated({
21+
reason: "Use `Promise.catch` instead.",
22+
migrate: Promise.catch(),
23+
})
1224
let catch: (promise<'a>, error => promise<'a>) => promise<'a> = %raw(`
1325
function(p, cont) {
1426
return Promise.resolve(p).catch(cont)
1527
}
1628
`)
1729

30+
@deprecated({
31+
reason: "Use `Promise.make` instead.",
32+
migrate: Promise.make(
33+
@apply.transforms(["labelledToUnlabelledArgumentsInFnDefinition"])
34+
%insert.unlabelledArgument(0),
35+
),
36+
})
1837
@new
1938
external make: ((~resolve: 'a => unit, ~reject: exn => unit) => unit) => promise<'a> = "Promise"
2039

21-
@val @scope("Promise") external resolve: 'a => promise<'a> = "resolve"
22-
@val @scope("Promise") external reject: exn => promise<'a> = "reject"
40+
@deprecated({
41+
reason: "Use `Promise.resolve` instead.",
42+
migrate: Promise.resolve(),
43+
})
44+
@val
45+
@scope("Promise")
46+
external resolve: 'a => promise<'a> = "resolve"
47+
@deprecated({
48+
reason: "Use `Promise.reject` instead.",
49+
migrate: Promise.reject(),
50+
})
51+
@val
52+
@scope("Promise")
53+
external reject: exn => promise<'a> = "reject"
2354

24-
@val @scope("Promise") external all: array<promise<'a>> => promise<array<'a>> = "all"
55+
@deprecated({
56+
reason: "Use `Promise.all` instead.",
57+
migrate: Promise.all(),
58+
})
59+
@val
60+
@scope("Promise")
61+
external all: array<promise<'a>> => promise<array<'a>> = "all"
2562

26-
@val @scope("Promise") external all2: ((promise<'a0>, promise<'a1>)) => promise<('a0, 'a1)> = "all"
63+
@deprecated({
64+
reason: "Use `Promise.all2` instead.",
65+
migrate: Promise.all2(),
66+
})
67+
@val
68+
@scope("Promise")
69+
external all2: ((promise<'a0>, promise<'a1>)) => promise<('a0, 'a1)> = "all"
2770

28-
@val @scope("Promise")
71+
@deprecated({
72+
reason: "Use `Promise.all3` instead.",
73+
migrate: Promise.all3(),
74+
})
75+
@val
76+
@scope("Promise")
2977
external all3: ((promise<'a0>, promise<'a1>, promise<'a2>)) => promise<('a0, 'a1, 'a2)> = "all"
3078

31-
@val @scope("Promise")
79+
@deprecated({
80+
reason: "Use `Promise.all4` instead.",
81+
migrate: Promise.all4(),
82+
})
83+
@val
84+
@scope("Promise")
3285
external all4: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>)) => promise<(
3386
'a0,
3487
'a1,
3588
'a2,
3689
'a3,
3790
)> = "all"
3891

39-
@val @scope("Promise")
92+
@deprecated({
93+
reason: "Use `Promise.all5` instead.",
94+
migrate: Promise.all5(),
95+
})
96+
@val
97+
@scope("Promise")
4098
external all5: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise<'a4>)) => promise<(
4199
'a0,
42100
'a1,
@@ -45,12 +103,23 @@ external all5: ((promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise
45103
'a4,
46104
)> = "all"
47105

48-
@val @scope("Promise")
106+
@deprecated({
107+
reason: "Use `Promise.all6` instead.",
108+
migrate: Promise.all6(),
109+
})
110+
@val
111+
@scope("Promise")
49112
external all6: (
50113
(promise<'a0>, promise<'a1>, promise<'a2>, promise<'a3>, promise<'a4>, promise<'a5>)
51114
) => promise<('a0, 'a1, 'a2, 'a3, 'a4, 'a5)> = "all"
52115

53-
@val @scope("Promise") external race: array<promise<'a>> => promise<'a> = "race"
116+
@deprecated({
117+
reason: "Use `Promise.race` instead.",
118+
migrate: Promise.race(),
119+
})
120+
@val
121+
@scope("Promise")
122+
external race: array<promise<'a>> => promise<'a> = "race"
54123

55124
external unsafe_async: 'a => promise<'a> = "%identity"
56125
external unsafe_await: promise<'a> => 'a = "%await"
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
let p1 = Promise.resolve(1)
2+
let p2 = Promise.reject(Failure("err"))
3+
4+
let all1 = Promise.all([Promise.resolve(1), Promise.resolve(2)])
5+
let all2 = Promise.all2((Promise.resolve(1), Promise.resolve(2)))
6+
let all3 = Promise.all3((Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)))
7+
let all4 = Promise.all4((
8+
Promise.resolve(1),
9+
Promise.resolve(2),
10+
Promise.resolve(3),
11+
Promise.resolve(4),
12+
))
13+
let all5 = Promise.all5((
14+
Promise.resolve(1),
15+
Promise.resolve(2),
16+
Promise.resolve(3),
17+
Promise.resolve(4),
18+
Promise.resolve(5),
19+
))
20+
let all6 = Promise.all6((
21+
Promise.resolve(1),
22+
Promise.resolve(2),
23+
Promise.resolve(3),
24+
Promise.resolve(4),
25+
Promise.resolve(5),
26+
Promise.resolve(6),
27+
))
28+
29+
let race1 = Promise.race([Promise.resolve(10), Promise.resolve(20)])
30+
31+
let thenPipe = Promise.resolve(1)->Js.Promise.then_(x => Promise.resolve(x + 1), _)
32+
let thenDirect = Js.Promise.then_(x => Promise.resolve(x + 1), Promise.resolve(1))
33+
34+
// Type alias migration
35+
external p: promise<int> = "p"
36+
37+
// let catchPipe = Js.Promise.resolve(1)->Js.Promise.catch(_e => Js.Promise.resolve(0), _)
38+
// let catchDirect = Js.Promise.catch(_e => Js.Promise.resolve(0), Js.Promise.resolve(1))
39+
let make1 = Promise.make((resolve, reject) => resolve(1))
40+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
let p1 = Promise.resolve(1)
2+
let p2 = Promise.reject(Failure("err"))
3+
4+
let all1 = Promise.all([Promise.resolve(1), Promise.resolve(2)])
5+
let all2 = Promise.all2((Promise.resolve(1), Promise.resolve(2)))
6+
let all3 = Promise.all3((Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)))
7+
8+
let all4 = Promise.all4((
9+
Promise.resolve(1),
10+
Promise.resolve(2),
11+
Promise.resolve(3),
12+
Promise.resolve(4),
13+
))
14+
let all5 = Promise.all5((
15+
Promise.resolve(1),
16+
Promise.resolve(2),
17+
Promise.resolve(3),
18+
Promise.resolve(4),
19+
Promise.resolve(5),
20+
))
21+
let all6 = Promise.all6((
22+
Promise.resolve(1),
23+
Promise.resolve(2),
24+
Promise.resolve(3),
25+
Promise.resolve(4),
26+
Promise.resolve(5),
27+
Promise.resolve(6),
28+
))
29+
30+
let race1 = Promise.race([Promise.resolve(10), Promise.resolve(20)])
31+
32+
let thenPipe = Promise.resolve(1)->Js.Promise2.then(x => Promise.resolve(x + 1))
33+
let thenDirect = Js.Promise2.then(Promise.resolve(1), x => Promise.resolve(x + 1))
34+
35+
// Type alias migration
36+
external p2: promise<int> = "p2"
37+
38+
// let catchPipe = Js.Promise2.resolve(1)->Js.Promise2.catch(_e => Js.Promise2.resolve(0))
39+
// let catchDirect = Js.Promise2.catch(Js.Promise2.resolve(1), _e => Js.Promise2.resolve(0))
40+
let make1 = Promise.make((resolve, reject) => resolve(1))
41+

0 commit comments

Comments
 (0)