@@ -14,16 +14,9 @@ import (
1414 "github.com/microsoft/typescript-go/internal/vfs/iovfs"
1515)
1616
17- type cachedZipReader struct {
18- reader * zip.ReadCloser
19- lastUsed time.Time
20- zipMTime time.Time
21- }
22-
2317type pnpFS struct {
2418 fs vfs.FS
25- maxOpenReaders int
26- cachedZipReadersMap map [string ]* cachedZipReader
19+ cachedZipReadersMap map [string ]* zip.ReadCloser
2720 cacheReaderMutex sync.Mutex
2821}
2922
@@ -32,8 +25,7 @@ var _ vfs.FS = (*pnpFS)(nil)
3225func From (fs vfs.FS ) * pnpFS {
3326 pnpFS := & pnpFS {
3427 fs : fs ,
35- maxOpenReaders : 80 , // Max number of zip files that can be open at the same time
36- cachedZipReadersMap : make (map [string ]* cachedZipReader ),
28+ cachedZipReadersMap : make (map [string ]* zip.ReadCloser ),
3729 cacheReaderMutex : sync.Mutex {},
3830 }
3931
@@ -164,48 +156,25 @@ func getMatchingFS(pnpFS *pnpFS, path string) (vfs.FS, string, string) {
164156 return pnpFS .fs , path , ""
165157 }
166158
167- var usedReader * cachedZipReader
159+ var usedReader * zip. ReadCloser
168160
169161 pnpFS .cacheReaderMutex .Lock ()
170162 defer pnpFS .cacheReaderMutex .Unlock ()
171163
172- zipMTime := zipStat .ModTime ()
173-
174164 cachedReader , ok := pnpFS .cachedZipReadersMap [zipPath ]
175- if ok && cachedReader .zipMTime .Equal (zipMTime ) {
176- cachedReader .lastUsed = time .Now ()
165+ if ok {
177166 usedReader = cachedReader
178167 } else {
179168 zipReader , err := zip .OpenReader (zipPath )
180169 if err != nil {
181170 return pnpFS .fs , path , ""
182171 }
183172
184- if len (pnpFS .cachedZipReadersMap ) >= pnpFS .maxOpenReaders {
185- pnpFS .deleteOldestReader ()
186- }
187-
188- usedReader = & cachedZipReader {reader : zipReader , lastUsed : time .Now (), zipMTime : zipMTime }
173+ usedReader = zipReader
189174 pnpFS .cachedZipReadersMap [zipPath ] = usedReader
190175 }
191176
192- return iovfs .From (usedReader .reader , pnpFS .fs .UseCaseSensitiveFileNames ()), internalPath , zipPath
193- }
194-
195- func (pnpFS * pnpFS ) deleteOldestReader () {
196- var oldestReader * cachedZipReader
197- var oldestReaderPath string
198- for path , reader := range pnpFS .cachedZipReadersMap {
199- if oldestReader == nil || reader .lastUsed .Before (oldestReader .lastUsed ) {
200- oldestReader = reader
201- oldestReaderPath = path
202- }
203- }
204-
205- if oldestReader != nil {
206- oldestReader .reader .Close ()
207- delete (pnpFS .cachedZipReadersMap , oldestReaderPath )
208- }
177+ return iovfs .From (usedReader , pnpFS .fs .UseCaseSensitiveFileNames ()), internalPath , zipPath
209178}
210179
211180// Virtual paths are used to make different paths resolve to the same real file or folder, which is necessary in some cases when PnP is enabled
0 commit comments