@@ -4,15 +4,21 @@ import Cardano.Wasm.Internal.Api.Info (tsTypeAsString)
44import Cardano.Wasm.Internal.Api.Info qualified as Info
55import Cardano.Wasm.Internal.Api.TypeScriptDefs qualified as TypeScript
66
7+ import Data.List (nub )
8+ import Data.Map (Map )
9+ import Data.Map qualified as Map
10+
711-- | Converts the Cardano API information to a TypeScript declaration file AST.
812apiInfoToTypeScriptFile :: Info. ApiInfo -> [TypeScript. TypeScriptFile ]
913apiInfoToTypeScriptFile apiInfo =
1014 ( TypeScript. TypeScriptFile
1115 { TypeScript. typeScriptFileName = Info. dashCaseName (Info. mainObject apiInfo) <> " .d.ts"
1216 , TypeScript. typeScriptFileContent =
13- map importDeclaration virtualObjectInterfaces
14- ++ [ TypeScript. Declaration [] (TypeScript. ExportDec True " initialise" )
15- , TypeScript. Declaration
17+ virtualObjectInfoToInterfaceDecs
18+ False
19+ voMap
20+ (Info. mainObject apiInfo)
21+ ++ [ TypeScript. Declaration
1622 [ Info. initialiseFunctionDoc apiInfo
1723 , " @returns " <> Info. initialiseFunctionReturnDoc apiInfo
1824 ]
@@ -24,47 +30,65 @@ apiInfoToTypeScriptFile apiInfo =
2430 " Promise<" <> Info. virtualObjectName (Info. mainObject apiInfo) <> " >"
2531 }
2632 )
27- ]
28- ++ [ virtualObjectInfoToInterfaceDec $ Info. mainObject apiInfo
33+ , TypeScript. Declaration [] (TypeScript. ExportDec True " initialise" )
2934 ]
3035 }
3136 )
3237 : virtualObjectInterfaces
3338 where
3439 virtualObjectInterfaces =
35- map virtualObjectInfoToTypeScriptFile (Info. virtualObjects apiInfo)
40+ map (virtualObjectInfoToTypeScriptFile voMap) (Info. virtualObjects apiInfo)
41+
42+ voMap = Map. fromList [(Info. virtualObjectName vo, vo) | vo <- Info. virtualObjects apiInfo]
3643
37- importDeclaration :: TypeScript. TypeScriptFile -> TypeScript. Declaration
38- importDeclaration file =
44+ importDeclaration :: Info. VirtualObjectInfo -> TypeScript. Declaration
45+ importDeclaration vo =
3946 TypeScript. Declaration
4047 { TypeScript. declarationComment = []
41- , TypeScript. declarationContent = TypeScript. ImportDec $ " ./" <> TypeScript. typeScriptFileName file
48+ , TypeScript. declarationContent =
49+ TypeScript. ImportDec (Info. virtualObjectName vo) $ Info. dashCaseName vo
4250 }
4351
44- virtualObjectInfoToTypeScriptFile :: Info. VirtualObjectInfo -> TypeScript. TypeScriptFile
45- virtualObjectInfoToTypeScriptFile vo =
52+ importDeclarations
53+ :: Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> [TypeScript. Declaration ]
54+ importDeclarations voMap (Info. VirtualObjectInfo {Info. virtualObjectMethods = methods}) =
55+ map
56+ importDeclaration
57+ $ nub
58+ [ vo
59+ | Info. MethodInfo {Info. methodReturnType = Info. NewObject returnType} <- methods
60+ , Just vo <- [Map. lookup returnType voMap]
61+ ]
62+
63+ virtualObjectInfoToTypeScriptFile
64+ :: Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> TypeScript. TypeScriptFile
65+ virtualObjectInfoToTypeScriptFile voMap vo =
4666 TypeScript. TypeScriptFile
4767 { TypeScript. typeScriptFileName = Info. dashCaseName vo <> " .d.ts"
48- , TypeScript. typeScriptFileContent =
49- [virtualObjectInfoToInterfaceDec vo]
68+ , TypeScript. typeScriptFileContent = virtualObjectInfoToInterfaceDecs True voMap vo
5069 }
5170
52- virtualObjectInfoToInterfaceDec :: Info. VirtualObjectInfo -> TypeScript. Declaration
53- virtualObjectInfoToInterfaceDec vo =
54- TypeScript. Declaration
55- [Info. virtualObjectDoc vo]
56- ( TypeScript. InterfaceDec
57- (Info. virtualObjectName vo)
58- ( [ TypeScript. InterfaceContent
59- [ " The type of the object, used for identification (the \" "
60- <> Info. virtualObjectName vo
61- <> " \" string)."
62- ]
63- (TypeScript. InterfaceProperty " objectType" " string" )
64- ]
65- <> map (methodInfoToInterfaceContent (Info. virtualObjectName vo)) (Info. virtualObjectMethods vo)
66- )
67- )
71+ virtualObjectInfoToInterfaceDecs
72+ :: Bool -> Map String Info. VirtualObjectInfo -> Info. VirtualObjectInfo -> [TypeScript. Declaration ]
73+ virtualObjectInfoToInterfaceDecs isDefaultExport voMap vo =
74+ importDeclarations voMap vo
75+ ++ [ TypeScript. Declaration
76+ [Info. virtualObjectDoc vo]
77+ ( TypeScript. InterfaceDec
78+ (Info. virtualObjectName vo)
79+ ( [ TypeScript. InterfaceContent
80+ [ " The type of the object, used for identification (the \" "
81+ <> Info. virtualObjectName vo
82+ <> " \" string)."
83+ ]
84+ (TypeScript. InterfaceProperty " objectType" " string" )
85+ ]
86+ <> map (methodInfoToInterfaceContent (Info. virtualObjectName vo)) (Info. virtualObjectMethods vo)
87+ )
88+ )
89+ ]
90+ ++ [ TypeScript. Declaration [] (TypeScript. ExportDec True $ Info. virtualObjectName vo) | isDefaultExport
91+ ]
6892
6993methodInfoToInterfaceContent :: String -> Info. MethodInfo -> TypeScript. InterfaceContent
7094methodInfoToInterfaceContent selfTypeName method =
0 commit comments