@@ -62,14 +62,18 @@ async function tag(dry: boolean, nProcesses: number, name?: string) {
6262 if ( name ) {
6363 const pkg = await AllPackages . readSingle ( name ) ;
6464 const version = await getLatestTypingVersion ( pkg ) ;
65- await updateTypeScriptVersionTags ( pkg , version , publishClient , consoleLogger . info , dry ) ;
66- await updateLatestTag ( pkg . fullNpmName , version , publishClient , consoleLogger . info , dry ) ;
65+ if ( version ) {
66+ await updateTypeScriptVersionTags ( pkg , version , publishClient , consoleLogger . info , dry ) ;
67+ await updateLatestTag ( pkg . fullNpmName , version , publishClient , consoleLogger . info , dry ) ;
68+ }
6769 } else {
6870 await nAtATime ( 10 , await AllPackages . readLatestTypings ( ) , async ( pkg ) => {
6971 // Only update tags for the latest version of the package.
7072 const version = await getLatestTypingVersion ( pkg ) ;
71- await updateTypeScriptVersionTags ( pkg , version , publishClient , consoleLogger . info , dry ) ;
72- await updateLatestTag ( pkg . fullNpmName , version , publishClient , consoleLogger . info , dry ) ;
73+ if ( version ) {
74+ await updateTypeScriptVersionTags ( pkg , version , publishClient , consoleLogger . info , dry ) ;
75+ await updateLatestTag ( pkg . fullNpmName , version , publishClient , consoleLogger . info , dry ) ;
76+ }
7377 } ) ;
7478 }
7579 // Don't tag notNeeded packages
@@ -109,15 +113,20 @@ export async function updateLatestTag(
109113 }
110114}
111115
112- export async function getLatestTypingVersion ( pkg : TypingsData ) : Promise < string > {
113- return ( await fetchTypesPackageVersionInfo ( pkg , /*publish*/ false ) ) . version ;
116+ export async function getLatestTypingVersion ( pkg : TypingsData ) : Promise < string | undefined > {
117+ return ( await fetchTypesPackageVersionInfo ( pkg ) ) . publishedVersion ;
114118}
115119
120+ /**
121+ * Used for two purposes: to determine whether a @types package has changed since it was last published, and to get a package's version in the npm registry.
122+ * We ignore whether the cached metadata is fresh or stale: We always revalidate if the content hashes differ (fresh or not) and never revalidate if they match (stale or not).
123+ * Because the decider is the content hash, this isn't applicable to other npm packages.
124+ * Target JS packages and not-needed stubs don't have content hashes.
125+ */
116126export async function fetchTypesPackageVersionInfo (
117127 pkg : TypingsData ,
118- canPublish : boolean ,
119128 log ?: LoggerWithErrors
120- ) : Promise < { version : string ; needsPublish : boolean } > {
129+ ) : Promise < { publishedVersion ? : string ; incipientVersion ?: string } > {
121130 const spec = `${ pkg . fullNpmName } @~${ pkg . major } .${ pkg . minor } ` ;
122131 let info = await pacote
123132 . manifest ( spec , { cache : defaultCacheDir , fullMetadata : true , offline : true } )
@@ -136,7 +145,7 @@ export async function fetchTypesPackageVersionInfo(
136145 return undefined ;
137146 } ) ;
138147 if ( ! info ) {
139- return { version : `${ pkg . major } .${ pkg . minor } .0` , needsPublish : true } ;
148+ return { incipientVersion : `${ pkg . major } .${ pkg . minor } .0` } ;
140149 }
141150 }
142151
@@ -147,6 +156,10 @@ export async function fetchTypesPackageVersionInfo(
147156 `Package ${pkg . name } has been deprecated , so we shouldn 't have parsed it. Was it re-added?`
148157 ) ;
149158 }
150- const needsPublish = canPublish && pkg . contentHash !== info . typesPublisherContentHash ;
151- return { version : needsPublish ? semver . inc ( info . version , "patch" ) ! : info . version , needsPublish } ;
159+ return {
160+ publishedVersion : info . version ,
161+ ...( ( ( pkg . contentHash === info . typesPublisherContentHash ) as { } ) || {
162+ incipientVersion : semver . inc ( info . version , "patch" ) ! ,
163+ } ) ,
164+ } ;
152165}
0 commit comments