Skip to content

Commit 574cce8

Browse files
committed
Merge branch 'master' of https://github.com/Microsoft/TSJS-lib-generator into sort
2 parents b68f778 + 0c9b42f commit 574cce8

File tree

8 files changed

+2923
-2981
lines changed

8 files changed

+2923
-2981
lines changed

TS.fsx

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module GlobalVars =
2020

2121
let makeTextWriter fileName = File.CreateText(Path.Combine(outputFolder, fileName)) :> TextWriter
2222
let tsWebOutput = makeTextWriter "dom.generated.d.ts"
23+
let tsWebES6Output = makeTextWriter "dom.es6.generated.d.ts"
2324
let tsWorkerOutput = makeTextWriter "webworker.generated.d.ts"
2425
let defaultEventType = "Event"
2526

@@ -698,6 +699,9 @@ module Emit =
698699
let extendedTypes =
699700
["ArrayBuffer";"ArrayBufferView";"Int8Array";"Uint8Array";"Int16Array";"Uint16Array";"Int32Array";"Uint32Array";"Float32Array";"Float64Array"]
700701

702+
let integerTypes =
703+
["byte";"octet";"short";"unsigned short";"long";"unsigned long";"long long";"unsigned long long"]
704+
701705
/// Get typescript type using object dom type, object name, and it's associated interface name
702706
let rec DomTypeToTsType (objDomType: string) =
703707
match objDomType.Trim('?') with
@@ -713,15 +717,13 @@ module Emit =
713717
| "EventListener" -> "EventListenerOrEventListenerObject"
714718
| "double" | "float" -> "number"
715719
| "Function" -> "Function"
716-
| "long" | "long long" | "signed long" | "signed long long" | "unsigned long" | "unsigned long long" -> "number"
717-
| "octet" | "byte" -> "number"
718720
| "object" -> "any"
719721
| "Promise" -> "Promise"
720722
| "ReadyState" -> "string"
721723
| "sequence" -> "Array"
722-
| "short" | "signed short" | "unsigned short" -> "number"
723724
| "UnrestrictedDouble" -> "number"
724725
| "void" -> "void"
726+
| integerType when List.contains integerType integerTypes -> "number"
725727
| extendedType when List.contains extendedType extendedTypes -> extendedType
726728
| _ ->
727729
if ignoreDOMTypes && Seq.contains objDomType ["Element"; "Window"; "Document"] then "any"
@@ -824,21 +826,19 @@ module Emit =
824826
Pt.Printl ""
825827

826828
let EmitElementTagNameMap () =
827-
Pt.Printl "interface ElementTagNameMap {"
829+
Pt.Printl "interface ElementTagNameMap extends HTMLElementTagNameMap {"
828830
Pt.IncreaseIndent()
829831
for e in tagNameToEleName do
830-
Pt.Printl "\"%s\": %s;" (e.Key.ToLower()) e.Value
832+
if iNameToIDependList.ContainsKey e.Value && not (Seq.contains "HTMLElement" iNameToIDependList.[e.Value]) then
833+
Pt.Printl "\"%s\": %s;" (e.Key.ToLower()) e.Value
831834
Pt.DecreaseIndent()
832835
Pt.Printl "}"
833836
Pt.Printl ""
834837

835838
let EmitElementListTagNameMap () =
836-
Pt.Printl "interface ElementListTagNameMap {"
837-
Pt.IncreaseIndent()
838-
for e in tagNameToEleName do
839-
Pt.Printl "\"%s\": NodeListOf<%s>;" (e.Key.ToLower()) e.Value
840-
Pt.DecreaseIndent()
841-
Pt.Printl "}"
839+
Pt.Printl "type ElementListTagNameMap = {"
840+
Pt.PrintWithAddedIndent "[key in keyof ElementTagNameMap]: NodeListOf<ElementTagNameMap[key]>"
841+
Pt.Printl "};"
842842
Pt.Printl ""
843843

844844
/// Emit overloads for the createEvent method
@@ -847,9 +847,9 @@ module Emit =
847847
// Emit plurals. For example, "Events", "MutationEvents"
848848
let hasPlurals = ["Event"; "MutationEvent"; "MouseEvent"; "SVGZoomEvent"; "UIEvent"]
849849
for x in distinctETypeList do
850-
Pt.Printl "createEvent(eventInterface:\"%s\"): %s;" x x
850+
Pt.Printl "createEvent(eventInterface: \"%s\"): %s;" x x
851851
if List.contains x hasPlurals then
852-
Pt.Printl "createEvent(eventInterface:\"%ss\"): %s;" x x
852+
Pt.Printl "createEvent(eventInterface: \"%ss\"): %s;" x x
853853
Pt.Printl "createEvent(eventInterface: string): Event;"
854854

855855
/// Generate the parameters string for function signatures
@@ -1012,7 +1012,7 @@ module Emit =
10121012
if m.Name.IsSome then
10131013
// If there are added overloads from the json files, print them first
10141014
match getAddedItemByName m.Name.Value ItemKind.SignatureOverload i.Name with
1015-
| Some ol -> ol.Signatures |> Array.iter (printLine "%s")
1015+
| Some ol -> ol.Signatures |> Array.iter (printLine "%s;")
10161016
| _ -> ()
10171017

10181018
let overloads = GetOverloads (Function.Method m) false
@@ -1119,7 +1119,7 @@ module Emit =
11191119
EmitMembers flavor prefix EmitScope.StaticOnly i
11201120

11211121
Pt.DecreaseIndent()
1122-
Pt.Printl "}"
1122+
Pt.Printl "};"
11231123
Pt.Printl ""
11241124

11251125
/// Emit all the named constructors at root level
@@ -1132,7 +1132,7 @@ module Emit =
11321132
let ncParams =
11331133
[for p in nc.Params do
11341134
yield {Type = p.Type; Name = p.Name; Optional = p.Optional.IsSome; Variadic = p.Variadic.IsSome; Nullable = p.Nullable.IsSome}]
1135-
Pt.Printl "declare var %s: {new(%s): %s; };" nc.Name (ParamsToString ncParams) i.Name)
1135+
Pt.Printl "declare var %s: { new(%s): %s; };" nc.Name (ParamsToString ncParams) i.Name)
11361136

11371137
let EmitInterfaceDeclaration (i:Browser.Interface) =
11381138
let processIName iName =
@@ -1336,7 +1336,7 @@ module Emit =
13361336
EmitMembers flavor prefix EmitScope.StaticOnly i
13371337
emitAddedConstructor ()
13381338
Pt.DecreaseIndent()
1339-
Pt.Printl "}"
1339+
Pt.Printl "};"
13401340
Pt.Printl ""
13411341

13421342
let emitPureStaticInterface () =
@@ -1440,7 +1440,7 @@ module Emit =
14401440
| Some comment -> Pt.PrintWithAddedIndent "%s" comment
14411441
| _ -> ()
14421442
ai.ConstructorSignatures |> Array.iter (Pt.PrintWithAddedIndent "%s;")
1443-
Pt.Printl "}"
1443+
Pt.Printl "};"
14441444
Pt.Printl ""
14451445

14461446
let EmitTypeDefs flavor =
@@ -1466,8 +1466,8 @@ module Emit =
14661466
Pt.Reset()
14671467
Pt.Printl "/////////////////////////////"
14681468
match flavor with
1469-
| Worker -> Pt.Printl "/// IE Worker APIs"
1470-
| _ -> Pt.Printl "/// IE DOM APIs"
1469+
| Worker -> Pt.Printl "/// Worker APIs"
1470+
| _ -> Pt.Printl "/// DOM APIs"
14711471
Pt.Printl "/////////////////////////////"
14721472
Pt.Printl ""
14731473

@@ -1502,8 +1502,53 @@ module Emit =
15021502
target.Flush()
15031503
target.Close()
15041504

1505+
let EmitIterator (i: Browser.Interface) =
1506+
let isIntegerKeyParam (p: Browser.Param) =
1507+
List.contains p.Type integerTypes
1508+
1509+
// check anonymous unsigned long getter and length property
1510+
let isIterableGetter (m: Browser.Method) =
1511+
m.Getter = Some 1 && m.Params.Length = 1 && isIntegerKeyParam m.Params.[0]
1512+
1513+
let findIterableGetter() =
1514+
let anonymousGetter =
1515+
if (i.AnonymousMethods.IsSome) then Array.tryFind isIterableGetter i.AnonymousMethods.Value.Methods
1516+
else None
1517+
1518+
if (anonymousGetter.IsSome) then anonymousGetter
1519+
else if (i.Methods.IsSome) then Array.tryFind isIterableGetter i.Methods.Value.Methods
1520+
else None
1521+
1522+
let findLengthProperty (p: Browser.Property) =
1523+
p.Name = "length" && List.contains p.Type integerTypes
1524+
1525+
if i.Name <> "Window" && i.Properties.IsSome then
1526+
let iterableGetter = findIterableGetter()
1527+
let lengthProperty = Array.tryFind findLengthProperty i.Properties.Value.Properties
1528+
if iterableGetter.IsSome && lengthProperty.IsSome then
1529+
Pt.Printl "interface %s {" i.Name
1530+
Pt.IncreaseIndent()
1531+
Pt.Printl "[Symbol.iterator](): IterableIterator<%s>" (DomTypeToTsType iterableGetter.Value.Type)
1532+
Pt.DecreaseIndent()
1533+
Pt.Printl "}"
1534+
Pt.Printl ""
1535+
1536+
let EmitES6Thing (target: TextWriter) =
1537+
Pt.Reset()
1538+
Pt.Printl "/////////////////////////////"
1539+
Pt.Printl "/// DOM ES6 APIs"
1540+
Pt.Printl "/////////////////////////////"
1541+
Pt.Printl ""
1542+
1543+
browser.Interfaces |> Array.iter EmitIterator
1544+
1545+
fprintf target "%s" (Pt.GetResult())
1546+
target.Flush()
1547+
target.Close()
1548+
15051549
let EmitDomWeb () =
15061550
EmitTheWholeThing Flavor.All GlobalVars.tsWebOutput
1551+
EmitES6Thing GlobalVars.tsWebES6Output
15071552

15081553
let EmitDomWorker () =
15091554
ignoreDOMTypes <- true

baselines/dom.es6.generated.d.ts

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
2+
/////////////////////////////
3+
/// DOM ES6 APIs
4+
/////////////////////////////
5+
6+
interface AudioTrackList {
7+
[Symbol.iterator](): IterableIterator<AudioTrack>
8+
}
9+
10+
interface ClientRectList {
11+
[Symbol.iterator](): IterableIterator<ClientRect>
12+
}
13+
14+
interface CSSRuleList {
15+
[Symbol.iterator](): IterableIterator<CSSRule>
16+
}
17+
18+
interface CSSStyleDeclaration {
19+
[Symbol.iterator](): IterableIterator<string>
20+
}
21+
22+
interface DataTransferItemList {
23+
[Symbol.iterator](): IterableIterator<File>
24+
}
25+
26+
interface DOMStringList {
27+
[Symbol.iterator](): IterableIterator<string>
28+
}
29+
30+
interface DOMTokenList {
31+
[Symbol.iterator](): IterableIterator<string>
32+
}
33+
34+
interface FileList {
35+
[Symbol.iterator](): IterableIterator<File>
36+
}
37+
38+
interface HTMLAllCollection {
39+
[Symbol.iterator](): IterableIterator<Element>
40+
}
41+
42+
interface HTMLCollection {
43+
[Symbol.iterator](): IterableIterator<Element>
44+
}
45+
46+
interface MediaList {
47+
[Symbol.iterator](): IterableIterator<string>
48+
}
49+
50+
interface MimeTypeArray {
51+
[Symbol.iterator](): IterableIterator<Plugin>
52+
}
53+
54+
interface MSRangeCollection {
55+
[Symbol.iterator](): IterableIterator<Range>
56+
}
57+
58+
interface NamedNodeMap {
59+
[Symbol.iterator](): IterableIterator<Attr>
60+
}
61+
62+
interface NodeList {
63+
[Symbol.iterator](): IterableIterator<Node>
64+
}
65+
66+
interface Plugin {
67+
[Symbol.iterator](): IterableIterator<MimeType>
68+
}
69+
70+
interface PluginArray {
71+
[Symbol.iterator](): IterableIterator<Plugin>
72+
}
73+
74+
interface SourceBufferList {
75+
[Symbol.iterator](): IterableIterator<SourceBuffer>
76+
}
77+
78+
interface Storage {
79+
[Symbol.iterator](): IterableIterator<string>
80+
}
81+
82+
interface StyleSheetList {
83+
[Symbol.iterator](): IterableIterator<StyleSheet>
84+
}
85+
86+
interface StyleSheetPageList {
87+
[Symbol.iterator](): IterableIterator<CSSPageRule>
88+
}
89+
90+
interface TextTrackCueList {
91+
[Symbol.iterator](): IterableIterator<TextTrackCue>
92+
}
93+
94+
interface TextTrackList {
95+
[Symbol.iterator](): IterableIterator<TextTrack>
96+
}
97+
98+
interface TouchList {
99+
[Symbol.iterator](): IterableIterator<Touch>
100+
}
101+
102+
interface VideoTrackList {
103+
[Symbol.iterator](): IterableIterator<VideoTrack>
104+
}

0 commit comments

Comments
 (0)