@@ -2,7 +2,6 @@ open GenTypeCommon
2
2
3
3
type t =
4
4
| CircularC of string * t
5
- | FunctionC of functionC
6
5
| IdentC
7
6
| OptionC of t
8
7
| PromiseC of t
@@ -12,41 +11,9 @@ and groupedArgConverter =
12
11
| ArgConverter of t
13
12
| GroupConverter of (string * optional * t) list
14
13
15
- and functionC = {
16
- funArgConverters : groupedArgConverter list ;
17
- componentName : string option ;
18
- isHook : bool ;
19
- retConverter : t ;
20
- typeVars : string list ;
21
- uncurried : bool ;
22
- }
23
-
24
14
let rec toString converter =
25
15
match converter with
26
16
| CircularC (s , c ) -> " circular(" ^ s ^ " " ^ toString c ^ " )"
27
- | FunctionC {funArgConverters; retConverter; uncurried} ->
28
- " fn"
29
- ^ (match uncurried with
30
- | true -> " Uncurried"
31
- | false -> " " )
32
- ^ " ("
33
- ^ (funArgConverters
34
- |> List. map (fun groupedArgConverter ->
35
- match groupedArgConverter with
36
- | ArgConverter conv -> " (" ^ " _" ^ " :" ^ toString conv ^ " )"
37
- | GroupConverter groupConverters ->
38
- " {|"
39
- ^ (groupConverters
40
- |> List. map (fun (s , optional , argConverter ) ->
41
- s
42
- ^ (match optional = Optional with
43
- | true -> " ?"
44
- | false -> " " )
45
- ^ " :" ^ toString argConverter)
46
- |> String. concat " , " )
47
- ^ " |}" )
48
- |> String. concat " , " )
49
- ^ " -> " ^ toString retConverter ^ " )"
50
17
| IdentC -> " id"
51
18
| OptionC c -> " option(" ^ toString c ^ " )"
52
19
| PromiseC c -> " promise(" ^ toString c ^ " )"
@@ -63,29 +30,12 @@ let typeGetConverterNormalized ~config ~inline ~lookupId ~typeNameIsInterface
63
30
let _, tNormalized = t |> visit ~visited in
64
31
(IdentC , Array (tNormalized, mutable_))
65
32
| Dict _ -> (IdentC , normalized_)
66
- | Function
67
- ({argTypes; componentName; retType; typeVars; uncurried} as function_)
68
- ->
33
+ | Function ({argTypes; retType} as function_ ) ->
69
34
let argConverted =
70
35
argTypes |> List. map (argTypeToGroupedArgConverter ~visited )
71
36
in
72
- let funArgConverters = argConverted |> List. map fst in
73
- let retConverter, retNormalized = retType |> visit ~visited in
74
- let isHook =
75
- match argTypes with
76
- | [{aType = Object (_, fields)}] ->
77
- retType |> EmitType. isTypeFunctionComponent ~fields
78
- | _ -> false
79
- in
80
- ( FunctionC
81
- {
82
- funArgConverters;
83
- componentName;
84
- isHook;
85
- retConverter;
86
- typeVars;
87
- uncurried;
88
- },
37
+ let _, retNormalized = retType |> visit ~visited in
38
+ ( IdentC ,
89
39
Function
90
40
{
91
41
function_ with
@@ -215,15 +165,6 @@ let typeGetNormalized ~config ~inline ~lookupId ~typeNameIsInterface type_ =
215
165
let rec converterIsIdentity ~config ~toJS converter =
216
166
match converter with
217
167
| CircularC (_ , c ) -> c |> converterIsIdentity ~config ~to JS
218
- | FunctionC {funArgConverters; retConverter; uncurried} ->
219
- retConverter |> converterIsIdentity ~config ~to JS
220
- && ((not toJS) || uncurried || funArgConverters |> List. length < = 1 )
221
- && funArgConverters
222
- |> List. for_all (fun groupedArgConverter ->
223
- match groupedArgConverter with
224
- | ArgConverter argConverter ->
225
- argConverter |> converterIsIdentity ~config ~to JS:(not toJS)
226
- | GroupConverter _ -> false )
227
168
| IdentC -> true
228
169
| OptionC c -> c |> converterIsIdentity ~config ~to JS
229
170
| PromiseC c -> c |> converterIsIdentity ~config ~to JS
@@ -240,106 +181,6 @@ let rec apply ~(config : Config.t) ~converter ~indent ~nameGen ~toJS
240
181
~comment:
241
182
(" WARNING: circular type " ^ s ^ " . Only shallow converter applied." )
242
183
|> apply ~config ~converter: c ~indent ~name Gen ~to JS ~variant Tables
243
- | FunctionC
244
- {
245
- funArgConverters;
246
- componentName;
247
- isHook;
248
- retConverter;
249
- typeVars;
250
- uncurried;
251
- } ->
252
- let resultName = EmitText. resultName ~name Gen in
253
- let indent1 = indent |> Indent. more in
254
- let indent2 = indent1 |> Indent. more in
255
- let mkReturn x =
256
- " const " ^ resultName ^ " = " ^ x ^ " ;"
257
- ^ Indent. break ~indent: indent1
258
- ^ " return "
259
- ^ (resultName
260
- |> apply ~config ~converter: retConverter ~indent: indent2 ~name Gen ~to JS
261
- ~variant Tables)
262
- in
263
- let convertArg i groupedArgConverter =
264
- match groupedArgConverter with
265
- | ArgConverter argConverter ->
266
- let varName = i + 1 |> EmitText. argi ~name Gen in
267
- let notToJS = not toJS in
268
- ( [varName],
269
- [
270
- varName
271
- |> apply ~config ~converter: argConverter ~indent: indent2 ~name Gen
272
- ~to JS:notToJS ~variant Tables;
273
- ] )
274
- | GroupConverter groupConverters ->
275
- let notToJS = not toJS in
276
- if toJS then
277
- let varName = i + 1 |> EmitText. argi ~name Gen in
278
- ( [varName],
279
- groupConverters
280
- |> List. map (fun (label , optional , argConverter ) ->
281
- varName
282
- |> EmitText. fieldAccess ~label
283
- |> apply ~config
284
- ~converter:
285
- (match
286
- optional = Optional
287
- && not
288
- (argConverter
289
- |> converterIsIdentity ~config ~to JS:notToJS)
290
- with
291
- | true -> OptionC argConverter
292
- | false -> argConverter)
293
- ~indent: indent2 ~name Gen ~to JS:notToJS ~variant Tables)
294
- )
295
- else
296
- let varNames =
297
- groupConverters
298
- |> List. map (fun (s , _optional , _argConverter ) ->
299
- s |> EmitText. arg ~name Gen)
300
- in
301
- let varNamesArr = varNames |> Array. of_list in
302
- let fieldValues =
303
- groupConverters
304
- |> List. mapi (fun i (s , _optional , argConverter ) ->
305
- s ^ " :"
306
- ^ ((varNamesArr.(i) [@ doesNotRaise])
307
- |> apply ~config ~converter: argConverter ~indent: indent2
308
- ~name Gen ~to JS:notToJS ~variant Tables))
309
- |> String. concat " , "
310
- in
311
- (varNames, [" {" ^ fieldValues ^ " }" ])
312
- in
313
- let mkBody bodyArgs =
314
- let useCurry = (not uncurried) && toJS && List. length bodyArgs > 1 in
315
- config.emitImportCurry < - config.emitImportCurry || useCurry;
316
- let functionName =
317
- match isHook with
318
- | true -> " React.createElement"
319
- | false -> value
320
- in
321
- if isHook then config.emitImportReact < - true ;
322
- let declareProps, args =
323
- match bodyArgs with
324
- | [props] when isHook ->
325
- let propsName = " $props" |> EmitText. name ~name Gen in
326
- ( Indent. break ~indent: indent1
327
- ^ " const " ^ propsName ^ " = " ^ props ^ " ;" ,
328
- [value; propsName] )
329
- | _ -> (" " , bodyArgs)
330
- in
331
- declareProps
332
- ^ Indent. break ~indent: indent1
333
- ^ (functionName |> EmitText. funCall ~args ~use Curry |> mkReturn)
334
- in
335
- let convertedArgs = funArgConverters |> List. mapi convertArg in
336
- let args = convertedArgs |> List. map fst |> List. concat in
337
- let funParams =
338
- args |> List. map (fun v -> v |> EmitType. ofTypeAny ~config )
339
- in
340
- let bodyArgs = convertedArgs |> List. map snd |> List. concat in
341
- EmitText. funDef ~body Args ~function Name:componentName ~fun Params ~indent
342
- ~mk Body ~type Vars
343
184
| IdentC -> value
344
185
| OptionC c ->
345
186
EmitText. parens
0 commit comments