From 47dafdb89ec11404fa234c8f1e1ba6362dcc432f Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Fri, 3 Nov 2017 23:09:34 -0500 Subject: [PATCH 1/4] Add overrides for interface types and add CustomEvent types for testing. --- TS.fsx | 15 ++++++++++---- baselines/dom.generated.d.ts | 10 +++++----- inputfiles/overridingTypes.json | 35 +++++++++++++++++++++++++++++++++ inputfiles/sample.json | 7 +++++++ 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/TS.fsx b/TS.fsx index 6a6d5b718..dd94450dd 100644 --- a/TS.fsx +++ b/TS.fsx @@ -160,6 +160,7 @@ module InputJson = | SignatureOverload | TypeDef | Extends + | TypedInterface override x.ToString() = match x with | Property _ -> "property" @@ -172,6 +173,7 @@ module InputJson = | SignatureOverload _ -> "signatureoverload" | TypeDef _ -> "typedef" | Extends _ -> "extends" + | TypedInterface _ -> "typedinterface" let getItemByName (allItems: InputJsonType.Root []) (itemName: string) (kind: ItemKind) otherFilter = let filter (item: InputJsonType.Root) = @@ -779,6 +781,10 @@ module Emit = (DomTypeToNullableTsType m.Type m.Nullable.IsSome) = expectedMType && m.Params.Length = 1 && (DomTypeToTsType m.Params.[0].Type) = expectedParamType + let processInterfaceType iName = + match getOverriddenItems ItemKind.TypedInterface Flavor.All |> Array.tryFind (matchInterface iName) with + | Some it -> iName + "<" + (it.Parameters |> String.concat ", ") + ">" + | _ -> iName /// Emit overloads for the createElement method let EmitCreateElementOverloads (m: Browser.Method) = @@ -1160,9 +1166,9 @@ module Emit = let processedIName = processIName i.Name if processedIName <> i.Name then - Pt.PrintlToStack "interface %s extends %s {" i.Name processedIName + Pt.PrintlToStack "interface %s extends %s {" (processInterfaceType i.Name) processedIName - Pt.Printl "interface %s" processedIName + Pt.Printl "interface %s" (processInterfaceType processedIName) let finalExtends = let overridenExtendsFromJson = InputJson.getOverriddenItemsByInterfaceName ItemKind.Extends Flavor.All i.Name @@ -1387,10 +1393,11 @@ module Emit = EmitConstructor flavor i let EmitDictionaries flavor = + let emitDictionary (dict:Browser.Dictionary) = match dict.Extends with - | "Object" -> Pt.Printl "interface %s {" dict.Name - | _ -> Pt.Printl "interface %s extends %s {" dict.Name dict.Extends + | "Object" -> Pt.Printl "interface %s {" (processInterfaceType dict.Name) + | _ -> Pt.Printl "interface %s extends %s {" (processInterfaceType dict.Name) dict.Extends let emitJsonProperty (p: InputJsonType.Root) = let readOnlyModifier = diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index 0ce50bf81..9f854c4ce 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -82,8 +82,8 @@ interface ConstrainVideoFacingModeParameters { ideal?: VideoFacingModeEnum | VideoFacingModeEnum[]; } -interface CustomEventInit extends EventInit { - detail?: any; +interface CustomEventInit extends EventInit { + detail: T; } interface DeviceAccelerationDict { @@ -2374,9 +2374,9 @@ declare var CSSSupportsRule: { new(): CSSSupportsRule; }; -interface CustomEvent extends Event { - readonly detail: any; - initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void; +interface CustomEvent extends Event { + readonly detail: T; + (typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void; } declare var CustomEvent: { diff --git a/inputfiles/overridingTypes.json b/inputfiles/overridingTypes.json index 226cce132..eed9fe87f 100644 --- a/inputfiles/overridingTypes.json +++ b/inputfiles/overridingTypes.json @@ -1,4 +1,39 @@ [ + { + "kind": "typedinterface", + "interface": "CustomEventInit", + "parameters": [ + "T = any" + ] + }, + { + "kind": "property", + "interface": "CustomEventInit", + "name": "detail", + "type": "T" + }, + { + "kind": "typedinterface", + "interface": "CustomEvent", + "parameters": [ + "T = any" + ] + }, + { + "kind": "property", + "interface": "CustomEvent", + "readonly": true, + "name": "detail", + "type": "T" + }, + { + "kind": "method", + "interface": "CustomEvent", + "name": "initCustomEvent", + "signatures": [ + "(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void" + ] + }, { "kind": "constructor", "interface": "Response", diff --git a/inputfiles/sample.json b/inputfiles/sample.json index d516ad12f..6f2700809 100644 --- a/inputfiles/sample.json +++ b/inputfiles/sample.json @@ -337,6 +337,13 @@ "baseInterface": "ParentNode", "interface": "Document" }, + { + "kind": "typedinterface", + "interface": "CustomEventInit", + "parameters": [ + "T = any" + ] + }, { "kind": "interface", "name": "ParentNode", From 4c32dbd47992e6e855c3707648a1b0689a6b904b Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Mon, 6 Nov 2017 11:56:15 -0600 Subject: [PATCH 2/4] Removed kind typedinterface and changed parameters to typeparameters. --- TS.fsx | 6 ++---- inputfiles/overridingTypes.json | 8 ++++---- inputfiles/sample.json | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/TS.fsx b/TS.fsx index dd94450dd..c9c99019b 100644 --- a/TS.fsx +++ b/TS.fsx @@ -160,7 +160,6 @@ module InputJson = | SignatureOverload | TypeDef | Extends - | TypedInterface override x.ToString() = match x with | Property _ -> "property" @@ -173,7 +172,6 @@ module InputJson = | SignatureOverload _ -> "signatureoverload" | TypeDef _ -> "typedef" | Extends _ -> "extends" - | TypedInterface _ -> "typedinterface" let getItemByName (allItems: InputJsonType.Root []) (itemName: string) (kind: ItemKind) otherFilter = let filter (item: InputJsonType.Root) = @@ -782,8 +780,8 @@ module Emit = m.Params.Length = 1 && (DomTypeToTsType m.Params.[0].Type) = expectedParamType let processInterfaceType iName = - match getOverriddenItems ItemKind.TypedInterface Flavor.All |> Array.tryFind (matchInterface iName) with - | Some it -> iName + "<" + (it.Parameters |> String.concat ", ") + ">" + match getOverriddenItems ItemKind.Interface Flavor.All |> Array.tryFind (matchInterface iName) with + | Some it -> iName + "<" + (it.TypeParameters |> String.concat ", ") + ">" | _ -> iName /// Emit overloads for the createElement method diff --git a/inputfiles/overridingTypes.json b/inputfiles/overridingTypes.json index eed9fe87f..00b4fd975 100644 --- a/inputfiles/overridingTypes.json +++ b/inputfiles/overridingTypes.json @@ -1,8 +1,8 @@ [ { - "kind": "typedinterface", + "kind": "interface", "interface": "CustomEventInit", - "parameters": [ + "typeParameters": [ "T = any" ] }, @@ -13,9 +13,9 @@ "type": "T" }, { - "kind": "typedinterface", + "kind": "interface", "interface": "CustomEvent", - "parameters": [ + "typeParameters": [ "T = any" ] }, diff --git a/inputfiles/sample.json b/inputfiles/sample.json index 6f2700809..2569eadf1 100644 --- a/inputfiles/sample.json +++ b/inputfiles/sample.json @@ -338,9 +338,9 @@ "interface": "Document" }, { - "kind": "typedinterface", + "kind": "interface", "interface": "CustomEventInit", - "parameters": [ + "typeParameters": [ "T = any" ] }, From 67d42508111b8a7c07d58e3cd78149867b1eaeee Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Mon, 6 Nov 2017 16:32:21 -0600 Subject: [PATCH 3/4] Added type to CustomEvent constructor and ensured Custom Event initCustomEvent was correct. --- baselines/dom.generated.d.ts | 4 ++-- inputfiles/overridingTypes.json | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index 9f854c4ce..4590f6bc0 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -2376,12 +2376,12 @@ declare var CSSSupportsRule: { interface CustomEvent extends Event { readonly detail: T; - (typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void; + initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void; } declare var CustomEvent: { prototype: CustomEvent; - new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent; + new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent; }; interface DataCue extends TextTrackCue { diff --git a/inputfiles/overridingTypes.json b/inputfiles/overridingTypes.json index 00b4fd975..fa0d02dac 100644 --- a/inputfiles/overridingTypes.json +++ b/inputfiles/overridingTypes.json @@ -31,7 +31,14 @@ "interface": "CustomEvent", "name": "initCustomEvent", "signatures": [ - "(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void" + "initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void" + ] + }, + { + "kind": "constructor", + "interface": "CustomEvent", + "signatures": [ + "new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent" ] }, { From 1ebbef42878794c32636e8030d335ce266e291dc Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Tue, 7 Nov 2017 08:53:40 -0600 Subject: [PATCH 4/4] Ensure detail is optional for CustomEventInit. --- baselines/dom.generated.d.ts | 2 +- inputfiles/overridingTypes.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index 4590f6bc0..290867d3b 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -83,7 +83,7 @@ interface ConstrainVideoFacingModeParameters { } interface CustomEventInit extends EventInit { - detail: T; + detail?: T; } interface DeviceAccelerationDict { diff --git a/inputfiles/overridingTypes.json b/inputfiles/overridingTypes.json index fa0d02dac..e0786ac46 100644 --- a/inputfiles/overridingTypes.json +++ b/inputfiles/overridingTypes.json @@ -9,7 +9,7 @@ { "kind": "property", "interface": "CustomEventInit", - "name": "detail", + "name": "detail?", "type": "T" }, {