@@ -2,7 +2,9 @@ import fs from 'fs'
22import os from 'os'
33import path from 'path'
44import { CacheData , Cacher } from '../types/Cacher'
5+ import { Index } from '../types/IndexType'
56import { Options } from '../types/Options'
7+ import { Version } from '../types/Version'
68import { print } from './logging'
79
810export const CACHE_DELIMITER = '___'
@@ -55,7 +57,7 @@ export default async function cacher(options: Omit<Options, 'cacher'>): Promise<
5557
5658 const cacheFile = resolveCacheFile ( options . cacheFile )
5759 let cacheData : CacheData = { }
58- const cacheUpdates : Record < string , string > = { }
60+ const cacheHits = new Set < string > ( )
5961
6062 try {
6163 cacheData = JSON . parse ( await fs . promises . readFile ( cacheFile , 'utf-8' ) )
@@ -76,32 +78,53 @@ export default async function cacher(options: Omit<Options, 'cacher'>): Promise<
7678 if ( ! cacheData . packages ) {
7779 cacheData . packages = { }
7880 }
81+ if ( ! cacheData . peers ) {
82+ cacheData . peers = { }
83+ }
7984
8085 return {
8186 get : ( name : string , target : string ) => {
87+ if ( ! cacheData . packages ) return
8288 const key = `${ name } ${ CACHE_DELIMITER } ${ target } `
83- if ( ! key || ! cacheData . packages ) return
8489 const cached = cacheData . packages [ key ]
8590 if ( cached && ! key . includes ( cached ) ) {
86- const [ name ] = key . split ( CACHE_DELIMITER )
87- cacheUpdates [ name ] = cached
91+ cacheHits . add ( name )
8892 }
8993 return cached
9094 } ,
9195 set : ( name : string , target : string , version : string ) => {
96+ if ( ! cacheData . packages ) return
9297 const key = `${ name } ${ CACHE_DELIMITER } ${ target } `
93- if ( ! key || ! cacheData . packages ) return
9498 cacheData . packages [ key ] = version
9599 } ,
100+ getPeers : ( name : string , version : Version ) => {
101+ if ( ! cacheData . peers ) return
102+ const key = `${ name } ${ CACHE_DELIMITER } ${ version } `
103+ const cached = cacheData . peers [ key ]
104+ if ( cached ) {
105+ cacheHits . add ( name )
106+ }
107+ return cached
108+ } ,
109+ setPeers : ( name : string , version : Version , peers : Index < string > ) => {
110+ const key = `${ name } ${ CACHE_DELIMITER } ${ version } `
111+ if ( ! cacheData . peers ) return
112+ cacheData . peers [ key ] = peers
113+ } ,
96114 save : async ( ) => {
97115 await fs . promises . writeFile ( cacheFile , JSON . stringify ( cacheData ) )
98116 } ,
99- log : ( ) => {
100- const cacheCount = Object . keys ( cacheUpdates ) . length
117+ log : ( peers ?: boolean ) => {
118+ const cacheCount = cacheHits . size
101119 if ( cacheCount === 0 ) return
102120
103- print ( options , `\nUsing ${ cacheCount } cached package version${ cacheCount > 1 ? 's' : '' } ` , 'warn' )
104- print ( options , cacheUpdates , 'verbose' )
121+ print (
122+ options ,
123+ `\nUsing ${ cacheCount } cached package ${ peers ? 'peer' : 'version' } ${ cacheCount > 1 ? 's' : '' } ` ,
124+ 'warn' ,
125+ )
126+ print ( options , cacheHits , 'verbose' )
127+ cacheHits . clear ( )
105128 } ,
106- } as Cacher
129+ } satisfies Cacher
107130}
0 commit comments