Skip to content

Commit bf3cbe2

Browse files
committed
add WebIDL typedefs by json
1 parent 5b748d4 commit bf3cbe2

8 files changed

+153
-43
lines changed

TS.fsx

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ module Helpers =
3434
match FSharpValue.GetUnionFields(x, typeof<'a>) with
3535
| case, _ -> case.Name
3636

37+
let inline toNameMap< ^a when ^a: (member Name: string) > (data: array< ^a > ) =
38+
data
39+
|> Array.map (fun x -> ((^a: (member Name: string) x), x))
40+
|> Map.ofArray
41+
3742
module Option =
3843
let runIfSome f x =
3944
match x with
@@ -132,6 +137,32 @@ module Types =
132137

133138
type ExtendConflict = { BaseType: string; ExtendType: string list; MemberNames: string list }
134139

140+
module InputIdlJson =
141+
open Helpers
142+
open System.Xml.Linq
143+
144+
type InputIdlJsonType = JsonProvider<"inputfiles/sample.webidl.json">
145+
146+
let inputIdl =
147+
File.ReadAllText(GlobalVars.inputFolder + @"/browser.webidl.json") |> InputIdlJsonType.Parse
148+
149+
let allTypedefsMap =
150+
inputIdl.Typedefs |> toNameMap
151+
152+
let hasType itemName =
153+
allTypedefsMap.ContainsKey itemName
154+
155+
module Compat =
156+
let xNamespace = XNamespace.Get "http://schemas.microsoft.com/ie/webidl-xml"
157+
158+
let convertTypedef (i: InputIdlJsonType.Typedef) =
159+
let typedef = XElement(xNamespace + "typedef", XAttribute (XName.Get "new-type", i.Name), XAttribute (XName.Get "type", i.Type))
160+
161+
if OptionCheckValue true i.Nullable then
162+
typedef.Add(XAttribute(XName.Get "nullable", "1"))
163+
164+
Types.Browser.Typedef typedef
165+
135166
module InputJson =
136167
open Helpers
137168
open Types
@@ -301,11 +332,6 @@ module Data =
301332
let allInterfaces =
302333
Array.concat [| allWebInterfaces; allWorkerAdditionalInterfaces |]
303334

304-
let inline toNameMap< ^a when ^a: (member Name: string) > (data: array< ^a > ) =
305-
data
306-
|> Array.map (fun x -> ((^a: (member Name: string) x), x))
307-
|> Map.ofArray
308-
309335
let allInterfacesMap =
310336
allInterfaces |> toNameMap
311337

@@ -701,7 +727,6 @@ module Emit =
701727
| "Date" -> "Date"
702728
| "DOMHighResTimeStamp" -> "number"
703729
| "DOMString" -> "string"
704-
| "DOMTimeStamp" -> "number"
705730
| "EndOfStreamError" -> "number"
706731
| "EventListener" -> "EventListenerOrEventListenerObject"
707732
| "double" | "float" -> "number"
@@ -721,7 +746,8 @@ module Emit =
721746
if allInterfacesMap.ContainsKey objDomType ||
722747
allCallbackFuncs.ContainsKey objDomType ||
723748
allDictionariesMap.ContainsKey objDomType ||
724-
allEnumsMap.ContainsKey objDomType then
749+
allEnumsMap.ContainsKey objDomType ||
750+
InputIdlJson.hasType objDomType then
725751
objDomType
726752
// Name of a type alias. Just return itself
727753
elif typeDefSet.Contains objDomType then objDomType
@@ -1482,15 +1508,14 @@ module Emit =
14821508
let emitTypeDefFromJson (typeDef: InputJsonType.Root) =
14831509
Pt.Printl "type %s = %s;" typeDef.Name.Value typeDef.Type.Value
14841510

1485-
match flavor with
1486-
| Flavor.Worker ->
1487-
browser.Typedefs
1488-
|> Array.filter (fun typedef -> knownWorkerInterfaces.Contains typedef.NewType)
1489-
|> Array.iter emitTypeDef
1490-
| _ ->
1491-
browser.Typedefs
1492-
|> Array.filter (fun typedef -> getRemovedItemByName typedef.NewType ItemKind.TypeDef "" |> Option.isNone)
1493-
|> Array.iter emitTypeDef
1511+
let mutable map = browser.Typedefs |> Array.map(fun i -> (i.NewType, i)) |> Map.ofArray
1512+
InputIdlJson.inputIdl.Typedefs
1513+
|> Array.iter (InputIdlJson.Compat.convertTypedef >> (fun i -> map <- map.Add(i.NewType, i)))
1514+
1515+
map |> Map.toArray |> Array.map snd
1516+
|> Array.filter (fun typedef -> getRemovedItemByName typedef.NewType ItemKind.TypeDef "" |> Option.isNone)
1517+
|> Array.filter (fun i -> (flavor <> Flavor.Worker || knownWorkerInterfaces.Contains i.NewType))
1518+
|> Array.iter emitTypeDef
14941519

14951520
InputJson.getAddedItems ItemKind.TypeDef flavor
14961521
|> Array.iter emitTypeDefFromJson

baselines/dom.generated.d.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ interface ProgressEventInit extends EventInit {
761761
}
762762

763763
interface PushSubscriptionOptionsInit {
764-
applicationServerKey?: any;
764+
applicationServerKey?: BufferSource | null;
765765
userVisibleOnly?: boolean;
766766
}
767767

@@ -770,7 +770,7 @@ interface RegistrationOptions {
770770
}
771771

772772
interface RequestInit {
773-
body?: any;
773+
body?: Blob | BufferSource | FormData | string | null;
774774
cache?: RequestCache;
775775
credentials?: RequestCredentials;
776776
headers?: HeadersInit;
@@ -1088,7 +1088,7 @@ interface RTCTransportStats extends RTCStats {
10881088
}
10891089

10901090
interface ScopedCredentialDescriptor {
1091-
id: any;
1091+
id: BufferSource;
10921092
transports?: Transport[];
10931093
type: ScopedCredentialType;
10941094
}
@@ -7539,7 +7539,7 @@ declare var MediaKeyMessageEvent: {
75397539

75407540
interface MediaKeys {
75417541
createSession(sessionType?: MediaKeySessionType): MediaKeySession;
7542-
setServerCertificate(serverCertificate: any): Promise<void>;
7542+
setServerCertificate(serverCertificate: BufferSource): Promise<void>;
75437543
}
75447544

75457545
declare var MediaKeys: {
@@ -7553,10 +7553,10 @@ interface MediaKeySession extends EventTarget {
75537553
readonly keyStatuses: MediaKeyStatusMap;
75547554
readonly sessionId: string;
75557555
close(): Promise<void>;
7556-
generateRequest(initDataType: string, initData: any): Promise<void>;
7556+
generateRequest(initDataType: string, initData: BufferSource): Promise<void>;
75577557
load(sessionId: string): Promise<boolean>;
75587558
remove(): Promise<void>;
7559-
update(response: any): Promise<void>;
7559+
update(response: BufferSource): Promise<void>;
75607560
}
75617561

75627562
declare var MediaKeySession: {
@@ -7567,8 +7567,8 @@ declare var MediaKeySession: {
75677567
interface MediaKeyStatusMap {
75687568
readonly size: number;
75697569
forEach(callback: ForEachCallback): void;
7570-
get(keyId: any): MediaKeyStatus;
7571-
has(keyId: any): boolean;
7570+
get(keyId: BufferSource): MediaKeyStatus;
7571+
has(keyId: BufferSource): boolean;
75727572
}
75737573

75747574
declare var MediaKeyStatusMap: {
@@ -9072,7 +9072,7 @@ declare var PopStateEvent: {
90729072

90739073
interface Position {
90749074
readonly coords: Coordinates;
9075-
readonly timestamp: number;
9075+
readonly timestamp: DOMTimeStamp;
90769076
}
90779077

90789078
declare var Position: {
@@ -12306,8 +12306,8 @@ declare var WaveShaperNode: {
1230612306
};
1230712307

1230812308
interface WebAuthentication {
12309-
getAssertion(assertionChallenge: any, options?: AssertionOptions): Promise<WebAuthnAssertion>;
12310-
makeCredential(accountInformation: Account, cryptoParameters: ScopedCredentialParameters[], attestationChallenge: any, options?: ScopedCredentialOptions): Promise<ScopedCredentialInfo>;
12309+
getAssertion(assertionChallenge: BufferSource, options?: AssertionOptions): Promise<WebAuthnAssertion>;
12310+
makeCredential(accountInformation: Account, cryptoParameters: ScopedCredentialParameters[], attestationChallenge: BufferSource, options?: ScopedCredentialOptions): Promise<ScopedCredentialInfo>;
1231112311
}
1231212312

1231312313
declare var WebAuthentication: {
@@ -14796,7 +14796,7 @@ interface ErrorEventHandler {
1479614796
(message: string, filename?: string, lineno?: number, colno?: number, error?: Error): void;
1479714797
}
1479814798
interface ForEachCallback {
14799-
(keyId: any, status: MediaKeyStatus): void;
14799+
(keyId: BufferSource, status: MediaKeyStatus): void;
1480014800
}
1480114801
interface FrameRequestCallback {
1480214802
(time: number): void;
@@ -15252,13 +15252,15 @@ declare function removeEventListener<K extends keyof WindowEventMap>(type: K, li
1525215252
declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1525315253
type AAGUID = string;
1525415254
type AlgorithmIdentifier = string | Algorithm;
15255-
type BodyInit = any;
15255+
type BodyInit = Blob | BufferSource | FormData | string;
15256+
type BufferSource = ArrayBufferView | ArrayBuffer;
1525615257
type ByteString = string;
1525715258
type ConstrainBoolean = boolean | ConstrainBooleanParameters;
1525815259
type ConstrainDOMString = string | string[] | ConstrainDOMStringParameters;
1525915260
type ConstrainDouble = number | ConstrainDoubleRange;
1526015261
type ConstrainLong = number | ConstrainLongRange;
1526115262
type CryptoOperationData = ArrayBufferView;
15263+
type DOMTimeStamp = number;
1526215264
type GLbitfield = number;
1526315265
type GLboolean = boolean;
1526415266
type GLbyte = number;
@@ -15288,7 +15290,6 @@ type payloadtype = number;
1528815290
type ScrollBehavior = "auto" | "instant" | "smooth";
1528915291
type ScrollLogicalPosition = "start" | "center" | "end" | "nearest";
1529015292
type IDBValidKey = number | string | Date | IDBArrayKey;
15291-
type BufferSource = ArrayBuffer | ArrayBufferView;
1529215293
type MouseWheelEvent = WheelEvent;
1529315294
type ScrollRestoration = "auto" | "manual";
1529415295
type FormDataEntryValue = string | File;

baselines/webworker.generated.d.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ interface ObjectURLOptions {
6666
}
6767

6868
interface PushSubscriptionOptionsInit {
69-
applicationServerKey?: any;
69+
applicationServerKey?: BufferSource | null;
7070
userVisibleOnly?: boolean;
7171
}
7272

7373
interface RequestInit {
74-
body?: any;
74+
body?: Blob | BufferSource | FormData | string | null;
7575
cache?: RequestCache;
7676
credentials?: RequestCredentials;
7777
headers?: HeadersInit;
@@ -119,7 +119,7 @@ interface NotificationEventInit extends ExtendableEventInit {
119119
}
120120

121121
interface PushEventInit extends ExtendableEventInit {
122-
data?: any;
122+
data?: BufferSource | USVString;
123123
}
124124

125125
interface SyncEventInit extends ExtendableEventInit {
@@ -853,7 +853,7 @@ declare var PerformanceTiming: {
853853

854854
interface Position {
855855
readonly coords: Coordinates;
856-
readonly timestamp: number;
856+
readonly timestamp: DOMTimeStamp;
857857
}
858858

859859
declare var Position: {
@@ -1834,7 +1834,7 @@ interface ErrorEventHandler {
18341834
(message: string, filename?: string, lineno?: number, colno?: number, error?: Error): void;
18351835
}
18361836
interface ForEachCallback {
1837-
(keyId: any, status: MediaKeyStatus): void;
1837+
(keyId: BufferSource, status: MediaKeyStatus): void;
18381838
}
18391839
interface FunctionStringCallback {
18401840
(data: string): void;
@@ -1884,12 +1884,13 @@ declare function addEventListener(type: string, listener: EventListenerOrEventLi
18841884
declare function removeEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
18851885
declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
18861886
type AlgorithmIdentifier = string | Algorithm;
1887-
type BodyInit = any;
1887+
type BodyInit = Blob | BufferSource | FormData | string;
1888+
type BufferSource = ArrayBufferView | ArrayBuffer;
1889+
type DOMTimeStamp = number;
18881890
type IDBKeyPath = string;
18891891
type RequestInfo = Request | string;
18901892
type USVString = string;
18911893
type IDBValidKey = number | string | Date | IDBArrayKey;
1892-
type BufferSource = ArrayBuffer | ArrayBufferView;
18931894
type FormDataEntryValue = string | File;
18941895
type HeadersInit = Headers | string[][] | { [key: string]: string };
18951896
type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique";

inputfiles/addedTypes.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -815,11 +815,6 @@
815815
"name": "failIfMajorPerformanceCaveat?",
816816
"type": "boolean"
817817
},
818-
{
819-
"kind": "typedef",
820-
"name": "BufferSource",
821-
"type": "ArrayBuffer | ArrayBufferView"
822-
},
823818
{
824819
"kind": "interface",
825820
"name": "RsaKeyGenParams",

inputfiles/browser.webidl.json

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
{
2+
"callbackInterfaces": [], "dictionaries": [], "enums": [], "namespaces": [],
3+
"callbackFunctions": [
4+
{
5+
"name": "Function", "type": "any",
6+
"params": [{ "name": "arguments", "type": "any", "variadic": true }]
7+
},
8+
{ "name": "VoidFunction", "type": "void", "params": [] }
9+
],
10+
"interfaces": [{
11+
"name": "DOMException", "extends": "Object",
12+
"exposed": ["Window", "Worker"],
13+
"constructors": [{
14+
"arguments": [
15+
{ "name": "message", "type": "DOMString", "optional": true, "default": "\"\"" },
16+
{ "name": "name", "type": "DOMString", "optional": true, "default": "\"Error\"" }
17+
]
18+
}],
19+
"constants": [
20+
{ "name": "ABORT_ERR", "type": "unsigned short", "value": "20" },
21+
{ "name": "DATA_CLONE_ERR", "type": "unsigned short", "value": "25" },
22+
{ "name": "DOMSTRING_SIZE_ERR", "type": "unsigned short", "value": "2" },
23+
{ "name": "HIERARCHY_REQUEST_ERR", "type": "unsigned short", "value": "3" },
24+
{ "name": "INDEX_SIZE_ERR", "type": "unsigned short", "value": "1" },
25+
{ "name": "INUSE_ATTRIBUTE_ERR", "type": "unsigned short", "value": "10" },
26+
{ "name": "INVALID_ACCESS_ERR", "type": "unsigned short", "value": "15" },
27+
{ "name": "INVALID_CHARACTER_ERR", "type": "unsigned short", "value": "5" },
28+
{ "name": "INVALID_MODIFICATION_ERR", "type": "unsigned short", "value": "13" },
29+
{ "name": "INVALID_NODE_TYPE_ERR", "type": "unsigned short", "value": "24" },
30+
{ "name": "INVALID_STATE_ERR", "type": "unsigned short", "value": "11" },
31+
{ "name": "NAMESPACE_ERR", "type": "unsigned short", "value": "14" },
32+
{ "name": "NETWORK_ERR", "type": "unsigned short", "value": "19" },
33+
{ "name": "NO_DATA_ALLOWED_ERR", "type": "unsigned short", "value": "6" },
34+
{ "name": "NO_MODIFICATION_ALLOWED_ERR", "type": "unsigned short", "value": "7" },
35+
{ "name": "NOT_FOUND_ERR", "type": "unsigned short", "value": "8" },
36+
{ "name": "NOT_SUPPORTED_ERR", "type": "unsigned short", "value": "9" },
37+
{ "name": "QUOTA_EXCEEDED_ERR", "type": "unsigned short", "value": "22" },
38+
{ "name": "SECURITY_ERR", "type": "unsigned short", "value": "18" },
39+
{ "name": "SYNTAX_ERR", "type": "unsigned short", "value": "12" },
40+
{ "name": "TIMEOUT_ERR", "type": "unsigned short", "value": "23" },
41+
{ "name": "TYPE_MISMATCH_ERR", "type": "unsigned short", "value": "17" },
42+
{ "name": "URL_MISMATCH_ERR", "type": "unsigned short", "value": "21" },
43+
{ "name": "VALIDATION_ERR", "type": "unsigned short", "value": "16" },
44+
{ "name": "WRONG_DOCUMENT_ERR", "type": "unsigned short", "value": "4" }
45+
],
46+
"attributes": [
47+
{ "name": "code", "type": "unsigned short", "readonly": true },
48+
{ "name": "message", "type": "DOMString", "readonly": true },
49+
{ "name": "name", "type": "DOMString", "readonly": true }
50+
]
51+
}],
52+
"typedefs": [
53+
{ "name": "ArrayBufferView", "type": "(Int8Array or Int16Array or Int32Array or Uint8Array or Uint16Array or Uint32Array or Uint8ClampedArray or Float32Array or Float64Array or DataView)" },
54+
{ "name": "BufferSource", "type": "(ArrayBufferView or ArrayBuffer)" },
55+
{ "name": "DOMTimeStamp", "type": "unsigned long long" }
56+
]
57+
}

inputfiles/knownWorkerInterfaces.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"Blob",
77
"Body",
88
"BodyInit",
9+
"BufferSource",
910
"Cache",
1011
"CacheQueryOptions",
1112
"CacheStorage",
@@ -18,6 +19,7 @@
1819
"DOMError",
1920
"DOMException",
2021
"DOMStringList",
22+
"DOMTimeStamp",
2123
"DecodeErrorCallback",
2224
"DecodeSuccessCallback",
2325
"ErrorEvent",
@@ -92,6 +94,8 @@
9294
"ServiceWorkerRegistration",
9395
"SyncEventInit",
9496
"SyncManager",
97+
"TextDecodeOptions",
98+
"TextDecoderOptions",
9599
"USVString",
96100
"URL",
97101
"URLSearchParams",

inputfiles/removedTypes.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,9 @@
8383
{
8484
"kind": "typedef",
8585
"name": "HeadersInit"
86+
},
87+
{
88+
"kind": "typedef",
89+
"name": "ArrayBufferView"
8690
}
87-
]
91+
]

0 commit comments

Comments
 (0)