@@ -20,6 +20,7 @@ module GlobalVars =
20
20
21
21
let makeTextWriter fileName = File.CreateText( Path.Combine( outputFolder, fileName)) :> TextWriter
22
22
let tsWebOutput = makeTextWriter " dom.generated.d.ts"
23
+ let tsWebES6Output = makeTextWriter " dom.generated.es6.d.ts"
23
24
let tsWorkerOutput = makeTextWriter " webworker.generated.d.ts"
24
25
let defaultEventType = " Event"
25
26
@@ -698,6 +699,9 @@ module Emit =
698
699
let extendedTypes =
699
700
[ " ArrayBuffer" ; " ArrayBufferView" ; " Int8Array" ; " Uint8Array" ; " Int16Array" ; " Uint16Array" ; " Int32Array" ; " Uint32Array" ; " Float32Array" ; " Float64Array" ]
700
701
702
+ let integerTypes =
703
+ [ " byte" ; " octet" ; " short" ; " unsigned short" ; " long" ; " unsigned long" ; " long long" ; " unsigned long long" ]
704
+
701
705
/// Get typescript type using object dom type, object name, and it's associated interface name
702
706
let rec DomTypeToTsType ( objDomType : string ) =
703
707
match objDomType.Trim( '?' ) with
@@ -713,15 +717,13 @@ module Emit =
713
717
| " EventListener" -> " EventListenerOrEventListenerObject"
714
718
| " double" | " float" -> " number"
715
719
| " Function" -> " Function"
716
- | " long" | " long long" | " signed long" | " signed long long" | " unsigned long" | " unsigned long long" -> " number"
717
- | " octet" | " byte" -> " number"
718
720
| " object" -> " any"
719
721
| " Promise" -> " Promise"
720
722
| " ReadyState" -> " string"
721
723
| " sequence" -> " Array"
722
- | " short" | " signed short" | " unsigned short" -> " number"
723
724
| " UnrestrictedDouble" -> " number"
724
725
| " void" -> " void"
726
+ | integerType when List.contains integerType integerTypes -> " number"
725
727
| extendedType when List.contains extendedType extendedTypes -> extendedType
726
728
| _ ->
727
729
if ignoreDOMTypes && Seq.contains objDomType [ " Element" ; " Window" ; " Document" ] then " any"
@@ -1466,8 +1468,8 @@ module Emit =
1466
1468
Pt.Reset()
1467
1469
Pt.Printl " /////////////////////////////"
1468
1470
match flavor with
1469
- | Worker -> Pt.Printl " /// IE Worker APIs"
1470
- | _ -> Pt.Printl " /// IE DOM APIs"
1471
+ | Worker -> Pt.Printl " /// MSEdge Worker APIs"
1472
+ | _ -> Pt.Printl " /// MSEdge DOM APIs"
1471
1473
Pt.Printl " /////////////////////////////"
1472
1474
Pt.Printl " "
1473
1475
@@ -1502,8 +1504,53 @@ module Emit =
1502
1504
target.Flush()
1503
1505
target.Close()
1504
1506
1507
+ let EmitIterator ( i : Browser.Interface ) =
1508
+ let isIntegerKeyParam ( p : Browser.Param ) =
1509
+ List.contains p.Type integerTypes
1510
+
1511
+ // check anonymous unsigned long getter and length property
1512
+ let isIterableGetter ( m : Browser.Method ) =
1513
+ m.Getter = Some 1 && m.Params.Length = 1 && isIntegerKeyParam m.Params.[ 0 ]
1514
+
1515
+ let findIterableGetter () =
1516
+ let anonymousGetter =
1517
+ if ( i.AnonymousMethods.IsSome) then Array.tryFind isIterableGetter i.AnonymousMethods.Value.Methods
1518
+ else None
1519
+
1520
+ if ( anonymousGetter.IsSome) then anonymousGetter
1521
+ else if ( i.Methods.IsSome) then Array.tryFind isIterableGetter i.Methods.Value.Methods
1522
+ else None
1523
+
1524
+ let findLengthProperty ( p : Browser.Property ) =
1525
+ p.Name = " length" && List.contains p.Type integerTypes
1526
+
1527
+ if i.Name <> " Window" && i.Properties.IsSome then
1528
+ let iterableGetter = findIterableGetter()
1529
+ let lengthProperty = Array.tryFind findLengthProperty i.Properties.Value.Properties
1530
+ if iterableGetter.IsSome && lengthProperty.IsSome then
1531
+ Pt.Printl " interface %s {" i.Name
1532
+ Pt.IncreaseIndent()
1533
+ Pt.Printl " [Symbol.iterator](): IterableIterator<%s >" iterableGetter.Value.Type
1534
+ Pt.DecreaseIndent()
1535
+ Pt.Printl " }"
1536
+ Pt.Printl " "
1537
+
1538
+ let EmitES6Thing ( target : TextWriter ) =
1539
+ Pt.Reset()
1540
+ Pt.Printl " /////////////////////////////"
1541
+ Pt.Printl " /// MSEdge DOM ES6 APIs"
1542
+ Pt.Printl " /////////////////////////////"
1543
+ Pt.Printl " "
1544
+
1545
+ browser.Interfaces |> Array.iter EmitIterator
1546
+
1547
+ fprintf target " %s " ( Pt.GetResult())
1548
+ target.Flush()
1549
+ target.Close()
1550
+
1505
1551
let EmitDomWeb () =
1506
1552
EmitTheWholeThing Flavor.All GlobalVars.tsWebOutput
1553
+ EmitES6Thing GlobalVars.tsWebES6Output
1507
1554
1508
1555
let EmitDomWorker () =
1509
1556
ignoreDOMTypes <- true
0 commit comments