@conterra/vuln-scan 1.0.13 → 1.0.14

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/dist/vuln-scan.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Ni=Object.create;var tr=Object.defineProperty;var _i=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Bi=Object.getPrototypeOf,Ui=Object.prototype.hasOwnProperty;var y=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var qi=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $i(e))!Ui.call(t,i)&&i!==r&&tr(t,i,{get:()=>e[i],enumerable:!(n=_i(e,i))||n.enumerable});return t};var Te=(t,e,r)=>(r=t!=null?Ni(Bi(t)):{},qi(e||!t||!t.__esModule?tr(r,"default",{value:t,enumerable:!0}):r,t));var O=y(Tt=>{"use strict";Tt.fromCallback=function(t){return Object.defineProperty(function(...e){if(typeof e[e.length-1]=="function")t.apply(this,e);else return new Promise((r,n)=>{e.push((i,o)=>i!=null?n(i):r(o)),t.apply(this,e)})},"name",{value:t.name})};Tt.fromPromise=function(t){return Object.defineProperty(function(...e){let r=e[e.length-1];if(typeof r!="function")return t.apply(this,e);e.pop(),t.apply(this,e).then(n=>r(null,n),r)},"name",{value:t.name})}});var Cr=y((Yc,Or)=>{var te=require("constants"),co=process.cwd,et=null,lo=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return et||(et=co.call(process)),et};try{process.cwd()}catch{}typeof process.chdir=="function"&&(Vt=process.chdir,process.chdir=function(t){et=null,Vt.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,Vt));var Vt;Or.exports=uo;function uo(t){te.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(t),t.lutimes||r(t),t.chown=o(t.chown),t.fchown=o(t.fchown),t.lchown=o(t.lchown),t.chmod=n(t.chmod),t.fchmod=n(t.fchmod),t.lchmod=n(t.lchmod),t.chownSync=s(t.chownSync),t.fchownSync=s(t.fchownSync),t.lchownSync=s(t.lchownSync),t.chmodSync=i(t.chmodSync),t.fchmodSync=i(t.fchmodSync),t.lchmodSync=i(t.lchmodSync),t.stat=a(t.stat),t.fstat=a(t.fstat),t.lstat=a(t.lstat),t.statSync=m(t.statSync),t.fstatSync=m(t.fstatSync),t.lstatSync=m(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(c,p,l){l&&process.nextTick(l)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(c,p,l,u){u&&process.nextTick(u)},t.lchownSync=function(){}),lo==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:(function(c){function p(l,u,f){var g=Date.now(),v=0;c(l,u,function P($){if($&&($.code==="EACCES"||$.code==="EPERM"||$.code==="EBUSY")&&Date.now()-g<6e4){setTimeout(function(){t.stat(u,function(I,we){I&&I.code==="ENOENT"?c(l,u,P):f($)})},v),v<100&&(v+=10);return}f&&f($)})}return Object.setPrototypeOf&&Object.setPrototypeOf(p,c),p})(t.rename)),t.read=typeof t.read!="function"?t.read:(function(c){function p(l,u,f,g,v,P){var $;if(P&&typeof P=="function"){var I=0;$=function(we,Zt,er){if(we&&we.code==="EAGAIN"&&I<10)return I++,c.call(t,l,u,f,g,v,$);P.apply(this,arguments)}}return c.call(t,l,u,f,g,v,$)}return Object.setPrototypeOf&&Object.setPrototypeOf(p,c),p})(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:(function(c){return function(p,l,u,f,g){for(var v=0;;)try{return c.call(t,p,l,u,f,g)}catch(P){if(P.code==="EAGAIN"&&v<10){v++;continue}throw P}}})(t.readSync);function e(c){c.lchmod=function(p,l,u){c.open(p,te.O_WRONLY|te.O_SYMLINK,l,function(f,g){if(f){u&&u(f);return}c.fchmod(g,l,function(v){c.close(g,function(P){u&&u(v||P)})})})},c.lchmodSync=function(p,l){var u=c.openSync(p,te.O_WRONLY|te.O_SYMLINK,l),f=!0,g;try{g=c.fchmodSync(u,l),f=!1}finally{if(f)try{c.closeSync(u)}catch{}else c.closeSync(u)}return g}}function r(c){te.hasOwnProperty("O_SYMLINK")&&c.futimes?(c.lutimes=function(p,l,u,f){c.open(p,te.O_SYMLINK,function(g,v){if(g){f&&f(g);return}c.futimes(v,l,u,function(P){c.close(v,function($){f&&f(P||$)})})})},c.lutimesSync=function(p,l,u){var f=c.openSync(p,te.O_SYMLINK),g,v=!0;try{g=c.futimesSync(f,l,u),v=!1}finally{if(v)try{c.closeSync(f)}catch{}else c.closeSync(f)}return g}):c.futimes&&(c.lutimes=function(p,l,u,f){f&&process.nextTick(f)},c.lutimesSync=function(){})}function n(c){return c&&function(p,l,u){return c.call(t,p,l,function(f){d(f)&&(f=null),u&&u.apply(this,arguments)})}}function i(c){return c&&function(p,l){try{return c.call(t,p,l)}catch(u){if(!d(u))throw u}}}function o(c){return c&&function(p,l,u,f){return c.call(t,p,l,u,function(g){d(g)&&(g=null),f&&f.apply(this,arguments)})}}function s(c){return c&&function(p,l,u){try{return c.call(t,p,l,u)}catch(f){if(!d(f))throw f}}}function a(c){return c&&function(p,l,u){typeof l=="function"&&(u=l,l=null);function f(g,v){v&&(v.uid<0&&(v.uid+=4294967296),v.gid<0&&(v.gid+=4294967296)),u&&u.apply(this,arguments)}return l?c.call(t,p,l,f):c.call(t,p,f)}}function m(c){return c&&function(p,l){var u=l?c.call(t,p,l):c.call(t,p);return u&&(u.uid<0&&(u.uid+=4294967296),u.gid<0&&(u.gid+=4294967296)),u}}function d(c){if(!c||c.code==="ENOSYS")return!0;var p=!process.getuid||process.getuid()!==0;return!!(p&&(c.code==="EINVAL"||c.code==="EPERM"))}}});var Tr=y((Zc,Fr)=>{var kr=require("stream").Stream;Fr.exports=po;function po(t){return{ReadStream:e,WriteStream:r};function e(n,i){if(!(this instanceof e))return new e(n,i);kr.call(this);var o=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,i=i||{};for(var s=Object.keys(i),a=0,m=s.length;a<m;a++){var d=s[a];this[d]=i[d]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){o._read()});return}t.open(this.path,this.flags,this.mode,function(c,p){if(c){o.emit("error",c),o.readable=!1;return}o.fd=p,o.emit("open",p),o._read()})}function r(n,i){if(!(this instanceof r))return new r(n,i);kr.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,i=i||{};for(var o=Object.keys(i),s=0,a=o.length;s<a;s++){var m=o[s];this[m]=i[m]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=t.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Ar=y((el,Vr)=>{"use strict";Vr.exports=fo;var mo=Object.getPrototypeOf||function(t){return t.__proto__};function fo(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:mo(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var he=y((tl,Rt)=>{var j=require("fs"),ho=Cr(),yo=Tr(),go=Ar(),tt=require("util"),V,nt;typeof Symbol=="function"&&typeof Symbol.for=="function"?(V=Symbol.for("graceful-fs.queue"),nt=Symbol.for("graceful-fs.previous")):(V="___graceful-fs.queue",nt="___graceful-fs.previous");function So(){}function Mr(t,e){Object.defineProperty(t,V,{get:function(){return e}})}var ae=So;tt.debuglog?ae=tt.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(ae=function(){var t=tt.format.apply(tt,arguments);t="GFS4: "+t.split(/\n/).join(`
3
- GFS4: `),console.error(t)});j[V]||(Ir=global[V]||[],Mr(j,Ir),j.close=(function(t){function e(r,n){return t.call(j,r,function(i){i||Rr(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,nt,{value:t}),e})(j.close),j.closeSync=(function(t){function e(r){t.apply(j,arguments),Rr()}return Object.defineProperty(e,nt,{value:t}),e})(j.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ae(j[V]),require("assert").equal(j[V].length,0)}));var Ir;global[V]||Mr(global,j[V]);Rt.exports=At(go(j));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!j.__patched&&(Rt.exports=At(j),j.__patched=!0);function At(t){ho(t),t.gracefulify=At,t.createReadStream=Zt,t.createWriteStream=er;var e=t.readFile;t.readFile=r;function r(h,w,S){return typeof w=="function"&&(S=w,w=null),k(h,w,S);function k(F,E,L,D){return e(F,E,function(b){b&&(b.code==="EMFILE"||b.code==="ENFILE")?de([k,[F,E,L],b,D||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var n=t.writeFile;t.writeFile=i;function i(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(E,L,D,b,T){return n(E,L,D,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[E,L,D,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(E,L,D,b,T){return o(E,L,D,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[E,L,D,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var a=t.copyFile;a&&(t.copyFile=m);function m(h,w,S,k){return typeof S=="function"&&(k=S,S=0),F(h,w,S,k);function F(E,L,D,b,T){return a(E,L,D,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[E,L,D,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var d=t.readdir;t.readdir=p;var c=/^v[0-5]\./;function p(h,w,S){typeof w=="function"&&(S=w,w=null);var k=c.test(process.version)?function(L,D,b,T){return d(L,F(L,D,b,T))}:function(L,D,b,T){return d(L,D,F(L,D,b,T))};return k(h,w,S);function F(E,L,D,b){return function(T,x){T&&(T.code==="EMFILE"||T.code==="ENFILE")?de([k,[E,L,D],T,b||Date.now(),Date.now()]):(x&&x.sort&&x.sort(),typeof D=="function"&&D.call(this,T,x))}}}if(process.version.substr(0,4)==="v0.8"){var l=yo(t);P=l.ReadStream,I=l.WriteStream}var u=t.ReadStream;u&&(P.prototype=Object.create(u.prototype),P.prototype.open=$);var f=t.WriteStream;f&&(I.prototype=Object.create(f.prototype),I.prototype.open=we),Object.defineProperty(t,"ReadStream",{get:function(){return P},set:function(h){P=h},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return I},set:function(h){I=h},enumerable:!0,configurable:!0});var g=P;Object.defineProperty(t,"FileReadStream",{get:function(){return g},set:function(h){g=h},enumerable:!0,configurable:!0});var v=I;Object.defineProperty(t,"FileWriteStream",{get:function(){return v},set:function(h){v=h},enumerable:!0,configurable:!0});function P(h,w){return this instanceof P?(u.apply(this,arguments),this):P.apply(Object.create(P.prototype),arguments)}function $(){var h=this;St(h.path,h.flags,h.mode,function(w,S){w?(h.autoClose&&h.destroy(),h.emit("error",w)):(h.fd=S,h.emit("open",S),h.read())})}function I(h,w){return this instanceof I?(f.apply(this,arguments),this):I.apply(Object.create(I.prototype),arguments)}function we(){var h=this;St(h.path,h.flags,h.mode,function(w,S){w?(h.destroy(),h.emit("error",w)):(h.fd=S,h.emit("open",S))})}function Zt(h,w){return new t.ReadStream(h,w)}function er(h,w){return new t.WriteStream(h,w)}var Mi=t.open;t.open=St;function St(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(E,L,D,b,T){return Mi(E,L,D,function(x,Oa){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[E,L,D,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}return t}function de(t){ae("ENQUEUE",t[0].name,t[1]),j[V].push(t),It()}var rt;function Rr(){for(var t=Date.now(),e=0;e<j[V].length;++e)j[V][e].length>2&&(j[V][e][3]=t,j[V][e][4]=t);It()}function It(){if(clearTimeout(rt),rt=void 0,j[V].length!==0){var t=j[V].shift(),e=t[0],r=t[1],n=t[2],i=t[3],o=t[4];if(i===void 0)ae("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-i>=6e4){ae("TIMEOUT",e.name,r);var s=r.pop();typeof s=="function"&&s.call(null,n)}else{var a=Date.now()-o,m=Math.max(o-i,1),d=Math.min(m*1.2,100);a>=d?(ae("RETRY",e.name,r),e.apply(null,r.concat([i]))):j[V].push(t)}rt===void 0&&(rt=setTimeout(It,0))}}});var M=y(z=>{"use strict";var Nr=O().fromCallback,R=he(),vo=["access","appendFile","chmod","chown","close","copyFile","cp","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","glob","lchmod","lchown","lutimes","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","statfs","symlink","truncate","unlink","utimes","writeFile"].filter(t=>typeof R[t]=="function");Object.assign(z,R);vo.forEach(t=>{z[t]=Nr(R[t])});z.exists=function(t,e){return typeof e=="function"?R.exists(t,e):new Promise(r=>R.exists(t,r))};z.read=function(t,e,r,n,i,o){return typeof o=="function"?R.read(t,e,r,n,i,o):new Promise((s,a)=>{R.read(t,e,r,n,i,(m,d,c)=>{if(m)return a(m);s({bytesRead:d,buffer:c})})})};z.write=function(t,e,...r){return typeof r[r.length-1]=="function"?R.write(t,e,...r):new Promise((n,i)=>{R.write(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesWritten:s,buffer:a})})})};z.readv=function(t,e,...r){return typeof r[r.length-1]=="function"?R.readv(t,e,...r):new Promise((n,i)=>{R.readv(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesRead:s,buffers:a})})})};z.writev=function(t,e,...r){return typeof r[r.length-1]=="function"?R.writev(t,e,...r):new Promise((n,i)=>{R.writev(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesWritten:s,buffers:a})})})};typeof R.realpath.native=="function"?z.realpath.native=Nr(R.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var $r=y((nl,_r)=>{"use strict";var wo=require("path");_r.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(wo.parse(e).root,""))){let n=new Error(`Path contains invalid characters: ${e}`);throw n.code="EINVAL",n}}});var Xr=y((il,Mt)=>{"use strict";var Br=M(),{checkPath:Ur}=$r(),qr=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};Mt.exports.makeDir=async(t,e)=>(Ur(t),Br.mkdir(t,{mode:qr(e),recursive:!0}));Mt.exports.makeDirSync=(t,e)=>(Ur(t),Br.mkdirSync(t,{mode:qr(e),recursive:!0}))});var q=y((ol,Jr)=>{"use strict";var bo=O().fromPromise,{makeDir:xo,makeDirSync:Nt}=Xr(),_t=bo(xo);Jr.exports={mkdirs:_t,mkdirsSync:Nt,mkdirp:_t,mkdirpSync:Nt,ensureDir:_t,ensureDirSync:Nt}});var re=y((sl,Gr)=>{"use strict";var Po=O().fromPromise,Wr=M();function Lo(t){return Wr.access(t).then(()=>!0).catch(()=>!1)}Gr.exports={pathExists:Po(Lo),pathExistsSync:Wr.existsSync}});var $t=y((al,Hr)=>{"use strict";var ye=M(),jo=O().fromPromise;async function Do(t,e,r){let n=await ye.open(t,"r+"),i=null;try{await ye.futimes(n,e,r)}finally{try{await ye.close(n)}catch(o){i=o}}if(i)throw i}function Eo(t,e,r){let n=ye.openSync(t,"r+");return ye.futimesSync(n,e,r),ye.closeSync(n)}Hr.exports={utimesMillis:jo(Do),utimesMillisSync:Eo}});var ce=y((cl,Yr)=>{"use strict";var ge=M(),C=require("path"),Kr=O().fromPromise;function Oo(t,e,r){let n=r.dereference?i=>ge.stat(i,{bigint:!0}):i=>ge.lstat(i,{bigint:!0});return Promise.all([n(t),n(e).catch(i=>{if(i.code==="ENOENT")return null;throw i})]).then(([i,o])=>({srcStat:i,destStat:o}))}function Co(t,e,r){let n,i=r.dereference?s=>ge.statSync(s,{bigint:!0}):s=>ge.lstatSync(s,{bigint:!0}),o=i(t);try{n=i(e)}catch(s){if(s.code==="ENOENT")return{srcStat:o,destStat:null};throw s}return{srcStat:o,destStat:n}}async function ko(t,e,r,n){let{srcStat:i,destStat:o}=await Oo(t,e,n);if(o){if(Le(i,o)){let s=C.basename(t),a=C.basename(e);if(r==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:i,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(i.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!i.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(i.isDirectory()&&Bt(t,e))throw new Error(it(t,e,r));return{srcStat:i,destStat:o}}function Fo(t,e,r,n){let{srcStat:i,destStat:o}=Co(t,e,n);if(o){if(Le(i,o)){let s=C.basename(t),a=C.basename(e);if(r==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:i,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(i.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!i.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(i.isDirectory()&&Bt(t,e))throw new Error(it(t,e,r));return{srcStat:i,destStat:o}}async function Qr(t,e,r,n){let i=C.resolve(C.dirname(t)),o=C.resolve(C.dirname(r));if(o===i||o===C.parse(o).root)return;let s;try{s=await ge.stat(o,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Le(e,s))throw new Error(it(t,r,n));return Qr(t,e,o,n)}function zr(t,e,r,n){let i=C.resolve(C.dirname(t)),o=C.resolve(C.dirname(r));if(o===i||o===C.parse(o).root)return;let s;try{s=ge.statSync(o,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Le(e,s))throw new Error(it(t,r,n));return zr(t,e,o,n)}function Le(t,e){return e.ino!==void 0&&e.dev!==void 0&&e.ino===t.ino&&e.dev===t.dev}function Bt(t,e){let r=C.resolve(t).split(C.sep).filter(i=>i),n=C.resolve(e).split(C.sep).filter(i=>i);return r.every((i,o)=>n[o]===i)}function it(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}Yr.exports={checkPaths:Kr(ko),checkPathsSync:Fo,checkParentPaths:Kr(Qr),checkParentPathsSync:zr,isSrcSubdir:Bt,areIdentical:Le}});var en=y((ll,Zr)=>{"use strict";async function To(t,e){let r=[];for await(let n of t)r.push(e(n).then(()=>null,i=>i??new Error("unknown error")));await Promise.all(r.map(n=>n.then(i=>{if(i!==null)throw i})))}Zr.exports={asyncIteratorConcurrentProcess:To}});var sn=y((ul,on)=>{"use strict";var A=M(),je=require("path"),{mkdirs:Vo}=q(),{pathExists:Ao}=re(),{utimesMillis:Io}=$t(),De=ce(),{asyncIteratorConcurrentProcess:Ro}=en();async function Mo(t,e,r={}){typeof r=="function"&&(r={filter:r}),r.clobber="clobber"in r?!!r.clobber:!0,r.overwrite="overwrite"in r?!!r.overwrite:r.clobber,r.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
2
+ "use strict";var Ni=Object.create;var tr=Object.defineProperty;var _i=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Bi=Object.getPrototypeOf,Ui=Object.prototype.hasOwnProperty;var y=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}};var qi=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of $i(e))!Ui.call(t,i)&&i!==r&&tr(t,i,{get:()=>e[i],enumerable:!(n=_i(e,i))||n.enumerable});return t};var Te=(t,e,r)=>(r=t!=null?Ni(Bi(t)):{},qi(e||!t||!t.__esModule?tr(r,"default",{value:t,enumerable:!0}):r,t));var O=y(Tt=>{"use strict";Tt.fromCallback=function(t){return Object.defineProperty(function(...e){if(typeof e[e.length-1]=="function")t.apply(this,e);else return new Promise((r,n)=>{e.push((i,o)=>i!=null?n(i):r(o)),t.apply(this,e)})},"name",{value:t.name})};Tt.fromPromise=function(t){return Object.defineProperty(function(...e){let r=e[e.length-1];if(typeof r!="function")return t.apply(this,e);e.pop(),t.apply(this,e).then(n=>r(null,n),r)},"name",{value:t.name})}});var Cr=y((Yc,Or)=>{var te=require("constants"),co=process.cwd,et=null,lo=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return et||(et=co.call(process)),et};try{process.cwd()}catch{}typeof process.chdir=="function"&&(Vt=process.chdir,process.chdir=function(t){et=null,Vt.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,Vt));var Vt;Or.exports=uo;function uo(t){te.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(t),t.lutimes||r(t),t.chown=o(t.chown),t.fchown=o(t.fchown),t.lchown=o(t.lchown),t.chmod=n(t.chmod),t.fchmod=n(t.fchmod),t.lchmod=n(t.lchmod),t.chownSync=s(t.chownSync),t.fchownSync=s(t.fchownSync),t.lchownSync=s(t.lchownSync),t.chmodSync=i(t.chmodSync),t.fchmodSync=i(t.fchmodSync),t.lchmodSync=i(t.lchmodSync),t.stat=a(t.stat),t.fstat=a(t.fstat),t.lstat=a(t.lstat),t.statSync=f(t.statSync),t.fstatSync=f(t.fstatSync),t.lstatSync=f(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(c,p,l){l&&process.nextTick(l)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(c,p,l,u){u&&process.nextTick(u)},t.lchownSync=function(){}),lo==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:(function(c){function p(l,u,m){var g=Date.now(),v=0;c(l,u,function P($){if($&&($.code==="EACCES"||$.code==="EPERM"||$.code==="EBUSY")&&Date.now()-g<6e4){setTimeout(function(){t.stat(u,function(I,we){I&&I.code==="ENOENT"?c(l,u,P):m($)})},v),v<100&&(v+=10);return}m&&m($)})}return Object.setPrototypeOf&&Object.setPrototypeOf(p,c),p})(t.rename)),t.read=typeof t.read!="function"?t.read:(function(c){function p(l,u,m,g,v,P){var $;if(P&&typeof P=="function"){var I=0;$=function(we,Zt,er){if(we&&we.code==="EAGAIN"&&I<10)return I++,c.call(t,l,u,m,g,v,$);P.apply(this,arguments)}}return c.call(t,l,u,m,g,v,$)}return Object.setPrototypeOf&&Object.setPrototypeOf(p,c),p})(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:(function(c){return function(p,l,u,m,g){for(var v=0;;)try{return c.call(t,p,l,u,m,g)}catch(P){if(P.code==="EAGAIN"&&v<10){v++;continue}throw P}}})(t.readSync);function e(c){c.lchmod=function(p,l,u){c.open(p,te.O_WRONLY|te.O_SYMLINK,l,function(m,g){if(m){u&&u(m);return}c.fchmod(g,l,function(v){c.close(g,function(P){u&&u(v||P)})})})},c.lchmodSync=function(p,l){var u=c.openSync(p,te.O_WRONLY|te.O_SYMLINK,l),m=!0,g;try{g=c.fchmodSync(u,l),m=!1}finally{if(m)try{c.closeSync(u)}catch{}else c.closeSync(u)}return g}}function r(c){te.hasOwnProperty("O_SYMLINK")&&c.futimes?(c.lutimes=function(p,l,u,m){c.open(p,te.O_SYMLINK,function(g,v){if(g){m&&m(g);return}c.futimes(v,l,u,function(P){c.close(v,function($){m&&m(P||$)})})})},c.lutimesSync=function(p,l,u){var m=c.openSync(p,te.O_SYMLINK),g,v=!0;try{g=c.futimesSync(m,l,u),v=!1}finally{if(v)try{c.closeSync(m)}catch{}else c.closeSync(m)}return g}):c.futimes&&(c.lutimes=function(p,l,u,m){m&&process.nextTick(m)},c.lutimesSync=function(){})}function n(c){return c&&function(p,l,u){return c.call(t,p,l,function(m){d(m)&&(m=null),u&&u.apply(this,arguments)})}}function i(c){return c&&function(p,l){try{return c.call(t,p,l)}catch(u){if(!d(u))throw u}}}function o(c){return c&&function(p,l,u,m){return c.call(t,p,l,u,function(g){d(g)&&(g=null),m&&m.apply(this,arguments)})}}function s(c){return c&&function(p,l,u){try{return c.call(t,p,l,u)}catch(m){if(!d(m))throw m}}}function a(c){return c&&function(p,l,u){typeof l=="function"&&(u=l,l=null);function m(g,v){v&&(v.uid<0&&(v.uid+=4294967296),v.gid<0&&(v.gid+=4294967296)),u&&u.apply(this,arguments)}return l?c.call(t,p,l,m):c.call(t,p,m)}}function f(c){return c&&function(p,l){var u=l?c.call(t,p,l):c.call(t,p);return u&&(u.uid<0&&(u.uid+=4294967296),u.gid<0&&(u.gid+=4294967296)),u}}function d(c){if(!c||c.code==="ENOSYS")return!0;var p=!process.getuid||process.getuid()!==0;return!!(p&&(c.code==="EINVAL"||c.code==="EPERM"))}}});var Tr=y((Zc,Fr)=>{var kr=require("stream").Stream;Fr.exports=po;function po(t){return{ReadStream:e,WriteStream:r};function e(n,i){if(!(this instanceof e))return new e(n,i);kr.call(this);var o=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,i=i||{};for(var s=Object.keys(i),a=0,f=s.length;a<f;a++){var d=s[a];this[d]=i[d]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.end===void 0)this.end=1/0;else if(typeof this.end!="number")throw TypeError("end must be a Number");if(this.start>this.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){o._read()});return}t.open(this.path,this.flags,this.mode,function(c,p){if(c){o.emit("error",c),o.readable=!1;return}o.fd=p,o.emit("open",p),o._read()})}function r(n,i){if(!(this instanceof r))return new r(n,i);kr.call(this),this.path=n,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,i=i||{};for(var o=Object.keys(i),s=0,a=o.length;s<a;s++){var f=o[s];this[f]=i[f]}if(this.start!==void 0){if(typeof this.start!="number")throw TypeError("start must be a Number");if(this.start<0)throw new Error("start must be >= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=t.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var Ar=y((el,Vr)=>{"use strict";Vr.exports=mo;var fo=Object.getPrototypeOf||function(t){return t.__proto__};function mo(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:fo(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var he=y((tl,Rt)=>{var j=require("fs"),ho=Cr(),yo=Tr(),go=Ar(),tt=require("util"),V,nt;typeof Symbol=="function"&&typeof Symbol.for=="function"?(V=Symbol.for("graceful-fs.queue"),nt=Symbol.for("graceful-fs.previous")):(V="___graceful-fs.queue",nt="___graceful-fs.previous");function So(){}function Mr(t,e){Object.defineProperty(t,V,{get:function(){return e}})}var ae=So;tt.debuglog?ae=tt.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(ae=function(){var t=tt.format.apply(tt,arguments);t="GFS4: "+t.split(/\n/).join(`
3
+ GFS4: `),console.error(t)});j[V]||(Ir=global[V]||[],Mr(j,Ir),j.close=(function(t){function e(r,n){return t.call(j,r,function(i){i||Rr(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,nt,{value:t}),e})(j.close),j.closeSync=(function(t){function e(r){t.apply(j,arguments),Rr()}return Object.defineProperty(e,nt,{value:t}),e})(j.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ae(j[V]),require("assert").equal(j[V].length,0)}));var Ir;global[V]||Mr(global,j[V]);Rt.exports=At(go(j));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!j.__patched&&(Rt.exports=At(j),j.__patched=!0);function At(t){ho(t),t.gracefulify=At,t.createReadStream=Zt,t.createWriteStream=er;var e=t.readFile;t.readFile=r;function r(h,w,S){return typeof w=="function"&&(S=w,w=null),k(h,w,S);function k(F,D,L,E){return e(F,D,function(b){b&&(b.code==="EMFILE"||b.code==="ENFILE")?de([k,[F,D,L],b,E||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var n=t.writeFile;t.writeFile=i;function i(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(D,L,E,b,T){return n(D,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[D,L,E,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(D,L,E,b,T){return o(D,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[D,L,E,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var a=t.copyFile;a&&(t.copyFile=f);function f(h,w,S,k){return typeof S=="function"&&(k=S,S=0),F(h,w,S,k);function F(D,L,E,b,T){return a(D,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[D,L,E,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var d=t.readdir;t.readdir=p;var c=/^v[0-5]\./;function p(h,w,S){typeof w=="function"&&(S=w,w=null);var k=c.test(process.version)?function(L,E,b,T){return d(L,F(L,E,b,T))}:function(L,E,b,T){return d(L,E,F(L,E,b,T))};return k(h,w,S);function F(D,L,E,b){return function(T,x){T&&(T.code==="EMFILE"||T.code==="ENFILE")?de([k,[D,L,E],T,b||Date.now(),Date.now()]):(x&&x.sort&&x.sort(),typeof E=="function"&&E.call(this,T,x))}}}if(process.version.substr(0,4)==="v0.8"){var l=yo(t);P=l.ReadStream,I=l.WriteStream}var u=t.ReadStream;u&&(P.prototype=Object.create(u.prototype),P.prototype.open=$);var m=t.WriteStream;m&&(I.prototype=Object.create(m.prototype),I.prototype.open=we),Object.defineProperty(t,"ReadStream",{get:function(){return P},set:function(h){P=h},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return I},set:function(h){I=h},enumerable:!0,configurable:!0});var g=P;Object.defineProperty(t,"FileReadStream",{get:function(){return g},set:function(h){g=h},enumerable:!0,configurable:!0});var v=I;Object.defineProperty(t,"FileWriteStream",{get:function(){return v},set:function(h){v=h},enumerable:!0,configurable:!0});function P(h,w){return this instanceof P?(u.apply(this,arguments),this):P.apply(Object.create(P.prototype),arguments)}function $(){var h=this;St(h.path,h.flags,h.mode,function(w,S){w?(h.autoClose&&h.destroy(),h.emit("error",w)):(h.fd=S,h.emit("open",S),h.read())})}function I(h,w){return this instanceof I?(m.apply(this,arguments),this):I.apply(Object.create(I.prototype),arguments)}function we(){var h=this;St(h.path,h.flags,h.mode,function(w,S){w?(h.destroy(),h.emit("error",w)):(h.fd=S,h.emit("open",S))})}function Zt(h,w){return new t.ReadStream(h,w)}function er(h,w){return new t.WriteStream(h,w)}var Mi=t.open;t.open=St;function St(h,w,S,k){return typeof S=="function"&&(k=S,S=null),F(h,w,S,k);function F(D,L,E,b,T){return Mi(D,L,E,function(x,Oa){x&&(x.code==="EMFILE"||x.code==="ENFILE")?de([F,[D,L,E,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}return t}function de(t){ae("ENQUEUE",t[0].name,t[1]),j[V].push(t),It()}var rt;function Rr(){for(var t=Date.now(),e=0;e<j[V].length;++e)j[V][e].length>2&&(j[V][e][3]=t,j[V][e][4]=t);It()}function It(){if(clearTimeout(rt),rt=void 0,j[V].length!==0){var t=j[V].shift(),e=t[0],r=t[1],n=t[2],i=t[3],o=t[4];if(i===void 0)ae("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-i>=6e4){ae("TIMEOUT",e.name,r);var s=r.pop();typeof s=="function"&&s.call(null,n)}else{var a=Date.now()-o,f=Math.max(o-i,1),d=Math.min(f*1.2,100);a>=d?(ae("RETRY",e.name,r),e.apply(null,r.concat([i]))):j[V].push(t)}rt===void 0&&(rt=setTimeout(It,0))}}});var M=y(z=>{"use strict";var Nr=O().fromCallback,R=he(),vo=["access","appendFile","chmod","chown","close","copyFile","cp","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","glob","lchmod","lchown","lutimes","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","statfs","symlink","truncate","unlink","utimes","writeFile"].filter(t=>typeof R[t]=="function");Object.assign(z,R);vo.forEach(t=>{z[t]=Nr(R[t])});z.exists=function(t,e){return typeof e=="function"?R.exists(t,e):new Promise(r=>R.exists(t,r))};z.read=function(t,e,r,n,i,o){return typeof o=="function"?R.read(t,e,r,n,i,o):new Promise((s,a)=>{R.read(t,e,r,n,i,(f,d,c)=>{if(f)return a(f);s({bytesRead:d,buffer:c})})})};z.write=function(t,e,...r){return typeof r[r.length-1]=="function"?R.write(t,e,...r):new Promise((n,i)=>{R.write(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesWritten:s,buffer:a})})})};z.readv=function(t,e,...r){return typeof r[r.length-1]=="function"?R.readv(t,e,...r):new Promise((n,i)=>{R.readv(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesRead:s,buffers:a})})})};z.writev=function(t,e,...r){return typeof r[r.length-1]=="function"?R.writev(t,e,...r):new Promise((n,i)=>{R.writev(t,e,...r,(o,s,a)=>{if(o)return i(o);n({bytesWritten:s,buffers:a})})})};typeof R.realpath.native=="function"?z.realpath.native=Nr(R.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var $r=y((nl,_r)=>{"use strict";var wo=require("path");_r.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(wo.parse(e).root,""))){let n=new Error(`Path contains invalid characters: ${e}`);throw n.code="EINVAL",n}}});var Xr=y((il,Mt)=>{"use strict";var Br=M(),{checkPath:Ur}=$r(),qr=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};Mt.exports.makeDir=async(t,e)=>(Ur(t),Br.mkdir(t,{mode:qr(e),recursive:!0}));Mt.exports.makeDirSync=(t,e)=>(Ur(t),Br.mkdirSync(t,{mode:qr(e),recursive:!0}))});var q=y((ol,Jr)=>{"use strict";var bo=O().fromPromise,{makeDir:xo,makeDirSync:Nt}=Xr(),_t=bo(xo);Jr.exports={mkdirs:_t,mkdirsSync:Nt,mkdirp:_t,mkdirpSync:Nt,ensureDir:_t,ensureDirSync:Nt}});var re=y((sl,Gr)=>{"use strict";var Po=O().fromPromise,Wr=M();function Lo(t){return Wr.access(t).then(()=>!0).catch(()=>!1)}Gr.exports={pathExists:Po(Lo),pathExistsSync:Wr.existsSync}});var $t=y((al,Hr)=>{"use strict";var ye=M(),jo=O().fromPromise;async function Eo(t,e,r){let n=await ye.open(t,"r+"),i=null;try{await ye.futimes(n,e,r)}finally{try{await ye.close(n)}catch(o){i=o}}if(i)throw i}function Do(t,e,r){let n=ye.openSync(t,"r+");return ye.futimesSync(n,e,r),ye.closeSync(n)}Hr.exports={utimesMillis:jo(Eo),utimesMillisSync:Do}});var ce=y((cl,Yr)=>{"use strict";var ge=M(),C=require("path"),Kr=O().fromPromise;function Oo(t,e,r){let n=r.dereference?i=>ge.stat(i,{bigint:!0}):i=>ge.lstat(i,{bigint:!0});return Promise.all([n(t),n(e).catch(i=>{if(i.code==="ENOENT")return null;throw i})]).then(([i,o])=>({srcStat:i,destStat:o}))}function Co(t,e,r){let n,i=r.dereference?s=>ge.statSync(s,{bigint:!0}):s=>ge.lstatSync(s,{bigint:!0}),o=i(t);try{n=i(e)}catch(s){if(s.code==="ENOENT")return{srcStat:o,destStat:null};throw s}return{srcStat:o,destStat:n}}async function ko(t,e,r,n){let{srcStat:i,destStat:o}=await Oo(t,e,n);if(o){if(Le(i,o)){let s=C.basename(t),a=C.basename(e);if(r==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:i,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(i.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!i.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(i.isDirectory()&&Bt(t,e))throw new Error(it(t,e,r));return{srcStat:i,destStat:o}}function Fo(t,e,r,n){let{srcStat:i,destStat:o}=Co(t,e,n);if(o){if(Le(i,o)){let s=C.basename(t),a=C.basename(e);if(r==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:i,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(i.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!i.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(i.isDirectory()&&Bt(t,e))throw new Error(it(t,e,r));return{srcStat:i,destStat:o}}async function Qr(t,e,r,n){let i=C.resolve(C.dirname(t)),o=C.resolve(C.dirname(r));if(o===i||o===C.parse(o).root)return;let s;try{s=await ge.stat(o,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Le(e,s))throw new Error(it(t,r,n));return Qr(t,e,o,n)}function zr(t,e,r,n){let i=C.resolve(C.dirname(t)),o=C.resolve(C.dirname(r));if(o===i||o===C.parse(o).root)return;let s;try{s=ge.statSync(o,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Le(e,s))throw new Error(it(t,r,n));return zr(t,e,o,n)}function Le(t,e){return e.ino!==void 0&&e.dev!==void 0&&e.ino===t.ino&&e.dev===t.dev}function Bt(t,e){let r=C.resolve(t).split(C.sep).filter(i=>i),n=C.resolve(e).split(C.sep).filter(i=>i);return r.every((i,o)=>n[o]===i)}function it(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}Yr.exports={checkPaths:Kr(ko),checkPathsSync:Fo,checkParentPaths:Kr(Qr),checkParentPathsSync:zr,isSrcSubdir:Bt,areIdentical:Le}});var en=y((ll,Zr)=>{"use strict";async function To(t,e){let r=[];for await(let n of t)r.push(e(n).then(()=>null,i=>i??new Error("unknown error")));await Promise.all(r.map(n=>n.then(i=>{if(i!==null)throw i})))}Zr.exports={asyncIteratorConcurrentProcess:To}});var sn=y((ul,on)=>{"use strict";var A=M(),je=require("path"),{mkdirs:Vo}=q(),{pathExists:Ao}=re(),{utimesMillis:Io}=$t(),Ee=ce(),{asyncIteratorConcurrentProcess:Ro}=en();async function Mo(t,e,r={}){typeof r=="function"&&(r={filter:r}),r.clobber="clobber"in r?!!r.clobber:!0,r.overwrite="overwrite"in r?!!r.overwrite:r.clobber,r.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
4
4
 
5
- see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:n,destStat:i}=await De.checkPaths(t,e,"copy",r);if(await De.checkParentPaths(t,n,e,"copy"),!await rn(t,e,r))return;let s=je.dirname(e);await Ao(s)||await Vo(s),await nn(i,t,e,r)}async function rn(t,e,r){return r.filter?r.filter(t,e):!0}async function nn(t,e,r,n){let o=await(n.dereference?A.stat:A.lstat)(e);if(o.isDirectory())return Bo(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return No(o,t,e,r,n);if(o.isSymbolicLink())return Uo(t,e,r,n);throw o.isSocket()?new Error(`Cannot copy a socket file: ${e}`):o.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${e}`):new Error(`Unknown file: ${e}`)}async function No(t,e,r,n,i){if(!e)return tn(t,r,n,i);if(i.overwrite)return await A.unlink(n),tn(t,r,n,i);if(i.errorOnExist)throw new Error(`'${n}' already exists`)}async function tn(t,e,r,n){if(await A.copyFile(e,r),n.preserveTimestamps){_o(t.mode)&&await $o(r,t.mode);let i=await A.stat(e);await Io(r,i.atime,i.mtime)}return A.chmod(r,t.mode)}function _o(t){return(t&128)===0}function $o(t,e){return A.chmod(t,e|128)}async function Bo(t,e,r,n,i){e||await A.mkdir(n),await Ro(await A.opendir(r),async o=>{let s=je.join(r,o.name),a=je.join(n,o.name);if(await rn(s,a,i)){let{destStat:d}=await De.checkPaths(s,a,"copy",i);await nn(d,s,a,i)}}),e||await A.chmod(n,t.mode)}async function Uo(t,e,r,n){let i=await A.readlink(e);if(n.dereference&&(i=je.resolve(process.cwd(),i)),!t)return A.symlink(i,r);let o=null;try{o=await A.readlink(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return A.symlink(i,r);throw s}if(n.dereference&&(o=je.resolve(process.cwd(),o)),De.isSrcSubdir(i,o))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${o}'.`);if(De.isSrcSubdir(o,i))throw new Error(`Cannot overwrite '${o}' with '${i}'.`);return await A.unlink(r),A.symlink(i,r)}on.exports=Mo});var pn=y((pl,un)=>{"use strict";var N=he(),Ee=require("path"),qo=q().mkdirsSync,Xo=$t().utimesMillisSync,Oe=ce();function Jo(t,e,r){typeof r=="function"&&(r={filter:r}),r=r||{},r.clobber="clobber"in r?!!r.clobber:!0,r.overwrite="overwrite"in r?!!r.overwrite:r.clobber,r.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
5
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:n,destStat:i}=await Ee.checkPaths(t,e,"copy",r);if(await Ee.checkParentPaths(t,n,e,"copy"),!await rn(t,e,r))return;let s=je.dirname(e);await Ao(s)||await Vo(s),await nn(i,t,e,r)}async function rn(t,e,r){return r.filter?r.filter(t,e):!0}async function nn(t,e,r,n){let o=await(n.dereference?A.stat:A.lstat)(e);if(o.isDirectory())return Bo(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return No(o,t,e,r,n);if(o.isSymbolicLink())return Uo(t,e,r,n);throw o.isSocket()?new Error(`Cannot copy a socket file: ${e}`):o.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${e}`):new Error(`Unknown file: ${e}`)}async function No(t,e,r,n,i){if(!e)return tn(t,r,n,i);if(i.overwrite)return await A.unlink(n),tn(t,r,n,i);if(i.errorOnExist)throw new Error(`'${n}' already exists`)}async function tn(t,e,r,n){if(await A.copyFile(e,r),n.preserveTimestamps){_o(t.mode)&&await $o(r,t.mode);let i=await A.stat(e);await Io(r,i.atime,i.mtime)}return A.chmod(r,t.mode)}function _o(t){return(t&128)===0}function $o(t,e){return A.chmod(t,e|128)}async function Bo(t,e,r,n,i){e||await A.mkdir(n),await Ro(await A.opendir(r),async o=>{let s=je.join(r,o.name),a=je.join(n,o.name);if(await rn(s,a,i)){let{destStat:d}=await Ee.checkPaths(s,a,"copy",i);await nn(d,s,a,i)}}),e||await A.chmod(n,t.mode)}async function Uo(t,e,r,n){let i=await A.readlink(e);if(n.dereference&&(i=je.resolve(process.cwd(),i)),!t)return A.symlink(i,r);let o=null;try{o=await A.readlink(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return A.symlink(i,r);throw s}if(n.dereference&&(o=je.resolve(process.cwd(),o)),Ee.isSrcSubdir(i,o))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${o}'.`);if(Ee.isSrcSubdir(o,i))throw new Error(`Cannot overwrite '${o}' with '${i}'.`);return await A.unlink(r),A.symlink(i,r)}on.exports=Mo});var pn=y((pl,un)=>{"use strict";var N=he(),De=require("path"),qo=q().mkdirsSync,Xo=$t().utimesMillisSync,Oe=ce();function Jo(t,e,r){typeof r=="function"&&(r={filter:r}),r=r||{},r.clobber="clobber"in r?!!r.clobber:!0,r.overwrite="overwrite"in r?!!r.overwrite:r.clobber,r.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
6
6
 
7
- see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:n,destStat:i}=Oe.checkPathsSync(t,e,"copy",r);if(Oe.checkParentPathsSync(t,n,e,"copy"),r.filter&&!r.filter(t,e))return;let o=Ee.dirname(e);return N.existsSync(o)||qo(o),an(i,t,e,r)}function an(t,e,r,n){let o=(n.dereference?N.statSync:N.lstatSync)(e);if(o.isDirectory())return Yo(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Wo(o,t,e,r,n);if(o.isSymbolicLink())return ts(t,e,r,n);throw o.isSocket()?new Error(`Cannot copy a socket file: ${e}`):o.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${e}`):new Error(`Unknown file: ${e}`)}function Wo(t,e,r,n,i){return e?Go(t,r,n,i):cn(t,r,n,i)}function Go(t,e,r,n){if(n.overwrite)return N.unlinkSync(r),cn(t,e,r,n);if(n.errorOnExist)throw new Error(`'${r}' already exists`)}function cn(t,e,r,n){return N.copyFileSync(e,r),n.preserveTimestamps&&Ho(t.mode,e,r),Ut(r,t.mode)}function Ho(t,e,r){return Ko(t)&&Qo(r,t),zo(e,r)}function Ko(t){return(t&128)===0}function Qo(t,e){return Ut(t,e|128)}function Ut(t,e){return N.chmodSync(t,e)}function zo(t,e){let r=N.statSync(t);return Xo(e,r.atime,r.mtime)}function Yo(t,e,r,n,i){return e?ln(r,n,i):Zo(t.mode,r,n,i)}function Zo(t,e,r,n){return N.mkdirSync(r),ln(e,r,n),Ut(r,t)}function ln(t,e,r){let n=N.opendirSync(t);try{let i;for(;(i=n.readSync())!==null;)es(i.name,t,e,r)}finally{n.closeSync()}}function es(t,e,r,n){let i=Ee.join(e,t),o=Ee.join(r,t);if(n.filter&&!n.filter(i,o))return;let{destStat:s}=Oe.checkPathsSync(i,o,"copy",n);return an(s,i,o,n)}function ts(t,e,r,n){let i=N.readlinkSync(e);if(n.dereference&&(i=Ee.resolve(process.cwd(),i)),t){let o;try{o=N.readlinkSync(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return N.symlinkSync(i,r);throw s}if(n.dereference&&(o=Ee.resolve(process.cwd(),o)),Oe.isSrcSubdir(i,o))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${o}'.`);if(Oe.isSrcSubdir(o,i))throw new Error(`Cannot overwrite '${o}' with '${i}'.`);return rs(i,r)}else return N.symlinkSync(i,r)}function rs(t,e){return N.unlinkSync(e),N.symlinkSync(t,e)}un.exports=Jo});var ot=y((ml,mn)=>{"use strict";var ns=O().fromPromise;mn.exports={copy:ns(sn()),copySync:pn()}});var Ce=y((fl,dn)=>{"use strict";var fn=he(),is=O().fromCallback;function os(t,e){fn.rm(t,{recursive:!0,force:!0},e)}function ss(t){fn.rmSync(t,{recursive:!0,force:!0})}dn.exports={remove:is(os),removeSync:ss}});var xn=y((dl,bn)=>{"use strict";var as=O().fromPromise,gn=M(),Sn=require("path"),vn=q(),wn=Ce(),hn=as(async function(e){let r;try{r=await gn.readdir(e)}catch{return vn.mkdirs(e)}return Promise.all(r.map(n=>wn.remove(Sn.join(e,n))))});function yn(t){let e;try{e=gn.readdirSync(t)}catch{return vn.mkdirsSync(t)}e.forEach(r=>{r=Sn.join(t,r),wn.removeSync(r)})}bn.exports={emptyDirSync:yn,emptydirSync:yn,emptyDir:hn,emptydir:hn}});var Dn=y((hl,jn)=>{"use strict";var cs=O().fromPromise,Pn=require("path"),Y=M(),Ln=q();async function ls(t){let e;try{e=await Y.stat(t)}catch{}if(e&&e.isFile())return;let r=Pn.dirname(t),n=null;try{n=await Y.stat(r)}catch(i){if(i.code==="ENOENT"){await Ln.mkdirs(r),await Y.writeFile(t,"");return}else throw i}n.isDirectory()?await Y.writeFile(t,""):await Y.readdir(r)}function us(t){let e;try{e=Y.statSync(t)}catch{}if(e&&e.isFile())return;let r=Pn.dirname(t);try{Y.statSync(r).isDirectory()||Y.readdirSync(r)}catch(n){if(n&&n.code==="ENOENT")Ln.mkdirsSync(r);else throw n}Y.writeFileSync(t,"")}jn.exports={createFile:cs(ls),createFileSync:us}});var Fn=y((yl,kn)=>{"use strict";var ps=O().fromPromise,En=require("path"),ne=M(),On=q(),{pathExists:ms}=re(),{areIdentical:Cn}=ce();async function fs(t,e){let r;try{r=await ne.lstat(e)}catch{}let n;try{n=await ne.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&Cn(n,r))return;let i=En.dirname(e);await ms(i)||await On.mkdirs(i),await ne.link(t,e)}function ds(t,e){let r;try{r=ne.lstatSync(e)}catch{}try{let o=ne.lstatSync(t);if(r&&Cn(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let n=En.dirname(e);return ne.existsSync(n)||On.mkdirsSync(n),ne.linkSync(t,e)}kn.exports={createLink:ps(fs),createLinkSync:ds}});var Vn=y((gl,Tn)=>{"use strict";var ie=require("path"),ke=M(),{pathExists:hs}=re(),ys=O().fromPromise;async function gs(t,e){if(ie.isAbsolute(t)){try{await ke.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=ie.dirname(e),n=ie.join(r,t);if(await hs(n))return{toCwd:n,toDst:t};try{await ke.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:ie.relative(r,t)}}function Ss(t,e){if(ie.isAbsolute(t)){if(!ke.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=ie.dirname(e),n=ie.join(r,t);if(ke.existsSync(n))return{toCwd:n,toDst:t};if(!ke.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:ie.relative(r,t)}}Tn.exports={symlinkPaths:ys(gs),symlinkPathsSync:Ss}});var Rn=y((Sl,In)=>{"use strict";var An=M(),vs=O().fromPromise;async function ws(t,e){if(e)return e;let r;try{r=await An.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function bs(t,e){if(e)return e;let r;try{r=An.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}In.exports={symlinkType:vs(ws),symlinkTypeSync:bs}});var $n=y((vl,_n)=>{"use strict";var xs=O().fromPromise,Mn=require("path"),X=M(),{mkdirs:Ps,mkdirsSync:Ls}=q(),{symlinkPaths:js,symlinkPathsSync:Ds}=Vn(),{symlinkType:Es,symlinkTypeSync:Os}=Rn(),{pathExists:Cs}=re(),{areIdentical:Nn}=ce();async function ks(t,e,r){let n;try{n=await X.lstat(e)}catch{}if(n&&n.isSymbolicLink()){let[a,m]=await Promise.all([X.stat(t),X.stat(e)]);if(Nn(a,m))return}let i=await js(t,e);t=i.toDst;let o=await Es(i.toCwd,r),s=Mn.dirname(e);return await Cs(s)||await Ps(s),X.symlink(t,e,o)}function Fs(t,e,r){let n;try{n=X.lstatSync(e)}catch{}if(n&&n.isSymbolicLink()){let a=X.statSync(t),m=X.statSync(e);if(Nn(a,m))return}let i=Ds(t,e);t=i.toDst,r=Os(i.toCwd,r);let o=Mn.dirname(e);return X.existsSync(o)||Ls(o),X.symlinkSync(t,e,r)}_n.exports={createSymlink:xs(ks),createSymlinkSync:Fs}});var Hn=y((wl,Gn)=>{"use strict";var{createFile:Bn,createFileSync:Un}=Dn(),{createLink:qn,createLinkSync:Xn}=Fn(),{createSymlink:Jn,createSymlinkSync:Wn}=$n();Gn.exports={createFile:Bn,createFileSync:Un,ensureFile:Bn,ensureFileSync:Un,createLink:qn,createLinkSync:Xn,ensureLink:qn,ensureLinkSync:Xn,createSymlink:Jn,createSymlinkSync:Wn,ensureSymlink:Jn,ensureSymlinkSync:Wn}});var st=y((bl,Kn)=>{function Ts(t,{EOL:e=`
8
- `,finalEOL:r=!0,replacer:n=null,spaces:i}={}){let o=r?e:"";return JSON.stringify(t,n,i).replace(/\n/g,e)+o}function Vs(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Kn.exports={stringify:Ts,stripBom:Vs}});var Zn=y((xl,Yn)=>{var Se;try{Se=he()}catch{Se=require("fs")}var at=O(),{stringify:Qn,stripBom:zn}=st();async function As(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||Se,n="throws"in e?e.throws:!0,i=await at.fromCallback(r.readFile)(t,e);i=zn(i);let o;try{o=JSON.parse(i,e?e.reviver:null)}catch(s){if(n)throw s.message=`${t}: ${s.message}`,s;return null}return o}var Is=at.fromPromise(As);function Rs(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||Se,n="throws"in e?e.throws:!0;try{let i=r.readFileSync(t,e);return i=zn(i),JSON.parse(i,e.reviver)}catch(i){if(n)throw i.message=`${t}: ${i.message}`,i;return null}}async function Ms(t,e,r={}){let n=r.fs||Se,i=Qn(e,r);await at.fromCallback(n.writeFile)(t,i,r)}var Ns=at.fromPromise(Ms);function _s(t,e,r={}){let n=r.fs||Se,i=Qn(e,r);return n.writeFileSync(t,i,r)}Yn.exports={readFile:Is,readFileSync:Rs,writeFile:Ns,writeFileSync:_s}});var ti=y((Pl,ei)=>{"use strict";var ct=Zn();ei.exports={readJson:ct.readFile,readJsonSync:ct.readFileSync,writeJson:ct.writeFile,writeJsonSync:ct.writeFileSync}});var lt=y((Ll,ii)=>{"use strict";var $s=O().fromPromise,qt=M(),ri=require("path"),ni=q(),Bs=re().pathExists;async function Us(t,e,r="utf-8"){let n=ri.dirname(t);return await Bs(n)||await ni.mkdirs(n),qt.writeFile(t,e,r)}function qs(t,...e){let r=ri.dirname(t);qt.existsSync(r)||ni.mkdirsSync(r),qt.writeFileSync(t,...e)}ii.exports={outputFile:$s(Us),outputFileSync:qs}});var si=y((jl,oi)=>{"use strict";var{stringify:Xs}=st(),{outputFile:Js}=lt();async function Ws(t,e,r={}){let n=Xs(e,r);await Js(t,n,r)}oi.exports=Ws});var ci=y((Dl,ai)=>{"use strict";var{stringify:Gs}=st(),{outputFileSync:Hs}=lt();function Ks(t,e,r){let n=Gs(e,r);Hs(t,n,r)}ai.exports=Ks});var ui=y((El,li)=>{"use strict";var Qs=O().fromPromise,_=ti();_.outputJson=Qs(si());_.outputJsonSync=ci();_.outputJSON=_.outputJson;_.outputJSONSync=_.outputJsonSync;_.writeJSON=_.writeJson;_.writeJSONSync=_.writeJsonSync;_.readJSON=_.readJson;_.readJSONSync=_.readJsonSync;li.exports=_});var hi=y((Ol,di)=>{"use strict";var zs=M(),pi=require("path"),{copy:Ys}=ot(),{remove:fi}=Ce(),{mkdirp:Zs}=q(),{pathExists:ea}=re(),mi=ce();async function ta(t,e,r={}){let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=await mi.checkPaths(t,e,"move",r);await mi.checkParentPaths(t,i,e,"move");let s=pi.dirname(e);return pi.parse(s).root!==s&&await Zs(s),ra(t,e,n,o)}async function ra(t,e,r,n){if(!n){if(r)await fi(e);else if(await ea(e))throw new Error("dest already exists.")}try{await zs.rename(t,e)}catch(i){if(i.code!=="EXDEV")throw i;await na(t,e,r)}}async function na(t,e,r){return await Ys(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),fi(t)}di.exports=ta});var wi=y((Cl,vi)=>{"use strict";var gi=he(),Jt=require("path"),ia=ot().copySync,Si=Ce().removeSync,oa=q().mkdirpSync,yi=ce();function sa(t,e,r){r=r||{};let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=yi.checkPathsSync(t,e,"move",r);return yi.checkParentPathsSync(t,i,e,"move"),aa(e)||oa(Jt.dirname(e)),ca(t,e,n,o)}function aa(t){let e=Jt.dirname(t);return Jt.parse(e).root===e}function ca(t,e,r,n){if(n)return Xt(t,e,r);if(r)return Si(e),Xt(t,e,r);if(gi.existsSync(e))throw new Error("dest already exists.");return Xt(t,e,r)}function Xt(t,e,r){try{gi.renameSync(t,e)}catch(n){if(n.code!=="EXDEV")throw n;return la(t,e,r)}}function la(t,e,r){return ia(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),Si(t)}vi.exports=sa});var xi=y((kl,bi)=>{"use strict";var ua=O().fromPromise;bi.exports={move:ua(hi()),moveSync:wi()}});var Li=y((Fl,Pi)=>{"use strict";Pi.exports={...M(),...ot(),...xn(),...Hn(),...ui(),...q(),...xi(),...lt(),...re(),...Ce()}});var ji=y(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.EXTENSIONS_LANGUAGES=void 0;ut.EXTENSIONS_LANGUAGES={1:"Groff",2:"Groff",3:"Groff",4:"Groff",5:"Groff",6:"Groff",7:"Groff",8:"Groff",9:"Groff",abap:"ABAP",asc:"Public Key",ash:"AGS Script",ampl:"AMPL",mod:"XML",g4:"ANTLR",apib:"API Blueprint",apl:"APL",dyalog:"APL",asp:"ASP",asax:"ASP",ascx:"ASP",ashx:"ASP",asmx:"ASP",aspx:"ASP",axd:"ASP",dats:"ATS",hats:"ATS",sats:"ATS",as:"ActionScript",adb:"Ada",ada:"Ada",ads:"Ada",agda:"Agda",als:"Alloy",apacheconf:"ApacheConf",vhost:"Nginx",cls:"Visual Basic",applescript:"AppleScript",scpt:"AppleScript",arc:"Arc",ino:"Arduino",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aj:"AspectJ",asm:"Assembly",a51:"Assembly",inc:"SourcePawn",nasm:"Assembly",aug:"Augeas",ahk:"AutoHotkey",ahkl:"AutoHotkey",au3:"AutoIt",awk:"Awk",auk:"Awk",gawk:"Awk",mawk:"Awk",nawk:"Awk",bat:"Batchfile",cmd:"Batchfile",befunge:"Befunge",bison:"Bison",bb:"BlitzBasic",decls:"BlitzBasic",bmx:"BlitzMax",bsv:"Bluespec",boo:"Boo",b:"Limbo",bf:"HyPhy",brs:"Brightscript",bro:"Bro",c:"C",cats:"C",h:"Objective-C",idc:"C",w:"C",cs:"Smalltalk",cake:"CoffeeScript",cshtml:"C#",csx:"C#",cpp:"C++","c++":"C++",cc:"C++",cp:"Component Pascal",cxx:"C++","h++":"C++",hh:"Hack",hpp:"C++",hxx:"C++",inl:"C++",ipp:"C++",tcc:"C++",tpp:"C++","c-objdump":"C-ObjDump",chs:"C2hs Haskell",clp:"CLIPS",cmake:"CMake","cmake.in":"CMake",cob:"COBOL",cbl:"COBOL",ccp:"COBOL",cobol:"COBOL",cpy:"COBOL",css:"CSS",csv:"CSV",capnp:"Cap'n Proto",mss:"CartoCSS",ceylon:"Ceylon",chpl:"Chapel",ch:"xBase",ck:"ChucK",cirru:"Cirru",clw:"Clarion",icl:"Clean",dcl:"Clean",click:"Click",clj:"Clojure",boot:"Clojure",cl2:"Clojure",cljc:"Clojure",cljs:"Clojure","cljs.hl":"Clojure",cljscm:"Clojure",cljx:"Clojure",hic:"Clojure",coffee:"CoffeeScript",_coffee:"CoffeeScript",cjsx:"CoffeeScript",cson:"CoffeeScript",iced:"CoffeeScript",cfm:"ColdFusion",cfml:"ColdFusion",cfc:"ColdFusion CFC",lisp:"NewLisp",asd:"Common Lisp",cl:"OpenCL",l:"PicoLisp",lsp:"NewLisp",ny:"Common Lisp",podsl:"Common Lisp",sexp:"Common Lisp",cps:"Component Pascal",coq:"Coq",v:"Verilog",cppobjdump:"Cpp-ObjDump","c++-objdump":"Cpp-ObjDump","c++objdump":"Cpp-ObjDump","cpp-objdump":"Cpp-ObjDump","cxx-objdump":"Cpp-ObjDump",creole:"Creole",cr:"Crystal",feature:"Cucumber",cu:"Cuda",cuh:"Cuda",cy:"Cycript",pyx:"Cython",pxd:"Cython",pxi:"Cython",d:"Makefile",di:"D","d-objdump":"D-ObjDump",com:"DIGITAL Command Language",dm:"DM",zone:"DNS Zone",arpa:"DNS Zone",darcspatch:"Darcs Patch",dpatch:"Darcs Patch",dart:"Dart",diff:"Diff",patch:"Diff",dockerfile:"Dockerfile",djs:"Dogescript",dylan:"Dylan",dyl:"Dylan",intr:"Dylan",lid:"Dylan",E:"E",ecl:"ECLiPSe",eclxml:"ECL",sch:"KiCad",brd:"KiCad",epj:"Ecere Projects",e:"Eiffel",ex:"Elixir",exs:"Elixir",elm:"Elm",el:"Emacs Lisp",emacs:"Emacs Lisp","emacs.desktop":"Emacs Lisp",em:"EmberScript",emberscript:"EmberScript",erl:"Erlang",es:"JavaScript",escript:"Erlang",hrl:"Erlang",xrl:"Erlang",yrl:"Erlang",fs:"GLSL",fsi:"F#",fsx:"F#",fx:"HLSL",flux:"FLUX",f90:"FORTRAN",f:"Forth",f03:"FORTRAN",f08:"FORTRAN",f77:"FORTRAN",f95:"FORTRAN",for:"Forth",fpp:"FORTRAN",factor:"Factor",fy:"Fancy",fancypack:"Fancy",fan:"Fantom","eam.fs":"Formatted",fth:"Forth","4th":"Forth",forth:"Forth",fr:"Text",frt:"Forth",ftl:"FreeMarker",g:"GAP",gco:"G-code",gcode:"G-code",gms:"GAMS",gap:"GAP",gd:"GDScript",gi:"GAP",tst:"Scilab",s:"GAS",ms:"MAXScript",glsl:"GLSL",fp:"GLSL",frag:"JavaScript",frg:"GLSL",fsh:"GLSL",fshader:"GLSL",geo:"GLSL",geom:"GLSL",glslv:"GLSL",gshader:"GLSL",shader:"GLSL",vert:"GLSL",vrx:"GLSL",vsh:"GLSL",vshader:"GLSL",gml:"XML",kid:"Genshi",ebuild:"Gentoo Ebuild",eclass:"Gentoo Eclass",po:"Gettext Catalog",pot:"Gettext Catalog",glf:"Glyph",gp:"Gnuplot",gnu:"Gnuplot",gnuplot:"Gnuplot",plot:"Gnuplot",plt:"Gnuplot",go:"Go",golo:"Golo",gs:"JavaScript",gst:"Gosu",gsx:"Gosu",vark:"Gosu",grace:"Grace",gradle:"Gradle",gf:"Grammatical Framework",graphql:"GraphQL",dot:"Graphviz (DOT)",gv:"Graphviz (DOT)",man:"Groff","1in":"Groff","1m":"Groff","1x":"Groff","3in":"Groff","3m":"Groff","3qt":"Groff","3x":"Groff",me:"Groff",n:"Nemerle",rno:"Groff",roff:"Groff",groovy:"Groovy",grt:"Groovy",gtpl:"Groovy",gvy:"Groovy",gsp:"Groovy Server Pages",hcl:"HCL",tf:"HCL",hlsl:"HLSL",fxh:"HLSL",hlsli:"HLSL",html:"HTML",htm:"HTML","html.hl":"HTML",st:"Smalltalk",xht:"HTML",xhtml:"HTML",mustache:"HTML+Django",jinja:"HTML+Django",eex:"HTML+EEX",erb:"HTML+ERB","erb.deface":"HTML+ERB",phtml:"HTML+PHP",http:"HTTP",php:"PHP",haml:"Haml","haml.deface":"Haml",handlebars:"Handlebars",hbs:"Handlebars",hb:"Harbour",hs:"Haskell",hsc:"Haskell",hx:"Haxe",hxsl:"Haxe",hy:"Hy",pro:"QMake",dlm:"IDL",ipf:"IGOR Pro",ini:"INI",cfg:"INI",prefs:"INI",properties:"INI",irclog:"IRC log",weechatlog:"IRC log",idr:"Idris",lidr:"Idris",ni:"Inform 7",i7x:"Inform 7",iss:"Inno Setup",io:"Io",ik:"Ioke",thy:"Isabelle",ijs:"J",flex:"JFlex",jflex:"JFlex",json:"JSON",geojson:"JSON",lock:"JSON",topojson:"JSON",json5:"JSON5",jsonld:"JSONLD",jq:"JSONiq",jsx:"JSX",jade:"Jade",j:"Objective-J",java:"Java",jsp:"Java Server Pages",js:"JavaScript",_js:"JavaScript",bones:"JavaScript",es6:"JavaScript",jake:"JavaScript",jsb:"JavaScript",jscad:"JavaScript",jsfl:"JavaScript",jsm:"JavaScript",jss:"JavaScript",njs:"JavaScript",pac:"JavaScript",sjs:"JavaScript",ssjs:"JavaScript","sublime-build":"JavaScript","sublime-commands":"JavaScript","sublime-completions":"JavaScript","sublime-keymap":"JavaScript","sublime-macro":"JavaScript","sublime-menu":"JavaScript","sublime-mousemap":"JavaScript","sublime-project":"JavaScript","sublime-settings":"JavaScript","sublime-theme":"JavaScript","sublime-workspace":"JavaScript",sublime_metrics:"JavaScript",sublime_session:"JavaScript",xsjs:"JavaScript",xsjslib:"JavaScript",jl:"Julia",ipynb:"Jupyter Notebook",krl:"KRL",kicad_pcb:"KiCad",kit:"Kit",kt:"Kotlin",ktm:"Kotlin",kts:"Kotlin",lfe:"LFE",ll:"LLVM",lol:"LOLCODE",lsl:"LSL",lslp:"LSL",lvproj:"LabVIEW",lasso:"Lasso",las:"Lasso",lasso8:"Lasso",lasso9:"Lasso",ldml:"Lasso",latte:"Latte",lean:"Lean",hlean:"Lean",less:"Less",lex:"Lex",ly:"LilyPond",ily:"LilyPond",m:"Objective-C",ld:"Linker Script",lds:"Linker Script",liquid:"Liquid",lagda:"Literate Agda",litcoffee:"Literate CoffeeScript",lhs:"Literate Haskell",ls:"LoomScript",_ls:"LiveScript",xm:"Logos",x:"Logos",xi:"Logos",lgt:"Logtalk",logtalk:"Logtalk",lookml:"LookML",lua:"Lua",fcgi:"Shell",nse:"Lua",pd_lua:"Lua",rbxs:"Lua",wlua:"Lua",mumps:"M",m4:"M4Sugar",mcr:"MAXScript",mtml:"MTML",muf:"MUF",mak:"Makefile",mk:"Makefile",mkfile:"Makefile",mako:"Mako",mao:"Mako",md:"Markdown",markdown:"Markdown",mkd:"Markdown",mkdn:"Markdown",mkdown:"Markdown",ron:"Markdown",mask:"Mask",mathematica:"Mathematica",cdf:"Mathematica",ma:"Mathematica",mt:"Mathematica",nb:"Text",nbp:"Mathematica",wl:"Mathematica",wlt:"Mathematica",matlab:"Matlab",maxpat:"Max",maxhelp:"Max",maxproj:"Max",mxt:"Max",pat:"Max",mediawiki:"MediaWiki",wiki:"MediaWiki",moo:"Moocode",metal:"Metal",minid:"MiniD",druby:"Mirah",duby:"Mirah",mir:"Mirah",mirah:"Mirah",mo:"Modelica",mms:"Module Management System",mmk:"Module Management System",monkey:"Monkey",moon:"MoonScript",myt:"Myghty",ncl:"Text",nl:"NewLisp",nsi:"NSIS",nsh:"NSIS",axs:"NetLinx",axi:"NetLinx","axs.erb":"NetLinx+ERB","axi.erb":"NetLinx+ERB",nlogo:"NetLogo",nginxconf:"Nginx",nim:"Nimrod",nimrod:"Nimrod",ninja:"Ninja",nit:"Nit",nix:"Nix",nu:"Nu",numpy:"NumPy",numpyw:"NumPy",numsc:"NumPy",ml:"OCaml",eliom:"OCaml",eliomi:"OCaml",ml4:"OCaml",mli:"OCaml",mll:"OCaml",mly:"OCaml",objdump:"ObjDump",mm:"XML",sj:"Objective-J",omgrofl:"Omgrofl",opa:"Opa",opal:"Opal",opencl:"OpenCL",p:"OpenEdge ABL",scad:"OpenSCAD",org:"Org",ox:"Ox",oxh:"Ox",oxo:"Ox",oxygene:"Oxygene",oz:"Oz",pwn:"PAWN",aw:"PHP",ctp:"PHP",php3:"PHP",php4:"PHP",php5:"PHP",phps:"PHP",phpt:"PHP",pls:"PLSQL",pck:"PLSQL",pkb:"PLSQL",pks:"PLSQL",plb:"PLSQL",plsql:"PLSQL",sql:"SQLPL",pov:"POV-Ray SDL",pan:"Pan",psc:"Papyrus",parrot:"Parrot",pasm:"Parrot Assembly",pir:"Parrot Internal Representation",pas:"Pascal",dfm:"Pascal",dpr:"Pascal",lpr:"Pascal",pp:"Puppet",pl:"Prolog",al:"Perl",cgi:"Shell",perl:"Perl",ph:"Perl",plx:"Perl",pm:"Perl6",pod:"Pod",psgi:"Perl",t:"Turing","6pl":"Perl6","6pm":"Perl6",nqp:"Perl6",p6:"Perl6",p6l:"Perl6",p6m:"Perl6",pl6:"Perl6",pm6:"Perl6",pkl:"Pickle",pig:"PigLatin",pike:"Pike",pmod:"Pike",pogo:"PogoScript",pony:"Pony",ps:"PostScript",eps:"PostScript",ps1:"PowerShell",psd1:"PowerShell",psm1:"PowerShell",pde:"Processing",prolog:"Prolog",yap:"Prolog",spin:"Propeller Spin",proto:"Protocol Buffer",pub:"Public Key",pd:"Pure Data",pb:"PureBasic",pbi:"PureBasic",purs:"PureScript",py:"Python",bzl:"Python",gyp:"Python",lmi:"Python",pyde:"Python",pyp:"Python",pyt:"Python",pyw:"Python",rpy:"Ren'Py",tac:"Python",wsgi:"Python",xpy:"Python",pytb:"Python traceback",qml:"QML",qbs:"QML",pri:"QMake",r:"Rebol",rd:"R",rsx:"R",raml:"RAML",rdoc:"RDoc",rbbas:"REALbasic",rbfrm:"REALbasic",rbmnu:"REALbasic",rbres:"REALbasic",rbtbar:"REALbasic",rbuistate:"REALbasic",rhtml:"RHTML",rmd:"RMarkdown",rkt:"Racket",rktd:"Racket",rktl:"Racket",scrbl:"Racket",rl:"Ragel in Ruby Host",raw:"Raw token data",reb:"Rebol",r2:"Rebol",r3:"Rebol",rebol:"Rebol",red:"Red",reds:"Red",cw:"Redcode",rs:"Rust",rsh:"RenderScript",robot:"RobotFramework",rg:"Rouge",rb:"Ruby",builder:"Ruby",gemspec:"Ruby",god:"Ruby",irbrc:"Ruby",jbuilder:"Ruby",mspec:"Ruby",pluginspec:"XML",podspec:"Ruby",rabl:"Ruby",rake:"Ruby",rbuild:"Ruby",rbw:"Ruby",rbx:"Ruby",ru:"Ruby",ruby:"Ruby",thor:"Ruby",watchr:"Ruby","rs.in":"Rust",sas:"SAS",scss:"SCSS",smt2:"SMT",smt:"SMT",sparql:"SPARQL",rq:"SPARQL",sqf:"SQF",hqf:"SQF",cql:"SQL",ddl:"SQL",prc:"SQL",tab:"SQL",udf:"SQL",viw:"SQL",db2:"SQLPL",ston:"STON",svg:"SVG",sage:"Sage",sagews:"Sage",sls:"Scheme",sass:"Sass",scala:"Scala",sbt:"Scala",sc:"SuperCollider",scaml:"Scaml",scm:"Scheme",sld:"Scheme",sps:"Scheme",ss:"Scheme",sci:"Scilab",sce:"Scilab",self:"Self",sh:"Shell",bash:"Shell",bats:"Shell",command:"Shell",ksh:"Shell","sh.in":"Shell",tmux:"Shell",tool:"Shell",zsh:"Shell","sh-session":"ShellSession",shen:"Shen",sl:"Slash",slim:"Slim",smali:"Smali",tpl:"Smarty",sp:"SourcePawn",sma:"SourcePawn",nut:"Squirrel",stan:"Stan",ML:"Standard ML",fun:"Standard ML",sig:"Standard ML",sml:"Standard ML",do:"Stata",ado:"Stata",doh:"Stata",ihlp:"Stata",mata:"Stata",matah:"Stata",sthlp:"Stata",styl:"Stylus",scd:"SuperCollider",swift:"Swift",sv:"SystemVerilog",svh:"SystemVerilog",vh:"SystemVerilog",toml:"TOML",txl:"TXL",tcl:"Tcl",adp:"Tcl",tm:"Tcl",tcsh:"Tcsh",csh:"Tcsh",tex:"TeX",aux:"TeX",bbx:"TeX",bib:"TeX",cbx:"TeX",dtx:"TeX",ins:"TeX",lbx:"TeX",ltx:"TeX",mkii:"TeX",mkiv:"TeX",mkvi:"TeX",sty:"TeX",toc:"TeX",tea:"Tea",txt:"Text",no:"Text",textile:"Textile",thrift:"Thrift",tu:"Turing",ttl:"Turtle",twig:"Twig",ts:"TypeScript",tsx:"TypeScript",upc:"Unified Parallel C",anim:"Unity3D Asset",asset:"Unity3D Asset",mat:"Unity3D Asset",meta:"Unity3D Asset",prefab:"Unity3D Asset",unity:"Unity3D Asset",uno:"Uno",uc:"UnrealScript",ur:"UrWeb",urs:"UrWeb",vcl:"VCL",vhdl:"VHDL",vhd:"VHDL",vhf:"VHDL",vhi:"VHDL",vho:"VHDL",vhs:"VHDL",vht:"VHDL",vhw:"VHDL",vala:"Vala",vapi:"Vala",veo:"Verilog",vim:"VimL",vb:"Visual Basic",bas:"Visual Basic",frm:"Visual Basic",frx:"Visual Basic",vba:"Visual Basic",vbhtml:"Visual Basic",vbs:"Visual Basic",volt:"Volt",vue:"Vue",owl:"Web Ontology Language",webidl:"WebIDL",x10:"X10",xc:"XC",xml:"XML",ant:"XML",axml:"XML",ccxml:"XML",clixml:"XML",cproject:"XML",csl:"XML",csproj:"XML",ct:"XML",dita:"XML",ditamap:"XML",ditaval:"XML","dll.config":"XML",dotsettings:"XML",filters:"XML",fsproj:"XML",fxml:"XML",glade:"XML",grxml:"XML",iml:"XML",ivy:"XML",jelly:"XML",jsproj:"XML",kml:"XML",launch:"XML",mdpolicy:"XML",mxml:"XML",nproj:"XML",nuspec:"XML",odd:"XML",osm:"XML",plist:"XML",props:"XML",ps1xml:"XML",psc1:"XML",pt:"XML",rdf:"XML",rss:"XML",scxml:"XML",srdf:"XML",storyboard:"XML",stTheme:"XML","sublime-snippet":"XML",targets:"XML",tmCommand:"XML",tml:"XML",tmLanguage:"XML",tmPreferences:"XML",tmSnippet:"XML",tmTheme:"XML",ui:"XML",urdf:"XML",ux:"XML",vbproj:"XML",vcxproj:"XML",vssettings:"XML",vxml:"XML",wsdl:"XML",wsf:"XML",wxi:"XML",wxl:"XML",wxs:"XML",x3d:"XML",xacro:"XML",xaml:"XML",xib:"XML",xlf:"XML",xliff:"XML",xmi:"XML","xml.dist":"XML",xproj:"XML",xsd:"XML",xul:"XML",zcml:"XML","xsp-config":"XPages","xsp.metadata":"XPages",xpl:"XProc",xproc:"XProc",xquery:"XQuery",xq:"XQuery",xql:"XQuery",xqm:"XQuery",xqy:"XQuery",xs:"XS",xslt:"XSLT",xsl:"XSLT",xojo_code:"Xojo",xojo_menu:"Xojo",xojo_report:"Xojo",xojo_script:"Xojo",xojo_toolbar:"Xojo",xojo_window:"Xojo",xtend:"Xtend",yml:"YAML",reek:"YAML",rviz:"YAML","sublime-syntax":"YAML",syntax:"YAML",yaml:"YAML","yaml-tmlanguage":"YAML",yang:"YANG",y:"Yacc",yacc:"Yacc",yy:"Yacc",zep:"Zephir",zimpl:"Zimpl",zmpl:"Zimpl",zpl:"Zimpl",desktop:"desktop","desktop.in":"desktop",ec:"eC",eh:"eC",edn:"edn",fish:"fish",mu:"mupad",nc:"nesC",ooc:"ooc",rst:"reStructuredText",rest:"reStructuredText","rest.txt":"reStructuredText","rst.txt":"reStructuredText",wisp:"wisp",prg:"xBase",prw:"xBase"}});var Fe=y(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.setOptionValues=pa;function pa(t,e){for(let r of Object.keys(t))t[r]!==void 0&&(e[r]=t[r]);return e}});var Ei=y(J=>{"use strict";var ma=J&&J.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),fa=J&&J.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),da=J&&J.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),i=0;i<n.length;i++)n[i]!=="default"&&ma(r,e,n[i]);return fa(r,e),r}})();Object.defineProperty(J,"__esModule",{value:!0});J.SarifBuilder=void 0;var Di=da(Li()),ha=ji(),ya=Fe(),Gt=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,ya.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();Di.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await Di.writeFile(e,r,"utf8")}buildSarifOutput(){return this.log.runs=this.log.runs.map(e=>this.completeRunFields(e)),this.log}buildSarifJsonString(e={indent:!1}){this.buildSarifOutput();let r=e.indent?JSON.stringify(this.log,null,2):JSON.stringify(this.log);if(r.includes("SARIF_BUILDER_INVALID"))throw new Error("Your SARIF log is invalid, please solve SARIF_BUILDER_INVALID messages");return r}completeRunFields(e){var r,n,i,o,s,a;e.artifacts=e.artifacts||[];let m=new Set(e.artifacts.map(p=>{var l;return(l=p?.location)===null||l===void 0?void 0:l.uri}).filter(Boolean));for(let p of e.results||[])for(let l of p.locations||[]){let u=(n=(r=l?.physicalLocation)===null||r===void 0?void 0:r.artifactLocation)===null||n===void 0?void 0:n.uri;if(u&&!m.has(u)){let f=u.lastIndexOf("."),g=f!==-1?u.slice(f+1):"",v=ha.EXTENSIONS_LANGUAGES[g]||"unknown";e.artifacts.push({sourceLanguage:v,location:{uri:u}}),m.add(u)}}let d=new Map;e.artifacts.forEach((p,l)=>{var u;let f=(u=p?.location)===null||u===void 0?void 0:u.uri;f&&d.set(f,l)});let c=new Map;(((o=(i=e?.tool)===null||i===void 0?void 0:i.driver)===null||o===void 0?void 0:o.rules)||[]).forEach((p,l)=>{c.set(p.id,l)});for(let p of e.results||[]){if(p.ruleId){let l=c.get(p.ruleId);l!==void 0&&(p.ruleIndex=l)}if(p.locations)for(let l of p.locations){let u=(a=(s=l?.physicalLocation)===null||s===void 0?void 0:s.artifactLocation)===null||a===void 0?void 0:a.uri;if(u){let f=d.get(u);f!==void 0&&(l.physicalLocation.artifactLocation.index=f)}}}return e}};J.SarifBuilder=Gt});var Oi=y(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.SarifResultBuilder=void 0;var ga=Fe(),Ht=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,ga.setOptionValues)(e,this.result)}initSimple(e){if(this.setLevel(e.level),this.setMessageText(e.messageText),this.setRuleId(e.ruleId),e.fileUri&&this.setLocationArtifactUri({uri:e.fileUri}),e.startLine!==null&&e.startLine!==void 0){let r={startLine:e.startLine,startColumn:e.startColumn||1,endLine:e.endLine||e.startLine,endColumn:e.endColumn||1};if(e.startLine===0||e.startColumn===0||e.endLine===0||e.endColumn===0)throw new Error("Region limit can not be 0 (minimum line 1 or column 1) in "+JSON.stringify(e));this.setLocationRegion(r)}return this}setLevel(e){this.result.level=e}setMessageText(e){this.result.message.text=e}setRuleId(e){this.result.ruleId=e}setLocationRegion(e){this.manageInitPhysicalLocation(),this.result.locations[0].physicalLocation.region=e}setLocationArtifactUri(e){this.manageInitPhysicalLocation(),this.result.locations[0].physicalLocation.artifactLocation=e}manageInitLocation(){var e,r;!((r=(e=this.result)===null||e===void 0?void 0:e.locations)===null||r===void 0)&&r.length||(this.result.locations=[{}])}manageInitPhysicalLocation(){this.manageInitLocation(),!this.result.locations[0].physicalLocation&&(this.result.locations[0].physicalLocation={})}};pt.SarifResultBuilder=Ht});var Ci=y(mt=>{"use strict";Object.defineProperty(mt,"__esModule",{value:!0});mt.SarifRuleBuilder=void 0;var Sa=Fe(),Kt=class{constructor(e={}){this.rule={id:"SARIF_BUILDER_INVALID: Please send the rule identifier in id property, or call setRuleId(ruleId)",shortDescription:{text:"SARIF_BUILDER_INVALID: Please send the rule text in shortDescription.text property, or call setShortDescriptionText(text)"}},(0,Sa.setOptionValues)(e,this.rule)}initSimple(e){return this.setRuleId(e.ruleId),e.shortDescriptionText&&this.setShortDescriptionText(e.shortDescriptionText),e.fullDescriptionText&&this.setFullDescriptionText(e.fullDescriptionText),e.helpUri&&this.setHelpUri(e.helpUri),this}setRuleId(e){this.rule.id=e}setShortDescriptionText(e){this.rule.shortDescription.text=e}setFullDescriptionText(e){this.rule.fullDescription=this.rule.fullDescription||{text:""},this.rule.fullDescription.text=e}setHelpUri(e){this.rule.helpUri=e}};mt.SarifRuleBuilder=Kt});var ki=y(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});ft.SarifRunBuilder=void 0;var va=Fe(),Qt=class{constructor(e={}){this.run={tool:{driver:{name:process.env.npm_package_name||"SARIF_BUILDER_INVALID: Please send the tool name in tool.driver.name property, or call setToolName(name)",rules:[]}},results:[]},(0,va.setOptionValues)(e,this.run)}initSimple(e){return this.setToolDriverName(e.toolDriverName),this.setToolDriverVersion(e.toolDriverVersion),e.url&&this.setToolDriverUri(e.url),this}addRule(e){this.run.tool.driver.rules.push(e.rule)}addResult(e){this.run.results.push(e.result)}setToolDriverName(e){this.run.tool.driver.name=e}setToolDriverVersion(e){this.run.tool.driver.version=e}setToolDriverUri(e){this.run.tool.driver.informationUri=e}};ft.SarifRunBuilder=Qt});var Fi=y(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.SarifResultBuilder=W.SarifRuleBuilder=W.SarifRunBuilder=W.SarifBuilder=void 0;var wa=Ei();Object.defineProperty(W,"SarifBuilder",{enumerable:!0,get:function(){return wa.SarifBuilder}});var ba=Oi();Object.defineProperty(W,"SarifResultBuilder",{enumerable:!0,get:function(){return ba.SarifResultBuilder}});var xa=Ci();Object.defineProperty(W,"SarifRuleBuilder",{enumerable:!0,get:function(){return xa.SarifRuleBuilder}});var Pa=ki();Object.defineProperty(W,"SarifRunBuilder",{enumerable:!0,get:function(){return Pa.SarifRunBuilder}})});var Vi=y((_l,Ti)=>{"use strict";var La=/["'&<>]/;Ti.exports=ja;function ja(t){var e=""+t,r=La.exec(e);if(!r)return e;var n,i="",o=0,s=0;for(o=r.index;o<e.length;o++){switch(e.charCodeAt(o)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}s!==o&&(i+=e.substring(s,o)),s=o+1,i+=n}return s!==o?i+e.substring(s,o):i}});var Yt=require("fs/promises");var Z=Te(require("path")),Pt=require("fs/promises");var B=require("fs/promises"),vt=require("path");async function H(t){try{return await se(t)?JSON.parse(await(0,B.readFile)(t,{encoding:"utf-8"})):void 0}catch(e){throw new Error(`Error reading JSON file ${t}: ${e}`,{cause:e})}}async function wt(t,e){let r=JSON.stringify(e,null,4)+`
9
- `,n=await Xi(t,r);await(0,B.writeFile)(t,n,{encoding:"utf-8"})}function U(t){return t?t.replace(/\?.*$/,""):""}async function se(t){try{return await(0,B.access)(t,B.constants.F_OK),!0}catch{return!1}}async function bt(t){let e=(0,vt.resolve)(t),r=await(0,B.readdir)(e,{withFileTypes:!0});for(let n of r){let i=(0,vt.resolve)(n.parentPath,n.name);n.isDirectory()?await bt(i):await(0,B.rm)(i)}await(0,B.rmdir)(e)}function xt(t,e){return`Basic ${Buffer.from(`${t}:${e}`).toString("base64")}`}async function be(t,e){let r=e?.user&&e?.pw?{Authorization:xt(e.user,e.pw)}:{},n=await fetch(t,{headers:r});if(!n.ok){let i="";try{i=await n.text()}catch(o){i=`${o}`}throw new Error(`Failed to fetch: ${t}: ${n.status} - ${n.statusText}: ${i}`)}return n}async function Xi(t,e){let r=await Wi();if(!r)return e;let n=await r.resolveConfig(t);return n?await r.format(e,{...n,filepath:t}):e}var Ji;function Wi(){return Ji??=import("prettier").catch(()=>{})}var Ve={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4},K=["UNKNOWN","LOW","MEDIUM","HIGH","CRITICAL"];function Q(t,e){return Ve[t]-Ve[e]}function rr(t,e){return Q(t,e)>=0?t:e}function Ae(t,e){return Ve[t]<Ve[e]}function nr(t){switch(t){case"Negligible":case"Low":return"LOW";case"Medium":return"MEDIUM";case"High":return"HIGH";case"Critical":return"CRITICAL";default:return"UNKNOWN"}}function ir(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}function or(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function sr(t){switch(t){case"CRITICAL":case"HIGH":return"error";case"MEDIUM":case"LOW":return"warning";default:return"note"}}var Lt=class t{constructor(e){this.workingDir=e}workingDir;static DEFAULT_MAVEN_REPO="https://repository.conterra.de/repository/maven-mirror-ct";static DEFAULT_VEX_SUBDIR="input/vex";static DEFAULT_OUT_SUBDIR="output";static DEFAULT_CACHE_SUBDIR="cache";static DEFAULT_SCANNERS=["grype","trivy","ossindex"];normalize(e,r){let n=e.findNoLongerDetectedVulnerabilitiesOnlyForSnapshots??!1;return{projectConfigFileLocation:r,onNewVulnerabilities:e.onNewVulnerabilities??(e.failOnNewVulnerabilities?"fail":"warn"),onNoLongerDetectedVulnerabilities:e.onNoLongerDetectedVulnerabilities??"ignore",reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities??!0,consoleReport:e.consoleReport??"BY_PROJECT_DETAILED",createSubDirsForProject:e.createSubDirsForProject??!0,mavenRepo:e.mavenRepo??t.DEFAULT_MAVEN_REPO,vexUrls:e.vexUrls??[],vexDir:this.resolvePath(e.vexDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_VEX_SUBDIR),outDir:this.resolvePath(e.outDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_OUT_SUBDIR),cacheDir:this.resolvePath(e.cacheDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_CACHE_SUBDIR),scanners:this.normalizeScanners(e.scanners,r),projects:this.normalizeProjects(e.projects??[],n)}}normalizeScanners(e,r){return(e??t.DEFAULT_SCANNERS).map(i=>{if(typeof i!="string")throw new Error(`Invalid scanner name '${String(i)}' in configuration file '${r}'`);let o=i.split("@");if(o.length>2)throw new Error(`Invalid scanner name '${i}' in configuration file '${r}'`);return{name:o[0],version:o[1]??""}})}normalizeProjects(e,r){return e.map(n=>{let i=n;if(!i.name)throw new Error("Project name is missing on entry: "+JSON.stringify(i));if(!i.version)throw new Error("Project version is missing on entry: "+JSON.stringify(i));if(!i.purl)throw new Error("Project purl is missing on entry: "+JSON.stringify(i));let o={...i,purlAliases:i.purlAliases??[],enabled:i.enabled??!0,silent:i.silent??!1,minimumSeverity:i.minimumSeverity??"UNKNOWN"};return o.sbomFile?{...o,sbomFile:this.resolvePath(o.sbomFile)??o.sbomFile}:{...o,detectNoLongerUsedVulnerabilities:r?o.purl.endsWith("-SNAPSHOT"):!0}})}resolvePath(e){if(e)return Z.default.isAbsolute(e)?e:(0,Z.resolve)(this.workingDir,e)}},xe=class{constructor(e){this.workingDir=e;this.normalizer=new Lt(e)}workingDir;normalizer;projectConfigCache;async loadProjectConfig(){return this.projectConfigCache??=this.doLoadProjectConfig(),this.projectConfigCache}async doLoadProjectConfig(){let e=(0,Z.resolve)(this.workingDir,"vuln-scan-conf.json"),r=await H(e);if(!r)throw new Error(`Missing project configuration file '${e}'`);return this.normalizer.normalize(r,e)}async loadJiraConfig(e){let r=await(0,Pt.readFile)(e,"utf8"),n=JSON.parse(r);if(!n.issues&&n.issue&&(n.issues=n.issue),!n.jiraUrl||typeof n.jiraUrl!="string")throw new Error("jira-conf.json: missing or invalid 'jiraUrl' field");if(!Array.isArray(n.issues))throw new Error("jira-conf.json: missing or invalid 'issues' array");this.validateAutoCloseSeverity(n.autoCloseBelowSeverity,"jira-conf.json: invalid 'autoCloseBelowSeverity'");for(let[i,o]of n.issues.entries())o&&typeof o=="object"&&this.validateAutoCloseSeverity(o.autoCloseBelowSeverity,`jira-conf.json: invalid 'issues[${i}].autoCloseBelowSeverity'`);return n}validateAutoCloseSeverity(e,r){if(e!==void 0&&!K.includes(e))throw new Error(`${r} value '${String(e)}'. Must be one of: ${K.join(", ")}`)}async loadAutoVexConfig(e){let r=await(0,Pt.readFile)(e,"utf8"),n=JSON.parse(r);if(!n.impactStatement||typeof n.impactStatement!="string")throw new Error("auto-vex-conf.json: missing or invalid 'impactStatement' field (must be a non-empty string)");if(n.maxSeverity!==void 0&&!K.includes(n.maxSeverity))throw new Error(`auto-vex-conf.json: invalid 'maxSeverity' value '${String(n.maxSeverity)}'. Must be one of: ${K.join(", ")}`);if(n.projectOverrides!==void 0){if(!Array.isArray(n.projectOverrides))throw new Error("auto-vex-conf.json: 'projectOverrides' must be an array");for(let[i,o]of n.projectOverrides.entries()){if(!o||typeof o!="object")throw new Error(`auto-vex-conf.json: 'projectOverrides[${i}]' must be an object`);let s=o;if(!Array.isArray(s.projects)||s.projects.length===0||!s.projects.every(a=>typeof a=="string"&&a.length>0))throw new Error(`auto-vex-conf.json: 'projectOverrides[${i}].projects' must be a non-empty array of non-empty strings`);if(!K.includes(s.maxSeverity))throw new Error(`auto-vex-conf.json: invalid 'projectOverrides[${i}].maxSeverity' value '${String(s.maxSeverity)}'. Must be one of: ${K.join(", ")}`)}}return n}};var Re=require("fs/promises");async function ar(t,e,r){if("sbomFile"in t)return await(0,Re.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let n=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,Re.writeFile)(e,n),{...t,sbomFile:e}}var Ie=class{constructor(e,r){this.repo=e;this.authn=r}repo;authn;async downloadArtifact(e){let r=this.toArtifactInfo(e);if(this.isSnapshotVersion(r.version)&&!r.timestamp){let o=await this.fetchLatestSnapshotTimestamp(r);r={...r,timestamp:o}}let n=this.toArtifactUrl(r),i=await be(n,this.authn);return Buffer.from(await i.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,i=await(await be(r,this.authn)).text();return Gi(i,e)}toArtifactUrl(e){let r=this.toArtifactBaseUrl(e),n=this.isSnapshotVersion(e.version)&&e.timestamp?e.version.replace(/SNAPSHOT$/,e.timestamp):e.version;return`${r}/${e.artifactId}-${n}-${e.classifier}.${e.extension}`}toArtifactBaseUrl(e){return`${this.repo}/${e.groupId.replace(/\./g,"/")}/${e.artifactId}/${e.version}`}isSnapshotVersion(e){return e.endsWith("-SNAPSHOT")}toArtifactInfo(e){let r=e.split(":");return{groupId:r[0],artifactId:r[1],version:r[2],classifier:r[3],extension:"json"}}};function Gi(t,e){if(e.classifier&&e.extension){let i=t.match(new RegExp(`<snapshotVersion>\\s*<classifier>${e.classifier}</classifier>\\s*<extension>${e.extension}</extension>\\s*<value>([^<]+)</value>\\s*<updated>[^<]+</updated>\\s*</snapshotVersion>`)),o=e.version.replace(/SNAPSHOT$/,"");if(i?.[1])return i[1].replace(o,"")}let r=t.match(/<timestamp>([^<]+)<\/timestamp>/),n=t.match(/<buildNumber>([^<]+)<\/buildNumber>/);if(!r||!n)throw new Error(`Failed to get timestamp and build number from ${t} for artifact '${e.artifactId}'`);return`${r[1]}-${n[1]}`}var mr=require("fs/promises"),Dt=require("path"),fr=require("crypto");var lr=require("crypto");var cr="auto_vex_max_severity=";function Pe(t){let e=t.status_notes;if(!e||!e.startsWith(cr))return;let r=e.slice(cr.length).trim();return K.includes(r)?r:void 0}var Hi="https://openvex.dev/ns/v0.2.0";function ur(t,e="conterra"){let n=`https://openvex.dev/docs/public/vex-${(0,lr.randomUUID)()}`,i=t.timestamp??new Date().toISOString();return{"@context":Hi,"@id":n,author:e,timestamp:i,last_updated:i,version:1,statements:[t]}}function pr(t,e){let r=e.timestamp??new Date().toISOString();return{...t,last_updated:r,version:t.version+1,statements:[...t.statements,e]}}var Ne=require("fs/promises"),_e=require("path");var Me=class{constructor(e){this.location=e}location;_content=void 0;_exists=!1;get exists(){return this._exists}get content(){return this._content}set content(e){this._content=e,this._exists=e!==void 0}async read(){let e=await H(this.location);this._content=e??void 0,this._exists=this._content!==void 0}async write(){if(this._content===void 0)throw new Error(`Cannot write VexFile: content is undefined (${this.location})`);await(0,Ne.mkdir)((0,_e.dirname)((0,_e.resolve)(this.location)),{recursive:!0}),await wt(this.location,this._content)}async delete(){await(0,Ne.unlink)(this.location),this._exists=!1}upsert(e,r){if(this._content===void 0)return this._content=ur(e,r),this._exists=!0,{created:!0,changed:!0};let n=Pe(e);if(n!==void 0){let i=this._content.statements.findIndex(o=>o.vulnerability.name===e.vulnerability.name&&o.status===e.status&&Pe(o)===n);if(i!==-1){let o=this._content.statements[i];return Ki(o,e)?{created:!1,changed:!1}:(o.products=e.products,o.impact_statement=e.impact_statement,o.action_statement=e.action_statement,o.justification=e.justification,o.status_notes=e.status_notes,o.timestamp=e.timestamp,this._content.version+=1,this._content.last_updated=e.timestamp??new Date().toISOString(),{created:!1,changed:!0})}}return this._content=pr(this._content,e),{created:!1,changed:!0}}addProductId(e,r){this.assertContentLoaded("addProductId");let n=!1;for(let i of this._content.statements){if(!i.products||i.products.some(s=>s["@id"]===r))continue;let o=i.products.findIndex(s=>s["@id"]===e);o!==-1&&(i.products.splice(o+1,0,{"@id":r}),n=!0)}return n}removeProductId(e,r){this.assertContentLoaded("removeProductId");let n=this._content.statements,i=[],o=!1;for(let s of n){if(r&&!jt(s).has(r)||!s.products)continue;let a=s.products.findIndex(m=>m["@id"]===e);a!==-1&&(s.products.splice(a,1),o=!0,s.products.length===0&&i.push(s))}if(!o)return"unchanged";for(let s of i)n.splice(n.indexOf(s),1);return n.length===0?"emptied":"changed"}hasStatementForProduct(e){return this.assertContentLoaded("hasStatementForProduct"),this._content.statements.some(r=>r.products?.some(n=>n["@id"]===e)??!1)}assertContentLoaded(e){if(this._content===void 0)throw new Error(`VexFile.${e}(): content is not loaded. Call read() first (${this.location})`)}};function Ki(t,e){return t.impact_statement!==e.impact_statement||t.action_statement!==e.action_statement||t.justification!==e.justification||t.status_notes!==e.status_notes?!1:Qi(t.products,e.products)}function Qi(t,e){let r=o=>Array.from(new Set((o??[]).map(s=>s["@id"]).filter(s=>typeof s=="string"))).sort(),n=r(t),i=r(e);return n.length!==i.length?!1:n.every((o,s)=>o===i[s])}async function $e(t,e){for(let r of await(0,mr.readdir)(t,{withFileTypes:!0}))r.name.endsWith(".json")?await e(new Me((0,Dt.resolve)(r.parentPath,r.name))):r.isDirectory()&&await $e((0,Dt.resolve)(r.parentPath,r.name),e)}function jt(t){let e=t.vulnerability.name;return new Set([e,...t.vulnerability.aliases??[]])}var le=class t{statements=[];filteredToProducts=[];static async fromUrl(e,r,n=new t){let o=await(await be(e,r)).json();return n.add(o),n}static async fromFiles(e,r=new t){return await $e(e,async n=>{await n.read(),n.content&&r.add(n.content)}),r}add(e){Yi(e);let r=e.timestamp;for(let n of e.statements){n.timestamp=n.timestamp??r;let i=Date.parse(n.timestamp),o=n.vulnerability.name,s=jt(n),a=new Set(n.products?.map(d=>d["@id"]).filter(d=>!!d)??[]),m=new Et(i,o,s,a,n);this.statements.push(m)}this.sortStatementsByTimestampNewestFirst()}filterByProduct(e){this.assertCorrectProductId(e);let r=new t;return r.filteredToProducts=e.slice(0),r.statements=this.statements.filter(n=>n.matchesAtLeastOneProduct(e)),r}hasStatementFor(e){return this.statements.some(r=>r.matchesVulnerability(e))}findNotMatchingVulnerabilities(e,r){let n=this.filterByProduct(r??this.filteredToProducts),i=new Set;for(let o of n.statements)i.add(o.vulnName);for(let o of e)i.delete(o);return Array.from(i)}newestVulnerabilityStatement(e,r,n){let i=this.filterByProduct(r??this.filteredToProducts);for(let o of i.statements)if(o.matchesVulnerability(e)){if(n!==void 0){let s=Pe(o.statement);if(s!==void 0&&!Ae(n,s))continue}return this.reduceToProductInformation(o,i.filteredToProducts[0])}}toVexFileForProduct(e){let r=this.filterByProduct(e??this.filteredToProducts),n=r.statements.map(i=>this.reduceToProductInformation(i,r.filteredToProducts[0]));return this.toVexFile(n)}toVexFile(e){let r=e.filter(o=>o.status!=="under_investigation");if(r.length===0)return;this.sortVexStatementsByTimestampNewestFirst(r);let n=r[0].timestamp;return{"@context":"https://openvex.dev/ns/v0.2.0","@id":Zi(r),author:"conterra",timestamp:n,last_updated:n,version:1,statements:r}}toVexFileWithComponentIds(e){let r=e.filter(n=>n.vexStatement).map(n=>{let i={...n.vexStatement},o=(n.components??[]).map(s=>({"@id":s}));return i.products=[...i.products??[],...o],i});return this.toVexFile(r)}assertCorrectProductId(e){if(!e||e.length===0)throw new Error("Product ID must be provided");if(this.filteredToProducts.length&&!zi(this.filteredToProducts,e))throw new Error("Cannot filter to a different product")}reduceToProductInformation(e,r){let n={timestamp:new Date(e.timestamp).toISOString(),...e.statement};if(!r)return n;let i=n.products?.filter(o=>o["@id"]===r);return i?.length||(i=[{"@id":r}]),{...n,products:i}}sortStatementsByTimestampNewestFirst(){this.statements.sort((e,r)=>r.timestamp-e.timestamp)}sortVexStatementsByTimestampNewestFirst(e){e.sort((r,n)=>Date.parse(n.timestamp)-Date.parse(r.timestamp))}};function zi(t,e){return t.length===e.length&&t.every((r,n)=>r===e[n])}var Et=class{constructor(e,r,n,i,o){this.timestamp=e;this.vulnName=r;this.vulnAliases=n;this.products=i;this.statement=o}timestamp;vulnName;vulnAliases;products;statement;matchesProduct(e){return this.products.has(e)}matchesAtLeastOneProduct(e){return e.some(this.matchesProduct.bind(this))}matchesVulnerability(e){return this.vulnAliases.has(e)}};function Yi(t){if(t?.["@context"]!=="https://openvex.dev/ns/v0.2.0")throw new Error("Invalid VEX file format")}function Zi(t){let e=t.map(n=>`${n.vulnerability.name}:${n.status}`).sort().join("|");return`https://openvex.dev/docs/public/vex-${(0,fr.createHash)("sha256").update(e).digest("hex")}`}var Ue=require("path"),dr=require("fs/promises");function eo(t){throw new Error(`Unhandled value: ${String(t)}`)}var Be=class{constructor(e,r,n){this.project=e;this.outputDir=r;this.useSubDirForProject=n}project;outputDir;useSubDirForProject;async lookupOutputFileForWriting(e){let r=this.useSubDirForProject?`${this.project.name}-${this.project.version}`:"",n=`${this.project.name}-${this.project.version}-`,i=this.getFileSuffix(e),o=(0,Ue.resolve)(this.outputDir,r,`${n}${i}`),s=(0,Ue.dirname)(o);return await se(s)||await(0,dr.mkdir)(s,{recursive:!0}),o}getFileSuffix(e){switch(e){case"grype-results":return"scan-grype-results.json";case"trivy-results":return"scan-trivy-results.json";case"ossindex-results":return"scan-ossindex-results.json";case"aggregate-results":return"scan-aggregate-results.json";case"aggregated-sarif-results":return"scan-aggregated-results.sarif.json";case"project-cyclonedx-sbom-file":return"sbom.cdx.json";case"project-openvex-file":return"openvex.vex.json";default:return eo(e)}}};var hr=require("zx"),ee=class{async run(e){let{image:r,volumes:n=[],envArgs:i=[],args:o=[]}=e,s=n.flatMap(m=>["-v",m]),a=await hr.$`docker run --rm ${s} ${i} ${r} ${o}`.nothrow();return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}};var qe=require("path");var ue=class{};var pe=class extends ue{runner=new ee;buildDockerEnvArgs(e){return[]}buildExtraVolumes(e){return[]}async scan(e,r,n,i,o){let s=await r.lookupOutputFileForWriting(this.getOutputFileKey()),a=(0,qe.dirname)(s),d=`/tmp/output/${(0,qe.basename)(s)}`,c=`${this.dockerImage}:${this.version||this.defaultVersion}`,p=`${a}:/tmp/output`,l=`${e.sbomFile}:/tmp/input.json`,u=this.buildExtraVolumes({outputDir:a,outputFile:s,sbomFile:e.sbomFile}),f=await this.runner.run({image:c,volumes:[p,l,...u],envArgs:this.buildDockerEnvArgs(i),args:this.buildDockerArgs({outputPath:d,verbose:i})});if(f.stdout&&o(` Scan log: ${f.stdout}`),f.stderr&&o(` Scan error: ${f.stderr}`),f.exitCode!==0)throw new Error(`${this.scannerLabel} scan failed with exit code ${f.exitCode}: ${f.stderr}`);o(` ${this.scannerLabel} output file: ${s}`);try{let g=await H(s);this.parseAndAdd(g,n)}catch(g){throw new Error(`${this.scannerLabel} scan results could not be read from '${s}': ${g}`,{cause:g})}}};var yr="anchore/grype",Xe=class t extends pe{constructor(r,n){super();this.version=r;this.cacheDir=n}version;cacheDir;dockerImage=yr;defaultVersion="latest";scannerLabel="Grype";async init(r){r&&console.log(`Initializing Grype DB in cache directory: ${this.cacheDir}`);let n=`${yr}:${this.version||this.defaultVersion}`,i=await new ee().run({image:n,volumes:[`${this.cacheDir}:/tmp/.cache`],envArgs:["-e","GRYPE_DB_CACHE_DIR=/tmp/.cache","-e","TMPDIR=/tmp"],args:["db","update"]});if(i.stdout&&console.log(` Grype DB Update: ${i.stdout}`),i.stderr&&console.log(` Grype DB Update error: ${i.stderr}`),i.exitCode!==0)throw new Error(`Grype DB update failed with exit code ${i.exitCode}: ${i.stderr}`)}getOutputFileKey(){return"grype-results"}buildExtraVolumes(r){return[`${this.cacheDir}:/tmp/.cache`]}buildDockerEnvArgs(r){return["-e","GRYPE_DB_CACHE_DIR=/tmp/.cache","-e","TMPDIR=/tmp","-e","GRYPE_DB_AUTO_UPDATE=false"]}buildDockerArgs(r){let n=["sbom:/tmp/input.json","-o","json","--file",r.outputPath,"--by-cve"];return r.verbose||n.push("--quiet"),n}parseAndAdd(r,n){if(r)for(let i of r.matches)n.addVulnerability(t.createVulnerability(i),"grype")}addVulnerabilities(r,n){this.parseAndAdd(n,r)}static createVulnerability(r){let n=r.vulnerability,i=nr(n.severity);return{id:n.id,severity:i,scannerSeverity:{grype:i},title:"",description:n.description,components:[U(r.artifact.purl)],detectedBy:["grype"],refs:[U(n.dataSource)]}}};var gr="aquasec/trivy",to="latest",ro="public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db",Je=class t extends pe{constructor(r,n,i){super();this.version=r;this.cacheDir=n;this.githubToken=i}version;cacheDir;githubToken;dockerImage=gr;defaultVersion=to;scannerLabel="Trivy";async init(r){let n=[];this.githubToken&&n.push("-e",`GITHUB_TOKEN=${this.githubToken}`);let i=["--db-repository",ro,"--cache-dir","/.cache","sbom","--download-db-only"];r||i.push("--quiet");let o=`${gr}:${this.version||this.defaultVersion}`,s=await new ee().run({image:o,volumes:[`${this.cacheDir}:/.cache`],envArgs:n,args:i});if(!s.stdout&&!s.stderr&&console.log(" Trivy DB Update: finished"),s.stdout&&console.log(` Trivy DB Update: ${s.stdout}`),s.stderr&&console.log(` Trivy DB Update error: ${s.stderr}`),s.exitCode!==0)throw new Error(`Trivy DB update failed with exit code ${s.exitCode}: ${s.stderr}`)}getOutputFileKey(){return"trivy-results"}buildExtraVolumes(r){return[`${this.cacheDir}:/.cache`]}buildDockerArgs(r){let n=["sbom","--cache-dir","/.cache","--format","json","--output",r.outputPath,"--skip-db-update","/tmp/input.json"];return r.verbose||n.push("--quiet"),n}parseAndAdd(r,n){if(r){for(let i of r.Results??[])if(i.Vulnerabilities)for(let o of i.Vulnerabilities)n.addVulnerability(t.createVulnerability(o),"trivy")}}addVulnerabilities(r,n){this.parseAndAdd(n,r)}static createVulnerability(r){let n=ir(r.Severity);return{id:r.VulnerabilityID,severity:n,scannerSeverity:{trivy:n},title:r.Title,description:r.Description,components:[U(r.PkgIdentifier.PURL)],detectedBy:["trivy"],refs:[U(r.PrimaryURL)]}}};var br=require("fs/promises");function Ot(t,e=""){return Sr(t,e,new Set,new Set)}function Sr(t,e="",r,n){let i=`${e}- ${t.purl}`;if(r.has(t.purl))return i+=" (cycle detected)",i;if(n.has(t.purl))return i+=" (deduplicated)",i;n.add(t.purl),r.add(t.purl);let o=r.size===1;for(let s of t.usedBy){let a=Sr(s,e+(o?" ":" "),r,n);a!==""&&(i+=`
10
- `,i+=a)}return r.delete(t.purl),i}var me=class t{constructor(e){this.sbom=e;for(let r of this.sbom.components||[]){let n={purl:U(r.purl),usedBy:[]};n.purl&&(this.purlToComponent.has(n.purl)||(this.purlToComponent.set(n.purl,n),this.sbomRefToComponent.set(r["bom-ref"],n)))}for(let r of this.sbom.dependencies||[]){let n=this.sbomRefToComponent.get(r.ref);if(n)for(let i of r.dependsOn||[]){let o=this.sbomRefToComponent.get(i);o&&!o.usedBy.includes(n)&&o.usedBy.push(n)}}}sbom;static createForSbom(e){return new t(e)}static printTree(e,r=""){return Ot(e,r)}sbomRefToComponent=new Map;purlToComponent=new Map;findUsagesOfComponent(e){if(!this.sbom)return{purl:e,usedBy:[]};let r=this.purlToComponent.get(e);return r?vr(r):{purl:e,usedBy:[]}}};function vr(t,e=new Set){let r={purl:t.purl,usedBy:[]};if(e.has(t.purl))return r;e.add(t.purl);for(let n of t.usedBy){let i=vr(n,new Set(e));r.usedBy.push(i)}return r}var fe=class t{constructor(e,r){this.filePath=e;this.sbom=r}filePath;sbom;static async fromFile(e){let r=await H(e);if(!r)throw new Error(`Could not read SBOM file '${e}'`);if(!r.components||r.components.length===0)throw new Error(`SBOM file '${e}' does not contain any components`);return new t(e,r)}get path(){return this.filePath}getComponents(){return this.sbom.components??[]}getExternalComponents(e=no){return this.getComponents().filter(e)}buildDependencyTree(){return me.createForSbom(this.sbom)}};function no(t){return!!t.purl}var We=class{components=new Map;has(e){return this.components.has(e)}update(e,r){for(let n of r)this.components.set(U(n.coordinates),n);for(let n of e)this.components.has(n)||this.components.set(n,{coordinates:n,description:"",reference:"",vulnerabilities:[]})}read(e){let r=[];for(let n of e){let i=this.components.get(n);i&&r.push(i)}return r}};var wr=128,io="https://api.guide.sonatype.com",Ge=class t{cache=new We;baseUrl;authHeader;constructor(e={}){this.baseUrl=e.baseUrl??io,e.user&&e.token&&(this.authHeader=xt(e.user,e.token))}async fetchVulnerableComponents(e,r){let n=new Set(e.map(m=>m.replace(/\?.*$/,"")));t.addSnapshotBaseCoordinates(n);let i=Array.from(n),o=i.filter(m=>!this.cache.has(m));r?.(` Sonatype OssIndex: ${o.length} packages to fetch, ${i.length-o.length} cache hits`);let s=this.authHeader?"/authorized":"",a=`${this.baseUrl}/api/v3${s}/component-report`;for(let m=0;m<o.length;m+=wr){let d=o.slice(m,m+wr),c=JSON.stringify({coordinates:d});r?.(` Sonatype OssIndex request ${a} with body: ${c}`);let p={"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"};this.authHeader&&(p.Authorization=this.authHeader);let u=await(await fetch(a,{method:"POST",headers:p,body:c})).json();Array.isArray(u)?this.cache.update(d,u):r?.(` Sonatype OssIndex Error: ${u.code} - ${u.message}`)}return this.cache.read(i).filter(m=>m.vulnerabilities.length>0)}static addSnapshotBaseCoordinates(e){let r=/(-SNAPSHOT|-\d{8}\.\d{6}-\d+)(?=(?:\?|$))/;for(let n of Array.from(e)){let i=n.replace(r,"");i!==n&&e.add(i)}}};var He=class t extends ue{client;constructor(e={}){super(),this.client=new Ge(e)}async init(){}async scan(e,r,n,i,o){let s=await r.lookupOutputFileForWriting("ossindex-results");try{let d=(await fe.fromFile(e.sbomFile)).getExternalComponents(l=>!!l.purl&&!oo(l)).map(l=>l.purl),c=i?l=>o(` [${e.name}] ${l}`):void 0,p=await this.client.fetchVulnerableComponents(d,c);await(0,br.writeFile)(s,JSON.stringify(p,null,2)),o(` Sonatype OssIndex output file: ${s}`),this.addVulnerabilities(n,p)}catch(a){throw new Error(`Sonatype OSS Index scan failed: ${a}`,{cause:a})}}addVulnerabilities(e,r){if(r)for(let n of r)for(let i of n.vulnerabilities)e.addVulnerability(t.createVulnerability(i,n.coordinates),"ossindex")}static createVulnerability(e,r){let n=U(e.reference),i=or(e.cvssScore);return{id:e.cve||e.id,severity:i,scannerSeverity:{ossindex:i},title:e.title,description:e.description,components:[U(r)],detectedBy:["ossindex"],refs:n?[n]:[]}}};function oo(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function so(t,e,r){switch(t.name){case"grype":return new Xe(t.version,e);case"trivy":return new Je(t.version,e,r.trivyGithubToken);case"ossindex":return new He({user:r.ossIndexApiUser,token:r.ossIndexApiToken,baseUrl:r.ossIndexBaseUrl})}}var Ke=class{scanners;constructor(e,r,n){this.scanners=e.map(i=>so(i,r,n))}async init(e){await Promise.all(this.scanners.map(r=>r.init(e)))}async scanProject(e,r,n,i,o){await Promise.all(this.scanners.map(s=>s.scan(e,r,n,i,o)))}};async function xr(t,e,r){await $e(t,async n=>{await n.read();let i=n.removeProductId(e,r);i==="emptied"?(console.info(`Remove ${e} from ${n.location} and delete file.`),await n.delete()):i==="changed"&&(console.info(`Remove ${e} from ${n.location}`),await n.write())})}var jr=require("fs/promises"),Dr=require("path");var Qe=class{data={hasError:!1,hasNewVuln:!1,hasNoLongerDetectedVuln:!1,cveDetails:new Map,vulnToProjects:new Map,noLongerDetectedVulnToProjects:new Map,projectToVulns:new Map,projectToNotLongerDetectedVulns:new Map,projectErrors:[],projectsToComponents:new Map};feed(e){let r=e.project,n=`${r.name}@${r.version}`;if(e.error&&(this.data.hasError=!0,this.data.projectErrors.push({project:n,error:e.error.message})),r.silent)return;let i=e.newVulns.filter(o=>!Ae(o.severity,r.minimumSeverity));for(let o of i){this.data.hasNewVuln=!0,this.mergeVulnDetails(o),this.data.vulnToProjects.has(o.id)||this.data.vulnToProjects.set(o.id,[]),this.data.projectToVulns.has(n)||this.data.projectToVulns.set(n,[]),this.data.projectsToComponents.has(n)||this.data.projectsToComponents.set(n,new Map),this.data.projectToVulns.get(n).push(o.id),this.data.vulnToProjects.get(o.id).push(n);for(let s of o.componentTree){if(!s.purl)continue;let a=this.data.projectsToComponents.get(n);a.has(s.purl)||a.set(s.purl,s)}}for(let o of e.noLongerDetectedVulns)this.data.hasNoLongerDetectedVuln=!0,this.data.noLongerDetectedVulnToProjects.has(o)||this.data.noLongerDetectedVulnToProjects.set(o,[]),this.data.projectToNotLongerDetectedVulns.has(n)||this.data.projectToNotLongerDetectedVulns.set(n,[]),this.data.projectToNotLongerDetectedVulns.get(n).push(o),this.data.noLongerDetectedVulnToProjects.get(o).push(n)}feedAll(e){for(let r of e.values())this.feed(r)}getData(){return this.data}toScanSummary(){let{data:e}=this;return{errors:e.projectErrors,vulnerabilities:Object.fromEntries(e.cveDetails),vulnerabilityToProject:Object.fromEntries(e.vulnToProjects.entries()),projectToVulnerability:Object.fromEntries(e.projectToVulns.entries()),projectsToComponents:Object.fromEntries(Array.from(e.projectsToComponents.entries()).map(([r,n])=>[r,Object.fromEntries(n.entries())])),noLongerDetectedVulnerabilities:Object.fromEntries(e.noLongerDetectedVulnToProjects)}}mergeVulnDetails(e){if(!this.data.cveDetails.has(e.id)){this.data.cveDetails.set(e.id,{id:e.id,title:e.title,severity:e.severity,description:e.description,components:e.components,refs:e.refs,vexLookupStatus:e.vexLookupStatus});return}let r=this.data.cveDetails.get(e.id);r.title=r.title||e.title,r.severity=Q(r.severity,e.severity)>=0?r.severity:e.severity,r.description=r.description||e.description,r.components=Pr(r.components,e.components),r.refs=Pr(r.refs,e.refs),r.vexLookupStatus=ao(r.vexLookupStatus,e.vexLookupStatus)}};function ao(t,e){return t==="missing-for-project"||e==="missing-for-project"?"missing-for-project":t??e}function Pr(t,e){return Array.from(new Set([...t,...e]))}var Ye=require("fs/promises"),Lr=require("path");var ze=class{constructor(e={}){this.options=e}options;summaryLogFile;async render(e){let{orderBy:r="CVE",reportNoLongerDetectedVulnerabilities:n=!0,reportCveDetails:i=!1,outputDirectory:o}=this.options;return o&&(this.summaryLogFile=(0,Lr.join)(o,"scan-summary.txt"),await(0,Ye.writeFile)(this.summaryLogFile,"","utf8")),await this.log("=== Scan summary ==="),e.projectErrors.length&&await this.logErrors(e.projectErrors),i&&await this.logCveDetails(e.cveDetails,e.projectsToComponents),r==="CVE"?await this.logOrderedByCve(e.vulnToProjects,e.cveDetails,n?e.noLongerDetectedVulnToProjects:new Map):await this.logOrderedByProject(e.projectToVulns,n?e.projectToNotLongerDetectedVulns:new Map,e.cveDetails),!e.hasError&&!e.hasNewVuln&&(!e.hasNoLongerDetectedVuln||!n)&&await this.log(" No issues found"),{hasError:e.hasError,hasNewVuln:e.hasNewVuln,hasNoLongerDetectedVuln:e.hasNoLongerDetectedVuln}}async log(e){console.log(e),this.summaryLogFile&&await(0,Ye.appendFile)(this.summaryLogFile,e+`
11
- `,"utf8")}async logErrors(e){await this.log(""),await this.log("- Errors during scan:");for(let{project:r,error:n}of e)await this.log(` - ${r}:`),await this.log(` Error: ${n}`)}async logOrderedByCve(e,r,n){let i=Array.from(e.keys()).sort(Ct(s=>r.get(s)));if(i.length){await this.log(""),await this.log("- New vulnerabilities:");for(let s of i){let a=e.get(s),m=r.get(s);await this.log(` - [${m.severity}] ${s}${kt(m)}`);for(let d of a.slice().sort())await this.log(` - ${d}`)}}let o=Array.from(n.keys()).sort();if(o.length){await this.log(""),await this.log("- Declared but no longer detected vulnerabilities:");for(let s of o){let a=n.get(s);await this.log(` - ${s}`);for(let m of a.slice().sort())await this.log(` - ${m}`)}}}async logOrderedByProject(e,r,n){let i=new Set([...Array.from(e.keys()),...Array.from(r.keys())]),o=Array.from(i.keys()).sort();if(o.length){await this.log(""),await this.log("- Vulnerabilities by project:");for(let s of o){await this.log(` - ${s}:`);let a=e.get(s)??[];for(let d of a.slice().sort(Ct(c=>n.get(c)))){let c=n.get(d);await this.log(` - [${c.severity}] ${d}${kt(c)}`)}let m=(r.get(s)??[]).slice().sort();for(let d of m)await this.log(` - ${d} (no longer detected)`)}}}async logCveDetails(e,r){if(e.size===0)return;await this.log(""),await this.log("- Vulnerability details:");let n=Array.from(e.keys()).sort(Ct(i=>e.get(i)));for(let i of n){let o=e.get(i);if(await this.log(` - [${o.severity}] ${o.id} - ${o.title||""}:${kt(o)}`),o.description){await this.log(" Description:");for(let s of o.description.split(/\r?\n/))await this.log(` ${s}`)}if(o.components.length){await this.log(" Components:");for(let s of o.components)await this.log(" - "+s);if(r){for(let s of o.components)for(let[a,m]of r.entries())if(m.has(s)){await this.log(` Usage Tree of ${s} by ${a} (as example):`),await this.log(me.printTree(m.get(s)," "));break}}}if(o.refs.length){await this.log(" Links:");for(let s of o.refs)await this.log(` - ${s}`)}}}};function Ct(t){return(e,r)=>{let n=Q(t(r).severity,t(e).severity);return n!==0?n:e.localeCompare(r)}}function kt(t){switch(t.vexLookupStatus){case"missing-for-project":return" (VEX entry missing)";case"missing-entirely":return" (VEX file missing)";default:return""}}async function Er(t,e){let r=new Qe;r.feedAll(t);let n=r.getData(),o=await new ze(e).render(n);if(e.outputDirectory){let s=(0,Dr.join)(e.outputDirectory,"scan-summary.json");await(0,jr.writeFile)(s,JSON.stringify(r.toScanSummary(),null,2),"utf8")}return o}var dt=require("fs/promises");var Ze=class{constructor(e){this.depProvider=e}depProvider;allById=new Map;getAllVulnIds(){return new Set(this.allById.keys())}getAllVulnerabilitiesSortedBySeverity(){let e=Array.from(this.allById.values());return e.sort((r,n)=>{let i=Q(r.severity,n.severity);return i===0?r.id.localeCompare(n.id):-i}),e}addVulnerability(e,r){let n=e.id,i=this.allById,o=e;if(!i.has(n))i.set(n,e),o=e;else{let s=i.get(n);s.title=s.title||e.title,s.severity=rr(s.severity,e.severity),s.scannerSeverity[r]=e.severity,s.detectedBy=Ft(s.detectedBy,r),s.components=Ft(s.components,e.components[0]),s.refs=Ft(s.refs,e.refs[0]),o=s}o.componentTree=o.components?.map(s=>this.depProvider.findUsagesOfComponent(s))}enhanceWithVexData(e){let r=[];for(let n of this.allById.values()){let i=e.newestVulnerabilityStatement(n.id,void 0,n.severity);if(!i){r.push({id:n.id,severity:n.severity,title:n.title,description:n.description,components:n.components??[],componentTree:n.componentTree??[],refs:n.refs});continue}n.vexStatement=i}return{unmatchedVulnerabilities:r}}};function Ft(t,e){return e==null?t:Array.from(new Set([...t,e]).values())}var oe=Te(Fi());var Ai=Te(Vi());var zt={kind:"external",status:"accepted"};function Ii(t,e){let r=new oe.SarifRunBuilder().initSimple({toolDriverName:`${e.name}@${e.version}`,toolDriverVersion:"0.0.1"}),n=new Date().toISOString().split("T")[0];r.run.tool.driver.fullDescription={text:`Security Scan from ${n}`},r.run.tool.driver.properties={"microsoft/qualityDomain":`Security Scan from ${n}`};for(let o of t){let s=sr(o.severity),a=o.id,m=Da(o.refs),d=new oe.SarifRuleBuilder().initSimple({ruleId:a,shortDescriptionText:o.title,fullDescriptionText:o.description,helpUri:m}),c=o.vexStatement,p,l="new",u="";c?(p=[{...zt}],l="updated",u=`--- INVESTIGATED (${c.status}) --- `,c.status==="under_investigation"&&(p[0].status="underReview",u="--- UNDER INVESTIGATION --- ")):Q(e.minimumSeverity,o.severity)>0?(p=[{...zt}],l="updated",u=`--- BELOW MINIMUM SEVERITY '${e.minimumSeverity}' ---`):e.silent&&(p=[{...zt}],l="updated",u="--- PROJECT SILENT ---"),Object.assign(d.rule,{name:`${u}[${o.severity}] - ${o.title.replace(`[${a}]`,"")}`,messageStrings:{default:{text:o.description,markdown:Ea(o,m,u)}},properties:{severity:o.severity,scanners:o.scannerSeverity,links:o.refs,tags:["cve","vulnerability","security",`severity_${o.severity.toLowerCase()}`]}}),r.addRule(d);for(let f of o.components){let g=new oe.SarifResultBuilder().initSimple({ruleId:a,level:s,messageText:`${a} [${o.severity}] - ${f}`});g.result.message.id="default",g.result.locations=[{logicalLocations:[{fullyQualifiedName:f}]}],g.result.baselineState=l,g.result.suppressions=p,r.addResult(g)}}let i=new oe.SarifBuilder;return i.addRun(r),i.buildSarifOutput()}function Da(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function Ea(t,e,r){let n=t.vexStatement,i=n?`
7
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:n,destStat:i}=Oe.checkPathsSync(t,e,"copy",r);if(Oe.checkParentPathsSync(t,n,e,"copy"),r.filter&&!r.filter(t,e))return;let o=De.dirname(e);return N.existsSync(o)||qo(o),an(i,t,e,r)}function an(t,e,r,n){let o=(n.dereference?N.statSync:N.lstatSync)(e);if(o.isDirectory())return Yo(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Wo(o,t,e,r,n);if(o.isSymbolicLink())return ts(t,e,r,n);throw o.isSocket()?new Error(`Cannot copy a socket file: ${e}`):o.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${e}`):new Error(`Unknown file: ${e}`)}function Wo(t,e,r,n,i){return e?Go(t,r,n,i):cn(t,r,n,i)}function Go(t,e,r,n){if(n.overwrite)return N.unlinkSync(r),cn(t,e,r,n);if(n.errorOnExist)throw new Error(`'${r}' already exists`)}function cn(t,e,r,n){return N.copyFileSync(e,r),n.preserveTimestamps&&Ho(t.mode,e,r),Ut(r,t.mode)}function Ho(t,e,r){return Ko(t)&&Qo(r,t),zo(e,r)}function Ko(t){return(t&128)===0}function Qo(t,e){return Ut(t,e|128)}function Ut(t,e){return N.chmodSync(t,e)}function zo(t,e){let r=N.statSync(t);return Xo(e,r.atime,r.mtime)}function Yo(t,e,r,n,i){return e?ln(r,n,i):Zo(t.mode,r,n,i)}function Zo(t,e,r,n){return N.mkdirSync(r),ln(e,r,n),Ut(r,t)}function ln(t,e,r){let n=N.opendirSync(t);try{let i;for(;(i=n.readSync())!==null;)es(i.name,t,e,r)}finally{n.closeSync()}}function es(t,e,r,n){let i=De.join(e,t),o=De.join(r,t);if(n.filter&&!n.filter(i,o))return;let{destStat:s}=Oe.checkPathsSync(i,o,"copy",n);return an(s,i,o,n)}function ts(t,e,r,n){let i=N.readlinkSync(e);if(n.dereference&&(i=De.resolve(process.cwd(),i)),t){let o;try{o=N.readlinkSync(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return N.symlinkSync(i,r);throw s}if(n.dereference&&(o=De.resolve(process.cwd(),o)),Oe.isSrcSubdir(i,o))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${o}'.`);if(Oe.isSrcSubdir(o,i))throw new Error(`Cannot overwrite '${o}' with '${i}'.`);return rs(i,r)}else return N.symlinkSync(i,r)}function rs(t,e){return N.unlinkSync(e),N.symlinkSync(t,e)}un.exports=Jo});var ot=y((fl,fn)=>{"use strict";var ns=O().fromPromise;fn.exports={copy:ns(sn()),copySync:pn()}});var Ce=y((ml,dn)=>{"use strict";var mn=he(),is=O().fromCallback;function os(t,e){mn.rm(t,{recursive:!0,force:!0},e)}function ss(t){mn.rmSync(t,{recursive:!0,force:!0})}dn.exports={remove:is(os),removeSync:ss}});var xn=y((dl,bn)=>{"use strict";var as=O().fromPromise,gn=M(),Sn=require("path"),vn=q(),wn=Ce(),hn=as(async function(e){let r;try{r=await gn.readdir(e)}catch{return vn.mkdirs(e)}return Promise.all(r.map(n=>wn.remove(Sn.join(e,n))))});function yn(t){let e;try{e=gn.readdirSync(t)}catch{return vn.mkdirsSync(t)}e.forEach(r=>{r=Sn.join(t,r),wn.removeSync(r)})}bn.exports={emptyDirSync:yn,emptydirSync:yn,emptyDir:hn,emptydir:hn}});var En=y((hl,jn)=>{"use strict";var cs=O().fromPromise,Pn=require("path"),Y=M(),Ln=q();async function ls(t){let e;try{e=await Y.stat(t)}catch{}if(e&&e.isFile())return;let r=Pn.dirname(t),n=null;try{n=await Y.stat(r)}catch(i){if(i.code==="ENOENT"){await Ln.mkdirs(r),await Y.writeFile(t,"");return}else throw i}n.isDirectory()?await Y.writeFile(t,""):await Y.readdir(r)}function us(t){let e;try{e=Y.statSync(t)}catch{}if(e&&e.isFile())return;let r=Pn.dirname(t);try{Y.statSync(r).isDirectory()||Y.readdirSync(r)}catch(n){if(n&&n.code==="ENOENT")Ln.mkdirsSync(r);else throw n}Y.writeFileSync(t,"")}jn.exports={createFile:cs(ls),createFileSync:us}});var Fn=y((yl,kn)=>{"use strict";var ps=O().fromPromise,Dn=require("path"),ne=M(),On=q(),{pathExists:fs}=re(),{areIdentical:Cn}=ce();async function ms(t,e){let r;try{r=await ne.lstat(e)}catch{}let n;try{n=await ne.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&Cn(n,r))return;let i=Dn.dirname(e);await fs(i)||await On.mkdirs(i),await ne.link(t,e)}function ds(t,e){let r;try{r=ne.lstatSync(e)}catch{}try{let o=ne.lstatSync(t);if(r&&Cn(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let n=Dn.dirname(e);return ne.existsSync(n)||On.mkdirsSync(n),ne.linkSync(t,e)}kn.exports={createLink:ps(ms),createLinkSync:ds}});var Vn=y((gl,Tn)=>{"use strict";var ie=require("path"),ke=M(),{pathExists:hs}=re(),ys=O().fromPromise;async function gs(t,e){if(ie.isAbsolute(t)){try{await ke.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=ie.dirname(e),n=ie.join(r,t);if(await hs(n))return{toCwd:n,toDst:t};try{await ke.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:ie.relative(r,t)}}function Ss(t,e){if(ie.isAbsolute(t)){if(!ke.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=ie.dirname(e),n=ie.join(r,t);if(ke.existsSync(n))return{toCwd:n,toDst:t};if(!ke.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:ie.relative(r,t)}}Tn.exports={symlinkPaths:ys(gs),symlinkPathsSync:Ss}});var Rn=y((Sl,In)=>{"use strict";var An=M(),vs=O().fromPromise;async function ws(t,e){if(e)return e;let r;try{r=await An.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function bs(t,e){if(e)return e;let r;try{r=An.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}In.exports={symlinkType:vs(ws),symlinkTypeSync:bs}});var $n=y((vl,_n)=>{"use strict";var xs=O().fromPromise,Mn=require("path"),X=M(),{mkdirs:Ps,mkdirsSync:Ls}=q(),{symlinkPaths:js,symlinkPathsSync:Es}=Vn(),{symlinkType:Ds,symlinkTypeSync:Os}=Rn(),{pathExists:Cs}=re(),{areIdentical:Nn}=ce();async function ks(t,e,r){let n;try{n=await X.lstat(e)}catch{}if(n&&n.isSymbolicLink()){let[a,f]=await Promise.all([X.stat(t),X.stat(e)]);if(Nn(a,f))return}let i=await js(t,e);t=i.toDst;let o=await Ds(i.toCwd,r),s=Mn.dirname(e);return await Cs(s)||await Ps(s),X.symlink(t,e,o)}function Fs(t,e,r){let n;try{n=X.lstatSync(e)}catch{}if(n&&n.isSymbolicLink()){let a=X.statSync(t),f=X.statSync(e);if(Nn(a,f))return}let i=Es(t,e);t=i.toDst,r=Os(i.toCwd,r);let o=Mn.dirname(e);return X.existsSync(o)||Ls(o),X.symlinkSync(t,e,r)}_n.exports={createSymlink:xs(ks),createSymlinkSync:Fs}});var Hn=y((wl,Gn)=>{"use strict";var{createFile:Bn,createFileSync:Un}=En(),{createLink:qn,createLinkSync:Xn}=Fn(),{createSymlink:Jn,createSymlinkSync:Wn}=$n();Gn.exports={createFile:Bn,createFileSync:Un,ensureFile:Bn,ensureFileSync:Un,createLink:qn,createLinkSync:Xn,ensureLink:qn,ensureLinkSync:Xn,createSymlink:Jn,createSymlinkSync:Wn,ensureSymlink:Jn,ensureSymlinkSync:Wn}});var st=y((bl,Kn)=>{function Ts(t,{EOL:e=`
8
+ `,finalEOL:r=!0,replacer:n=null,spaces:i}={}){let o=r?e:"";return JSON.stringify(t,n,i).replace(/\n/g,e)+o}function Vs(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Kn.exports={stringify:Ts,stripBom:Vs}});var Zn=y((xl,Yn)=>{var Se;try{Se=he()}catch{Se=require("fs")}var at=O(),{stringify:Qn,stripBom:zn}=st();async function As(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||Se,n="throws"in e?e.throws:!0,i=await at.fromCallback(r.readFile)(t,e);i=zn(i);let o;try{o=JSON.parse(i,e?e.reviver:null)}catch(s){if(n)throw s.message=`${t}: ${s.message}`,s;return null}return o}var Is=at.fromPromise(As);function Rs(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||Se,n="throws"in e?e.throws:!0;try{let i=r.readFileSync(t,e);return i=zn(i),JSON.parse(i,e.reviver)}catch(i){if(n)throw i.message=`${t}: ${i.message}`,i;return null}}async function Ms(t,e,r={}){let n=r.fs||Se,i=Qn(e,r);await at.fromCallback(n.writeFile)(t,i,r)}var Ns=at.fromPromise(Ms);function _s(t,e,r={}){let n=r.fs||Se,i=Qn(e,r);return n.writeFileSync(t,i,r)}Yn.exports={readFile:Is,readFileSync:Rs,writeFile:Ns,writeFileSync:_s}});var ti=y((Pl,ei)=>{"use strict";var ct=Zn();ei.exports={readJson:ct.readFile,readJsonSync:ct.readFileSync,writeJson:ct.writeFile,writeJsonSync:ct.writeFileSync}});var lt=y((Ll,ii)=>{"use strict";var $s=O().fromPromise,qt=M(),ri=require("path"),ni=q(),Bs=re().pathExists;async function Us(t,e,r="utf-8"){let n=ri.dirname(t);return await Bs(n)||await ni.mkdirs(n),qt.writeFile(t,e,r)}function qs(t,...e){let r=ri.dirname(t);qt.existsSync(r)||ni.mkdirsSync(r),qt.writeFileSync(t,...e)}ii.exports={outputFile:$s(Us),outputFileSync:qs}});var si=y((jl,oi)=>{"use strict";var{stringify:Xs}=st(),{outputFile:Js}=lt();async function Ws(t,e,r={}){let n=Xs(e,r);await Js(t,n,r)}oi.exports=Ws});var ci=y((El,ai)=>{"use strict";var{stringify:Gs}=st(),{outputFileSync:Hs}=lt();function Ks(t,e,r){let n=Gs(e,r);Hs(t,n,r)}ai.exports=Ks});var ui=y((Dl,li)=>{"use strict";var Qs=O().fromPromise,_=ti();_.outputJson=Qs(si());_.outputJsonSync=ci();_.outputJSON=_.outputJson;_.outputJSONSync=_.outputJsonSync;_.writeJSON=_.writeJson;_.writeJSONSync=_.writeJsonSync;_.readJSON=_.readJson;_.readJSONSync=_.readJsonSync;li.exports=_});var hi=y((Ol,di)=>{"use strict";var zs=M(),pi=require("path"),{copy:Ys}=ot(),{remove:mi}=Ce(),{mkdirp:Zs}=q(),{pathExists:ea}=re(),fi=ce();async function ta(t,e,r={}){let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=await fi.checkPaths(t,e,"move",r);await fi.checkParentPaths(t,i,e,"move");let s=pi.dirname(e);return pi.parse(s).root!==s&&await Zs(s),ra(t,e,n,o)}async function ra(t,e,r,n){if(!n){if(r)await mi(e);else if(await ea(e))throw new Error("dest already exists.")}try{await zs.rename(t,e)}catch(i){if(i.code!=="EXDEV")throw i;await na(t,e,r)}}async function na(t,e,r){return await Ys(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),mi(t)}di.exports=ta});var wi=y((Cl,vi)=>{"use strict";var gi=he(),Jt=require("path"),ia=ot().copySync,Si=Ce().removeSync,oa=q().mkdirpSync,yi=ce();function sa(t,e,r){r=r||{};let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=yi.checkPathsSync(t,e,"move",r);return yi.checkParentPathsSync(t,i,e,"move"),aa(e)||oa(Jt.dirname(e)),ca(t,e,n,o)}function aa(t){let e=Jt.dirname(t);return Jt.parse(e).root===e}function ca(t,e,r,n){if(n)return Xt(t,e,r);if(r)return Si(e),Xt(t,e,r);if(gi.existsSync(e))throw new Error("dest already exists.");return Xt(t,e,r)}function Xt(t,e,r){try{gi.renameSync(t,e)}catch(n){if(n.code!=="EXDEV")throw n;return la(t,e,r)}}function la(t,e,r){return ia(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),Si(t)}vi.exports=sa});var xi=y((kl,bi)=>{"use strict";var ua=O().fromPromise;bi.exports={move:ua(hi()),moveSync:wi()}});var Li=y((Fl,Pi)=>{"use strict";Pi.exports={...M(),...ot(),...xn(),...Hn(),...ui(),...q(),...xi(),...lt(),...re(),...Ce()}});var ji=y(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.EXTENSIONS_LANGUAGES=void 0;ut.EXTENSIONS_LANGUAGES={1:"Groff",2:"Groff",3:"Groff",4:"Groff",5:"Groff",6:"Groff",7:"Groff",8:"Groff",9:"Groff",abap:"ABAP",asc:"Public Key",ash:"AGS Script",ampl:"AMPL",mod:"XML",g4:"ANTLR",apib:"API Blueprint",apl:"APL",dyalog:"APL",asp:"ASP",asax:"ASP",ascx:"ASP",ashx:"ASP",asmx:"ASP",aspx:"ASP",axd:"ASP",dats:"ATS",hats:"ATS",sats:"ATS",as:"ActionScript",adb:"Ada",ada:"Ada",ads:"Ada",agda:"Agda",als:"Alloy",apacheconf:"ApacheConf",vhost:"Nginx",cls:"Visual Basic",applescript:"AppleScript",scpt:"AppleScript",arc:"Arc",ino:"Arduino",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aj:"AspectJ",asm:"Assembly",a51:"Assembly",inc:"SourcePawn",nasm:"Assembly",aug:"Augeas",ahk:"AutoHotkey",ahkl:"AutoHotkey",au3:"AutoIt",awk:"Awk",auk:"Awk",gawk:"Awk",mawk:"Awk",nawk:"Awk",bat:"Batchfile",cmd:"Batchfile",befunge:"Befunge",bison:"Bison",bb:"BlitzBasic",decls:"BlitzBasic",bmx:"BlitzMax",bsv:"Bluespec",boo:"Boo",b:"Limbo",bf:"HyPhy",brs:"Brightscript",bro:"Bro",c:"C",cats:"C",h:"Objective-C",idc:"C",w:"C",cs:"Smalltalk",cake:"CoffeeScript",cshtml:"C#",csx:"C#",cpp:"C++","c++":"C++",cc:"C++",cp:"Component Pascal",cxx:"C++","h++":"C++",hh:"Hack",hpp:"C++",hxx:"C++",inl:"C++",ipp:"C++",tcc:"C++",tpp:"C++","c-objdump":"C-ObjDump",chs:"C2hs Haskell",clp:"CLIPS",cmake:"CMake","cmake.in":"CMake",cob:"COBOL",cbl:"COBOL",ccp:"COBOL",cobol:"COBOL",cpy:"COBOL",css:"CSS",csv:"CSV",capnp:"Cap'n Proto",mss:"CartoCSS",ceylon:"Ceylon",chpl:"Chapel",ch:"xBase",ck:"ChucK",cirru:"Cirru",clw:"Clarion",icl:"Clean",dcl:"Clean",click:"Click",clj:"Clojure",boot:"Clojure",cl2:"Clojure",cljc:"Clojure",cljs:"Clojure","cljs.hl":"Clojure",cljscm:"Clojure",cljx:"Clojure",hic:"Clojure",coffee:"CoffeeScript",_coffee:"CoffeeScript",cjsx:"CoffeeScript",cson:"CoffeeScript",iced:"CoffeeScript",cfm:"ColdFusion",cfml:"ColdFusion",cfc:"ColdFusion CFC",lisp:"NewLisp",asd:"Common Lisp",cl:"OpenCL",l:"PicoLisp",lsp:"NewLisp",ny:"Common Lisp",podsl:"Common Lisp",sexp:"Common Lisp",cps:"Component Pascal",coq:"Coq",v:"Verilog",cppobjdump:"Cpp-ObjDump","c++-objdump":"Cpp-ObjDump","c++objdump":"Cpp-ObjDump","cpp-objdump":"Cpp-ObjDump","cxx-objdump":"Cpp-ObjDump",creole:"Creole",cr:"Crystal",feature:"Cucumber",cu:"Cuda",cuh:"Cuda",cy:"Cycript",pyx:"Cython",pxd:"Cython",pxi:"Cython",d:"Makefile",di:"D","d-objdump":"D-ObjDump",com:"DIGITAL Command Language",dm:"DM",zone:"DNS Zone",arpa:"DNS Zone",darcspatch:"Darcs Patch",dpatch:"Darcs Patch",dart:"Dart",diff:"Diff",patch:"Diff",dockerfile:"Dockerfile",djs:"Dogescript",dylan:"Dylan",dyl:"Dylan",intr:"Dylan",lid:"Dylan",E:"E",ecl:"ECLiPSe",eclxml:"ECL",sch:"KiCad",brd:"KiCad",epj:"Ecere Projects",e:"Eiffel",ex:"Elixir",exs:"Elixir",elm:"Elm",el:"Emacs Lisp",emacs:"Emacs Lisp","emacs.desktop":"Emacs Lisp",em:"EmberScript",emberscript:"EmberScript",erl:"Erlang",es:"JavaScript",escript:"Erlang",hrl:"Erlang",xrl:"Erlang",yrl:"Erlang",fs:"GLSL",fsi:"F#",fsx:"F#",fx:"HLSL",flux:"FLUX",f90:"FORTRAN",f:"Forth",f03:"FORTRAN",f08:"FORTRAN",f77:"FORTRAN",f95:"FORTRAN",for:"Forth",fpp:"FORTRAN",factor:"Factor",fy:"Fancy",fancypack:"Fancy",fan:"Fantom","eam.fs":"Formatted",fth:"Forth","4th":"Forth",forth:"Forth",fr:"Text",frt:"Forth",ftl:"FreeMarker",g:"GAP",gco:"G-code",gcode:"G-code",gms:"GAMS",gap:"GAP",gd:"GDScript",gi:"GAP",tst:"Scilab",s:"GAS",ms:"MAXScript",glsl:"GLSL",fp:"GLSL",frag:"JavaScript",frg:"GLSL",fsh:"GLSL",fshader:"GLSL",geo:"GLSL",geom:"GLSL",glslv:"GLSL",gshader:"GLSL",shader:"GLSL",vert:"GLSL",vrx:"GLSL",vsh:"GLSL",vshader:"GLSL",gml:"XML",kid:"Genshi",ebuild:"Gentoo Ebuild",eclass:"Gentoo Eclass",po:"Gettext Catalog",pot:"Gettext Catalog",glf:"Glyph",gp:"Gnuplot",gnu:"Gnuplot",gnuplot:"Gnuplot",plot:"Gnuplot",plt:"Gnuplot",go:"Go",golo:"Golo",gs:"JavaScript",gst:"Gosu",gsx:"Gosu",vark:"Gosu",grace:"Grace",gradle:"Gradle",gf:"Grammatical Framework",graphql:"GraphQL",dot:"Graphviz (DOT)",gv:"Graphviz (DOT)",man:"Groff","1in":"Groff","1m":"Groff","1x":"Groff","3in":"Groff","3m":"Groff","3qt":"Groff","3x":"Groff",me:"Groff",n:"Nemerle",rno:"Groff",roff:"Groff",groovy:"Groovy",grt:"Groovy",gtpl:"Groovy",gvy:"Groovy",gsp:"Groovy Server Pages",hcl:"HCL",tf:"HCL",hlsl:"HLSL",fxh:"HLSL",hlsli:"HLSL",html:"HTML",htm:"HTML","html.hl":"HTML",st:"Smalltalk",xht:"HTML",xhtml:"HTML",mustache:"HTML+Django",jinja:"HTML+Django",eex:"HTML+EEX",erb:"HTML+ERB","erb.deface":"HTML+ERB",phtml:"HTML+PHP",http:"HTTP",php:"PHP",haml:"Haml","haml.deface":"Haml",handlebars:"Handlebars",hbs:"Handlebars",hb:"Harbour",hs:"Haskell",hsc:"Haskell",hx:"Haxe",hxsl:"Haxe",hy:"Hy",pro:"QMake",dlm:"IDL",ipf:"IGOR Pro",ini:"INI",cfg:"INI",prefs:"INI",properties:"INI",irclog:"IRC log",weechatlog:"IRC log",idr:"Idris",lidr:"Idris",ni:"Inform 7",i7x:"Inform 7",iss:"Inno Setup",io:"Io",ik:"Ioke",thy:"Isabelle",ijs:"J",flex:"JFlex",jflex:"JFlex",json:"JSON",geojson:"JSON",lock:"JSON",topojson:"JSON",json5:"JSON5",jsonld:"JSONLD",jq:"JSONiq",jsx:"JSX",jade:"Jade",j:"Objective-J",java:"Java",jsp:"Java Server Pages",js:"JavaScript",_js:"JavaScript",bones:"JavaScript",es6:"JavaScript",jake:"JavaScript",jsb:"JavaScript",jscad:"JavaScript",jsfl:"JavaScript",jsm:"JavaScript",jss:"JavaScript",njs:"JavaScript",pac:"JavaScript",sjs:"JavaScript",ssjs:"JavaScript","sublime-build":"JavaScript","sublime-commands":"JavaScript","sublime-completions":"JavaScript","sublime-keymap":"JavaScript","sublime-macro":"JavaScript","sublime-menu":"JavaScript","sublime-mousemap":"JavaScript","sublime-project":"JavaScript","sublime-settings":"JavaScript","sublime-theme":"JavaScript","sublime-workspace":"JavaScript",sublime_metrics:"JavaScript",sublime_session:"JavaScript",xsjs:"JavaScript",xsjslib:"JavaScript",jl:"Julia",ipynb:"Jupyter Notebook",krl:"KRL",kicad_pcb:"KiCad",kit:"Kit",kt:"Kotlin",ktm:"Kotlin",kts:"Kotlin",lfe:"LFE",ll:"LLVM",lol:"LOLCODE",lsl:"LSL",lslp:"LSL",lvproj:"LabVIEW",lasso:"Lasso",las:"Lasso",lasso8:"Lasso",lasso9:"Lasso",ldml:"Lasso",latte:"Latte",lean:"Lean",hlean:"Lean",less:"Less",lex:"Lex",ly:"LilyPond",ily:"LilyPond",m:"Objective-C",ld:"Linker Script",lds:"Linker Script",liquid:"Liquid",lagda:"Literate Agda",litcoffee:"Literate CoffeeScript",lhs:"Literate Haskell",ls:"LoomScript",_ls:"LiveScript",xm:"Logos",x:"Logos",xi:"Logos",lgt:"Logtalk",logtalk:"Logtalk",lookml:"LookML",lua:"Lua",fcgi:"Shell",nse:"Lua",pd_lua:"Lua",rbxs:"Lua",wlua:"Lua",mumps:"M",m4:"M4Sugar",mcr:"MAXScript",mtml:"MTML",muf:"MUF",mak:"Makefile",mk:"Makefile",mkfile:"Makefile",mako:"Mako",mao:"Mako",md:"Markdown",markdown:"Markdown",mkd:"Markdown",mkdn:"Markdown",mkdown:"Markdown",ron:"Markdown",mask:"Mask",mathematica:"Mathematica",cdf:"Mathematica",ma:"Mathematica",mt:"Mathematica",nb:"Text",nbp:"Mathematica",wl:"Mathematica",wlt:"Mathematica",matlab:"Matlab",maxpat:"Max",maxhelp:"Max",maxproj:"Max",mxt:"Max",pat:"Max",mediawiki:"MediaWiki",wiki:"MediaWiki",moo:"Moocode",metal:"Metal",minid:"MiniD",druby:"Mirah",duby:"Mirah",mir:"Mirah",mirah:"Mirah",mo:"Modelica",mms:"Module Management System",mmk:"Module Management System",monkey:"Monkey",moon:"MoonScript",myt:"Myghty",ncl:"Text",nl:"NewLisp",nsi:"NSIS",nsh:"NSIS",axs:"NetLinx",axi:"NetLinx","axs.erb":"NetLinx+ERB","axi.erb":"NetLinx+ERB",nlogo:"NetLogo",nginxconf:"Nginx",nim:"Nimrod",nimrod:"Nimrod",ninja:"Ninja",nit:"Nit",nix:"Nix",nu:"Nu",numpy:"NumPy",numpyw:"NumPy",numsc:"NumPy",ml:"OCaml",eliom:"OCaml",eliomi:"OCaml",ml4:"OCaml",mli:"OCaml",mll:"OCaml",mly:"OCaml",objdump:"ObjDump",mm:"XML",sj:"Objective-J",omgrofl:"Omgrofl",opa:"Opa",opal:"Opal",opencl:"OpenCL",p:"OpenEdge ABL",scad:"OpenSCAD",org:"Org",ox:"Ox",oxh:"Ox",oxo:"Ox",oxygene:"Oxygene",oz:"Oz",pwn:"PAWN",aw:"PHP",ctp:"PHP",php3:"PHP",php4:"PHP",php5:"PHP",phps:"PHP",phpt:"PHP",pls:"PLSQL",pck:"PLSQL",pkb:"PLSQL",pks:"PLSQL",plb:"PLSQL",plsql:"PLSQL",sql:"SQLPL",pov:"POV-Ray SDL",pan:"Pan",psc:"Papyrus",parrot:"Parrot",pasm:"Parrot Assembly",pir:"Parrot Internal Representation",pas:"Pascal",dfm:"Pascal",dpr:"Pascal",lpr:"Pascal",pp:"Puppet",pl:"Prolog",al:"Perl",cgi:"Shell",perl:"Perl",ph:"Perl",plx:"Perl",pm:"Perl6",pod:"Pod",psgi:"Perl",t:"Turing","6pl":"Perl6","6pm":"Perl6",nqp:"Perl6",p6:"Perl6",p6l:"Perl6",p6m:"Perl6",pl6:"Perl6",pm6:"Perl6",pkl:"Pickle",pig:"PigLatin",pike:"Pike",pmod:"Pike",pogo:"PogoScript",pony:"Pony",ps:"PostScript",eps:"PostScript",ps1:"PowerShell",psd1:"PowerShell",psm1:"PowerShell",pde:"Processing",prolog:"Prolog",yap:"Prolog",spin:"Propeller Spin",proto:"Protocol Buffer",pub:"Public Key",pd:"Pure Data",pb:"PureBasic",pbi:"PureBasic",purs:"PureScript",py:"Python",bzl:"Python",gyp:"Python",lmi:"Python",pyde:"Python",pyp:"Python",pyt:"Python",pyw:"Python",rpy:"Ren'Py",tac:"Python",wsgi:"Python",xpy:"Python",pytb:"Python traceback",qml:"QML",qbs:"QML",pri:"QMake",r:"Rebol",rd:"R",rsx:"R",raml:"RAML",rdoc:"RDoc",rbbas:"REALbasic",rbfrm:"REALbasic",rbmnu:"REALbasic",rbres:"REALbasic",rbtbar:"REALbasic",rbuistate:"REALbasic",rhtml:"RHTML",rmd:"RMarkdown",rkt:"Racket",rktd:"Racket",rktl:"Racket",scrbl:"Racket",rl:"Ragel in Ruby Host",raw:"Raw token data",reb:"Rebol",r2:"Rebol",r3:"Rebol",rebol:"Rebol",red:"Red",reds:"Red",cw:"Redcode",rs:"Rust",rsh:"RenderScript",robot:"RobotFramework",rg:"Rouge",rb:"Ruby",builder:"Ruby",gemspec:"Ruby",god:"Ruby",irbrc:"Ruby",jbuilder:"Ruby",mspec:"Ruby",pluginspec:"XML",podspec:"Ruby",rabl:"Ruby",rake:"Ruby",rbuild:"Ruby",rbw:"Ruby",rbx:"Ruby",ru:"Ruby",ruby:"Ruby",thor:"Ruby",watchr:"Ruby","rs.in":"Rust",sas:"SAS",scss:"SCSS",smt2:"SMT",smt:"SMT",sparql:"SPARQL",rq:"SPARQL",sqf:"SQF",hqf:"SQF",cql:"SQL",ddl:"SQL",prc:"SQL",tab:"SQL",udf:"SQL",viw:"SQL",db2:"SQLPL",ston:"STON",svg:"SVG",sage:"Sage",sagews:"Sage",sls:"Scheme",sass:"Sass",scala:"Scala",sbt:"Scala",sc:"SuperCollider",scaml:"Scaml",scm:"Scheme",sld:"Scheme",sps:"Scheme",ss:"Scheme",sci:"Scilab",sce:"Scilab",self:"Self",sh:"Shell",bash:"Shell",bats:"Shell",command:"Shell",ksh:"Shell","sh.in":"Shell",tmux:"Shell",tool:"Shell",zsh:"Shell","sh-session":"ShellSession",shen:"Shen",sl:"Slash",slim:"Slim",smali:"Smali",tpl:"Smarty",sp:"SourcePawn",sma:"SourcePawn",nut:"Squirrel",stan:"Stan",ML:"Standard ML",fun:"Standard ML",sig:"Standard ML",sml:"Standard ML",do:"Stata",ado:"Stata",doh:"Stata",ihlp:"Stata",mata:"Stata",matah:"Stata",sthlp:"Stata",styl:"Stylus",scd:"SuperCollider",swift:"Swift",sv:"SystemVerilog",svh:"SystemVerilog",vh:"SystemVerilog",toml:"TOML",txl:"TXL",tcl:"Tcl",adp:"Tcl",tm:"Tcl",tcsh:"Tcsh",csh:"Tcsh",tex:"TeX",aux:"TeX",bbx:"TeX",bib:"TeX",cbx:"TeX",dtx:"TeX",ins:"TeX",lbx:"TeX",ltx:"TeX",mkii:"TeX",mkiv:"TeX",mkvi:"TeX",sty:"TeX",toc:"TeX",tea:"Tea",txt:"Text",no:"Text",textile:"Textile",thrift:"Thrift",tu:"Turing",ttl:"Turtle",twig:"Twig",ts:"TypeScript",tsx:"TypeScript",upc:"Unified Parallel C",anim:"Unity3D Asset",asset:"Unity3D Asset",mat:"Unity3D Asset",meta:"Unity3D Asset",prefab:"Unity3D Asset",unity:"Unity3D Asset",uno:"Uno",uc:"UnrealScript",ur:"UrWeb",urs:"UrWeb",vcl:"VCL",vhdl:"VHDL",vhd:"VHDL",vhf:"VHDL",vhi:"VHDL",vho:"VHDL",vhs:"VHDL",vht:"VHDL",vhw:"VHDL",vala:"Vala",vapi:"Vala",veo:"Verilog",vim:"VimL",vb:"Visual Basic",bas:"Visual Basic",frm:"Visual Basic",frx:"Visual Basic",vba:"Visual Basic",vbhtml:"Visual Basic",vbs:"Visual Basic",volt:"Volt",vue:"Vue",owl:"Web Ontology Language",webidl:"WebIDL",x10:"X10",xc:"XC",xml:"XML",ant:"XML",axml:"XML",ccxml:"XML",clixml:"XML",cproject:"XML",csl:"XML",csproj:"XML",ct:"XML",dita:"XML",ditamap:"XML",ditaval:"XML","dll.config":"XML",dotsettings:"XML",filters:"XML",fsproj:"XML",fxml:"XML",glade:"XML",grxml:"XML",iml:"XML",ivy:"XML",jelly:"XML",jsproj:"XML",kml:"XML",launch:"XML",mdpolicy:"XML",mxml:"XML",nproj:"XML",nuspec:"XML",odd:"XML",osm:"XML",plist:"XML",props:"XML",ps1xml:"XML",psc1:"XML",pt:"XML",rdf:"XML",rss:"XML",scxml:"XML",srdf:"XML",storyboard:"XML",stTheme:"XML","sublime-snippet":"XML",targets:"XML",tmCommand:"XML",tml:"XML",tmLanguage:"XML",tmPreferences:"XML",tmSnippet:"XML",tmTheme:"XML",ui:"XML",urdf:"XML",ux:"XML",vbproj:"XML",vcxproj:"XML",vssettings:"XML",vxml:"XML",wsdl:"XML",wsf:"XML",wxi:"XML",wxl:"XML",wxs:"XML",x3d:"XML",xacro:"XML",xaml:"XML",xib:"XML",xlf:"XML",xliff:"XML",xmi:"XML","xml.dist":"XML",xproj:"XML",xsd:"XML",xul:"XML",zcml:"XML","xsp-config":"XPages","xsp.metadata":"XPages",xpl:"XProc",xproc:"XProc",xquery:"XQuery",xq:"XQuery",xql:"XQuery",xqm:"XQuery",xqy:"XQuery",xs:"XS",xslt:"XSLT",xsl:"XSLT",xojo_code:"Xojo",xojo_menu:"Xojo",xojo_report:"Xojo",xojo_script:"Xojo",xojo_toolbar:"Xojo",xojo_window:"Xojo",xtend:"Xtend",yml:"YAML",reek:"YAML",rviz:"YAML","sublime-syntax":"YAML",syntax:"YAML",yaml:"YAML","yaml-tmlanguage":"YAML",yang:"YANG",y:"Yacc",yacc:"Yacc",yy:"Yacc",zep:"Zephir",zimpl:"Zimpl",zmpl:"Zimpl",zpl:"Zimpl",desktop:"desktop","desktop.in":"desktop",ec:"eC",eh:"eC",edn:"edn",fish:"fish",mu:"mupad",nc:"nesC",ooc:"ooc",rst:"reStructuredText",rest:"reStructuredText","rest.txt":"reStructuredText","rst.txt":"reStructuredText",wisp:"wisp",prg:"xBase",prw:"xBase"}});var Fe=y(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.setOptionValues=pa;function pa(t,e){for(let r of Object.keys(t))t[r]!==void 0&&(e[r]=t[r]);return e}});var Di=y(J=>{"use strict";var fa=J&&J.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,i)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),ma=J&&J.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),da=J&&J.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),i=0;i<n.length;i++)n[i]!=="default"&&fa(r,e,n[i]);return ma(r,e),r}})();Object.defineProperty(J,"__esModule",{value:!0});J.SarifBuilder=void 0;var Ei=da(Li()),ha=ji(),ya=Fe(),Gt=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,ya.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();Ei.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await Ei.writeFile(e,r,"utf8")}buildSarifOutput(){return this.log.runs=this.log.runs.map(e=>this.completeRunFields(e)),this.log}buildSarifJsonString(e={indent:!1}){this.buildSarifOutput();let r=e.indent?JSON.stringify(this.log,null,2):JSON.stringify(this.log);if(r.includes("SARIF_BUILDER_INVALID"))throw new Error("Your SARIF log is invalid, please solve SARIF_BUILDER_INVALID messages");return r}completeRunFields(e){var r,n,i,o,s,a;e.artifacts=e.artifacts||[];let f=new Set(e.artifacts.map(p=>{var l;return(l=p?.location)===null||l===void 0?void 0:l.uri}).filter(Boolean));for(let p of e.results||[])for(let l of p.locations||[]){let u=(n=(r=l?.physicalLocation)===null||r===void 0?void 0:r.artifactLocation)===null||n===void 0?void 0:n.uri;if(u&&!f.has(u)){let m=u.lastIndexOf("."),g=m!==-1?u.slice(m+1):"",v=ha.EXTENSIONS_LANGUAGES[g]||"unknown";e.artifacts.push({sourceLanguage:v,location:{uri:u}}),f.add(u)}}let d=new Map;e.artifacts.forEach((p,l)=>{var u;let m=(u=p?.location)===null||u===void 0?void 0:u.uri;m&&d.set(m,l)});let c=new Map;(((o=(i=e?.tool)===null||i===void 0?void 0:i.driver)===null||o===void 0?void 0:o.rules)||[]).forEach((p,l)=>{c.set(p.id,l)});for(let p of e.results||[]){if(p.ruleId){let l=c.get(p.ruleId);l!==void 0&&(p.ruleIndex=l)}if(p.locations)for(let l of p.locations){let u=(a=(s=l?.physicalLocation)===null||s===void 0?void 0:s.artifactLocation)===null||a===void 0?void 0:a.uri;if(u){let m=d.get(u);m!==void 0&&(l.physicalLocation.artifactLocation.index=m)}}}return e}};J.SarifBuilder=Gt});var Oi=y(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.SarifResultBuilder=void 0;var ga=Fe(),Ht=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,ga.setOptionValues)(e,this.result)}initSimple(e){if(this.setLevel(e.level),this.setMessageText(e.messageText),this.setRuleId(e.ruleId),e.fileUri&&this.setLocationArtifactUri({uri:e.fileUri}),e.startLine!==null&&e.startLine!==void 0){let r={startLine:e.startLine,startColumn:e.startColumn||1,endLine:e.endLine||e.startLine,endColumn:e.endColumn||1};if(e.startLine===0||e.startColumn===0||e.endLine===0||e.endColumn===0)throw new Error("Region limit can not be 0 (minimum line 1 or column 1) in "+JSON.stringify(e));this.setLocationRegion(r)}return this}setLevel(e){this.result.level=e}setMessageText(e){this.result.message.text=e}setRuleId(e){this.result.ruleId=e}setLocationRegion(e){this.manageInitPhysicalLocation(),this.result.locations[0].physicalLocation.region=e}setLocationArtifactUri(e){this.manageInitPhysicalLocation(),this.result.locations[0].physicalLocation.artifactLocation=e}manageInitLocation(){var e,r;!((r=(e=this.result)===null||e===void 0?void 0:e.locations)===null||r===void 0)&&r.length||(this.result.locations=[{}])}manageInitPhysicalLocation(){this.manageInitLocation(),!this.result.locations[0].physicalLocation&&(this.result.locations[0].physicalLocation={})}};pt.SarifResultBuilder=Ht});var Ci=y(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});ft.SarifRuleBuilder=void 0;var Sa=Fe(),Kt=class{constructor(e={}){this.rule={id:"SARIF_BUILDER_INVALID: Please send the rule identifier in id property, or call setRuleId(ruleId)",shortDescription:{text:"SARIF_BUILDER_INVALID: Please send the rule text in shortDescription.text property, or call setShortDescriptionText(text)"}},(0,Sa.setOptionValues)(e,this.rule)}initSimple(e){return this.setRuleId(e.ruleId),e.shortDescriptionText&&this.setShortDescriptionText(e.shortDescriptionText),e.fullDescriptionText&&this.setFullDescriptionText(e.fullDescriptionText),e.helpUri&&this.setHelpUri(e.helpUri),this}setRuleId(e){this.rule.id=e}setShortDescriptionText(e){this.rule.shortDescription.text=e}setFullDescriptionText(e){this.rule.fullDescription=this.rule.fullDescription||{text:""},this.rule.fullDescription.text=e}setHelpUri(e){this.rule.helpUri=e}};ft.SarifRuleBuilder=Kt});var ki=y(mt=>{"use strict";Object.defineProperty(mt,"__esModule",{value:!0});mt.SarifRunBuilder=void 0;var va=Fe(),Qt=class{constructor(e={}){this.run={tool:{driver:{name:process.env.npm_package_name||"SARIF_BUILDER_INVALID: Please send the tool name in tool.driver.name property, or call setToolName(name)",rules:[]}},results:[]},(0,va.setOptionValues)(e,this.run)}initSimple(e){return this.setToolDriverName(e.toolDriverName),this.setToolDriverVersion(e.toolDriverVersion),e.url&&this.setToolDriverUri(e.url),this}addRule(e){this.run.tool.driver.rules.push(e.rule)}addResult(e){this.run.results.push(e.result)}setToolDriverName(e){this.run.tool.driver.name=e}setToolDriverVersion(e){this.run.tool.driver.version=e}setToolDriverUri(e){this.run.tool.driver.informationUri=e}};mt.SarifRunBuilder=Qt});var Fi=y(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.SarifResultBuilder=W.SarifRuleBuilder=W.SarifRunBuilder=W.SarifBuilder=void 0;var wa=Di();Object.defineProperty(W,"SarifBuilder",{enumerable:!0,get:function(){return wa.SarifBuilder}});var ba=Oi();Object.defineProperty(W,"SarifResultBuilder",{enumerable:!0,get:function(){return ba.SarifResultBuilder}});var xa=Ci();Object.defineProperty(W,"SarifRuleBuilder",{enumerable:!0,get:function(){return xa.SarifRuleBuilder}});var Pa=ki();Object.defineProperty(W,"SarifRunBuilder",{enumerable:!0,get:function(){return Pa.SarifRunBuilder}})});var Vi=y((_l,Ti)=>{"use strict";var La=/["'&<>]/;Ti.exports=ja;function ja(t){var e=""+t,r=La.exec(e);if(!r)return e;var n,i="",o=0,s=0;for(o=r.index;o<e.length;o++){switch(e.charCodeAt(o)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}s!==o&&(i+=e.substring(s,o)),s=o+1,i+=n}return s!==o?i+e.substring(s,o):i}});var Yt=require("fs/promises");var Z=Te(require("path")),Pt=require("fs/promises");var B=require("fs/promises"),vt=require("path");async function H(t){try{return await se(t)?JSON.parse(await(0,B.readFile)(t,{encoding:"utf-8"})):void 0}catch(e){throw new Error(`Error reading JSON file ${t}: ${e}`,{cause:e})}}async function wt(t,e){let r=JSON.stringify(e,null,4)+`
9
+ `,n=await Xi(t,r);await(0,B.writeFile)(t,n,{encoding:"utf-8"})}function U(t){return t?t.replace(/\?.*$/,""):""}async function se(t){try{return await(0,B.access)(t,B.constants.F_OK),!0}catch{return!1}}async function bt(t){let e=(0,vt.resolve)(t),r=await(0,B.readdir)(e,{withFileTypes:!0});for(let n of r){let i=(0,vt.resolve)(n.parentPath,n.name);n.isDirectory()?await bt(i):await(0,B.rm)(i)}await(0,B.rmdir)(e)}function xt(t,e){return`Basic ${Buffer.from(`${t}:${e}`).toString("base64")}`}async function be(t,e){let r=e?.user&&e?.pw?{Authorization:xt(e.user,e.pw)}:{},n=await fetch(t,{headers:r});if(!n.ok){let i="";try{i=await n.text()}catch(o){i=`${o}`}throw new Error(`Failed to fetch: ${t}: ${n.status} - ${n.statusText}: ${i}`)}return n}async function Xi(t,e){let r=await Wi();if(!r)return e;let n=await r.resolveConfig(t);return n?await r.format(e,{...n,filepath:t}):e}var Ji;function Wi(){return Ji??=import("prettier").catch(()=>{})}var Ve={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4},K=["UNKNOWN","LOW","MEDIUM","HIGH","CRITICAL"];function Q(t,e){return Ve[t]-Ve[e]}function rr(t,e){return Q(t,e)>=0?t:e}function Ae(t,e){return Ve[t]<Ve[e]}function nr(t){switch(t){case"Negligible":case"Low":return"LOW";case"Medium":return"MEDIUM";case"High":return"HIGH";case"Critical":return"CRITICAL";default:return"UNKNOWN"}}function ir(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}function or(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function sr(t){switch(t){case"CRITICAL":case"HIGH":return"error";case"MEDIUM":case"LOW":return"warning";default:return"note"}}var Lt=class t{constructor(e){this.workingDir=e}workingDir;static DEFAULT_MAVEN_REPO="https://repository.conterra.de/repository/maven-mirror-ct";static DEFAULT_VEX_SUBDIR="input/vex";static DEFAULT_OUT_SUBDIR="output";static DEFAULT_CACHE_SUBDIR="cache";static DEFAULT_SCANNERS=["grype","trivy","ossindex"];normalize(e,r){let n=e.findNoLongerDetectedVulnerabilitiesOnlyForSnapshots??!1;return{projectConfigFileLocation:r,onNewVulnerabilities:e.onNewVulnerabilities??(e.failOnNewVulnerabilities?"fail":"warn"),onNoLongerDetectedVulnerabilities:e.onNoLongerDetectedVulnerabilities??"ignore",reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities??!0,consoleReport:e.consoleReport??"BY_PROJECT_DETAILED",createSubDirsForProject:e.createSubDirsForProject??!0,mavenRepo:e.mavenRepo??t.DEFAULT_MAVEN_REPO,vexUrls:e.vexUrls??[],vexDir:this.resolvePath(e.vexDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_VEX_SUBDIR),outDir:this.resolvePath(e.outDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_OUT_SUBDIR),cacheDir:this.resolvePath(e.cacheDir)??(0,Z.resolve)(this.workingDir,t.DEFAULT_CACHE_SUBDIR),scanners:this.normalizeScanners(e.scanners,r),projects:this.normalizeProjects(e.projects??[],n)}}normalizeScanners(e,r){return(e??t.DEFAULT_SCANNERS).map(i=>{if(typeof i!="string")throw new Error(`Invalid scanner name '${String(i)}' in configuration file '${r}'`);let o=i.split("@");if(o.length>2)throw new Error(`Invalid scanner name '${i}' in configuration file '${r}'`);return{name:o[0],version:o[1]??""}})}normalizeProjects(e,r){return e.map(n=>{let i=n;if(!i.name)throw new Error("Project name is missing on entry: "+JSON.stringify(i));if(!i.version)throw new Error("Project version is missing on entry: "+JSON.stringify(i));if(!i.purl)throw new Error("Project purl is missing on entry: "+JSON.stringify(i));let o={...i,purlAliases:i.purlAliases??[],enabled:i.enabled??!0,silent:i.silent??!1,minimumSeverity:i.minimumSeverity??"UNKNOWN"};return o.sbomFile?{...o,sbomFile:this.resolvePath(o.sbomFile)??o.sbomFile}:{...o,detectNoLongerUsedVulnerabilities:r?o.purl.endsWith("-SNAPSHOT"):!0}})}resolvePath(e){if(e)return Z.default.isAbsolute(e)?e:(0,Z.resolve)(this.workingDir,e)}},xe=class{constructor(e){this.workingDir=e;this.normalizer=new Lt(e)}workingDir;normalizer;projectConfigCache;async loadProjectConfig(){return this.projectConfigCache??=this.doLoadProjectConfig(),this.projectConfigCache}async doLoadProjectConfig(){let e=(0,Z.resolve)(this.workingDir,"vuln-scan-conf.json"),r=await H(e);if(!r)throw new Error(`Missing project configuration file '${e}'`);return this.normalizer.normalize(r,e)}async loadJiraConfig(e){let r=await(0,Pt.readFile)(e,"utf8"),n=JSON.parse(r);if(!n.issues&&n.issue&&(n.issues=n.issue),!n.jiraUrl||typeof n.jiraUrl!="string")throw new Error("jira-conf.json: missing or invalid 'jiraUrl' field");if(!Array.isArray(n.issues))throw new Error("jira-conf.json: missing or invalid 'issues' array");this.validateAutoCloseSeverity(n.autoCloseBelowSeverity,"jira-conf.json: invalid 'autoCloseBelowSeverity'");for(let[i,o]of n.issues.entries())if(o&&typeof o=="object"){let s=o;this.validateAutoCloseSeverity(s.autoCloseBelowSeverity,`jira-conf.json: invalid 'issues[${i}].autoCloseBelowSeverity'`),this.validateAutoCloseProjectOverrides(s.projectOverrides,`jira-conf.json: invalid 'issues[${i}].projectOverrides'`)}return n}validateAutoCloseSeverity(e,r){if(e!==void 0&&!K.includes(e))throw new Error(`${r} value '${String(e)}'. Must be one of: ${K.join(", ")}`)}validateAutoCloseProjectOverrides(e,r){if(e!==void 0){if(!Array.isArray(e))throw new Error(`${r}: must be an array`);for(let n=0;n<e.length;n++){let i=e[n],o=`${r}[${n}]`;if(i==null||typeof i!="object")throw new Error(`${o}: must be an object`);let s=i,a=s.projects;if(!Array.isArray(a)||a.length===0)throw new Error(`${o}.projects: must be a non-empty array of strings`);for(let f=0;f<a.length;f++){let d=a[f];if(typeof d!="string"||d.length===0)throw new Error(`${o}.projects[${f}]: must be a non-empty string`)}if(s.autoCloseBelowSeverity===void 0)throw new Error(`${o}.autoCloseBelowSeverity: is required`);if(this.validateAutoCloseSeverity(s.autoCloseBelowSeverity,`${o}.autoCloseBelowSeverity`),s.comment!==void 0&&typeof s.comment!="string")throw new Error(`${o}.comment: must be a string`)}}}async loadAutoVexConfig(e){let r=await(0,Pt.readFile)(e,"utf8"),n=JSON.parse(r);if(!n.impactStatement||typeof n.impactStatement!="string")throw new Error("auto-vex-conf.json: missing or invalid 'impactStatement' field (must be a non-empty string)");if(n.maxSeverity!==void 0&&!K.includes(n.maxSeverity))throw new Error(`auto-vex-conf.json: invalid 'maxSeverity' value '${String(n.maxSeverity)}'. Must be one of: ${K.join(", ")}`);if(n.projectOverrides!==void 0){if(!Array.isArray(n.projectOverrides))throw new Error("auto-vex-conf.json: 'projectOverrides' must be an array");for(let[i,o]of n.projectOverrides.entries()){if(!o||typeof o!="object")throw new Error(`auto-vex-conf.json: 'projectOverrides[${i}]' must be an object`);let s=o;if(!Array.isArray(s.projects)||s.projects.length===0||!s.projects.every(a=>typeof a=="string"&&a.length>0))throw new Error(`auto-vex-conf.json: 'projectOverrides[${i}].projects' must be a non-empty array of non-empty strings`);if(!K.includes(s.maxSeverity))throw new Error(`auto-vex-conf.json: invalid 'projectOverrides[${i}].maxSeverity' value '${String(s.maxSeverity)}'. Must be one of: ${K.join(", ")}`)}}return n}};var Re=require("fs/promises");async function ar(t,e,r){if("sbomFile"in t)return await(0,Re.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let n=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,Re.writeFile)(e,n),{...t,sbomFile:e}}var Ie=class{constructor(e,r){this.repo=e;this.authn=r}repo;authn;async downloadArtifact(e){let r=this.toArtifactInfo(e);if(this.isSnapshotVersion(r.version)&&!r.timestamp){let o=await this.fetchLatestSnapshotTimestamp(r);r={...r,timestamp:o}}let n=this.toArtifactUrl(r),i=await be(n,this.authn);return Buffer.from(await i.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,i=await(await be(r,this.authn)).text();return Gi(i,e)}toArtifactUrl(e){let r=this.toArtifactBaseUrl(e),n=this.isSnapshotVersion(e.version)&&e.timestamp?e.version.replace(/SNAPSHOT$/,e.timestamp):e.version;return`${r}/${e.artifactId}-${n}-${e.classifier}.${e.extension}`}toArtifactBaseUrl(e){return`${this.repo}/${e.groupId.replace(/\./g,"/")}/${e.artifactId}/${e.version}`}isSnapshotVersion(e){return e.endsWith("-SNAPSHOT")}toArtifactInfo(e){let r=e.split(":");return{groupId:r[0],artifactId:r[1],version:r[2],classifier:r[3],extension:"json"}}};function Gi(t,e){if(e.classifier&&e.extension){let i=t.match(new RegExp(`<snapshotVersion>\\s*<classifier>${e.classifier}</classifier>\\s*<extension>${e.extension}</extension>\\s*<value>([^<]+)</value>\\s*<updated>[^<]+</updated>\\s*</snapshotVersion>`)),o=e.version.replace(/SNAPSHOT$/,"");if(i?.[1])return i[1].replace(o,"")}let r=t.match(/<timestamp>([^<]+)<\/timestamp>/),n=t.match(/<buildNumber>([^<]+)<\/buildNumber>/);if(!r||!n)throw new Error(`Failed to get timestamp and build number from ${t} for artifact '${e.artifactId}'`);return`${r[1]}-${n[1]}`}var fr=require("fs/promises"),Et=require("path"),mr=require("crypto");var lr=require("crypto");var cr="auto_vex_max_severity=";function Pe(t){let e=t.status_notes;if(!e||!e.startsWith(cr))return;let r=e.slice(cr.length).trim();return K.includes(r)?r:void 0}var Hi="https://openvex.dev/ns/v0.2.0";function ur(t,e="conterra"){let n=`https://openvex.dev/docs/public/vex-${(0,lr.randomUUID)()}`,i=t.timestamp??new Date().toISOString();return{"@context":Hi,"@id":n,author:e,timestamp:i,last_updated:i,version:1,statements:[t]}}function pr(t,e){let r=e.timestamp??new Date().toISOString();return{...t,last_updated:r,version:t.version+1,statements:[...t.statements,e]}}var Ne=require("fs/promises"),_e=require("path");var Me=class{constructor(e){this.location=e}location;_content=void 0;_exists=!1;get exists(){return this._exists}get content(){return this._content}set content(e){this._content=e,this._exists=e!==void 0}async read(){let e=await H(this.location);this._content=e??void 0,this._exists=this._content!==void 0}async write(){if(this._content===void 0)throw new Error(`Cannot write VexFile: content is undefined (${this.location})`);await(0,Ne.mkdir)((0,_e.dirname)((0,_e.resolve)(this.location)),{recursive:!0}),await wt(this.location,this._content)}async delete(){await(0,Ne.unlink)(this.location),this._exists=!1}upsert(e,r){if(this._content===void 0)return this._content=ur(e,r),this._exists=!0,{created:!0,changed:!0};let n=Pe(e);if(n!==void 0){let i=this._content.statements.findIndex(o=>o.vulnerability.name===e.vulnerability.name&&o.status===e.status&&Pe(o)===n);if(i!==-1){let o=this._content.statements[i];return Ki(o,e)?{created:!1,changed:!1}:(o.products=e.products,o.impact_statement=e.impact_statement,o.action_statement=e.action_statement,o.justification=e.justification,o.status_notes=e.status_notes,o.timestamp=e.timestamp,this._content.version+=1,this._content.last_updated=e.timestamp??new Date().toISOString(),{created:!1,changed:!0})}}return this._content=pr(this._content,e),{created:!1,changed:!0}}addProductId(e,r){this.assertContentLoaded("addProductId");let n=!1;for(let i of this._content.statements){if(!i.products||i.products.some(s=>s["@id"]===r))continue;let o=i.products.findIndex(s=>s["@id"]===e);o!==-1&&(i.products.splice(o+1,0,{"@id":r}),n=!0)}return n}removeProductId(e,r){this.assertContentLoaded("removeProductId");let n=this._content.statements,i=[],o=!1;for(let s of n){if(r&&!jt(s).has(r)||!s.products)continue;let a=s.products.findIndex(f=>f["@id"]===e);a!==-1&&(s.products.splice(a,1),o=!0,s.products.length===0&&i.push(s))}if(!o)return"unchanged";for(let s of i)n.splice(n.indexOf(s),1);return n.length===0?"emptied":"changed"}hasStatementForProduct(e){return this.assertContentLoaded("hasStatementForProduct"),this._content.statements.some(r=>r.products?.some(n=>n["@id"]===e)??!1)}assertContentLoaded(e){if(this._content===void 0)throw new Error(`VexFile.${e}(): content is not loaded. Call read() first (${this.location})`)}};function Ki(t,e){return t.impact_statement!==e.impact_statement||t.action_statement!==e.action_statement||t.justification!==e.justification||t.status_notes!==e.status_notes?!1:Qi(t.products,e.products)}function Qi(t,e){let r=o=>Array.from(new Set((o??[]).map(s=>s["@id"]).filter(s=>typeof s=="string"))).sort(),n=r(t),i=r(e);return n.length!==i.length?!1:n.every((o,s)=>o===i[s])}async function $e(t,e){for(let r of await(0,fr.readdir)(t,{withFileTypes:!0}))r.name.endsWith(".json")?await e(new Me((0,Et.resolve)(r.parentPath,r.name))):r.isDirectory()&&await $e((0,Et.resolve)(r.parentPath,r.name),e)}function jt(t){let e=t.vulnerability.name;return new Set([e,...t.vulnerability.aliases??[]])}var le=class t{statements=[];filteredToProducts=[];static async fromUrl(e,r,n=new t){let o=await(await be(e,r)).json();return n.add(o),n}static async fromFiles(e,r=new t){return await $e(e,async n=>{await n.read(),n.content&&r.add(n.content)}),r}add(e){Yi(e);let r=e.timestamp;for(let n of e.statements){n.timestamp=n.timestamp??r;let i=Date.parse(n.timestamp),o=n.vulnerability.name,s=jt(n),a=new Set(n.products?.map(d=>d["@id"]).filter(d=>!!d)??[]),f=new Dt(i,o,s,a,n);this.statements.push(f)}this.sortStatementsByTimestampNewestFirst()}filterByProduct(e){this.assertCorrectProductId(e);let r=new t;return r.filteredToProducts=e.slice(0),r.statements=this.statements.filter(n=>n.matchesAtLeastOneProduct(e)),r}hasStatementFor(e){return this.statements.some(r=>r.matchesVulnerability(e))}findNotMatchingVulnerabilities(e,r){let n=this.filterByProduct(r??this.filteredToProducts),i=new Set;for(let o of n.statements)i.add(o.vulnName);for(let o of e)i.delete(o);return Array.from(i)}newestVulnerabilityStatement(e,r,n){let i=this.filterByProduct(r??this.filteredToProducts);for(let o of i.statements)if(o.matchesVulnerability(e)){if(n!==void 0){let s=Pe(o.statement);if(s!==void 0&&!Ae(n,s))continue}return this.reduceToProductInformation(o,i.filteredToProducts[0])}}toVexFileForProduct(e){let r=this.filterByProduct(e??this.filteredToProducts),n=r.statements.map(i=>this.reduceToProductInformation(i,r.filteredToProducts[0]));return this.toVexFile(n)}toVexFile(e){let r=e.filter(o=>o.status!=="under_investigation");if(r.length===0)return;this.sortVexStatementsByTimestampNewestFirst(r);let n=r[0].timestamp;return{"@context":"https://openvex.dev/ns/v0.2.0","@id":Zi(r),author:"conterra",timestamp:n,last_updated:n,version:1,statements:r}}toVexFileWithComponentIds(e){let r=e.filter(n=>n.vexStatement).map(n=>{let i={...n.vexStatement},o=(n.components??[]).map(s=>({"@id":s}));return i.products=[...i.products??[],...o],i});return this.toVexFile(r)}assertCorrectProductId(e){if(!e||e.length===0)throw new Error("Product ID must be provided");if(this.filteredToProducts.length&&!zi(this.filteredToProducts,e))throw new Error("Cannot filter to a different product")}reduceToProductInformation(e,r){let n={timestamp:new Date(e.timestamp).toISOString(),...e.statement};if(!r)return n;let i=n.products?.filter(o=>o["@id"]===r);return i?.length||(i=[{"@id":r}]),{...n,products:i}}sortStatementsByTimestampNewestFirst(){this.statements.sort((e,r)=>r.timestamp-e.timestamp)}sortVexStatementsByTimestampNewestFirst(e){e.sort((r,n)=>Date.parse(n.timestamp)-Date.parse(r.timestamp))}};function zi(t,e){return t.length===e.length&&t.every((r,n)=>r===e[n])}var Dt=class{constructor(e,r,n,i,o){this.timestamp=e;this.vulnName=r;this.vulnAliases=n;this.products=i;this.statement=o}timestamp;vulnName;vulnAliases;products;statement;matchesProduct(e){return this.products.has(e)}matchesAtLeastOneProduct(e){return e.some(this.matchesProduct.bind(this))}matchesVulnerability(e){return this.vulnAliases.has(e)}};function Yi(t){if(t?.["@context"]!=="https://openvex.dev/ns/v0.2.0")throw new Error("Invalid VEX file format")}function Zi(t){let e=t.map(n=>`${n.vulnerability.name}:${n.status}`).sort().join("|");return`https://openvex.dev/docs/public/vex-${(0,mr.createHash)("sha256").update(e).digest("hex")}`}var Ue=require("path"),dr=require("fs/promises");function eo(t){throw new Error(`Unhandled value: ${String(t)}`)}var Be=class{constructor(e,r,n){this.project=e;this.outputDir=r;this.useSubDirForProject=n}project;outputDir;useSubDirForProject;async lookupOutputFileForWriting(e){let r=this.useSubDirForProject?`${this.project.name}-${this.project.version}`:"",n=`${this.project.name}-${this.project.version}-`,i=this.getFileSuffix(e),o=(0,Ue.resolve)(this.outputDir,r,`${n}${i}`),s=(0,Ue.dirname)(o);return await se(s)||await(0,dr.mkdir)(s,{recursive:!0}),o}getFileSuffix(e){switch(e){case"grype-results":return"scan-grype-results.json";case"trivy-results":return"scan-trivy-results.json";case"ossindex-results":return"scan-ossindex-results.json";case"aggregate-results":return"scan-aggregate-results.json";case"aggregated-sarif-results":return"scan-aggregated-results.sarif.json";case"project-cyclonedx-sbom-file":return"sbom.cdx.json";case"project-openvex-file":return"openvex.vex.json";default:return eo(e)}}};var hr=require("zx"),ee=class{async run(e){let{image:r,volumes:n=[],envArgs:i=[],args:o=[]}=e,s=n.flatMap(f=>["-v",f]),a=await hr.$`docker run --rm ${s} ${i} ${r} ${o}`.nothrow();return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}};var qe=require("path");var ue=class{};var pe=class extends ue{runner=new ee;buildDockerEnvArgs(e){return[]}buildExtraVolumes(e){return[]}async scan(e,r,n,i,o){let s=await r.lookupOutputFileForWriting(this.getOutputFileKey()),a=(0,qe.dirname)(s),d=`/tmp/output/${(0,qe.basename)(s)}`,c=`${this.dockerImage}:${this.version||this.defaultVersion}`,p=`${a}:/tmp/output`,l=`${e.sbomFile}:/tmp/input.json`,u=this.buildExtraVolumes({outputDir:a,outputFile:s,sbomFile:e.sbomFile}),m=await this.runner.run({image:c,volumes:[p,l,...u],envArgs:this.buildDockerEnvArgs(i),args:this.buildDockerArgs({outputPath:d,verbose:i})});if(m.stdout&&o(` Scan log: ${m.stdout}`),m.stderr&&o(` Scan error: ${m.stderr}`),m.exitCode!==0)throw new Error(`${this.scannerLabel} scan failed with exit code ${m.exitCode}: ${m.stderr}`);o(` ${this.scannerLabel} output file: ${s}`);try{let g=await H(s);this.parseAndAdd(g,n)}catch(g){throw new Error(`${this.scannerLabel} scan results could not be read from '${s}': ${g}`,{cause:g})}}};var yr="anchore/grype",Xe=class t extends pe{constructor(r,n){super();this.version=r;this.cacheDir=n}version;cacheDir;dockerImage=yr;defaultVersion="latest";scannerLabel="Grype";async init(r){r&&console.log(`Initializing Grype DB in cache directory: ${this.cacheDir}`);let n=`${yr}:${this.version||this.defaultVersion}`,i=await new ee().run({image:n,volumes:[`${this.cacheDir}:/tmp/.cache`],envArgs:["-e","GRYPE_DB_CACHE_DIR=/tmp/.cache","-e","TMPDIR=/tmp"],args:["db","update"]});if(i.stdout&&console.log(` Grype DB Update: ${i.stdout}`),i.stderr&&console.log(` Grype DB Update error: ${i.stderr}`),i.exitCode!==0)throw new Error(`Grype DB update failed with exit code ${i.exitCode}: ${i.stderr}`)}getOutputFileKey(){return"grype-results"}buildExtraVolumes(r){return[`${this.cacheDir}:/tmp/.cache`]}buildDockerEnvArgs(r){return["-e","GRYPE_DB_CACHE_DIR=/tmp/.cache","-e","TMPDIR=/tmp","-e","GRYPE_DB_AUTO_UPDATE=false"]}buildDockerArgs(r){let n=["sbom:/tmp/input.json","-o","json","--file",r.outputPath,"--by-cve"];return r.verbose||n.push("--quiet"),n}parseAndAdd(r,n){if(r)for(let i of r.matches)n.addVulnerability(t.createVulnerability(i),"grype")}addVulnerabilities(r,n){this.parseAndAdd(n,r)}static createVulnerability(r){let n=r.vulnerability,i=nr(n.severity);return{id:n.id,severity:i,scannerSeverity:{grype:i},title:"",description:n.description,components:[U(r.artifact.purl)],detectedBy:["grype"],refs:[U(n.dataSource)]}}};var gr="aquasec/trivy",to="latest",ro="public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db",Je=class t extends pe{constructor(r,n,i){super();this.version=r;this.cacheDir=n;this.githubToken=i}version;cacheDir;githubToken;dockerImage=gr;defaultVersion=to;scannerLabel="Trivy";async init(r){let n=[];this.githubToken&&n.push("-e",`GITHUB_TOKEN=${this.githubToken}`);let i=["--db-repository",ro,"--cache-dir","/.cache","sbom","--download-db-only"];r||i.push("--quiet");let o=`${gr}:${this.version||this.defaultVersion}`,s=await new ee().run({image:o,volumes:[`${this.cacheDir}:/.cache`],envArgs:n,args:i});if(!s.stdout&&!s.stderr&&console.log(" Trivy DB Update: finished"),s.stdout&&console.log(` Trivy DB Update: ${s.stdout}`),s.stderr&&console.log(` Trivy DB Update error: ${s.stderr}`),s.exitCode!==0)throw new Error(`Trivy DB update failed with exit code ${s.exitCode}: ${s.stderr}`)}getOutputFileKey(){return"trivy-results"}buildExtraVolumes(r){return[`${this.cacheDir}:/.cache`]}buildDockerArgs(r){let n=["sbom","--cache-dir","/.cache","--format","json","--output",r.outputPath,"--skip-db-update","/tmp/input.json"];return r.verbose||n.push("--quiet"),n}parseAndAdd(r,n){if(r){for(let i of r.Results??[])if(i.Vulnerabilities)for(let o of i.Vulnerabilities)n.addVulnerability(t.createVulnerability(o),"trivy")}}addVulnerabilities(r,n){this.parseAndAdd(n,r)}static createVulnerability(r){let n=ir(r.Severity);return{id:r.VulnerabilityID,severity:n,scannerSeverity:{trivy:n},title:r.Title,description:r.Description,components:[U(r.PkgIdentifier.PURL)],detectedBy:["trivy"],refs:[U(r.PrimaryURL)]}}};var br=require("fs/promises");function Ot(t,e=""){return Sr(t,e,new Set,new Set)}function Sr(t,e="",r,n){let i=`${e}- ${t.purl}`;if(r.has(t.purl))return i+=" (cycle detected)",i;if(n.has(t.purl))return i+=" (deduplicated)",i;n.add(t.purl),r.add(t.purl);let o=r.size===1;for(let s of t.usedBy){let a=Sr(s,e+(o?" ":" "),r,n);a!==""&&(i+=`
10
+ `,i+=a)}return r.delete(t.purl),i}var fe=class t{constructor(e){this.sbom=e;for(let r of this.sbom.components||[]){let n={purl:U(r.purl),usedBy:[]};n.purl&&(this.purlToComponent.has(n.purl)||(this.purlToComponent.set(n.purl,n),this.sbomRefToComponent.set(r["bom-ref"],n)))}for(let r of this.sbom.dependencies||[]){let n=this.sbomRefToComponent.get(r.ref);if(n)for(let i of r.dependsOn||[]){let o=this.sbomRefToComponent.get(i);o&&!o.usedBy.includes(n)&&o.usedBy.push(n)}}}sbom;static createForSbom(e){return new t(e)}static printTree(e,r=""){return Ot(e,r)}sbomRefToComponent=new Map;purlToComponent=new Map;findUsagesOfComponent(e){if(!this.sbom)return{purl:e,usedBy:[]};let r=this.purlToComponent.get(e);return r?vr(r):{purl:e,usedBy:[]}}};function vr(t,e=new Set){let r={purl:t.purl,usedBy:[]};if(e.has(t.purl))return r;e.add(t.purl);for(let n of t.usedBy){let i=vr(n,new Set(e));r.usedBy.push(i)}return r}var me=class t{constructor(e,r){this.filePath=e;this.sbom=r}filePath;sbom;static async fromFile(e){let r=await H(e);if(!r)throw new Error(`Could not read SBOM file '${e}'`);if(!r.components||r.components.length===0)throw new Error(`SBOM file '${e}' does not contain any components`);return new t(e,r)}get path(){return this.filePath}getComponents(){return this.sbom.components??[]}getExternalComponents(e=no){return this.getComponents().filter(e)}buildDependencyTree(){return fe.createForSbom(this.sbom)}};function no(t){return!!t.purl}var We=class{components=new Map;has(e){return this.components.has(e)}update(e,r){for(let n of r)this.components.set(U(n.coordinates),n);for(let n of e)this.components.has(n)||this.components.set(n,{coordinates:n,description:"",reference:"",vulnerabilities:[]})}read(e){let r=[];for(let n of e){let i=this.components.get(n);i&&r.push(i)}return r}};var wr=128,io="https://api.guide.sonatype.com",Ge=class t{cache=new We;baseUrl;authHeader;constructor(e={}){this.baseUrl=e.baseUrl??io,e.user&&e.token&&(this.authHeader=xt(e.user,e.token))}async fetchVulnerableComponents(e,r){let n=new Set(e.map(f=>f.replace(/\?.*$/,"")));t.addSnapshotBaseCoordinates(n);let i=Array.from(n),o=i.filter(f=>!this.cache.has(f));r?.(` Sonatype OssIndex: ${o.length} packages to fetch, ${i.length-o.length} cache hits`);let s=this.authHeader?"/authorized":"",a=`${this.baseUrl}/api/v3${s}/component-report`;for(let f=0;f<o.length;f+=wr){let d=o.slice(f,f+wr),c=JSON.stringify({coordinates:d});r?.(` Sonatype OssIndex request ${a} with body: ${c}`);let p={"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"};this.authHeader&&(p.Authorization=this.authHeader);let u=await(await fetch(a,{method:"POST",headers:p,body:c})).json();Array.isArray(u)?this.cache.update(d,u):r?.(` Sonatype OssIndex Error: ${u.code} - ${u.message}`)}return this.cache.read(i).filter(f=>f.vulnerabilities.length>0)}static addSnapshotBaseCoordinates(e){let r=/(-SNAPSHOT|-\d{8}\.\d{6}-\d+)(?=(?:\?|$))/;for(let n of Array.from(e)){let i=n.replace(r,"");i!==n&&e.add(i)}}};var He=class t extends ue{client;constructor(e={}){super(),this.client=new Ge(e)}async init(){}async scan(e,r,n,i,o){let s=await r.lookupOutputFileForWriting("ossindex-results");try{let d=(await me.fromFile(e.sbomFile)).getExternalComponents(l=>!!l.purl&&!oo(l)).map(l=>l.purl),c=i?l=>o(` [${e.name}] ${l}`):void 0,p=await this.client.fetchVulnerableComponents(d,c);await(0,br.writeFile)(s,JSON.stringify(p,null,2)),o(` Sonatype OssIndex output file: ${s}`),this.addVulnerabilities(n,p)}catch(a){throw new Error(`Sonatype OSS Index scan failed: ${a}`,{cause:a})}}addVulnerabilities(e,r){if(r)for(let n of r)for(let i of n.vulnerabilities)e.addVulnerability(t.createVulnerability(i,n.coordinates),"ossindex")}static createVulnerability(e,r){let n=U(e.reference),i=or(e.cvssScore);return{id:e.cve||e.id,severity:i,scannerSeverity:{ossindex:i},title:e.title,description:e.description,components:[U(r)],detectedBy:["ossindex"],refs:n?[n]:[]}}};function oo(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function so(t,e,r){switch(t.name){case"grype":return new Xe(t.version,e);case"trivy":return new Je(t.version,e,r.trivyGithubToken);case"ossindex":return new He({user:r.ossIndexApiUser,token:r.ossIndexApiToken,baseUrl:r.ossIndexBaseUrl})}}var Ke=class{scanners;constructor(e,r,n){this.scanners=e.map(i=>so(i,r,n))}async init(e){await Promise.all(this.scanners.map(r=>r.init(e)))}async scanProject(e,r,n,i,o){await Promise.all(this.scanners.map(s=>s.scan(e,r,n,i,o)))}};async function xr(t,e,r){await $e(t,async n=>{await n.read();let i=n.removeProductId(e,r);i==="emptied"?(console.info(`Remove ${e} from ${n.location} and delete file.`),await n.delete()):i==="changed"&&(console.info(`Remove ${e} from ${n.location}`),await n.write())})}var jr=require("fs/promises"),Er=require("path");var Qe=class{data={hasError:!1,hasNewVuln:!1,hasNoLongerDetectedVuln:!1,cveDetails:new Map,vulnToProjects:new Map,noLongerDetectedVulnToProjects:new Map,projectToVulns:new Map,projectToNotLongerDetectedVulns:new Map,projectErrors:[],projectsToComponents:new Map};feed(e){let r=e.project,n=`${r.name}@${r.version}`;if(e.error&&(this.data.hasError=!0,this.data.projectErrors.push({project:n,error:e.error.message})),r.silent)return;let i=e.newVulns.filter(o=>!Ae(o.severity,r.minimumSeverity));for(let o of i){this.data.hasNewVuln=!0,this.mergeVulnDetails(o),this.data.vulnToProjects.has(o.id)||this.data.vulnToProjects.set(o.id,[]),this.data.projectToVulns.has(n)||this.data.projectToVulns.set(n,[]),this.data.projectsToComponents.has(n)||this.data.projectsToComponents.set(n,new Map),this.data.projectToVulns.get(n).push(o.id),this.data.vulnToProjects.get(o.id).push(n);for(let s of o.componentTree){if(!s.purl)continue;let a=this.data.projectsToComponents.get(n);a.has(s.purl)||a.set(s.purl,s)}}for(let o of e.noLongerDetectedVulns)this.data.hasNoLongerDetectedVuln=!0,this.data.noLongerDetectedVulnToProjects.has(o)||this.data.noLongerDetectedVulnToProjects.set(o,[]),this.data.projectToNotLongerDetectedVulns.has(n)||this.data.projectToNotLongerDetectedVulns.set(n,[]),this.data.projectToNotLongerDetectedVulns.get(n).push(o),this.data.noLongerDetectedVulnToProjects.get(o).push(n)}feedAll(e){for(let r of e.values())this.feed(r)}getData(){return this.data}toScanSummary(){let{data:e}=this;return{errors:e.projectErrors,vulnerabilities:Object.fromEntries(e.cveDetails),vulnerabilityToProject:Object.fromEntries(e.vulnToProjects.entries()),projectToVulnerability:Object.fromEntries(e.projectToVulns.entries()),projectsToComponents:Object.fromEntries(Array.from(e.projectsToComponents.entries()).map(([r,n])=>[r,Object.fromEntries(n.entries())])),noLongerDetectedVulnerabilities:Object.fromEntries(e.noLongerDetectedVulnToProjects)}}mergeVulnDetails(e){if(!this.data.cveDetails.has(e.id)){this.data.cveDetails.set(e.id,{id:e.id,title:e.title,severity:e.severity,description:e.description,components:e.components,refs:e.refs,vexLookupStatus:e.vexLookupStatus});return}let r=this.data.cveDetails.get(e.id);r.title=r.title||e.title,r.severity=Q(r.severity,e.severity)>=0?r.severity:e.severity,r.description=r.description||e.description,r.components=Pr(r.components,e.components),r.refs=Pr(r.refs,e.refs),r.vexLookupStatus=ao(r.vexLookupStatus,e.vexLookupStatus)}};function ao(t,e){return t==="missing-for-project"||e==="missing-for-project"?"missing-for-project":t??e}function Pr(t,e){return Array.from(new Set([...t,...e]))}var Ye=require("fs/promises"),Lr=require("path");var ze=class{constructor(e={}){this.options=e}options;summaryLogFile;async render(e){let{orderBy:r="CVE",reportNoLongerDetectedVulnerabilities:n=!0,reportCveDetails:i=!1,outputDirectory:o}=this.options;return o&&(this.summaryLogFile=(0,Lr.join)(o,"scan-summary.txt"),await(0,Ye.writeFile)(this.summaryLogFile,"","utf8")),await this.log("=== Scan summary ==="),e.projectErrors.length&&await this.logErrors(e.projectErrors),i&&await this.logCveDetails(e.cveDetails,e.projectsToComponents),r==="CVE"?await this.logOrderedByCve(e.vulnToProjects,e.cveDetails,n?e.noLongerDetectedVulnToProjects:new Map):await this.logOrderedByProject(e.projectToVulns,n?e.projectToNotLongerDetectedVulns:new Map,e.cveDetails),!e.hasError&&!e.hasNewVuln&&(!e.hasNoLongerDetectedVuln||!n)&&await this.log(" No issues found"),{hasError:e.hasError,hasNewVuln:e.hasNewVuln,hasNoLongerDetectedVuln:e.hasNoLongerDetectedVuln}}async log(e){console.log(e),this.summaryLogFile&&await(0,Ye.appendFile)(this.summaryLogFile,e+`
11
+ `,"utf8")}async logErrors(e){await this.log(""),await this.log("- Errors during scan:");for(let{project:r,error:n}of e)await this.log(` - ${r}:`),await this.log(` Error: ${n}`)}async logOrderedByCve(e,r,n){let i=Array.from(e.keys()).sort(Ct(s=>r.get(s)));if(i.length){await this.log(""),await this.log("- New vulnerabilities:");for(let s of i){let a=e.get(s),f=r.get(s);await this.log(` - [${f.severity}] ${s}${kt(f)}`);for(let d of a.slice().sort())await this.log(` - ${d}`)}}let o=Array.from(n.keys()).sort();if(o.length){await this.log(""),await this.log("- Declared but no longer detected vulnerabilities:");for(let s of o){let a=n.get(s);await this.log(` - ${s}`);for(let f of a.slice().sort())await this.log(` - ${f}`)}}}async logOrderedByProject(e,r,n){let i=new Set([...Array.from(e.keys()),...Array.from(r.keys())]),o=Array.from(i.keys()).sort();if(o.length){await this.log(""),await this.log("- Vulnerabilities by project:");for(let s of o){await this.log(` - ${s}:`);let a=e.get(s)??[];for(let d of a.slice().sort(Ct(c=>n.get(c)))){let c=n.get(d);await this.log(` - [${c.severity}] ${d}${kt(c)}`)}let f=(r.get(s)??[]).slice().sort();for(let d of f)await this.log(` - ${d} (no longer detected)`)}}}async logCveDetails(e,r){if(e.size===0)return;await this.log(""),await this.log("- Vulnerability details:");let n=Array.from(e.keys()).sort(Ct(i=>e.get(i)));for(let i of n){let o=e.get(i);if(await this.log(` - [${o.severity}] ${o.id} - ${o.title||""}:${kt(o)}`),o.description){await this.log(" Description:");for(let s of o.description.split(/\r?\n/))await this.log(` ${s}`)}if(o.components.length){await this.log(" Components:");for(let s of o.components)await this.log(" - "+s);if(r){for(let s of o.components)for(let[a,f]of r.entries())if(f.has(s)){await this.log(` Usage Tree of ${s} by ${a} (as example):`),await this.log(fe.printTree(f.get(s)," "));break}}}if(o.refs.length){await this.log(" Links:");for(let s of o.refs)await this.log(` - ${s}`)}}}};function Ct(t){return(e,r)=>{let n=Q(t(r).severity,t(e).severity);return n!==0?n:e.localeCompare(r)}}function kt(t){switch(t.vexLookupStatus){case"missing-for-project":return" (VEX entry missing)";case"missing-entirely":return" (VEX file missing)";default:return""}}async function Dr(t,e){let r=new Qe;r.feedAll(t);let n=r.getData(),o=await new ze(e).render(n);if(e.outputDirectory){let s=(0,Er.join)(e.outputDirectory,"scan-summary.json");await(0,jr.writeFile)(s,JSON.stringify(r.toScanSummary(),null,2),"utf8")}return o}var dt=require("fs/promises");var Ze=class{constructor(e){this.depProvider=e}depProvider;allById=new Map;getAllVulnIds(){return new Set(this.allById.keys())}getAllVulnerabilitiesSortedBySeverity(){let e=Array.from(this.allById.values());return e.sort((r,n)=>{let i=Q(r.severity,n.severity);return i===0?r.id.localeCompare(n.id):-i}),e}addVulnerability(e,r){let n=e.id,i=this.allById,o=e;if(!i.has(n))i.set(n,e),o=e;else{let s=i.get(n);s.title=s.title||e.title,s.severity=rr(s.severity,e.severity),s.scannerSeverity[r]=e.severity,s.detectedBy=Ft(s.detectedBy,r),s.components=Ft(s.components,e.components[0]),s.refs=Ft(s.refs,e.refs[0]),o=s}o.componentTree=o.components?.map(s=>this.depProvider.findUsagesOfComponent(s))}enhanceWithVexData(e){let r=[];for(let n of this.allById.values()){let i=e.newestVulnerabilityStatement(n.id,void 0,n.severity);if(!i){r.push({id:n.id,severity:n.severity,title:n.title,description:n.description,components:n.components??[],componentTree:n.componentTree??[],refs:n.refs});continue}n.vexStatement=i}return{unmatchedVulnerabilities:r}}};function Ft(t,e){return e==null?t:Array.from(new Set([...t,e]).values())}var oe=Te(Fi());var Ai=Te(Vi());var zt={kind:"external",status:"accepted"};function Ii(t,e){let r=new oe.SarifRunBuilder().initSimple({toolDriverName:`${e.name}@${e.version}`,toolDriverVersion:"0.0.1"}),n=new Date().toISOString().split("T")[0];r.run.tool.driver.fullDescription={text:`Security Scan from ${n}`},r.run.tool.driver.properties={"microsoft/qualityDomain":`Security Scan from ${n}`};for(let o of t){let s=sr(o.severity),a=o.id,f=Ea(o.refs),d=new oe.SarifRuleBuilder().initSimple({ruleId:a,shortDescriptionText:o.title,fullDescriptionText:o.description,helpUri:f}),c=o.vexStatement,p,l="new",u="";c?(p=[{...zt}],l="updated",u=`--- INVESTIGATED (${c.status}) --- `,c.status==="under_investigation"&&(p[0].status="underReview",u="--- UNDER INVESTIGATION --- ")):Q(e.minimumSeverity,o.severity)>0?(p=[{...zt}],l="updated",u=`--- BELOW MINIMUM SEVERITY '${e.minimumSeverity}' ---`):e.silent&&(p=[{...zt}],l="updated",u="--- PROJECT SILENT ---"),Object.assign(d.rule,{name:`${u}[${o.severity}] - ${o.title.replace(`[${a}]`,"")}`,messageStrings:{default:{text:o.description,markdown:Da(o,f,u)}},properties:{severity:o.severity,scanners:o.scannerSeverity,links:o.refs,tags:["cve","vulnerability","security",`severity_${o.severity.toLowerCase()}`]}}),r.addRule(d);for(let m of o.components){let g=new oe.SarifResultBuilder().initSimple({ruleId:a,level:s,messageText:`${a} [${o.severity}] - ${m}`});g.result.message.id="default",g.result.locations=[{logicalLocations:[{fullyQualifiedName:m}]}],g.result.baselineState=l,g.result.suppressions=p,r.addResult(g)}}let i=new oe.SarifBuilder;return i.addRun(r),i.buildSarifOutput()}function Ea(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function Da(t,e,r){let n=t.vexStatement,i=n?`
12
12
  ${r}
13
13
  ${n.justification??""}
14
14
  ${n.impact_statement??""}
@@ -36,8 +36,8 @@ Usage tree:
36
36
  ${t.componentTree?.map(o=>Ot(o)).join(`
37
37
  `)}
38
38
  \`\`\`
39
- `}var ht=class{constructor(e,r,n,i,o,s){this.project=e;this.outputFiles=r;this.engine=n;this.mavenRepo=i;this.vexStore=o;this.verbose=s}project;outputFiles;engine;mavenRepo;vexStore;verbose;logBuffer=[];log(e){this.logBuffer.push(e)}flushLogs(){for(let e of this.logBuffer)console.log(e)}async run(){try{let{unmatchedVulnerabilities:e,noLongerDetectedVulnerabilities:r}=await this.scanAndWrite();return{project:this.project,newVulns:e,noLongerDetectedVulns:r}}catch(e){return{project:this.project,error:e instanceof Error?e:new Error(String(e)),newVulns:[],noLongerDetectedVulns:[]}}finally{this.verbose&&this.flushLogs()}}async scanAndWrite(){let e=await ar(this.project,await this.outputFiles.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),this.mavenRepo);this.log(`Analyzing project: ${e.name} - ${e.version} - ${e.sbomFile}`);let r=await fe.fromFile(e.sbomFile),n=new Ze(r.buildDependencyTree());await this.engine.scanProject(e,this.outputFiles,n,this.verbose,this.log.bind(this));let i=this.vexStore.filterByProduct([e.purl,...e.purlAliases]),{unmatchedVulnerabilities:o}=n.enhanceWithVexData(i);for(let a of o)a.vexLookupStatus=this.vexStore.hasStatementFor(a.id)?"missing-for-project":"missing-entirely";let s=e.detectNoLongerUsedVulnerabilities?i.findNotMatchingVulnerabilities(n.getAllVulnIds()):[];return await this.writeResults(e,n,i),{unmatchedVulnerabilities:o,noLongerDetectedVulnerabilities:s}}async writeResults(e,r,n){let i=r.getAllVulnerabilitiesSortedBySeverity(),o=await this.outputFiles.lookupOutputFileForWriting("aggregate-results");await(0,dt.writeFile)(o,JSON.stringify(i,null,2)),this.log(` Vulnerabilities output file: ${o}`);let s=await this.outputFiles.lookupOutputFileForWriting("aggregated-sarif-results"),a=Ii(i,e);await(0,dt.writeFile)(s,JSON.stringify(a,null,2)),this.log(` Vuln Sarif output file: ${s}`);let m=n.toVexFileWithComponentIds(i);if(!m)return;let d=await this.outputFiles.lookupOutputFileForWriting("project-openvex-file");await(0,dt.writeFile)(d,JSON.stringify(m,null,2)),this.log(` OpenVex file: ${d}`)}};var yt=class{constructor(e=5){this.maxParallel=e}maxParallel;async run(e){let r=0,n=0,i=0,o=e.length;if(o===0)return;let s,a=new Promise(d=>{s=d}),m=()=>{for(;n<this.maxParallel&&r<o;){let d=e[r++];n++,d().catch(()=>{}).finally(()=>{n--,i++,i>=o?s():m()})}};m(),await a}};var gt=class{options;constructor(e){this.options=e}async run(){let e=await new xe(this.options.workingDir).loadProjectConfig();await this.prepareDirectories(e);let r=await this.createVexStore(e),n=new Ie(e.mavenRepo,{user:this.options.mavenRepoUser,pw:this.options.mavenRepoPw}),i=this.createEngine(e);console.log("Initializing scanner engines ...");let o=Date.now();await i.init(this.options.verbose),console.log(`Scanner engines initialization took ${Date.now()-o}ms
40
- `);let s=e.projects.filter(this.createProjectFilter());console.log("Scanning projects ...");let a=Date.now(),m=new Map;await new yt(5).run(s.map(p=>async()=>{let l=new Be(p,e.outDir,e.createSubDirsForProject),f=await new ht(p,l,i,n,r,this.options.verbose).run();m.set(p.purl,f)})),console.log(`Scanning took ${Date.now()-a}ms`),this.options.autoRemoveUnusedStatements&&await this.removeUnusedVexStatements(m,e.vexDir);let c=await Er(m,{orderBy:e.consoleReport.startsWith("BY_CVE")?"CVE":"PROJECT",reportCveDetails:e.consoleReport.endsWith("_DETAILED"),reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities,outputDirectory:e.outDir});return this.computeExitCode(e,c)}async prepareDirectories(e){await se(e.cacheDir)||await(0,Yt.mkdir)(e.cacheDir),await se(e.outDir)&&await bt(e.outDir),await(0,Yt.mkdir)(e.outDir)}async createVexStore(e){let r;await se(e.vexDir)?r=await le.fromFiles(e.vexDir):r=new le;for(let n of e.vexUrls)await le.fromUrl(n,{user:this.options.vexUrlsUser,pw:this.options.vexUrlsPw},r);return r}createEngine(e){if(this.options.scannerEngine)return this.options.scannerEngine;if(e.scanners.length===0)throw new Error("No scanners configured");return new Ke(e.scanners,e.cacheDir,this.options)}createProjectFilter(){let{reduceToProjectName:e,reduceToProjectVersion:r}=this.options;return n=>!(!n.enabled||e&&(n.name!==e||r&&n.version!==r))}async removeUnusedVexStatements(e,r){for(let n of e.values())if(!n.project.silent)for(let i of n.noLongerDetectedVulns)await xr(r,n.project.purl,i)}computeExitCode(e,r){if(r.hasError)return 1;if(r.hasNewVuln){if(e.onNewVulnerabilities==="fail")return 1;e.onNewVulnerabilities==="warn"&&(console.log("##vso[task.logissue type=warning;]NEW_VULNERABILITIES_DETECTED"),console.log("##vso[task.complete result=SucceededWithIssues;]"))}if(r.hasNoLongerDetectedVuln){if(e.onNoLongerDetectedVulnerabilities==="fail")return 1;e.onNoLongerDetectedVulnerabilities==="warn"&&(console.log("##vso[task.logissue type=warning;]NO_LONGER_DETECTED_VULNERABILITIES"),console.log("##vso[task.complete result=SucceededWithIssues;]"))}return 0}};async function Ri(t){return new gt(t).run()}var ve=require("zx");ve.dotenv.config();ve.os.type().startsWith("Windows")&&(0,ve.usePowerShell)();var G=process.env;(async()=>{let t=await Ri({workingDir:process.cwd(),reduceToProjectName:process.argv[2],reduceToProjectVersion:process.argv[3],ossIndexApiUser:G.OSS_INDEX_API_USER,ossIndexApiToken:G.OSS_INDEX_API_TOKEN,ossIndexBaseUrl:G.OSS_INDEX_BASE_URL,mavenRepoUser:G.MAVEN_REPO_USER,mavenRepoPw:G.MAVEN_REPO_PW,trivyGithubToken:G.TRIVY_GITHUB_TOKEN,vexUrlsUser:G.VEX_URLS_USER,vexUrlsPw:G.VEX_URLS_PW,verbose:G.VERBOSE==="true",autoRemoveUnusedStatements:G.AUTO_REMOVE_UNUSED_STATEMENTS==="true"});process.exitCode=t})();
39
+ `}var ht=class{constructor(e,r,n,i,o,s){this.project=e;this.outputFiles=r;this.engine=n;this.mavenRepo=i;this.vexStore=o;this.verbose=s}project;outputFiles;engine;mavenRepo;vexStore;verbose;logBuffer=[];log(e){this.logBuffer.push(e)}flushLogs(){for(let e of this.logBuffer)console.log(e)}async run(){try{let{unmatchedVulnerabilities:e,noLongerDetectedVulnerabilities:r}=await this.scanAndWrite();return{project:this.project,newVulns:e,noLongerDetectedVulns:r}}catch(e){return{project:this.project,error:e instanceof Error?e:new Error(String(e)),newVulns:[],noLongerDetectedVulns:[]}}finally{this.verbose&&this.flushLogs()}}async scanAndWrite(){let e=await ar(this.project,await this.outputFiles.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),this.mavenRepo);this.log(`Analyzing project: ${e.name} - ${e.version} - ${e.sbomFile}`);let r=await me.fromFile(e.sbomFile),n=new Ze(r.buildDependencyTree());await this.engine.scanProject(e,this.outputFiles,n,this.verbose,this.log.bind(this));let i=this.vexStore.filterByProduct([e.purl,...e.purlAliases]),{unmatchedVulnerabilities:o}=n.enhanceWithVexData(i);for(let a of o)a.vexLookupStatus=this.vexStore.hasStatementFor(a.id)?"missing-for-project":"missing-entirely";let s=e.detectNoLongerUsedVulnerabilities?i.findNotMatchingVulnerabilities(n.getAllVulnIds()):[];return await this.writeResults(e,n,i),{unmatchedVulnerabilities:o,noLongerDetectedVulnerabilities:s}}async writeResults(e,r,n){let i=r.getAllVulnerabilitiesSortedBySeverity(),o=await this.outputFiles.lookupOutputFileForWriting("aggregate-results");await(0,dt.writeFile)(o,JSON.stringify(i,null,2)),this.log(` Vulnerabilities output file: ${o}`);let s=await this.outputFiles.lookupOutputFileForWriting("aggregated-sarif-results"),a=Ii(i,e);await(0,dt.writeFile)(s,JSON.stringify(a,null,2)),this.log(` Vuln Sarif output file: ${s}`);let f=n.toVexFileWithComponentIds(i);if(!f)return;let d=await this.outputFiles.lookupOutputFileForWriting("project-openvex-file");await(0,dt.writeFile)(d,JSON.stringify(f,null,2)),this.log(` OpenVex file: ${d}`)}};var yt=class{constructor(e=5){this.maxParallel=e}maxParallel;async run(e){let r=0,n=0,i=0,o=e.length;if(o===0)return;let s,a=new Promise(d=>{s=d}),f=()=>{for(;n<this.maxParallel&&r<o;){let d=e[r++];n++,d().catch(()=>{}).finally(()=>{n--,i++,i>=o?s():f()})}};f(),await a}};var gt=class{options;constructor(e){this.options=e}async run(){let e=await new xe(this.options.workingDir).loadProjectConfig();await this.prepareDirectories(e);let r=await this.createVexStore(e),n=new Ie(e.mavenRepo,{user:this.options.mavenRepoUser,pw:this.options.mavenRepoPw}),i=this.createEngine(e);console.log("Initializing scanner engines ...");let o=Date.now();await i.init(this.options.verbose),console.log(`Scanner engines initialization took ${Date.now()-o}ms
40
+ `);let s=e.projects.filter(this.createProjectFilter());console.log("Scanning projects ...");let a=Date.now(),f=new Map;await new yt(5).run(s.map(p=>async()=>{let l=new Be(p,e.outDir,e.createSubDirsForProject),m=await new ht(p,l,i,n,r,this.options.verbose).run();f.set(p.purl,m)})),console.log(`Scanning took ${Date.now()-a}ms`),this.options.autoRemoveUnusedStatements&&await this.removeUnusedVexStatements(f,e.vexDir);let c=await Dr(f,{orderBy:e.consoleReport.startsWith("BY_CVE")?"CVE":"PROJECT",reportCveDetails:e.consoleReport.endsWith("_DETAILED"),reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities,outputDirectory:e.outDir});return this.computeExitCode(e,c)}async prepareDirectories(e){await se(e.cacheDir)||await(0,Yt.mkdir)(e.cacheDir),await se(e.outDir)&&await bt(e.outDir),await(0,Yt.mkdir)(e.outDir)}async createVexStore(e){let r;await se(e.vexDir)?r=await le.fromFiles(e.vexDir):r=new le;for(let n of e.vexUrls)await le.fromUrl(n,{user:this.options.vexUrlsUser,pw:this.options.vexUrlsPw},r);return r}createEngine(e){if(this.options.scannerEngine)return this.options.scannerEngine;if(e.scanners.length===0)throw new Error("No scanners configured");return new Ke(e.scanners,e.cacheDir,this.options)}createProjectFilter(){let{reduceToProjectName:e,reduceToProjectVersion:r}=this.options;return n=>!(!n.enabled||e&&(n.name!==e||r&&n.version!==r))}async removeUnusedVexStatements(e,r){for(let n of e.values())if(!n.project.silent)for(let i of n.noLongerDetectedVulns)await xr(r,n.project.purl,i)}computeExitCode(e,r){if(r.hasError)return 1;if(r.hasNewVuln){if(e.onNewVulnerabilities==="fail")return 1;e.onNewVulnerabilities==="warn"&&(console.log("##vso[task.logissue type=warning;]NEW_VULNERABILITIES_DETECTED"),console.log("##vso[task.complete result=SucceededWithIssues;]"))}if(r.hasNoLongerDetectedVuln){if(e.onNoLongerDetectedVulnerabilities==="fail")return 1;e.onNoLongerDetectedVulnerabilities==="warn"&&(console.log("##vso[task.logissue type=warning;]NO_LONGER_DETECTED_VULNERABILITIES"),console.log("##vso[task.complete result=SucceededWithIssues;]"))}return 0}};async function Ri(t){return new gt(t).run()}var ve=require("zx");ve.dotenv.config();ve.os.type().startsWith("Windows")&&(0,ve.usePowerShell)();var G=process.env;(async()=>{let t=await Ri({workingDir:process.cwd(),reduceToProjectName:process.argv[2],reduceToProjectVersion:process.argv[3],ossIndexApiUser:G.OSS_INDEX_API_USER,ossIndexApiToken:G.OSS_INDEX_API_TOKEN,ossIndexBaseUrl:G.OSS_INDEX_BASE_URL,mavenRepoUser:G.MAVEN_REPO_USER,mavenRepoPw:G.MAVEN_REPO_PW,trivyGithubToken:G.TRIVY_GITHUB_TOKEN,vexUrlsUser:G.VEX_URLS_USER,vexUrlsPw:G.VEX_URLS_PW,verbose:G.VERBOSE==="true",autoRemoveUnusedStatements:G.AUTO_REMOVE_UNUSED_STATEMENTS==="true"});process.exitCode=t})();
41
41
  /*! Bundled license information:
42
42
 
43
43
  escape-html/index.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conterra/vuln-scan",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "con terra vulnerability scan process",
5
5
  "author": "con terra GmbH",
6
6
  "license": "Apache-2.0",