@@ -30,6 +30,8 @@ import { getTypeManifestVisitor } from './getTypeManifestVisitor';
3030import { ImportMap } from './ImportMap' ;
3131import { renderValueNode } from './renderValueNodeVisitor' ;
3232import {
33+ CargoDependencies ,
34+ Fragment ,
3335 getDiscriminatorConstants ,
3436 getImportFromFactory ,
3537 getTraitsFromNodeFactory ,
@@ -42,6 +44,7 @@ export type GetRenderMapOptions = {
4244 anchorTraits ?: boolean ;
4345 defaultTraitOverrides ?: string [ ] ;
4446 dependencyMap ?: Record < string , string > ;
47+ dependencyVersions ?: CargoDependencies ;
4548 linkOverrides ?: LinkOverrides ;
4649 renderParentInstructions ?: boolean ;
4750 traitOptions ?: TraitOptions ;
@@ -64,7 +67,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
6467 const anchorTraits = options . anchorTraits ?? true ;
6568
6669 return pipe (
67- staticVisitor ( ( ) => createRenderMap ( ) , {
70+ staticVisitor ( ( ) => createRenderMap < Fragment > ( ) , {
6871 keys : [ 'rootNode' , 'programNode' , 'instructionNode' , 'accountNode' , 'definedTypeNode' ] ,
6972 } ) ,
7073 v =>
@@ -107,11 +110,10 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
107110 . filter ( isNodeFilter ( 'constantPdaSeedNode' ) )
108111 . filter ( seed => ! isNode ( seed . value , 'programIdValueNode' ) ) ;
109112
110- const { imports } = typeManifest ;
111-
112- if ( hasVariableSeeds ) {
113- imports . mergeWith ( seedsImports ) ;
114- }
113+ const imports = typeManifest . imports
114+ . mergeWith ( ...( hasVariableSeeds ? [ seedsImports ] : [ ] ) )
115+ . mergeWith ( discriminatorConstants . imports )
116+ . remove ( `generatedAccounts::${ pascalCase ( node . name ) } ` ) ;
115117
116118 return createRenderMap ( `accounts/${ snakeCase ( node . name ) } .rs` , {
117119 content : render ( 'accountsPage.njk' , {
@@ -120,28 +122,29 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
120122 constantSeeds,
121123 discriminatorConstants : discriminatorConstants . render ,
122124 hasVariableSeeds,
123- imports : imports
124- . mergeWith ( discriminatorConstants . imports )
125- . remove ( `generatedAccounts::${ pascalCase ( node . name ) } ` )
126- . toString ( dependencyMap ) ,
125+ imports : imports . toString ( dependencyMap ) ,
127126 pda,
128127 program,
129128 seeds,
130129 typeManifest,
131130 } ) ,
131+ imports,
132132 } ) ;
133133 } ,
134134
135135 visitDefinedType ( node ) {
136136 const typeManifest = visit ( node , typeManifestVisitor ) ;
137- const imports = new ImportMap ( ) . mergeWithManifest ( typeManifest ) ;
137+ const imports = new ImportMap ( )
138+ . mergeWithManifest ( typeManifest )
139+ . remove ( `generatedTypes::${ pascalCase ( node . name ) } ` ) ;
138140
139141 return createRenderMap ( `types/${ snakeCase ( node . name ) } .rs` , {
140142 content : render ( 'definedTypesPage.njk' , {
141143 definedType : node ,
142- imports : imports . remove ( `generatedTypes:: ${ pascalCase ( node . name ) } ` ) . toString ( dependencyMap ) ,
144+ imports : imports . toString ( dependencyMap ) ,
143145 typeManifest,
144146 } ) ,
147+ imports,
145148 } ) ;
146149 } ,
147150
@@ -231,23 +234,24 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
231234 const typeManifest = visit ( struct , structVisitor ) ;
232235
233236 const dataTraits = getTraitsFromNode ( node ) ;
234- imports . mergeWith ( dataTraits . imports ) ;
237+ imports
238+ . mergeWith ( dataTraits . imports )
239+ . mergeWith ( discriminatorConstants . imports )
240+ . remove ( `generatedInstructions::${ pascalCase ( node . name ) } ` ) ;
235241
236242 return createRenderMap ( `instructions/${ snakeCase ( node . name ) } .rs` , {
237243 content : render ( 'instructionsPage.njk' , {
238244 dataTraits : dataTraits . render ,
239245 discriminatorConstants : discriminatorConstants . render ,
240246 hasArgs,
241247 hasOptional,
242- imports : imports
243- . mergeWith ( discriminatorConstants . imports )
244- . remove ( `generatedInstructions::${ pascalCase ( node . name ) } ` )
245- . toString ( dependencyMap ) ,
248+ imports : imports . toString ( dependencyMap ) ,
246249 instruction : node ,
247250 instructionArgs,
248251 program,
249252 typeManifest,
250253 } ) ,
254+ imports,
251255 } ) ;
252256 } ,
253257
@@ -269,6 +273,7 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
269273 imports : new ImportMap ( ) . toString ( dependencyMap ) ,
270274 program : node ,
271275 } ) ,
276+ imports : new ImportMap ( ) ,
272277 } ) ;
273278 }
274279
@@ -301,21 +306,29 @@ export function getRenderMapVisitor(options: GetRenderMapOptions = {}) {
301306 return mergeRenderMaps ( [
302307 createRenderMap ( {
303308 [ 'accounts/mod.rs' ] :
304- accountsToExport . length > 0 ? { content : render ( 'accountsMod.njk' , ctx ) } : undefined ,
309+ accountsToExport . length > 0
310+ ? { content : render ( 'accountsMod.njk' , ctx ) , imports : new ImportMap ( ) }
311+ : undefined ,
305312 [ 'errors/mod.rs' ] :
306- programsToExport . length > 0 ? { content : render ( 'errorsMod.njk' , ctx ) } : undefined ,
313+ programsToExport . length > 0
314+ ? { content : render ( 'errorsMod.njk' , ctx ) , imports : new ImportMap ( ) }
315+ : undefined ,
307316 [ 'instructions/mod.rs' ] :
308317 instructionsToExport . length > 0
309- ? { content : render ( 'instructionsMod.njk' , ctx ) }
318+ ? { content : render ( 'instructionsMod.njk' , ctx ) , imports : new ImportMap ( ) }
310319 : undefined ,
311- [ 'mod.rs' ] : { content : render ( 'rootMod.njk' , ctx ) } ,
320+ [ 'mod.rs' ] : { content : render ( 'rootMod.njk' , ctx ) , imports : new ImportMap ( ) } ,
312321 [ 'programs.rs' ] :
313- programsToExport . length > 0 ? { content : render ( 'programsMod.njk' , ctx ) } : undefined ,
322+ programsToExport . length > 0
323+ ? { content : render ( 'programsMod.njk' , ctx ) , imports : new ImportMap ( ) }
324+ : undefined ,
314325 [ 'shared.rs' ] :
315- accountsToExport . length > 0 ? { content : render ( 'sharedPage.njk' , ctx ) } : undefined ,
326+ accountsToExport . length > 0
327+ ? { content : render ( 'sharedPage.njk' , ctx ) , imports : new ImportMap ( ) }
328+ : undefined ,
316329 [ 'types/mod.rs' ] :
317330 definedTypesToExport . length > 0
318- ? { content : render ( 'definedTypesMod.njk' , ctx ) }
331+ ? { content : render ( 'definedTypesMod.njk' , ctx ) , imports : new ImportMap ( ) }
319332 : undefined ,
320333 } ) ,
321334 ...getAllPrograms ( node ) . map ( p => visit ( p , self ) ) ,
0 commit comments