@conterra/vuln-scan 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +489 -609
- package/dist/add-project-to-vex.js +2 -2
- package/dist/add-project.js +18 -18
- package/dist/add-statement.js +20 -20
- package/dist/auto-vex-creator.js +5 -0
- package/dist/jira-reporter.js +7 -18
- package/dist/remove-project.js +19 -19
- package/dist/schema/auto-vex-config.schema.json +36 -0
- package/dist/schema/conf-schema.json +33 -2
- package/dist/schema/jira-config-schema.json +10 -0
- package/dist/vuln-scan.js +12 -12
- package/package.json +6 -5
package/dist/vuln-scan.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
3
|
-
GFS4: `),console.error(t)});k[N]||(Ht=global[N]||[],Qt(k,Ht),k.close=(function(t){function e(r,n){return t.call(k,r,function(i){i||Yt(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,Fe,{value:t}),e})(k.close),k.closeSync=(function(t){function e(r){t.apply(k,arguments),Yt()}return Object.defineProperty(e,Fe,{value:t}),e})(k.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ae(k[N]),require("assert").equal(k[N].length,0)}));var Ht;global[N]||Qt(global,k[N]);dt.exports=mt(Ti(k));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!k.__patched&&(dt.exports=mt(k),k.__patched=!0);function mt(t){Di(t),t.gracefulify=mt,t.createReadStream=R,t.createWriteStream=rt;var e=t.readFile;t.readFile=r;function r(h,v,x){return typeof v=="function"&&(x=v,v=null),I(h,v,x);function I(F,C,E,O){return e(F,C,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?ue([I,[F,C,E],P,O||Date.now(),Date.now()]):typeof E=="function"&&E.apply(this,arguments)})}}var n=t.writeFile;t.writeFile=i;function i(h,v,x,I){return typeof x=="function"&&(I=x,x=null),F(h,v,x,I);function F(C,E,O,P,M){return n(C,E,O,function(L){L&&(L.code==="EMFILE"||L.code==="ENFILE")?ue([F,[C,E,O,P],L,M||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(h,v,x,I){return typeof x=="function"&&(I=x,x=null),F(h,v,x,I);function F(C,E,O,P,M){return o(C,E,O,function(L){L&&(L.code==="EMFILE"||L.code==="ENFILE")?ue([F,[C,E,O,P],L,M||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=p);function p(h,v,x,I){return typeof x=="function"&&(I=x,x=0),F(h,v,x,I);function F(C,E,O,P,M){return c(C,E,O,function(L){L&&(L.code==="EMFILE"||L.code==="ENFILE")?ue([F,[C,E,O,P],L,M||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}var f=t.readdir;t.readdir=m;var a=/^v[0-5]\./;function m(h,v,x){typeof v=="function"&&(x=v,v=null);var I=a.test(process.version)?function(E,O,P,M){return f(E,F(E,O,P,M))}:function(E,O,P,M){return f(E,O,F(E,O,P,M))};return I(h,v,x);function F(C,E,O,P){return function(M,L){M&&(M.code==="EMFILE"||M.code==="ENFILE")?ue([I,[C,E,O],M,P||Date.now(),Date.now()]):(L&&L.sort&&L.sort(),typeof O=="function"&&O.call(this,M,L))}}}if(process.version.substr(0,4)==="v0.8"){var u=Ci(t);w=u.ReadStream,b=u.WriteStream}var l=t.ReadStream;l&&(w.prototype=Object.create(l.prototype),w.prototype.open=D);var d=t.WriteStream;d&&(b.prototype=Object.create(d.prototype),b.prototype.open=G),Object.defineProperty(t,"ReadStream",{get:function(){return w},set:function(h){w=h},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return b},set:function(h){b=h},enumerable:!0,configurable:!0});var y=w;Object.defineProperty(t,"FileReadStream",{get:function(){return y},set:function(h){y=h},enumerable:!0,configurable:!0});var S=b;Object.defineProperty(t,"FileWriteStream",{get:function(){return S},set:function(h){S=h},enumerable:!0,configurable:!0});function w(h,v){return this instanceof w?(l.apply(this,arguments),this):w.apply(Object.create(w.prototype),arguments)}function D(){var h=this;he(h.path,h.flags,h.mode,function(v,x){v?(h.autoClose&&h.destroy(),h.emit("error",v)):(h.fd=x,h.emit("open",x),h.read())})}function b(h,v){return this instanceof b?(d.apply(this,arguments),this):b.apply(Object.create(b.prototype),arguments)}function G(){var h=this;he(h.path,h.flags,h.mode,function(v,x){v?(h.destroy(),h.emit("error",v)):(h.fd=x,h.emit("open",x))})}function R(h,v){return new t.ReadStream(h,v)}function rt(h,v){return new t.WriteStream(h,v)}var nt=t.open;t.open=he;function he(h,v,x,I){return typeof x=="function"&&(I=x,x=null),F(h,v,x,I);function F(C,E,O,P,M){return nt(C,E,O,function(L,ga){L&&(L.code==="EMFILE"||L.code==="ENFILE")?ue([F,[C,E,O,P],L,M||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}return t}function ue(t){ae("ENQUEUE",t[0].name,t[1]),k[N].push(t),pt()}var Ie;function Yt(){for(var t=Date.now(),e=0;e<k[N].length;++e)k[N][e].length>2&&(k[N][e][3]=t,k[N][e][4]=t);pt()}function pt(){if(clearTimeout(Ie),Ie=void 0,k[N].length!==0){var t=k[N].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 c=Date.now()-o,p=Math.max(o-i,1),f=Math.min(p*1.2,100);c>=f?(ae("RETRY",e.name,r),e.apply(null,r.concat([i]))):k[N].push(t)}Ie===void 0&&(Ie=setTimeout(pt,0))}}});var $=g(z=>{"use strict";var Kt=T().fromCallback,A=fe(),Ii=["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 A[t]=="function");Object.assign(z,A);Ii.forEach(t=>{z[t]=Kt(A[t])});z.exists=function(t,e){return typeof e=="function"?A.exists(t,e):new Promise(r=>A.exists(t,r))};z.read=function(t,e,r,n,i,o){return typeof o=="function"?A.read(t,e,r,n,i,o):new Promise((s,c)=>{A.read(t,e,r,n,i,(p,f,a)=>{if(p)return c(p);s({bytesRead:f,buffer:a})})})};z.write=function(t,e,...r){return typeof r[r.length-1]=="function"?A.write(t,e,...r):new Promise((n,i)=>{A.write(t,e,...r,(o,s,c)=>{if(o)return i(o);n({bytesWritten:s,buffer:c})})})};z.readv=function(t,e,...r){return typeof r[r.length-1]=="function"?A.readv(t,e,...r):new Promise((n,i)=>{A.readv(t,e,...r,(o,s,c)=>{if(o)return i(o);n({bytesRead:s,buffers:c})})})};z.writev=function(t,e,...r){return typeof r[r.length-1]=="function"?A.writev(t,e,...r):new Promise((n,i)=>{A.writev(t,e,...r,(o,s,c)=>{if(o)return i(o);n({bytesWritten:s,buffers:c})})})};typeof A.realpath.native=="function"?z.realpath.native=Kt(A.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Zt=g((Na,zt)=>{"use strict";var Fi=require("path");zt.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(Fi.parse(e).root,""))){let n=new Error(`Path contains invalid characters: ${e}`);throw n.code="EINVAL",n}}});var nr=g((Ra,yt)=>{"use strict";var er=$(),{checkPath:tr}=Zt(),rr=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};yt.exports.makeDir=async(t,e)=>(tr(t),er.mkdir(t,{mode:rr(e),recursive:!0}));yt.exports.makeDirSync=(t,e)=>(tr(t),er.mkdirSync(t,{mode:rr(e),recursive:!0}))});var W=g((Va,ir)=>{"use strict";var Mi=T().fromPromise,{makeDir:Ni,makeDirSync:ht}=nr(),St=Mi(Ni);ir.exports={mkdirs:St,mkdirsSync:ht,mkdirp:St,mkdirpSync:ht,ensureDir:St,ensureDirSync:ht}});var re=g((Aa,sr)=>{"use strict";var Ri=T().fromPromise,or=$();function Vi(t){return or.access(t).then(()=>!0).catch(()=>!1)}sr.exports={pathExists:Ri(Vi),pathExistsSync:or.existsSync}});var gt=g(($a,ar)=>{"use strict";var me=$(),Ai=T().fromPromise;async function $i(t,e,r){let n=await me.open(t,"r+"),i=null;try{await me.futimes(n,e,r)}finally{try{await me.close(n)}catch(o){i=o}}if(i)throw i}function _i(t,e,r){let n=me.openSync(t,"r+");return me.futimesSync(n,e,r),me.closeSync(n)}ar.exports={utimesMillis:Ai($i),utimesMillisSync:_i}});var ce=g((_a,fr)=>{"use strict";var pe=$(),j=require("path"),cr=T().fromPromise;function Bi(t,e,r){let n=r.dereference?i=>pe.stat(i,{bigint:!0}):i=>pe.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 qi(t,e,r){let n,i=r.dereference?s=>pe.statSync(s,{bigint:!0}):s=>pe.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 Ui(t,e,r,n){let{srcStat:i,destStat:o}=await Bi(t,e,n);if(o){if(ge(i,o)){let s=j.basename(t),c=j.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.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()&&vt(t,e))throw new Error(Me(t,e,r));return{srcStat:i,destStat:o}}function Xi(t,e,r,n){let{srcStat:i,destStat:o}=qi(t,e,n);if(o){if(ge(i,o)){let s=j.basename(t),c=j.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.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()&&vt(t,e))throw new Error(Me(t,e,r));return{srcStat:i,destStat:o}}async function lr(t,e,r,n){let i=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===i||o===j.parse(o).root)return;let s;try{s=await pe.stat(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(ge(e,s))throw new Error(Me(t,r,n));return lr(t,e,o,n)}function ur(t,e,r,n){let i=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===i||o===j.parse(o).root)return;let s;try{s=pe.statSync(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(ge(e,s))throw new Error(Me(t,r,n));return ur(t,e,o,n)}function ge(t,e){return e.ino!==void 0&&e.dev!==void 0&&e.ino===t.ino&&e.dev===t.dev}function vt(t,e){let r=j.resolve(t).split(j.sep).filter(i=>i),n=j.resolve(e).split(j.sep).filter(i=>i);return r.every((i,o)=>n[o]===i)}function Me(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}fr.exports={checkPaths:cr(Ui),checkPathsSync:Xi,checkParentPaths:cr(lr),checkParentPathsSync:ur,isSrcSubdir:vt,areIdentical:ge}});var pr=g((Ba,mr)=>{"use strict";async function Gi(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})))}mr.exports={asyncIteratorConcurrentProcess:Gi}});var gr=g((qa,Sr)=>{"use strict";var V=$(),ve=require("path"),{mkdirs:Ji}=W(),{pathExists:Wi}=re(),{utimesMillis:Hi}=gt(),we=ce(),{asyncIteratorConcurrentProcess:Yi}=pr();async function Qi(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 Ii=Object.create;var Yt=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Mi=Object.getOwnPropertyNames;var Ni=Object.getPrototypeOf,_i=Object.prototype.hasOwnProperty;var y=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var $i=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Mi(e))!_i.call(t,i)&&i!==r&&Yt(t,i,{get:()=>e[i],enumerable:!(n=Ri(e,i))||n.enumerable});return t};var Te=(t,e,r)=>(r=t!=null?Ii(Ni(t)):{},$i(e||!t||!t.__esModule?Yt(r,"default",{value:t,enumerable:!0}):r,t));var O=y(jt=>{"use strict";jt.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})};jt.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 Er=y((qc,Dr)=>{var ee=require("constants"),ro=process.cwd,Ye=null,no=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Ye||(Ye=ro.call(process)),Ye};try{process.cwd()}catch{}typeof process.chdir=="function"&&(Ft=process.chdir,process.chdir=function(t){Ye=null,Ft.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,Ft));var Ft;Dr.exports=io;function io(t){ee.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=c(t.stat),t.fstat=c(t.fstat),t.lstat=c(t.lstat),t.statSync=m(t.statSync),t.fstatSync=m(t.fstatSync),t.lstatSync=m(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(a,p,l){l&&process.nextTick(l)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(a,p,l,u){u&&process.nextTick(u)},t.lchownSync=function(){}),no==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:(function(a){function p(l,u,f){var g=Date.now(),v=0;a(l,u,function P($){if($&&($.code==="EACCES"||$.code==="EPERM"||$.code==="EBUSY")&&Date.now()-g<6e4){setTimeout(function(){t.stat(u,function(I,ve){I&&I.code==="ENOENT"?a(l,u,P):f($)})},v),v<100&&(v+=10);return}f&&f($)})}return Object.setPrototypeOf&&Object.setPrototypeOf(p,a),p})(t.rename)),t.read=typeof t.read!="function"?t.read:(function(a){function p(l,u,f,g,v,P){var $;if(P&&typeof P=="function"){var I=0;$=function(ve,Qt,zt){if(ve&&ve.code==="EAGAIN"&&I<10)return I++,a.call(t,l,u,f,g,v,$);P.apply(this,arguments)}}return a.call(t,l,u,f,g,v,$)}return Object.setPrototypeOf&&Object.setPrototypeOf(p,a),p})(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:(function(a){return function(p,l,u,f,g){for(var v=0;;)try{return a.call(t,p,l,u,f,g)}catch(P){if(P.code==="EAGAIN"&&v<10){v++;continue}throw P}}})(t.readSync);function e(a){a.lchmod=function(p,l,u){a.open(p,ee.O_WRONLY|ee.O_SYMLINK,l,function(f,g){if(f){u&&u(f);return}a.fchmod(g,l,function(v){a.close(g,function(P){u&&u(v||P)})})})},a.lchmodSync=function(p,l){var u=a.openSync(p,ee.O_WRONLY|ee.O_SYMLINK,l),f=!0,g;try{g=a.fchmodSync(u,l),f=!1}finally{if(f)try{a.closeSync(u)}catch{}else a.closeSync(u)}return g}}function r(a){ee.hasOwnProperty("O_SYMLINK")&&a.futimes?(a.lutimes=function(p,l,u,f){a.open(p,ee.O_SYMLINK,function(g,v){if(g){f&&f(g);return}a.futimes(v,l,u,function(P){a.close(v,function($){f&&f(P||$)})})})},a.lutimesSync=function(p,l,u){var f=a.openSync(p,ee.O_SYMLINK),g,v=!0;try{g=a.futimesSync(f,l,u),v=!1}finally{if(v)try{a.closeSync(f)}catch{}else a.closeSync(f)}return g}):a.futimes&&(a.lutimes=function(p,l,u,f){f&&process.nextTick(f)},a.lutimesSync=function(){})}function n(a){return a&&function(p,l,u){return a.call(t,p,l,function(f){d(f)&&(f=null),u&&u.apply(this,arguments)})}}function i(a){return a&&function(p,l){try{return a.call(t,p,l)}catch(u){if(!d(u))throw u}}}function o(a){return a&&function(p,l,u,f){return a.call(t,p,l,u,function(g){d(g)&&(g=null),f&&f.apply(this,arguments)})}}function s(a){return a&&function(p,l,u){try{return a.call(t,p,l,u)}catch(f){if(!d(f))throw f}}}function c(a){return a&&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?a.call(t,p,l,f):a.call(t,p,f)}}function m(a){return a&&function(p,l){var u=l?a.call(t,p,l):a.call(t,p);return u&&(u.uid<0&&(u.uid+=4294967296),u.gid<0&&(u.gid+=4294967296)),u}}function d(a){if(!a||a.code==="ENOSYS")return!0;var p=!process.getuid||process.getuid()!==0;return!!(p&&(a.code==="EINVAL"||a.code==="EPERM"))}}});var jr=y((Xc,Or)=>{var Cr=require("stream").Stream;Or.exports=oo;function oo(t){return{ReadStream:e,WriteStream:r};function e(n,i){if(!(this instanceof e))return new e(n,i);Cr.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),c=0,m=s.length;c<m;c++){var d=s[c];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(a,p){if(a){o.emit("error",a),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);Cr.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,c=o.length;s<c;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 Tr=y((Jc,Fr)=>{"use strict";Fr.exports=ao;var so=Object.getPrototypeOf||function(t){return t.__proto__};function ao(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:so(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var de=y((Wc,Vt)=>{var D=require("fs"),co=Er(),lo=jr(),uo=Tr(),Ze=require("util"),V,tt;typeof Symbol=="function"&&typeof Symbol.for=="function"?(V=Symbol.for("graceful-fs.queue"),tt=Symbol.for("graceful-fs.previous")):(V="___graceful-fs.queue",tt="___graceful-fs.previous");function po(){}function Ar(t,e){Object.defineProperty(t,V,{get:function(){return e}})}var se=po;Ze.debuglog?se=Ze.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(se=function(){var t=Ze.format.apply(Ze,arguments);t="GFS4: "+t.split(/\n/).join(`
|
|
3
|
+
GFS4: `),console.error(t)});D[V]||(kr=global[V]||[],Ar(D,kr),D.close=(function(t){function e(r,n){return t.call(D,r,function(i){i||Vr(),typeof n=="function"&&n.apply(this,arguments)})}return Object.defineProperty(e,tt,{value:t}),e})(D.close),D.closeSync=(function(t){function e(r){t.apply(D,arguments),Vr()}return Object.defineProperty(e,tt,{value:t}),e})(D.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){se(D[V]),require("assert").equal(D[V].length,0)}));var kr;global[V]||Ar(global,D[V]);Vt.exports=Tt(uo(D));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!D.__patched&&(Vt.exports=Tt(D),D.__patched=!0);function Tt(t){co(t),t.gracefulify=Tt,t.createReadStream=Qt,t.createWriteStream=zt;var e=t.readFile;t.readFile=r;function r(h,w,S){return typeof w=="function"&&(S=w,w=null),F(h,w,S);function F(T,C,L,E){return e(T,C,function(b){b&&(b.code==="EMFILE"||b.code==="ENFILE")?fe([F,[T,C,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,F){return typeof S=="function"&&(F=S,S=null),T(h,w,S,F);function T(C,L,E,b,k){return n(C,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?fe([T,[C,L,E,b],x,k||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(h,w,S,F){return typeof S=="function"&&(F=S,S=null),T(h,w,S,F);function T(C,L,E,b,k){return o(C,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?fe([T,[C,L,E,b],x,k||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=m);function m(h,w,S,F){return typeof S=="function"&&(F=S,S=0),T(h,w,S,F);function T(C,L,E,b,k){return c(C,L,E,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?fe([T,[C,L,E,b],x,k||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var d=t.readdir;t.readdir=p;var a=/^v[0-5]\./;function p(h,w,S){typeof w=="function"&&(S=w,w=null);var F=a.test(process.version)?function(L,E,b,k){return d(L,T(L,E,b,k))}:function(L,E,b,k){return d(L,E,T(L,E,b,k))};return F(h,w,S);function T(C,L,E,b){return function(k,x){k&&(k.code==="EMFILE"||k.code==="ENFILE")?fe([F,[C,L,E],k,b||Date.now(),Date.now()]):(x&&x.sort&&x.sort(),typeof E=="function"&&E.call(this,k,x))}}}if(process.version.substr(0,4)==="v0.8"){var l=lo(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=ve),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;yt(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 ve(){var h=this;yt(h.path,h.flags,h.mode,function(w,S){w?(h.destroy(),h.emit("error",w)):(h.fd=S,h.emit("open",S))})}function Qt(h,w){return new t.ReadStream(h,w)}function zt(h,w){return new t.WriteStream(h,w)}var Ai=t.open;t.open=yt;function yt(h,w,S,F){return typeof S=="function"&&(F=S,S=null),T(h,w,S,F);function T(C,L,E,b,k){return Ai(C,L,E,function(x,xa){x&&(x.code==="EMFILE"||x.code==="ENFILE")?fe([T,[C,L,E,b],x,k||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}return t}function fe(t){se("ENQUEUE",t[0].name,t[1]),D[V].push(t),kt()}var et;function Vr(){for(var t=Date.now(),e=0;e<D[V].length;++e)D[V][e].length>2&&(D[V][e][3]=t,D[V][e][4]=t);kt()}function kt(){if(clearTimeout(et),et=void 0,D[V].length!==0){var t=D[V].shift(),e=t[0],r=t[1],n=t[2],i=t[3],o=t[4];if(i===void 0)se("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-i>=6e4){se("TIMEOUT",e.name,r);var s=r.pop();typeof s=="function"&&s.call(null,n)}else{var c=Date.now()-o,m=Math.max(o-i,1),d=Math.min(m*1.2,100);c>=d?(se("RETRY",e.name,r),e.apply(null,r.concat([i]))):D[V].push(t)}et===void 0&&(et=setTimeout(kt,0))}}});var M=y(Q=>{"use strict";var Ir=O().fromCallback,R=de(),mo=["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(Q,R);mo.forEach(t=>{Q[t]=Ir(R[t])});Q.exists=function(t,e){return typeof e=="function"?R.exists(t,e):new Promise(r=>R.exists(t,r))};Q.read=function(t,e,r,n,i,o){return typeof o=="function"?R.read(t,e,r,n,i,o):new Promise((s,c)=>{R.read(t,e,r,n,i,(m,d,a)=>{if(m)return c(m);s({bytesRead:d,buffer:a})})})};Q.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,c)=>{if(o)return i(o);n({bytesWritten:s,buffer:c})})})};Q.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,c)=>{if(o)return i(o);n({bytesRead:s,buffers:c})})})};Q.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,c)=>{if(o)return i(o);n({bytesWritten:s,buffers:c})})})};typeof R.realpath.native=="function"?Q.realpath.native=Ir(R.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Mr=y((Hc,Rr)=>{"use strict";var fo=require("path");Rr.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(fo.parse(e).root,""))){let n=new Error(`Path contains invalid characters: ${e}`);throw n.code="EINVAL",n}}});var Br=y((Kc,At)=>{"use strict";var Nr=M(),{checkPath:_r}=Mr(),$r=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};At.exports.makeDir=async(t,e)=>(_r(t),Nr.mkdir(t,{mode:$r(e),recursive:!0}));At.exports.makeDirSync=(t,e)=>(_r(t),Nr.mkdirSync(t,{mode:$r(e),recursive:!0}))});var q=y((Qc,Ur)=>{"use strict";var ho=O().fromPromise,{makeDir:yo,makeDirSync:It}=Br(),Rt=ho(yo);Ur.exports={mkdirs:Rt,mkdirsSync:It,mkdirp:Rt,mkdirpSync:It,ensureDir:Rt,ensureDirSync:It}});var te=y((zc,Xr)=>{"use strict";var go=O().fromPromise,qr=M();function So(t){return qr.access(t).then(()=>!0).catch(()=>!1)}Xr.exports={pathExists:go(So),pathExistsSync:qr.existsSync}});var Mt=y((Yc,Jr)=>{"use strict";var he=M(),vo=O().fromPromise;async function wo(t,e,r){let n=await he.open(t,"r+"),i=null;try{await he.futimes(n,e,r)}finally{try{await he.close(n)}catch(o){i=o}}if(i)throw i}function bo(t,e,r){let n=he.openSync(t,"r+");return he.futimesSync(n,e,r),he.closeSync(n)}Jr.exports={utimesMillis:vo(wo),utimesMillisSync:bo}});var ae=y((Zc,Kr)=>{"use strict";var ye=M(),j=require("path"),Wr=O().fromPromise;function xo(t,e,r){let n=r.dereference?i=>ye.stat(i,{bigint:!0}):i=>ye.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 Po(t,e,r){let n,i=r.dereference?s=>ye.statSync(s,{bigint:!0}):s=>ye.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 Lo(t,e,r,n){let{srcStat:i,destStat:o}=await xo(t,e,n);if(o){if(Pe(i,o)){let s=j.basename(t),c=j.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.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()&&Nt(t,e))throw new Error(rt(t,e,r));return{srcStat:i,destStat:o}}function Do(t,e,r,n){let{srcStat:i,destStat:o}=Po(t,e,n);if(o){if(Pe(i,o)){let s=j.basename(t),c=j.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.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()&&Nt(t,e))throw new Error(rt(t,e,r));return{srcStat:i,destStat:o}}async function Gr(t,e,r,n){let i=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===i||o===j.parse(o).root)return;let s;try{s=await ye.stat(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(Pe(e,s))throw new Error(rt(t,r,n));return Gr(t,e,o,n)}function Hr(t,e,r,n){let i=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===i||o===j.parse(o).root)return;let s;try{s=ye.statSync(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(Pe(e,s))throw new Error(rt(t,r,n));return Hr(t,e,o,n)}function Pe(t,e){return e.ino!==void 0&&e.dev!==void 0&&e.ino===t.ino&&e.dev===t.dev}function Nt(t,e){let r=j.resolve(t).split(j.sep).filter(i=>i),n=j.resolve(e).split(j.sep).filter(i=>i);return r.every((i,o)=>n[o]===i)}function rt(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}Kr.exports={checkPaths:Wr(Lo),checkPathsSync:Do,checkParentPaths:Wr(Gr),checkParentPathsSync:Hr,isSrcSubdir:Nt,areIdentical:Pe}});var zr=y((el,Qr)=>{"use strict";async function Eo(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})))}Qr.exports={asyncIteratorConcurrentProcess:Eo}});var rn=y((tl,tn)=>{"use strict";var A=M(),Le=require("path"),{mkdirs:Co}=q(),{pathExists:Oo}=te(),{utimesMillis:jo}=Mt(),De=ae(),{asyncIteratorConcurrentProcess:Fo}=zr();async function To(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
|
|
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 Zr(t,e,r))return;let s=Le.dirname(e);await Oo(s)||await Co(s),await en(i,t,e,r)}async function Zr(t,e,r){return r.filter?r.filter(t,e):!0}async function en(t,e,r,n){let o=await(n.dereference?A.stat:A.lstat)(e);if(o.isDirectory())return Io(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return ko(o,t,e,r,n);if(o.isSymbolicLink())return Ro(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 ko(t,e,r,n,i){if(!e)return Yr(t,r,n,i);if(i.overwrite)return await A.unlink(n),Yr(t,r,n,i);if(i.errorOnExist)throw new Error(`'${n}' already exists`)}async function Yr(t,e,r,n){if(await A.copyFile(e,r),n.preserveTimestamps){Vo(t.mode)&&await Ao(r,t.mode);let i=await A.stat(e);await jo(r,i.atime,i.mtime)}return A.chmod(r,t.mode)}function Vo(t){return(t&128)===0}function Ao(t,e){return A.chmod(t,e|128)}async function Io(t,e,r,n,i){e||await A.mkdir(n),await Fo(await A.opendir(r),async o=>{let s=Le.join(r,o.name),c=Le.join(n,o.name);if(await Zr(s,c,i)){let{destStat:d}=await De.checkPaths(s,c,"copy",i);await en(d,s,c,i)}}),e||await A.chmod(n,t.mode)}async function Ro(t,e,r,n){let i=await A.readlink(e);if(n.dereference&&(i=Le.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=Le.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)}tn.exports=To});var cn=y((rl,an)=>{"use strict";var N=de(),Ee=require("path"),Mo=q().mkdirsSync,No=Mt().utimesMillisSync,Ce=ae();function _o(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}=
|
|
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 Wo(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}cn.exports={stringify:Jo,stripBom:Wo}});var mn=g((ec,fn)=>{var de;try{de=fe()}catch{de=require("fs")}var Ve=T(),{stringify:ln,stripBom:un}=Re();async function Ho(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||de,n="throws"in e?e.throws:!0,i=await Ve.fromCallback(r.readFile)(t,e);i=un(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 Yo=Ve.fromPromise(Ho);function Qo(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||de,n="throws"in e?e.throws:!0;try{let i=r.readFileSync(t,e);return i=un(i),JSON.parse(i,e.reviver)}catch(i){if(n)throw i.message=`${t}: ${i.message}`,i;return null}}async function Ko(t,e,r={}){let n=r.fs||de,i=ln(e,r);await Ve.fromCallback(n.writeFile)(t,i,r)}var zo=Ve.fromPromise(Ko);function Zo(t,e,r={}){let n=r.fs||de,i=ln(e,r);return n.writeFileSync(t,i,r)}fn.exports={readFile:Yo,readFileSync:Qo,writeFile:zo,writeFileSync:Zo}});var dn=g((tc,pn)=>{"use strict";var Ae=mn();pn.exports={readJson:Ae.readFile,readJsonSync:Ae.readFileSync,writeJson:Ae.writeFile,writeJsonSync:Ae.writeFileSync}});var $e=g((rc,Sn)=>{"use strict";var es=T().fromPromise,bt=$(),yn=require("path"),hn=W(),ts=re().pathExists;async function rs(t,e,r="utf-8"){let n=yn.dirname(t);return await ts(n)||await hn.mkdirs(n),bt.writeFile(t,e,r)}function ns(t,...e){let r=yn.dirname(t);bt.existsSync(r)||hn.mkdirsSync(r),bt.writeFileSync(t,...e)}Sn.exports={outputFile:es(rs),outputFileSync:ns}});var vn=g((nc,gn)=>{"use strict";var{stringify:is}=Re(),{outputFile:os}=$e();async function ss(t,e,r={}){let n=is(e,r);await os(t,n,r)}gn.exports=ss});var bn=g((ic,wn)=>{"use strict";var{stringify:as}=Re(),{outputFileSync:cs}=$e();function ls(t,e,r){let n=as(e,r);cs(t,n,r)}wn.exports=ls});var Pn=g((oc,xn)=>{"use strict";var us=T().fromPromise,B=dn();B.outputJson=us(vn());B.outputJsonSync=bn();B.outputJSON=B.outputJson;B.outputJSONSync=B.outputJsonSync;B.writeJSON=B.writeJson;B.writeJSONSync=B.writeJsonSync;B.readJSON=B.readJson;B.readJSONSync=B.readJsonSync;xn.exports=B});var Dn=g((sc,On)=>{"use strict";var fs=$(),Ln=require("path"),{copy:ms}=Ne(),{remove:kn}=Pe(),{mkdirp:ps}=W(),{pathExists:ds}=re(),En=ce();async function ys(t,e,r={}){let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=await En.checkPaths(t,e,"move",r);await En.checkParentPaths(t,i,e,"move");let s=Ln.dirname(e);return Ln.parse(s).root!==s&&await ps(s),hs(t,e,n,o)}async function hs(t,e,r,n){if(!n){if(r)await kn(e);else if(await ds(e))throw new Error("dest already exists.")}try{await fs.rename(t,e)}catch(i){if(i.code!=="EXDEV")throw i;await Ss(t,e,r)}}async function Ss(t,e,r){return await ms(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),kn(t)}On.exports=ys});var Fn=g((ac,In)=>{"use strict";var Tn=fe(),Pt=require("path"),gs=Ne().copySync,jn=Pe().removeSync,vs=W().mkdirpSync,Cn=ce();function ws(t,e,r){r=r||{};let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=Cn.checkPathsSync(t,e,"move",r);return Cn.checkParentPathsSync(t,i,e,"move"),bs(e)||vs(Pt.dirname(e)),xs(t,e,n,o)}function bs(t){let e=Pt.dirname(t);return Pt.parse(e).root===e}function xs(t,e,r,n){if(n)return xt(t,e,r);if(r)return jn(e),xt(t,e,r);if(Tn.existsSync(e))throw new Error("dest already exists.");return xt(t,e,r)}function xt(t,e,r){try{Tn.renameSync(t,e)}catch(n){if(n.code!=="EXDEV")throw n;return Ps(t,e,r)}}function Ps(t,e,r){return gs(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),jn(t)}In.exports=ws});var Nn=g((cc,Mn)=>{"use strict";var Ls=T().fromPromise;Mn.exports={move:Ls(Dn()),moveSync:Fn()}});var Vn=g((lc,Rn)=>{"use strict";Rn.exports={...$(),...Ne(),...Mr(),...an(),...Pn(),...W(),...Nn(),...$e(),...re(),...Pe()}});var An=g(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.EXTENSIONS_LANGUAGES=void 0;_e.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 Ee=g(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.setOptionValues=Es;function Es(t,e){for(let r of Object.keys(t))t[r]!==void 0&&(e[r]=t[r]);return e}});var _n=g(Y=>{"use strict";var ks=Y&&Y.__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]})),Os=Y&&Y.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),Ds=Y&&Y.__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"&&ks(r,e,n[i]);return Os(r,e),r}})();Object.defineProperty(Y,"__esModule",{value:!0});Y.SarifBuilder=void 0;var $n=Ds(Vn()),Cs=An(),Ts=Ee(),Et=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,Ts.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();$n.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await $n.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,c;e.artifacts=e.artifacts||[];let p=new Set(e.artifacts.map(m=>{var u;return(u=m?.location)===null||u===void 0?void 0:u.uri}).filter(Boolean));for(let m of e.results||[])for(let u of m.locations||[]){let l=(n=(r=u?.physicalLocation)===null||r===void 0?void 0:r.artifactLocation)===null||n===void 0?void 0:n.uri;if(l&&!p.has(l)){let d=l.lastIndexOf("."),y=d!==-1?l.slice(d+1):"",S=Cs.EXTENSIONS_LANGUAGES[y]||"unknown";e.artifacts.push({sourceLanguage:S,location:{uri:l}}),p.add(l)}}let f=new Map;e.artifacts.forEach((m,u)=>{var l;let d=(l=m?.location)===null||l===void 0?void 0:l.uri;d&&f.set(d,u)});let a=new Map;(((o=(i=e?.tool)===null||i===void 0?void 0:i.driver)===null||o===void 0?void 0:o.rules)||[]).forEach((m,u)=>{a.set(m.id,u)});for(let m of e.results||[]){if(m.ruleId){let u=a.get(m.ruleId);u!==void 0&&(m.ruleIndex=u)}if(m.locations)for(let u of m.locations){let l=(c=(s=u?.physicalLocation)===null||s===void 0?void 0:s.artifactLocation)===null||c===void 0?void 0:c.uri;if(l){let d=f.get(l);d!==void 0&&(u.physicalLocation.artifactLocation.index=d)}}}return e}};Y.SarifBuilder=Et});var Bn=g(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.SarifResultBuilder=void 0;var js=Ee(),kt=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,js.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={})}};Be.SarifResultBuilder=kt});var qn=g(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.SarifRuleBuilder=void 0;var Is=Ee(),Ot=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,Is.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}};qe.SarifRuleBuilder=Ot});var Un=g(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.SarifRunBuilder=void 0;var Fs=Ee(),Dt=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,Fs.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}};Ue.SarifRunBuilder=Dt});var Xn=g(Q=>{"use strict";Object.defineProperty(Q,"__esModule",{value:!0});Q.SarifResultBuilder=Q.SarifRuleBuilder=Q.SarifRunBuilder=Q.SarifBuilder=void 0;var Ms=_n();Object.defineProperty(Q,"SarifBuilder",{enumerable:!0,get:function(){return Ms.SarifBuilder}});var Ns=Bn();Object.defineProperty(Q,"SarifResultBuilder",{enumerable:!0,get:function(){return Ns.SarifResultBuilder}});var Rs=qn();Object.defineProperty(Q,"SarifRuleBuilder",{enumerable:!0,get:function(){return Rs.SarifRuleBuilder}});var Vs=Un();Object.defineProperty(Q,"SarifRunBuilder",{enumerable:!0,get:function(){return Vs.SarifRunBuilder}})});var Jn=g((Sc,Gn)=>{"use strict";var As=/["'&<>]/;Gn.exports=$s;function $s(t){var e=""+t,r=As.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=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";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 tt=require("zx"),le=require("fs/promises");var U={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4};var De=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=_t(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=gi(s.severity,e.severity),s.scannerSeverity[r]=e.severity,s.detectedBy=it(s.detectedBy,r),s.components=it(s.components,e.components[0]),s.refs=it(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);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 gi(t,e){return _t(t,e)>0?t:e}function _t(t,e){return U[t]-U[e]}function it(t,e){return e?Array.from(new Set([...t,e]).values()):t}var Ce=Oe(require("path"));var q=require("fs/promises"),ot=require("path");async function X(t){try{return await se(t)?JSON.parse(await(0,q.readFile)(t,{encoding:"utf-8"})):void 0}catch(e){throw new Error(`Error reading JSON file ${t}: ${e}`,{cause:e})}}async function st(t,e){let r=JSON.stringify(e,null,4)+`
|
|
9
|
-
`,n=await vi(t,r);await(0,q.writeFile)(t,n,{encoding:"utf-8"})}function J(t){return t?t.replace(/\?.*$/,""):""}async function se(t){try{return await(0,q.access)(t,q.constants.F_OK),!0}catch{return!1}}async function at(t){let e=(0,ot.resolve)(t),r=await(0,q.readdir)(e,{withFileTypes:!0});for(let n of r){let i=(0,ot.resolve)(n.parentPath,n.name);n.isDirectory()?await at(i):await(0,q.rm)(i)}await(0,q.rmdir)(e)}async function Se(t,e){let r=e?.user&&e?.pw?{Authorization:`Basic ${Buffer.from(`${e.user}:${e.pw}`).toString("base64")}`}:{},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 vi(t,e){let r=await bi();if(!r)return e;let n=await r.resolveConfig(t);return n?await r.format(e,{...n,filepath:t}):e}var wi;function bi(){return wi??=import("prettier").catch(()=>{})}var ct;async function lt(t){if(ct)return ct;let e="https://repository.conterra.de/repository/maven-mirror-ct",r=ee(t.workingDir,"input/vex"),n=ee(t.workingDir,"output"),i=ee(t.workingDir,"cache"),o=["grype","trivy","ossindex"],s=ee(t.workingDir,"vuln-scan-conf.json"),c=await X(s);if(!c)throw new Error(`Missing project configuration file '${s}'`);let p=c.findNoLongerDetectedVulnerabilitiesOnlyForSnapshots??!1;return ct={projectConfigFileLocation:s,onNewVulnerabilities:c.onNewVulnerabilities??(c.failOnNewVulnerabilities?"fail":"warn"),onNoLongerDetectedVulnerabilities:c.onNoLongerDetectedVulnerabilities??"ignore",reportNoLongerDetectedVulnerabilities:c.reportNoLongerDetectedVulnerabilities??!0,consoleReport:c.consoleReport||"BY_PROJECT_DETAILED",createSubDirsForProject:c.createSubDirsForProject??!0,mavenRepo:c.mavenRepo??e,vexUrls:c.vexUrls??[],vexDir:ee(t.workingDir,c.vexDir)??r,outDir:ee(t.workingDir,c.outDir)??n,cacheDir:ee(t.workingDir,c.cacheDir)??i,scanners:(c.scanners??o).map(f=>{if(typeof f!="string")throw new Error(`Invalid scanner name '${f}' in configuration file '${s}'`);let a=f.split("@");if(a.length>2)throw new Error(`Invalid scanner name '${f}' in configuration file '${s}'`);let m=a[0],u=a[1]??"";return{name:m,version:u}}),projects:(c.projects??[]).map(f=>{let a=f;if(!a.name)throw new Error("Project name is missing on entry:"+JSON.stringify(a));if(!a.version)throw new Error("Project version is missing on entry:"+JSON.stringify(a));if(!a.purl)throw new Error("Project purl is missing on entry:"+JSON.stringify(a));return a.purlAliases||(a.purlAliases=[]),a.enabled==null&&(a.enabled=!0),a.silent==null&&(a.silent=!1),a.minimumSeverity||(a.minimumSeverity="UNKNOWN"),a.sbomFile?{...a,sbomFile:ee(t.workingDir,a.sbomFile)}:(a.detectNoLongerUsedVulnerabilities=p?a.purl.endsWith("-SNAPSHOT"):!0,f)})}}function ee(t,e){if(e)return Ce.default.isAbsolute(e)?e:(0,Ce.resolve)(t,e)}var oe=Oe(Xn());var Yn=Oe(Jn());function Ge(t,e=""){return Wn(t,e,new Set,new Set)}function Wn(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 c=Wn(s,e+(o?" ":" "),r,n);c!==""&&(i+=`
|
|
10
|
-
`,i+=c)}return r.delete(t.purl),i}var
|
|
7
|
+
see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:n,destStat:i}=Ce.checkPathsSync(t,e,"copy",r);if(Ce.checkParentPathsSync(t,n,e,"copy"),r.filter&&!r.filter(t,e))return;let o=Ee.dirname(e);return N.existsSync(o)||Mo(o),nn(i,t,e,r)}function nn(t,e,r,n){let o=(n.dereference?N.statSync:N.lstatSync)(e);if(o.isDirectory())return Wo(o,t,e,r,n);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return $o(o,t,e,r,n);if(o.isSymbolicLink())return Ko(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 $o(t,e,r,n,i){return e?Bo(t,r,n,i):on(t,r,n,i)}function Bo(t,e,r,n){if(n.overwrite)return N.unlinkSync(r),on(t,e,r,n);if(n.errorOnExist)throw new Error(`'${r}' already exists`)}function on(t,e,r,n){return N.copyFileSync(e,r),n.preserveTimestamps&&Uo(t.mode,e,r),_t(r,t.mode)}function Uo(t,e,r){return qo(t)&&Xo(r,t),Jo(e,r)}function qo(t){return(t&128)===0}function Xo(t,e){return _t(t,e|128)}function _t(t,e){return N.chmodSync(t,e)}function Jo(t,e){let r=N.statSync(t);return No(e,r.atime,r.mtime)}function Wo(t,e,r,n,i){return e?sn(r,n,i):Go(t.mode,r,n,i)}function Go(t,e,r,n){return N.mkdirSync(r),sn(e,r,n),_t(r,t)}function sn(t,e,r){let n=N.opendirSync(t);try{let i;for(;(i=n.readSync())!==null;)Ho(i.name,t,e,r)}finally{n.closeSync()}}function Ho(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}=Ce.checkPathsSync(i,o,"copy",n);return nn(s,i,o,n)}function Ko(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)),Ce.isSrcSubdir(i,o))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${o}'.`);if(Ce.isSrcSubdir(o,i))throw new Error(`Cannot overwrite '${o}' with '${i}'.`);return Qo(i,r)}else return N.symlinkSync(i,r)}function Qo(t,e){return N.unlinkSync(e),N.symlinkSync(t,e)}an.exports=_o});var nt=y((nl,ln)=>{"use strict";var zo=O().fromPromise;ln.exports={copy:zo(rn()),copySync:cn()}});var Oe=y((il,pn)=>{"use strict";var un=de(),Yo=O().fromCallback;function Zo(t,e){un.rm(t,{recursive:!0,force:!0},e)}function es(t){un.rmSync(t,{recursive:!0,force:!0})}pn.exports={remove:Yo(Zo),removeSync:es}});var vn=y((ol,Sn)=>{"use strict";var ts=O().fromPromise,dn=M(),hn=require("path"),yn=q(),gn=Oe(),mn=ts(async function(e){let r;try{r=await dn.readdir(e)}catch{return yn.mkdirs(e)}return Promise.all(r.map(n=>gn.remove(hn.join(e,n))))});function fn(t){let e;try{e=dn.readdirSync(t)}catch{return yn.mkdirsSync(t)}e.forEach(r=>{r=hn.join(t,r),gn.removeSync(r)})}Sn.exports={emptyDirSync:fn,emptydirSync:fn,emptyDir:mn,emptydir:mn}});var Pn=y((sl,xn)=>{"use strict";var rs=O().fromPromise,wn=require("path"),z=M(),bn=q();async function ns(t){let e;try{e=await z.stat(t)}catch{}if(e&&e.isFile())return;let r=wn.dirname(t),n=null;try{n=await z.stat(r)}catch(i){if(i.code==="ENOENT"){await bn.mkdirs(r),await z.writeFile(t,"");return}else throw i}n.isDirectory()?await z.writeFile(t,""):await z.readdir(r)}function is(t){let e;try{e=z.statSync(t)}catch{}if(e&&e.isFile())return;let r=wn.dirname(t);try{z.statSync(r).isDirectory()||z.readdirSync(r)}catch(n){if(n&&n.code==="ENOENT")bn.mkdirsSync(r);else throw n}z.writeFileSync(t,"")}xn.exports={createFile:rs(ns),createFileSync:is}});var On=y((al,Cn)=>{"use strict";var os=O().fromPromise,Ln=require("path"),re=M(),Dn=q(),{pathExists:ss}=te(),{areIdentical:En}=ae();async function as(t,e){let r;try{r=await re.lstat(e)}catch{}let n;try{n=await re.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&En(n,r))return;let i=Ln.dirname(e);await ss(i)||await Dn.mkdirs(i),await re.link(t,e)}function cs(t,e){let r;try{r=re.lstatSync(e)}catch{}try{let o=re.lstatSync(t);if(r&&En(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let n=Ln.dirname(e);return re.existsSync(n)||Dn.mkdirsSync(n),re.linkSync(t,e)}Cn.exports={createLink:os(as),createLinkSync:cs}});var Fn=y((cl,jn)=>{"use strict";var ne=require("path"),je=M(),{pathExists:ls}=te(),us=O().fromPromise;async function ps(t,e){if(ne.isAbsolute(t)){try{await je.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=ne.dirname(e),n=ne.join(r,t);if(await ls(n))return{toCwd:n,toDst:t};try{await je.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:ne.relative(r,t)}}function ms(t,e){if(ne.isAbsolute(t)){if(!je.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=ne.dirname(e),n=ne.join(r,t);if(je.existsSync(n))return{toCwd:n,toDst:t};if(!je.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:ne.relative(r,t)}}jn.exports={symlinkPaths:us(ps),symlinkPathsSync:ms}});var Vn=y((ll,kn)=>{"use strict";var Tn=M(),fs=O().fromPromise;async function ds(t,e){if(e)return e;let r;try{r=await Tn.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function hs(t,e){if(e)return e;let r;try{r=Tn.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}kn.exports={symlinkType:fs(ds),symlinkTypeSync:hs}});var Mn=y((ul,Rn)=>{"use strict";var ys=O().fromPromise,An=require("path"),X=M(),{mkdirs:gs,mkdirsSync:Ss}=q(),{symlinkPaths:vs,symlinkPathsSync:ws}=Fn(),{symlinkType:bs,symlinkTypeSync:xs}=Vn(),{pathExists:Ps}=te(),{areIdentical:In}=ae();async function Ls(t,e,r){let n;try{n=await X.lstat(e)}catch{}if(n&&n.isSymbolicLink()){let[c,m]=await Promise.all([X.stat(t),X.stat(e)]);if(In(c,m))return}let i=await vs(t,e);t=i.toDst;let o=await bs(i.toCwd,r),s=An.dirname(e);return await Ps(s)||await gs(s),X.symlink(t,e,o)}function Ds(t,e,r){let n;try{n=X.lstatSync(e)}catch{}if(n&&n.isSymbolicLink()){let c=X.statSync(t),m=X.statSync(e);if(In(c,m))return}let i=ws(t,e);t=i.toDst,r=xs(i.toCwd,r);let o=An.dirname(e);return X.existsSync(o)||Ss(o),X.symlinkSync(t,e,r)}Rn.exports={createSymlink:ys(Ls),createSymlinkSync:Ds}});var Jn=y((pl,Xn)=>{"use strict";var{createFile:Nn,createFileSync:_n}=Pn(),{createLink:$n,createLinkSync:Bn}=On(),{createSymlink:Un,createSymlinkSync:qn}=Mn();Xn.exports={createFile:Nn,createFileSync:_n,ensureFile:Nn,ensureFileSync:_n,createLink:$n,createLinkSync:Bn,ensureLink:$n,ensureLinkSync:Bn,createSymlink:Un,createSymlinkSync:qn,ensureSymlink:Un,ensureSymlinkSync:qn}});var it=y((ml,Wn)=>{function Es(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 Cs(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Wn.exports={stringify:Es,stripBom:Cs}});var Qn=y((fl,Kn)=>{var ge;try{ge=de()}catch{ge=require("fs")}var ot=O(),{stringify:Gn,stripBom:Hn}=it();async function Os(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||ge,n="throws"in e?e.throws:!0,i=await ot.fromCallback(r.readFile)(t,e);i=Hn(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 js=ot.fromPromise(Os);function Fs(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||ge,n="throws"in e?e.throws:!0;try{let i=r.readFileSync(t,e);return i=Hn(i),JSON.parse(i,e.reviver)}catch(i){if(n)throw i.message=`${t}: ${i.message}`,i;return null}}async function Ts(t,e,r={}){let n=r.fs||ge,i=Gn(e,r);await ot.fromCallback(n.writeFile)(t,i,r)}var ks=ot.fromPromise(Ts);function Vs(t,e,r={}){let n=r.fs||ge,i=Gn(e,r);return n.writeFileSync(t,i,r)}Kn.exports={readFile:js,readFileSync:Fs,writeFile:ks,writeFileSync:Vs}});var Yn=y((dl,zn)=>{"use strict";var st=Qn();zn.exports={readJson:st.readFile,readJsonSync:st.readFileSync,writeJson:st.writeFile,writeJsonSync:st.writeFileSync}});var at=y((hl,ti)=>{"use strict";var As=O().fromPromise,$t=M(),Zn=require("path"),ei=q(),Is=te().pathExists;async function Rs(t,e,r="utf-8"){let n=Zn.dirname(t);return await Is(n)||await ei.mkdirs(n),$t.writeFile(t,e,r)}function Ms(t,...e){let r=Zn.dirname(t);$t.existsSync(r)||ei.mkdirsSync(r),$t.writeFileSync(t,...e)}ti.exports={outputFile:As(Rs),outputFileSync:Ms}});var ni=y((yl,ri)=>{"use strict";var{stringify:Ns}=it(),{outputFile:_s}=at();async function $s(t,e,r={}){let n=Ns(e,r);await _s(t,n,r)}ri.exports=$s});var oi=y((gl,ii)=>{"use strict";var{stringify:Bs}=it(),{outputFileSync:Us}=at();function qs(t,e,r){let n=Bs(e,r);Us(t,n,r)}ii.exports=qs});var ai=y((Sl,si)=>{"use strict";var Xs=O().fromPromise,_=Yn();_.outputJson=Xs(ni());_.outputJsonSync=oi();_.outputJSON=_.outputJson;_.outputJSONSync=_.outputJsonSync;_.writeJSON=_.writeJson;_.writeJSONSync=_.writeJsonSync;_.readJSON=_.readJson;_.readJSONSync=_.readJsonSync;si.exports=_});var mi=y((vl,pi)=>{"use strict";var Js=M(),ci=require("path"),{copy:Ws}=nt(),{remove:ui}=Oe(),{mkdirp:Gs}=q(),{pathExists:Hs}=te(),li=ae();async function Ks(t,e,r={}){let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=await li.checkPaths(t,e,"move",r);await li.checkParentPaths(t,i,e,"move");let s=ci.dirname(e);return ci.parse(s).root!==s&&await Gs(s),Qs(t,e,n,o)}async function Qs(t,e,r,n){if(!n){if(r)await ui(e);else if(await Hs(e))throw new Error("dest already exists.")}try{await Js.rename(t,e)}catch(i){if(i.code!=="EXDEV")throw i;await zs(t,e,r)}}async function zs(t,e,r){return await Ws(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),ui(t)}pi.exports=Ks});var gi=y((wl,yi)=>{"use strict";var di=de(),Ut=require("path"),Ys=nt().copySync,hi=Oe().removeSync,Zs=q().mkdirpSync,fi=ae();function ea(t,e,r){r=r||{};let n=r.overwrite||r.clobber||!1,{srcStat:i,isChangingCase:o=!1}=fi.checkPathsSync(t,e,"move",r);return fi.checkParentPathsSync(t,i,e,"move"),ta(e)||Zs(Ut.dirname(e)),ra(t,e,n,o)}function ta(t){let e=Ut.dirname(t);return Ut.parse(e).root===e}function ra(t,e,r,n){if(n)return Bt(t,e,r);if(r)return hi(e),Bt(t,e,r);if(di.existsSync(e))throw new Error("dest already exists.");return Bt(t,e,r)}function Bt(t,e,r){try{di.renameSync(t,e)}catch(n){if(n.code!=="EXDEV")throw n;return na(t,e,r)}}function na(t,e,r){return Ys(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),hi(t)}yi.exports=ea});var vi=y((bl,Si)=>{"use strict";var ia=O().fromPromise;Si.exports={move:ia(mi()),moveSync:gi()}});var bi=y((xl,wi)=>{"use strict";wi.exports={...M(),...nt(),...vn(),...Jn(),...ai(),...q(),...vi(),...at(),...te(),...Oe()}});var xi=y(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.EXTENSIONS_LANGUAGES=void 0;ct.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(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.setOptionValues=oa;function oa(t,e){for(let r of Object.keys(t))t[r]!==void 0&&(e[r]=t[r]);return e}});var Li=y(J=>{"use strict";var sa=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]})),aa=J&&J.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),ca=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"&&sa(r,e,n[i]);return aa(r,e),r}})();Object.defineProperty(J,"__esModule",{value:!0});J.SarifBuilder=void 0;var Pi=ca(bi()),la=xi(),ua=Fe(),Xt=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,ua.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();Pi.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await Pi.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,c;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=la.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 a=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)=>{a.set(p.id,l)});for(let p of e.results||[]){if(p.ruleId){let l=a.get(p.ruleId);l!==void 0&&(p.ruleIndex=l)}if(p.locations)for(let l of p.locations){let u=(c=(s=l?.physicalLocation)===null||s===void 0?void 0:s.artifactLocation)===null||c===void 0?void 0:c.uri;if(u){let f=d.get(u);f!==void 0&&(l.physicalLocation.artifactLocation.index=f)}}}return e}};J.SarifBuilder=Xt});var Di=y(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.SarifResultBuilder=void 0;var pa=Fe(),Jt=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,pa.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={})}};lt.SarifResultBuilder=Jt});var Ei=y(ut=>{"use strict";Object.defineProperty(ut,"__esModule",{value:!0});ut.SarifRuleBuilder=void 0;var ma=Fe(),Wt=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,ma.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}};ut.SarifRuleBuilder=Wt});var Ci=y(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.SarifRunBuilder=void 0;var fa=Fe(),Gt=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,fa.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}};pt.SarifRunBuilder=Gt});var Oi=y(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.SarifResultBuilder=W.SarifRuleBuilder=W.SarifRunBuilder=W.SarifBuilder=void 0;var da=Li();Object.defineProperty(W,"SarifBuilder",{enumerable:!0,get:function(){return da.SarifBuilder}});var ha=Di();Object.defineProperty(W,"SarifResultBuilder",{enumerable:!0,get:function(){return ha.SarifResultBuilder}});var ya=Ei();Object.defineProperty(W,"SarifRuleBuilder",{enumerable:!0,get:function(){return ya.SarifRuleBuilder}});var ga=Ci();Object.defineProperty(W,"SarifRunBuilder",{enumerable:!0,get:function(){return ga.SarifRunBuilder}})});var Fi=y((Fl,ji)=>{"use strict";var Sa=/["'&<>]/;ji.exports=va;function va(t){var e=""+t,r=Sa.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=""";break;case 38:n="&";break;case 39:n="'";break;case 60:n="<";break;case 62:n=">";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 Kt=require("fs/promises");var Y=Te(require("path")),bt=require("fs/promises");var B=require("fs/promises"),gt=require("path");async function H(t){try{return await oe(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 St(t,e){let r=JSON.stringify(e,null,4)+`
|
|
9
|
+
`,n=await Bi(t,r);await(0,B.writeFile)(t,n,{encoding:"utf-8"})}function U(t){return t?t.replace(/\?.*$/,""):""}async function oe(t){try{return await(0,B.access)(t,B.constants.F_OK),!0}catch{return!1}}async function vt(t){let e=(0,gt.resolve)(t),r=await(0,B.readdir)(e,{withFileTypes:!0});for(let n of r){let i=(0,gt.resolve)(n.parentPath,n.name);n.isDirectory()?await vt(i):await(0,B.rm)(i)}await(0,B.rmdir)(e)}function wt(t,e){return`Basic ${Buffer.from(`${t}:${e}`).toString("base64")}`}async function we(t,e){let r=e?.user&&e?.pw?{Authorization:wt(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 Bi(t,e){let r=await qi();if(!r)return e;let n=await r.resolveConfig(t);return n?await r.format(e,{...n,filepath:t}):e}var Ui;function qi(){return Ui??=import("prettier").catch(()=>{})}var ke={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4},be=["UNKNOWN","LOW","MEDIUM","HIGH","CRITICAL"];function K(t,e){return ke[t]-ke[e]}function Zt(t,e){return K(t,e)>=0?t:e}function er(t,e){return ke[t]<ke[e]}function tr(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 rr(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}function nr(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function ir(t){switch(t){case"CRITICAL":case"HIGH":return"error";case"MEDIUM":case"LOW":return"warning";default:return"note"}}var xt=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,Y.resolve)(this.workingDir,t.DEFAULT_VEX_SUBDIR),outDir:this.resolvePath(e.outDir)??(0,Y.resolve)(this.workingDir,t.DEFAULT_OUT_SUBDIR),cacheDir:this.resolvePath(e.cacheDir)??(0,Y.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 Y.default.isAbsolute(e)?e:(0,Y.resolve)(this.workingDir,e)}},xe=class{constructor(e){this.workingDir=e;this.normalizer=new xt(e)}workingDir;normalizer;projectConfigCache;async loadProjectConfig(){return this.projectConfigCache??=this.doLoadProjectConfig(),this.projectConfigCache}async doLoadProjectConfig(){let e=(0,Y.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,bt.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&&!be.includes(e))throw new Error(`${r} value '${String(e)}'. Must be one of: ${be.join(", ")}`)}async loadAutoVexConfig(e){let r=await(0,bt.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&&!be.includes(n.maxSeverity))throw new Error(`auto-vex-conf.json: invalid 'maxSeverity' value '${String(n.maxSeverity)}'. Must be one of: ${be.join(", ")}`);return n}};var Ae=require("fs/promises");async function or(t,e,r){if("sbomFile"in t)return await(0,Ae.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let n=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,Ae.writeFile)(e,n),{...t,sbomFile:e}}var Ve=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 we(n,this.authn);return Buffer.from(await i.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,i=await(await we(r,this.authn)).text();return Xi(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 Xi(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 lr=require("fs/promises"),Lt=require("path"),ur=require("crypto");var Re=require("fs/promises"),Me=require("path");var sr=require("crypto");var Ji="https://openvex.dev/ns/v0.2.0";function ar(t,e="conterra"){let n=`https://openvex.dev/docs/public/vex-${(0,sr.randomUUID)()}`,i=t.timestamp??new Date().toISOString();return{"@context":Ji,"@id":n,author:e,timestamp:i,last_updated:i,version:1,statements:[t]}}function cr(t,e){let r=e.timestamp??new Date().toISOString();return{...t,last_updated:r,version:t.version+1,statements:[...t.statements,e]}}var Ie=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,Re.mkdir)((0,Me.dirname)((0,Me.resolve)(this.location)),{recursive:!0}),await St(this.location,this._content)}async delete(){await(0,Re.unlink)(this.location),this._exists=!1}upsert(e,r){return this._content===void 0?(this._content=ar(e,r),this._exists=!0,{created:!0}):(this._content=cr(this._content,e),{created:!1})}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&&!Pt(s).has(r)||!s.products)continue;let c=s.products.findIndex(m=>m["@id"]===e);c!==-1&&(s.products.splice(c,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})`)}};async function Ne(t,e){for(let r of await(0,lr.readdir)(t,{withFileTypes:!0}))r.name.endsWith(".json")?await e(new Ie((0,Lt.resolve)(r.parentPath,r.name))):r.isDirectory()&&await Ne((0,Lt.resolve)(r.parentPath,r.name),e)}function Pt(t){let e=t.vulnerability.name;return new Set([e,...t.vulnerability.aliases??[]])}var ce=class t{statements=[];filteredToProducts=[];static async fromUrl(e,r,n=new t){let o=await(await we(e,r)).json();return n.add(o),n}static async fromFiles(e,r=new t){return await Ne(e,async n=>{await n.read(),n.content&&r.add(n.content)}),r}add(e){Gi(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=Pt(n),c=new Set(n.products?.map(d=>d["@id"]).filter(d=>!!d)??[]),m=new Dt(i,o,s,c,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}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){let n=this.filterByProduct(r??this.filteredToProducts);for(let i of n.statements)if(i.matchesVulnerability(e))return this.reduceToProductInformation(i,n.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":Hi(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&&!Wi(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 Wi(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 Gi(t){if(t?.["@context"]!=="https://openvex.dev/ns/v0.2.0")throw new Error("Invalid VEX file format")}function Hi(t){let e=t.map(n=>`${n.vulnerability.name}:${n.status}`).sort().join("|");return`https://openvex.dev/docs/public/vex-${(0,ur.createHash)("sha256").update(e).digest("hex")}`}var $e=require("path"),pr=require("fs/promises");function Ki(t){throw new Error(`Unhandled value: ${String(t)}`)}var _e=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,$e.resolve)(this.outputDir,r,`${n}${i}`),s=(0,$e.dirname)(o);return await oe(s)||await(0,pr.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 Ki(e)}}};var mr=require("zx"),Z=class{async run(e){let{image:r,volumes:n=[],envArgs:i=[],args:o=[]}=e,s=n.flatMap(m=>["-v",m]),c=await mr.$`docker run --rm ${s} ${i} ${r} ${o}`.nothrow();return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode}}};var Be=require("path");var le=class{};var ue=class extends le{runner=new Z;buildDockerEnvArgs(e){return[]}buildExtraVolumes(e){return[]}async scan(e,r,n,i,o){let s=await r.lookupOutputFileForWriting(this.getOutputFileKey()),c=(0,Be.dirname)(s),d=`/tmp/output/${(0,Be.basename)(s)}`,a=`${this.dockerImage}:${this.version||this.defaultVersion}`,p=`${c}:/tmp/output`,l=`${e.sbomFile}:/tmp/input.json`,u=this.buildExtraVolumes({outputDir:c,outputFile:s,sbomFile:e.sbomFile}),f=await this.runner.run({image:a,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 fr="anchore/grype",Ue=class t extends ue{constructor(r,n){super();this.version=r;this.cacheDir=n}version;cacheDir;dockerImage=fr;defaultVersion="latest";scannerLabel="Grype";async init(r){r&&console.log(`Initializing Grype DB in cache directory: ${this.cacheDir}`);let n=`${fr}:${this.version||this.defaultVersion}`,i=await new Z().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=tr(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 dr="aquasec/trivy",Qi="0.70.0",zi="public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db",qe=class t extends ue{constructor(r,n,i){super();this.version=r;this.cacheDir=n;this.githubToken=i}version;cacheDir;githubToken;dockerImage=dr;defaultVersion=Qi;scannerLabel="Trivy";async init(r){let n=[];this.githubToken&&n.push("-e",`GITHUB_TOKEN=${this.githubToken}`);let i=["--db-repository",zi,"--cache-dir","/.cache","sbom","--download-db-only"];r||i.push("--quiet");let o=`${dr}:${this.version||this.defaultVersion}`,s=await new Z().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=rr(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 Sr=require("fs/promises");function Et(t,e=""){return hr(t,e,new Set,new Set)}function hr(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 c=hr(s,e+(o?" ":" "),r,n);c!==""&&(i+=`
|
|
10
|
+
`,i+=c)}return r.delete(t.purl),i}var pe=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 Et(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?yr(r):{purl:e,usedBy:[]}}};function yr(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=yr(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=Yi){return this.getComponents().filter(e)}buildDependencyTree(){return pe.createForSbom(this.sbom)}};function Yi(t){return!!t.purl}var Xe=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 gr=128,Zi="https://api.guide.sonatype.com",Je=class t{cache=new Xe;baseUrl;authHeader;constructor(e={}){this.baseUrl=e.baseUrl??Zi,e.user&&e.token&&(this.authHeader=wt(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":"",c=`${this.baseUrl}/api/v3${s}/component-report`;for(let m=0;m<o.length;m+=gr){let d=o.slice(m,m+gr),a=JSON.stringify({coordinates:d});r?.(` Sonatype OssIndex request ${c} with body: ${a}`);let p={"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"};this.authHeader&&(p.Authorization=this.authHeader);let u=await(await fetch(c,{method:"POST",headers:p,body:a})).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 We=class t extends le{client;constructor(e={}){super(),this.client=new Je(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&&!eo(l)).map(l=>l.purl),a=i?l=>o(` [${e.name}] ${l}`):void 0,p=await this.client.fetchVulnerableComponents(d,a);await(0,Sr.writeFile)(s,JSON.stringify(p,null,2)),o(` Sonatype OssIndex output file: ${s}`),this.addVulnerabilities(n,p)}catch(c){throw new Error(`Sonatype OSS Index scan failed: ${c}`,{cause:c})}}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=nr(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 eo(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function to(t,e,r){switch(t.name){case"grype":return new Ue(t.version,e);case"trivy":return new qe(t.version,e,r.trivyGithubToken);case"ossindex":return new We({user:r.ossIndexApiUser,token:r.ossIndexApiToken,baseUrl:r.ossIndexBaseUrl})}}var Ge=class{scanners;constructor(e,r,n){this.scanners=e.map(i=>to(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 vr(t,e,r){await Ne(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 xr=require("fs/promises"),Pr=require("path");var He=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=>!er(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 c=this.data.projectsToComponents.get(n);c.has(s.purl)||c.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});return}let r=this.data.cveDetails.get(e.id);r.title=r.title||e.title,r.severity=K(r.severity,e.severity)>=0?r.severity:e.severity,r.description=r.description||e.description,r.components=wr(r.components,e.components),r.refs=wr(r.refs,e.refs)}};function wr(t,e){return Array.from(new Set([...t,...e]))}var Qe=require("fs/promises"),br=require("path");var Ke=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,br.join)(o,"scan-summary.txt"),await(0,Qe.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,Qe.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 c=e.get(s),{severity:m}=r.get(s);await this.log(` - [${m}] ${s}`);for(let d of c.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 c=n.get(s);await this.log(` - ${s}`);for(let m of c.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 c=e.get(s)??[];for(let d of c.slice().sort(Ct(a=>n.get(a)))){let{severity:a}=n.get(d);await this.log(` - [${a}] ${d}`)}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||""}:`),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[c,m]of r.entries())if(m.has(s)){await this.log(` Usage Tree of ${s} by ${c} (as example):`),await this.log(pe.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=K(t(r).severity,t(e).severity);return n!==0?n:e.localeCompare(r)}}async function Lr(t,e){let r=new He;r.feedAll(t);let n=r.getData(),o=await new Ke(e).render(n);if(e.outputDirectory){let s=(0,Pr.join)(e.outputDirectory,"scan-summary.json");await(0,xr.writeFile)(s,JSON.stringify(r.toScanSummary(),null,2),"utf8")}return o}var mt=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=K(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=Zt(s.severity,e.severity),s.scannerSeverity[r]=e.severity,s.detectedBy=Ot(s.detectedBy,r),s.components=Ot(s.components,e.components[0]),s.refs=Ot(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);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 Ot(t,e){return e==null?t:Array.from(new Set([...t,e]).values())}var ie=Te(Oi());var Ti=Te(Fi());var Ht={kind:"external",status:"accepted"};function ki(t,e){let r=new ie.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=ir(o.severity),c=o.id,m=wa(o.refs),d=new ie.SarifRuleBuilder().initSimple({ruleId:c,shortDescriptionText:o.title,fullDescriptionText:o.description,helpUri:m}),a=o.vexStatement,p,l="new",u="";a?(p=[{...Ht}],l="updated",u=`--- INVESTIGATED (${a.status}) --- `,a.status==="under_investigation"&&(p[0].status="underReview",u="--- UNDER INVESTIGATION --- ")):K(e.minimumSeverity,o.severity)>0?(p=[{...Ht}],l="updated",u=`--- BELOW MINIMUM SEVERITY '${e.minimumSeverity}' ---`):e.silent&&(p=[{...Ht}],l="updated",u="--- PROJECT SILENT ---"),Object.assign(d.rule,{name:`${u}[${o.severity}] - ${o.title.replace(`[${c}]`,"")}`,messageStrings:{default:{text:o.description,markdown:ba(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 ie.SarifResultBuilder().initSimple({ruleId:c,level:s,messageText:`${c} [${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 ie.SarifBuilder;return i.addRun(r),i.buildSarifOutput()}function wa(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function ba(t,e,r){let n=t.vexStatement,i=n?`
|
|
11
12
|
${r}
|
|
12
13
|
${n.justification??""}
|
|
13
14
|
${n.impact_statement??""}
|
|
@@ -19,7 +20,7 @@ ${i}
|
|
|
19
20
|
|
|
20
21
|
--- DETAILS ---
|
|
21
22
|
|
|
22
|
-
${(0,
|
|
23
|
+
${(0,Ti.default)(t.description)}
|
|
23
24
|
|
|
24
25
|
${t.refs.map(o=>`* <${o}>`).join(`
|
|
25
26
|
`)}
|
|
@@ -32,12 +33,11 @@ ${t.refs.map(o=>`* <${o}>`).join(`
|
|
|
32
33
|
Usage tree:
|
|
33
34
|
|
|
34
35
|
\`\`\`plain
|
|
35
|
-
${t.componentTree?.map(o=>
|
|
36
|
+
${t.componentTree?.map(o=>Et(o)).join(`
|
|
36
37
|
`)}
|
|
37
38
|
\`\`\`
|
|
38
|
-
`}var We=require("fs/promises");async function Kn(t,e,r){if("sbomFile"in t)return await(0,We.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let n=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,We.writeFile)(e,n),{...t,sbomFile:e}}var Je=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 Se(n,this.authn);return Buffer.from(await i.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,i=await(await Se(r,this.authn)).text();return Us(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 Us(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 He=require("fs/promises"),Ct=require("path");var Tt=class{constructor(e){this.location=e}location;async read(){let e=await X(this.location);if(!e)throw new Error("Invalid VEX file");return e}async write(e){await st(this.location,e)}async delete(){await(0,He.unlink)(this.location)}};async function Ye(t,e){for(let r of await(0,He.readdir)(t,{withFileTypes:!0}))r.name.endsWith(".json")?await e(new Tt((0,Ct.resolve)(r.parentPath,r.name))):r.isDirectory()&&await Ye((0,Ct.resolve)(r.parentPath,r.name),e)}function It(t){let e=t.vulnerability.name;return new Set([e,...t.vulnerability.aliases??[]])}var ye=class t{statements=[];filteredToProducts=[];static async fromUrl(e,r,n=new t){let o=await(await Se(e,r)).json();return n.add(o),n}static async fromFiles(e,r=new t){return await Ye(e,async n=>{let i=await n.read();r.add(i)}),r}add(e){Gs(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=It(n),c=new Set(n.products?.map(f=>f["@id"]).filter(f=>!!f)??[]),p=new jt(i,o,s,c,n);this.statements.push(p)}this.sortStatementsByTimestampNewestFirst()}filterByProduct(e){if(this.assertCorrectProductId(e),this.filteredToProducts.length)return this;let r=new t;return r.filteredToProducts=e.slice(0),r.statements=this.statements.filter(n=>n.matchesAtLeastOneProduct(e)),r}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){let n=this.filterByProduct(r??this.filteredToProducts);for(let i of n.statements)if(i.matchesVulnerability(e))return this.reduceToProductInformation(i,n.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(i=>i.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":"https://openvex.dev/docs/public/vex-fc763e6eb63bfbcda20b7cbbddd4e9f8feaaa317fe8d8a6f51a5663a1180343e",author:"conterra",timestamp:n,last_updated:n,version:1,statements:r}}assertCorrectProductId(e){if(!e||e.length===0)throw new Error("Product ID must be provided");if(this.filteredToProducts.length&&!Xs(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 Xs(t,e){return t.length===e.length&&t.every((r,n)=>r===e[n])}var jt=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 Gs(t){if(t?.["@context"]!=="https://openvex.dev/ns/v0.2.0")throw new Error("Invalid VEX file format")}var Ke=require("path"),zn=require("fs/promises");var Qe=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,Ke.resolve)(this.outputDir,r,`${n}${i}`),s=(0,Ke.dirname)(o);return await se(s)||await(0,zn.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:throw new Error(`Unknown output file key: ${e}`)}}};var Ft=require("zx");var ze=require("path"),Zn="anchore/grype";async function ei(t,e,r){r&&console.log(`Initializing Grype DB in cache directory: ${e}`);let n=`${Zn}:${t||"latest"}`,i=await Ft.$`docker run --rm -v '${e}:/tmp/.cache' -e GRYPE_DB_CACHE_DIR=/tmp/.cache -e TMPDIR=/tmp ${n} db update`.nothrow();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}`)}async function ti(t,e,r,n,i,o,s){let c=(0,ze.dirname)(r),p=(0,ze.basename)(r),f=[];o||f.push("--quiet");let a=`${Zn}:${t||"latest"}`,m=`${e}:/tmp/.cache`,u=`${c}:/tmp/output`,l=`${n.sbomFile}:/tmp/input.json`,d=`/tmp/output/${p}`,y=await Ft.$`docker run --rm -v ${m} -v ${u} -v ${l} -e GRYPE_DB_CACHE_DIR=/tmp/.cache -e TMPDIR=/tmp -e GRYPE_DB_AUTO_UPDATE=false ${a} sbom:/tmp/input.json -o json --file ${d} --by-cve ${f}`.nothrow();if(y.stdout&&s(` Scan log: ${y.stdout}`),y.stderr&&s(` Scan error: ${y.stderr}`),y.exitCode!==0)throw new Error(`Grype scan failed with exit code ${y.exitCode}: ${y.stderr}`);s(` Grype output file: ${r}`);try{let S=await X(r);Js(i,S)}catch(S){throw new Error(`Grype scan results could not be read from '${r}': ${S}`,{cause:S})}}function Js(t,e){if(e)for(let r of e.matches){let n=Ws(r);t.addVulnerability(n,"grype")}}function Ws(t){let e=t.vulnerability,r=e.id,n=J(t.artifact.purl),i=J(e.dataSource),o=Hs(e.severity);return{id:r,severity:o,scannerSeverity:{grype:o},title:"",description:e.description,components:[n],detectedBy:["grype"],refs:[i]}}function Hs(t){switch(t){case"Negligible":return"LOW";case"Low":return"LOW";case"Medium":return"MEDIUM";case"High":return"HIGH";case"Critical":return"CRITICAL";default:return"UNKNOWN"}}var ri=require("fs/promises"),Nt=class{components=new Map;clear(){this.components.clear()}has(e){return this.components.has(e)}update(e,r){for(let n of r)this.components.set(J(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}},Mt=new Nt;async function ni(t,e,r,n="https://api.guide.sonatype.com",i,o,s){try{let c={},p="";r.user&&r.token&&(c.Authorization=`Basic ${Buffer.from(`${r.user}:${r.token}`).toString("base64")}`,p="/authorized");let f=`${n}/api/v3${p}/component-report`,a=await Ys(e.sbomFile),m=new Set(a.map(y=>y.purl.replace(/\?.*$/,"")));ta(m);let u=Array.from(m),l=u.filter(y=>!Mt.has(y));o&&s(` Sonatype OssIndex will analyze ${l.length} packages for project ${e.name}, cache hit for ${u.length-l.length} packages.`);for(let y=0;y<l.length;y+=128){let S=l.slice(y,y+128),w=JSON.stringify({coordinates:S});o&&s(` Sonatype OssIndex request ${f} with body: ${w}`);let b=await(await fetch(f,{method:"POST",headers:{...c,"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"},body:w})).json();Array.isArray(b)?Mt.update(S,b):s(` Sonatype OssIndex Error: ${b.code} - ${b.message}`)}let d=Mt.read(u).filter(y=>y.vulnerabilities.length>0);await(0,ri.writeFile)(t,JSON.stringify(d,null,2)),s(` Sonatype OssIndex output file: ${t}`),zs(i,d)}catch(c){throw new Error(`Sonatype OSS Index scan failed: ${c}`,{cause:c})}}async function Ys(t){return(await X(t)).components.filter(r=>Qs(r)&&!Ks(r))}function Qs(t){return!!t.purl}function Ks(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function zs(t,e){if(e)for(let r of e)for(let n of r.vulnerabilities){let i=Zs(n,r.coordinates);t.addVulnerability(i,"ossindex")}}function Zs(t,e){let r=t.cve||t.id,n=J(e),i=J(t.reference),o=ea(t.cvssScore);return{id:r,severity:o,scannerSeverity:{ossindex:o},title:t.title,description:t.description,components:[n],detectedBy:["ossindex"],refs:i?[i]:[]}}function ea(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function ta(t){let e=Array.from(t);for(let r of e){let n=r.replace(/(@[^-]+)-.*$/g,"$1");t.add(n)}}var Rt=require("zx");var Ze=require("path"),ii="aquasec/trivy";async function oi(t,e,r,n){let i=[];r&&(i.push("-e"),i.push(`GITHUB_TOKEN=${r}`));let o=[];o.push("--db-repository"),o.push("public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db"),n||o.push("--quiet");let s=`${ii}:${t||"0.70.0"}`,c=await Rt.$`docker run --rm -v '${e}:/.cache' ${i} ${s} ${o} --cache-dir '/.cache' sbom --download-db-only`.nothrow();if(!c.stdout&&!c.stderr&&console.log(" Trivy DB Update: finished"),c.stdout&&console.log(` Trivy DB Update: ${c.stdout}`),c.stderr&&console.log(` Trivy DB Update error: ${c.stderr}`),c.exitCode!==0)throw new Error(`Trivy DB update failed with exit code ${c.exitCode}: ${c.stderr}`)}async function si(t,e,r,n,i,o,s){let c=(0,Ze.dirname)(r),p=(0,Ze.basename)(r),f=[];o||f.push("--quiet");let a=`${ii}:${t||"0.69.3"}`,m=`${e}:/.cache`,u=`${c}:/tmp/output`,l=`${n.sbomFile}:/tmp/input.json`,d=`/tmp/output/${p}`,y=await Rt.$`docker run --rm -v ${m} -v ${u} -v ${l} ${a} sbom --cache-dir '/.cache' --format json --output ${d} ${f} --skip-db-update /tmp/input.json`.nothrow();if(y.stdout&&s(` Scan log: ${y.stdout}`),y.stderr&&s(` Scan error: ${y.stderr}`),y.exitCode!==0)throw new Error(`Trivy scan failed with exit code ${y.exitCode}: ${y.stderr}`);s(` Trivy output file: ${r}`);try{let S=await X(r);ra(i,S)}catch(S){throw new Error(`Trivy scan results could not be read from '${r}': ${S}`,{cause:S})}}function ra(t,e){if(e){for(let r of e.Results??[])if(r.Vulnerabilities)for(let n of r.Vulnerabilities){let i=na(n);t.addVulnerability(i,"trivy")}}}function na(t){let e=t.VulnerabilityID,r=J(t.PkgIdentifier.PURL),n=J(t.PrimaryURL),i=ia(t.Severity);return{id:e,severity:i,scannerSeverity:{trivy:i},title:t.Title,description:t.Description,components:[r],detectedBy:["trivy"],refs:[n]}}function ia(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}var et=class{constructor(e,r,n){this.scanners=e;this.cacheDir=r;this.options=n}scanners;cacheDir;options;async init(e){let r=[];for(let n of this.scanners)switch(n.name){case"grype":r.push(ei(n.version,this.cacheDir,e));break;case"trivy":r.push(oi(n.version,this.cacheDir,this.options.trivyGithubToken,e));break;case"ossindex":continue}await Promise.all(r)}async scanProject(e,r,n,i,o){let s=[];for(let c of this.scanners)s.push(this.scanProjectBy(c,e,r,this.cacheDir,n,this.options.ossIndexBaseUrl,this.options.ossIndexApiUser,this.options.ossIndexApiToken,i,o));await Promise.all(s)}async scanProjectBy(e,r,n,i,o,s,c,p,f,a){switch(e.name){case"grype":return ti(e.version,i,await n.lookupOutputFileForWriting("grype-results"),r,o,f,a);case"trivy":return si(e.version,i,await n.lookupOutputFileForWriting("trivy-results"),r,o,f,a);case"ossindex":return ni(await n.lookupOutputFileForWriting("ossindex-results"),r,{user:c,token:p},s,o,f,a)}}};async function ai(t,e,r){await Ye(t,async n=>{let i=await n.read(),o=!1,s=i.statements,c=[];for(let p of s){if(r&&!It(p).has(r)||!p.products)continue;let f=p.products.findIndex(a=>a["@id"]===e);f!==-1&&(p.products.splice(f,1),o=!0,p.products.length===0&&c.push(p))}if(o){for(let p of c){let f=s.indexOf(p);s.splice(f,1)}if(s.length===0){console.info(`Remove ${e} from ${n.location} and delete file.`),await n.delete();return}console.info(`Remove ${e} from ${n.location}`),await n.write(i)}})}var ke=require("fs/promises"),Vt=require("path");async function li(t,e){let{orderBy:r,reportNoLongerDetectedVulnerabilities:n,reportCveDetails:i,outputDirectory:o}={orderBy:"CVE",reportNoLongerDetectedVulnerabilities:!0,reportCveDetails:!1,...e},s=!1,c=!1,p=!1,f=new Map,a=new Map,m=new Map,u=new Map,l=new Map,d=[],y=new Map;for(let b of t.values()){let G=b.project,R=`${G.name}@${G.version}`;if(b.error&&(s=!0,d.push({project:R,error:b.error})),G.silent)continue;let nt=U[G.minimumSeverity],he=b.newVulns.filter(h=>nt<=U[h.severity]);for(let h of he){if(c=!0,!f.has(h.id))f.set(h.id,{id:h.id,title:h.title,severity:h.severity,description:h.description,components:h.components,refs:h.refs});else{let v=f.get(h.id);la(v,h)}a.has(h.id)||a.set(h.id,[]),u.has(R)||u.set(R,[]),y.has(R)||y.set(R,new Map),u.get(R).push(h.id),a.get(h.id).push(R);for(let v of h.componentTree)v.purl&&(y.get(R).has(v.purl)||y.get(R).set(v.purl,v))}for(let h of b.noLongerDetectedVulns)p=!0,m.has(h)||m.set(h,[]),l.has(R)||l.set(R,[]),l.get(R).push(h),m.get(h).push(R)}let S;o&&(S=(0,Vt.join)(o,"scan-summary.txt"),await(0,ke.writeFile)(S,"","utf8"));let w=async b=>{console.log(b),S&&await(0,ke.appendFile)(S,b+`
|
|
39
|
-
|
|
40
|
-
`);let p=ya(t),f=e.projects,a=new Map,m=Date.now();console.log("Scanning projects ...");let u=f.filter(p).map(d=>{let y=new Qe(d,n,e.createSubDirsForProject),S=[],w=b=>{S.push(b)};return{scan(){return ua(d,y,o,s,i,w,a,t,S)}}});await Sa(u),console.log(`Scanning took ${Date.now()-m}ms`),t.autoRemoveUnusedStatements&&await ha(a,e.vexDir);let l=await li(a,{orderBy:e.consoleReport.startsWith("BY_CVE")?"CVE":"PROJECT",reportCveDetails:e.consoleReport.endsWith("_DETAILED"),reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities,outputDirectory:n});if(l.hasError)return 1;if(l.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(l.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 ua(t,e,r,n,i,o,s,c,p){try{let{unmatchedVulnerabilities:f,noLongerDetectedVulnerabilities:a}=await fa(t,e,r,n,i,c.verbose,o);s.set(t.purl,{project:t,newVulns:f,noLongerDetectedVulns:a})}catch(f){let a=f;s.set(t.purl,{project:t,error:`${a}`,newVulns:[],noLongerDetectedVulns:[]})}if(c.verbose)for(let f of p)console.log(f)}async function fa(t,e,r,n,i,o,s){let c=await Kn(t,await e.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),r);s(`Analyzing project: ${c.name} - ${c.version} - ${c.sbomFile}`);let p=await X(c.sbomFile);if(!p)throw new Error(`Could not read SBOM file ${c.sbomFile} for project ${c.name}`);if(!p.components||p.components.length===0)throw new Error(`SBOM file ${c.sbomFile} for project ${c.name} does not contain any components`);let f=new De(Xe.createForSbom(p));await n.scanProject(c,e,f,o,s);let a=i.filterByProduct([c.purl,...c.purlAliases]),{unmatchedVulnerabilities:m}=f.enhanceWithVexData(a),u=c.detectNoLongerUsedVulnerabilities?a.findNotMatchingVulnerabilities(f.getAllVulnIds()):[];return await ma(e,c,f,a,s),{unmatchedVulnerabilities:m,noLongerDetectedVulnerabilities:u}}async function ma(t,e,r,n,i){let o=r.getAllVulnerabilitiesSortedBySeverity(),s=await t.lookupOutputFileForWriting("aggregate-results");await(0,le.writeFile)(s,JSON.stringify(o,null,2)),i(` Vulnerabilities output file: ${s}`);let c=await t.lookupOutputFileForWriting("aggregated-sarif-results"),p=Qn(o,e);await(0,le.writeFile)(c,JSON.stringify(p,null,2)),i(` Vuln Sarif output file: ${c}`);let f=n.toVexFile(o.filter(m=>m.vexStatement).map(m=>{let u=m.vexStatement;for(let l of m.components??[])u.products.push({"@id":l});return u}));if(!f)return;let a=await t.lookupOutputFileForWriting("project-openvex-file");await(0,le.writeFile)(a,JSON.stringify(f,null,2)),i(` OpenVex file: ${a}`)}async function pa(t,e){let r=t.vexDir,n;await se(r)?n=await ye.fromFiles(r):n=new ye;for(let i of t.vexUrls)await ye.fromUrl(i,e,n);return n}function da(t,e,r){if(e.scannerEngine)return e.scannerEngine;if(t.scanners.length===0)throw new Error("No scanners configured");return new et(t.scanners,r,e)}function ya(t){let{reduceToProjectName:e,reduceToProjectVersion:r}=t;return n=>!(!n.enabled||e&&(n.name!==e||r&&n.version!==r))}async function ha(t,e){for(let r of t.values())if(!r.project.silent)for(let n of r.noLongerDetectedVulns)await ai(e,r.project.purl,n)}async function Sa(t,e=5){let r=0,n=0,i=0,o=t.length,s,c=new Promise(f=>{s=f});function p(){for(;r<e&&i<o;){let f=t[i++];r++,f.scan().finally(()=>{r--,n++,n>=o?s():p()})}}p(),await c}var fi=require("zx");fi.dotenv.config();var K=process.env;(async()=>{let t=await ui({workingDir:process.cwd(),reduceToProjectName:process.argv[2],reduceToProjectVersion:process.argv[3],ossIndexApiUser:K.OSS_INDEX_API_USER,ossIndexApiToken:K.OSS_INDEX_API_TOKEN,ossIndexBaseUrl:K.OSS_INDEX_BASE_URL,mavenRepoUser:K.MAVEN_REPO_USER,mavenRepoPw:K.MAVEN_REPO_PW,trivyGithubToken:K.TRIVY_GITHUB_TOKEN,vexUrlsUser:K.VEX_URLS_USER,vexUrlsPw:K.VEX_URLS_PW,verbose:K.VERBOSE==="true",autoRemoveUnusedStatements:K.AUTO_REMOVE_UNUSED_STATEMENTS==="true"});process.exitCode=t})();
|
|
39
|
+
`}var ft=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 or(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),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,mt.writeFile)(o,JSON.stringify(i,null,2)),this.log(` Vulnerabilities output file: ${o}`);let s=await this.outputFiles.lookupOutputFileForWriting("aggregated-sarif-results"),c=ki(i,e);await(0,mt.writeFile)(s,JSON.stringify(c,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,mt.writeFile)(d,JSON.stringify(m,null,2)),this.log(` OpenVex file: ${d}`)}};var dt=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,c=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 c}};var ht=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 Ve(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 c=Date.now(),m=new Map;await new dt(5).run(s.map(p=>async()=>{let l=new _e(p,e.outDir,e.createSubDirsForProject),f=await new ft(p,l,i,n,r,this.options.verbose).run();m.set(p.purl,f)})),console.log(`Scanning took ${Date.now()-c}ms`),this.options.autoRemoveUnusedStatements&&await this.removeUnusedVexStatements(m,e.vexDir);let a=await Lr(m,{orderBy:e.consoleReport.startsWith("BY_CVE")?"CVE":"PROJECT",reportCveDetails:e.consoleReport.endsWith("_DETAILED"),reportNoLongerDetectedVulnerabilities:e.reportNoLongerDetectedVulnerabilities,outputDirectory:e.outDir});return this.computeExitCode(e,a)}async prepareDirectories(e){await oe(e.cacheDir)||await(0,Kt.mkdir)(e.cacheDir),await oe(e.outDir)&&await vt(e.outDir),await(0,Kt.mkdir)(e.outDir)}async createVexStore(e){let r;await oe(e.vexDir)?r=await ce.fromFiles(e.vexDir):r=new ce;for(let n of e.vexUrls)await ce.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 Ge(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 vr(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 Vi(t){return new ht(t).run()}var Se=require("zx");Se.dotenv.config();Se.os.type().startsWith("Windows")&&(0,Se.usePowerShell)();var G=process.env;(async()=>{let t=await Vi({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:
|