@@ -34,7 +34,7 @@ class _AppCache {
3434 }
3535
3636 updatePayload ( pkg , payload ) {
37- fs . writeFileSync ( path . join ( kPayloadsPath , pkg ) , JSON . stringify ( payload ) ) ;
37+ fs . writeFileSync ( path . join ( kPayloadsPath , pkg . replaceAll ( "/" , "-" ) ) , JSON . stringify ( payload ) ) ;
3838 }
3939
4040 async getPayload ( pkg ) {
@@ -90,25 +90,37 @@ class _AppCache {
9090
9191 logger . info ( `[cache|init](dep: ${ formatted } |version: ${ version } |rootDependencyName: ${ payload . rootDependencyName } )` ) ;
9292 await cacache . put ( CACHE_PATH , kPayloadsCache , JSON . stringify ( payloadsList ) ) ;
93- this . updatePayload ( formatted . replaceAll ( "/" , "-" ) , payload ) ;
93+ this . updatePayload ( formatted , payload ) ;
9494 }
9595
96- async initPayloadsList ( ) {
96+ async initPayloadsList ( options = { } ) {
97+ const { logging = true } = options ;
98+
99+ try {
100+ // prevent re-initialization of the cache
101+ await cacache . get ( CACHE_PATH , kPayloadsCache ) ;
102+
103+ return ;
104+ }
105+ catch {
106+ // Do nothing.
107+ }
97108 const packagesInFolder = fs . readdirSync ( kPayloadsPath ) ;
98109 if ( packagesInFolder . length === 0 ) {
99- this . #initDefaultPayloadsList( ) ;
110+ await this . #initDefaultPayloadsList( ) ;
100111
101112 return ;
102113 }
103114
104- const list = packagesInFolder . map ( ( { name } ) => name ) ;
105- logger . info ( `[cache|init](list: ${ list } )` ) ;
115+ if ( logging ) {
116+ logger . info ( `[cache|init](packagesInFolder: ${ packagesInFolder } )` ) ;
117+ }
106118
107- await cacache . put ( CACHE_PATH , kPayloadsCache , JSON . stringify ( { list , current : list [ 0 ] } ) ) ;
119+ await cacache . put ( CACHE_PATH , kPayloadsCache , JSON . stringify ( { older : packagesInFolder , current : null , lru : [ ] } ) ) ;
108120 }
109121
110122 removePayload ( pkg ) {
111- fs . rmSync ( path . join ( kPayloadsPath , pkg ) ) ;
123+ fs . rmSync ( path . join ( kPayloadsPath , pkg . replaceAll ( "/" , "-" ) ) ) ;
112124 }
113125
114126 async removeLastLRU ( ) {
@@ -127,6 +139,26 @@ class _AppCache {
127139 root
128140 } ;
129141 }
142+
143+ async setRootPayload ( payload , options ) {
144+ const { logging = true } = options ;
145+
146+ const version = Object . keys ( payload . dependencies [ payload . rootDependencyName ] . versions ) [ 0 ] ;
147+ const pkg = `${ payload . rootDependencyName } @${ version } ` ;
148+ this . updatePayload ( pkg , payload ) ;
149+
150+ await this . initPayloadsList ( { logging } ) ;
151+
152+ const { lru, older, lastUsed } = await this . removeLastLRU ( ) ;
153+ const updatedPayloadsCache = {
154+ lru : [ ...new Set ( [ ...lru , pkg ] ) ] ,
155+ older,
156+ lastUsed : { ...lastUsed , [ pkg ] : Date . now ( ) } ,
157+ current : pkg ,
158+ root : pkg
159+ } ;
160+ await this . updatePayloadsList ( updatedPayloadsCache ) ;
161+ }
130162}
131163
132164export const appCache = new _AppCache ( ) ;
0 commit comments