@conterra/vuln-scan 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # ct-vuln-scan
2
2
 
3
- The project is a utility to scan sbom files in CycloneDX json format for CVEs.
4
- The utility is a wrapper around [grype](https://github.com/anchore/grype) and [trivy](https://github.com/aquasecurity/trivy) and [oss index](https://ossindex.sonatype.org/).
3
+ The utility is a wrapper around the following tools:
4
+
5
+ - [grype](https://github.com/anchore/grype) - Vulnerability scanner for container images and filesystems.
6
+ - [trivy](https://github.com/aquasecurity/trivy) - Comprehensive and versatile security scanner
7
+ - [oss index](https://ossindex.sonatype.org/) - Free catalogue of open source components and scanning tools to help developers identify vulnerabilities
8
+
5
9
  It also supports the [OpenVex](https://github.com/openvex) specification for vulnerability status and justification.
6
10
 
7
11
  ## Pre-Requisites
@@ -41,6 +45,26 @@ After that you have two commands available:
41
45
  - `ct-vuln-add-vex`
42
46
  - Triggers a process to add a new vex statement to a file
43
47
 
48
+ ### Vulnerability scan
49
+
50
+ The `ct-vuln-scan` command can be used to scan one or many projects for vulnerabilities.
51
+ It uses the configured scanners to analyze a projects `sbom` file and produces aggregated results.
52
+ The `sbom` file can be provided as a local file or fetched from a maven repository.
53
+
54
+ You might for example prepare a folder structure like this:
55
+
56
+ ```plain
57
+ /vuln-scan/ # root folder
58
+ ├── vuln-scan-conf.json # configuration file for projects to scan
59
+ ├── input # input to be processed by the scanners
60
+ │ └── sbom # sbom files
61
+ │ └── vex # vex files
62
+ │── output # folder for aggregated scan results
63
+ ```
64
+
65
+ Running the command `ct-vuln-scan` from the root folder will scan all projects defined in the `vuln-scan-conf.json` file.
66
+ By default, output will created in the `output` folder per project.
67
+
44
68
  ## Configuration
45
69
 
46
70
  You need to create a `vuln-scan-conf.json` file in the root of your project.
@@ -123,6 +147,12 @@ To scan a specific project run following command:
123
147
  $ ct-vuln-scan mapapps 4.18.2
124
148
  ```
125
149
 
150
+ To scan all versions of a project run:
151
+
152
+ ```sh
153
+ $ ct-vuln-scan mapapps
154
+ ```
155
+
126
156
  You may need following environment variables for a successful scan:
127
157
 
128
158
  ```bash
@@ -133,6 +163,11 @@ MAVEN_REPO_PW=[password]
133
163
  # (optional) for oss index authenticated api
134
164
  OSS_INDEX_API_USER=[username]
135
165
  OSS_INDEX_API_TOKEN=[token]
166
+
167
+ # (optional) helps to fix the rate limit issue during downloading the trivy database from github
168
+ # See <https://aquasecurity.github.io/trivy/v0.38/docs/references/troubleshooting/#github-rate-limiting>
169
+ TRIVY_GITHUB_TOKEN=[token]
170
+
136
171
  ```
137
172
 
138
173
  For each project following files are created in the `output` folder:
@@ -152,7 +187,7 @@ For each project following files are created in the `output` folder:
152
187
  - `<project-name>-<project-version>-openvex.vex.json`
153
188
  - Aggregation of all vex statements available for the project.
154
189
 
155
- If the `createSubDirsForProject` flag is set to `true`, the scanner will create for each project a sub directory in the `output` folder named `<project-name>-<project-version>`.
190
+ If the `createSubDirsForProject` flag is set to `true`, the scanner will create a sub directory in the `output` folder named `<project-name>-<project-version>` for each project scanned.
156
191
 
157
192
  ### Azure DevOps Pipelines Integration
158
193
 
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var h=Object.create;var x=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var N=(t,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!I.call(t,s)&&s!==n&&x(t,s,{get:()=>e[s],enumerable:!(l=E(e,s))||l.enumerable});return t};var O=(t,e,n)=>(n=t!=null?h(C(t)):{},N(e||!t||!t.__esModule?x(n,"default",{value:t,enumerable:!0}):n,t));var y=O(require("node:readline/promises")),w=require("node:process");var u=require("path");var c=require("fs/promises");async function g(t){if(await T(t))return JSON.parse(await(0,c.readFile)(t,{encoding:"utf-8"}))}async function T(t){try{return await(0,c.access)(t,c.constants.F_OK),!0}catch{return!1}}async function S(){let t="https://repository.conterra.de/repository/maven-mirror-ct",e="./input/vex",n="./output",l="./.cache",s=["grype","trivy","ossindex"],v=(0,u.resolve)("./vuln-scan-conf.json"),a=await g(v);if(!a)throw new Error(`Missing project configuration file '${v}'`);return{failOnNewVulnerabilities:!1,createSubDirsForProject:a.createSubDirsForProject??!0,mavenRepo:a.mavenRepo??t,vexDir:(0,u.resolve)(a.vexDir??e),outDir:(0,u.resolve)(a.outDir??n),cacheDir:(0,u.resolve)(a.cacheDir??l),scanners:a.scanners??s,projects:(a.projects??[]).map(m=>{let r=m;return r.sbomFile?{...r,sbomFile:(0,u.resolve)(r.sbomFile)}:m})}}var F=require("path");var P=require("fs/promises"),D=require("crypto");(async()=>{let t=await S();console.info("## Add New VEX Statement ##");let e=y.default.createInterface({input:w.stdin,output:w.stdout}),n=await e.question(`CVE name (e.g. CVE-2023-52070):
3
- > `);n||(console.log("Please provide a CVE name."),process.exit(1));let l=t.projects.map(o=>`${o.name}@${o.version}`),s=await e.question(`Projects to add? Available are:
4
- - ${l.join(`,
2
+ "use strict";var A=Object.create;var S=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var T=(t,e,o,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of C(e))!N.call(t,r)&&r!==o&&S(t,r,{get:()=>e[r],enumerable:!(m=E(e,r))||m.enumerable});return t};var b=(t,e,o)=>(o=t!=null?A(I(t)):{},T(e||!t||!t.__esModule?S(o,"default",{value:t,enumerable:!0}):o,t));var F=b(require("node:readline/promises")),D=require("node:process");var v=b(require("path"));var c=require("fs/promises");async function _(t){if(await q(t))return JSON.parse(await(0,c.readFile)(t,{encoding:"utf-8"}))}async function q(t){try{return await(0,c.access)(t,c.constants.F_OK),!0}catch{return!1}}async function y(t){let e="https://repository.conterra.de/repository/maven-mirror-ct",o=l(t.workingDir,"input/vex"),m=l(t.workingDir,"output"),r=l(t.workingDir,"cache"),j=["grype","trivy","ossindex"],g=l(t.workingDir,"vuln-scan-conf.json"),i=await _(g);if(!i)throw new Error(`Missing project configuration file '${g}'`);return{failOnNewVulnerabilities:!1,createSubDirsForProject:i.createSubDirsForProject??!0,mavenRepo:i.mavenRepo??e,vexDir:l(t.workingDir,i.vexDir)??o,outDir:l(t.workingDir,i.outDir)??m,cacheDir:l(t.workingDir,i.cacheDir)??r,scanners:i.scanners??j,projects:(i.projects??[]).map(a=>{let u=a;return u.sbomFile?{...u,sbomFile:l(t.workingDir,u.sbomFile)}:a})}}function l(t,e){if(e)return v.default.isAbsolute(e)?e:(0,v.resolve)(t,e)}var P=require("path");var h=require("fs/promises"),k=require("crypto");(async()=>{let t=await y({workingDir:process.cwd()});console.info("## Add New VEX Statement ##");let e=F.default.createInterface({input:D.stdin,output:D.stdout}),o=await e.question(`CVE name (e.g. CVE-2023-52070):
3
+ > `);o||(console.log("Please provide a CVE name."),process.exit(1));let m=t.projects.map(n=>`${n.name}@${n.version}`),r=await e.question(`Projects to add? Available are:
4
+ - ${m.join(`,
5
5
  - `)}
6
6
  You can list multiple projects separated by comma:
7
- > `);s||(console.log("Please provide projects to add."),process.exit(1));let v=s.split(/\s*,\s*/).map(o=>{let i=o.split("@");return{name:i[0],version:i[1]}}),a=new Set(function*(){for(let o of v)for(let i of t.projects)i.name===o.name&&i.version===o.version&&(yield i.purl)}()),m=(0,F.resolve)(t.vexDir,`${n}.json`),r=await g(m),b=["under_investigation","affected","fixed","not_affected"],f=await e.question(`Status? Available are:
8
- - ${b.join(`,
7
+ > `);r||(console.log("Please provide projects to add."),process.exit(1));let j=r.split(/\s*,\s*/).map(n=>{let s=n.split("@");return{name:s[0],version:s[1]}}),g=new Set(function*(){for(let n of j)for(let s of t.projects)s.name===n.name&&s.version===n.version&&(yield s.purl)}()),i=(0,P.resolve)(t.vexDir,`${o}.json`),a=await _(i),u=["under_investigation","affected","fixed","not_affected"],p=await e.question(`Status? Available are:
8
+ - ${u.join(`,
9
9
  - `)}
10
- > `);b.includes(f)||(f?(console.log("Invalid status."),process.exit(1)):f="under_investigation");let p={};switch(f){case"affected":{let o=await e.question(`Action statement? (required):
11
- > `);o||(console.log("Please provide an action statement."),process.exit(1)),p.action_statement=o;break}case"not_affected":{let o=["component_not_present","vulnerable_code_not_present","vulnerable_code_not_in_execute_path","vulnerable_code_cannot_be_controlled_by_adversary","inline_mitigations_already_exist"],i=await e.question(`Justification? Available are:
12
- - ${o.join(`,
10
+ > `);u.includes(p)||(p?(console.log("Invalid status."),process.exit(1)):p="under_investigation");let f={};switch(p){case"affected":{let n=await e.question(`Action statement? (required):
11
+ > `);n||(console.log("Please provide an action statement."),process.exit(1)),f.action_statement=n;break}case"not_affected":{let n=["component_not_present","vulnerable_code_not_present","vulnerable_code_not_in_execute_path","vulnerable_code_cannot_be_controlled_by_adversary","inline_mitigations_already_exist"],s=await e.question(`Justification? Available are:
12
+ - ${n.join(`,
13
13
  - `)}
14
- > (optional) `);if(i)if(!o.includes(i))console.log("Invalid justification."),process.exit(1);else{p.justification=i;let d=await e.question(`Impact statement? (optional):
15
- > `);d&&(p.impact_statement=d)}else{let d=await e.question(`Impact statement? (required):
16
- > `);d||(console.log("Please provide an impact statement."),process.exit(1)),p.impact_statement=d}break}case"fixed":{let o=await e.question(`Status note? (optional):
17
- > `);o&&(p.status_notes=o);break}}let _=new Date().toISOString(),j={vulnerability:{name:n},timestamp:_,products:Array.from(a).map(o=>({"@id":o})),status:f,...p};(await e.question(`Following statement will be added to ${m}:
18
- ${JSON.stringify(j,null,2)}
14
+ > (optional) `);if(s)if(!n.includes(s))console.log("Invalid justification."),process.exit(1);else{f.justification=s;let d=await e.question(`Impact statement? (optional):
15
+ > `);d&&(f.impact_statement=d)}else{let d=await e.question(`Impact statement? (required):
16
+ > `);d||(console.log("Please provide an impact statement."),process.exit(1)),f.impact_statement=d}break}case"fixed":{let n=await e.question(`Status note? (optional):
17
+ > `);n&&(f.status_notes=n);break}}let w=new Date().toISOString(),x={vulnerability:{name:o},timestamp:w,products:Array.from(g).map(n=>({"@id":n})),status:p,...f};(await e.question(`Following statement will be added to ${i}:
18
+ ${JSON.stringify(x,null,2)}
19
19
 
20
20
  Do you want to proceed? (y/n)?
21
- > `)).toLowerCase()!=="y"&&(console.log("Aborted."),process.exit(0)),r?(r.last_updated=_,r.version+=1,r.statements.push(j)):r={"@context":"https://openvex.dev/ns/v0.2.0","@id":`https://openvex.dev/docs/public/vex-${(0,D.randomUUID)()}`,author:"conterra",timestamp:_,last_updated:_,version:1,statements:[j]},await(0,P.writeFile)(m,JSON.stringify(r,null,2)),e.close()})();
21
+ > `)).toLowerCase()!=="y"&&(console.log("Aborted."),process.exit(0)),a?(a.last_updated=w,a.version+=1,a.statements.push(x)):a={"@context":"https://openvex.dev/ns/v0.2.0","@id":`https://openvex.dev/docs/public/vex-${(0,k.randomUUID)()}`,author:"conterra",timestamp:w,last_updated:w,version:1,statements:[x]},await(0,h.writeFile)(i,JSON.stringify(a,null,2)),e.close()})();
package/dist/vuln-scan.js CHANGED
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var qi=Object.create;var gt=Object.defineProperty;var Vi=Object.getOwnPropertyDescriptor;var Xi=Object.getOwnPropertyNames;var $i=Object.getPrototypeOf,Bi=Object.prototype.hasOwnProperty;var h=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Gi=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Xi(e))!Bi.call(t,n)&&n!==r&&gt(t,n,{get:()=>e[n],enumerable:!(i=Vi(e,n))||i.enumerable});return t};var vt=(t,e,r)=>(r=t!=null?qi($i(t)):{},Gi(e||!t||!t.__esModule?gt(r,"default",{value:t,enumerable:!0}):r,t));var E=h(Qe=>{"use strict";Qe.fromCallback=function(t){return Object.defineProperty(function(...e){if(typeof e[e.length-1]=="function")t.apply(this,e);else return new Promise((r,i)=>{e.push((n,o)=>n!=null?i(n):r(o)),t.apply(this,e)})},"name",{value:t.name})};Qe.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(i=>r(null,i),r)},"name",{value:t.name})}});var Mt=h((Js,Et)=>{var Q=require("constants"),on=process.cwd,Le=null,sn=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Le||(Le=on.call(process)),Le};try{process.cwd()}catch{}typeof process.chdir=="function"&&(ze=process.chdir,process.chdir=function(t){Le=null,ze.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,ze));var ze;Et.exports=an;function an(t){Q.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=i(t.chmod),t.fchmod=i(t.fchmod),t.lchmod=i(t.lchmod),t.chownSync=s(t.chownSync),t.fchownSync=s(t.fchownSync),t.lchownSync=s(t.lchownSync),t.chmodSync=n(t.chmodSync),t.fchmodSync=n(t.fchmodSync),t.lchmodSync=n(t.lchmodSync),t.stat=c(t.stat),t.fstat=c(t.fstat),t.lstat=c(t.lstat),t.statSync=u(t.statSync),t.fstatSync=u(t.fstatSync),t.lstatSync=u(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(a,l,p){p&&process.nextTick(p)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(a,l,p,f){f&&process.nextTick(f)},t.lchownSync=function(){}),sn==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:function(a){function l(p,f,d){var S=Date.now(),w=0;a(p,f,function L(V){if(V&&(V.code==="EACCES"||V.code==="EPERM"||V.code==="EBUSY")&&Date.now()-S<6e4){setTimeout(function(){t.stat(f,function(A,ue){A&&A.code==="ENOENT"?a(p,f,L):d(V)})},w),w<100&&(w+=10);return}d&&d(V)})}return Object.setPrototypeOf&&Object.setPrototypeOf(l,a),l}(t.rename)),t.read=typeof t.read!="function"?t.read:function(a){function l(p,f,d,S,w,L){var V;if(L&&typeof L=="function"){var A=0;V=function(ue,ht,St){if(ue&&ue.code==="EAGAIN"&&A<10)return A++,a.call(t,p,f,d,S,w,V);L.apply(this,arguments)}}return a.call(t,p,f,d,S,w,V)}return Object.setPrototypeOf&&Object.setPrototypeOf(l,a),l}(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:function(a){return function(l,p,f,d,S){for(var w=0;;)try{return a.call(t,l,p,f,d,S)}catch(L){if(L.code==="EAGAIN"&&w<10){w++;continue}throw L}}}(t.readSync);function e(a){a.lchmod=function(l,p,f){a.open(l,Q.O_WRONLY|Q.O_SYMLINK,p,function(d,S){if(d){f&&f(d);return}a.fchmod(S,p,function(w){a.close(S,function(L){f&&f(w||L)})})})},a.lchmodSync=function(l,p){var f=a.openSync(l,Q.O_WRONLY|Q.O_SYMLINK,p),d=!0,S;try{S=a.fchmodSync(f,p),d=!1}finally{if(d)try{a.closeSync(f)}catch{}else a.closeSync(f)}return S}}function r(a){Q.hasOwnProperty("O_SYMLINK")&&a.futimes?(a.lutimes=function(l,p,f,d){a.open(l,Q.O_SYMLINK,function(S,w){if(S){d&&d(S);return}a.futimes(w,p,f,function(L){a.close(w,function(V){d&&d(L||V)})})})},a.lutimesSync=function(l,p,f){var d=a.openSync(l,Q.O_SYMLINK),S,w=!0;try{S=a.futimesSync(d,p,f),w=!1}finally{if(w)try{a.closeSync(d)}catch{}else a.closeSync(d)}return S}):a.futimes&&(a.lutimes=function(l,p,f,d){d&&process.nextTick(d)},a.lutimesSync=function(){})}function i(a){return a&&function(l,p,f){return a.call(t,l,p,function(d){m(d)&&(d=null),f&&f.apply(this,arguments)})}}function n(a){return a&&function(l,p){try{return a.call(t,l,p)}catch(f){if(!m(f))throw f}}}function o(a){return a&&function(l,p,f,d){return a.call(t,l,p,f,function(S){m(S)&&(S=null),d&&d.apply(this,arguments)})}}function s(a){return a&&function(l,p,f){try{return a.call(t,l,p,f)}catch(d){if(!m(d))throw d}}}function c(a){return a&&function(l,p,f){typeof p=="function"&&(f=p,p=null);function d(S,w){w&&(w.uid<0&&(w.uid+=4294967296),w.gid<0&&(w.gid+=4294967296)),f&&f.apply(this,arguments)}return p?a.call(t,l,p,d):a.call(t,l,d)}}function u(a){return a&&function(l,p){var f=p?a.call(t,l,p):a.call(t,l);return f&&(f.uid<0&&(f.uid+=4294967296),f.gid<0&&(f.gid+=4294967296)),f}}function m(a){if(!a||a.code==="ENOSYS")return!0;var l=!process.getuid||process.getuid()!==0;return!!(l&&(a.code==="EINVAL"||a.code==="EPERM"))}}});var Tt=h((Ws,jt)=>{var Dt=require("stream").Stream;jt.exports=cn;function cn(t){return{ReadStream:e,WriteStream:r};function e(i,n){if(!(this instanceof e))return new e(i,n);Dt.call(this);var o=this;this.path=i,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,n=n||{};for(var s=Object.keys(n),c=0,u=s.length;c<u;c++){var m=s[c];this[m]=n[m]}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,l){if(a){o.emit("error",a),o.readable=!1;return}o.fd=l,o.emit("open",l),o._read()})}function r(i,n){if(!(this instanceof r))return new r(i,n);Dt.call(this),this.path=i,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,n=n||{};for(var o=Object.keys(n),s=0,c=o.length;s<c;s++){var u=o[s];this[u]=n[u]}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 It=h((Us,Ct)=>{"use strict";Ct.exports=un;var ln=Object.getPrototypeOf||function(t){return t.__proto__};function un(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:ln(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var se=h((Hs,Ze)=>{var k=require("fs"),fn=Mt(),mn=Tt(),pn=It(),Pe=require("util"),C,Oe;typeof Symbol=="function"&&typeof Symbol.for=="function"?(C=Symbol.for("graceful-fs.queue"),Oe=Symbol.for("graceful-fs.previous")):(C="___graceful-fs.queue",Oe="___graceful-fs.previous");function dn(){}function Rt(t,e){Object.defineProperty(t,C,{get:function(){return e}})}var ee=dn;Pe.debuglog?ee=Pe.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(ee=function(){var t=Pe.format.apply(Pe,arguments);t="GFS4: "+t.split(/\n/).join(`
3
- GFS4: `),console.error(t)});k[C]||(At=global[C]||[],Rt(k,At),k.close=function(t){function e(r,i){return t.call(k,r,function(n){n||Nt(),typeof i=="function"&&i.apply(this,arguments)})}return Object.defineProperty(e,Oe,{value:t}),e}(k.close),k.closeSync=function(t){function e(r){t.apply(k,arguments),Nt()}return Object.defineProperty(e,Oe,{value:t}),e}(k.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ee(k[C]),require("assert").equal(k[C].length,0)}));var At;global[C]||Rt(global,k[C]);Ze.exports=Ke(pn(k));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!k.__patched&&(Ze.exports=Ke(k),k.__patched=!0);function Ke(t){fn(t),t.gracefulify=Ke,t.createReadStream=ht,t.createWriteStream=St;var e=t.readFile;t.readFile=r;function r(y,v,g){return typeof v=="function"&&(g=v,v=null),D(y,v,g);function D(j,F,P,O){return e(j,F,function(b){b&&(b.code==="EMFILE"||b.code==="ENFILE")?oe([D,[j,F,P],b,O||Date.now(),Date.now()]):typeof P=="function"&&P.apply(this,arguments)})}}var i=t.writeFile;t.writeFile=n;function n(y,v,g,D){return typeof g=="function"&&(D=g,g=null),j(y,v,g,D);function j(F,P,O,b,T){return i(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(y,v,g,D){return typeof g=="function"&&(D=g,g=null),j(y,v,g,D);function j(F,P,O,b,T){return o(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=u);function u(y,v,g,D){return typeof g=="function"&&(D=g,g=0),j(y,v,g,D);function j(F,P,O,b,T){return c(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var m=t.readdir;t.readdir=l;var a=/^v[0-5]\./;function l(y,v,g){typeof v=="function"&&(g=v,v=null);var D=a.test(process.version)?function(P,O,b,T){return m(P,j(P,O,b,T))}:function(P,O,b,T){return m(P,O,j(P,O,b,T))};return D(y,v,g);function j(F,P,O,b){return function(T,x){T&&(T.code==="EMFILE"||T.code==="ENFILE")?oe([D,[F,P,O],T,b||Date.now(),Date.now()]):(x&&x.sort&&x.sort(),typeof O=="function"&&O.call(this,T,x))}}}if(process.version.substr(0,4)==="v0.8"){var p=mn(t);L=p.ReadStream,A=p.WriteStream}var f=t.ReadStream;f&&(L.prototype=Object.create(f.prototype),L.prototype.open=V);var d=t.WriteStream;d&&(A.prototype=Object.create(d.prototype),A.prototype.open=ue),Object.defineProperty(t,"ReadStream",{get:function(){return L},set:function(y){L=y},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return A},set:function(y){A=y},enumerable:!0,configurable:!0});var S=L;Object.defineProperty(t,"FileReadStream",{get:function(){return S},set:function(y){S=y},enumerable:!0,configurable:!0});var w=A;Object.defineProperty(t,"FileWriteStream",{get:function(){return w},set:function(y){w=y},enumerable:!0,configurable:!0});function L(y,v){return this instanceof L?(f.apply(this,arguments),this):L.apply(Object.create(L.prototype),arguments)}function V(){var y=this;Ge(y.path,y.flags,y.mode,function(v,g){v?(y.autoClose&&y.destroy(),y.emit("error",v)):(y.fd=g,y.emit("open",g),y.read())})}function A(y,v){return this instanceof A?(d.apply(this,arguments),this):A.apply(Object.create(A.prototype),arguments)}function ue(){var y=this;Ge(y.path,y.flags,y.mode,function(v,g){v?(y.destroy(),y.emit("error",v)):(y.fd=g,y.emit("open",g))})}function ht(y,v){return new t.ReadStream(y,v)}function St(y,v){return new t.WriteStream(y,v)}var _i=t.open;t.open=Ge;function Ge(y,v,g,D){return typeof g=="function"&&(D=g,g=null),j(y,v,g,D);function j(F,P,O,b,T){return _i(F,P,O,function(x,Ms){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,T||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}return t}function oe(t){ee("ENQUEUE",t[0].name,t[1]),k[C].push(t),Ye()}var ke;function Nt(){for(var t=Date.now(),e=0;e<k[C].length;++e)k[C][e].length>2&&(k[C][e][3]=t,k[C][e][4]=t);Ye()}function Ye(){if(clearTimeout(ke),ke=void 0,k[C].length!==0){var t=k[C].shift(),e=t[0],r=t[1],i=t[2],n=t[3],o=t[4];if(n===void 0)ee("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-n>=6e4){ee("TIMEOUT",e.name,r);var s=r.pop();typeof s=="function"&&s.call(null,i)}else{var c=Date.now()-o,u=Math.max(o-n,1),m=Math.min(u*1.2,100);c>=m?(ee("RETRY",e.name,r),e.apply(null,r.concat([n]))):k[C].push(t)}ke===void 0&&(ke=setTimeout(Ye,0))}}});var R=h(U=>{"use strict";var _t=E().fromCallback,N=se(),yn=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchmod","lchown","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter(t=>typeof N[t]=="function");Object.assign(U,N);yn.forEach(t=>{U[t]=_t(N[t])});U.exists=function(t,e){return typeof e=="function"?N.exists(t,e):new Promise(r=>N.exists(t,r))};U.read=function(t,e,r,i,n,o){return typeof o=="function"?N.read(t,e,r,i,n,o):new Promise((s,c)=>{N.read(t,e,r,i,n,(u,m,a)=>{if(u)return c(u);s({bytesRead:m,buffer:a})})})};U.write=function(t,e,...r){return typeof r[r.length-1]=="function"?N.write(t,e,...r):new Promise((i,n)=>{N.write(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesWritten:s,buffer:c})})})};U.readv=function(t,e,...r){return typeof r[r.length-1]=="function"?N.readv(t,e,...r):new Promise((i,n)=>{N.readv(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesRead:s,buffers:c})})})};U.writev=function(t,e,...r){return typeof r[r.length-1]=="function"?N.writev(t,e,...r):new Promise((i,n)=>{N.writev(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesWritten:s,buffers:c})})})};typeof N.realpath.native=="function"?U.realpath.native=_t(N.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Vt=h((zs,qt)=>{"use strict";var hn=require("path");qt.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(hn.parse(e).root,""))){let i=new Error(`Path contains invalid characters: ${e}`);throw i.code="EINVAL",i}}});var Gt=h((Ks,et)=>{"use strict";var Xt=R(),{checkPath:$t}=Vt(),Bt=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};et.exports.makeDir=async(t,e)=>($t(t),Xt.mkdir(t,{mode:Bt(e),recursive:!0}));et.exports.makeDirSync=(t,e)=>($t(t),Xt.mkdirSync(t,{mode:Bt(e),recursive:!0}))});var $=h((Ys,Jt)=>{"use strict";var Sn=E().fromPromise,{makeDir:gn,makeDirSync:tt}=Gt(),rt=Sn(gn);Jt.exports={mkdirs:rt,mkdirsSync:tt,mkdirp:rt,mkdirpSync:tt,ensureDir:rt,ensureDirSync:tt}});var z=h((Zs,Ut)=>{"use strict";var vn=E().fromPromise,Wt=R();function wn(t){return Wt.access(t).then(()=>!0).catch(()=>!1)}Ut.exports={pathExists:vn(wn),pathExistsSync:Wt.existsSync}});var it=h((ea,Ht)=>{"use strict";var ae=R(),bn=E().fromPromise;async function xn(t,e,r){let i=await ae.open(t,"r+"),n=null;try{await ae.futimes(i,e,r)}finally{try{await ae.close(i)}catch(o){n=o}}if(n)throw n}function Ln(t,e,r){let i=ae.openSync(t,"r+");return ae.futimesSync(i,e,r),ae.closeSync(i)}Ht.exports={utimesMillis:bn(xn),utimesMillisSync:Ln}});var te=h((ta,Yt)=>{"use strict";var ce=R(),M=require("path"),Qt=E().fromPromise;function Pn(t,e,r){let i=r.dereference?n=>ce.stat(n,{bigint:!0}):n=>ce.lstat(n,{bigint:!0});return Promise.all([i(t),i(e).catch(n=>{if(n.code==="ENOENT")return null;throw n})]).then(([n,o])=>({srcStat:n,destStat:o}))}function kn(t,e,r){let i,n=r.dereference?s=>ce.statSync(s,{bigint:!0}):s=>ce.lstatSync(s,{bigint:!0}),o=n(t);try{i=n(e)}catch(s){if(s.code==="ENOENT")return{srcStat:o,destStat:null};throw s}return{srcStat:o,destStat:i}}async function On(t,e,r,i){let{srcStat:n,destStat:o}=await Pn(t,e,i);if(o){if(fe(n,o)){let s=M.basename(t),c=M.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.toLowerCase())return{srcStat:n,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(n.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!n.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(n.isDirectory()&&nt(t,e))throw new Error(Fe(t,e,r));return{srcStat:n,destStat:o}}function Fn(t,e,r,i){let{srcStat:n,destStat:o}=kn(t,e,i);if(o){if(fe(n,o)){let s=M.basename(t),c=M.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.toLowerCase())return{srcStat:n,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(n.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!n.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(n.isDirectory()&&nt(t,e))throw new Error(Fe(t,e,r));return{srcStat:n,destStat:o}}async function zt(t,e,r,i){let n=M.resolve(M.dirname(t)),o=M.resolve(M.dirname(r));if(o===n||o===M.parse(o).root)return;let s;try{s=await ce.stat(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(fe(e,s))throw new Error(Fe(t,r,i));return zt(t,e,o,i)}function Kt(t,e,r,i){let n=M.resolve(M.dirname(t)),o=M.resolve(M.dirname(r));if(o===n||o===M.parse(o).root)return;let s;try{s=ce.statSync(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(fe(e,s))throw new Error(Fe(t,r,i));return Kt(t,e,o,i)}function fe(t,e){return e.ino&&e.dev&&e.ino===t.ino&&e.dev===t.dev}function nt(t,e){let r=M.resolve(t).split(M.sep).filter(n=>n),i=M.resolve(e).split(M.sep).filter(n=>n);return r.every((n,o)=>i[o]===n)}function Fe(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}Yt.exports={checkPaths:Qt(On),checkPathsSync:Fn,checkParentPaths:Qt(zt),checkParentPathsSync:Kt,isSrcSubdir:nt,areIdentical:fe}});var ir=h((ra,rr)=>{"use strict";var I=R(),me=require("path"),{mkdirs:En}=$(),{pathExists:Mn}=z(),{utimesMillis:Dn}=it(),pe=te();async function jn(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 _i=Object.create;var bt=Object.defineProperty;var Vi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Xi=Object.getPrototypeOf,Bi=Object.prototype.hasOwnProperty;var h=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Gi=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $i(e))!Bi.call(t,n)&&n!==r&&bt(t,n,{get:()=>e[n],enumerable:!(i=Vi(e,n))||i.enumerable});return t};var Ke=(t,e,r)=>(r=t!=null?_i(Xi(t)):{},Gi(e||!t||!t.__esModule?bt(r,"default",{value:t,enumerable:!0}):r,t));var j=h(tt=>{"use strict";tt.fromCallback=function(t){return Object.defineProperty(function(...e){if(typeof e[e.length-1]=="function")t.apply(this,e);else return new Promise((r,i)=>{e.push((n,o)=>n!=null?i(n):r(o)),t.apply(this,e)})},"name",{value:t.name})};tt.fromPromise=function(t){return Object.defineProperty(function(...e){let r=e[e.length-1];if(typeof r!="function")return t.apply(this,e);e.pop(),t.apply(this,e).then(i=>r(null,i),r)},"name",{value:t.name})}});var Mt=h((Xs,jt)=>{var z=require("constants"),sn=process.cwd,Oe=null,an=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Oe||(Oe=sn.call(process)),Oe};try{process.cwd()}catch{}typeof process.chdir=="function"&&(rt=process.chdir,process.chdir=function(t){Oe=null,rt.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,rt));var rt;jt.exports=cn;function cn(t){z.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=i(t.chmod),t.fchmod=i(t.fchmod),t.lchmod=i(t.lchmod),t.chownSync=s(t.chownSync),t.fchownSync=s(t.fchownSync),t.lchownSync=s(t.lchownSync),t.chmodSync=n(t.chmodSync),t.fchmodSync=n(t.fchmodSync),t.lchmodSync=n(t.lchmodSync),t.stat=c(t.stat),t.fstat=c(t.fstat),t.lstat=c(t.lstat),t.statSync=l(t.statSync),t.fstatSync=l(t.fstatSync),t.lstatSync=l(t.lstatSync),t.chmod&&!t.lchmod&&(t.lchmod=function(a,u,p){p&&process.nextTick(p)},t.lchmodSync=function(){}),t.chown&&!t.lchown&&(t.lchown=function(a,u,p,m){m&&process.nextTick(m)},t.lchownSync=function(){}),an==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:function(a){function u(p,m,d){var S=Date.now(),w=0;a(p,m,function g(O){if(O&&(O.code==="EACCES"||O.code==="EPERM"||O.code==="EBUSY")&&Date.now()-S<6e4){setTimeout(function(){t.stat(m,function(x,X){x&&x.code==="ENOENT"?a(p,m,g):d(O)})},w),w<100&&(w+=10);return}d&&d(O)})}return Object.setPrototypeOf&&Object.setPrototypeOf(u,a),u}(t.rename)),t.read=typeof t.read!="function"?t.read:function(a){function u(p,m,d,S,w,g){var O;if(g&&typeof g=="function"){var x=0;O=function(X,fe,me){if(X&&X.code==="EAGAIN"&&x<10)return x++,a.call(t,p,m,d,S,w,O);g.apply(this,arguments)}}return a.call(t,p,m,d,S,w,O)}return Object.setPrototypeOf&&Object.setPrototypeOf(u,a),u}(t.read),t.readSync=typeof t.readSync!="function"?t.readSync:function(a){return function(u,p,m,d,S){for(var w=0;;)try{return a.call(t,u,p,m,d,S)}catch(g){if(g.code==="EAGAIN"&&w<10){w++;continue}throw g}}}(t.readSync);function e(a){a.lchmod=function(u,p,m){a.open(u,z.O_WRONLY|z.O_SYMLINK,p,function(d,S){if(d){m&&m(d);return}a.fchmod(S,p,function(w){a.close(S,function(g){m&&m(w||g)})})})},a.lchmodSync=function(u,p){var m=a.openSync(u,z.O_WRONLY|z.O_SYMLINK,p),d=!0,S;try{S=a.fchmodSync(m,p),d=!1}finally{if(d)try{a.closeSync(m)}catch{}else a.closeSync(m)}return S}}function r(a){z.hasOwnProperty("O_SYMLINK")&&a.futimes?(a.lutimes=function(u,p,m,d){a.open(u,z.O_SYMLINK,function(S,w){if(S){d&&d(S);return}a.futimes(w,p,m,function(g){a.close(w,function(O){d&&d(g||O)})})})},a.lutimesSync=function(u,p,m){var d=a.openSync(u,z.O_SYMLINK),S,w=!0;try{S=a.futimesSync(d,p,m),w=!1}finally{if(w)try{a.closeSync(d)}catch{}else a.closeSync(d)}return S}):a.futimes&&(a.lutimes=function(u,p,m,d){d&&process.nextTick(d)},a.lutimesSync=function(){})}function i(a){return a&&function(u,p,m){return a.call(t,u,p,function(d){f(d)&&(d=null),m&&m.apply(this,arguments)})}}function n(a){return a&&function(u,p){try{return a.call(t,u,p)}catch(m){if(!f(m))throw m}}}function o(a){return a&&function(u,p,m,d){return a.call(t,u,p,m,function(S){f(S)&&(S=null),d&&d.apply(this,arguments)})}}function s(a){return a&&function(u,p,m){try{return a.call(t,u,p,m)}catch(d){if(!f(d))throw d}}}function c(a){return a&&function(u,p,m){typeof p=="function"&&(m=p,p=null);function d(S,w){w&&(w.uid<0&&(w.uid+=4294967296),w.gid<0&&(w.gid+=4294967296)),m&&m.apply(this,arguments)}return p?a.call(t,u,p,d):a.call(t,u,d)}}function l(a){return a&&function(u,p){var m=p?a.call(t,u,p):a.call(t,u);return m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),m}}function f(a){if(!a||a.code==="ENOSYS")return!0;var u=!process.getuid||process.getuid()!==0;return!!(u&&(a.code==="EINVAL"||a.code==="EPERM"))}}});var It=h((Bs,Ct)=>{var Tt=require("stream").Stream;Ct.exports=ln;function ln(t){return{ReadStream:e,WriteStream:r};function e(i,n){if(!(this instanceof e))return new e(i,n);Tt.call(this);var o=this;this.path=i,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,n=n||{};for(var s=Object.keys(n),c=0,l=s.length;c<l;c++){var f=s[c];this[f]=n[f]}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,u){if(a){o.emit("error",a),o.readable=!1;return}o.fd=u,o.emit("open",u),o._read()})}function r(i,n){if(!(this instanceof r))return new r(i,n);Tt.call(this),this.path=i,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,n=n||{};for(var o=Object.keys(n),s=0,c=o.length;s<c;s++){var l=o[s];this[l]=n[l]}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 Nt=h((Gs,At)=>{"use strict";At.exports=fn;var un=Object.getPrototypeOf||function(t){return t.__proto__};function fn(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:un(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var ae=h((Js,ot)=>{var F=require("fs"),mn=Mt(),pn=It(),dn=Nt(),De=require("util"),A,je;typeof Symbol=="function"&&typeof Symbol.for=="function"?(A=Symbol.for("graceful-fs.queue"),je=Symbol.for("graceful-fs.previous")):(A="___graceful-fs.queue",je="___graceful-fs.previous");function yn(){}function _t(t,e){Object.defineProperty(t,A,{get:function(){return e}})}var ie=yn;De.debuglog?ie=De.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(ie=function(){var t=De.format.apply(De,arguments);t="GFS4: "+t.split(/\n/).join(`
3
+ GFS4: `),console.error(t)});F[A]||(Rt=global[A]||[],_t(F,Rt),F.close=function(t){function e(r,i){return t.call(F,r,function(n){n||qt(),typeof i=="function"&&i.apply(this,arguments)})}return Object.defineProperty(e,je,{value:t}),e}(F.close),F.closeSync=function(t){function e(r){t.apply(F,arguments),qt()}return Object.defineProperty(e,je,{value:t}),e}(F.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){ie(F[A]),require("assert").equal(F[A].length,0)}));var Rt;global[A]||_t(global,F[A]);ot.exports=it(dn(F));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!F.__patched&&(ot.exports=it(F),F.__patched=!0);function it(t){mn(t),t.gracefulify=it,t.createReadStream=fe,t.createWriteStream=me;var e=t.readFile;t.readFile=r;function r(y,b,v){return typeof b=="function"&&(v=b,b=null),T(y,b,v);function T(C,E,k,D){return e(C,E,function(L){L&&(L.code==="EMFILE"||L.code==="ENFILE")?se([T,[C,E,k],L,D||Date.now(),Date.now()]):typeof k=="function"&&k.apply(this,arguments)})}}var i=t.writeFile;t.writeFile=n;function n(y,b,v,T){return typeof v=="function"&&(T=v,v=null),C(y,b,v,T);function C(E,k,D,L,I){return i(E,k,D,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?se([C,[E,k,D,L],P,I||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(y,b,v,T){return typeof v=="function"&&(T=v,v=null),C(y,b,v,T);function C(E,k,D,L,I){return o(E,k,D,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?se([C,[E,k,D,L],P,I||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=l);function l(y,b,v,T){return typeof v=="function"&&(T=v,v=0),C(y,b,v,T);function C(E,k,D,L,I){return c(E,k,D,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?se([C,[E,k,D,L],P,I||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var f=t.readdir;t.readdir=u;var a=/^v[0-5]\./;function u(y,b,v){typeof b=="function"&&(v=b,b=null);var T=a.test(process.version)?function(k,D,L,I){return f(k,C(k,D,L,I))}:function(k,D,L,I){return f(k,D,C(k,D,L,I))};return T(y,b,v);function C(E,k,D,L){return function(I,P){I&&(I.code==="EMFILE"||I.code==="ENFILE")?se([T,[E,k,D],I,L||Date.now(),Date.now()]):(P&&P.sort&&P.sort(),typeof D=="function"&&D.call(this,I,P))}}}if(process.version.substr(0,4)==="v0.8"){var p=pn(t);g=p.ReadStream,x=p.WriteStream}var m=t.ReadStream;m&&(g.prototype=Object.create(m.prototype),g.prototype.open=O);var d=t.WriteStream;d&&(x.prototype=Object.create(d.prototype),x.prototype.open=X),Object.defineProperty(t,"ReadStream",{get:function(){return g},set:function(y){g=y},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return x},set:function(y){x=y},enumerable:!0,configurable:!0});var S=g;Object.defineProperty(t,"FileReadStream",{get:function(){return S},set:function(y){S=y},enumerable:!0,configurable:!0});var w=x;Object.defineProperty(t,"FileWriteStream",{get:function(){return w},set:function(y){w=y},enumerable:!0,configurable:!0});function g(y,b){return this instanceof g?(m.apply(this,arguments),this):g.apply(Object.create(g.prototype),arguments)}function O(){var y=this;Qe(y.path,y.flags,y.mode,function(b,v){b?(y.autoClose&&y.destroy(),y.emit("error",b)):(y.fd=v,y.emit("open",v),y.read())})}function x(y,b){return this instanceof x?(d.apply(this,arguments),this):x.apply(Object.create(x.prototype),arguments)}function X(){var y=this;Qe(y.path,y.flags,y.mode,function(b,v){b?(y.destroy(),y.emit("error",b)):(y.fd=v,y.emit("open",v))})}function fe(y,b){return new t.ReadStream(y,b)}function me(y,b){return new t.WriteStream(y,b)}var He=t.open;t.open=Qe;function Qe(y,b,v,T){return typeof v=="function"&&(T=v,v=null),C(y,b,v,T);function C(E,k,D,L,I){return He(E,k,D,function(P,Fs){P&&(P.code==="EMFILE"||P.code==="ENFILE")?se([C,[E,k,D,L],P,I||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}return t}function se(t){ie("ENQUEUE",t[0].name,t[1]),F[A].push(t),nt()}var Ee;function qt(){for(var t=Date.now(),e=0;e<F[A].length;++e)F[A][e].length>2&&(F[A][e][3]=t,F[A][e][4]=t);nt()}function nt(){if(clearTimeout(Ee),Ee=void 0,F[A].length!==0){var t=F[A].shift(),e=t[0],r=t[1],i=t[2],n=t[3],o=t[4];if(n===void 0)ie("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-n>=6e4){ie("TIMEOUT",e.name,r);var s=r.pop();typeof s=="function"&&s.call(null,i)}else{var c=Date.now()-o,l=Math.max(o-n,1),f=Math.min(l*1.2,100);c>=f?(ie("RETRY",e.name,r),e.apply(null,r.concat([n]))):F[A].push(t)}Ee===void 0&&(Ee=setTimeout(nt,0))}}});var q=h(H=>{"use strict";var Vt=j().fromCallback,R=ae(),hn=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchmod","lchown","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter(t=>typeof R[t]=="function");Object.assign(H,R);hn.forEach(t=>{H[t]=Vt(R[t])});H.exists=function(t,e){return typeof e=="function"?R.exists(t,e):new Promise(r=>R.exists(t,r))};H.read=function(t,e,r,i,n,o){return typeof o=="function"?R.read(t,e,r,i,n,o):new Promise((s,c)=>{R.read(t,e,r,i,n,(l,f,a)=>{if(l)return c(l);s({bytesRead:f,buffer:a})})})};H.write=function(t,e,...r){return typeof r[r.length-1]=="function"?R.write(t,e,...r):new Promise((i,n)=>{R.write(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesWritten:s,buffer:c})})})};H.readv=function(t,e,...r){return typeof r[r.length-1]=="function"?R.readv(t,e,...r):new Promise((i,n)=>{R.readv(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesRead:s,buffers:c})})})};H.writev=function(t,e,...r){return typeof r[r.length-1]=="function"?R.writev(t,e,...r):new Promise((i,n)=>{R.writev(t,e,...r,(o,s,c)=>{if(o)return n(o);i({bytesWritten:s,buffers:c})})})};typeof R.realpath.native=="function"?H.realpath.native=Vt(R.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Xt=h((Ws,$t)=>{"use strict";var Sn=require("path");$t.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(Sn.parse(e).root,""))){let i=new Error(`Path contains invalid characters: ${e}`);throw i.code="EINVAL",i}}});var Ut=h((Hs,st)=>{"use strict";var Bt=q(),{checkPath:Gt}=Xt(),Jt=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};st.exports.makeDir=async(t,e)=>(Gt(t),Bt.mkdir(t,{mode:Jt(e),recursive:!0}));st.exports.makeDirSync=(t,e)=>(Gt(t),Bt.mkdirSync(t,{mode:Jt(e),recursive:!0}))});var B=h((Qs,Wt)=>{"use strict";var gn=j().fromPromise,{makeDir:vn,makeDirSync:at}=Ut(),ct=gn(vn);Wt.exports={mkdirs:ct,mkdirsSync:at,mkdirp:ct,mkdirpSync:at,ensureDir:ct,ensureDirSync:at}});var Y=h((Ks,Qt)=>{"use strict";var wn=j().fromPromise,Ht=q();function bn(t){return Ht.access(t).then(()=>!0).catch(()=>!1)}Qt.exports={pathExists:wn(bn),pathExistsSync:Ht.existsSync}});var lt=h((zs,Kt)=>{"use strict";var ce=q(),xn=j().fromPromise;async function Ln(t,e,r){let i=await ce.open(t,"r+"),n=null;try{await ce.futimes(i,e,r)}finally{try{await ce.close(i)}catch(o){n=o}}if(n)throw n}function Pn(t,e,r){let i=ce.openSync(t,"r+");return ce.futimesSync(i,e,r),ce.closeSync(i)}Kt.exports={utimesMillis:xn(Ln),utimesMillisSync:Pn}});var ne=h((Ys,er)=>{"use strict";var le=q(),M=require("path"),zt=j().fromPromise;function kn(t,e,r){let i=r.dereference?n=>le.stat(n,{bigint:!0}):n=>le.lstat(n,{bigint:!0});return Promise.all([i(t),i(e).catch(n=>{if(n.code==="ENOENT")return null;throw n})]).then(([n,o])=>({srcStat:n,destStat:o}))}function Fn(t,e,r){let i,n=r.dereference?s=>le.statSync(s,{bigint:!0}):s=>le.lstatSync(s,{bigint:!0}),o=n(t);try{i=n(e)}catch(s){if(s.code==="ENOENT")return{srcStat:o,destStat:null};throw s}return{srcStat:o,destStat:i}}async function On(t,e,r,i){let{srcStat:n,destStat:o}=await kn(t,e,i);if(o){if(pe(n,o)){let s=M.basename(t),c=M.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.toLowerCase())return{srcStat:n,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(n.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!n.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(n.isDirectory()&&ut(t,e))throw new Error(Me(t,e,r));return{srcStat:n,destStat:o}}function Dn(t,e,r,i){let{srcStat:n,destStat:o}=Fn(t,e,i);if(o){if(pe(n,o)){let s=M.basename(t),c=M.basename(e);if(r==="move"&&s!==c&&s.toLowerCase()===c.toLowerCase())return{srcStat:n,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(n.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${t}'.`);if(!n.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${t}'.`)}if(n.isDirectory()&&ut(t,e))throw new Error(Me(t,e,r));return{srcStat:n,destStat:o}}async function Yt(t,e,r,i){let n=M.resolve(M.dirname(t)),o=M.resolve(M.dirname(r));if(o===n||o===M.parse(o).root)return;let s;try{s=await le.stat(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(pe(e,s))throw new Error(Me(t,r,i));return Yt(t,e,o,i)}function Zt(t,e,r,i){let n=M.resolve(M.dirname(t)),o=M.resolve(M.dirname(r));if(o===n||o===M.parse(o).root)return;let s;try{s=le.statSync(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(pe(e,s))throw new Error(Me(t,r,i));return Zt(t,e,o,i)}function pe(t,e){return e.ino&&e.dev&&e.ino===t.ino&&e.dev===t.dev}function ut(t,e){let r=M.resolve(t).split(M.sep).filter(n=>n),i=M.resolve(e).split(M.sep).filter(n=>n);return r.every((n,o)=>i[o]===n)}function Me(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}er.exports={checkPaths:zt(On),checkPathsSync:Dn,checkParentPaths:zt(Yt),checkParentPathsSync:Zt,isSrcSubdir:ut,areIdentical:pe}});var or=h((Zs,nr)=>{"use strict";var N=q(),de=require("path"),{mkdirs:En}=B(),{pathExists:jn}=Y(),{utimesMillis:Mn}=lt(),ye=ne();async function Tn(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:i,destStat:n}=await pe.checkPaths(t,e,"copy",r);if(await pe.checkParentPaths(t,i,e,"copy"),!await er(t,e,r))return;let s=me.dirname(e);await Mn(s)||await En(s),await tr(n,t,e,r)}async function er(t,e,r){return r.filter?r.filter(t,e):!0}async function tr(t,e,r,i){let o=await(i.dereference?I.stat:I.lstat)(e);if(o.isDirectory())return An(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Tn(o,t,e,r,i);if(o.isSymbolicLink())return Nn(t,e,r,i);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 Tn(t,e,r,i,n){if(!e)return Zt(t,r,i,n);if(n.overwrite)return await I.unlink(i),Zt(t,r,i,n);if(n.errorOnExist)throw new Error(`'${i}' already exists`)}async function Zt(t,e,r,i){if(await I.copyFile(e,r),i.preserveTimestamps){Cn(t.mode)&&await In(r,t.mode);let n=await I.stat(e);await Dn(r,n.atime,n.mtime)}return I.chmod(r,t.mode)}function Cn(t){return(t&128)===0}function In(t,e){return I.chmod(t,e|128)}async function An(t,e,r,i,n){e||await I.mkdir(i);let o=await I.readdir(r);await Promise.all(o.map(async s=>{let c=me.join(r,s),u=me.join(i,s);if(!await er(c,u,n))return;let{destStat:a}=await pe.checkPaths(c,u,"copy",n);return tr(a,c,u,n)})),e||await I.chmod(i,t.mode)}async function Nn(t,e,r,i){let n=await I.readlink(e);if(i.dereference&&(n=me.resolve(process.cwd(),n)),!t)return I.symlink(n,r);let o=null;try{o=await I.readlink(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return I.symlink(n,r);throw s}if(i.dereference&&(o=me.resolve(process.cwd(),o)),pe.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(pe.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return await I.unlink(r),I.symlink(n,r)}rr.exports=jn});var cr=h((ia,ar)=>{"use strict";var _=se(),de=require("path"),Rn=$().mkdirsSync,_n=it().utimesMillisSync,ye=te();function qn(t,e,r){typeof r=="function"&&(r={filter:r}),r=r||{},r.clobber="clobber"in r?!!r.clobber:!0,r.overwrite="overwrite"in r?!!r.overwrite:r.clobber,r.preserveTimestamps&&process.arch==="ia32"&&process.emitWarning(`Using the preserveTimestamps option in 32-bit node is not recommended;
5
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:i,destStat:n}=await ye.checkPaths(t,e,"copy",r);if(await ye.checkParentPaths(t,i,e,"copy"),!await rr(t,e,r))return;let s=de.dirname(e);await jn(s)||await En(s),await ir(n,t,e,r)}async function rr(t,e,r){return r.filter?r.filter(t,e):!0}async function ir(t,e,r,i){let o=await(i.dereference?N.stat:N.lstat)(e);if(o.isDirectory())return Nn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Cn(o,t,e,r,i);if(o.isSymbolicLink())return Rn(t,e,r,i);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 Cn(t,e,r,i,n){if(!e)return tr(t,r,i,n);if(n.overwrite)return await N.unlink(i),tr(t,r,i,n);if(n.errorOnExist)throw new Error(`'${i}' already exists`)}async function tr(t,e,r,i){if(await N.copyFile(e,r),i.preserveTimestamps){In(t.mode)&&await An(r,t.mode);let n=await N.stat(e);await Mn(r,n.atime,n.mtime)}return N.chmod(r,t.mode)}function In(t){return(t&128)===0}function An(t,e){return N.chmod(t,e|128)}async function Nn(t,e,r,i,n){e||await N.mkdir(i);let o=await N.readdir(r);await Promise.all(o.map(async s=>{let c=de.join(r,s),l=de.join(i,s);if(!await rr(c,l,n))return;let{destStat:a}=await ye.checkPaths(c,l,"copy",n);return ir(a,c,l,n)})),e||await N.chmod(i,t.mode)}async function Rn(t,e,r,i){let n=await N.readlink(e);if(i.dereference&&(n=de.resolve(process.cwd(),n)),!t)return N.symlink(n,r);let o=null;try{o=await N.readlink(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return N.symlink(n,r);throw s}if(i.dereference&&(o=de.resolve(process.cwd(),o)),ye.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(ye.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return await N.unlink(r),N.symlink(n,r)}nr.exports=Tn});var ur=h((ea,lr)=>{"use strict";var _=ae(),he=require("path"),qn=B().mkdirsSync,_n=lt().utimesMillisSync,Se=ne();function Vn(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:i,destStat:n}=ye.checkPathsSync(t,e,"copy",r);if(ye.checkParentPathsSync(t,i,e,"copy"),r.filter&&!r.filter(t,e))return;let o=de.dirname(e);return _.existsSync(o)||Rn(o),nr(n,t,e,r)}function nr(t,e,r,i){let o=(i.dereference?_.statSync:_.lstatSync)(e);if(o.isDirectory())return Wn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Vn(o,t,e,r,i);if(o.isSymbolicLink())return Qn(t,e,r,i);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 Vn(t,e,r,i,n){return e?Xn(t,r,i,n):or(t,r,i,n)}function Xn(t,e,r,i){if(i.overwrite)return _.unlinkSync(r),or(t,e,r,i);if(i.errorOnExist)throw new Error(`'${r}' already exists`)}function or(t,e,r,i){return _.copyFileSync(e,r),i.preserveTimestamps&&$n(t.mode,e,r),ot(r,t.mode)}function $n(t,e,r){return Bn(t)&&Gn(r,t),Jn(e,r)}function Bn(t){return(t&128)===0}function Gn(t,e){return ot(t,e|128)}function ot(t,e){return _.chmodSync(t,e)}function Jn(t,e){let r=_.statSync(t);return _n(e,r.atime,r.mtime)}function Wn(t,e,r,i,n){return e?sr(r,i,n):Un(t.mode,r,i,n)}function Un(t,e,r,i){return _.mkdirSync(r),sr(e,r,i),ot(r,t)}function sr(t,e,r){_.readdirSync(t).forEach(i=>Hn(i,t,e,r))}function Hn(t,e,r,i){let n=de.join(e,t),o=de.join(r,t);if(i.filter&&!i.filter(n,o))return;let{destStat:s}=ye.checkPathsSync(n,o,"copy",i);return nr(s,n,o,i)}function Qn(t,e,r,i){let n=_.readlinkSync(e);if(i.dereference&&(n=de.resolve(process.cwd(),n)),t){let o;try{o=_.readlinkSync(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return _.symlinkSync(n,r);throw s}if(i.dereference&&(o=de.resolve(process.cwd(),o)),ye.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(ye.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return zn(n,r)}else return _.symlinkSync(n,r)}function zn(t,e){return _.unlinkSync(e),_.symlinkSync(t,e)}ar.exports=qn});var Ee=h((na,lr)=>{"use strict";var Kn=E().fromPromise;lr.exports={copy:Kn(ir()),copySync:cr()}});var he=h((oa,fr)=>{"use strict";var ur=se(),Yn=E().fromCallback;function Zn(t,e){ur.rm(t,{recursive:!0,force:!0},e)}function eo(t){ur.rmSync(t,{recursive:!0,force:!0})}fr.exports={remove:Yn(Zn),removeSync:eo}});var vr=h((sa,gr)=>{"use strict";var to=E().fromPromise,dr=R(),yr=require("path"),hr=$(),Sr=he(),mr=to(async function(e){let r;try{r=await dr.readdir(e)}catch{return hr.mkdirs(e)}return Promise.all(r.map(i=>Sr.remove(yr.join(e,i))))});function pr(t){let e;try{e=dr.readdirSync(t)}catch{return hr.mkdirsSync(t)}e.forEach(r=>{r=yr.join(t,r),Sr.removeSync(r)})}gr.exports={emptyDirSync:pr,emptydirSync:pr,emptyDir:mr,emptydir:mr}});var Lr=h((aa,xr)=>{"use strict";var ro=E().fromPromise,wr=require("path"),H=R(),br=$();async function io(t){let e;try{e=await H.stat(t)}catch{}if(e&&e.isFile())return;let r=wr.dirname(t),i=null;try{i=await H.stat(r)}catch(n){if(n.code==="ENOENT"){await br.mkdirs(r),await H.writeFile(t,"");return}else throw n}i.isDirectory()?await H.writeFile(t,""):await H.readdir(r)}function no(t){let e;try{e=H.statSync(t)}catch{}if(e&&e.isFile())return;let r=wr.dirname(t);try{H.statSync(r).isDirectory()||H.readdirSync(r)}catch(i){if(i&&i.code==="ENOENT")br.mkdirsSync(r);else throw i}H.writeFileSync(t,"")}xr.exports={createFile:ro(io),createFileSync:no}});var Er=h((ca,Fr)=>{"use strict";var oo=E().fromPromise,Pr=require("path"),K=R(),kr=$(),{pathExists:so}=z(),{areIdentical:Or}=te();async function ao(t,e){let r;try{r=await K.lstat(e)}catch{}let i;try{i=await K.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&Or(i,r))return;let n=Pr.dirname(e);await so(n)||await kr.mkdirs(n),await K.link(t,e)}function co(t,e){let r;try{r=K.lstatSync(e)}catch{}try{let o=K.lstatSync(t);if(r&&Or(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let i=Pr.dirname(e);return K.existsSync(i)||kr.mkdirsSync(i),K.linkSync(t,e)}Fr.exports={createLink:oo(ao),createLinkSync:co}});var Dr=h((la,Mr)=>{"use strict";var Y=require("path"),Se=R(),{pathExists:lo}=z(),uo=E().fromPromise;async function fo(t,e){if(Y.isAbsolute(t)){try{await Se.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=Y.dirname(e),i=Y.join(r,t);if(await lo(i))return{toCwd:i,toDst:t};try{await Se.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:Y.relative(r,t)}}function mo(t,e){if(Y.isAbsolute(t)){if(!Se.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=Y.dirname(e),i=Y.join(r,t);if(Se.existsSync(i))return{toCwd:i,toDst:t};if(!Se.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:Y.relative(r,t)}}Mr.exports={symlinkPaths:uo(fo),symlinkPathsSync:mo}});var Cr=h((ua,Tr)=>{"use strict";var jr=R(),po=E().fromPromise;async function yo(t,e){if(e)return e;let r;try{r=await jr.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function ho(t,e){if(e)return e;let r;try{r=jr.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}Tr.exports={symlinkType:po(yo),symlinkTypeSync:ho}});var Rr=h((fa,Nr)=>{"use strict";var So=E().fromPromise,Ir=require("path"),G=R(),{mkdirs:go,mkdirsSync:vo}=$(),{symlinkPaths:wo,symlinkPathsSync:bo}=Dr(),{symlinkType:xo,symlinkTypeSync:Lo}=Cr(),{pathExists:Po}=z(),{areIdentical:Ar}=te();async function ko(t,e,r){let i;try{i=await G.lstat(e)}catch{}if(i&&i.isSymbolicLink()){let[c,u]=await Promise.all([G.stat(t),G.stat(e)]);if(Ar(c,u))return}let n=await wo(t,e);t=n.toDst;let o=await xo(n.toCwd,r),s=Ir.dirname(e);return await Po(s)||await go(s),G.symlink(t,e,o)}function Oo(t,e,r){let i;try{i=G.lstatSync(e)}catch{}if(i&&i.isSymbolicLink()){let c=G.statSync(t),u=G.statSync(e);if(Ar(c,u))return}let n=bo(t,e);t=n.toDst,r=Lo(n.toCwd,r);let o=Ir.dirname(e);return G.existsSync(o)||vo(o),G.symlinkSync(t,e,r)}Nr.exports={createSymlink:So(ko),createSymlinkSync:Oo}});var Jr=h((ma,Gr)=>{"use strict";var{createFile:_r,createFileSync:qr}=Lr(),{createLink:Vr,createLinkSync:Xr}=Er(),{createSymlink:$r,createSymlinkSync:Br}=Rr();Gr.exports={createFile:_r,createFileSync:qr,ensureFile:_r,ensureFileSync:qr,createLink:Vr,createLinkSync:Xr,ensureLink:Vr,ensureLinkSync:Xr,createSymlink:$r,createSymlinkSync:Br,ensureSymlink:$r,ensureSymlinkSync:Br}});var Me=h((pa,Wr)=>{function Fo(t,{EOL:e=`
8
- `,finalEOL:r=!0,replacer:i=null,spaces:n}={}){let o=r?e:"";return JSON.stringify(t,i,n).replace(/\n/g,e)+o}function Eo(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Wr.exports={stringify:Fo,stripBom:Eo}});var zr=h((da,Qr)=>{var le;try{le=se()}catch{le=require("fs")}var De=E(),{stringify:Ur,stripBom:Hr}=Me();async function Mo(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||le,i="throws"in e?e.throws:!0,n=await De.fromCallback(r.readFile)(t,e);n=Hr(n);let o;try{o=JSON.parse(n,e?e.reviver:null)}catch(s){if(i)throw s.message=`${t}: ${s.message}`,s;return null}return o}var Do=De.fromPromise(Mo);function jo(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||le,i="throws"in e?e.throws:!0;try{let n=r.readFileSync(t,e);return n=Hr(n),JSON.parse(n,e.reviver)}catch(n){if(i)throw n.message=`${t}: ${n.message}`,n;return null}}async function To(t,e,r={}){let i=r.fs||le,n=Ur(e,r);await De.fromCallback(i.writeFile)(t,n,r)}var Co=De.fromPromise(To);function Io(t,e,r={}){let i=r.fs||le,n=Ur(e,r);return i.writeFileSync(t,n,r)}var Ao={readFile:Do,readFileSync:jo,writeFile:Co,writeFileSync:Io};Qr.exports=Ao});var Yr=h((ya,Kr)=>{"use strict";var je=zr();Kr.exports={readJson:je.readFile,readJsonSync:je.readFileSync,writeJson:je.writeFile,writeJsonSync:je.writeFileSync}});var Te=h((ha,ti)=>{"use strict";var No=E().fromPromise,st=R(),Zr=require("path"),ei=$(),Ro=z().pathExists;async function _o(t,e,r="utf-8"){let i=Zr.dirname(t);return await Ro(i)||await ei.mkdirs(i),st.writeFile(t,e,r)}function qo(t,...e){let r=Zr.dirname(t);st.existsSync(r)||ei.mkdirsSync(r),st.writeFileSync(t,...e)}ti.exports={outputFile:No(_o),outputFileSync:qo}});var ii=h((Sa,ri)=>{"use strict";var{stringify:Vo}=Me(),{outputFile:Xo}=Te();async function $o(t,e,r={}){let i=Vo(e,r);await Xo(t,i,r)}ri.exports=$o});var oi=h((ga,ni)=>{"use strict";var{stringify:Bo}=Me(),{outputFileSync:Go}=Te();function Jo(t,e,r){let i=Bo(e,r);Go(t,i,r)}ni.exports=Jo});var ai=h((va,si)=>{"use strict";var Wo=E().fromPromise,q=Yr();q.outputJson=Wo(ii());q.outputJsonSync=oi();q.outputJSON=q.outputJson;q.outputJSONSync=q.outputJsonSync;q.writeJSON=q.writeJson;q.writeJSONSync=q.writeJsonSync;q.readJSON=q.readJson;q.readJSONSync=q.readJsonSync;si.exports=q});var mi=h((wa,fi)=>{"use strict";var Uo=R(),ci=require("path"),{copy:Ho}=Ee(),{remove:ui}=he(),{mkdirp:Qo}=$(),{pathExists:zo}=z(),li=te();async function Ko(t,e,r={}){let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=await li.checkPaths(t,e,"move",r);await li.checkParentPaths(t,n,e,"move");let s=ci.dirname(e);return ci.parse(s).root!==s&&await Qo(s),Yo(t,e,i,o)}async function Yo(t,e,r,i){if(!i){if(r)await ui(e);else if(await zo(e))throw new Error("dest already exists.")}try{await Uo.rename(t,e)}catch(n){if(n.code!=="EXDEV")throw n;await Zo(t,e,r)}}async function Zo(t,e,r){return await Ho(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),ui(t)}fi.exports=Ko});var Si=h((ba,hi)=>{"use strict";var di=se(),ct=require("path"),es=Ee().copySync,yi=he().removeSync,ts=$().mkdirpSync,pi=te();function rs(t,e,r){r=r||{};let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=pi.checkPathsSync(t,e,"move",r);return pi.checkParentPathsSync(t,n,e,"move"),is(e)||ts(ct.dirname(e)),ns(t,e,i,o)}function is(t){let e=ct.dirname(t);return ct.parse(e).root===e}function ns(t,e,r,i){if(i)return at(t,e,r);if(r)return yi(e),at(t,e,r);if(di.existsSync(e))throw new Error("dest already exists.");return at(t,e,r)}function at(t,e,r){try{di.renameSync(t,e)}catch(i){if(i.code!=="EXDEV")throw i;return os(t,e,r)}}function os(t,e,r){return es(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),yi(t)}hi.exports=rs});var vi=h((xa,gi)=>{"use strict";var ss=E().fromPromise;gi.exports={move:ss(mi()),moveSync:Si()}});var bi=h((La,wi)=>{"use strict";wi.exports={...R(),...Ee(),...vr(),...Jr(),...ai(),...$(),...vi(),...Te(),...z(),...he()}});var xi=h(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.EXTENSIONS_LANGUAGES=void 0;Ce.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:"XML",tsx:"XML",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 ge=h(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.setOptionValues=as;function as(t,e){for(let r of Object.keys(e))t[r]!==void 0&&(e[r]=t[r]);return e}});var Pi=h(Ie=>{"use strict";Object.defineProperty(Ie,"__esModule",{value:!0});Ie.SarifBuilder=void 0;var cs=require("path"),Li=bi(),ls=xi(),us=ge(),ut=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,us.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();Li.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await Li.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,i,n,o;e.artifacts=e.artifacts||[];for(let u of e.results)for(let m of u.locations||[])if(!((i=(r=m?.physicalLocation)===null||r===void 0?void 0:r.artifactLocation)===null||i===void 0)&&i.uri&&e.artifacts.filter(a=>{var l;return((l=a?.location)===null||l===void 0?void 0:l.uri)===m.physicalLocation.artifactLocation.uri}).length===0){let a=cs.extname(m.physicalLocation.artifactLocation.uri).replace(".",""),l=ls.EXTENSIONS_LANGUAGES[a]||"unknown";e.artifacts.push({sourceLanguage:l,location:{uri:m.physicalLocation.artifactLocation.uri}})}let s=e.artifacts.map(u=>{var m;return(m=u?.location)===null||m===void 0?void 0:m.uri}),c=(((o=(n=e?.tool)===null||n===void 0?void 0:n.driver)===null||o===void 0?void 0:o.rules)||[]).map(u=>u.id);return e.results=e.results.map(u=>(c.indexOf(u.ruleId)>-1&&(u.ruleIndex=c.indexOf(u.ruleId)),u.locations&&(u.locations=u.locations.map(m=>{var a,l;let p=(l=(a=m?.physicalLocation)===null||a===void 0?void 0:a.artifactLocation)===null||l===void 0?void 0:l.uri;return p&&s.indexOf(p)>-1&&(m.physicalLocation.artifactLocation.index=s.indexOf(p)),m})),u)),e}};Ie.SarifBuilder=ut});var ki=h(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.SarifResultBuilder=void 0;var fs=ge(),ft=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,fs.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(){var e;this.manageInitLocation(),!(!((e=this.result)===null||e===void 0)&&e.locations[0].physicalLocation)&&(this.result.locations[0].physicalLocation={})}};Ae.SarifResultBuilder=ft});var Oi=h(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.SarifRuleBuilder=void 0;var ms=ge(),mt=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,ms.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}};Ne.SarifRuleBuilder=mt});var Fi=h(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.SarifRunBuilder=void 0;var ps=ge(),pt=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,ps.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}};Re.SarifRunBuilder=pt});var Ei=h(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.SarifResultBuilder=J.SarifRuleBuilder=J.SarifRunBuilder=J.SarifBuilder=void 0;var ds=Pi();Object.defineProperty(J,"SarifBuilder",{enumerable:!0,get:function(){return ds.SarifBuilder}});var ys=ki();Object.defineProperty(J,"SarifResultBuilder",{enumerable:!0,get:function(){return ys.SarifResultBuilder}});var hs=Oi();Object.defineProperty(J,"SarifRuleBuilder",{enumerable:!0,get:function(){return hs.SarifRuleBuilder}});var Ss=Fi();Object.defineProperty(J,"SarifRunBuilder",{enumerable:!0,get:function(){return Ss.SarifRunBuilder}})});var Di=h((ja,Mi)=>{"use strict";var gs=/["'&<>]/;Mi.exports=vs;function vs(t){var e=""+t,r=gs.exec(e);if(!r)return e;var i,n="",o=0,s=0;for(o=r.index;o<e.length;o++){switch(e.charCodeAt(o)){case 34:i="&quot;";break;case 38:i="&amp;";break;case 39:i="&#39;";break;case 60:i="&lt;";break;case 62:i="&gt;";break;default:continue}s!==o&&(n+=e.substring(s,o)),s=o+1,n+=i}return s!==o?n+e.substring(s,o):n}});var Be=require("zx"),re=require("fs/promises");var Je={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4};var we=class{allById=new Map;getAllVulnerabilitiesSortedBySeverity(){let e=Array.from(this.allById.values());return e.sort((r,i)=>{let n=wt(r.severity,i.severity);return n===0?r.id.localeCompare(i.id):-n}),e}addVulnerability(e,r){let i=e.id,n=this.allById;if(!n.has(i))n.set(i,e);else{let o=n.get(i);o.title=o.title||e.title,o.severity=Ji(o.severity,e.severity),o.scannerSeverity[r]=e.severity,o.detectedBy=We(o.detectedBy,r),o.components=We(o.components,e.components[0]),o.refs=We(o.refs,e.refs[0])}}enhanceWithVexData(e){let r=[];for(let i of this.allById.values()){let n=e.newestVulnerabilityStatement(i.id);if(!n){r.push(i.id);continue}i.vexStatement=n}return{unmatchedVulnerabilities:r}}};function Ji(t,e){return wt(t,e)>0?t:e}function wt(t,e){return Je[t]-Je[e]}function We(t,e){return e?Array.from(new Set([...t,e]).values()):t}var ne=require("path");var X=require("fs/promises"),Ue=require("path");async function B(t){if(await ie(t))return JSON.parse(await(0,X.readFile)(t,{encoding:"utf-8"}))}function W(t){return t&&t.replace(/\?.*$/,"")}async function ie(t){try{return await(0,X.access)(t,X.constants.F_OK),!0}catch{return!1}}async function He(t){let e=(0,Ue.resolve)(t),r=await(0,X.readdir)(e,{withFileTypes:!0});for(let i of r){let n=(0,Ue.resolve)(i.parentPath,i.name);i.isDirectory()?await He(n):await(0,X.rm)(n)}await(0,X.rmdir)(e)}async function bt(){let t="https://repository.conterra.de/repository/maven-mirror-ct",e="./input/vex",r="./output",i="./.cache",n=["grype","trivy","ossindex"],o=(0,ne.resolve)("./vuln-scan-conf.json"),s=await B(o);if(!s)throw new Error(`Missing project configuration file '${o}'`);return{failOnNewVulnerabilities:!1,createSubDirsForProject:s.createSubDirsForProject??!0,mavenRepo:s.mavenRepo??t,vexDir:(0,ne.resolve)(s.vexDir??e),outDir:(0,ne.resolve)(s.outDir??r),cacheDir:(0,ne.resolve)(s.cacheDir??i),scanners:s.scanners??n,projects:(s.projects??[]).map(c=>{let u=c;return u.sbomFile?{...u,sbomFile:(0,ne.resolve)(u.sbomFile)}:c})}}var xt=require("zx");var be=require("path");async function Lt(t,e,r,i){console.log(" with Grype ...");let n=(0,be.dirname)(e),o=(0,be.basename)(e),s=await xt.$`docker run --rm -v '${t}:/.cache' -v '${n}:/tmp/output' -v '${r.sbomFile}:/tmp/input.json' anchore/grype:latest sbom:/tmp/input.json -o json --file '/tmp/output/${o}' --by-cve --quiet`;s.stdout&&console.log(` Scan log: ${s.stdout}`),s.stderr&&console.log(` Scan error: ${s.stderr}`),console.log(` Grype output file: ${e}`);let c=await B(e);Wi(i,c)}function Wi(t,e){if(e)for(let r of e.matches){let i=Ui(r);t.addVulnerability(i,"grype")}}function Ui(t){let e=t.vulnerability,r=e.id,i=W(t.artifact.purl),n=W(e.dataSource),o=Hi(e.severity);return{id:r,severity:o,scannerSeverity:{grype:o},title:"",description:e.description,components:[i],detectedBy:["grype"],refs:[n]}}function Hi(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 Pt=require("zx");var xe=require("path");async function kt(t,e,r,i){console.log(" with Trivy ...");let n=(0,xe.dirname)(e),o=(0,xe.basename)(e),s=await Pt.$`docker run --rm -v '${t}:/.cache' -v '${n}:/tmp/output' -v '${r.sbomFile}:/tmp/input.json' aquasec/trivy:latest sbom /tmp/input.json --cache-dir '/.cache' --format json --output /tmp/output/${o} --quiet`;s.stdout&&console.log(` Scan log: ${s.stdout}`),s.stderr&&console.log(` Scan error: ${s.stderr}`),console.log(` Trivy output file: ${e}`);let c=await B(e);Qi(i,c)}function Qi(t,e){if(e){for(let r of e.Results)if(r.Vulnerabilities)for(let i of r.Vulnerabilities){let n=zi(i);t.addVulnerability(n,"trivy")}}}function zi(t){let e=t.VulnerabilityID,r=W(t.PkgIdentifier.PURL),i=W(t.PrimaryURL),n=Ki(t.Severity);return{id:e,severity:n,scannerSeverity:{trivy:n},title:t.Title,description:t.Description,components:[r],detectedBy:["trivy"],refs:[i]}}function Ki(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}var Ot=require("fs/promises");async function Ft(t,e,r,i){console.log(" with Sonatype OSS Index ...");let n={},o="";r.user&&r.token&&(n.Authorization=`Basic ${Buffer.from(`${r.user}:${r.token}`).toString("base64")}`,o="/authorized");let s=`https://ossindex.sonatype.org/api/v3${o}/component-report`,c=await Yi(e.sbomFile),u=new Set(c.map(l=>l.purl.replace(/\?.*$/,"")));nn(u);let m=Array.from(u),a=[];for(let l=0;l<m.length;l+=128){let p=JSON.stringify({coordinates:m.slice(l,l+128)}),d=await(await fetch(s,{method:"POST",headers:{...n,"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"},body:p})).json();Array.isArray(d)?a.push(...d.filter(S=>S.vulnerabilities.length>0)):console.log(` Sonatype OssIndex Error: ${d.code} - ${d.message}`)}await(0,Ot.writeFile)(t,JSON.stringify(a,null,2)),console.log(` Sonatype OssIndex output file: ${t}`),en(i,a)}async function Yi(t){return(await B(t)).components.filter(r=>!Zi(r))}function Zi(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function en(t,e){if(e)for(let r of e)for(let i of r.vulnerabilities){let n=tn(i,r.coordinates);t.addVulnerability(n,"ossindex")}}function tn(t,e){let r=t.cve||t.id,i=W(e),n=W(t.reference),o=rn(t.cvssScore);return{id:r,severity:o,scannerSeverity:{ossindex:o},title:t.title,description:t.description,components:[i],detectedBy:["ossindex"],refs:n?[n]:[]}}function rn(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function nn(t){let e=Array.from(t);for(let r of e){let i=r.replace(/(@[^-]+)-.*$/g,"$1");t.add(i)}}var Z=vt(Ei()),ji=vt(Di());function Ti(t,e){let r=new Z.SarifRunBuilder().initSimple({toolDriverName:`${e.name} - ${e.version}`,toolDriverVersion:"0.0.1"}),i=new Date().toISOString().split("T")[0];r.run.tool.driver.fullDescription={text:`Security Scan from ${i}`},r.run.tool.driver.properties={"microsoft/qualityDomain":`Security Scan from ${i}`};for(let o of t){let s=bs(o.severity),c=o.id,u=ws(o.refs),m=new Z.SarifRuleBuilder().initSimple({ruleId:c,shortDescriptionText:o.title,fullDescriptionText:o.description,helpUri:u}),a=o.vexStatement,l,p="new",f="";a&&(s="none",p="updated",f=`--- INVESTIGATED (${a.status}) --- `,a.status==="under_investigation"&&(f="--- UNDER INVESTIGATION --- ")),Object.assign(m.rule,{name:`${f}[${o.severity}] - ${o.title.replace(`[${c}]`,"")}`,messageStrings:{default:{text:o.description,markdown:xs(o,u,f)}},properties:{severity:o.severity,scanners:o.scannerSeverity,links:o.refs,tags:["cve","vulnerability","security",`severity_${o.severity.toLowerCase()}`]}}),r.addRule(m);for(let d of o.components){let S=new Z.SarifResultBuilder().initSimple({ruleId:c,level:s,messageText:`${c} [${o.severity}] - ${d}`});S.result.message.id="default",S.result.locations=[{logicalLocations:[{fullyQualifiedName:d}]}],S.result.baselineState=p,S.result.suppressions=l,r.addResult(S)}}let n=new Z.SarifBuilder;return n.addRun(r),n.buildSarifOutput()}function ws(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function bs(t){switch(t){case"CRITICAL":return"error";case"HIGH":return"error";case"MEDIUM":return"warning";case"LOW":return"note";default:return"note"}}function xs(t,e,r){let i=t.vexStatement,n=i?`
7
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:i,destStat:n}=Se.checkPathsSync(t,e,"copy",r);if(Se.checkParentPathsSync(t,i,e,"copy"),r.filter&&!r.filter(t,e))return;let o=he.dirname(e);return _.existsSync(o)||qn(o),sr(n,t,e,r)}function sr(t,e,r,i){let o=(i.dereference?_.statSync:_.lstatSync)(e);if(o.isDirectory())return Wn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return $n(o,t,e,r,i);if(o.isSymbolicLink())return Kn(t,e,r,i);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 $n(t,e,r,i,n){return e?Xn(t,r,i,n):ar(t,r,i,n)}function Xn(t,e,r,i){if(i.overwrite)return _.unlinkSync(r),ar(t,e,r,i);if(i.errorOnExist)throw new Error(`'${r}' already exists`)}function ar(t,e,r,i){return _.copyFileSync(e,r),i.preserveTimestamps&&Bn(t.mode,e,r),ft(r,t.mode)}function Bn(t,e,r){return Gn(t)&&Jn(r,t),Un(e,r)}function Gn(t){return(t&128)===0}function Jn(t,e){return ft(t,e|128)}function ft(t,e){return _.chmodSync(t,e)}function Un(t,e){let r=_.statSync(t);return _n(e,r.atime,r.mtime)}function Wn(t,e,r,i,n){return e?cr(r,i,n):Hn(t.mode,r,i,n)}function Hn(t,e,r,i){return _.mkdirSync(r),cr(e,r,i),ft(r,t)}function cr(t,e,r){_.readdirSync(t).forEach(i=>Qn(i,t,e,r))}function Qn(t,e,r,i){let n=he.join(e,t),o=he.join(r,t);if(i.filter&&!i.filter(n,o))return;let{destStat:s}=Se.checkPathsSync(n,o,"copy",i);return sr(s,n,o,i)}function Kn(t,e,r,i){let n=_.readlinkSync(e);if(i.dereference&&(n=he.resolve(process.cwd(),n)),t){let o;try{o=_.readlinkSync(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return _.symlinkSync(n,r);throw s}if(i.dereference&&(o=he.resolve(process.cwd(),o)),Se.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(Se.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return zn(n,r)}else return _.symlinkSync(n,r)}function zn(t,e){return _.unlinkSync(e),_.symlinkSync(t,e)}lr.exports=Vn});var Te=h((ta,fr)=>{"use strict";var Yn=j().fromPromise;fr.exports={copy:Yn(or()),copySync:ur()}});var ge=h((ra,pr)=>{"use strict";var mr=ae(),Zn=j().fromCallback;function eo(t,e){mr.rm(t,{recursive:!0,force:!0},e)}function to(t){mr.rmSync(t,{recursive:!0,force:!0})}pr.exports={remove:Zn(eo),removeSync:to}});var br=h((ia,wr)=>{"use strict";var ro=j().fromPromise,hr=q(),Sr=require("path"),gr=B(),vr=ge(),dr=ro(async function(e){let r;try{r=await hr.readdir(e)}catch{return gr.mkdirs(e)}return Promise.all(r.map(i=>vr.remove(Sr.join(e,i))))});function yr(t){let e;try{e=hr.readdirSync(t)}catch{return gr.mkdirsSync(t)}e.forEach(r=>{r=Sr.join(t,r),vr.removeSync(r)})}wr.exports={emptyDirSync:yr,emptydirSync:yr,emptyDir:dr,emptydir:dr}});var kr=h((na,Pr)=>{"use strict";var io=j().fromPromise,xr=require("path"),Q=q(),Lr=B();async function no(t){let e;try{e=await Q.stat(t)}catch{}if(e&&e.isFile())return;let r=xr.dirname(t),i=null;try{i=await Q.stat(r)}catch(n){if(n.code==="ENOENT"){await Lr.mkdirs(r),await Q.writeFile(t,"");return}else throw n}i.isDirectory()?await Q.writeFile(t,""):await Q.readdir(r)}function oo(t){let e;try{e=Q.statSync(t)}catch{}if(e&&e.isFile())return;let r=xr.dirname(t);try{Q.statSync(r).isDirectory()||Q.readdirSync(r)}catch(i){if(i&&i.code==="ENOENT")Lr.mkdirsSync(r);else throw i}Q.writeFileSync(t,"")}Pr.exports={createFile:io(no),createFileSync:oo}});var jr=h((oa,Er)=>{"use strict";var so=j().fromPromise,Fr=require("path"),Z=q(),Or=B(),{pathExists:ao}=Y(),{areIdentical:Dr}=ne();async function co(t,e){let r;try{r=await Z.lstat(e)}catch{}let i;try{i=await Z.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&Dr(i,r))return;let n=Fr.dirname(e);await ao(n)||await Or.mkdirs(n),await Z.link(t,e)}function lo(t,e){let r;try{r=Z.lstatSync(e)}catch{}try{let o=Z.lstatSync(t);if(r&&Dr(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let i=Fr.dirname(e);return Z.existsSync(i)||Or.mkdirsSync(i),Z.linkSync(t,e)}Er.exports={createLink:so(co),createLinkSync:lo}});var Tr=h((sa,Mr)=>{"use strict";var ee=require("path"),ve=q(),{pathExists:uo}=Y(),fo=j().fromPromise;async function mo(t,e){if(ee.isAbsolute(t)){try{await ve.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=ee.dirname(e),i=ee.join(r,t);if(await uo(i))return{toCwd:i,toDst:t};try{await ve.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:ee.relative(r,t)}}function po(t,e){if(ee.isAbsolute(t)){if(!ve.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=ee.dirname(e),i=ee.join(r,t);if(ve.existsSync(i))return{toCwd:i,toDst:t};if(!ve.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:ee.relative(r,t)}}Mr.exports={symlinkPaths:fo(mo),symlinkPathsSync:po}});var Ar=h((aa,Ir)=>{"use strict";var Cr=q(),yo=j().fromPromise;async function ho(t,e){if(e)return e;let r;try{r=await Cr.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function So(t,e){if(e)return e;let r;try{r=Cr.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}Ir.exports={symlinkType:yo(ho),symlinkTypeSync:So}});var _r=h((ca,qr)=>{"use strict";var go=j().fromPromise,Nr=require("path"),J=q(),{mkdirs:vo,mkdirsSync:wo}=B(),{symlinkPaths:bo,symlinkPathsSync:xo}=Tr(),{symlinkType:Lo,symlinkTypeSync:Po}=Ar(),{pathExists:ko}=Y(),{areIdentical:Rr}=ne();async function Fo(t,e,r){let i;try{i=await J.lstat(e)}catch{}if(i&&i.isSymbolicLink()){let[c,l]=await Promise.all([J.stat(t),J.stat(e)]);if(Rr(c,l))return}let n=await bo(t,e);t=n.toDst;let o=await Lo(n.toCwd,r),s=Nr.dirname(e);return await ko(s)||await vo(s),J.symlink(t,e,o)}function Oo(t,e,r){let i;try{i=J.lstatSync(e)}catch{}if(i&&i.isSymbolicLink()){let c=J.statSync(t),l=J.statSync(e);if(Rr(c,l))return}let n=xo(t,e);t=n.toDst,r=Po(n.toCwd,r);let o=Nr.dirname(e);return J.existsSync(o)||wo(o),J.symlinkSync(t,e,r)}qr.exports={createSymlink:go(Fo),createSymlinkSync:Oo}});var Wr=h((la,Ur)=>{"use strict";var{createFile:Vr,createFileSync:$r}=kr(),{createLink:Xr,createLinkSync:Br}=jr(),{createSymlink:Gr,createSymlinkSync:Jr}=_r();Ur.exports={createFile:Vr,createFileSync:$r,ensureFile:Vr,ensureFileSync:$r,createLink:Xr,createLinkSync:Br,ensureLink:Xr,ensureLinkSync:Br,createSymlink:Gr,createSymlinkSync:Jr,ensureSymlink:Gr,ensureSymlinkSync:Jr}});var Ce=h((ua,Hr)=>{function Do(t,{EOL:e=`
8
+ `,finalEOL:r=!0,replacer:i=null,spaces:n}={}){let o=r?e:"";return JSON.stringify(t,i,n).replace(/\n/g,e)+o}function Eo(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Hr.exports={stringify:Do,stripBom:Eo}});var Yr=h((fa,zr)=>{var ue;try{ue=ae()}catch{ue=require("fs")}var Ie=j(),{stringify:Qr,stripBom:Kr}=Ce();async function jo(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||ue,i="throws"in e?e.throws:!0,n=await Ie.fromCallback(r.readFile)(t,e);n=Kr(n);let o;try{o=JSON.parse(n,e?e.reviver:null)}catch(s){if(i)throw s.message=`${t}: ${s.message}`,s;return null}return o}var Mo=Ie.fromPromise(jo);function To(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||ue,i="throws"in e?e.throws:!0;try{let n=r.readFileSync(t,e);return n=Kr(n),JSON.parse(n,e.reviver)}catch(n){if(i)throw n.message=`${t}: ${n.message}`,n;return null}}async function Co(t,e,r={}){let i=r.fs||ue,n=Qr(e,r);await Ie.fromCallback(i.writeFile)(t,n,r)}var Io=Ie.fromPromise(Co);function Ao(t,e,r={}){let i=r.fs||ue,n=Qr(e,r);return i.writeFileSync(t,n,r)}var No={readFile:Mo,readFileSync:To,writeFile:Io,writeFileSync:Ao};zr.exports=No});var ei=h((ma,Zr)=>{"use strict";var Ae=Yr();Zr.exports={readJson:Ae.readFile,readJsonSync:Ae.readFileSync,writeJson:Ae.writeFile,writeJsonSync:Ae.writeFileSync}});var Ne=h((pa,ii)=>{"use strict";var Ro=j().fromPromise,mt=q(),ti=require("path"),ri=B(),qo=Y().pathExists;async function _o(t,e,r="utf-8"){let i=ti.dirname(t);return await qo(i)||await ri.mkdirs(i),mt.writeFile(t,e,r)}function Vo(t,...e){let r=ti.dirname(t);mt.existsSync(r)||ri.mkdirsSync(r),mt.writeFileSync(t,...e)}ii.exports={outputFile:Ro(_o),outputFileSync:Vo}});var oi=h((da,ni)=>{"use strict";var{stringify:$o}=Ce(),{outputFile:Xo}=Ne();async function Bo(t,e,r={}){let i=$o(e,r);await Xo(t,i,r)}ni.exports=Bo});var ai=h((ya,si)=>{"use strict";var{stringify:Go}=Ce(),{outputFileSync:Jo}=Ne();function Uo(t,e,r){let i=Go(e,r);Jo(t,i,r)}si.exports=Uo});var li=h((ha,ci)=>{"use strict";var Wo=j().fromPromise,V=ei();V.outputJson=Wo(oi());V.outputJsonSync=ai();V.outputJSON=V.outputJson;V.outputJSONSync=V.outputJsonSync;V.writeJSON=V.writeJson;V.writeJSONSync=V.writeJsonSync;V.readJSON=V.readJson;V.readJSONSync=V.readJsonSync;ci.exports=V});var di=h((Sa,pi)=>{"use strict";var Ho=q(),ui=require("path"),{copy:Qo}=Te(),{remove:mi}=ge(),{mkdirp:Ko}=B(),{pathExists:zo}=Y(),fi=ne();async function Yo(t,e,r={}){let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=await fi.checkPaths(t,e,"move",r);await fi.checkParentPaths(t,n,e,"move");let s=ui.dirname(e);return ui.parse(s).root!==s&&await Ko(s),Zo(t,e,i,o)}async function Zo(t,e,r,i){if(!i){if(r)await mi(e);else if(await zo(e))throw new Error("dest already exists.")}try{await Ho.rename(t,e)}catch(n){if(n.code!=="EXDEV")throw n;await es(t,e,r)}}async function es(t,e,r){return await Qo(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),mi(t)}pi.exports=Yo});var vi=h((ga,gi)=>{"use strict";var hi=ae(),dt=require("path"),ts=Te().copySync,Si=ge().removeSync,rs=B().mkdirpSync,yi=ne();function is(t,e,r){r=r||{};let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=yi.checkPathsSync(t,e,"move",r);return yi.checkParentPathsSync(t,n,e,"move"),ns(e)||rs(dt.dirname(e)),os(t,e,i,o)}function ns(t){let e=dt.dirname(t);return dt.parse(e).root===e}function os(t,e,r,i){if(i)return pt(t,e,r);if(r)return Si(e),pt(t,e,r);if(hi.existsSync(e))throw new Error("dest already exists.");return pt(t,e,r)}function pt(t,e,r){try{hi.renameSync(t,e)}catch(i){if(i.code!=="EXDEV")throw i;return ss(t,e,r)}}function ss(t,e,r){return ts(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),Si(t)}gi.exports=is});var bi=h((va,wi)=>{"use strict";var as=j().fromPromise;wi.exports={move:as(di()),moveSync:vi()}});var Li=h((wa,xi)=>{"use strict";xi.exports={...q(),...Te(),...br(),...Wr(),...li(),...B(),...bi(),...Ne(),...Y(),...ge()}});var Pi=h(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.EXTENSIONS_LANGUAGES=void 0;Re.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:"XML",tsx:"XML",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 we=h(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});yt.setOptionValues=cs;function cs(t,e){for(let r of Object.keys(e))t[r]!==void 0&&(e[r]=t[r]);return e}});var Fi=h(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.SarifBuilder=void 0;var ls=require("path"),ki=Li(),us=Pi(),fs=we(),ht=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,fs.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();ki.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await ki.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,i,n,o;e.artifacts=e.artifacts||[];for(let l of e.results)for(let f of l.locations||[])if(!((i=(r=f?.physicalLocation)===null||r===void 0?void 0:r.artifactLocation)===null||i===void 0)&&i.uri&&e.artifacts.filter(a=>{var u;return((u=a?.location)===null||u===void 0?void 0:u.uri)===f.physicalLocation.artifactLocation.uri}).length===0){let a=ls.extname(f.physicalLocation.artifactLocation.uri).replace(".",""),u=us.EXTENSIONS_LANGUAGES[a]||"unknown";e.artifacts.push({sourceLanguage:u,location:{uri:f.physicalLocation.artifactLocation.uri}})}let s=e.artifacts.map(l=>{var f;return(f=l?.location)===null||f===void 0?void 0:f.uri}),c=(((o=(n=e?.tool)===null||n===void 0?void 0:n.driver)===null||o===void 0?void 0:o.rules)||[]).map(l=>l.id);return e.results=e.results.map(l=>(c.indexOf(l.ruleId)>-1&&(l.ruleIndex=c.indexOf(l.ruleId)),l.locations&&(l.locations=l.locations.map(f=>{var a,u;let p=(u=(a=f?.physicalLocation)===null||a===void 0?void 0:a.artifactLocation)===null||u===void 0?void 0:u.uri;return p&&s.indexOf(p)>-1&&(f.physicalLocation.artifactLocation.index=s.indexOf(p)),f})),l)),e}};qe.SarifBuilder=ht});var Oi=h(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.SarifResultBuilder=void 0;var ms=we(),St=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,ms.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(){var e;this.manageInitLocation(),!(!((e=this.result)===null||e===void 0)&&e.locations[0].physicalLocation)&&(this.result.locations[0].physicalLocation={})}};_e.SarifResultBuilder=St});var Di=h(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.SarifRuleBuilder=void 0;var ps=we(),gt=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,ps.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}};Ve.SarifRuleBuilder=gt});var Ei=h($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.SarifRunBuilder=void 0;var ds=we(),vt=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,ds.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}};$e.SarifRunBuilder=vt});var ji=h(U=>{"use strict";Object.defineProperty(U,"__esModule",{value:!0});U.SarifResultBuilder=U.SarifRuleBuilder=U.SarifRunBuilder=U.SarifBuilder=void 0;var ys=Fi();Object.defineProperty(U,"SarifBuilder",{enumerable:!0,get:function(){return ys.SarifBuilder}});var hs=Oi();Object.defineProperty(U,"SarifResultBuilder",{enumerable:!0,get:function(){return hs.SarifResultBuilder}});var Ss=Di();Object.defineProperty(U,"SarifRuleBuilder",{enumerable:!0,get:function(){return Ss.SarifRuleBuilder}});var gs=Ei();Object.defineProperty(U,"SarifRunBuilder",{enumerable:!0,get:function(){return gs.SarifRunBuilder}})});var Ti=h((Da,Mi)=>{"use strict";var vs=/["'&<>]/;Mi.exports=ws;function ws(t){var e=""+t,r=vs.exec(e);if(!r)return e;var i,n="",o=0,s=0;for(o=r.index;o<e.length;o++){switch(e.charCodeAt(o)){case 34:i="&quot;";break;case 38:i="&amp;";break;case 39:i="&#39;";break;case 60:i="&lt;";break;case 62:i="&gt;";break;default:continue}s!==o&&(n+=e.substring(s,o)),s=o+1,n+=i}return s!==o?n+e.substring(s,o):n}});var We=require("zx"),oe=require("fs/promises");var ze={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4};var Le=class{allById=new Map;getAllVulnerabilitiesSortedBySeverity(){let e=Array.from(this.allById.values());return e.sort((r,i)=>{let n=xt(r.severity,i.severity);return n===0?r.id.localeCompare(i.id):-n}),e}addVulnerability(e,r){let i=e.id,n=this.allById;if(!n.has(i))n.set(i,e);else{let o=n.get(i);o.title=o.title||e.title,o.severity=Ji(o.severity,e.severity),o.scannerSeverity[r]=e.severity,o.detectedBy=Ye(o.detectedBy,r),o.components=Ye(o.components,e.components[0]),o.refs=Ye(o.refs,e.refs[0])}}enhanceWithVexData(e){let r=[];for(let i of this.allById.values()){let n=e.newestVulnerabilityStatement(i.id);if(!n){r.push(i.id);continue}i.vexStatement=n}return{unmatchedVulnerabilities:r}}};function Ji(t,e){return xt(t,e)>0?t:e}function xt(t,e){return ze[t]-ze[e]}function Ye(t,e){return e?Array.from(new Set([...t,e]).values()):t}var Pe=Ke(require("path"));var $=require("fs/promises"),Ze=require("path");async function G(t){if(await re(t))return JSON.parse(await(0,$.readFile)(t,{encoding:"utf-8"}))}function W(t){return t&&t.replace(/\?.*$/,"")}async function re(t){try{return await(0,$.access)(t,$.constants.F_OK),!0}catch{return!1}}async function et(t){let e=(0,Ze.resolve)(t),r=await(0,$.readdir)(e,{withFileTypes:!0});for(let i of r){let n=(0,Ze.resolve)(i.parentPath,i.name);i.isDirectory()?await et(n):await(0,$.rm)(n)}await(0,$.rmdir)(e)}async function Lt(t){let e="https://repository.conterra.de/repository/maven-mirror-ct",r=K(t.workingDir,"input/vex"),i=K(t.workingDir,"output"),n=K(t.workingDir,"cache"),o=["grype","trivy","ossindex"],s=K(t.workingDir,"vuln-scan-conf.json"),c=await G(s);if(!c)throw new Error(`Missing project configuration file '${s}'`);return{failOnNewVulnerabilities:!1,createSubDirsForProject:c.createSubDirsForProject??!0,mavenRepo:c.mavenRepo??e,vexDir:K(t.workingDir,c.vexDir)??r,outDir:K(t.workingDir,c.outDir)??i,cacheDir:K(t.workingDir,c.cacheDir)??n,scanners:c.scanners??o,projects:(c.projects??[]).map(l=>{let f=l;return f.sbomFile?{...f,sbomFile:K(t.workingDir,f.sbomFile)}:l})}}function K(t,e){if(e)return Pe.default.isAbsolute(e)?e:(0,Pe.resolve)(t,e)}var Pt=require("zx");var ke=require("path");async function kt(t,e,r,i){console.log(" with Grype ...");let n=(0,ke.dirname)(e),o=(0,ke.basename)(e),s=await Pt.$`docker run --rm -v '${t}:/.cache' -v '${n}:/tmp/output' -v '${r.sbomFile}:/tmp/input.json' anchore/grype:latest sbom:/tmp/input.json -o json --file '/tmp/output/${o}' --by-cve --quiet`;s.stdout&&console.log(` Scan log: ${s.stdout}`),s.stderr&&console.log(` Scan error: ${s.stderr}`),console.log(` Grype output file: ${e}`);let c=await G(e);Ui(i,c)}function Ui(t,e){if(e)for(let r of e.matches){let i=Wi(r);t.addVulnerability(i,"grype")}}function Wi(t){let e=t.vulnerability,r=e.id,i=W(t.artifact.purl),n=W(e.dataSource),o=Hi(e.severity);return{id:r,severity:o,scannerSeverity:{grype:o},title:"",description:e.description,components:[i],detectedBy:["grype"],refs:[n]}}function Hi(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 Ft=require("zx");var Fe=require("path");async function Ot(t,e,r,i,n){let o=(0,Fe.dirname)(e),s=(0,Fe.basename)(e),c=[];i&&(c.push("-e"),c.push(`GITHUB_TOKEN=${i}`));let l=[];l.push("--db-repository"),l.push("public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db"),console.log(` with Trivy...${i?" (with GitHub token)":""}`);let f=await Ft.$`docker run --rm -v '${t}:/.cache' -v '${o}:/tmp/output' -v '${r.sbomFile}:/tmp/input.json' ${c} aquasec/trivy:latest sbom ${l} --cache-dir '/.cache' --format json --output '/tmp/output/${s}' --quiet /tmp/input.json`;f.stdout&&console.log(` Scan log: ${f.stdout}`),f.stderr&&console.log(` Scan error: ${f.stderr}`),console.log(` Trivy output file: ${e}`);let a=await G(e);Qi(n,a)}function Qi(t,e){if(e){for(let r of e.Results)if(r.Vulnerabilities)for(let i of r.Vulnerabilities){let n=Ki(i);t.addVulnerability(n,"trivy")}}}function Ki(t){let e=t.VulnerabilityID,r=W(t.PkgIdentifier.PURL),i=W(t.PrimaryURL),n=zi(t.Severity);return{id:e,severity:n,scannerSeverity:{trivy:n},title:t.Title,description:t.Description,components:[r],detectedBy:["trivy"],refs:[i]}}function zi(t){switch(t){case"UNKNOWN":case"LOW":case"MEDIUM":case"HIGH":case"CRITICAL":return t;default:return"UNKNOWN"}}var Dt=require("fs/promises");async function Et(t,e,r,i){console.log(" with Sonatype OSS Index ...");let n={},o="";r.user&&r.token&&(n.Authorization=`Basic ${Buffer.from(`${r.user}:${r.token}`).toString("base64")}`,o="/authorized");let s=`https://ossindex.sonatype.org/api/v3${o}/component-report`,c=await Yi(e.sbomFile),l=new Set(c.map(u=>u.purl.replace(/\?.*$/,"")));on(l);let f=Array.from(l),a=[];for(let u=0;u<f.length;u+=128){let p=JSON.stringify({coordinates:f.slice(u,u+128)}),d=await(await fetch(s,{method:"POST",headers:{...n,"Content-Type":"application/vnd.ossindex.component-report-request.v1+json"},body:p})).json();Array.isArray(d)?a.push(...d.filter(S=>S.vulnerabilities.length>0)):console.log(` Sonatype OssIndex Error: ${d.code} - ${d.message}`)}await(0,Dt.writeFile)(t,JSON.stringify(a,null,2)),console.log(` Sonatype OssIndex output file: ${t}`),tn(i,a)}async function Yi(t){return(await G(t)).components.filter(r=>Zi(r)&&!en(r))}function Zi(t){return!!t.purl}function en(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function tn(t,e){if(e)for(let r of e)for(let i of r.vulnerabilities){let n=rn(i,r.coordinates);t.addVulnerability(n,"ossindex")}}function rn(t,e){let r=t.cve||t.id,i=W(e),n=W(t.reference),o=nn(t.cvssScore);return{id:r,severity:o,scannerSeverity:{ossindex:o},title:t.title,description:t.description,components:[i],detectedBy:["ossindex"],refs:n?[n]:[]}}function nn(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function on(t){let e=Array.from(t);for(let r of e){let i=r.replace(/(@[^-]+)-.*$/g,"$1");t.add(i)}}var te=Ke(ji()),Ci=Ke(Ti());function Ii(t,e){let r=new te.SarifRunBuilder().initSimple({toolDriverName:`${e.name} - ${e.version}`,toolDriverVersion:"0.0.1"}),i=new Date().toISOString().split("T")[0];r.run.tool.driver.fullDescription={text:`Security Scan from ${i}`},r.run.tool.driver.properties={"microsoft/qualityDomain":`Security Scan from ${i}`};for(let o of t){let s=xs(o.severity),c=o.id,l=bs(o.refs),f=new te.SarifRuleBuilder().initSimple({ruleId:c,shortDescriptionText:o.title,fullDescriptionText:o.description,helpUri:l}),a=o.vexStatement,u,p="new",m="";a&&(s="none",p="updated",m=`--- INVESTIGATED (${a.status}) --- `,a.status==="under_investigation"&&(m="--- UNDER INVESTIGATION --- ")),Object.assign(f.rule,{name:`${m}[${o.severity}] - ${o.title.replace(`[${c}]`,"")}`,messageStrings:{default:{text:o.description,markdown:Ls(o,l,m)}},properties:{severity:o.severity,scanners:o.scannerSeverity,links:o.refs,tags:["cve","vulnerability","security",`severity_${o.severity.toLowerCase()}`]}}),r.addRule(f);for(let d of o.components){let S=new te.SarifResultBuilder().initSimple({ruleId:c,level:s,messageText:`${c} [${o.severity}] - ${d}`});S.result.message.id="default",S.result.locations=[{logicalLocations:[{fullyQualifiedName:d}]}],S.result.baselineState=p,S.result.suppressions=u,r.addResult(S)}}let n=new te.SarifBuilder;return n.addRun(r),n.buildSarifOutput()}function bs(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function xs(t){switch(t){case"CRITICAL":return"error";case"HIGH":return"error";case"MEDIUM":return"warning";case"LOW":return"note";default:return"note"}}function Ls(t,e,r){let i=t.vexStatement,n=i?`
9
9
  ${r}
10
10
  ${i.justification??""}
11
- ${i.impact_statement??""}`:"";return`
11
+ ${i.impact_statement??""}
12
+ ${i.action_statement??""}`:"";return`
12
13
 
13
14
  __[${t.id}](${e})__
14
15
 
@@ -16,12 +17,12 @@ ${n}
16
17
 
17
18
  --- DETAILS ---
18
19
 
19
- ${(0,ji.default)(t.description)}
20
+ ${(0,Ci.default)(t.description)}
20
21
 
21
22
  ${t.refs.map(o=>`* <${o}>`).join(`
22
23
  `)}
23
- `}var qe=require("fs/promises");async function Ci(t,e,r){if("sbomFile"in t)return await(0,qe.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let i=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,qe.writeFile)(e,i),{...t,sbomFile:e}}var _e=class{constructor(e,r){this.repo=e;this.authn=r}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 i=this.toArtifactUrl(r),n=await this.fetchMavenArtifact(i);return Buffer.from(await n.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,n=await(await this.fetchMavenArtifact(r)).text(),o=n.match(/<timestamp>([^<]+)<\/timestamp>/),s=n.match(/<buildNumber>([^<]+)<\/buildNumber>/);if(!o||!s)throw new Error(`Failed to get timestamp and build number from ${r}`);return`${o[1]}-${s[1]}`}toArtifactUrl(e){let r=this.toArtifactBaseUrl(e),i=this.isSnapshotVersion(e.version)&&e.timestamp?e.version.replace(/SNAPSHOT$/,e.timestamp):e.version;return`${r}/${e.artifactId}-${i}-${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"}}async fetchMavenArtifact(e){let r=this.authn,i=r.user&&r.pw?{Authorization:`Basic ${Buffer.from(`${r.user}:${r.pw}`).toString("base64")}`}:{},n=await fetch(e,{headers:i});if(!n.ok){let o="";try{o=await n.text()}catch(s){o=`${s}`}throw new Error(`Failed to download sbom: ${e}: ${n.status} - ${n.statusText}: ${o}`)}return n}};var Ii=require("fs/promises"),Ve=require("path");async function yt(t,e=new ve){let r=(0,Ve.resolve)(t);for(let i of await(0,Ii.readdir)(r,{withFileTypes:!0}))if(i.name.endsWith(".json")){let n=await B((0,Ve.resolve)(i.parentPath,i.name));e.add(n)}else i.isDirectory()&&await yt((0,Ve.resolve)(i.parentPath,i.name),e);return e}var ve=class t{statements=[];filteredToProduct;add(e){let r=e.timestamp;for(let i of e.statements){i.timestamp=i.timestamp??r;let n=Date.parse(i.timestamp),o=i.vulnerability.name,s=new Set([o,...i.vulnerability.aliases??[]]),c=new Set(i.products?.map(m=>m["@id"]).filter(m=>!!m)??[]),u=new dt(n,o,s,c,i);this.statements.push(u)}this.sortStatementsByTimestampNewestFirst()}filterByProduct(e){if(this.assertCorrectProductId(e),this.filteredToProduct)return this;let r=new t;return r.filteredToProduct=e,r.statements=this.statements.filter(i=>i.matchesProduct(e)),r}newestVulnerabilityStatement(e,r){let i=this.filterByProduct(r??this.filteredToProduct);for(let n of i.statements)if(n.matchesVulnerability(e))return this.reduceToProductInformation(n.statement,i.filteredToProduct)}toVexFileForProduct(e){let r=this.filterByProduct(e??this.filteredToProduct),i=r.statements[0]?.statement.timestamp??new Date().toISOString(),n=r.statements.map(o=>r.reduceToProductInformation(o.statement)).filter(o=>o.status!=="under_investigation");if(n.length!==0)return{"@context":"https://openvex.dev/ns/v0.2.0","@id":"https://openvex.dev/docs/public/vex-fc763e6eb63bfbcda20b7cbbddd4e9f8feaaa317fe8d8a6f51a5663a1180343e",author:"conterra",timestamp:i,last_updated:i,version:1,statements:n}}assertCorrectProductId(e){if(!e)throw new Error("Product ID must be provided");if(this.filteredToProduct&&this.filteredToProduct!==e)throw new Error("Cannot filter to a different product")}reduceToProductInformation(e,r){return r=r??this.filteredToProduct,{...e,products:e.products?.filter(i=>i["@id"]===r)}}sortStatementsByTimestampNewestFirst(){this.statements.sort((e,r)=>r.timestamp-e.timestamp)}},dt=class{constructor(e,r,i,n,o){this.timestamp=e;this.vulnName=r;this.vulnAliases=i;this.products=n;this.statement=o}matchesProduct(e){return this.products.has(e)}matchesVulnerability(e){return this.vulnAliases.has(e)}};var $e=require("path"),Ai=require("fs/promises");var Xe=class{constructor(e,r,i){this.project=e;this.outputDir=r;this.useSubDirForProject=i}async lookupOutputFileForWriting(e){let r=this.useSubDirForProject?`${this.project.name}-${this.project.version}`:"",i=`${this.project.name}-${this.project.version}-`,n=this.getFileSuffix(e),o=(0,$e.resolve)(this.outputDir,r,`${i}${n}`),s=(0,$e.dirname)(o);return await ie(s)||await(0,Ai.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}`)}}};Be.os.type().startsWith("Windows")&&(0,Be.usePowerShell)();var Ni=process.argv[2],Ri=process.argv[3],Ls=process.env.OSS_INDEX_API_TOKEN,Ps=process.env.OSS_INDEX_API_USER,ks=process.env.MAVEN_REPO_PW,Os=process.env.MAVEN_REPO_USER;(async()=>{let t=await bt(),e=t.cacheDir;await ie(e)||await(0,re.mkdir)(e);let r=t.outDir;await ie(r)&&await He(r),await(0,re.mkdir)(r);let i=t.vexDir?await yt(t.vexDir):new ve,n=new _e(t.mavenRepo,{user:Os,pw:ks}),o=t.projects,s=new Map;for(let c of o){if(Ni&&(c.name!==Ni||Ri&&c.version!==Ri))continue;let u=new Xe(c,r,t.createSubDirsForProject),m=await Ci(c,await u.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),n);console.log(`Analyzing project: ${m.name} - ${m.version} - ${m.sbomFile}`);let a=new we;await Promise.all(t.scanners.map(f=>Fs(f,m,u,e,a)));let l=i.filterByProduct(m.purl),{unmatchedVulnerabilities:p}=a.enhanceWithVexData(l);p.length>0&&s.set(m.purl,p),await Es(u,m,a,l)}if(s.size>0){console.log(`
24
- Detected new vulnerabilities for products:`);for(let[c,u]of s){console.log(` ${c}:`);for(let m of u)console.log(` ${m}`)}console.log("##vso[task.complete result=SucceededWithIssues;]NEW_VULNERABILITIES_DETECTED"),t.failOnNewVulnerabilities&&process.exit(1)}})();async function Fs(t,e,r,i,n){switch(t){case"grype":return Lt(i,await r.lookupOutputFileForWriting("grype-results"),e,n);case"trivy":return kt(i,await r.lookupOutputFileForWriting("trivy-results"),e,n);case"ossindex":return Ft(await r.lookupOutputFileForWriting("ossindex-results"),e,{user:Ps,token:Ls},n)}}async function Es(t,e,r,i){let n=r.getAllVulnerabilitiesSortedBySeverity(),o=await t.lookupOutputFileForWriting("aggregate-results");await(0,re.writeFile)(o,JSON.stringify(n,null,2)),console.log(` Vulnerabilities output file: ${o}`);let s=await t.lookupOutputFileForWriting("aggregated-sarif-results"),c=Ti(n,e);await(0,re.writeFile)(s,JSON.stringify(c,null,2)),console.log(` Vuln Sarif output file: ${s}`);let u=i.toVexFileForProduct();if(!u)return;let m=await t.lookupOutputFileForWriting("project-openvex-file");await(0,re.writeFile)(m,JSON.stringify(u,null,2)),console.log(` OpenVex file: ${m}`)}
24
+ `}var Be=require("fs/promises");async function Ai(t,e,r){if("sbomFile"in t)return await(0,Be.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let i=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,Be.writeFile)(e,i),{...t,sbomFile:e}}var Xe=class{constructor(e,r){this.repo=e;this.authn=r}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 i=this.toArtifactUrl(r),n=await this.fetchMavenArtifact(i);return Buffer.from(await n.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,n=await(await this.fetchMavenArtifact(r)).text(),o=n.match(/<timestamp>([^<]+)<\/timestamp>/),s=n.match(/<buildNumber>([^<]+)<\/buildNumber>/);if(!o||!s)throw new Error(`Failed to get timestamp and build number from ${r}`);return`${o[1]}-${s[1]}`}toArtifactUrl(e){let r=this.toArtifactBaseUrl(e),i=this.isSnapshotVersion(e.version)&&e.timestamp?e.version.replace(/SNAPSHOT$/,e.timestamp):e.version;return`${r}/${e.artifactId}-${i}-${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"}}async fetchMavenArtifact(e){let r=this.authn,i=r.user&&r.pw?{Authorization:`Basic ${Buffer.from(`${r.user}:${r.pw}`).toString("base64")}`}:{},n=await fetch(e,{headers:i});if(!n.ok){let o="";try{o=await n.text()}catch(s){o=`${s}`}throw new Error(`Failed to download sbom: ${e}: ${n.status} - ${n.statusText}: ${o}`)}return n}};var Ni=require("fs/promises"),Ge=require("path");var be=class t{statements=[];filteredToProduct;static async fromFiles(e,r=new t){let i=(0,Ge.resolve)(e);for(let n of await(0,Ni.readdir)(i,{withFileTypes:!0}))if(n.name.endsWith(".json")){let o=await G((0,Ge.resolve)(n.parentPath,n.name));r.add(o)}else n.isDirectory()&&await t.fromFiles((0,Ge.resolve)(n.parentPath,n.name),r);return r}add(e){let r=e.timestamp;for(let i of e.statements){i.timestamp=i.timestamp??r;let n=Date.parse(i.timestamp),o=i.vulnerability.name,s=new Set([o,...i.vulnerability.aliases??[]]),c=new Set(i.products?.map(f=>f["@id"]).filter(f=>!!f)??[]),l=new wt(n,o,s,c,i);this.statements.push(l)}this.sortStatementsByTimestampNewestFirst()}filterByProduct(e){if(this.assertCorrectProductId(e),this.filteredToProduct)return this;let r=new t;return r.filteredToProduct=e,r.statements=this.statements.filter(i=>i.matchesProduct(e)),r}newestVulnerabilityStatement(e,r){let i=this.filterByProduct(r??this.filteredToProduct);for(let n of i.statements)if(n.matchesVulnerability(e))return this.reduceToProductInformation(n.statement,i.filteredToProduct)}toVexFileForProduct(e){let r=this.filterByProduct(e??this.filteredToProduct),i=r.statements[0]?.statement.timestamp??new Date().toISOString(),n=r.statements.map(o=>r.reduceToProductInformation(o.statement)).filter(o=>o.status!=="under_investigation");if(n.length!==0)return{"@context":"https://openvex.dev/ns/v0.2.0","@id":"https://openvex.dev/docs/public/vex-fc763e6eb63bfbcda20b7cbbddd4e9f8feaaa317fe8d8a6f51a5663a1180343e",author:"conterra",timestamp:i,last_updated:i,version:1,statements:n}}assertCorrectProductId(e){if(!e)throw new Error("Product ID must be provided");if(this.filteredToProduct&&this.filteredToProduct!==e)throw new Error("Cannot filter to a different product")}reduceToProductInformation(e,r){return r=r??this.filteredToProduct,{...e,products:e.products?.filter(i=>i["@id"]===r)}}sortStatementsByTimestampNewestFirst(){this.statements.sort((e,r)=>r.timestamp-e.timestamp)}},wt=class{constructor(e,r,i,n,o){this.timestamp=e;this.vulnName=r;this.vulnAliases=i;this.products=n;this.statement=o}matchesProduct(e){return this.products.has(e)}matchesVulnerability(e){return this.vulnAliases.has(e)}};var Ue=require("path"),Ri=require("fs/promises");var Je=class{constructor(e,r,i){this.project=e;this.outputDir=r;this.useSubDirForProject=i}async lookupOutputFileForWriting(e){let r=this.useSubDirForProject?`${this.project.name}-${this.project.version}`:"",i=`${this.project.name}-${this.project.version}-`,n=this.getFileSuffix(e),o=(0,Ue.resolve)(this.outputDir,r,`${i}${n}`),s=(0,Ue.dirname)(o);return await re(s)||await(0,Ri.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}`)}}};We.os.type().startsWith("Windows")&&(0,We.usePowerShell)();async function qi(t){let{mavenRepoUser:e,mavenRepoPw:r,reduceToProjectVersion:i,reduceToProjectName:n,ossIndexApiUser:o,ossIndexApiToken:s,trivyGithubToken:c}=t,l=await Lt(t),f=l.cacheDir;await re(f)||await(0,oe.mkdir)(f);let a=l.outDir;await re(a)&&await et(a),await(0,oe.mkdir)(a);let u=l.vexDir,p;await re(u)?p=await be.fromFiles(u):p=new be;let m=new Xe(l.mavenRepo,{user:e,pw:r}),d=l.projects,S=new Map,w=t.scannerEngines??l.scanners.map(g=>({scanProject(O,x,X){return Ps(g,O,x,f,X,o,s,c)}}));for(let g of d){if(n&&(g.name!==n||i&&g.version!==i))continue;let O=new Je(g,a,l.createSubDirsForProject),x=await Ai(g,await O.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),m);console.log(`Analyzing project: ${x.name} - ${x.version} - ${x.sbomFile}`);let X=new Le;await Promise.all(w.map(He=>He.scanProject(x,O,X)));let fe=p.filterByProduct(x.purl),{unmatchedVulnerabilities:me}=X.enhanceWithVexData(fe);me.length>0&&S.set(x.purl,me),await ks(O,x,X,fe)}if(S.size>0){console.log(`
25
+ Detected new vulnerabilities for products:`);for(let[g,O]of S){console.log(` ${g}:`);for(let x of O)console.log(` ${x}`)}t.mode!=="test"&&console.log("##vso[task.complete result=SucceededWithIssues;]NEW_VULNERABILITIES_DETECTED"),l.failOnNewVulnerabilities&&process.exit(1)}}async function Ps(t,e,r,i,n,o,s,c){switch(t){case"grype":return kt(i,await r.lookupOutputFileForWriting("grype-results"),e,n);case"trivy":return Ot(i,await r.lookupOutputFileForWriting("trivy-results"),e,c,n);case"ossindex":return Et(await r.lookupOutputFileForWriting("ossindex-results"),e,{user:o,token:s},n)}}async function ks(t,e,r,i){let n=r.getAllVulnerabilitiesSortedBySeverity(),o=await t.lookupOutputFileForWriting("aggregate-results");await(0,oe.writeFile)(o,JSON.stringify(n,null,2)),console.log(` Vulnerabilities output file: ${o}`);let s=await t.lookupOutputFileForWriting("aggregated-sarif-results"),c=Ii(n,e);await(0,oe.writeFile)(s,JSON.stringify(c,null,2)),console.log(` Vuln Sarif output file: ${s}`);let l=i.toVexFileForProduct();if(!l)return;let f=await t.lookupOutputFileForWriting("project-openvex-file");await(0,oe.writeFile)(f,JSON.stringify(l,null,2)),console.log(` OpenVex file: ${f}`)}var xe=process.env;qi({workingDir:process.cwd(),reduceToProjectName:process.argv[2],reduceToProjectVersion:process.argv[3],ossIndexApiToken:xe.OSS_INDEX_API_TOKEN,ossIndexApiUser:xe.OSS_INDEX_API_USER,mavenRepoPw:xe.MAVEN_REPO_PW,mavenRepoUser:xe.MAVEN_REPO_USER,trivyGithubToken:xe.TRIVY_GITHUB_TOKEN});
25
26
  /*! Bundled license information:
26
27
 
27
28
  escape-html/index.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conterra/vuln-scan",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "con terra vulnerability scan process",
5
5
  "author": "con terra GmbH",
6
6
  "license": "Apache-2.0",
@@ -19,32 +19,31 @@
19
19
  },
20
20
  "scripts": {
21
21
  "full-build": "npm run clean && npm run type-check && npm run lint && npm run prod",
22
- "build": "node esbuild.config.mjs build",
23
- "prod": "node esbuild.config.mjs prod",
22
+ "build": "npm run test && node esbuild.config.mjs build",
23
+ "prod": "npm run test && node esbuild.config.mjs prod",
24
24
  "watch": "node esbuild.config.mjs watch",
25
25
  "type-check": "tsc --noEmit",
26
26
  "type-watch": "tsc -w --noEmit",
27
27
  "update-openvex-types": "json2ts --input ./src/types/openvex-schema.json --output ./src/types/openvex_json.ts --no-style.semi --style.tabWidth 4",
28
28
  "lint": "eslint",
29
- "clean": "rimraf dist"
29
+ "clean": "rimraf dist",
30
+ "test": "vitest"
30
31
  },
31
32
  "dependencies": {
32
33
  "zx": "^8.1.9"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@types/escape-html": "^1.0.4",
36
- "chai": "^5.1.1",
37
37
  "copyfiles": "^2.4.1",
38
38
  "esbuild": "^0.24.0",
39
39
  "escape-html": "^1.0.3",
40
40
  "eslint-plugin-headers": "^1.2.0",
41
41
  "globals": "^15.11.0",
42
42
  "json-schema-to-typescript": "^15.0.2",
43
- "mocha": "^10.4.0",
44
43
  "node-sarif-builder": "^3.2.0",
45
44
  "rimraf": "^6.0.1",
46
- "tiny-glob": "^0.2.9",
47
45
  "typescript": "^5.6.3",
48
- "typescript-eslint": "^8.11.0"
46
+ "typescript-eslint": "^8.11.0",
47
+ "vitest": "^2.1.4"
49
48
  }
50
49
  }