@syncify/update
Version:
Version comparison and increment information for packages on the NPM Registry
6 lines (3 loc) • 2.16 kB
JavaScript
import { kill } from '@syncify/kill';
var w=/^(\d+)\.(\d+)\.(\d+)(-([a-z]+)(?:\.(\d+))?)?$/i;function C(o,a,n){let i=s=>{let e=s.match(w);if(!e)throw new Error(`Invalid version format: ${s}`);return {parts:[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10)],release:e[5]||"latest",preRelease:e[5]?`${e[5]}${e[6]?`.${e[6]}`:""}`:void 0,stage:e[5]?parseInt(e[6]||"0",10):null}},p=(s,e)=>{if(!s&&!e)return {comparison:0,step:!1};if(!s)return {comparison:1,step:!1};if(!e)return {comparison:-1,step:!1};let[u,h="0"]=s.split("."),[$,y="0"]=e.split("."),m=n[u.toLowerCase()]||0,g=n[$.toLowerCase()]||0;if(m!==g)return {comparison:m-g,step:!1};let f=Number(h)-Number(y);return {comparison:f,step:f!==0}},r=i(o),t=i(a),d=()=>{for(let e=0;e<3;e++)if(r.parts[e]-t.parts[e]!==0)return e===0?"major":e===1?"minor":"patch";return p(r.preRelease,t.preRelease).comparison!==0,"patch"};if(r.preRelease===t.preRelease){if(r.parts.every((s,e)=>s===t.parts[e]))return !1;if(Number(r.parts.join(""))>Number(t.parts.join("")))throw new Error(`Current version is greater than registry version: ${o} > ${a}`)}let l=d(),c=p(r.preRelease,t.preRelease),b=l==="major"||(n[r.release.toLowerCase()]||0)<(n[t.release.toLowerCase()]||0)||c.comparison>0||t.stage>r.stage,R=r.preRelease&&t.preRelease?r.release===t.release?`${r.release}.${r.stage} \u2192 ${t.release}.${t.stage}`:`${r.release} \u2192 ${t.release}`:r.preRelease?`${r.release} \u2192 latest`:`latest \u2192 ${t.release}`;return {change:l,bump:R,release:t.release,breaking:b,step:c.step,current:o,registry:a,parse:{get current(){return {major:r.parts[0],minor:r.parts[1],patch:r.parts[2],release:r.release,stage:r.stage}},get registry(){return {major:t.parts[0],minor:t.parts[1],patch:t.parts[2],release:t.release,stage:t.stage}}}}}async function I(o){let a=new AbortController;kill(()=>a.abort());try{return (await(await fetch(`https://registry.npmjs.org/${o}`,{signal:a.signal})).json()).version}catch{return null}}async function v(o,a,{tag:n="latest",priorities:i=void 0}={}){if(!process?.stdout?.isTTY)return;let p=await I(`${o}/${n}`);return p===null?!1:C(a,p,{alpha:1,beta:2,rc:3,...i})}var N=v;
export { N as default };