@smarlhens/npm-check-engines 0.9.0 → 0.10.0

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
@@ -26,7 +26,7 @@
26
26
 
27
27
  ## Prerequisites
28
28
 
29
- - [Node.JS](https://nodejs.org/en/download/) **version ^16.13.0 || ^18.0.0**
29
+ - [Node.JS](https://nodejs.org/en/download/) **version ^16.14.0 || ^18.0.0**
30
30
 
31
31
  ---
32
32
 
package/dist/bin/nce.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Z=Object.create;var C=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var c=(t,e)=>C(t,"name",{value:e,configurable:!0});var ae=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of te(e))!re.call(t,s)&&s!==n&&C(t,s,{get:()=>e[s],enumerable:!(r=ee(e,s))||r.enumerable});return t};var d=(t,e,n)=>(n=t!=null?Z(ne(t)):{},ae(e||!t||!t.__esModule?C(n,"default",{value:t,enumerable:!0}):n,t));var W=require("find-up"),B=d(require("fs/promises"),1),G=require("path"),K=require("url"),Q=d(require("update-notifier"),1);var P=d(require("ajv"),1),a=d(require("chalk"),1),A=d(require("cli-table"),1),S=d(require("constants"),1),R=d(require("debug"),1),U=require("listr2"),E=require("lodash-es"),k=d(require("fs/promises"),1),$=require("path"),o=d(require("semver"),1),I=d(require("sort-package-json"),1);var V=["node","npm","yarn"],se="package-lock.json",ie="package.json",oe="nce",w=(0,R.default)(oe),ce=c(()=>R.default.disable(),"namespaces"),pe=c(t=>R.default.enable(t),"enableNamespaces"),le=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let s=r.TERM==="dumb";return t||s||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),D=c(async t=>{var g;let e=t,n=c(p=>p in V,"isValidConstraintEngine"),r={workingDir:(0,$.normalize)(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((g=e.engines)==null?void 0:g.filter(n))||[],packageLockPath:(0,$.join)(process.cwd(),se),packageJsonPath:(0,$.join)(process.cwd(),ie)},s={...le({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},i=ce();return r.debug&&pe(i),be({options:r,context:s}).run()},"checkEnginesFromCLI"),j=new P.default,J={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},ge={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":J}},packages:{type:"object",patternProperties:{"^.*$":J}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},b={loose:!1},y=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),v=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),b),"setToRange"),F=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,b)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),O=c((t,e,n,r)=>{if(r(`${a.default.white("Compare:")} ${a.default.blue(t.raw)} ${a.default.white("and")} ${a.default.blue(e.raw)}`),o.subset(t,e))return r(`${a.default.white("Range")} ${a.default.green(t.raw)} ${a.default.white("is a subset of")} ${a.default.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${a.default.white("Range")} ${a.default.green(e.raw)} ${a.default.white("is a subset of")} ${a.default.blue(t.raw)}`),n.push(t.raw),e;let s=o.minVersion(t,b)||new o.SemVer("*"),i=o.minVersion(e,b)||new o.SemVer("*"),g=y(t.set),p=y(e.set);if(!o.eq(s,i,b)){let N=o.compare(s,i)===-1?i:s;r(`${a.default.white("Applying minimal version")} ${a.default.yellow(N.version)} ${a.default.white("to both ranges.")}`);let q=v(F(g,N)),x=v(F(p,N));if(q.intersects(x,b))return O(q,x,n,r);throw new Error("Not yet implemented :/")}let l=g.shift(),m=p.shift(),u=l||m;if(!u)throw new Error("Not yet implemented :/");let f=[u],h=v(g),X=v(p),Y=O(h,X,n,r);return f.push(...y(Y.set)),v(f)},"restrictiveRange"),L=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return y(t.set).forEach(r=>{let[s,i]=r;r.length===2&&s.operator===">="&&i.operator==="<"&&s.semver.major+1===i.semver.major?e.push(`^${s.semver.version}`):r.length===1&&s.operator===">="?e.push(s.value):e.push(`${s.value} ${(i==null?void 0:i.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),me=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if((0,E.isArray)(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),T=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),s=[],i=n.extend(e);for(let[g,p]of Object.entries(t)){let{engines:l}=p;if(!l){i(`${a.default.white("Package")} ${a.default.gray(g)} ${a.default.white("has no engines")}`);continue}let m=me(l,e);if(!m){i(`${a.default.white("Package")} ${a.default.gray(g)} ${a.default.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){i(`${a.default.red(m)} ${a.default.white("is not a valid semver range")}`);continue}if(s.indexOf(u)!==-1){i(`${a.default.white("Ignored range:")} ${a.default.gray(u)}`);continue}let f=new o.Range(u,b);if(!r){r=f,i(`${a.default.white("New most restrictive range:")} ${a.default.green(r.raw)}`);continue}let h=O(r,f,s,i);r.raw!==h.raw&&(r=h,i(`${a.default.white("New most restrictive range:")} ${a.default.green(r.raw)}`))}return i(r?`${a.default.white("Final computed engine range constraint:")} ${a.default.blue(r.raw)}`:`${a.default.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),de=c(t=>new A.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),ue=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),fe=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,s=[],i=c(l=>V.indexOf(l)!==-1,"filterEngineConstraintKey"),g=[...V];r&&r.length>0&&(g=r.filter(i));let p;e.lockfileVersion===1?p=e.dependencies:e.lockfileVersion===2?p=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(p=e.packages);for(let l of g){let m=T({packages:{"":{engines:n.engines||{}}},constraintKey:l,debug:w}),u=T({packages:p,constraintKey:l,debug:w}),f=L(u),h=L(m);f!==h&&(s.push({engine:l,range:h,rangeToSet:f}),n.engines=(0,E.merge)({},n.engines,{[l]:f}))}return{packageJson:n,enginesRangeToSet:s}},"checkEnginesFromString"),ke=c(t=>{let e=j.compile(ge),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${j.errorsText(e.errors)}`);return n},"validatePackageLock"),he=c(t=>{let e=j.compile(J),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${j.errorsText(e.errors)}`);return n},"validatePackageJson"),we=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.default.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.default.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{ke(n)}},{title:"Validating package.json...",task:n=>{he(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,fe(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,s="\u2192",i=[2,2,2,2],g=[];for(let{engine:p,range:l,rangeToSet:m}of r)w.extend(p)(`${a.default.white("Simplified computed engine range constraint:")} ${a.default.blue(m)}`),i=[Math.max(i[0],p.length+2),Math.max(i[1],l.length+2),s.length+2,Math.max(i[3],m.length+2)],g.push([p,l,s,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${a.default.green(":)")}`;else{let p=de(i);p.push(...g);let l=`Computed engines range constraints:
2
+ "use strict";var ee=Object.create;var V=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var c=(t,e)=>V(t,"name",{value:e,configurable:!0});var ie=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ne(e))!ae.call(t,i)&&i!==n&&V(t,i,{get:()=>e[i],enumerable:!(r=te(e,i))||r.enumerable});return t};var d=(t,e,n)=>(n=t!=null?ee(re(t)):{},ie(e||!t||!t.__esModule?V(n,"default",{value:t,enumerable:!0}):n,t));var se=c(()=>typeof document>"u"?new URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,"getImportMetaUrl"),y=se();var B=require("find-up"),G=d(require("fs/promises"),1),K=require("path"),Q=require("url"),X=d(require("update-notifier"),1);var U=d(require("ajv"),1),a=d(require("chalk"),1),A=d(require("cli-table"),1),R=d(require("constants"),1),E=d(require("debug"),1),I=require("listr2"),N=require("lodash-es"),k=d(require("fs/promises"),1),$=require("path"),o=d(require("semver"),1),M=d(require("sort-package-json"),1);var x=["node","npm","yarn"],oe="package-lock.json",ce="package.json",le="nce",w=(0,E.default)(le),pe=c(()=>E.default.disable(),"namespaces"),ge=c(t=>E.default.enable(t),"enableNamespaces"),me=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let i=r.TERM==="dumb";return t||i||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),D=c(async t=>{var g;let e=t,n=c(l=>x.includes(l),"isValidConstraintEngine"),r={workingDir:(0,$.normalize)(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((g=e.engines)==null?void 0:g.filter(n))||[],enableEngineStrict:e.enableEngineStrict||!1,packageLockPath:(0,$.join)(process.cwd(),oe),packageJsonPath:(0,$.join)(process.cwd(),ce)},i={...me({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},s=pe();return r.debug&&ge(s),$e({options:r,context:i}).run()},"checkEnginesFromCLI"),j=new U.default,J={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},de={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":J}},packages:{type:"object",patternProperties:{"^.*$":J}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},b={loose:!1},S=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),v=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),b),"setToRange"),L=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,b)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),O=c((t,e,n,r)=>{if(r(`${a.default.white("Compare:")} ${a.default.blue(t.raw)} ${a.default.white("and")} ${a.default.blue(e.raw)}`),o.subset(t,e))return r(`${a.default.white("Range")} ${a.default.green(t.raw)} ${a.default.white("is a subset of")} ${a.default.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${a.default.white("Range")} ${a.default.green(e.raw)} ${a.default.white("is a subset of")} ${a.default.blue(t.raw)}`),n.push(t.raw),e;let i=o.minVersion(t,b)||new o.SemVer("*"),s=o.minVersion(e,b)||new o.SemVer("*"),g=S(t.set),l=S(e.set);if(!o.eq(i,s,b)){let C=o.compare(i,s)===-1?s:i;r(`${a.default.white("Applying minimal version")} ${a.default.yellow(C.version)} ${a.default.white("to both ranges.")}`);let q=v(L(g,C)),F=v(L(l,C));if(q.intersects(F,b))return O(q,F,n,r);throw new Error("Not yet implemented :/")}let p=g.shift(),m=l.shift(),u=p||m;if(!u)throw new Error("Not yet implemented :/");let f=[u],h=v(g),Y=v(l),Z=O(h,Y,n,r);return f.push(...S(Z.set)),v(f)},"restrictiveRange"),T=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return S(t.set).forEach(r=>{let[i,s]=r;r.length===2&&i.operator===">="&&s.operator==="<"&&i.semver.major+1===s.semver.major?e.push(`^${i.semver.version}`):r.length===1&&i.operator===">="?e.push(i.value):e.push(`${i.value} ${(s==null?void 0:s.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),ue=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if((0,N.isArray)(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),P=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),i=[],s=n.extend(e);for(let[g,l]of Object.entries(t)){let{engines:p}=l;if(!p){s(`${a.default.white("Package")} ${a.default.gray(g)} ${a.default.white("has no engines")}`);continue}let m=ue(p,e);if(!m){s(`${a.default.white("Package")} ${a.default.gray(g)} ${a.default.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){s(`${a.default.red(m)} ${a.default.white("is not a valid semver range")}`);continue}if(i.indexOf(u)!==-1){s(`${a.default.white("Ignored range:")} ${a.default.gray(u)}`);continue}let f=new o.Range(u,b);if(!r){r=f,s(`${a.default.white("New most restrictive range:")} ${a.default.green(r.raw)}`);continue}let h=O(r,f,i,s);r.raw!==h.raw&&(r=h,s(`${a.default.white("New most restrictive range:")} ${a.default.green(r.raw)}`))}return s(r?`${a.default.white("Final computed engine range constraint:")} ${a.default.blue(r.raw)}`:`${a.default.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),fe=c(t=>new A.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),ke=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),he=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,i=[],s=c(p=>x.indexOf(p)!==-1,"filterEngineConstraintKey"),g=[...x];r&&r.length>0&&(g=r.filter(s));let l;e.lockfileVersion===1?l=e.dependencies:e.lockfileVersion===2?l=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(l=e.packages);for(let p of g){let m=P({packages:{"":{engines:n.engines||{}}},constraintKey:p,debug:w}),u=P({packages:l,constraintKey:p,debug:w}),f=T(u),h=T(m);f!==h&&(i.push({engine:p,range:h,rangeToSet:f}),n.engines=(0,N.merge)({},n.engines,{[p]:f}))}return{packageJson:n,enginesRangeToSet:i}},"checkEnginesFromString"),we=c(t=>{let e=j.compile(de),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${j.errorsText(e.errors)}`);return n},"validatePackageLock"),be=c(t=>{let e=j.compile(J),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${j.errorsText(e.errors)}`);return n},"validatePackageJson"),ve=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.default.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.default.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{we(n)}},{title:"Validating package.json...",task:n=>{be(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,he(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,i="\u2192",s=[2,2,2,2],g=[];for(let{engine:l,range:p,rangeToSet:m}of r)w.extend(l)(`${a.default.white("Simplified computed engine range constraint:")} ${a.default.blue(m)}`),s=[Math.max(s[0],l.length+2),Math.max(s[1],p.length+2),i.length+2,Math.max(s[3],m.length+2)],g.push([l,p,i,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${a.default.green(":)")}`;else{let l=fe(s);l.push(...g);let p=`Computed engines range constraints:
3
3
 
4
- ${p.toString()}`;t.update||(l+=`
4
+ ${l.toString()}`;t.update||(p+=`
5
5
 
6
- Run ${a.default.cyan(ue(t))} to upgrade package.json.`),e.title=l}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.update?!t.update:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.default.access(n,S.F_OK|S.R_OK),(await k.default.readFile(n,"utf8")).includes("engine-strict=true")?w(".npmrc file already contains engine-strict=true"):(await k.default.appendFile(n,`engine-strict=true
6
+ Run ${a.default.cyan(ke(t))} to upgrade package.json.`),e.title=p}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.enableEngineStrict?!t.enableEngineStrict:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.default.access(n,R.F_OK|R.R_OK),(await k.default.readFile(n,"utf8")).includes("engine-strict=true")?w(".npmrc file already contains engine-strict=true"):(await k.default.appendFile(n,`engine-strict=true
7
7
  `),w(".npmrc file has been updated to set engine-strict=true"))}catch{await k.default.writeFile(n,`engine-strict=true
8
- `),w(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(w(`${a.default.white("Write JSON to")} ${a.default.blue("package.json")}`),k.default.writeFile(t.packageJsonPath,JSON.stringify((0,I.default)(n.packageJson),null,2)))}],"checkEnginesTasks"),be=c(({options:t,context:e})=>new U.Listr([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(s=>we({parent:s,options:t}))}],e),"checkEnginesCommand");var z=d(require("yargs"),1),_=require("yargs/helpers"),M=(0,z.default)((0,_.hideBin)(process.argv)),H=M.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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(M.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;var ve={};(async()=>{let t=await(0,W.findUp)("package.json",{type:"file",cwd:(0,G.dirname)((0,K.fileURLToPath)(ve.url))}),e=JSON.parse(await B.default.readFile(t,"utf8")),n=(0,Q.default)({pkg:e,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});n.update&&n.update.latest!==e.version&&n.notify({defer:!1,isGlobal:!0});let r=await H;await D(r)})();
8
+ `),w(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(w(`${a.default.white("Write JSON to")} ${a.default.blue("package.json")}`),k.default.writeFile(t.packageJsonPath,JSON.stringify((0,M.default)(n.packageJson),null,2)))}],"checkEnginesTasks"),$e=c(({options:t,context:e})=>new I.Listr([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(i=>ve({parent:i,options:t}))}],e),"checkEnginesCommand");var z=d(require("yargs"),1),H=require("yargs/helpers"),_=(0,z.default)((0,H.hideBin)(process.argv)),W=_.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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."},enableEngineStrict:{boolean:!0,default:!1,description:"Enable engine strict."}}).help("help").version().wrap(_.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;(async()=>{let t=await(0,B.findUp)("package.json",{type:"file",cwd:(0,K.dirname)((0,Q.fileURLToPath)(y))}),e=JSON.parse(await G.default.readFile(t,"utf8")),n=(0,X.default)({pkg:e,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});n.update&&n.update.latest!==e.version&&n.notify({defer:!1,isGlobal:!0});let r=await W;await D(r)})();
package/dist/bin/nce.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- var U=Object.defineProperty;var c=(t,e)=>U(t,"name",{value:e,configurable:!0});import{findUp as le}from"find-up";import ge from"node:fs/promises";import{dirname as me}from"node:path";import{fileURLToPath as de}from"node:url";import ue from"update-notifier";import I from"ajv";import a from"chalk";import D from"cli-table";import*as y from"constants";import N from"debug";import{Listr as M}from"listr2";import{isArray as z,merge as _}from"lodash-es";import k from"node:fs/promises";import{join as J,normalize as H}from"node:path";import*as o from"semver";import W from"sort-package-json";var S=["node","npm","yarn"],B="package-lock.json",G="package.json",K="nce",h=N(K),Q=c(()=>N.disable(),"namespaces"),X=c(t=>N.enable(t),"enableNamespaces"),Y=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let i=r.TERM==="dumb";return t||i||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),F=c(async t=>{var g;let e=t,n=c(p=>p in S,"isValidConstraintEngine"),r={workingDir:H(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((g=e.engines)==null?void 0:g.filter(n))||[],packageLockPath:J(process.cwd(),B),packageJsonPath:J(process.cwd(),G)},i={...Y({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},s=Q();return r.debug&&X(s),oe({options:r,context:i}).run()},"checkEnginesFromCLI"),$=new I,R={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},Z={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":R}},packages:{type:"object",patternProperties:{"^.*$":R}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},w={loose:!1},v=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),b=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),w),"setToRange"),O=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,w)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),E=c((t,e,n,r)=>{if(r(`${a.white("Compare:")} ${a.blue(t.raw)} ${a.white("and")} ${a.blue(e.raw)}`),o.subset(t,e))return r(`${a.white("Range")} ${a.green(t.raw)} ${a.white("is a subset of")} ${a.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${a.white("Range")} ${a.green(e.raw)} ${a.white("is a subset of")} ${a.blue(t.raw)}`),n.push(t.raw),e;let i=o.minVersion(t,w)||new o.SemVer("*"),s=o.minVersion(e,w)||new o.SemVer("*"),g=v(t.set),p=v(e.set);if(!o.eq(i,s,w)){let j=o.compare(i,s)===-1?s:i;r(`${a.white("Applying minimal version")} ${a.yellow(j.version)} ${a.white("to both ranges.")}`);let C=b(O(g,j)),V=b(O(p,j));if(C.intersects(V,w))return E(C,V,n,r);throw new Error("Not yet implemented :/")}let l=g.shift(),m=p.shift(),d=l||m;if(!d)throw new Error("Not yet implemented :/");let u=[d],f=b(g),P=b(p),A=E(f,P,n,r);return u.push(...v(A.set)),b(u)},"restrictiveRange"),q=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return v(t.set).forEach(r=>{let[i,s]=r;r.length===2&&i.operator===">="&&s.operator==="<"&&i.semver.major+1===s.semver.major?e.push(`^${i.semver.version}`):r.length===1&&i.operator===">="?e.push(i.value):e.push(`${i.value} ${(s==null?void 0:s.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),ee=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if(z(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),x=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),i=[],s=n.extend(e);for(let[g,p]of Object.entries(t)){let{engines:l}=p;if(!l){s(`${a.white("Package")} ${a.gray(g)} ${a.white("has no engines")}`);continue}let m=ee(l,e);if(!m){s(`${a.white("Package")} ${a.gray(g)} ${a.white("has no constraints for current engine")}`);continue}let d=o.validRange(m);if(!d){s(`${a.red(m)} ${a.white("is not a valid semver range")}`);continue}if(i.indexOf(d)!==-1){s(`${a.white("Ignored range:")} ${a.gray(d)}`);continue}let u=new o.Range(d,w);if(!r){r=u,s(`${a.white("New most restrictive range:")} ${a.green(r.raw)}`);continue}let f=E(r,u,i,s);r.raw!==f.raw&&(r=f,s(`${a.white("New most restrictive range:")} ${a.green(r.raw)}`))}return s(r?`${a.white("Final computed engine range constraint:")} ${a.blue(r.raw)}`:`${a.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),te=c(t=>new D({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),ne=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),re=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,i=[],s=c(l=>S.indexOf(l)!==-1,"filterEngineConstraintKey"),g=[...S];r&&r.length>0&&(g=r.filter(s));let p;e.lockfileVersion===1?p=e.dependencies:e.lockfileVersion===2?p=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(p=e.packages);for(let l of g){let m=x({packages:{"":{engines:n.engines||{}}},constraintKey:l,debug:h}),d=x({packages:p,constraintKey:l,debug:h}),u=q(d),f=q(m);u!==f&&(i.push({engine:l,range:f,rangeToSet:u}),n.engines=_({},n.engines,{[l]:u}))}return{packageJson:n,enginesRangeToSet:i}},"checkEnginesFromString"),ae=c(t=>{let e=$.compile(Z),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${$.errorsText(e.errors)}`);return n},"validatePackageLock"),se=c(t=>{let e=$.compile(R),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${$.errorsText(e.errors)}`);return n},"validatePackageJson"),ie=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{ae(n)}},{title:"Validating package.json...",task:n=>{se(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,re(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,i="\u2192",s=[2,2,2,2],g=[];for(let{engine:p,range:l,rangeToSet:m}of r)h.extend(p)(`${a.white("Simplified computed engine range constraint:")} ${a.blue(m)}`),s=[Math.max(s[0],p.length+2),Math.max(s[1],l.length+2),i.length+2,Math.max(s[3],m.length+2)],g.push([p,l,i,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${a.green(":)")}`;else{let p=te(s);p.push(...g);let l=`Computed engines range constraints:
2
+ var D=Object.defineProperty;var c=(t,e)=>D(t,"name",{value:e,configurable:!0});import{findUp as me}from"find-up";import de from"node:fs/promises";import{dirname as ue}from"node:path";import{fileURLToPath as fe}from"node:url";import ke from"update-notifier";import M from"ajv";import a from"chalk";import z from"cli-table";import*as y from"constants";import N from"debug";import{Listr as _}from"listr2";import{isArray as H,merge as W}from"lodash-es";import k from"node:fs/promises";import{join as J,normalize as B}from"node:path";import*as o from"semver";import G from"sort-package-json";var j=["node","npm","yarn"],K="package-lock.json",Q="package.json",X="nce",h=N(X),Y=c(()=>N.disable(),"namespaces"),Z=c(t=>N.enable(t),"enableNamespaces"),ee=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let s=r.TERM==="dumb";return t||s||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),T=c(async t=>{var g;let e=t,n=c(l=>j.includes(l),"isValidConstraintEngine"),r={workingDir:B(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((g=e.engines)==null?void 0:g.filter(n))||[],enableEngineStrict:e.enableEngineStrict||!1,packageLockPath:J(process.cwd(),K),packageJsonPath:J(process.cwd(),Q)},s={...ee({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},i=Y();return r.debug&&Z(i),le({options:r,context:s}).run()},"checkEnginesFromCLI"),$=new M,E={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},te={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":E}},packages:{type:"object",patternProperties:{"^.*$":E}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},w={loose:!1},v=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),b=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),w),"setToRange"),O=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,w)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),R=c((t,e,n,r)=>{if(r(`${a.white("Compare:")} ${a.blue(t.raw)} ${a.white("and")} ${a.blue(e.raw)}`),o.subset(t,e))return r(`${a.white("Range")} ${a.green(t.raw)} ${a.white("is a subset of")} ${a.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${a.white("Range")} ${a.green(e.raw)} ${a.white("is a subset of")} ${a.blue(t.raw)}`),n.push(t.raw),e;let s=o.minVersion(t,w)||new o.SemVer("*"),i=o.minVersion(e,w)||new o.SemVer("*"),g=v(t.set),l=v(e.set);if(!o.eq(s,i,w)){let S=o.compare(s,i)===-1?i:s;r(`${a.white("Applying minimal version")} ${a.yellow(S.version)} ${a.white("to both ranges.")}`);let C=b(O(g,S)),V=b(O(l,S));if(C.intersects(V,w))return R(C,V,n,r);throw new Error("Not yet implemented :/")}let p=g.shift(),m=l.shift(),d=p||m;if(!d)throw new Error("Not yet implemented :/");let u=[d],f=b(g),U=b(l),I=R(f,U,n,r);return u.push(...v(I.set)),b(u)},"restrictiveRange"),q=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return v(t.set).forEach(r=>{let[s,i]=r;r.length===2&&s.operator===">="&&i.operator==="<"&&s.semver.major+1===i.semver.major?e.push(`^${s.semver.version}`):r.length===1&&s.operator===">="?e.push(s.value):e.push(`${s.value} ${(i==null?void 0:i.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),ne=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if(H(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),x=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),s=[],i=n.extend(e);for(let[g,l]of Object.entries(t)){let{engines:p}=l;if(!p){i(`${a.white("Package")} ${a.gray(g)} ${a.white("has no engines")}`);continue}let m=ne(p,e);if(!m){i(`${a.white("Package")} ${a.gray(g)} ${a.white("has no constraints for current engine")}`);continue}let d=o.validRange(m);if(!d){i(`${a.red(m)} ${a.white("is not a valid semver range")}`);continue}if(s.indexOf(d)!==-1){i(`${a.white("Ignored range:")} ${a.gray(d)}`);continue}let u=new o.Range(d,w);if(!r){r=u,i(`${a.white("New most restrictive range:")} ${a.green(r.raw)}`);continue}let f=R(r,u,s,i);r.raw!==f.raw&&(r=f,i(`${a.white("New most restrictive range:")} ${a.green(r.raw)}`))}return i(r?`${a.white("Final computed engine range constraint:")} ${a.blue(r.raw)}`:`${a.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),re=c(t=>new z({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),ae=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),ie=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,s=[],i=c(p=>j.indexOf(p)!==-1,"filterEngineConstraintKey"),g=[...j];r&&r.length>0&&(g=r.filter(i));let l;e.lockfileVersion===1?l=e.dependencies:e.lockfileVersion===2?l=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(l=e.packages);for(let p of g){let m=x({packages:{"":{engines:n.engines||{}}},constraintKey:p,debug:h}),d=x({packages:l,constraintKey:p,debug:h}),u=q(d),f=q(m);u!==f&&(s.push({engine:p,range:f,rangeToSet:u}),n.engines=W({},n.engines,{[p]:u}))}return{packageJson:n,enginesRangeToSet:s}},"checkEnginesFromString"),se=c(t=>{let e=$.compile(te),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${$.errorsText(e.errors)}`);return n},"validatePackageLock"),oe=c(t=>{let e=$.compile(E),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${$.errorsText(e.errors)}`);return n},"validatePackageJson"),ce=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{se(n)}},{title:"Validating package.json...",task:n=>{oe(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,ie(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,s="\u2192",i=[2,2,2,2],g=[];for(let{engine:l,range:p,rangeToSet:m}of r)h.extend(l)(`${a.white("Simplified computed engine range constraint:")} ${a.blue(m)}`),i=[Math.max(i[0],l.length+2),Math.max(i[1],p.length+2),s.length+2,Math.max(i[3],m.length+2)],g.push([l,p,s,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${a.green(":)")}`;else{let l=re(i);l.push(...g);let p=`Computed engines range constraints:
3
3
 
4
- ${p.toString()}`;t.update||(l+=`
4
+ ${l.toString()}`;t.update||(p+=`
5
5
 
6
- Run ${a.cyan(ne(t))} to upgrade package.json.`),e.title=l}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.update?!t.update:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.access(n,y.F_OK|y.R_OK),(await k.readFile(n,"utf8")).includes("engine-strict=true")?h(".npmrc file already contains engine-strict=true"):(await k.appendFile(n,`engine-strict=true
6
+ Run ${a.cyan(ae(t))} to upgrade package.json.`),e.title=p}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.enableEngineStrict?!t.enableEngineStrict:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.access(n,y.F_OK|y.R_OK),(await k.readFile(n,"utf8")).includes("engine-strict=true")?h(".npmrc file already contains engine-strict=true"):(await k.appendFile(n,`engine-strict=true
7
7
  `),h(".npmrc file has been updated to set engine-strict=true"))}catch{await k.writeFile(n,`engine-strict=true
8
- `),h(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(h(`${a.white("Write JSON to")} ${a.blue("package.json")}`),k.writeFile(t.packageJsonPath,JSON.stringify(W(n.packageJson),null,2)))}],"checkEnginesTasks"),oe=c(({options:t,context:e})=>new M([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(i=>ie({parent:i,options:t}))}],e),"checkEnginesCommand");import ce from"yargs";import{hideBin as pe}from"yargs/helpers";var L=ce(pe(process.argv)),T=L.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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(L.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;(async()=>{let t=await le("package.json",{type:"file",cwd:me(de(import.meta.url))}),e=JSON.parse(await ge.readFile(t,"utf8")),n=ue({pkg:e,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});n.update&&n.update.latest!==e.version&&n.notify({defer:!1,isGlobal:!0});let r=await T;await F(r)})();
8
+ `),h(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(h(`${a.white("Write JSON to")} ${a.blue("package.json")}`),k.writeFile(t.packageJsonPath,JSON.stringify(G(n.packageJson),null,2)))}],"checkEnginesTasks"),le=c(({options:t,context:e})=>new _([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(s=>ce({parent:s,options:t}))}],e),"checkEnginesCommand");import pe from"yargs";import{hideBin as ge}from"yargs/helpers";var P=pe(ge(process.argv)),A=P.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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."},enableEngineStrict:{boolean:!0,default:!1,description:"Enable engine strict."}}).help("help").version().wrap(P.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;(async()=>{let t=await me("package.json",{type:"file",cwd:ue(fe(import.meta.url))}),e=JSON.parse(await de.readFile(t,"utf8")),n=ke({pkg:e,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});n.update&&n.update.latest!==e.version&&n.notify({defer:!1,isGlobal:!0});let r=await A;await T(r)})();
package/dist/lib/nce.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var K=Object.create;var $=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var c=(t,e)=>$(t,"name",{value:e,configurable:!0});var Y=(t,e)=>{for(var n in e)$(t,n,{get:e[n],enumerable:!0})},L=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of G(e))!X.call(t,a)&&a!==n&&$(t,a,{get:()=>e[a],enumerable:!(r=B(e,a))||r.enumerable});return t};var f=(t,e,n)=>(n=t!=null?K(Q(t)):{},L(e||!t||!t.__esModule?$(n,"default",{value:t,enumerable:!0}):n,t)),Z=t=>L($({},"__esModule",{value:!0}),t);var ue={};Y(ue,{applyMinVersionToRangeSet:()=>q,checkEnginesFromCLI:()=>ie,checkEnginesFromString:()=>I,humanizeRange:()=>N,rangeOptions:()=>h,restrictiveRange:()=>R,setToRange:()=>v,sortRangeSet:()=>j,validatePackageJson:()=>U,validatePackageLock:()=>_});module.exports=Z(ue);var A=f(require("ajv"),1),s=f(require("chalk"),1),M=f(require("cli-table"),1),V=f(require("constants"),1),E=f(require("debug"),1),z=require("listr2"),O=require("lodash-es"),k=f(require("fs/promises"),1),y=require("path"),o=f(require("semver"),1),D=f(require("sort-package-json"),1);var C=["node","npm","yarn"],ee="package-lock.json",te="package.json",ne="nce",b=(0,E.default)(ne),re=c(()=>E.default.disable(),"namespaces"),se=c(t=>E.default.enable(t),"enableNamespaces"),ae=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let a=r.TERM==="dumb";return t||a||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),ie=c(async t=>{var l;let e=t,n=c(p=>p in C,"isValidConstraintEngine"),r={workingDir:(0,y.normalize)(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((l=e.engines)==null?void 0:l.filter(n))||[],packageLockPath:(0,y.join)(process.cwd(),ee),packageJsonPath:(0,y.join)(process.cwd(),te)},a={...ae({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},i=re();return r.debug&&se(i),me({options:r,context:a}).run()},"checkEnginesFromCLI"),S=new A.default,J={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},oe={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":J}},packages:{type:"object",patternProperties:{"^.*$":J}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},h={loose:!1},j=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),v=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),h),"setToRange"),q=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,h)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),R=c((t,e,n,r)=>{if(r(`${s.default.white("Compare:")} ${s.default.blue(t.raw)} ${s.default.white("and")} ${s.default.blue(e.raw)}`),o.subset(t,e))return r(`${s.default.white("Range")} ${s.default.green(t.raw)} ${s.default.white("is a subset of")} ${s.default.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${s.default.white("Range")} ${s.default.green(e.raw)} ${s.default.white("is a subset of")} ${s.default.blue(t.raw)}`),n.push(t.raw),e;let a=o.minVersion(t,h)||new o.SemVer("*"),i=o.minVersion(e,h)||new o.SemVer("*"),l=j(t.set),p=j(e.set);if(!o.eq(a,i,h)){let x=o.compare(a,i)===-1?i:a;r(`${s.default.white("Applying minimal version")} ${s.default.yellow(x.version)} ${s.default.white("to both ranges.")}`);let F=v(q(l,x)),T=v(q(p,x));if(F.intersects(T,h))return R(F,T,n,r);throw new Error("Not yet implemented :/")}let g=l.shift(),m=p.shift(),u=g||m;if(!u)throw new Error("Not yet implemented :/");let d=[u],w=v(l),H=v(p),W=R(w,H,n,r);return d.push(...j(W.set)),v(d)},"restrictiveRange"),N=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return j(t.set).forEach(r=>{let[a,i]=r;r.length===2&&a.operator===">="&&i.operator==="<"&&a.semver.major+1===i.semver.major?e.push(`^${a.semver.version}`):r.length===1&&a.operator===">="?e.push(a.value):e.push(`${a.value} ${(i==null?void 0:i.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),ce=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if((0,O.isArray)(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),P=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),a=[],i=n.extend(e);for(let[l,p]of Object.entries(t)){let{engines:g}=p;if(!g){i(`${s.default.white("Package")} ${s.default.gray(l)} ${s.default.white("has no engines")}`);continue}let m=ce(g,e);if(!m){i(`${s.default.white("Package")} ${s.default.gray(l)} ${s.default.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){i(`${s.default.red(m)} ${s.default.white("is not a valid semver range")}`);continue}if(a.indexOf(u)!==-1){i(`${s.default.white("Ignored range:")} ${s.default.gray(u)}`);continue}let d=new o.Range(u,h);if(!r){r=d,i(`${s.default.white("New most restrictive range:")} ${s.default.green(r.raw)}`);continue}let w=R(r,d,a,i);r.raw!==w.raw&&(r=w,i(`${s.default.white("New most restrictive range:")} ${s.default.green(r.raw)}`))}return i(r?`${s.default.white("Final computed engine range constraint:")} ${s.default.blue(r.raw)}`:`${s.default.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),pe=c(t=>new M.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),ge=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),I=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,a=[],i=c(g=>C.indexOf(g)!==-1,"filterEngineConstraintKey"),l=[...C];r&&r.length>0&&(l=r.filter(i));let p;e.lockfileVersion===1?p=e.dependencies:e.lockfileVersion===2?p=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(p=e.packages);for(let g of l){let m=P({packages:{"":{engines:n.engines||{}}},constraintKey:g,debug:b}),u=P({packages:p,constraintKey:g,debug:b}),d=N(u),w=N(m);d!==w&&(a.push({engine:g,range:w,rangeToSet:d}),n.engines=(0,O.merge)({},n.engines,{[g]:d}))}return{packageJson:n,enginesRangeToSet:a}},"checkEnginesFromString"),_=c(t=>{let e=S.compile(oe),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${S.errorsText(e.errors)}`);return n},"validatePackageLock"),U=c(t=>{let e=S.compile(J),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${S.errorsText(e.errors)}`);return n},"validatePackageJson"),le=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.default.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.default.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{_(n)}},{title:"Validating package.json...",task:n=>{U(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,I(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,a="\u2192",i=[2,2,2,2],l=[];for(let{engine:p,range:g,rangeToSet:m}of r)b.extend(p)(`${s.default.white("Simplified computed engine range constraint:")} ${s.default.blue(m)}`),i=[Math.max(i[0],p.length+2),Math.max(i[1],g.length+2),a.length+2,Math.max(i[3],m.length+2)],l.push([p,g,a,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${s.default.green(":)")}`;else{let p=pe(i);p.push(...l);let g=`Computed engines range constraints:
1
+ "use strict";var K=Object.create;var $=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var c=(n,e)=>$(n,"name",{value:e,configurable:!0});var Y=(n,e)=>{for(var t in e)$(n,t,{get:e[t],enumerable:!0})},L=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of G(e))!X.call(n,a)&&a!==t&&$(n,a,{get:()=>e[a],enumerable:!(r=B(e,a))||r.enumerable});return n};var f=(n,e,t)=>(t=n!=null?K(Q(n)):{},L(e||!n||!n.__esModule?$(t,"default",{value:n,enumerable:!0}):t,n)),Z=n=>L($({},"__esModule",{value:!0}),n);var ue={};Y(ue,{applyMinVersionToRangeSet:()=>q,checkEnginesFromCLI:()=>ie,checkEnginesFromString:()=>I,humanizeRange:()=>N,rangeOptions:()=>h,restrictiveRange:()=>R,setToRange:()=>v,sortRangeSet:()=>j,validatePackageJson:()=>U,validatePackageLock:()=>_});module.exports=Z(ue);var A=f(require("ajv"),1),s=f(require("chalk"),1),M=f(require("cli-table"),1),E=f(require("constants"),1),V=f(require("debug"),1),z=require("listr2"),O=require("lodash-es"),k=f(require("fs/promises"),1),y=require("path"),o=f(require("semver"),1),D=f(require("sort-package-json"),1);var C=["node","npm","yarn"],ee="package-lock.json",ne="package.json",te="nce",b=(0,V.default)(te),re=c(()=>V.default.disable(),"namespaces"),se=c(n=>V.default.enable(n),"enableNamespaces"),ae=c(({debug:n,quiet:e,verbose:t},r=process.env)=>{if(e)return{renderer:"silent"};if(t)return{renderer:"simple"};let a=r.TERM==="dumb";return n||a||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),ie=c(async n=>{var l;let e=n,t=c(g=>C.includes(g),"isValidConstraintEngine"),r={workingDir:(0,y.normalize)(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((l=e.engines)==null?void 0:l.filter(t))||[],enableEngineStrict:e.enableEngineStrict||!1,packageLockPath:(0,y.join)(process.cwd(),ee),packageJsonPath:(0,y.join)(process.cwd(),ne)},a={...ae({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},i=re();return r.debug&&se(i),me({options:r,context:a}).run()},"checkEnginesFromCLI"),S=new A.default,J={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},oe={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":J}},packages:{type:"object",patternProperties:{"^.*$":J}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},h={loose:!1},j=c(n=>[...n.map(e=>[...e])].sort((e,t)=>o.compare(e[0].semver,t[0].semver)),"sortRangeSet"),v=c(n=>new o.Range(n.map(e=>e.map(t=>t.value).join(" ")).join("||"),h),"setToRange"),q=c((n,e)=>[...n.map(t=>[...t])].filter(t=>t[0].semver.major>=e.major).map(t=>(t[0].semver.major===e.major&&o.gte(e,t[0].semver,h)&&(t[0]=new o.Comparator(`${t[0].operator}${e.raw}`)),t)),"applyMinVersionToRangeSet"),R=c((n,e,t,r)=>{if(r(`${s.default.white("Compare:")} ${s.default.blue(n.raw)} ${s.default.white("and")} ${s.default.blue(e.raw)}`),o.subset(n,e))return r(`${s.default.white("Range")} ${s.default.green(n.raw)} ${s.default.white("is a subset of")} ${s.default.blue(e.raw)}`),t.push(e.raw),n;if(o.subset(e,n))return r(`${s.default.white("Range")} ${s.default.green(e.raw)} ${s.default.white("is a subset of")} ${s.default.blue(n.raw)}`),t.push(n.raw),e;let a=o.minVersion(n,h)||new o.SemVer("*"),i=o.minVersion(e,h)||new o.SemVer("*"),l=j(n.set),g=j(e.set);if(!o.eq(a,i,h)){let x=o.compare(a,i)===-1?i:a;r(`${s.default.white("Applying minimal version")} ${s.default.yellow(x.version)} ${s.default.white("to both ranges.")}`);let F=v(q(l,x)),T=v(q(g,x));if(F.intersects(T,h))return R(F,T,t,r);throw new Error("Not yet implemented :/")}let p=l.shift(),m=g.shift(),u=p||m;if(!u)throw new Error("Not yet implemented :/");let d=[u],w=v(l),H=v(g),W=R(w,H,t,r);return d.push(...j(W.set)),v(d)},"restrictiveRange"),N=c(n=>{if(!n||n.raw==="*")return"*";let e=[];return j(n.set).forEach(r=>{let[a,i]=r;r.length===2&&a.operator===">="&&i.operator==="<"&&a.semver.major+1===i.semver.major?e.push(`^${a.semver.version}`):r.length===1&&a.operator===">="?e.push(a.value):e.push(`${a.value} ${(i==null?void 0:i.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),ce=c((n,e)=>{var t;if(typeof n=="object"&&e in n)return n[e];if((0,O.isArray)(n)&&n.some(r=>r.includes(e)))return(t=n.find(r=>r.includes(e)))==null?void 0:t.replace(e,"")},"getConstraintFromEngines"),P=c(({packages:n,constraintKey:e,debug:t})=>{let r=new o.Range("*"),a=[],i=t.extend(e);for(let[l,g]of Object.entries(n)){let{engines:p}=g;if(!p){i(`${s.default.white("Package")} ${s.default.gray(l)} ${s.default.white("has no engines")}`);continue}let m=ce(p,e);if(!m){i(`${s.default.white("Package")} ${s.default.gray(l)} ${s.default.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){i(`${s.default.red(m)} ${s.default.white("is not a valid semver range")}`);continue}if(a.indexOf(u)!==-1){i(`${s.default.white("Ignored range:")} ${s.default.gray(u)}`);continue}let d=new o.Range(u,h);if(!r){r=d,i(`${s.default.white("New most restrictive range:")} ${s.default.green(r.raw)}`);continue}let w=R(r,d,a,i);r.raw!==w.raw&&(r=w,i(`${s.default.white("New most restrictive range:")} ${s.default.green(r.raw)}`))}return i(r?`${s.default.white("Final computed engine range constraint:")} ${s.default.blue(r.raw)}`:`${s.default.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),ge=c(n=>new M.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:n,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:""}}),"createOutputTable"),pe=c(n=>{let e=["nce"];return n.engines&&e.push(...n.engines.map(t=>["-e",t]).flat()),n.quiet&&e.push("-q"),n.debug&&e.push("-d"),n.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),I=c(n=>{let e=JSON.parse(n.packageLockString),t=JSON.parse(n.packageJsonString),r=n.engines,a=[],i=c(p=>C.indexOf(p)!==-1,"filterEngineConstraintKey"),l=[...C];r&&r.length>0&&(l=r.filter(i));let g;e.lockfileVersion===1?g=e.dependencies:e.lockfileVersion===2?g=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(g=e.packages);for(let p of l){let m=P({packages:{"":{engines:t.engines||{}}},constraintKey:p,debug:b}),u=P({packages:g,constraintKey:p,debug:b}),d=N(u),w=N(m);d!==w&&(a.push({engine:p,range:w,rangeToSet:d}),t.engines=(0,O.merge)({},t.engines,{[p]:d}))}return{packageJson:t,enginesRangeToSet:a}},"checkEnginesFromString"),_=c(n=>{let e=S.compile(oe),t=e(JSON.parse(n.packageLockString));if(!t)throw new Error(`Invalid package-lock.json: ${S.errorsText(e.errors)}`);return t},"validatePackageLock"),U=c(n=>{let e=S.compile(J),t=e(JSON.parse(n.packageJsonString));if(!t)throw new Error(`Invalid package.json: ${S.errorsText(e.errors)}`);return t},"validatePackageJson"),le=c(({options:n,parent:e})=>[{title:"Reading package-lock.json...",task:async t=>{t.packageLockString=await k.default.readFile(n.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async t=>{t.packageJsonString=await k.default.readFile(n.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:t=>{_(t)}},{title:"Validating package.json...",task:t=>{U(t)}},{title:"Compute engines range constraints...",task:t=>{Object.assign(t,I(t))}},{title:"Output computed engines range constraints...",task:t=>{let r=t.enginesRangeToSet,a="\u2192",i=[2,2,2,2],l=[];for(let{engine:g,range:p,rangeToSet:m}of r)b.extend(g)(`${s.default.white("Simplified computed engine range constraint:")} ${s.default.blue(m)}`),i=[Math.max(i[0],g.length+2),Math.max(i[1],p.length+2),a.length+2,Math.max(i[3],m.length+2)],l.push([g,p,a,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${s.default.green(":)")}`;else{let g=ge(i);g.push(...l);let p=`Computed engines range constraints:
2
2
 
3
- ${p.toString()}`;t.update||(g+=`
3
+ ${g.toString()}`;n.update||(p+=`
4
4
 
5
- Run ${s.default.cyan(ge(t))} to upgrade package.json.`),e.title=g}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.update?!t.update:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.default.access(n,V.F_OK|V.R_OK),(await k.default.readFile(n,"utf8")).includes("engine-strict=true")?b(".npmrc file already contains engine-strict=true"):(await k.default.appendFile(n,`engine-strict=true
6
- `),b(".npmrc file has been updated to set engine-strict=true"))}catch{await k.default.writeFile(n,`engine-strict=true
7
- `),b(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(b(`${s.default.white("Write JSON to")} ${s.default.blue("package.json")}`),k.default.writeFile(t.packageJsonPath,JSON.stringify((0,D.default)(n.packageJson),null,2)))}],"checkEnginesTasks"),me=c(({options:t,context:e})=>new z.Listr([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(a=>le({parent:a,options:t}))}],e),"checkEnginesCommand");0&&(module.exports={applyMinVersionToRangeSet,checkEnginesFromCLI,checkEnginesFromString,humanizeRange,rangeOptions,restrictiveRange,setToRange,sortRangeSet,validatePackageJson,validatePackageLock});
5
+ Run ${s.default.cyan(pe(n))} to upgrade package.json.`),e.title=p}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>n.enableEngineStrict?!n.enableEngineStrict:"Enabling engine-strict is disabled by default.",task:async()=>{let t=".npmrc";try{await k.default.access(t,E.F_OK|E.R_OK),(await k.default.readFile(t,"utf8")).includes("engine-strict=true")?b(".npmrc file already contains engine-strict=true"):(await k.default.appendFile(t,`engine-strict=true
6
+ `),b(".npmrc file has been updated to set engine-strict=true"))}catch{await k.default.writeFile(t,`engine-strict=true
7
+ `),b(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>n.update?!n.update:"Update is disabled by default.",task:t=>(b(`${s.default.white("Write JSON to")} ${s.default.blue("package.json")}`),k.default.writeFile(n.packageJsonPath,JSON.stringify((0,D.default)(t.packageJson),null,2)))}],"checkEnginesTasks"),me=c(({options:n,context:e})=>new z.Listr([{title:"Checking npm package engines range constraints in package-lock.json...",task:(t,r)=>r.newListr(a=>le({parent:a,options:n}))}],e),"checkEnginesCommand");0&&(module.exports={applyMinVersionToRangeSet,checkEnginesFromCLI,checkEnginesFromString,humanizeRange,rangeOptions,restrictiveRange,setToRange,sortRangeSet,validatePackageJson,validatePackageLock});
package/dist/lib/nce.js CHANGED
@@ -1,7 +1,7 @@
1
- var L=Object.defineProperty;var c=(t,e)=>L(t,"name",{value:e,configurable:!0});import P from"ajv";import s from"chalk";import A from"cli-table";import*as j from"constants";import E from"debug";import{Listr as M}from"listr2";import{isArray as z,merge as D}from"lodash-es";import k from"node:fs/promises";import{join as C,normalize as I}from"node:path";import*as o from"semver";import _ from"sort-package-json";var S=["node","npm","yarn"],U="package-lock.json",H="package.json",W="nce",h=E(W),K=c(()=>E.disable(),"namespaces"),B=c(t=>E.enable(t),"enableNamespaces"),G=c(({debug:t,quiet:e,verbose:n},r=process.env)=>{if(e)return{renderer:"silent"};if(n)return{renderer:"simple"};let i=r.TERM==="dumb";return t||i||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),fe=c(async t=>{var l;let e=t,n=c(p=>p in S,"isValidConstraintEngine"),r={workingDir:I(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((l=e.engines)==null?void 0:l.filter(n))||[],packageLockPath:C(process.cwd(),U),packageJsonPath:C(process.cwd(),H)},i={...G({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},a=K();return r.debug&&B(a),se({options:r,context:i}).run()},"checkEnginesFromCLI"),$=new P,R={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},Q={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":R}},packages:{type:"object",patternProperties:{"^.*$":R}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},w={loose:!1},v=c(t=>[...t.map(e=>[...e])].sort((e,n)=>o.compare(e[0].semver,n[0].semver)),"sortRangeSet"),b=c(t=>new o.Range(t.map(e=>e.map(n=>n.value).join(" ")).join("||"),w),"setToRange"),J=c((t,e)=>[...t.map(n=>[...n])].filter(n=>n[0].semver.major>=e.major).map(n=>(n[0].semver.major===e.major&&o.gte(e,n[0].semver,w)&&(n[0]=new o.Comparator(`${n[0].operator}${e.raw}`)),n)),"applyMinVersionToRangeSet"),V=c((t,e,n,r)=>{if(r(`${s.white("Compare:")} ${s.blue(t.raw)} ${s.white("and")} ${s.blue(e.raw)}`),o.subset(t,e))return r(`${s.white("Range")} ${s.green(t.raw)} ${s.white("is a subset of")} ${s.blue(e.raw)}`),n.push(e.raw),t;if(o.subset(e,t))return r(`${s.white("Range")} ${s.green(e.raw)} ${s.white("is a subset of")} ${s.blue(t.raw)}`),n.push(t.raw),e;let i=o.minVersion(t,w)||new o.SemVer("*"),a=o.minVersion(e,w)||new o.SemVer("*"),l=v(t.set),p=v(e.set);if(!o.eq(i,a,w)){let y=o.compare(i,a)===-1?a:i;r(`${s.white("Applying minimal version")} ${s.yellow(y.version)} ${s.white("to both ranges.")}`);let O=b(J(l,y)),x=b(J(p,y));if(O.intersects(x,w))return V(O,x,n,r);throw new Error("Not yet implemented :/")}let g=l.shift(),m=p.shift(),u=g||m;if(!u)throw new Error("Not yet implemented :/");let d=[u],f=b(l),F=b(p),T=V(f,F,n,r);return d.push(...v(T.set)),b(d)},"restrictiveRange"),q=c(t=>{if(!t||t.raw==="*")return"*";let e=[];return v(t.set).forEach(r=>{let[i,a]=r;r.length===2&&i.operator===">="&&a.operator==="<"&&i.semver.major+1===a.semver.major?e.push(`^${i.semver.version}`):r.length===1&&i.operator===">="?e.push(i.value):e.push(`${i.value} ${(a==null?void 0:a.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),X=c((t,e)=>{var n;if(typeof t=="object"&&e in t)return t[e];if(z(t)&&t.some(r=>r.includes(e)))return(n=t.find(r=>r.includes(e)))==null?void 0:n.replace(e,"")},"getConstraintFromEngines"),N=c(({packages:t,constraintKey:e,debug:n})=>{let r=new o.Range("*"),i=[],a=n.extend(e);for(let[l,p]of Object.entries(t)){let{engines:g}=p;if(!g){a(`${s.white("Package")} ${s.gray(l)} ${s.white("has no engines")}`);continue}let m=X(g,e);if(!m){a(`${s.white("Package")} ${s.gray(l)} ${s.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){a(`${s.red(m)} ${s.white("is not a valid semver range")}`);continue}if(i.indexOf(u)!==-1){a(`${s.white("Ignored range:")} ${s.gray(u)}`);continue}let d=new o.Range(u,w);if(!r){r=d,a(`${s.white("New most restrictive range:")} ${s.green(r.raw)}`);continue}let f=V(r,d,i,a);r.raw!==f.raw&&(r=f,a(`${s.white("New most restrictive range:")} ${s.green(r.raw)}`))}return a(r?`${s.white("Final computed engine range constraint:")} ${s.blue(r.raw)}`:`${s.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),Y=c(t=>new A({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:t,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:""}}),"createOutputTable"),Z=c(t=>{let e=["nce"];return t.engines&&e.push(...t.engines.map(n=>["-e",n]).flat()),t.quiet&&e.push("-q"),t.debug&&e.push("-d"),t.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),ee=c(t=>{let e=JSON.parse(t.packageLockString),n=JSON.parse(t.packageJsonString),r=t.engines,i=[],a=c(g=>S.indexOf(g)!==-1,"filterEngineConstraintKey"),l=[...S];r&&r.length>0&&(l=r.filter(a));let p;e.lockfileVersion===1?p=e.dependencies:e.lockfileVersion===2?p=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(p=e.packages);for(let g of l){let m=N({packages:{"":{engines:n.engines||{}}},constraintKey:g,debug:h}),u=N({packages:p,constraintKey:g,debug:h}),d=q(u),f=q(m);d!==f&&(i.push({engine:g,range:f,rangeToSet:d}),n.engines=D({},n.engines,{[g]:d}))}return{packageJson:n,enginesRangeToSet:i}},"checkEnginesFromString"),te=c(t=>{let e=$.compile(Q),n=e(JSON.parse(t.packageLockString));if(!n)throw new Error(`Invalid package-lock.json: ${$.errorsText(e.errors)}`);return n},"validatePackageLock"),ne=c(t=>{let e=$.compile(R),n=e(JSON.parse(t.packageJsonString));if(!n)throw new Error(`Invalid package.json: ${$.errorsText(e.errors)}`);return n},"validatePackageJson"),re=c(({options:t,parent:e})=>[{title:"Reading package-lock.json...",task:async n=>{n.packageLockString=await k.readFile(t.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async n=>{n.packageJsonString=await k.readFile(t.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:n=>{te(n)}},{title:"Validating package.json...",task:n=>{ne(n)}},{title:"Compute engines range constraints...",task:n=>{Object.assign(n,ee(n))}},{title:"Output computed engines range constraints...",task:n=>{let r=n.enginesRangeToSet,i="\u2192",a=[2,2,2,2],l=[];for(let{engine:p,range:g,rangeToSet:m}of r)h.extend(p)(`${s.white("Simplified computed engine range constraint:")} ${s.blue(m)}`),a=[Math.max(a[0],p.length+2),Math.max(a[1],g.length+2),i.length+2,Math.max(a[3],m.length+2)],l.push([p,g,i,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${s.green(":)")}`;else{let p=Y(a);p.push(...l);let g=`Computed engines range constraints:
1
+ var L=Object.defineProperty;var c=(n,e)=>L(n,"name",{value:e,configurable:!0});import P from"ajv";import s from"chalk";import A from"cli-table";import*as j from"constants";import V from"debug";import{Listr as M}from"listr2";import{isArray as z,merge as D}from"lodash-es";import k from"node:fs/promises";import{join as C,normalize as I}from"node:path";import*as o from"semver";import _ from"sort-package-json";var S=["node","npm","yarn"],U="package-lock.json",H="package.json",W="nce",h=V(W),K=c(()=>V.disable(),"namespaces"),B=c(n=>V.enable(n),"enableNamespaces"),G=c(({debug:n,quiet:e,verbose:t},r=process.env)=>{if(e)return{renderer:"silent"};if(t)return{renderer:"simple"};let i=r.TERM==="dumb";return n||i||r.NODE_ENV==="test"?{renderer:"verbose"}:{renderer:"default",rendererOptions:{dateFormat:!1}}},"renderer"),he=c(async n=>{var l;let e=n,t=c(g=>S.includes(g),"isValidConstraintEngine"),r={workingDir:I(process.cwd()),update:e.update||!1,verbose:e.verbose||!1,quiet:e.quiet||!1,debug:e.debug||!1,engines:((l=e.engines)==null?void 0:l.filter(t))||[],enableEngineStrict:e.enableEngineStrict||!1,packageLockPath:C(process.cwd(),U),packageJsonPath:C(process.cwd(),H)},i={...G({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},a=K();return r.debug&&B(a),se({options:r,context:i}).run()},"checkEnginesFromCLI"),$=new P,R={type:"object",properties:{engines:{anyOf:[{type:"object",additionalProperties:{type:"string"},oneOf:[{required:["node"]},{required:["npm"]},{required:["yarn"]}]},{type:"array",items:{type:"string"}},{type:"object",not:{required:["engines"]}}]}}},Q={type:"object",properties:{lockfileVersion:{type:"number",enum:[1,2,3]},dependencies:{type:"object",patternProperties:{"^.*$":R}},packages:{type:"object",patternProperties:{"^.*$":R}}},required:["lockfileVersion"],oneOf:[{properties:{lockfileVersion:{const:1}},required:["dependencies"],not:{required:["packages"]}},{properties:{lockfileVersion:{const:2}},required:["dependencies"]},{properties:{lockfileVersion:{const:3}},required:["packages"],not:{required:["dependencies"]}}]},w={loose:!1},v=c(n=>[...n.map(e=>[...e])].sort((e,t)=>o.compare(e[0].semver,t[0].semver)),"sortRangeSet"),b=c(n=>new o.Range(n.map(e=>e.map(t=>t.value).join(" ")).join("||"),w),"setToRange"),J=c((n,e)=>[...n.map(t=>[...t])].filter(t=>t[0].semver.major>=e.major).map(t=>(t[0].semver.major===e.major&&o.gte(e,t[0].semver,w)&&(t[0]=new o.Comparator(`${t[0].operator}${e.raw}`)),t)),"applyMinVersionToRangeSet"),E=c((n,e,t,r)=>{if(r(`${s.white("Compare:")} ${s.blue(n.raw)} ${s.white("and")} ${s.blue(e.raw)}`),o.subset(n,e))return r(`${s.white("Range")} ${s.green(n.raw)} ${s.white("is a subset of")} ${s.blue(e.raw)}`),t.push(e.raw),n;if(o.subset(e,n))return r(`${s.white("Range")} ${s.green(e.raw)} ${s.white("is a subset of")} ${s.blue(n.raw)}`),t.push(n.raw),e;let i=o.minVersion(n,w)||new o.SemVer("*"),a=o.minVersion(e,w)||new o.SemVer("*"),l=v(n.set),g=v(e.set);if(!o.eq(i,a,w)){let y=o.compare(i,a)===-1?a:i;r(`${s.white("Applying minimal version")} ${s.yellow(y.version)} ${s.white("to both ranges.")}`);let O=b(J(l,y)),x=b(J(g,y));if(O.intersects(x,w))return E(O,x,t,r);throw new Error("Not yet implemented :/")}let p=l.shift(),m=g.shift(),u=p||m;if(!u)throw new Error("Not yet implemented :/");let d=[u],f=b(l),F=b(g),T=E(f,F,t,r);return d.push(...v(T.set)),b(d)},"restrictiveRange"),q=c(n=>{if(!n||n.raw==="*")return"*";let e=[];return v(n.set).forEach(r=>{let[i,a]=r;r.length===2&&i.operator===">="&&a.operator==="<"&&i.semver.major+1===a.semver.major?e.push(`^${i.semver.version}`):r.length===1&&i.operator===">="?e.push(i.value):e.push(`${i.value} ${(a==null?void 0:a.value)||""}`.trim())}),e.join(" || ")},"humanizeRange"),X=c((n,e)=>{var t;if(typeof n=="object"&&e in n)return n[e];if(z(n)&&n.some(r=>r.includes(e)))return(t=n.find(r=>r.includes(e)))==null?void 0:t.replace(e,"")},"getConstraintFromEngines"),N=c(({packages:n,constraintKey:e,debug:t})=>{let r=new o.Range("*"),i=[],a=t.extend(e);for(let[l,g]of Object.entries(n)){let{engines:p}=g;if(!p){a(`${s.white("Package")} ${s.gray(l)} ${s.white("has no engines")}`);continue}let m=X(p,e);if(!m){a(`${s.white("Package")} ${s.gray(l)} ${s.white("has no constraints for current engine")}`);continue}let u=o.validRange(m);if(!u){a(`${s.red(m)} ${s.white("is not a valid semver range")}`);continue}if(i.indexOf(u)!==-1){a(`${s.white("Ignored range:")} ${s.gray(u)}`);continue}let d=new o.Range(u,w);if(!r){r=d,a(`${s.white("New most restrictive range:")} ${s.green(r.raw)}`);continue}let f=E(r,d,i,a);r.raw!==f.raw&&(r=f,a(`${s.white("New most restrictive range:")} ${s.green(r.raw)}`))}return a(r?`${s.white("Final computed engine range constraint:")} ${s.blue(r.raw)}`:`${s.white("No computed engine range constraint")}`),r},"computeEnginesConstraint"),Y=c(n=>new A({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:n,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:""}}),"createOutputTable"),Z=c(n=>{let e=["nce"];return n.engines&&e.push(...n.engines.map(t=>["-e",t]).flat()),n.quiet&&e.push("-q"),n.debug&&e.push("-d"),n.verbose&&e.push("-v"),e.push("-u"),e.join(" ")},"generateUpdateCommandFromContext"),ee=c(n=>{let e=JSON.parse(n.packageLockString),t=JSON.parse(n.packageJsonString),r=n.engines,i=[],a=c(p=>S.indexOf(p)!==-1,"filterEngineConstraintKey"),l=[...S];r&&r.length>0&&(l=r.filter(a));let g;e.lockfileVersion===1?g=e.dependencies:e.lockfileVersion===2?g=e.packages?e.packages:e.dependencies:e.lockfileVersion===3&&(g=e.packages);for(let p of l){let m=N({packages:{"":{engines:t.engines||{}}},constraintKey:p,debug:h}),u=N({packages:g,constraintKey:p,debug:h}),d=q(u),f=q(m);d!==f&&(i.push({engine:p,range:f,rangeToSet:d}),t.engines=D({},t.engines,{[p]:d}))}return{packageJson:t,enginesRangeToSet:i}},"checkEnginesFromString"),ne=c(n=>{let e=$.compile(Q),t=e(JSON.parse(n.packageLockString));if(!t)throw new Error(`Invalid package-lock.json: ${$.errorsText(e.errors)}`);return t},"validatePackageLock"),te=c(n=>{let e=$.compile(R),t=e(JSON.parse(n.packageJsonString));if(!t)throw new Error(`Invalid package.json: ${$.errorsText(e.errors)}`);return t},"validatePackageJson"),re=c(({options:n,parent:e})=>[{title:"Reading package-lock.json...",task:async t=>{t.packageLockString=await k.readFile(n.packageLockPath,"utf8")}},{title:"Reading package.json...",task:async t=>{t.packageJsonString=await k.readFile(n.packageJsonPath,"utf8")}},{title:"Validating package-lock.json...",task:t=>{ne(t)}},{title:"Validating package.json...",task:t=>{te(t)}},{title:"Compute engines range constraints...",task:t=>{Object.assign(t,ee(t))}},{title:"Output computed engines range constraints...",task:t=>{let r=t.enginesRangeToSet,i="\u2192",a=[2,2,2,2],l=[];for(let{engine:g,range:p,rangeToSet:m}of r)h.extend(g)(`${s.white("Simplified computed engine range constraint:")} ${s.blue(m)}`),a=[Math.max(a[0],g.length+2),Math.max(a[1],p.length+2),i.length+2,Math.max(a[3],m.length+2)],l.push([g,p,i,m]);if(r.length===0)e.title=`All computed engines range constraints are up-to-date ${s.green(":)")}`;else{let g=Y(a);g.push(...l);let p=`Computed engines range constraints:
2
2
 
3
- ${p.toString()}`;t.update||(g+=`
3
+ ${g.toString()}`;n.update||(p+=`
4
4
 
5
- Run ${s.cyan(Z(t))} to upgrade package.json.`),e.title=g}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>t.update?!t.update:"Enabling engine-strict is disabled by default.",task:async()=>{let n=".npmrc";try{await k.access(n,j.F_OK|j.R_OK),(await k.readFile(n,"utf8")).includes("engine-strict=true")?h(".npmrc file already contains engine-strict=true"):(await k.appendFile(n,`engine-strict=true
6
- `),h(".npmrc file has been updated to set engine-strict=true"))}catch{await k.writeFile(n,`engine-strict=true
7
- `),h(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>t.update?!t.update:"Update is disabled by default.",task:n=>(h(`${s.white("Write JSON to")} ${s.blue("package.json")}`),k.writeFile(t.packageJsonPath,JSON.stringify(_(n.packageJson),null,2)))}],"checkEnginesTasks"),se=c(({options:t,context:e})=>new M([{title:"Checking npm package engines range constraints in package-lock.json...",task:(n,r)=>r.newListr(i=>re({parent:i,options:t}))}],e),"checkEnginesCommand");export{J as applyMinVersionToRangeSet,fe as checkEnginesFromCLI,ee as checkEnginesFromString,q as humanizeRange,w as rangeOptions,V as restrictiveRange,b as setToRange,v as sortRangeSet,ne as validatePackageJson,te as validatePackageLock};
5
+ Run ${s.cyan(Z(n))} to upgrade package.json.`),e.title=p}}},{title:"Enabling engine-strict using .npmrc...",skip:()=>n.enableEngineStrict?!n.enableEngineStrict:"Enabling engine-strict is disabled by default.",task:async()=>{let t=".npmrc";try{await k.access(t,j.F_OK|j.R_OK),(await k.readFile(t,"utf8")).includes("engine-strict=true")?h(".npmrc file already contains engine-strict=true"):(await k.appendFile(t,`engine-strict=true
6
+ `),h(".npmrc file has been updated to set engine-strict=true"))}catch{await k.writeFile(t,`engine-strict=true
7
+ `),h(".npmrc file has been created and set engine-strict=true")}}},{title:"Updating package.json...",skip:()=>n.update?!n.update:"Update is disabled by default.",task:t=>(h(`${s.white("Write JSON to")} ${s.blue("package.json")}`),k.writeFile(n.packageJsonPath,JSON.stringify(_(t.packageJson),null,2)))}],"checkEnginesTasks"),se=c(({options:n,context:e})=>new M([{title:"Checking npm package engines range constraints in package-lock.json...",task:(t,r)=>r.newListr(i=>re({parent:i,options:n}))}],e),"checkEnginesCommand");export{J as applyMinVersionToRangeSet,he as checkEnginesFromCLI,ee as checkEnginesFromString,q as humanizeRange,w as rangeOptions,E as restrictiveRange,b as setToRange,v as sortRangeSet,te as validatePackageJson,ne as validatePackageLock};
@@ -1 +1 @@
1
- "use strict";var c=Object.create;var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var m=(e,a)=>{for(var i in a)l(e,i,{get:a[i],enumerable:!0})},o=(e,a,i,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of p(a))!f.call(e,t)&&t!==i&&l(e,t,{get:()=>a[t],enumerable:!(n=u(a,t))||n.enumerable});return e};var b=(e,a,i)=>(i=e!=null?c(g(e)):{},o(a||!e||!e.__esModule?l(i,"default",{value:e,enumerable:!0}):i,e)),h=e=>o(l({},"__esModule",{value:!0}),e);var k={};m(k,{cli:()=>v});module.exports=h(k);var s=b(require("yargs"),1),d=require("yargs/helpers"),r=(0,s.default)((0,d.hideBin)(process.argv)),v=r.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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(r.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;0&&(module.exports={cli});
1
+ "use strict";var d=Object.create;var n=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var b=(e,a)=>{for(var i in a)n(e,i,{get:a[i],enumerable:!0})},o=(e,a,i,l)=>{if(a&&typeof a=="object"||typeof a=="function")for(let t of p(a))!f.call(e,t)&&t!==i&&n(e,t,{get:()=>a[t],enumerable:!(l=u(a,t))||l.enumerable});return e};var m=(e,a,i)=>(i=e!=null?d(g(e)):{},o(a||!e||!e.__esModule?n(i,"default",{value:e,enumerable:!0}):i,e)),h=e=>o(n({},"__esModule",{value:!0}),e);var k={};b(k,{cli:()=>v});module.exports=h(k);var s=m(require("yargs"),1),c=require("yargs/helpers"),r=(0,s.default)((0,c.hideBin)(process.argv)),v=r.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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."},enableEngineStrict:{boolean:!0,default:!1,description:"Enable engine strict."}}).help("help").version().wrap(r.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;0&&(module.exports={cli});
package/dist/lib/yargs.js CHANGED
@@ -1 +1 @@
1
- import a from"yargs";import{hideBin as i}from"yargs/helpers";var e=a(i(process.argv)),n=e.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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(e.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;export{n as cli};
1
+ import a from"yargs";import{hideBin as i}from"yargs/helpers";var e=a(i(process.argv)),r=e.scriptName("nce").usage("Usage: $0 [options]").example("$0","Check package-lock.json file in current working directory.").strict().options({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."},enableEngineStrict:{boolean:!0,default:!1,description:"Enable engine strict."}}).help("help").version().wrap(e.terminalWidth()).epilog("\xA9 2022 Samuel MARLHENS").argv;export{r as cli};
package/dist/nce.d.ts CHANGED
@@ -7,6 +7,7 @@ type CLIArgs = {
7
7
  quiet?: boolean;
8
8
  verbose?: boolean;
9
9
  debug?: boolean;
10
+ enableEngineStrict?: boolean;
10
11
  engines?: string[];
11
12
  _?: Array<string | number>;
12
13
  $0?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smarlhens/npm-check-engines",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Node.JS engines constraint checker written in TypeScript.",
5
5
  "keywords": [
6
6
  "node",
@@ -67,36 +67,36 @@
67
67
  "listr2": "5.0.7",
68
68
  "lodash-es": "4.17.21",
69
69
  "semver": "7.3.8",
70
- "sort-package-json": "2.4.0",
70
+ "sort-package-json": "2.4.1",
71
71
  "update-notifier": "6.0.2",
72
- "yargs": "17.6.2"
72
+ "yargs": "17.7.0"
73
73
  },
74
74
  "devDependencies": {
75
- "@commitlint/cli": "17.4.2",
76
- "@commitlint/config-conventional": "17.4.2",
77
- "@swc/core": "1.3.32",
75
+ "@commitlint/cli": "17.4.3",
76
+ "@commitlint/config-conventional": "17.4.3",
77
+ "@swc/core": "1.3.35",
78
78
  "@trivago/prettier-plugin-sort-imports": "4.0.0",
79
79
  "@types/cli-table": "0.3.1",
80
80
  "@types/debug": "4.1.7",
81
81
  "@types/lodash-es": "4.17.6",
82
- "@types/node": "18.11.18",
82
+ "@types/node": "18.13.0",
83
83
  "@types/semver": "7.3.13",
84
- "@types/update-notifier": "6.0.1",
84
+ "@types/update-notifier": "6.0.2",
85
85
  "@types/yargs": "17.0.22",
86
- "@vitest/coverage-c8": "0.28.4",
87
- "execa": "6.1.0",
86
+ "@vitest/coverage-c8": "0.28.5",
87
+ "execa": "7.0.0",
88
88
  "husky": "8.0.3",
89
- "lint-staged": "13.1.0",
90
- "prettier": "2.8.3",
89
+ "lint-staged": "13.1.2",
90
+ "prettier": "2.8.4",
91
91
  "rimraf": "4.1.2",
92
92
  "ts-node": "10.9.1",
93
93
  "tslib": "2.5.0",
94
- "tsup": "6.5.0",
94
+ "tsup": "6.6.3",
95
95
  "typescript": "4.9.5",
96
- "vitest": "0.28.4"
96
+ "vitest": "0.28.5"
97
97
  },
98
98
  "engines": {
99
- "node": "^16.13.0 || ^18.0.0",
99
+ "node": "^16.14.0 || ^18.0.0",
100
100
  "npm": ">=8.0.0"
101
101
  }
102
102
  }