Skip to content

Commit 23e64e1

Browse files
committed
Unify json files for additional types
1 parent 98041d0 commit 23e64e1

8 files changed

+444
-57
lines changed

Shared.fs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,19 @@ module GlobalVars =
2626
/// ===========================================
2727
/// Types
2828
/// ===========================================
29+
type Flavor =
30+
| Worker
31+
| Web
32+
| Windows
33+
override x.ToString() =
34+
match FSharpValue.GetUnionFields(x, typeof<Flavor>) with
35+
| case, _ -> case.Name
36+
2937
type Browser = XmlProvider< "sample.xml", Global=true >
3038

31-
type CommentType = JsonProvider< "inputfiles\comments.json" >
39+
type CommentType = JsonProvider<"inputfiles/comments.json">
3240

33-
type TypesFromJsonFile = JsonProvider< "inputfiles\overridingTypes.json" >
41+
type TypesFromJsonFile = JsonProvider<"inputfiles/sample.json">
3442

3543
let overridingTypes =
3644
File.ReadAllText(__SOURCE_DIRECTORY__ + @"\inputfiles\overridingTypes.json") |> TypesFromJsonFile.Parse
@@ -54,6 +62,9 @@ let findOverridingType mName iName (kind: MemberKind) = findTypeFromJsonArray ov
5462
let findRemovedType mName iName (kind: MemberKind) = findTypeFromJsonArray removedTypes mName iName kind
5563
let findAddedType mName iName (kind: MemberKind) = findTypeFromJsonArray addedTypes mName iName kind
5664

65+
let getAllAddedInterfaces (flavor: Flavor) =
66+
addedTypes |> Array.filter (fun t -> t.Kind = "interface" && (t.Flavor.IsNone || t.Flavor.Value = flavor.ToString() || flavor = Windows))
67+
5768
let comments = File.ReadAllText(__SOURCE_DIRECTORY__ + @"\inputfiles\comments.json") |> CommentType.Parse
5869

5970
let GetCommentForProperty iName pName =
@@ -126,14 +137,6 @@ type Event =
126137
{ Name : string
127138
Type : string }
128139

129-
type Flavor =
130-
| Worker
131-
| Web
132-
| Windows
133-
override x.ToString() =
134-
match FSharpValue.GetUnionFields(x, typeof<Flavor>) with
135-
| case, _ -> case.Name
136-
137140
/// Method parameter
138141
type Param =
139142
{ Type : string

TS.fs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ let DumpMembers flavor prefix (dumpScope: DumpScope) (i:Browser.Interface) =
253253
| None -> ()
254254

255255
addedTypes
256-
|> Array.filter (fun t -> t.Interface.IsNone || t.Interface.Value = i.Name)
256+
|> Array.filter (fun t -> t.Kind = "property" && (t.Interface.IsNone || t.Interface.Value = i.Name))
257257
|> Array.iter (fun t -> Pt.printl "%s%s: %s;" prefix t.Name t.Type.Value)
258258

259259
// -------- Dump methods --------
@@ -555,6 +555,17 @@ let DumpDictionaries flavor =
555555
|> Array.filter (fun dict -> flavor <> Worker || knownWorkerInterfaces.Contains dict.Name)
556556
|> Array.iter DumpDictionary
557557

558+
let DumpAddedInterface (t: TypesFromJsonFile.Root) =
559+
match t.Extends with
560+
| Some e -> Pt.printl "interface %s extends %s {" t.Name t.Extends.Value
561+
| None -> Pt.printl "interface %s {" t.Name
562+
563+
t.Properties |> Array.iter (fun p -> Pt.printWithAddedIndent "%s: %s;" p.Name p.Type)
564+
t.Methods |> Array.collect (fun m -> m.Signatures) |> Array.iter (Pt.printWithAddedIndent "%s;")
565+
t.Indexer |> Array.collect (fun i -> i.Signatures) |> Array.iter (Pt.printWithAddedIndent "%s;")
566+
Pt.printl "}"
567+
Pt.printl ""
568+
558569
let DumpTheWholeThing flavor (target:TextWriter) =
559570
Pt.reset()
560571
Pt.printl "/////////////////////////////"
@@ -569,14 +580,10 @@ let DumpTheWholeThing flavor (target:TextWriter) =
569580
DumpNonCallbackInterfaces flavor
570581

571582
// Add missed interface definition from the spec
572-
let additionalNonSharedTypes =
573-
match flavor with
574-
| Worker -> System.IO.File.ReadAllText(GlobalVars.inputFolder + @"\additionalWorkerTypes.ts")
575-
| _ -> System.IO.File.ReadAllText(GlobalVars.inputFolder + @"\additionalDomTypes.ts")
576-
Pt.printl "%s" additionalNonSharedTypes
577-
578-
let additionalSharedTypes = System.IO.File.ReadAllText(GlobalVars.inputFolder + @"\additionalSharedTypes.ts")
579-
Pt.print "%s" additionalSharedTypes
583+
getAllAddedInterfaces flavor |> Array.iter DumpAddedInterface
584+
585+
Pt.printl "declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;"
586+
Pt.printl ""
580587

581588
DumpCallBackFunctions flavor
582589

inputfiles/addedTypes.json

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,116 @@
2222
"interface": "SVGElement",
2323
"name": "className",
2424
"type": "any"
25+
},
26+
{
27+
"kind": "interface",
28+
"name": "NodeListOf<TNode extends Node>",
29+
"flavor": "Web",
30+
"extends": "NodeList",
31+
"properties": [
32+
{
33+
"name": "length",
34+
"type": "number"
35+
}
36+
],
37+
"methods": [
38+
{
39+
"name": "item",
40+
"signatures": ["item(index: number): TNode"]
41+
}
42+
],
43+
"indexer": [
44+
{
45+
"signatures": ["[index: number]: TNode"]
46+
}
47+
]
48+
},
49+
{
50+
"kind": "interface",
51+
"name": "BlobPropertyBag",
52+
"properties": [
53+
{
54+
"name": "type?",
55+
"type": "string"
56+
},
57+
{
58+
"name": "endings?",
59+
"type": "string"
60+
}
61+
]
62+
},
63+
{
64+
"kind": "interface",
65+
"name": "FilePropertyBag",
66+
"properties": [
67+
{
68+
"name": "type?",
69+
"type": "string"
70+
},
71+
{
72+
"name": "lastModified?",
73+
"type": "number"
74+
}
75+
]
76+
},
77+
{
78+
"kind": "interface",
79+
"name": "EventListenerObject",
80+
"methods": [
81+
{
82+
"name": "handleEvent",
83+
"signatures": ["handleEvent(evt: Event): void"]
84+
}
85+
]
86+
},
87+
{
88+
"kind": "interface",
89+
"name": "MessageEventInit",
90+
"extends": "EventInit",
91+
"properties": [
92+
{
93+
"name": "data?",
94+
"type": "any"
95+
},
96+
{
97+
"name": "origin?",
98+
"type": "string"
99+
},
100+
{
101+
"name": "lastEventId?",
102+
"type": "string"
103+
},
104+
{
105+
"name": "channel?",
106+
"type": "string"
107+
},
108+
{
109+
"name": "source?",
110+
"type": "any"
111+
},
112+
{
113+
"name": "ports?",
114+
"type": "MessagePort[]"
115+
}
116+
]
117+
},
118+
{
119+
"kind": "interface",
120+
"name": "ProgressEventInit",
121+
"extends": "EventInit",
122+
"properties": [
123+
{
124+
"name": "lengthComputable?",
125+
"type": "boolean"
126+
},
127+
{
128+
"name": "loaded?",
129+
"type": "number"
130+
},
131+
{
132+
"name": "total?",
133+
"type": "number"
134+
}
135+
]
25136
}
26137
]

inputfiles/additionalDomTypes.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

inputfiles/additionalSharedTypes.ts

Lines changed: 0 additions & 31 deletions
This file was deleted.

inputfiles/additionalWorkerTypes.ts

Whitespace-only changes.

inputfiles/overridingTypes.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[
1+
[
22
{
33
"kind": "method",
44
"interface": "WebGLRenderingContext",

0 commit comments

Comments
 (0)