@@ -23,24 +23,27 @@ class Timer {
2323 }
2424}
2525
26- export async function scan ( files : Path [ ] , metadata : Metadata ) : Promise < Report > {
26+ export async function scan ( files : Path [ ] , metadata : Metadata , version ?: string ) : Promise < Report > {
2727 const timer = new Timer ( ) ;
2828 const synctexStore = new SynctexStore ( ) ;
2929 const texStore = new TexStore ( ) ;
3030 const cwd = process . cwd ( ) ;
31+ const versionData = findVersion ( metadata , version ) ;
32+ const toVersion = versionData . hash ;
33+
3134 const results = await Promise . allSettled (
3235 files . map ( async ( file ) => {
3336 const relativeFilePath = path . relative ( cwd , file ) ;
3437 timer . start ( relativeFilePath ) ;
35- const fileReport = await scanFile ( file , metadata , synctexStore , texStore ) ;
38+ const fileReport = await scanFile ( file , metadata , synctexStore , texStore , toVersion ) ;
3639 timer . end ( relativeFilePath , fileReport . allLinks . length > 0 ) ;
3740 printFileReport ( fileReport ) ;
3841 return fileReport ;
3942 } ) ,
4043 ) ;
4144
4245 const report = {
43- latestVersion : metadata . metadata . versions [ metadata . metadata . latest ] ?. name || metadata . latestShort ,
46+ latestVersion : versionData . name || version || metadata . latestShort ,
4447 detected : new Map ( ) ,
4548 outdated : new Map ( ) ,
4649 failed : new Map ( ) ,
@@ -63,11 +66,29 @@ export async function scan(files: Path[], metadata: Metadata): Promise<Report> {
6366 return Promise . resolve ( report ) ;
6467}
6568
69+ function findVersion ( metadata : Metadata , version = "latest" ) {
70+ const v = version === "latest" ? metadata . metadata . latest : version ;
71+ const versionData = metadata . metadata . versions [ v ] ;
72+ if ( versionData ) {
73+ return versionData ;
74+ }
75+
76+ // try lookup by name instead.
77+ for ( const v of Object . values ( metadata . metadata . versions ) ) {
78+ if ( v . name === version ) {
79+ return v ;
80+ }
81+ }
82+
83+ throw new Error ( `Version ${ version } not found.` ) ;
84+ }
85+
6686async function scanFile (
6787 path : Path ,
6888 metadata : Metadata ,
6989 synctexStore : SynctexStore ,
7090 texStore : TexStore ,
91+ toVersion : string ,
7192) : Promise < FileReport > {
7293 const links : [ number , string ] [ ] = [ ] ;
7394 const report : FileReport = {
@@ -83,7 +104,9 @@ async function scanFile(
83104 } ) ;
84105
85106 const linksParsed = await Promise . all (
86- links . map ( ( [ lineNumber , link ] ) => parseAndMigrateLink ( link , metadata , synctexStore , texStore , lineNumber ) ) ,
107+ links . map ( ( [ lineNumber , link ] ) =>
108+ parseAndMigrateLink ( link , metadata , synctexStore , texStore , toVersion , lineNumber ) ,
109+ ) ,
87110 ) ;
88111
89112 report . allLinks = linksParsed ;
0 commit comments