@@ -6,6 +6,7 @@ open Shared
6
6
open Shared.Comments
7
7
open Shared.JsonItems
8
8
open System.IO
9
+ open System.Web
9
10
10
11
// Global print target
11
12
let Pt = StringPrinter()
@@ -33,6 +34,7 @@ let rec DomTypeToTsType (objDomType: string) =
33
34
| " double" | " float" -> " number"
34
35
| " Function" -> " Function"
35
36
| " long" | " long long" | " signed long" | " signed long long" | " unsigned long" | " unsigned long long" -> " number"
37
+ | " octet" | " byte" -> " number"
36
38
| " object" -> " any"
37
39
| " Promise" -> " Promise"
38
40
| " ReadyState" -> " string"
@@ -49,22 +51,26 @@ let rec DomTypeToTsType (objDomType: string) =
49
51
allCallbackFuncs.ContainsKey objDomType ||
50
52
allDictionariesMap.ContainsKey objDomType then
51
53
objDomType
54
+ // Name of a type alias. Just return itself
55
+ elif typeDefSet.Contains objDomType then objDomType
52
56
// Enum types are all treated as string
53
57
elif allEnumsMap.ContainsKey objDomType then " string"
54
58
// Union types
55
- elif ( objDomType.Contains( " or " ) ) then
59
+ elif objDomType.Contains( " or " ) then
56
60
let allTypes = objDomType.Trim( '(' , ')' ) .Split([| " or " |], StringSplitOptions.None)
57
- |> Array.map DomTypeToTsType
61
+ |> Array.map ( fun t -> DomTypeToTsType ( t.Trim ( '?' , ' ' )))
58
62
if Seq.contains " any" allTypes then " any" else String.concat " | " allTypes
59
63
else
60
64
// Check if is array type, which looks like "sequence<DOMString>"
61
- let genericMatch = Regex.Match( objDomType, @" ^(\w+)<(\w+)>$" )
65
+ let unescaped = System.Web.HttpUtility.HtmlDecode( objDomType)
66
+ let genericMatch = Regex.Match( unescaped, @" ^(\w+)<(\w+)>$" )
62
67
if genericMatch.Success then
63
68
let tName = DomTypeToTsType ( genericMatch.Groups.[ 1 ]. Value)
69
+ let paramName = DomTypeToTsType ( genericMatch.Groups.[ 2 ]. Value)
64
70
match tName with
65
- | " Promise" -> " any"
71
+ | " Promise" ->
72
+ " PromiseLike<" + paramName + " >"
66
73
| _ ->
67
- let paramName = DomTypeToTsType ( genericMatch.Groups.[ 2 ]. Value)
68
74
if tName = " Array" then paramName + " []"
69
75
else tName + " <" + paramName + " >"
70
76
elif objDomType.EndsWith( " []" ) then
@@ -605,6 +611,18 @@ let EmitAddedInterface (ai: JsonItems.ItemsType.Root) =
605
611
Pt.printl " }"
606
612
Pt.printl " "
607
613
614
+ let EmitTypeDefs flavor =
615
+ let EmitTypeDef ( typeDef : Browser.Typedef ) =
616
+ Pt.printl " type %s = %s ;" typeDef.NewType ( DomTypeToTsType typeDef.Type)
617
+ let EmitTypeDefFromJson ( typeDef : ItemsType.Root ) =
618
+ Pt.printl " type %s = %s ;" typeDef.Name.Value typeDef.Type.Value
619
+
620
+ if flavor <> Flavor.Worker then
621
+ browser.Typedefs |> Array.iter EmitTypeDef
622
+
623
+ JsonItems.getAddedItems ItemKind.TypeDef flavor
624
+ |> Array.iter EmitTypeDefFromJson
625
+
608
626
let EmitTheWholeThing flavor ( target : TextWriter ) =
609
627
Pt.reset()
610
628
Pt.printl " /////////////////////////////"
@@ -635,6 +653,8 @@ let EmitTheWholeThing flavor (target:TextWriter) =
635
653
EmitEventHandlers " declare var " gp
636
654
| _ -> ()
637
655
656
+ EmitTypeDefs flavor
657
+
638
658
fprintf target " %s " ( Pt.getResult())
639
659
target.Flush()
640
660
target.Close()
0 commit comments