@@ -20,7 +20,7 @@ export function paramsNotation <T> (outer: string, inner?: T | T[], transform: (
2020 } `;
2121}
2222
23- function encodeWithParams ( CodecRegistry : CodecRegistry , typeDef : TypeDef , outer : string ) : string {
23+ function encodeWithParams ( registry : CodecRegistry , typeDef : TypeDef , outer : string ) : string {
2424 const { info, sub } = typeDef ;
2525
2626 switch ( info ) {
@@ -30,17 +30,18 @@ function encodeWithParams (CodecRegistry: CodecRegistry, typeDef: TypeDef, outer
3030 case TypeDefInfo . HashMap :
3131 case TypeDefInfo . Linkage :
3232 case TypeDefInfo . Option :
33+ case TypeDefInfo . Range :
3334 case TypeDefInfo . Result :
3435 case TypeDefInfo . Vec :
3536 case TypeDefInfo . WrapperKeepOpaque :
3637 case TypeDefInfo . WrapperOpaque :
37- return paramsNotation ( outer , sub , ( p ) => encodeTypeDef ( CodecRegistry , p ) ) ;
38+ return paramsNotation ( outer , sub , ( p ) => encodeTypeDef ( registry , p ) ) ;
3839 }
3940
4041 throw new Error ( `Unable to encode ${ stringify ( typeDef ) } with params` ) ;
4142}
4243
43- function encodeSubTypes ( CodecRegistry : CodecRegistry , sub : TypeDef [ ] , asEnum ?: boolean , extra ?: Record < string , unknown > ) : string {
44+ function encodeSubTypes ( registry : CodecRegistry , sub : TypeDef [ ] , asEnum ?: boolean , extra ?: Record < string , unknown > ) : string {
4445 const names = sub . map ( ( { name } ) => name ) ;
4546
4647 assert ( names . every ( ( n ) => ! ! n ) , ( ) => `Subtypes does not have consistent names, ${ names . join ( ', ' ) } ` ) ;
@@ -50,7 +51,7 @@ function encodeSubTypes (CodecRegistry: CodecRegistry, sub: TypeDef[], asEnum?:
5051 for ( let i = 0 ; i < sub . length ; i ++ ) {
5152 const def = sub [ i ] ;
5253
53- inner [ def . name as string ] = encodeTypeDef ( CodecRegistry , def ) ;
54+ inner [ def . name as string ] = encodeTypeDef ( registry , def ) ;
5455 }
5556
5657 return stringify (
@@ -62,44 +63,44 @@ function encodeSubTypes (CodecRegistry: CodecRegistry, sub: TypeDef[], asEnum?:
6263
6364// We setup a record here to ensure we have comprehensive coverage (any item not covered will result
6465// in a compile-time error with the missing index)
65- const encoders : Record < TypeDefInfo , ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) => string > = {
66- [ TypeDefInfo . BTreeMap ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
67- encodeWithParams ( CodecRegistry , typeDef , 'BTreeMap' ) ,
68- [ TypeDefInfo . BTreeSet ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
69- encodeWithParams ( CodecRegistry , typeDef , 'BTreeSet' ) ,
70- [ TypeDefInfo . Compact ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
71- encodeWithParams ( CodecRegistry , typeDef , 'Compact' ) ,
72- [ TypeDefInfo . DoNotConstruct ] : ( CodecRegistry : CodecRegistry , { displayName, lookupIndex, lookupName } : TypeDef ) =>
73- `DoNotConstruct<${ lookupName || displayName || ( isUndefined ( lookupIndex ) ? 'Unknown' : CodecRegistry . createLookupType ( lookupIndex ) ) } >` ,
74- [ TypeDefInfo . Enum ] : ( CodecRegistry : CodecRegistry , { sub } : TypeDef ) : string => {
66+ const encoders : Record < TypeDefInfo , ( registry : CodecRegistry , typeDef : TypeDef ) => string > = {
67+ [ TypeDefInfo . BTreeMap ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
68+ encodeWithParams ( registry , typeDef , 'BTreeMap' ) ,
69+ [ TypeDefInfo . BTreeSet ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
70+ encodeWithParams ( registry , typeDef , 'BTreeSet' ) ,
71+ [ TypeDefInfo . Compact ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
72+ encodeWithParams ( registry , typeDef , 'Compact' ) ,
73+ [ TypeDefInfo . DoNotConstruct ] : ( registry : CodecRegistry , { displayName, lookupIndex, lookupName } : TypeDef ) =>
74+ `DoNotConstruct<${ lookupName || displayName || ( isUndefined ( lookupIndex ) ? 'Unknown' : registry . createLookupType ( lookupIndex ) ) } >` ,
75+ [ TypeDefInfo . Enum ] : ( registry : CodecRegistry , { sub } : TypeDef ) : string => {
7576 assert ( sub && Array . isArray ( sub ) , 'Unable to encode Enum type' ) ;
7677
7778 // c-like enums have all Null entries
7879 // TODO We need to take the disciminant into account and auto-add empty entries
7980 return sub . every ( ( { type } ) => type === 'Null' )
8081 ? stringify ( { _enum : sub . map ( ( { name } , index ) => `${ name || `Empty${ index } ` } ` ) } )
81- : encodeSubTypes ( CodecRegistry , sub , true ) ;
82+ : encodeSubTypes ( registry , sub , true ) ;
8283 } ,
83- [ TypeDefInfo . HashMap ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
84- encodeWithParams ( CodecRegistry , typeDef , 'HashMap' ) ,
85- [ TypeDefInfo . Int ] : ( CodecRegistry : CodecRegistry , { length = 32 } : TypeDef ) =>
84+ [ TypeDefInfo . HashMap ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
85+ encodeWithParams ( registry , typeDef , 'HashMap' ) ,
86+ [ TypeDefInfo . Int ] : ( registry : CodecRegistry , { length = 32 } : TypeDef ) =>
8687 `Int<${ length } >` ,
87- [ TypeDefInfo . Linkage ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
88- encodeWithParams ( CodecRegistry , typeDef , 'Linkage' ) ,
88+ [ TypeDefInfo . Linkage ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
89+ encodeWithParams ( registry , typeDef , 'Linkage' ) ,
8990 // eslint-disable-next-line @typescript-eslint/no-unused-vars
90- [ TypeDefInfo . Null ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
91+ [ TypeDefInfo . Null ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
9192 'Null' ,
92- [ TypeDefInfo . Option ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
93- encodeWithParams ( CodecRegistry , typeDef , 'Option' ) ,
93+ [ TypeDefInfo . Option ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
94+ encodeWithParams ( registry , typeDef , 'Option' ) ,
9495 // eslint-disable-next-line @typescript-eslint/no-unused-vars
95- [ TypeDefInfo . Plain ] : ( CodecRegistry : CodecRegistry , { displayName, type } : TypeDef ) =>
96+ [ TypeDefInfo . Plain ] : ( registry : CodecRegistry , { displayName, type } : TypeDef ) =>
9697 displayName || type ,
97- [ TypeDefInfo . Range ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
98- encodeWithParams ( CodecRegistry , typeDef , typeDef . type . includes ( 'RangeInclusive' ) ? 'RangeInclusive' : 'Range' ) ,
99- [ TypeDefInfo . Result ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
100- encodeWithParams ( CodecRegistry , typeDef , 'Result' ) ,
98+ [ TypeDefInfo . Range ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
99+ encodeWithParams ( registry , typeDef , typeDef . type . includes ( 'RangeInclusive' ) ? 'RangeInclusive' : 'Range' ) ,
100+ [ TypeDefInfo . Result ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
101+ encodeWithParams ( registry , typeDef , 'Result' ) ,
101102 // eslint-disable-next-line @typescript-eslint/no-unused-vars
102- [ TypeDefInfo . Set ] : ( CodecRegistry : CodecRegistry , { length = 8 , sub } : TypeDef ) : string => {
103+ [ TypeDefInfo . Set ] : ( registry : CodecRegistry , { length = 8 , sub } : TypeDef ) : string => {
103104 assert ( sub && Array . isArray ( sub ) , 'Unable to encode Set type' ) ;
104105
105106 return stringify ( {
@@ -109,12 +110,12 @@ const encoders: Record<TypeDefInfo, (CodecRegistry: CodecRegistry, typeDef: Type
109110 } ) ;
110111 } ,
111112 // eslint-disable-next-line @typescript-eslint/no-unused-vars
112- [ TypeDefInfo . Si ] : ( CodecRegistry : CodecRegistry , { lookupName, type } : TypeDef ) =>
113+ [ TypeDefInfo . Si ] : ( registry : CodecRegistry , { lookupName, type } : TypeDef ) =>
113114 lookupName || type ,
114- [ TypeDefInfo . Struct ] : ( CodecRegistry : CodecRegistry , { alias, sub } : TypeDef ) : string => {
115+ [ TypeDefInfo . Struct ] : ( registry : CodecRegistry , { alias, sub } : TypeDef ) : string => {
115116 assert ( sub && Array . isArray ( sub ) , 'Unable to encode Struct type' ) ;
116117
117- return encodeSubTypes ( CodecRegistry , sub , false ,
118+ return encodeSubTypes ( registry , sub , false ,
118119 alias
119120 ? {
120121 _alias : [ ...alias . entries ( ) ] . reduce < Record < string , string > > ( ( all , [ k , v ] ) =>
@@ -124,43 +125,43 @@ const encoders: Record<TypeDefInfo, (CodecRegistry: CodecRegistry, typeDef: Type
124125 : { }
125126 ) ;
126127 } ,
127- [ TypeDefInfo . Tuple ] : ( CodecRegistry : CodecRegistry , { sub } : TypeDef ) : string => {
128+ [ TypeDefInfo . Tuple ] : ( registry : CodecRegistry , { sub } : TypeDef ) : string => {
128129 assert ( sub && Array . isArray ( sub ) , 'Unable to encode Tuple type' ) ;
129130
130- return `(${ sub . map ( ( type ) => encodeTypeDef ( CodecRegistry , type ) ) . join ( ',' ) } )` ;
131+ return `(${ sub . map ( ( type ) => encodeTypeDef ( registry , type ) ) . join ( ',' ) } )` ;
131132 } ,
132- [ TypeDefInfo . UInt ] : ( CodecRegistry : CodecRegistry , { length = 32 } : TypeDef ) =>
133+ [ TypeDefInfo . UInt ] : ( registry : CodecRegistry , { length = 32 } : TypeDef ) =>
133134 `UInt<${ length } >` ,
134- [ TypeDefInfo . Vec ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
135- encodeWithParams ( CodecRegistry , typeDef , 'Vec' ) ,
136- [ TypeDefInfo . VecFixed ] : ( CodecRegistry : CodecRegistry , { length, sub } : TypeDef ) : string => {
135+ [ TypeDefInfo . Vec ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
136+ encodeWithParams ( registry , typeDef , 'Vec' ) ,
137+ [ TypeDefInfo . VecFixed ] : ( registry : CodecRegistry , { length, sub } : TypeDef ) : string => {
137138 assert ( isNumber ( length ) && ! isUndefined ( sub ) && ! Array . isArray ( sub ) , 'Unable to encode VecFixed type' ) ;
138139
139140 return `[${ sub . type } ;${ length } ]` ;
140141 } ,
141- [ TypeDefInfo . WrapperKeepOpaque ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
142- encodeWithParams ( CodecRegistry , typeDef , 'WrapperKeepOpaque' ) ,
143- [ TypeDefInfo . WrapperOpaque ] : ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) =>
144- encodeWithParams ( CodecRegistry , typeDef , 'WrapperOpaque' )
142+ [ TypeDefInfo . WrapperKeepOpaque ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
143+ encodeWithParams ( registry , typeDef , 'WrapperKeepOpaque' ) ,
144+ [ TypeDefInfo . WrapperOpaque ] : ( registry : CodecRegistry , typeDef : TypeDef ) =>
145+ encodeWithParams ( registry , typeDef , 'WrapperOpaque' )
145146} ;
146147
147- function encodeType ( CodecRegistry : CodecRegistry , typeDef : TypeDef , withLookup = true ) : string {
148+ function encodeType ( registry : CodecRegistry , typeDef : TypeDef , withLookup = true ) : string {
148149 return withLookup && typeDef . lookupName
149150 ? typeDef . lookupName
150- : encoders [ typeDef . info ] ( CodecRegistry , typeDef ) ;
151+ : encoders [ typeDef . info ] ( registry , typeDef ) ;
151152}
152153
153- export function encodeTypeDef ( CodecRegistry : CodecRegistry , typeDef : TypeDef ) : string {
154+ export function encodeTypeDef ( registry : CodecRegistry , typeDef : TypeDef ) : string {
154155 // In the case of contracts we do have the unfortunate situation where the displayName would
155156 // refer to "Option" when it is an option. For these, string it out, only using when actually
156157 // not a top-level element to be used
157158 return ( typeDef . displayName && ! INFO_WRAP . some ( ( i ) => typeDef . displayName === i ) )
158159 ? typeDef . displayName
159- : encodeType ( CodecRegistry , typeDef ) ;
160+ : encodeType ( registry , typeDef ) ;
160161}
161162
162- export function withTypeString ( CodecRegistry : CodecRegistry , typeDef : Omit < TypeDef , 'type' > & { type ?: string } ) : TypeDef {
163+ export function withTypeString ( registry : CodecRegistry , typeDef : Omit < TypeDef , 'type' > & { type ?: string } ) : TypeDef {
163164 return objectSpread ( { } , typeDef , {
164- type : encodeType ( CodecRegistry , typeDef as TypeDef , false )
165+ type : encodeType ( registry , typeDef as TypeDef , false )
165166 } ) ;
166167}
0 commit comments