@@ -12,6 +12,7 @@ import {
1212} from "@definitelytyped/utils" ;
1313import { fetchTypesPackageVersionInfo } from "@definitelytyped/retag" ;
1414import * as pacote from "pacote" ;
15+ import * as semver from "semver" ;
1516
1617if ( ! module . parent ) {
1718 const log = loggerWithErrors ( ) [ 0 ] ;
@@ -37,9 +38,9 @@ async function computeAndSaveChangedPackages(
3738 const cp = await computeChangedPackages ( allPackages , log ) ;
3839 const json : ChangedPackagesJson = {
3940 changedTypings : cp . changedTypings . map (
40- ( { pkg : { id } , version, latestVersion } ) : ChangedTypingJson => ( { id , version, latestVersion } )
41+ ( { pkg : { name } , version, latestVersion } ) : ChangedTypingJson => ( { name , version, latestVersion } )
4142 ) ,
42- changedNotNeededPackages : cp . changedNotNeededPackages . map ( ( p ) => p . name ) ,
43+ changedNotNeededPackages : cp . changedNotNeededPackages . map ( ( { pkg : { name } , version } ) => ( { name, version } ) ) ,
4344 } ;
4445 await writeDataFile ( versionsFilename , json ) ;
4546 return cp ;
@@ -72,7 +73,8 @@ async function computeChangedPackages(allPackages: AllPackages, log: LoggerWithE
7273 } ) ;
7374 log . info ( "# Computing deprecated packages..." ) ;
7475 const changedNotNeededPackages = await mapDefinedAsync ( allPackages . allNotNeeded ( ) , async ( pkg ) => {
75- if ( ! ( await isAlreadyDeprecated ( pkg , log ) ) ) {
76+ const incipientVersion = await fetchIncipientStubVersion ( pkg , log ) ;
77+ if ( incipientVersion ) {
7678 // Assert that dependencies (i.e. the replacement package) exist on npm.
7779 // Also checked in checkNotNeededPackage().
7880 await pacote . manifest ( pkg . libraryName , { cache : cacheDir } ) . catch ( ( reason ) => {
@@ -81,20 +83,30 @@ async function computeChangedPackages(allPackages: AllPackages, log: LoggerWithE
8183 : reason ;
8284 } ) ;
8385 log . info ( `To be deprecated: ${ pkg . name } ` ) ;
84- return pkg ;
86+ return { pkg, version : incipientVersion } ;
8587 }
8688 return undefined ;
8789 } ) ;
8890 return { changedTypings, changedNotNeededPackages } ;
8991}
9092
91- async function isAlreadyDeprecated ( pkg : NotNeededPackage , log : LoggerWithErrors ) : Promise < unknown > {
92- const offline = await pacote . manifest ( pkg . fullNpmName , { cache : cacheDir , offline : true } ) . catch ( ( reason ) => {
93- if ( reason . code !== "ENOTCACHED" ) throw reason ;
94- return undefined ;
95- } ) ;
96- if ( offline ?. deprecated ) return offline . deprecated ;
97- log . info ( `Version info not cached for deprecated package ${ pkg . desc } ` ) ;
98- const online = await pacote . manifest ( pkg . fullNpmName , { cache : cacheDir , preferOnline : true } ) ;
99- return online . deprecated ;
93+ /**
94+ * Return the version of the stub @types package we're about to publish and deprecate, if we haven't already deprecated that package.
95+ * It's the max of the not-needed version and the max published version + 1, in case we already published a not-needed-versioned stub but failed to deprecate it, for whatever reason.
96+ */
97+ export async function fetchIncipientStubVersion ( pkg : NotNeededPackage , log : LoggerWithErrors ) {
98+ const packument = await revalidate ( ) ;
99+ if ( packument . versions [ packument [ "dist-tags" ] . latest ] . deprecated ) return ;
100+ const maxVersion = semver . maxSatisfying ( Object . keys ( packument . versions ) , "*" ) ! ;
101+ return String ( semver . maxSatisfying ( [ pkg . version , semver . inc ( maxVersion , "patch" ) ! ] , "*" ) ) ;
102+
103+ async function revalidate ( ) {
104+ const offline = await pacote . packument ( pkg . fullNpmName , { cache : cacheDir , offline : true } ) . catch ( ( reason ) => {
105+ if ( reason . code !== "ENOTCACHED" ) throw reason ;
106+ return undefined ;
107+ } ) ;
108+ if ( offline ?. versions [ offline [ "dist-tags" ] . latest ] . deprecated ) return offline ;
109+ log . info ( `Version info not cached for deprecated package ${ pkg . desc } ` ) ;
110+ return pacote . packument ( pkg . fullNpmName , { cache : cacheDir , preferOnline : true } ) ;
111+ }
100112}
0 commit comments