@smarlhens/npm-check-engines 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  ## Prerequisites
27
27
 
28
- - [Node.JS](https://nodejs.org/en/download/) **version ^14.17.0 || ^16.10.0 || ^18.0.0**
28
+ - [Node.JS](https://nodejs.org/en/download/) **version ^16.13.0 || ^18.0.0**
29
29
 
30
30
  ---
31
31
 
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var fe=Object.create;var E=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,we=Object.prototype.hasOwnProperty;var i=(e,t)=>E(e,"name",{value:t,configurable:!0});var ke=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ue(t))!we.call(e,o)&&o!==n&&E(e,o,{get:()=>t[o],enumerable:!(a=de(t,o))||a.enumerable});return e};var d=(e,t,n)=>(n=e!=null?fe(he(e)):{},ke(t||!e||!e.__esModule?E(n,"default",{value:e,enumerable:!0}):n,e));var pe=require("path"),le=require("url"),me=d(require("update-notifier"),1);var T=require("path");var y=d(require("debug"),1);var be="nce",q=(0,y.default)(be),M=i(()=>y.default.disable(),"namespaces"),U=i(e=>y.default.enable(e),"enableNamespaces");var V=i(({debug:e,quiet:t,verbose:n},a=process.env)=>{if(t)return{renderer:"silent"};if(n)return{renderer:"simple"};let o=a.TERM==="dumb";return e||o||a.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");var r=d(require("chalk"),1),Y=d(require("cli-table"),1),Z=require("listr2"),F=d(require("lodash"),1),S=require("path"),L=require("url"),f=d(require("semver"),1),ee=d(require("sort-package-json"),1);var z=d(require("ajv-draft-04"),1),H=d(require("ajv-formats"),1),I="../schemas/schema-package.json",W="../schemas/schema-package-lock.json",C=(0,H.default)(new z.default({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));var B="package.json",G="package-lock.json",R=["node","npm","yarn"];var P=d(require("fs/promises"),1),v=d(require("path"),1);var b=i(async e=>JSON.parse(await P.default.readFile(e,"utf8")),"getJson"),_=i(async(e,t)=>P.default.writeFile(e,JSON.stringify(t,null,2),"utf8"),"writeJson"),$e=i(e=>v.default.isAbsolute(e),"isAbsolutePath"),w=i((...e)=>v.default.join(...e),"joinPath"),j=i(e=>{let{workingDir:t,path:n}=e;return n?$e(n)?v.default.relative(t,n):v.default.relative(t,w(t,n)):t},"getRelativePath");var ae={};var k={loose:!1},N=i(e=>[...e.map(t=>[...t])].sort((t,n)=>f.default.compare(t[0].semver,n[0].semver)),"sortRangeSet"),O=i(e=>new f.default.Range(e.map(t=>t.map(n=>n.value).join(" ")).join("||"),k),"setToRange"),K=i((e,t)=>[...e.map(n=>[...n])].filter(n=>n[0].semver.major>=t.major).map(n=>(n[0].semver.major===t.major&&f.default.gte(t,n[0].semver,k)&&(n[0]=new f.default.Comparator(`${n[0].operator}${t.raw}`)),n)),"applyMinVersionToRangeSet"),J=i((e,t,n,a)=>{if(a(`${r.default.white("Compare:")} ${r.default.blue(e.raw)} ${r.default.white("and")} ${r.default.blue(t.raw)}`),f.default.subset(e,t))return a(`${r.default.white("Range")} ${r.default.green(e.raw)} ${r.default.white("is a subset of")} ${r.default.blue(t.raw)}`),n.push(t.raw),e;if(f.default.subset(t,e))return a(`${r.default.white("Range")} ${r.default.green(t.raw)} ${r.default.white("is a subset of")} ${r.default.blue(e.raw)}`),n.push(e.raw),t;let o=f.default.minVersion(e,k)||new f.default.SemVer("*"),s=f.default.minVersion(t,k)||new f.default.SemVer("*"),c=N(e.set),p=N(t.set);if(!f.default.eq(o,s,k)){let x=f.default.compare(o,s)===-1?s:o;a(`${r.default.white("Applying minimal version")} ${r.default.yellow(x.version)} ${r.default.white("to both ranges.")}`);let D=O(K(c,x)),A=O(K(p,x));if(D.intersects(A,k))return J(D,A,n,a);throw new Error("Not yet implemented :/")}let l=c.shift(),m=p.shift(),g=l||m;if(!g)throw new Error("Not yet implemented :/");let u=[g],h=O(c),$=O(p),ge=J(h,$,n,a);return u.push(...N(ge.set)),O(u)},"restrictiveRange"),Q=i(e=>{if(!e||e.raw==="*")return"*";let t=[];return N(e.set).forEach(a=>{let[o,s]=a;a.length===2&&o.operator===">="&&s.operator==="<"&&o.semver.major+1===s.semver.major?t.push(`^${o.semver.version}`):a.length===1&&o.operator===">="?t.push(o.value):t.push(`${o.value} ${(s==null?void 0:s.value)||""}`.trim())}),t.join(" || ")},"humanizeRange"),te=i(async({fileObject:e,path:t,workingDir:n,debug:a,validateFn:o})=>{var m;let s=w(t,e.filename),c=j({path:s,workingDir:n});a(`${r.default.white(`Relative path to ${e.filename}:`)} ${r.default.blue(c)}`);let p=await b(c).catch(()=>{});if(!p)throw new Error(`${c} is not defined.`);if(a(`${r.default.white("Validate JSON schema of")} ${r.default.blue(c)}`),!o(p))throw new Error((m=o.errors)==null?void 0:m.map(g=>g.message).join(`
3
+ `));return e.relativePath=c,e.data=p,e},"loadFile"),ve=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageObject:o}=e,s=w((0,S.dirname)((0,L.fileURLToPath)(ae.url)),I),c=j({path:s,workingDir:a}),p=await b(c),l=C.compile(p);e.packageObject=await te({fileObject:o,path:n,debug:t,workingDir:a,validateFn:l})},"loadPackageFile"),je=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageLockObject:o}=e,s=w((0,S.dirname)((0,L.fileURLToPath)(ae.url)),W),c=j({path:s,workingDir:a}),p=await b(c),l=C.compile(p);e.packageLockObject=await te({fileObject:o,path:n,debug:t,workingDir:a,validateFn:l})},"loadPackageLockFile"),Oe=i((e,t)=>{var n;if(typeof e=="object"&&t in e)return e[t];if(F.default.isArray(e)&&e.some(a=>a.includes(t)))return(n=e.find(a=>a.includes(t)))==null?void 0:n.replace(t,"")},"getConstraintFromEngines"),X=i(({packages:e,constraintKey:t,debug:n})=>{let a=new f.default.Range("*"),o=[],s=n.extend(t);for(let[c,p]of e){let{engines:l}=p,m=Oe(l,t);if(!m){s(`${r.default.white("Package")} ${r.default.gray(c)} ${r.default.white("has no constraints for current engine")}`);continue}let g=f.default.validRange(m);if(!g){s(`${r.default.red(m)} ${r.default.white("is not a valid semver range")}`);continue}if(o.indexOf(g)!==-1){s(`${r.default.white("Ignored range:")} ${r.default.gray(g)}`);continue}let u=new f.default.Range(g,k);if(!a){a=u,s(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`);continue}let h=J(a,u,o,s);a.raw!==h.raw&&(a=h,s(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`))}return s(a?`${r.default.white("Final computed engine range constraint:")} ${r.default.blue(a.raw)}`:`${r.default.white("No computed engine range constraint")}`),a},"computeEnginesConstraint"),Se=i(({ctx:e,debug:t})=>{let{packageObject:n,packageLockObject:a,engines:o}=e;if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!a.data)throw new Error(`${a.filename} data is not defined.`);if(!("packages"in a.data))throw new Error(`${a.filename} does not contain packages property.`);let s=i(m=>R.indexOf(m)!==-1,"filterEngineConstraintKey"),c=Object.entries(a.data.packages),p=new Map,l=[...R];if(o&&o.length>0&&(l=o.filter(s)),l.length===0)throw new Error("No valid constraint key(s).");for(let m of l)p.set(m,{from:X({packages:[["",{engines:n.data.engines||{}}]],constraintKey:m,debug:t}),to:X({packages:c,constraintKey:m,debug:t})});e.ranges=p},"computeEnginesConstraints"),ye=i(e=>new Y.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:["left","left","left","left"],chars:{top:"","top-mid":"","top-left":"","top-right":"",bottom:"","bottom-mid":"","bottom-left":"","bottom-right":"",left:"","left-mid":"",mid:"","mid-mid":"",right:"","right-mid":"",middle:""}}),"createEnginesTable"),Ne=i(e=>{let t=["nce"],n;return typeof e.path=="string"&&e.path.length>0&&(n=j({path:e.path,workingDir:e.workingDir})),typeof n=="string"&&n.length>0&&t.push("-p",n),e.engines&&t.push(...e.engines.map(a=>["-e",a]).flat()),e.quiet&&t.push("-q"),e.debug&&t.push("-d"),e.verbose&&t.push("-v"),t.push("-u"),t.join(" ")},"generateUpdateCommandFromContext"),xe=i(({ctx:e,parent:t,debug:n})=>{let{ranges:a,packageObject:o,update:s}=e;if(!a)throw new Error("Computed engines range constraints are not defined.");let c=new Map,p="\u2192",l=[2,2,2,2],m=[];for(let[g,u]of a.entries()){let h=Q(u.to),$=Q(u.from);h!==$&&(c.set(g,h),n.extend(g)(`${r.default.white("Simplified computed engine range constraint:")} ${r.default.blue(h)}`),l=[Math.max(l[0],g.length+2),Math.max(l[1],$.length+2),p.length+2,Math.max(l[3],h.length+2)],m.push([g,$,p,h]))}if(c.size===0)t.title=`All computed engines range constraints are up-to-date ${r.default.green(":)")}`;else{let g=ye(l);g.push(...m);let u=`Computed engines range constraints:
4
+
5
+ ${g.toString()}`;s||(u+=`
6
+
7
+ Run ${r.default.cyan(Ne(e))} to upgrade ${o.filename}.`),t.title=u}e.rangesSimplified=c},"outputComputedConstraints"),Ee=i(async({ctx:e,debug:t})=>{let{packageObject:n,rangesSimplified:a}=e;if(!a)throw new Error("Simplified computed engines range constraints are not defined.");if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!n.relativePath)throw new Error(`${n.filename} path is not defined.`);return n.data.engines=F.default.merge({},n.data.engines,Object.fromEntries(a)),t(`${r.default.white("Write JSON to")} ${r.default.blue(n.relativePath)}`),_(n.relativePath,(0,ee.default)(n.data))},"updatePackageJson"),Ce=i(({context:e,parent:t,debug:n})=>[{title:`Load ${e.packageObject.filename} file...`,task:(a,o)=>ve({ctx:a,task:o,parent:t,debug:n})},{title:`Load ${e.packageLockObject.filename} file...`,task:(a,o)=>je({ctx:a,task:o,parent:t,debug:n})},{title:"Compute engines range constraints...",task:(a,o)=>Se({ctx:a,task:o,parent:t,debug:n})},{title:"Output computed engines range constraints...",task:(a,o)=>xe({ctx:a,task:o,parent:t,debug:n})},{title:`Update ${e.packageObject.filename} file...`,skip:({update:a})=>a?!a:"Update is disabled by default.",task:(a,o)=>Ee({ctx:a,task:o,parent:t,debug:n})}],"checkCommandTasks"),ne=i((e,t)=>{var n;return new Z.Listr([{title:`Checking npm package engines range constraints in ${(n=e.ctx)==null?void 0:n.packageLockObject.filename} file...`,task:(a,o)=>{let{path:s,workingDir:c,packageLockObject:p}=a,l=w(c,s,p.filename);return o.title=`Checking npm package engines range constraints in ${l.replace(`${c}${S.sep}`,"")} file...`,o.newListr(m=>Ce({context:a,parent:m,debug:t}))}}],e)},"cliCommandTask");var oe=i(async e=>{let t=e,n={workingDir:(0,T.normalize)(process.cwd()),path:(0,T.normalize)(t.path||""),update:t.update||!1,verbose:t.verbose||!1,quiet:t.quiet||!1,debug:t.debug||!1,engines:t.engines,packageObject:{filename:B},packageLockObject:{filename:G}},a={...V({quiet:n.quiet,debug:n.debug,verbose:n.verbose}),ctx:n},o=M();return n.debug&&U(o),ne(a,q).run()},"nce");var ie=d(require("yargs"),1),se=require("yargs/helpers"),re=(0,ie.default)((0,se.hideBin)(process.argv)),ce=re.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").example("$0 -p examples -u","Check package-lock.json file and update engines in package.json in relative examples directory.").strict().options({path:{alias:"p",string:!0,description:"Path to the NPM package folder. Default will use current folder."},quiet:{boolean:!0,alias:"q",default:!1,description:"Enable quiet mode."},debug:{boolean:!0,alias:"d",default:!1,description:"Enable debug mode. Can be used with environment variable DEBUG=nce."},verbose:{boolean:!0,alias:"v",default:!1,description:"A little more detailed than the default output."},engines:{array:!0,alias:"e",description:"Select engines to check. Default will check all engines defined."},update:{boolean:!0,alias:"u",default:!1,description:"Update engines in package.json file."}}).help("help").version().wrap(re.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;var Re={};(async()=>{let e="../package.json",t=await ce,n=w((0,pe.dirname)((0,le.fileURLToPath)(Re.url)),e),a=await b(n),o=(0,me.default)({pkg:a,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});o.update&&o.update.latest!==a.version&&o.notify({defer:!1,isGlobal:!0}),await oe(t)})();
package/dist/bin/nce.js CHANGED
@@ -1,20 +1,7 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const tslib_1 = require("tslib");
5
- const update_notifier_1 = tslib_1.__importDefault(require("update-notifier"));
6
- const index_1 = require("../lib/index");
7
- const yargs_1 = require("../lib/yargs");
8
- const package_json_1 = tslib_1.__importDefault(require("../package.json"));
9
- const notifier = (0, update_notifier_1.default)({
10
- pkg: package_json_1.default,
11
- updateCheckInterval: 1000 * 60,
12
- shouldNotifyInNpmScript: true,
13
- });
14
- if (notifier.update && notifier.update.latest !== package_json_1.default.version) {
15
- notifier.notify({
16
- defer: false,
17
- isGlobal: true,
18
- });
19
- }
20
- (0, index_1.nce)(yargs_1.cli);
2
+ var ee=Object.defineProperty;var i=(e,t)=>ee(e,"name",{value:t,configurable:!0});import{dirname as $e}from"node:path";import{fileURLToPath as ve}from"node:url";import je from"update-notifier";import{normalize as K}from"node:path";import y from"debug";var te="nce",P=y(te),J=i(()=>y.disable(),"namespaces"),F=i(e=>y.enable(e),"enableNamespaces");var L=i(({debug:e,quiet:t,verbose:n},a=process.env)=>{if(t)return{renderer:"silent"};if(n)return{renderer:"simple"};let o=a.TERM==="dumb";return e||o||a.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");import r from"chalk";import re from"cli-table";import{Listr as ie}from"listr2";import I from"lodash";import{dirname as W,sep as se}from"node:path";import{fileURLToPath as B}from"node:url";import f from"semver";import ce from"sort-package-json";import ne from"ajv-draft-04";import ae from"ajv-formats";var T="../schemas/schema-package.json",D="../schemas/schema-package-lock.json",N=ae(new ne({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));var A="package.json",q="package-lock.json",x=["node","npm","yarn"];import M from"node:fs/promises";import j from"node:path";var k=i(async e=>JSON.parse(await M.readFile(e,"utf8")),"getJson"),U=i(async(e,t)=>M.writeFile(e,JSON.stringify(t,null,2),"utf8"),"writeJson"),oe=i(e=>j.isAbsolute(e),"isAbsolutePath"),h=i((...e)=>j.join(...e),"joinPath"),$=i(e=>{let{workingDir:t,path:n}=e;return n?oe(n)?j.relative(t,n):j.relative(t,h(t,n)):t},"getRelativePath");var w={loose:!1},O=i(e=>[...e.map(t=>[...t])].sort((t,n)=>f.compare(t[0].semver,n[0].semver)),"sortRangeSet"),v=i(e=>new f.Range(e.map(t=>t.map(n=>n.value).join(" ")).join("||"),w),"setToRange"),V=i((e,t)=>[...e.map(n=>[...n])].filter(n=>n[0].semver.major>=t.major).map(n=>(n[0].semver.major===t.major&&f.gte(t,n[0].semver,w)&&(n[0]=new f.Comparator(`${n[0].operator}${t.raw}`)),n)),"applyMinVersionToRangeSet"),E=i((e,t,n,a)=>{if(a(`${r.white("Compare:")} ${r.blue(e.raw)} ${r.white("and")} ${r.blue(t.raw)}`),f.subset(e,t))return a(`${r.white("Range")} ${r.green(e.raw)} ${r.white("is a subset of")} ${r.blue(t.raw)}`),n.push(t.raw),e;if(f.subset(t,e))return a(`${r.white("Range")} ${r.green(t.raw)} ${r.white("is a subset of")} ${r.blue(e.raw)}`),n.push(e.raw),t;let o=f.minVersion(e,w)||new f.SemVer("*"),s=f.minVersion(t,w)||new f.SemVer("*"),c=O(e.set),p=O(t.set);if(!f.eq(o,s,w)){let S=f.compare(o,s)===-1?s:o;a(`${r.white("Applying minimal version")} ${r.yellow(S.version)} ${r.white("to both ranges.")}`);let C=v(V(c,S)),R=v(V(p,S));if(C.intersects(R,w))return E(C,R,n,a);throw new Error("Not yet implemented :/")}let l=c.shift(),m=p.shift(),g=l||m;if(!g)throw new Error("Not yet implemented :/");let d=[g],u=v(c),b=v(p),Z=E(u,b,n,a);return d.push(...O(Z.set)),v(d)},"restrictiveRange"),z=i(e=>{if(!e||e.raw==="*")return"*";let t=[];return O(e.set).forEach(a=>{let[o,s]=a;a.length===2&&o.operator===">="&&s.operator==="<"&&o.semver.major+1===s.semver.major?t.push(`^${o.semver.version}`):a.length===1&&o.operator===">="?t.push(o.value):t.push(`${o.value} ${(s==null?void 0:s.value)||""}`.trim())}),t.join(" || ")},"humanizeRange"),G=i(async({fileObject:e,path:t,workingDir:n,debug:a,validateFn:o})=>{var m;let s=h(t,e.filename),c=$({path:s,workingDir:n});a(`${r.white(`Relative path to ${e.filename}:`)} ${r.blue(c)}`);let p=await k(c).catch(()=>{});if(!p)throw new Error(`${c} is not defined.`);if(a(`${r.white("Validate JSON schema of")} ${r.blue(c)}`),!o(p))throw new Error((m=o.errors)==null?void 0:m.map(g=>g.message).join(`
3
+ `));return e.relativePath=c,e.data=p,e},"loadFile"),pe=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageObject:o}=e,s=h(W(B(import.meta.url)),T),c=$({path:s,workingDir:a}),p=await k(c),l=N.compile(p);e.packageObject=await G({fileObject:o,path:n,debug:t,workingDir:a,validateFn:l})},"loadPackageFile"),le=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageLockObject:o}=e,s=h(W(B(import.meta.url)),D),c=$({path:s,workingDir:a}),p=await k(c),l=N.compile(p);e.packageLockObject=await G({fileObject:o,path:n,debug:t,workingDir:a,validateFn:l})},"loadPackageLockFile"),me=i((e,t)=>{var n;if(typeof e=="object"&&t in e)return e[t];if(I.isArray(e)&&e.some(a=>a.includes(t)))return(n=e.find(a=>a.includes(t)))==null?void 0:n.replace(t,"")},"getConstraintFromEngines"),H=i(({packages:e,constraintKey:t,debug:n})=>{let a=new f.Range("*"),o=[],s=n.extend(t);for(let[c,p]of e){let{engines:l}=p,m=me(l,t);if(!m){s(`${r.white("Package")} ${r.gray(c)} ${r.white("has no constraints for current engine")}`);continue}let g=f.validRange(m);if(!g){s(`${r.red(m)} ${r.white("is not a valid semver range")}`);continue}if(o.indexOf(g)!==-1){s(`${r.white("Ignored range:")} ${r.gray(g)}`);continue}let d=new f.Range(g,w);if(!a){a=d,s(`${r.white("New most restrictive range:")} ${r.green(a.raw)}`);continue}let u=E(a,d,o,s);a.raw!==u.raw&&(a=u,s(`${r.white("New most restrictive range:")} ${r.green(a.raw)}`))}return s(a?`${r.white("Final computed engine range constraint:")} ${r.blue(a.raw)}`:`${r.white("No computed engine range constraint")}`),a},"computeEnginesConstraint"),ge=i(({ctx:e,debug:t})=>{let{packageObject:n,packageLockObject:a,engines:o}=e;if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!a.data)throw new Error(`${a.filename} data is not defined.`);if(!("packages"in a.data))throw new Error(`${a.filename} does not contain packages property.`);let s=i(m=>x.indexOf(m)!==-1,"filterEngineConstraintKey"),c=Object.entries(a.data.packages),p=new Map,l=[...x];if(o&&o.length>0&&(l=o.filter(s)),l.length===0)throw new Error("No valid constraint key(s).");for(let m of l)p.set(m,{from:H({packages:[["",{engines:n.data.engines||{}}]],constraintKey:m,debug:t}),to:H({packages:c,constraintKey:m,debug:t})});e.ranges=p},"computeEnginesConstraints"),fe=i(e=>new re({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:["left","left","left","left"],chars:{top:"","top-mid":"","top-left":"","top-right":"",bottom:"","bottom-mid":"","bottom-left":"","bottom-right":"",left:"","left-mid":"",mid:"","mid-mid":"",right:"","right-mid":"",middle:""}}),"createEnginesTable"),de=i(e=>{let t=["nce"],n;return typeof e.path=="string"&&e.path.length>0&&(n=$({path:e.path,workingDir:e.workingDir})),typeof n=="string"&&n.length>0&&t.push("-p",n),e.engines&&t.push(...e.engines.map(a=>["-e",a]).flat()),e.quiet&&t.push("-q"),e.debug&&t.push("-d"),e.verbose&&t.push("-v"),t.push("-u"),t.join(" ")},"generateUpdateCommandFromContext"),ue=i(({ctx:e,parent:t,debug:n})=>{let{ranges:a,packageObject:o,update:s}=e;if(!a)throw new Error("Computed engines range constraints are not defined.");let c=new Map,p="\u2192",l=[2,2,2,2],m=[];for(let[g,d]of a.entries()){let u=z(d.to),b=z(d.from);u!==b&&(c.set(g,u),n.extend(g)(`${r.white("Simplified computed engine range constraint:")} ${r.blue(u)}`),l=[Math.max(l[0],g.length+2),Math.max(l[1],b.length+2),p.length+2,Math.max(l[3],u.length+2)],m.push([g,b,p,u]))}if(c.size===0)t.title=`All computed engines range constraints are up-to-date ${r.green(":)")}`;else{let g=fe(l);g.push(...m);let d=`Computed engines range constraints:
4
+
5
+ ${g.toString()}`;s||(d+=`
6
+
7
+ Run ${r.cyan(de(e))} to upgrade ${o.filename}.`),t.title=d}e.rangesSimplified=c},"outputComputedConstraints"),he=i(async({ctx:e,debug:t})=>{let{packageObject:n,rangesSimplified:a}=e;if(!a)throw new Error("Simplified computed engines range constraints are not defined.");if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!n.relativePath)throw new Error(`${n.filename} path is not defined.`);return n.data.engines=I.merge({},n.data.engines,Object.fromEntries(a)),t(`${r.white("Write JSON to")} ${r.blue(n.relativePath)}`),U(n.relativePath,ce(n.data))},"updatePackageJson"),we=i(({context:e,parent:t,debug:n})=>[{title:`Load ${e.packageObject.filename} file...`,task:(a,o)=>pe({ctx:a,task:o,parent:t,debug:n})},{title:`Load ${e.packageLockObject.filename} file...`,task:(a,o)=>le({ctx:a,task:o,parent:t,debug:n})},{title:"Compute engines range constraints...",task:(a,o)=>ge({ctx:a,task:o,parent:t,debug:n})},{title:"Output computed engines range constraints...",task:(a,o)=>ue({ctx:a,task:o,parent:t,debug:n})},{title:`Update ${e.packageObject.filename} file...`,skip:({update:a})=>a?!a:"Update is disabled by default.",task:(a,o)=>he({ctx:a,task:o,parent:t,debug:n})}],"checkCommandTasks"),_=i((e,t)=>{var n;return new ie([{title:`Checking npm package engines range constraints in ${(n=e.ctx)==null?void 0:n.packageLockObject.filename} file...`,task:(a,o)=>{let{path:s,workingDir:c,packageLockObject:p}=a,l=h(c,s,p.filename);return o.title=`Checking npm package engines range constraints in ${l.replace(`${c}${se}`,"")} file...`,o.newListr(m=>we({context:a,parent:m,debug:t}))}}],e)},"cliCommandTask");var Q=i(async e=>{let t=e,n={workingDir:K(process.cwd()),path:K(t.path||""),update:t.update||!1,verbose:t.verbose||!1,quiet:t.quiet||!1,debug:t.debug||!1,engines:t.engines,packageObject:{filename:A},packageLockObject:{filename:q}},a={...L({quiet:n.quiet,debug:n.debug,verbose:n.verbose}),ctx:n},o=J();return n.debug&&F(o),_(a,P).run()},"nce");import ke from"yargs";import{hideBin as be}from"yargs/helpers";var X=ke(be(process.argv)),Y=X.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").example("$0 -p examples -u","Check package-lock.json file and update engines in package.json in relative examples directory.").strict().options({path:{alias:"p",string:!0,description:"Path to the NPM package folder. Default will use current folder."},quiet:{boolean:!0,alias:"q",default:!1,description:"Enable quiet mode."},debug:{boolean:!0,alias:"d",default:!1,description:"Enable debug mode. Can be used with environment variable DEBUG=nce."},verbose:{boolean:!0,alias:"v",default:!1,description:"A little more detailed than the default output."},engines:{array:!0,alias:"e",description:"Select engines to check. Default will check all engines defined."},update:{boolean:!0,alias:"u",default:!1,description:"Update engines in package.json file."}}).help("help").version().wrap(X.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;(async()=>{let e="../package.json",t=await Y,n=h($e(ve(import.meta.url)),e),a=await k(n),o=je({pkg:a,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});o.update&&o.update.latest!==a.version&&o.notify({defer:!1,isGlobal:!0}),await Q(t)})();
@@ -0,0 +1,55 @@
1
+ import { Range } from 'semver';
2
+
3
+ declare const EngineConstraintKeys: readonly ["node", "npm", "yarn"];
4
+ declare type EngineConstraintKeysType = typeof EngineConstraintKeys;
5
+ declare type EngineConstraintKey = EngineConstraintKeysType[number];
6
+ declare type EngineConstraintChange = {
7
+ from: Range | undefined;
8
+ to: Range;
9
+ };
10
+ declare type LockPackageEnginesObject = Partial<Record<EngineConstraintKey, string>>;
11
+ declare type LockPackageEnginesArray = string[];
12
+ declare type LockPackageEngines = LockPackageEnginesObject | LockPackageEnginesArray;
13
+ declare type LockPackage = {
14
+ engines: LockPackageEngines;
15
+ };
16
+ declare type FileObject<T> = {
17
+ filename: string;
18
+ relativePath?: string;
19
+ data?: T;
20
+ };
21
+ declare type PackageJSONSchema = LockPackage;
22
+ declare type PackageLockJSONSchema = {
23
+ packages: {
24
+ [k: string]: LockPackage;
25
+ };
26
+ };
27
+ declare type CLIContext = {
28
+ path: string;
29
+ update: boolean;
30
+ quiet: boolean;
31
+ workingDir: string;
32
+ verbose: boolean;
33
+ debug: boolean;
34
+ engines: string[] | undefined;
35
+ packageObject: FileObject<PackageJSONSchema>;
36
+ packageLockObject: FileObject<PackageLockJSONSchema>;
37
+ ranges?: Map<EngineConstraintKey, EngineConstraintChange>;
38
+ rangesSimplified?: Map<EngineConstraintKey, string | undefined>;
39
+ };
40
+
41
+ declare type CLIArgs = {
42
+ [p: string]: unknown;
43
+ path?: string;
44
+ update?: boolean;
45
+ quiet?: boolean;
46
+ verbose?: boolean;
47
+ debug?: boolean;
48
+ engines?: string[];
49
+ _?: Array<string | number>;
50
+ $0?: string;
51
+ };
52
+
53
+ declare const nce: (args: CLIArgs) => Promise<CLIContext>;
54
+
55
+ export { nce };
@@ -0,0 +1 @@
1
+ "use strict";var r=Object.create;var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var a=(e,n)=>c(e,"name",{value:n,configurable:!0});var g=(e,n)=>{for(var o in n)c(e,o,{get:n[o],enumerable:!0})},b=(e,n,o,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of l(n))!d.call(e,s)&&s!==o&&c(e,s,{get:()=>n[s],enumerable:!(p=m(n,s))||p.enumerable});return e};var i=(e,n,o)=>(o=e!=null?r(x(e)):{},b(n||!e||!e.__esModule?c(o,"default",{value:e,enumerable:!0}):o,e)),u=e=>b(c({},"__esModule",{value:!0}),e);var j={};g(j,{debug:()=>D,enableNamespaces:()=>h,namespaces:()=>N});module.exports=u(j);var t=i(require("debug"),1);var f="nce",D=(0,t.default)(f),N=a(()=>t.default.disable(),"namespaces"),h=a(e=>t.default.enable(e),"enableNamespaces");0&&(module.exports={debug,enableNamespaces,namespaces});
package/dist/lib/debug.js CHANGED
@@ -1,11 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableNamespaces = exports.namespaces = exports.debug = void 0;
4
- const tslib_1 = require("tslib");
5
- const debug_1 = tslib_1.__importDefault(require("debug"));
6
- const nce = 'nce';
7
- exports.debug = (0, debug_1.default)(nce);
8
- const namespaces = () => debug_1.default.disable();
9
- exports.namespaces = namespaces;
10
- const enableNamespaces = (namespaces) => debug_1.default.enable(namespaces);
11
- exports.enableNamespaces = enableNamespaces;
1
+ var c=Object.defineProperty;var n=(e,s)=>c(e,"name",{value:s,configurable:!0});import o from"debug";var t="nce",b=o(t),r=n(()=>o.disable(),"namespaces"),m=n(e=>o.enable(e),"enableNamespaces");export{b as debug,m as enableNamespaces,r as namespaces};
@@ -0,0 +1,6 @@
1
+ "use strict";var ie=Object.create;var b=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty;var i=(e,t)=>b(e,"name",{value:t,configurable:!0});var le=(e,t)=>{for(var n in t)b(e,n,{get:t[n],enumerable:!0})},M=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ce(t))!me.call(e,o)&&o!==n&&b(e,o,{get:()=>t[o],enumerable:!(a=se(t,o))||a.enumerable});return e};var u=(e,t,n)=>(n=e!=null?ie(pe(e)):{},M(t||!e||!e.__esModule?b(n,"default",{value:e,enumerable:!0}):n,e)),ge=e=>M(b({},"__esModule",{value:!0}),e);var ye={};le(ye,{nce:()=>Se});module.exports=ge(ye);var T=require("path");var y=u(require("debug"),1);var fe="nce",V=(0,y.default)(fe),q=i(()=>y.default.disable(),"namespaces"),z=i(e=>y.default.enable(e),"enableNamespaces");var U=i(({debug:e,quiet:t,verbose:n},a=process.env)=>{if(t)return{renderer:"silent"};if(n)return{renderer:"simple"};let o=a.TERM==="dumb";return e||o||a.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");var r=u(require("chalk"),1),Z=u(require("cli-table"),1),ee=require("listr2"),F=u(require("lodash"),1),S=require("path"),L=require("url"),f=u(require("semver"),1),te=u(require("sort-package-json"),1);var H=u(require("ajv-draft-04"),1),W=u(require("ajv-formats"),1),I="../schemas/schema-package.json",_="../schemas/schema-package-lock.json",R=(0,W.default)(new H.default({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));var B="package.json",G="package-lock.json",C=["node","npm","yarn"];var P=u(require("fs/promises"),1),v=u(require("path"),1);var x=i(async e=>JSON.parse(await P.default.readFile(e,"utf8")),"getJson"),K=i(async(e,t)=>P.default.writeFile(e,JSON.stringify(t,null,2),"utf8"),"writeJson"),de=i(e=>v.default.isAbsolute(e),"isAbsolutePath"),k=i((...e)=>v.default.join(...e),"joinPath"),j=i(e=>{let{workingDir:t,path:n}=e;return n?de(n)?v.default.relative(t,n):v.default.relative(t,k(t,n)):t},"getRelativePath");var oe={};var w={loose:!1},N=i(e=>[...e.map(t=>[...t])].sort((t,n)=>f.default.compare(t[0].semver,n[0].semver)),"sortRangeSet"),O=i(e=>new f.default.Range(e.map(t=>t.map(n=>n.value).join(" ")).join("||"),w),"setToRange"),Q=i((e,t)=>[...e.map(n=>[...n])].filter(n=>n[0].semver.major>=t.major).map(n=>(n[0].semver.major===t.major&&f.default.gte(t,n[0].semver,w)&&(n[0]=new f.default.Comparator(`${n[0].operator}${t.raw}`)),n)),"applyMinVersionToRangeSet"),J=i((e,t,n,a)=>{if(a(`${r.default.white("Compare:")} ${r.default.blue(e.raw)} ${r.default.white("and")} ${r.default.blue(t.raw)}`),f.default.subset(e,t))return a(`${r.default.white("Range")} ${r.default.green(e.raw)} ${r.default.white("is a subset of")} ${r.default.blue(t.raw)}`),n.push(t.raw),e;if(f.default.subset(t,e))return a(`${r.default.white("Range")} ${r.default.green(t.raw)} ${r.default.white("is a subset of")} ${r.default.blue(e.raw)}`),n.push(e.raw),t;let o=f.default.minVersion(e,w)||new f.default.SemVer("*"),s=f.default.minVersion(t,w)||new f.default.SemVer("*"),c=N(e.set),p=N(t.set);if(!f.default.eq(o,s,w)){let E=f.default.compare(o,s)===-1?s:o;a(`${r.default.white("Applying minimal version")} ${r.default.yellow(E.version)} ${r.default.white("to both ranges.")}`);let D=O(Q(c,E)),A=O(Q(p,E));if(D.intersects(A,w))return J(D,A,n,a);throw new Error("Not yet implemented :/")}let m=c.shift(),l=p.shift(),g=m||l;if(!g)throw new Error("Not yet implemented :/");let d=[g],h=O(c),$=O(p),re=J(h,$,n,a);return d.push(...N(re.set)),O(d)},"restrictiveRange"),X=i(e=>{if(!e||e.raw==="*")return"*";let t=[];return N(e.set).forEach(a=>{let[o,s]=a;a.length===2&&o.operator===">="&&s.operator==="<"&&o.semver.major+1===s.semver.major?t.push(`^${o.semver.version}`):a.length===1&&o.operator===">="?t.push(o.value):t.push(`${o.value} ${(s==null?void 0:s.value)||""}`.trim())}),t.join(" || ")},"humanizeRange"),ne=i(async({fileObject:e,path:t,workingDir:n,debug:a,validateFn:o})=>{var l;let s=k(t,e.filename),c=j({path:s,workingDir:n});a(`${r.default.white(`Relative path to ${e.filename}:`)} ${r.default.blue(c)}`);let p=await x(c).catch(()=>{});if(!p)throw new Error(`${c} is not defined.`);if(a(`${r.default.white("Validate JSON schema of")} ${r.default.blue(c)}`),!o(p))throw new Error((l=o.errors)==null?void 0:l.map(g=>g.message).join(`
2
+ `));return e.relativePath=c,e.data=p,e},"loadFile"),he=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageObject:o}=e,s=k((0,S.dirname)((0,L.fileURLToPath)(oe.url)),I),c=j({path:s,workingDir:a}),p=await x(c),m=R.compile(p);e.packageObject=await ne({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageFile"),ue=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageLockObject:o}=e,s=k((0,S.dirname)((0,L.fileURLToPath)(oe.url)),_),c=j({path:s,workingDir:a}),p=await x(c),m=R.compile(p);e.packageLockObject=await ne({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageLockFile"),we=i((e,t)=>{var n;if(typeof e=="object"&&t in e)return e[t];if(F.default.isArray(e)&&e.some(a=>a.includes(t)))return(n=e.find(a=>a.includes(t)))==null?void 0:n.replace(t,"")},"getConstraintFromEngines"),Y=i(({packages:e,constraintKey:t,debug:n})=>{let a=new f.default.Range("*"),o=[],s=n.extend(t);for(let[c,p]of e){let{engines:m}=p,l=we(m,t);if(!l){s(`${r.default.white("Package")} ${r.default.gray(c)} ${r.default.white("has no constraints for current engine")}`);continue}let g=f.default.validRange(l);if(!g){s(`${r.default.red(l)} ${r.default.white("is not a valid semver range")}`);continue}if(o.indexOf(g)!==-1){s(`${r.default.white("Ignored range:")} ${r.default.gray(g)}`);continue}let d=new f.default.Range(g,w);if(!a){a=d,s(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`);continue}let h=J(a,d,o,s);a.raw!==h.raw&&(a=h,s(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`))}return s(a?`${r.default.white("Final computed engine range constraint:")} ${r.default.blue(a.raw)}`:`${r.default.white("No computed engine range constraint")}`),a},"computeEnginesConstraint"),ke=i(({ctx:e,debug:t})=>{let{packageObject:n,packageLockObject:a,engines:o}=e;if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!a.data)throw new Error(`${a.filename} data is not defined.`);if(!("packages"in a.data))throw new Error(`${a.filename} does not contain packages property.`);let s=i(l=>C.indexOf(l)!==-1,"filterEngineConstraintKey"),c=Object.entries(a.data.packages),p=new Map,m=[...C];if(o&&o.length>0&&(m=o.filter(s)),m.length===0)throw new Error("No valid constraint key(s).");for(let l of m)p.set(l,{from:Y({packages:[["",{engines:n.data.engines||{}}]],constraintKey:l,debug:t}),to:Y({packages:c,constraintKey:l,debug:t})});e.ranges=p},"computeEnginesConstraints"),$e=i(e=>new Z.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:["left","left","left","left"],chars:{top:"","top-mid":"","top-left":"","top-right":"",bottom:"","bottom-mid":"","bottom-left":"","bottom-right":"",left:"","left-mid":"",mid:"","mid-mid":"",right:"","right-mid":"",middle:""}}),"createEnginesTable"),be=i(e=>{let t=["nce"],n;return typeof e.path=="string"&&e.path.length>0&&(n=j({path:e.path,workingDir:e.workingDir})),typeof n=="string"&&n.length>0&&t.push("-p",n),e.engines&&t.push(...e.engines.map(a=>["-e",a]).flat()),e.quiet&&t.push("-q"),e.debug&&t.push("-d"),e.verbose&&t.push("-v"),t.push("-u"),t.join(" ")},"generateUpdateCommandFromContext"),ve=i(({ctx:e,parent:t,debug:n})=>{let{ranges:a,packageObject:o,update:s}=e;if(!a)throw new Error("Computed engines range constraints are not defined.");let c=new Map,p="\u2192",m=[2,2,2,2],l=[];for(let[g,d]of a.entries()){let h=X(d.to),$=X(d.from);h!==$&&(c.set(g,h),n.extend(g)(`${r.default.white("Simplified computed engine range constraint:")} ${r.default.blue(h)}`),m=[Math.max(m[0],g.length+2),Math.max(m[1],$.length+2),p.length+2,Math.max(m[3],h.length+2)],l.push([g,$,p,h]))}if(c.size===0)t.title=`All computed engines range constraints are up-to-date ${r.default.green(":)")}`;else{let g=$e(m);g.push(...l);let d=`Computed engines range constraints:
3
+
4
+ ${g.toString()}`;s||(d+=`
5
+
6
+ Run ${r.default.cyan(be(e))} to upgrade ${o.filename}.`),t.title=d}e.rangesSimplified=c},"outputComputedConstraints"),je=i(async({ctx:e,debug:t})=>{let{packageObject:n,rangesSimplified:a}=e;if(!a)throw new Error("Simplified computed engines range constraints are not defined.");if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!n.relativePath)throw new Error(`${n.filename} path is not defined.`);return n.data.engines=F.default.merge({},n.data.engines,Object.fromEntries(a)),t(`${r.default.white("Write JSON to")} ${r.default.blue(n.relativePath)}`),K(n.relativePath,(0,te.default)(n.data))},"updatePackageJson"),Oe=i(({context:e,parent:t,debug:n})=>[{title:`Load ${e.packageObject.filename} file...`,task:(a,o)=>he({ctx:a,task:o,parent:t,debug:n})},{title:`Load ${e.packageLockObject.filename} file...`,task:(a,o)=>ue({ctx:a,task:o,parent:t,debug:n})},{title:"Compute engines range constraints...",task:(a,o)=>ke({ctx:a,task:o,parent:t,debug:n})},{title:"Output computed engines range constraints...",task:(a,o)=>ve({ctx:a,task:o,parent:t,debug:n})},{title:`Update ${e.packageObject.filename} file...`,skip:({update:a})=>a?!a:"Update is disabled by default.",task:(a,o)=>je({ctx:a,task:o,parent:t,debug:n})}],"checkCommandTasks"),ae=i((e,t)=>{var n;return new ee.Listr([{title:`Checking npm package engines range constraints in ${(n=e.ctx)==null?void 0:n.packageLockObject.filename} file...`,task:(a,o)=>{let{path:s,workingDir:c,packageLockObject:p}=a,m=k(c,s,p.filename);return o.title=`Checking npm package engines range constraints in ${m.replace(`${c}${S.sep}`,"")} file...`,o.newListr(l=>Oe({context:a,parent:l,debug:t}))}}],e)},"cliCommandTask");var Se=i(async e=>{let t=e,n={workingDir:(0,T.normalize)(process.cwd()),path:(0,T.normalize)(t.path||""),update:t.update||!1,verbose:t.verbose||!1,quiet:t.quiet||!1,debug:t.debug||!1,engines:t.engines,packageObject:{filename:B},packageLockObject:{filename:G}},a={...U({quiet:n.quiet,debug:n.debug,verbose:n.verbose}),ctx:n},o=q();return n.debug&&z(o),ae(a,V).run()},"nce");0&&(module.exports={nce});
package/dist/lib/index.js CHANGED
@@ -1,29 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nce = void 0;
4
- const path_1 = require("path");
5
- const debug_1 = require("./debug");
6
- const renderer_1 = require("./renderer");
7
- const tasks_1 = require("./tasks");
8
- const types_1 = require("./types");
9
- const nce = async (args) => {
10
- const cliArgs = await args;
11
- let context = {
12
- workingDir: (0, path_1.normalize)(process.cwd()),
13
- path: (0, path_1.normalize)(cliArgs.path || ''),
14
- update: cliArgs.update || false,
15
- verbose: cliArgs.verbose || false,
16
- quiet: cliArgs.quiet || false,
17
- debug: cliArgs.debug || false,
18
- engines: cliArgs.engines,
19
- packageObject: { filename: types_1.packageJSONFilename },
20
- packageLockObject: { filename: types_1.packageLockJSONFilename },
21
- };
22
- const options = Object.assign(Object.assign({}, (0, renderer_1.renderer)({ quiet: context.quiet, debug: context.debug, verbose: context.verbose })), { ctx: context });
23
- const debugNamespaces = (0, debug_1.namespaces)();
24
- if (context.debug) {
25
- (0, debug_1.enableNamespaces)(debugNamespaces);
26
- }
27
- return (0, tasks_1.cliCommandTask)(options, debug_1.debug).run();
28
- };
29
- exports.nce = nce;
1
+ var X=Object.defineProperty;var i=(e,t)=>X(e,"name",{value:t,configurable:!0});import{normalize as K}from"node:path";import y from"debug";var Y="nce",P=y(Y),J=i(()=>y.disable(),"namespaces"),F=i(e=>y.enable(e),"enableNamespaces");var L=i(({debug:e,quiet:t,verbose:n},a=process.env)=>{if(t)return{renderer:"silent"};if(n)return{renderer:"simple"};let o=a.TERM==="dumb";return e||o||a.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");import r from"chalk";import ne from"cli-table";import{Listr as ae}from"listr2";import W from"lodash";import{dirname as I,sep as oe}from"node:path";import{fileURLToPath as _}from"node:url";import f from"semver";import re from"sort-package-json";import Z from"ajv-draft-04";import ee from"ajv-formats";var T="../schemas/schema-package.json",D="../schemas/schema-package-lock.json",x=ee(new Z({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));var A="package.json",M="package-lock.json",N=["node","npm","yarn"];import V from"node:fs/promises";import v from"node:path";var j=i(async e=>JSON.parse(await V.readFile(e,"utf8")),"getJson"),q=i(async(e,t)=>V.writeFile(e,JSON.stringify(t,null,2),"utf8"),"writeJson"),te=i(e=>v.isAbsolute(e),"isAbsolutePath"),w=i((...e)=>v.join(...e),"joinPath"),$=i(e=>{let{workingDir:t,path:n}=e;return n?te(n)?v.relative(t,n):v.relative(t,w(t,n)):t},"getRelativePath");var u={loose:!1},O=i(e=>[...e.map(t=>[...t])].sort((t,n)=>f.compare(t[0].semver,n[0].semver)),"sortRangeSet"),b=i(e=>new f.Range(e.map(t=>t.map(n=>n.value).join(" ")).join("||"),u),"setToRange"),z=i((e,t)=>[...e.map(n=>[...n])].filter(n=>n[0].semver.major>=t.major).map(n=>(n[0].semver.major===t.major&&f.gte(t,n[0].semver,u)&&(n[0]=new f.Comparator(`${n[0].operator}${t.raw}`)),n)),"applyMinVersionToRangeSet"),E=i((e,t,n,a)=>{if(a(`${r.white("Compare:")} ${r.blue(e.raw)} ${r.white("and")} ${r.blue(t.raw)}`),f.subset(e,t))return a(`${r.white("Range")} ${r.green(e.raw)} ${r.white("is a subset of")} ${r.blue(t.raw)}`),n.push(t.raw),e;if(f.subset(t,e))return a(`${r.white("Range")} ${r.green(t.raw)} ${r.white("is a subset of")} ${r.blue(e.raw)}`),n.push(e.raw),t;let o=f.minVersion(e,u)||new f.SemVer("*"),s=f.minVersion(t,u)||new f.SemVer("*"),c=O(e.set),p=O(t.set);if(!f.eq(o,s,u)){let S=f.compare(o,s)===-1?s:o;a(`${r.white("Applying minimal version")} ${r.yellow(S.version)} ${r.white("to both ranges.")}`);let R=b(z(c,S)),C=b(z(p,S));if(R.intersects(C,u))return E(R,C,n,a);throw new Error("Not yet implemented :/")}let m=c.shift(),l=p.shift(),g=m||l;if(!g)throw new Error("Not yet implemented :/");let d=[g],h=b(c),k=b(p),Q=E(h,k,n,a);return d.push(...O(Q.set)),b(d)},"restrictiveRange"),U=i(e=>{if(!e||e.raw==="*")return"*";let t=[];return O(e.set).forEach(a=>{let[o,s]=a;a.length===2&&o.operator===">="&&s.operator==="<"&&o.semver.major+1===s.semver.major?t.push(`^${o.semver.version}`):a.length===1&&o.operator===">="?t.push(o.value):t.push(`${o.value} ${(s==null?void 0:s.value)||""}`.trim())}),t.join(" || ")},"humanizeRange"),B=i(async({fileObject:e,path:t,workingDir:n,debug:a,validateFn:o})=>{var l;let s=w(t,e.filename),c=$({path:s,workingDir:n});a(`${r.white(`Relative path to ${e.filename}:`)} ${r.blue(c)}`);let p=await j(c).catch(()=>{});if(!p)throw new Error(`${c} is not defined.`);if(a(`${r.white("Validate JSON schema of")} ${r.blue(c)}`),!o(p))throw new Error((l=o.errors)==null?void 0:l.map(g=>g.message).join(`
2
+ `));return e.relativePath=c,e.data=p,e},"loadFile"),ie=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageObject:o}=e,s=w(I(_(import.meta.url)),T),c=$({path:s,workingDir:a}),p=await j(c),m=x.compile(p);e.packageObject=await B({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageFile"),se=i(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageLockObject:o}=e,s=w(I(_(import.meta.url)),D),c=$({path:s,workingDir:a}),p=await j(c),m=x.compile(p);e.packageLockObject=await B({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageLockFile"),ce=i((e,t)=>{var n;if(typeof e=="object"&&t in e)return e[t];if(W.isArray(e)&&e.some(a=>a.includes(t)))return(n=e.find(a=>a.includes(t)))==null?void 0:n.replace(t,"")},"getConstraintFromEngines"),H=i(({packages:e,constraintKey:t,debug:n})=>{let a=new f.Range("*"),o=[],s=n.extend(t);for(let[c,p]of e){let{engines:m}=p,l=ce(m,t);if(!l){s(`${r.white("Package")} ${r.gray(c)} ${r.white("has no constraints for current engine")}`);continue}let g=f.validRange(l);if(!g){s(`${r.red(l)} ${r.white("is not a valid semver range")}`);continue}if(o.indexOf(g)!==-1){s(`${r.white("Ignored range:")} ${r.gray(g)}`);continue}let d=new f.Range(g,u);if(!a){a=d,s(`${r.white("New most restrictive range:")} ${r.green(a.raw)}`);continue}let h=E(a,d,o,s);a.raw!==h.raw&&(a=h,s(`${r.white("New most restrictive range:")} ${r.green(a.raw)}`))}return s(a?`${r.white("Final computed engine range constraint:")} ${r.blue(a.raw)}`:`${r.white("No computed engine range constraint")}`),a},"computeEnginesConstraint"),pe=i(({ctx:e,debug:t})=>{let{packageObject:n,packageLockObject:a,engines:o}=e;if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!a.data)throw new Error(`${a.filename} data is not defined.`);if(!("packages"in a.data))throw new Error(`${a.filename} does not contain packages property.`);let s=i(l=>N.indexOf(l)!==-1,"filterEngineConstraintKey"),c=Object.entries(a.data.packages),p=new Map,m=[...N];if(o&&o.length>0&&(m=o.filter(s)),m.length===0)throw new Error("No valid constraint key(s).");for(let l of m)p.set(l,{from:H({packages:[["",{engines:n.data.engines||{}}]],constraintKey:l,debug:t}),to:H({packages:c,constraintKey:l,debug:t})});e.ranges=p},"computeEnginesConstraints"),me=i(e=>new ne({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:["left","left","left","left"],chars:{top:"","top-mid":"","top-left":"","top-right":"",bottom:"","bottom-mid":"","bottom-left":"","bottom-right":"",left:"","left-mid":"",mid:"","mid-mid":"",right:"","right-mid":"",middle:""}}),"createEnginesTable"),le=i(e=>{let t=["nce"],n;return typeof e.path=="string"&&e.path.length>0&&(n=$({path:e.path,workingDir:e.workingDir})),typeof n=="string"&&n.length>0&&t.push("-p",n),e.engines&&t.push(...e.engines.map(a=>["-e",a]).flat()),e.quiet&&t.push("-q"),e.debug&&t.push("-d"),e.verbose&&t.push("-v"),t.push("-u"),t.join(" ")},"generateUpdateCommandFromContext"),ge=i(({ctx:e,parent:t,debug:n})=>{let{ranges:a,packageObject:o,update:s}=e;if(!a)throw new Error("Computed engines range constraints are not defined.");let c=new Map,p="\u2192",m=[2,2,2,2],l=[];for(let[g,d]of a.entries()){let h=U(d.to),k=U(d.from);h!==k&&(c.set(g,h),n.extend(g)(`${r.white("Simplified computed engine range constraint:")} ${r.blue(h)}`),m=[Math.max(m[0],g.length+2),Math.max(m[1],k.length+2),p.length+2,Math.max(m[3],h.length+2)],l.push([g,k,p,h]))}if(c.size===0)t.title=`All computed engines range constraints are up-to-date ${r.green(":)")}`;else{let g=me(m);g.push(...l);let d=`Computed engines range constraints:
3
+
4
+ ${g.toString()}`;s||(d+=`
5
+
6
+ Run ${r.cyan(le(e))} to upgrade ${o.filename}.`),t.title=d}e.rangesSimplified=c},"outputComputedConstraints"),fe=i(async({ctx:e,debug:t})=>{let{packageObject:n,rangesSimplified:a}=e;if(!a)throw new Error("Simplified computed engines range constraints are not defined.");if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!n.relativePath)throw new Error(`${n.filename} path is not defined.`);return n.data.engines=W.merge({},n.data.engines,Object.fromEntries(a)),t(`${r.white("Write JSON to")} ${r.blue(n.relativePath)}`),q(n.relativePath,re(n.data))},"updatePackageJson"),de=i(({context:e,parent:t,debug:n})=>[{title:`Load ${e.packageObject.filename} file...`,task:(a,o)=>ie({ctx:a,task:o,parent:t,debug:n})},{title:`Load ${e.packageLockObject.filename} file...`,task:(a,o)=>se({ctx:a,task:o,parent:t,debug:n})},{title:"Compute engines range constraints...",task:(a,o)=>pe({ctx:a,task:o,parent:t,debug:n})},{title:"Output computed engines range constraints...",task:(a,o)=>ge({ctx:a,task:o,parent:t,debug:n})},{title:`Update ${e.packageObject.filename} file...`,skip:({update:a})=>a?!a:"Update is disabled by default.",task:(a,o)=>fe({ctx:a,task:o,parent:t,debug:n})}],"checkCommandTasks"),G=i((e,t)=>{var n;return new ae([{title:`Checking npm package engines range constraints in ${(n=e.ctx)==null?void 0:n.packageLockObject.filename} file...`,task:(a,o)=>{let{path:s,workingDir:c,packageLockObject:p}=a,m=w(c,s,p.filename);return o.title=`Checking npm package engines range constraints in ${m.replace(`${c}${oe}`,"")} file...`,o.newListr(l=>de({context:a,parent:l,debug:t}))}}],e)},"cliCommandTask");var Be=i(async e=>{let t=e,n={workingDir:K(process.cwd()),path:K(t.path||""),update:t.update||!1,verbose:t.verbose||!1,quiet:t.quiet||!1,debug:t.debug||!1,engines:t.engines,packageObject:{filename:A},packageLockObject:{filename:M}},a={...L({quiet:n.quiet,debug:n.debug,verbose:n.verbose}),ctx:n},o=J();return n.debug&&F(o),G(a,P).run()},"nce");export{Be as nce};
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.create;var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var f=(e,a)=>{for(var o in a)c(e,o,{get:a[o],enumerable:!0})},t=(e,a,o,s)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of i(a))!g.call(e,r)&&r!==o&&c(e,r,{get:()=>a[r],enumerable:!(s=h(a,r))||s.enumerable});return e};var p=(e,a,o)=>(o=e!=null?l(k(e)):{},t(a||!e||!e.__esModule?c(o,"default",{value:e,enumerable:!0}):o,e)),j=e=>t(c({},"__esModule",{value:!0}),e);var x={};f(x,{ajv:()=>w,packageJSONSchema:()=>u,packageLockJSONSchema:()=>S});module.exports=j(x);var m=p(require("ajv-draft-04"),1),n=p(require("ajv-formats"),1),u="../schemas/schema-package.json",S="../schemas/schema-package-lock.json",w=(0,n.default)(new m.default({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));0&&(module.exports={ajv,packageJSONSchema,packageLockJSONSchema});
@@ -1,17 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validatePackageLockJSONFn = exports.validatePackageJSONFn = void 0;
4
- const tslib_1 = require("tslib");
5
- const ajv_draft_04_1 = tslib_1.__importDefault(require("ajv-draft-04"));
6
- const ajv_formats_1 = tslib_1.__importDefault(require("ajv-formats"));
7
- const packageLockJSONSchema = tslib_1.__importStar(require("../schemas/package-lock.json"));
8
- const packageJSONSchema = tslib_1.__importStar(require("../schemas/package.json"));
9
- const ajv = (0, ajv_formats_1.default)(new ajv_draft_04_1.default({
10
- allErrors: true,
11
- coerceTypes: true,
12
- allowUnionTypes: true,
13
- strict: false,
14
- allowMatchingProperties: true,
15
- }));
16
- exports.validatePackageJSONFn = ajv.compile(packageJSONSchema);
17
- exports.validatePackageLockJSONFn = ajv.compile(packageLockJSONSchema);
1
+ import e from"ajv-draft-04";import a from"ajv-formats";var c="../schemas/schema-package.json",s="../schemas/schema-package-lock.json",t=a(new e({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));export{t as ajv,c as packageJSONSchema,s as packageLockJSONSchema};
@@ -0,0 +1 @@
1
+ "use strict";var d=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var i=(r,e)=>d(r,"name",{value:e,configurable:!0});var f=(r,e)=>{for(var t in e)d(r,t,{get:e[t],enumerable:!0})},l=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of u(e))!a.call(r,n)&&n!==t&&d(r,n,{get:()=>e[n],enumerable:!(s=o(e,n))||s.enumerable});return r};var m=r=>l(d({},"__esModule",{value:!0}),r);var b={};f(b,{renderer:()=>p});module.exports=m(b);var p=i(({debug:r,quiet:e,verbose:t},s=process.env)=>{if(e)return{renderer:"silent"};if(t)return{renderer:"simple"};let n=s.TERM==="dumb";return r||n||s.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");0&&(module.exports={renderer});
@@ -1,17 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderer = void 0;
4
- const renderer = ({ debug, quiet, verbose }, env = process.env) => {
5
- if (quiet) {
6
- return { renderer: 'silent' };
7
- }
8
- if (verbose) {
9
- return { renderer: 'simple' };
10
- }
11
- const isDumbTerminal = env.TERM === 'dumb';
12
- if (debug || isDumbTerminal || env.NODE_ENV === 'test') {
13
- return { renderer: 'verbose' };
14
- }
15
- return { renderer: 'default', rendererOptions: { dateFormat: false } };
16
- };
17
- exports.renderer = renderer;
1
+ var i=Object.defineProperty;var t=(e,r)=>i(e,"name",{value:r,configurable:!0});var u=t(({debug:e,quiet:r,verbose:s},n=process.env)=>{if(r)return{renderer:"silent"};if(s)return{renderer:"simple"};let d=n.TERM==="dumb";return e||d||n.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer");export{u as renderer};
@@ -0,0 +1,6 @@
1
+ "use strict";var oe=Object.create;var j=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var s=(e,t)=>j(e,"name",{value:t,configurable:!0});var pe=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})},M=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ie(t))!ce.call(e,o)&&o!==n&&j(e,o,{get:()=>t[o],enumerable:!(a=re(t,o))||a.enumerable});return e};var w=(e,t,n)=>(n=e!=null?oe(se(e)):{},M(t||!e||!e.__esModule?j(n,"default",{value:e,enumerable:!0}):n,e)),me=e=>M(j({},"__esModule",{value:!0}),e);var de={};pe(de,{applyMinVersionToRangeSet:()=>J,checkCommandTasks:()=>te,cliCommandTask:()=>he,computeEnginesConstraints:()=>Y,generateUpdateCommandFromContext:()=>Z,humanizeRange:()=>F,loadPackageFile:()=>Q,loadPackageLockFile:()=>X,outputComputedConstraints:()=>_,rangeOptions:()=>u,restrictiveRange:()=>C,setToRange:()=>$,sortRangeSet:()=>S,updatePackageJson:()=>ee});module.exports=me(de);var r=w(require("chalk"),1),I=w(require("cli-table"),1),B=require("listr2"),L=w(require("lodash"),1),y=require("path"),T=require("url"),f=w(require("semver"),1),G=w(require("sort-package-json"),1);var V=w(require("ajv-draft-04"),1),U=w(require("ajv-formats"),1),z="../schemas/schema-package.json",q="../schemas/schema-package-lock.json",P=(0,U.default)(new V.default({allErrors:!0,coerceTypes:!0,allowUnionTypes:!0,strict:!1,allowMatchingProperties:!0}));var x=["node","npm","yarn"];var N=w(require("fs/promises"),1),b=w(require("path"),1);var R=s(async e=>JSON.parse(await N.default.readFile(e,"utf8")),"getJson"),H=s(async(e,t)=>N.default.writeFile(e,JSON.stringify(t,null,2),"utf8"),"writeJson"),le=s(e=>b.default.isAbsolute(e),"isAbsolutePath"),k=s((...e)=>b.default.join(...e),"joinPath"),O=s(e=>{let{workingDir:t,path:n}=e;return n?le(n)?b.default.relative(t,n):b.default.relative(t,k(t,n)):t},"getRelativePath");var ne={};var u={loose:!1},S=s(e=>[...e.map(t=>[...t])].sort((t,n)=>f.default.compare(t[0].semver,n[0].semver)),"sortRangeSet"),$=s(e=>new f.default.Range(e.map(t=>t.map(n=>n.value).join(" ")).join("||"),u),"setToRange"),J=s((e,t)=>[...e.map(n=>[...n])].filter(n=>n[0].semver.major>=t.major).map(n=>(n[0].semver.major===t.major&&f.default.gte(t,n[0].semver,u)&&(n[0]=new f.default.Comparator(`${n[0].operator}${t.raw}`)),n)),"applyMinVersionToRangeSet"),C=s((e,t,n,a)=>{if(a(`${r.default.white("Compare:")} ${r.default.blue(e.raw)} ${r.default.white("and")} ${r.default.blue(t.raw)}`),f.default.subset(e,t))return a(`${r.default.white("Range")} ${r.default.green(e.raw)} ${r.default.white("is a subset of")} ${r.default.blue(t.raw)}`),n.push(t.raw),e;if(f.default.subset(t,e))return a(`${r.default.white("Range")} ${r.default.green(t.raw)} ${r.default.white("is a subset of")} ${r.default.blue(e.raw)}`),n.push(e.raw),t;let o=f.default.minVersion(e,u)||new f.default.SemVer("*"),i=f.default.minVersion(t,u)||new f.default.SemVer("*"),c=S(e.set),p=S(t.set);if(!f.default.eq(o,i,u)){let E=f.default.compare(o,i)===-1?i:o;a(`${r.default.white("Applying minimal version")} ${r.default.yellow(E.version)} ${r.default.white("to both ranges.")}`);let A=$(J(c,E)),D=$(J(p,E));if(A.intersects(D,u))return C(A,D,n,a);throw new Error("Not yet implemented :/")}let m=c.shift(),l=p.shift(),g=m||l;if(!g)throw new Error("Not yet implemented :/");let h=[g],d=$(c),v=$(p),ae=C(d,v,n,a);return h.push(...S(ae.set)),$(h)},"restrictiveRange"),F=s(e=>{if(!e||e.raw==="*")return"*";let t=[];return S(e.set).forEach(a=>{let[o,i]=a;a.length===2&&o.operator===">="&&i.operator==="<"&&o.semver.major+1===i.semver.major?t.push(`^${o.semver.version}`):a.length===1&&o.operator===">="?t.push(o.value):t.push(`${o.value} ${(i==null?void 0:i.value)||""}`.trim())}),t.join(" || ")},"humanizeRange"),K=s(async({fileObject:e,path:t,workingDir:n,debug:a,validateFn:o})=>{var l;let i=k(t,e.filename),c=O({path:i,workingDir:n});a(`${r.default.white(`Relative path to ${e.filename}:`)} ${r.default.blue(c)}`);let p=await R(c).catch(()=>{});if(!p)throw new Error(`${c} is not defined.`);if(a(`${r.default.white("Validate JSON schema of")} ${r.default.blue(c)}`),!o(p))throw new Error((l=o.errors)==null?void 0:l.map(g=>g.message).join(`
2
+ `));return e.relativePath=c,e.data=p,e},"loadFile"),Q=s(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageObject:o}=e,i=k((0,y.dirname)((0,T.fileURLToPath)(ne.url)),z),c=O({path:i,workingDir:a}),p=await R(c),m=P.compile(p);e.packageObject=await K({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageFile"),X=s(async({ctx:e,debug:t})=>{let{path:n,workingDir:a,packageLockObject:o}=e,i=k((0,y.dirname)((0,T.fileURLToPath)(ne.url)),q),c=O({path:i,workingDir:a}),p=await R(c),m=P.compile(p);e.packageLockObject=await K({fileObject:o,path:n,debug:t,workingDir:a,validateFn:m})},"loadPackageLockFile"),ge=s((e,t)=>{var n;if(typeof e=="object"&&t in e)return e[t];if(L.default.isArray(e)&&e.some(a=>a.includes(t)))return(n=e.find(a=>a.includes(t)))==null?void 0:n.replace(t,"")},"getConstraintFromEngines"),W=s(({packages:e,constraintKey:t,debug:n})=>{let a=new f.default.Range("*"),o=[],i=n.extend(t);for(let[c,p]of e){let{engines:m}=p,l=ge(m,t);if(!l){i(`${r.default.white("Package")} ${r.default.gray(c)} ${r.default.white("has no constraints for current engine")}`);continue}let g=f.default.validRange(l);if(!g){i(`${r.default.red(l)} ${r.default.white("is not a valid semver range")}`);continue}if(o.indexOf(g)!==-1){i(`${r.default.white("Ignored range:")} ${r.default.gray(g)}`);continue}let h=new f.default.Range(g,u);if(!a){a=h,i(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`);continue}let d=C(a,h,o,i);a.raw!==d.raw&&(a=d,i(`${r.default.white("New most restrictive range:")} ${r.default.green(a.raw)}`))}return i(a?`${r.default.white("Final computed engine range constraint:")} ${r.default.blue(a.raw)}`:`${r.default.white("No computed engine range constraint")}`),a},"computeEnginesConstraint"),Y=s(({ctx:e,debug:t})=>{let{packageObject:n,packageLockObject:a,engines:o}=e;if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!a.data)throw new Error(`${a.filename} data is not defined.`);if(!("packages"in a.data))throw new Error(`${a.filename} does not contain packages property.`);let i=s(l=>x.indexOf(l)!==-1,"filterEngineConstraintKey"),c=Object.entries(a.data.packages),p=new Map,m=[...x];if(o&&o.length>0&&(m=o.filter(i)),m.length===0)throw new Error("No valid constraint key(s).");for(let l of m)p.set(l,{from:W({packages:[["",{engines:n.data.engines||{}}]],constraintKey:l,debug:t}),to:W({packages:c,constraintKey:l,debug:t})});e.ranges=p},"computeEnginesConstraints"),fe=s(e=>new I.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:["left","left","left","left"],chars:{top:"","top-mid":"","top-left":"","top-right":"",bottom:"","bottom-mid":"","bottom-left":"","bottom-right":"",left:"","left-mid":"",mid:"","mid-mid":"",right:"","right-mid":"",middle:""}}),"createEnginesTable"),Z=s(e=>{let t=["nce"],n;return typeof e.path=="string"&&e.path.length>0&&(n=O({path:e.path,workingDir:e.workingDir})),typeof n=="string"&&n.length>0&&t.push("-p",n),e.engines&&t.push(...e.engines.map(a=>["-e",a]).flat()),e.quiet&&t.push("-q"),e.debug&&t.push("-d"),e.verbose&&t.push("-v"),t.push("-u"),t.join(" ")},"generateUpdateCommandFromContext"),_=s(({ctx:e,parent:t,debug:n})=>{let{ranges:a,packageObject:o,update:i}=e;if(!a)throw new Error("Computed engines range constraints are not defined.");let c=new Map,p="\u2192",m=[2,2,2,2],l=[];for(let[g,h]of a.entries()){let d=F(h.to),v=F(h.from);d!==v&&(c.set(g,d),n.extend(g)(`${r.default.white("Simplified computed engine range constraint:")} ${r.default.blue(d)}`),m=[Math.max(m[0],g.length+2),Math.max(m[1],v.length+2),p.length+2,Math.max(m[3],d.length+2)],l.push([g,v,p,d]))}if(c.size===0)t.title=`All computed engines range constraints are up-to-date ${r.default.green(":)")}`;else{let g=fe(m);g.push(...l);let h=`Computed engines range constraints:
3
+
4
+ ${g.toString()}`;i||(h+=`
5
+
6
+ Run ${r.default.cyan(Z(e))} to upgrade ${o.filename}.`),t.title=h}e.rangesSimplified=c},"outputComputedConstraints"),ee=s(async({ctx:e,debug:t})=>{let{packageObject:n,rangesSimplified:a}=e;if(!a)throw new Error("Simplified computed engines range constraints are not defined.");if(!n.data)throw new Error(`${n.filename} data is not defined.`);if(!n.relativePath)throw new Error(`${n.filename} path is not defined.`);return n.data.engines=L.default.merge({},n.data.engines,Object.fromEntries(a)),t(`${r.default.white("Write JSON to")} ${r.default.blue(n.relativePath)}`),H(n.relativePath,(0,G.default)(n.data))},"updatePackageJson"),te=s(({context:e,parent:t,debug:n})=>[{title:`Load ${e.packageObject.filename} file...`,task:(a,o)=>Q({ctx:a,task:o,parent:t,debug:n})},{title:`Load ${e.packageLockObject.filename} file...`,task:(a,o)=>X({ctx:a,task:o,parent:t,debug:n})},{title:"Compute engines range constraints...",task:(a,o)=>Y({ctx:a,task:o,parent:t,debug:n})},{title:"Output computed engines range constraints...",task:(a,o)=>_({ctx:a,task:o,parent:t,debug:n})},{title:`Update ${e.packageObject.filename} file...`,skip:({update:a})=>a?!a:"Update is disabled by default.",task:(a,o)=>ee({ctx:a,task:o,parent:t,debug:n})}],"checkCommandTasks"),he=s((e,t)=>{var n;return new B.Listr([{title:`Checking npm package engines range constraints in ${(n=e.ctx)==null?void 0:n.packageLockObject.filename} file...`,task:(a,o)=>{let{path:i,workingDir:c,packageLockObject:p}=a,m=k(c,i,p.filename);return o.title=`Checking npm package engines range constraints in ${m.replace(`${c}${y.sep}`,"")} file...`,o.newListr(l=>te({context:a,parent:l,debug:t}))}}],e)},"cliCommandTask");0&&(module.exports={applyMinVersionToRangeSet,checkCommandTasks,cliCommandTask,computeEnginesConstraints,generateUpdateCommandFromContext,humanizeRange,loadPackageFile,loadPackageLockFile,outputComputedConstraints,rangeOptions,restrictiveRange,setToRange,sortRangeSet,updatePackageJson});