@@ -16,6 +16,7 @@ apiInfoToTypeScriptFile apiInfo =
1616 { TypeScript. typeScriptFileName = Info. dashCaseName (Info. mainObject apiInfo) <> " .d.ts"
1717 , TypeScript. typeScriptFileContent =
1818 virtualObjectInfoToInterfaceDecs
19+ mainObjectName
1920 False
2021 voMap
2122 (Info. mainObject apiInfo)
@@ -38,10 +39,12 @@ apiInfoToTypeScriptFile apiInfo =
3839 : virtualObjectInterfaces
3940 where
4041 virtualObjectInterfaces =
41- map (virtualObjectInfoToTypeScriptFile voMap) (Info. virtualObjects apiInfo)
42+ map (virtualObjectInfoToTypeScriptFile mainObjectName voMap) (Info. virtualObjects apiInfo)
4243
4344 voMap = Map. fromList [(Info. virtualObjectName vo, vo) | vo <- Info. virtualObjects apiInfo]
4445
46+ mainObjectName = Info. virtualObjectName $ Info. mainObject apiInfo
47+
4548importDeclaration :: Info. VirtualObjectInfo -> TypeScript. Declaration
4649importDeclaration vo =
4750 TypeScript. Declaration
@@ -69,16 +72,27 @@ flattenMethods = concatMap flattenMethods'
6972 flattenMethods' (Info. MethodGroupEntry (Info. MethodGroup {Info. groupMethods = methods})) = flattenMethods methods
7073
7174virtualObjectInfoToTypeScriptFile
72- :: Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> TypeScript. TypeScriptFile
73- virtualObjectInfoToTypeScriptFile voMap vo =
75+ :: String -> Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> TypeScript. TypeScriptFile
76+ virtualObjectInfoToTypeScriptFile mainObjectName voMap vo =
7477 TypeScript. TypeScriptFile
7578 { TypeScript. typeScriptFileName = Info. dashCaseName vo <> " .d.ts"
76- , TypeScript. typeScriptFileContent = virtualObjectInfoToInterfaceDecs True voMap vo
79+ , TypeScript. typeScriptFileContent = virtualObjectInfoToInterfaceDecs mainObjectName True voMap vo
7780 }
7881
82+ oxfordCommaSeparatedList :: [String ] -> String
83+ oxfordCommaSeparatedList [] = " "
84+ oxfordCommaSeparatedList [l] = l
85+ oxfordCommaSeparatedList [p, l] = p <> " and " <> l
86+ oxfordCommaSeparatedList [a, p, l] = a <> " , " <> p <> " , and " <> l
87+ oxfordCommaSeparatedList (h : t) = h <> " , " <> oxfordCommaSeparatedList t
88+
7989virtualObjectInfoToInterfaceDecs
80- :: Bool -> Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> [TypeScript. Declaration ]
81- virtualObjectInfoToInterfaceDecs isDefaultExport voMap vo =
90+ :: String
91+ -> Bool
92+ -> Map String Info. VirtualObjectInfo
93+ -> Info. VirtualObjectInfo
94+ -> [TypeScript. Declaration ]
95+ virtualObjectInfoToInterfaceDecs mainObjectName isDefaultExport voMap vo =
8296 importDeclarations voMap vo
8397 ++ [ TypeScript. Declaration
8498 [Info. virtualObjectDoc vo]
@@ -89,6 +103,17 @@ virtualObjectInfoToInterfaceDecs isDefaultExport voMap vo =
89103 [ " The type of the object, used for identification (the \" "
90104 <> Info. virtualObjectName vo
91105 <> " \" string)."
106+ , " Other types of objects would be:"
107+ , oxfordCommaSeparatedList
108+ ( ( if mainObjectName == Info. virtualObjectName vo
109+ then id
110+ else (show mainObjectName : )
111+ )
112+ [ show $ Info. virtualObjectName v
113+ | v <- Map. elems voMap
114+ , Info. virtualObjectName v /= Info. virtualObjectName vo
115+ ]
116+ )
92117 ]
93118 (TypeScript. InterfaceProperty " objectType" " string" )
94119 ]
0 commit comments