@conterra/vuln-scan 0.0.3 → 0.0.5

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.
@@ -78,6 +102,10 @@ The following sample lists all available options with their default values:
78
102
  "mavenRepo": "https://repository.conterra.de/repository/maven-mirror-ct",
79
103
  /* The list of scanners to use. Possible values are "grype", "trivy" and "ossindex". */
80
104
  "scanners": ["grype", "trivy", "ossindex"],
105
+ /* (optional) The list of vex files to download. Default is empty array. */
106
+ "vexUrls": [
107
+ "https://example.com/my-vex.json"
108
+ ],
81
109
  /* The directory where the vex files are stored. */
82
110
  "vexDir": "./input/vex",
83
111
  /* The directory where the scan results are written to. */
@@ -123,6 +151,12 @@ To scan a specific project run following command:
123
151
  $ ct-vuln-scan mapapps 4.18.2
124
152
  ```
125
153
 
154
+ To scan all versions of a project run:
155
+
156
+ ```sh
157
+ $ ct-vuln-scan mapapps
158
+ ```
159
+
126
160
  You may need following environment variables for a successful scan:
127
161
 
128
162
  ```bash
@@ -133,6 +167,15 @@ MAVEN_REPO_PW=[password]
133
167
  # (optional) for oss index authenticated api
134
168
  OSS_INDEX_API_USER=[username]
135
169
  OSS_INDEX_API_TOKEN=[token]
170
+
171
+ # (optional) for authentication downloading vex files specified by vexUrls option
172
+ VEX_URLS_USER=[username]
173
+ VEX_URLS_PW=[password]
174
+
175
+ # (optional) helps to fix the rate limit issue during downloading the trivy database from github
176
+ # See <https://aquasecurity.github.io/trivy/v0.38/docs/references/troubleshooting/#github-rate-limiting>
177
+ TRIVY_GITHUB_TOKEN=[token]
178
+
136
179
  ```
137
180
 
138
181
  For each project following files are created in the `output` folder:
@@ -152,7 +195,7 @@ For each project following files are created in the `output` folder:
152
195
  - `<project-name>-<project-version>-openvex.vex.json`
153
196
  - Aggregation of all vex statements available for the project.
154
197
 
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>`.
198
+ 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
199
 
157
200
  ### Azure DevOps Pipelines Integration
158
201
 
@@ -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 k=Object.create;var S=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var N=(t,e,o,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of E(e))!C.call(t,r)&&r!==o&&S(t,r,{get:()=>e[r],enumerable:!(m=A(e,r))||m.enumerable});return t};var b=(t,e,o)=>(o=t!=null?k(I(t)):{},N(e||!t||!t.__esModule?S(o,"default",{value:t,enumerable:!0}):o,t));var F=b(require("node:readline/promises")),x=require("node:process");var _=b(require("path"));var c=require("fs/promises");async function v(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 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"),D=["grype","trivy","ossindex"],g=l(t.workingDir,"vuln-scan-conf.json"),i=await v(g);if(!i)throw new Error(`Missing project configuration file '${g}'`);return{failOnNewVulnerabilities:!1,createSubDirsForProject:i.createSubDirsForProject??!0,mavenRepo:i.mavenRepo??e,vexUrls:i.vexUrls??[],vexDir:l(t.workingDir,i.vexDir)??o,outDir:l(t.workingDir,i.outDir)??m,cacheDir:l(t.workingDir,i.cacheDir)??r,scanners:i.scanners??D,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 _.default.isAbsolute(e)?e:(0,_.resolve)(t,e)}var h=require("path");var P=require("fs/promises"),$=require("crypto");(async()=>{let t=await y({workingDir:process.cwd()});console.info("## Add New VEX Statement ##");let e=F.default.createInterface({input:x.stdin,output:x.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 D=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 D)for(let s of t.projects)s.name===n.name&&s.version===n.version&&(yield s.purl)}()),i=(0,h.resolve)(t.vexDir,`${o}.json`),a=await v(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}:
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(),j={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
18
  ${JSON.stringify(j,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(j)):a={"@context":"https://openvex.dev/ns/v0.2.0","@id":`https://openvex.dev/docs/public/vex-${(0,$.randomUUID)()}`,author:"conterra",timestamp:w,last_updated:w,version:1,statements:[j]},await(0,P.writeFile)(i,JSON.stringify(a,null,2)),e.close()})();
@@ -18,6 +18,13 @@
18
18
  },
19
19
  "default": ["grype", "trivy", "ossindex"]
20
20
  },
21
+ "vexUrls": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "string"
25
+ },
26
+ "default": []
27
+ },
21
28
  "vexDir": {
22
29
  "type": "string",
23
30
  "default": "./input/vex"
@@ -67,7 +74,5 @@
67
74
  }
68
75
  }
69
76
  },
70
- "required": [
71
- "projects"
72
- ]
77
+ "required": ["projects"]
73
78
  }
package/dist/vuln-scan.js CHANGED
@@ -1,11 +1,11 @@
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 Dt=h((Ws,Et)=>{var Q=require("constants"),sn=process.cwd,Le=null,an=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Le||(Le=sn.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=cn;function cn(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(){}),an==="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 Ct=h((Us,jt)=>{var Mt=require("stream").Stream;jt.exports=ln;function ln(t){return{ReadStream:e,WriteStream:r};function e(i,n){if(!(this instanceof e))return new e(i,n);Mt.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);Mt.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((Hs,Tt)=>{"use strict";Tt.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 se=h((Qs,Ze)=>{var k=require("fs"),mn=Dt(),pn=Ct(),dn=It(),Pe=require("util"),T,Oe;typeof Symbol=="function"&&typeof Symbol.for=="function"?(T=Symbol.for("graceful-fs.queue"),Oe=Symbol.for("graceful-fs.previous")):(T="___graceful-fs.queue",Oe="___graceful-fs.previous");function yn(){}function Rt(t,e){Object.defineProperty(t,T,{get:function(){return e}})}var ee=yn;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[T]||(At=global[T]||[],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[T]),require("assert").equal(k[T].length,0)}));var At;global[T]||Rt(global,k[T]);Ze.exports=Ke(dn(k));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!k.__patched&&(Ze.exports=Ke(k),k.__patched=!0);function Ke(t){mn(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),M(y,v,g);function M(j,F,P,O){return e(j,F,function(b){b&&(b.code==="EMFILE"||b.code==="ENFILE")?oe([M,[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,M){return typeof g=="function"&&(M=g,g=null),j(y,v,g,M);function j(F,P,O,b,C){return i(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,C||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(y,v,g,M){return typeof g=="function"&&(M=g,g=null),j(y,v,g,M);function j(F,P,O,b,C){return o(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,C||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=u);function u(y,v,g,M){return typeof g=="function"&&(M=g,g=0),j(y,v,g,M);function j(F,P,O,b,C){return c(F,P,O,function(x){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,C||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 M=a.test(process.version)?function(P,O,b,C){return m(P,j(P,O,b,C))}:function(P,O,b,C){return m(P,O,j(P,O,b,C))};return M(y,v,g);function j(F,P,O,b){return function(C,x){C&&(C.code==="EMFILE"||C.code==="ENFILE")?oe([M,[F,P,O],C,b||Date.now(),Date.now()]):(x&&x.sort&&x.sort(),typeof O=="function"&&O.call(this,C,x))}}}if(process.version.substr(0,4)==="v0.8"){var p=pn(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,M){return typeof g=="function"&&(M=g,g=null),j(y,v,g,M);function j(F,P,O,b,C){return _i(F,P,O,function(x,Ms){x&&(x.code==="EMFILE"||x.code==="ENFILE")?oe([j,[F,P,O,b],x,C||Date.now(),Date.now()]):typeof b=="function"&&b.apply(this,arguments)})}}return t}function oe(t){ee("ENQUEUE",t[0].name,t[1]),k[T].push(t),Ye()}var ke;function Nt(){for(var t=Date.now(),e=0;e<k[T].length;++e)k[T][e].length>2&&(k[T][e][3]=t,k[T][e][4]=t);Ye()}function Ye(){if(clearTimeout(ke),ke=void 0,k[T].length!==0){var t=k[T].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[T].push(t)}ke===void 0&&(ke=setTimeout(Ye,0))}}});var R=h(U=>{"use strict";var _t=E().fromCallback,N=se(),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 N[t]=="function");Object.assign(U,N);hn.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((Ks,qt)=>{"use strict";var Sn=require("path");qt.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 Gt=h((Ys,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((Zs,Jt)=>{"use strict";var gn=E().fromPromise,{makeDir:vn,makeDirSync:tt}=Gt(),rt=gn(vn);Jt.exports={mkdirs:rt,mkdirsSync:tt,mkdirp:rt,mkdirpSync:tt,ensureDir:rt,ensureDirSync:tt}});var z=h((ea,Ut)=>{"use strict";var wn=E().fromPromise,Wt=R();function bn(t){return Wt.access(t).then(()=>!0).catch(()=>!1)}Ut.exports={pathExists:wn(bn),pathExistsSync:Wt.existsSync}});var it=h((ta,Ht)=>{"use strict";var ae=R(),xn=E().fromPromise;async function Ln(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 Pn(t,e,r){let i=ae.openSync(t,"r+");return ae.futimesSync(i,e,r),ae.closeSync(i)}Ht.exports={utimesMillis:xn(Ln),utimesMillisSync:Pn}});var te=h((ra,Yt)=>{"use strict";var ce=R(),D=require("path"),Qt=E().fromPromise;function kn(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 On(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 Fn(t,e,r,i){let{srcStat:n,destStat:o}=await kn(t,e,i);if(o){if(fe(n,o)){let s=D.basename(t),c=D.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 En(t,e,r,i){let{srcStat:n,destStat:o}=On(t,e,i);if(o){if(fe(n,o)){let s=D.basename(t),c=D.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=D.resolve(D.dirname(t)),o=D.resolve(D.dirname(r));if(o===n||o===D.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=D.resolve(D.dirname(t)),o=D.resolve(D.dirname(r));if(o===n||o===D.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=D.resolve(t).split(D.sep).filter(n=>n),i=D.resolve(e).split(D.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(Fn),checkPathsSync:En,checkParentPaths:Qt(zt),checkParentPathsSync:Kt,isSrcSubdir:nt,areIdentical:fe}});var ir=h((ia,rr)=>{"use strict";var I=R(),me=require("path"),{mkdirs:Dn}=$(),{pathExists:Mn}=z(),{utimesMillis:jn}=it(),pe=te();async function Cn(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 xt=Object.defineProperty;var Xi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames;var Bi=Object.getPrototypeOf,Ui=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))!Ui.call(t,n)&&n!==r&&xt(t,n,{get:()=>e[n],enumerable:!(i=Xi(e,n))||i.enumerable});return t};var ze=(t,e,r)=>(r=t!=null?_i(Bi(t)):{},Gi(e||!t||!t.__esModule?xt(r,"default",{value:t,enumerable:!0}):r,t));var D=h(rt=>{"use strict";rt.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})};rt.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((Us,Tt)=>{var Z=require("constants"),an=process.cwd,je=null,cn=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return je||(je=an.call(process)),je};try{process.cwd()}catch{}typeof process.chdir=="function"&&(it=process.chdir,process.chdir=function(t){je=null,it.call(process,t)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,it));var it;Tt.exports=ln;function ln(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=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(){}),cn==="win32"&&(t.rename=typeof t.rename!="function"?t.rename:function(a){function l(p,f,d){var S=Date.now(),v=0;a(p,f,function b(A){if(A&&(A.code==="EACCES"||A.code==="EPERM"||A.code==="EBUSY")&&Date.now()-S<6e4){setTimeout(function(){t.stat(f,function(x,$){x&&x.code==="ENOENT"?a(p,f,b):d(A)})},v),v<100&&(v+=10);return}d&&d(A)})}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,v,b){var A;if(b&&typeof b=="function"){var x=0;A=function($,X,z){if($&&$.code==="EAGAIN"&&x<10)return x++,a.call(t,p,f,d,S,v,A);b.apply(this,arguments)}}return a.call(t,p,f,d,S,v,A)}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 v=0;;)try{return a.call(t,l,p,f,d,S)}catch(b){if(b.code==="EAGAIN"&&v<10){v++;continue}throw b}}}(t.readSync);function e(a){a.lchmod=function(l,p,f){a.open(l,Z.O_WRONLY|Z.O_SYMLINK,p,function(d,S){if(d){f&&f(d);return}a.fchmod(S,p,function(v){a.close(S,function(b){f&&f(v||b)})})})},a.lchmodSync=function(l,p){var f=a.openSync(l,Z.O_WRONLY|Z.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){Z.hasOwnProperty("O_SYMLINK")&&a.futimes?(a.lutimes=function(l,p,f,d){a.open(l,Z.O_SYMLINK,function(S,v){if(S){d&&d(S);return}a.futimes(v,p,f,function(b){a.close(v,function(A){d&&d(b||A)})})})},a.lutimesSync=function(l,p,f){var d=a.openSync(l,Z.O_SYMLINK),S,v=!0;try{S=a.futimesSync(d,p,f),v=!1}finally{if(v)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,v){v&&(v.uid<0&&(v.uid+=4294967296),v.gid<0&&(v.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 At=h((Gs,It)=>{var Ct=require("stream").Stream;It.exports=un;function un(t){return{ReadStream:e,WriteStream:r};function e(i,n){if(!(this instanceof e))return new e(i,n);Ct.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);Ct.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 Nt=h((Js,Rt)=>{"use strict";Rt.exports=mn;var fn=Object.getPrototypeOf||function(t){return t.__proto__};function mn(t){if(t===null||typeof t!="object")return t;if(t instanceof Object)var e={__proto__:fn(t)};else var e=Object.create(null);return Object.getOwnPropertyNames(t).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}});var fe=h((Ws,st)=>{var F=require("fs"),pn=Mt(),dn=At(),yn=Nt(),Te=require("util"),I,Ce;typeof Symbol=="function"&&typeof Symbol.for=="function"?(I=Symbol.for("graceful-fs.queue"),Ce=Symbol.for("graceful-fs.previous")):(I="___graceful-fs.queue",Ce="___graceful-fs.previous");function hn(){}function _t(t,e){Object.defineProperty(t,I,{get:function(){return e}})}var oe=hn;Te.debuglog?oe=Te.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(oe=function(){var t=Te.format.apply(Te,arguments);t="GFS4: "+t.split(/\n/).join(`
3
+ GFS4: `),console.error(t)});F[I]||(qt=global[I]||[],_t(F,qt),F.close=function(t){function e(r,i){return t.call(F,r,function(n){n||Vt(),typeof i=="function"&&i.apply(this,arguments)})}return Object.defineProperty(e,Ce,{value:t}),e}(F.close),F.closeSync=function(t){function e(r){t.apply(F,arguments),Vt()}return Object.defineProperty(e,Ce,{value:t}),e}(F.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){oe(F[I]),require("assert").equal(F[I].length,0)}));var qt;global[I]||_t(global,F[I]);st.exports=nt(yn(F));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!F.__patched&&(st.exports=nt(F),F.__patched=!0);function nt(t){pn(t),t.gracefulify=nt,t.createReadStream=X,t.createWriteStream=z;var e=t.readFile;t.readFile=r;function r(y,w,g){return typeof w=="function"&&(g=w,w=null),T(y,w,g);function T(M,E,k,O){return e(M,E,function(L){L&&(L.code==="EMFILE"||L.code==="ENFILE")?ue([T,[M,E,k],L,O||Date.now(),Date.now()]):typeof k=="function"&&k.apply(this,arguments)})}}var i=t.writeFile;t.writeFile=n;function n(y,w,g,T){return typeof g=="function"&&(T=g,g=null),M(y,w,g,T);function M(E,k,O,L,C){return i(E,k,O,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?ue([M,[E,k,O,L],P,C||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var o=t.appendFile;o&&(t.appendFile=s);function s(y,w,g,T){return typeof g=="function"&&(T=g,g=null),M(y,w,g,T);function M(E,k,O,L,C){return o(E,k,O,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?ue([M,[E,k,O,L],P,C||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var c=t.copyFile;c&&(t.copyFile=u);function u(y,w,g,T){return typeof g=="function"&&(T=g,g=0),M(y,w,g,T);function M(E,k,O,L,C){return c(E,k,O,function(P){P&&(P.code==="EMFILE"||P.code==="ENFILE")?ue([M,[E,k,O,L],P,C||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}var m=t.readdir;t.readdir=l;var a=/^v[0-5]\./;function l(y,w,g){typeof w=="function"&&(g=w,w=null);var T=a.test(process.version)?function(k,O,L,C){return m(k,M(k,O,L,C))}:function(k,O,L,C){return m(k,O,M(k,O,L,C))};return T(y,w,g);function M(E,k,O,L){return function(C,P){C&&(C.code==="EMFILE"||C.code==="ENFILE")?ue([T,[E,k,O],C,L||Date.now(),Date.now()]):(P&&P.sort&&P.sort(),typeof O=="function"&&O.call(this,C,P))}}}if(process.version.substr(0,4)==="v0.8"){var p=dn(t);b=p.ReadStream,x=p.WriteStream}var f=t.ReadStream;f&&(b.prototype=Object.create(f.prototype),b.prototype.open=A);var d=t.WriteStream;d&&(x.prototype=Object.create(d.prototype),x.prototype.open=$),Object.defineProperty(t,"ReadStream",{get:function(){return b},set:function(y){b=y},enumerable:!0,configurable:!0}),Object.defineProperty(t,"WriteStream",{get:function(){return x},set:function(y){x=y},enumerable:!0,configurable:!0});var S=b;Object.defineProperty(t,"FileReadStream",{get:function(){return S},set:function(y){S=y},enumerable:!0,configurable:!0});var v=x;Object.defineProperty(t,"FileWriteStream",{get:function(){return v},set:function(y){v=y},enumerable:!0,configurable:!0});function b(y,w){return this instanceof b?(f.apply(this,arguments),this):b.apply(Object.create(b.prototype),arguments)}function A(){var y=this;le(y.path,y.flags,y.mode,function(w,g){w?(y.autoClose&&y.destroy(),y.emit("error",w)):(y.fd=g,y.emit("open",g),y.read())})}function x(y,w){return this instanceof x?(d.apply(this,arguments),this):x.apply(Object.create(x.prototype),arguments)}function $(){var y=this;le(y.path,y.flags,y.mode,function(w,g){w?(y.destroy(),y.emit("error",w)):(y.fd=g,y.emit("open",g))})}function X(y,w){return new t.ReadStream(y,w)}function z(y,w){return new t.WriteStream(y,w)}var ke=t.open;t.open=le;function le(y,w,g,T){return typeof g=="function"&&(T=g,g=null),M(y,w,g,T);function M(E,k,O,L,C){return ke(E,k,O,function(P,Es){P&&(P.code==="EMFILE"||P.code==="ENFILE")?ue([M,[E,k,O,L],P,C||Date.now(),Date.now()]):typeof L=="function"&&L.apply(this,arguments)})}}return t}function ue(t){oe("ENQUEUE",t[0].name,t[1]),F[I].push(t),ot()}var Me;function Vt(){for(var t=Date.now(),e=0;e<F[I].length;++e)F[I][e].length>2&&(F[I][e][3]=t,F[I][e][4]=t);ot()}function ot(){if(clearTimeout(Me),Me=void 0,F[I].length!==0){var t=F[I].shift(),e=t[0],r=t[1],i=t[2],n=t[3],o=t[4];if(n===void 0)oe("RETRY",e.name,r),e.apply(null,r);else if(Date.now()-n>=6e4){oe("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?(oe("RETRY",e.name,r),e.apply(null,r.concat([n]))):F[I].push(t)}Me===void 0&&(Me=setTimeout(ot,0))}}});var q=h(Q=>{"use strict";var Xt=D().fromCallback,N=fe(),Sn=["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(Q,N);Sn.forEach(t=>{Q[t]=Xt(N[t])});Q.exists=function(t,e){return typeof e=="function"?N.exists(t,e):new Promise(r=>N.exists(t,r))};Q.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})})})};Q.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})})})};Q.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})})})};Q.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"?Q.realpath.native=Xt(N.realpath.native):process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")});var Bt=h((Qs,$t)=>{"use strict";var gn=require("path");$t.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(gn.parse(e).root,""))){let i=new Error(`Path contains invalid characters: ${e}`);throw i.code="EINVAL",i}}});var Wt=h((Ks,at)=>{"use strict";var Ut=q(),{checkPath:Gt}=Bt(),Jt=t=>{let e={mode:511};return typeof t=="number"?t:{...e,...t}.mode};at.exports.makeDir=async(t,e)=>(Gt(t),Ut.mkdir(t,{mode:Jt(e),recursive:!0}));at.exports.makeDirSync=(t,e)=>(Gt(t),Ut.mkdirSync(t,{mode:Jt(e),recursive:!0}))});var U=h((zs,Ht)=>{"use strict";var vn=D().fromPromise,{makeDir:wn,makeDirSync:ct}=Wt(),lt=vn(wn);Ht.exports={mkdirs:lt,mkdirsSync:ct,mkdirp:lt,mkdirpSync:ct,ensureDir:lt,ensureDirSync:ct}});var ee=h((Ys,Kt)=>{"use strict";var bn=D().fromPromise,Qt=q();function xn(t){return Qt.access(t).then(()=>!0).catch(()=>!1)}Kt.exports={pathExists:bn(xn),pathExistsSync:Qt.existsSync}});var ut=h((Zs,zt)=>{"use strict";var me=q(),Ln=D().fromPromise;async function Pn(t,e,r){let i=await me.open(t,"r+"),n=null;try{await me.futimes(i,e,r)}finally{try{await me.close(i)}catch(o){n=o}}if(n)throw n}function kn(t,e,r){let i=me.openSync(t,"r+");return me.futimesSync(i,e,r),me.closeSync(i)}zt.exports={utimesMillis:Ln(Pn),utimesMillisSync:kn}});var se=h((ea,tr)=>{"use strict";var pe=q(),j=require("path"),Yt=D().fromPromise;function Fn(t,e,r){let i=r.dereference?n=>pe.stat(n,{bigint:!0}):n=>pe.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 On(t,e,r){let i,n=r.dereference?s=>pe.statSync(s,{bigint:!0}):s=>pe.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 En(t,e,r,i){let{srcStat:n,destStat:o}=await Fn(t,e,i);if(o){if(Se(n,o)){let s=j.basename(t),c=j.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()&&ft(t,e))throw new Error(Ie(t,e,r));return{srcStat:n,destStat:o}}function Dn(t,e,r,i){let{srcStat:n,destStat:o}=On(t,e,i);if(o){if(Se(n,o)){let s=j.basename(t),c=j.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()&&ft(t,e))throw new Error(Ie(t,e,r));return{srcStat:n,destStat:o}}async function Zt(t,e,r,i){let n=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===n||o===j.parse(o).root)return;let s;try{s=await pe.stat(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(Se(e,s))throw new Error(Ie(t,r,i));return Zt(t,e,o,i)}function er(t,e,r,i){let n=j.resolve(j.dirname(t)),o=j.resolve(j.dirname(r));if(o===n||o===j.parse(o).root)return;let s;try{s=pe.statSync(o,{bigint:!0})}catch(c){if(c.code==="ENOENT")return;throw c}if(Se(e,s))throw new Error(Ie(t,r,i));return er(t,e,o,i)}function Se(t,e){return e.ino&&e.dev&&e.ino===t.ino&&e.dev===t.dev}function ft(t,e){let r=j.resolve(t).split(j.sep).filter(n=>n),i=j.resolve(e).split(j.sep).filter(n=>n);return r.every((n,o)=>i[o]===n)}function Ie(t,e,r){return`Cannot ${r} '${t}' to a subdirectory of itself, '${e}'.`}tr.exports={checkPaths:Yt(En),checkPathsSync:Dn,checkParentPaths:Yt(Zt),checkParentPathsSync:er,isSrcSubdir:ft,areIdentical:Se}});var sr=h((ta,or)=>{"use strict";var R=q(),ge=require("path"),{mkdirs:jn}=U(),{pathExists:Tn}=ee(),{utimesMillis:Mn}=ut(),ve=se();async function Cn(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 Dn(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 Nn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Tn(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 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){In(t.mode)&&await An(r,t.mode);let n=await I.stat(e);await jn(r,n.atime,n.mtime)}return I.chmod(r,t.mode)}function In(t){return(t&128)===0}function An(t,e){return I.chmod(t,e|128)}async function Nn(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 Rn(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=Cn});var cr=h((na,ar)=>{"use strict";var _=se(),de=require("path"),_n=$().mkdirsSync,qn=it().utimesMillisSync,ye=te();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;
5
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0001");let{srcStat:i,destStat:n}=await ve.checkPaths(t,e,"copy",r);if(await ve.checkParentPaths(t,i,e,"copy"),!await ir(t,e,r))return;let s=ge.dirname(e);await Tn(s)||await jn(s),await nr(n,t,e,r)}async function ir(t,e,r){return r.filter?r.filter(t,e):!0}async function nr(t,e,r,i){let o=await(i.dereference?R.stat:R.lstat)(e);if(o.isDirectory())return Nn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return In(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}`)}async function In(t,e,r,i,n){if(!e)return rr(t,r,i,n);if(n.overwrite)return await R.unlink(i),rr(t,r,i,n);if(n.errorOnExist)throw new Error(`'${i}' already exists`)}async function rr(t,e,r,i){if(await R.copyFile(e,r),i.preserveTimestamps){An(t.mode)&&await Rn(r,t.mode);let n=await R.stat(e);await Mn(r,n.atime,n.mtime)}return R.chmod(r,t.mode)}function An(t){return(t&128)===0}function Rn(t,e){return R.chmod(t,e|128)}async function Nn(t,e,r,i,n){e||await R.mkdir(i);let o=await R.readdir(r);await Promise.all(o.map(async s=>{let c=ge.join(r,s),u=ge.join(i,s);if(!await ir(c,u,n))return;let{destStat:a}=await ve.checkPaths(c,u,"copy",n);return nr(a,c,u,n)})),e||await R.chmod(i,t.mode)}async function qn(t,e,r,i){let n=await R.readlink(e);if(i.dereference&&(n=ge.resolve(process.cwd(),n)),!t)return R.symlink(n,r);let o=null;try{o=await R.readlink(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return R.symlink(n,r);throw s}if(i.dereference&&(o=ge.resolve(process.cwd(),o)),ve.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(ve.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return await R.unlink(r),R.symlink(n,r)}or.exports=Cn});var fr=h((ra,ur)=>{"use strict";var V=fe(),we=require("path"),Vn=U().mkdirsSync,_n=ut().utimesMillisSync,be=se();function Xn(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)||_n(o),nr(n,t,e,r)}function nr(t,e,r,i){let o=(i.dereference?_.statSync:_.lstatSync)(e);if(o.isDirectory())return Un(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Xn(o,t,e,r,i);if(o.isSymbolicLink())return zn(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 Xn(t,e,r,i,n){return e?$n(t,r,i,n):or(t,r,i,n)}function $n(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&&Bn(t.mode,e,r),ot(r,t.mode)}function Bn(t,e,r){return Gn(t)&&Jn(r,t),Wn(e,r)}function Gn(t){return(t&128)===0}function Jn(t,e){return ot(t,e|128)}function ot(t,e){return _.chmodSync(t,e)}function Wn(t,e){let r=_.statSync(t);return qn(e,r.atime,r.mtime)}function Un(t,e,r,i,n){return e?sr(r,i,n):Hn(t.mode,r,i,n)}function Hn(t,e,r,i){return _.mkdirSync(r),sr(e,r,i),ot(r,t)}function sr(t,e,r){_.readdirSync(t).forEach(i=>Qn(i,t,e,r))}function Qn(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 zn(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 Kn(n,r)}else return _.symlinkSync(n,r)}function Kn(t,e){return _.unlinkSync(e),_.symlinkSync(t,e)}ar.exports=Vn});var Ee=h((oa,lr)=>{"use strict";var Yn=E().fromPromise;lr.exports={copy:Yn(ir()),copySync:cr()}});var he=h((sa,fr)=>{"use strict";var ur=se(),Zn=E().fromCallback;function eo(t,e){ur.rm(t,{recursive:!0,force:!0},e)}function to(t){ur.rmSync(t,{recursive:!0,force:!0})}fr.exports={remove:Zn(eo),removeSync:to}});var vr=h((aa,gr)=>{"use strict";var ro=E().fromPromise,dr=R(),yr=require("path"),hr=$(),Sr=he(),mr=ro(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((ca,xr)=>{"use strict";var io=E().fromPromise,wr=require("path"),H=R(),br=$();async function no(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 oo(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:io(no),createFileSync:oo}});var Er=h((la,Fr)=>{"use strict";var so=E().fromPromise,Pr=require("path"),K=R(),kr=$(),{pathExists:ao}=z(),{areIdentical:Or}=te();async function co(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 ao(n)||await kr.mkdirs(n),await K.link(t,e)}function lo(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:so(co),createLinkSync:lo}});var Mr=h((ua,Dr)=>{"use strict";var Y=require("path"),Se=R(),{pathExists:uo}=z(),fo=E().fromPromise;async function mo(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 uo(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 po(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)}}Dr.exports={symlinkPaths:fo(mo),symlinkPathsSync:po}});var Tr=h((fa,Cr)=>{"use strict";var jr=R(),yo=E().fromPromise;async function ho(t,e){if(e)return e;let r;try{r=await jr.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function So(t,e){if(e)return e;let r;try{r=jr.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}Cr.exports={symlinkType:yo(ho),symlinkTypeSync:So}});var Rr=h((ma,Nr)=>{"use strict";var go=E().fromPromise,Ir=require("path"),G=R(),{mkdirs:vo,mkdirsSync:wo}=$(),{symlinkPaths:bo,symlinkPathsSync:xo}=Mr(),{symlinkType:Lo,symlinkTypeSync:Po}=Tr(),{pathExists:ko}=z(),{areIdentical:Ar}=te();async function Oo(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 bo(t,e);t=n.toDst;let o=await Lo(n.toCwd,r),s=Ir.dirname(e);return await ko(s)||await vo(s),G.symlink(t,e,o)}function Fo(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=xo(t,e);t=n.toDst,r=Po(n.toCwd,r);let o=Ir.dirname(e);return G.existsSync(o)||wo(o),G.symlinkSync(t,e,r)}Nr.exports={createSymlink:go(Oo),createSymlinkSync:Fo}});var Jr=h((pa,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 De=h((da,Wr)=>{function Eo(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 Do(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Wr.exports={stringify:Eo,stripBom:Do}});var zr=h((ya,Qr)=>{var le;try{le=se()}catch{le=require("fs")}var Me=E(),{stringify:Ur,stripBom:Hr}=De();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 Me.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 jo=Me.fromPromise(Mo);function Co(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 Me.fromCallback(i.writeFile)(t,n,r)}var Io=Me.fromPromise(To);function Ao(t,e,r={}){let i=r.fs||le,n=Ur(e,r);return i.writeFileSync(t,n,r)}var No={readFile:jo,readFileSync:Co,writeFile:Io,writeFileSync:Ao};Qr.exports=No});var Yr=h((ha,Kr)=>{"use strict";var je=zr();Kr.exports={readJson:je.readFile,readJsonSync:je.readFileSync,writeJson:je.writeFile,writeJsonSync:je.writeFileSync}});var Ce=h((Sa,ti)=>{"use strict";var Ro=E().fromPromise,st=R(),Zr=require("path"),ei=$(),_o=z().pathExists;async function qo(t,e,r="utf-8"){let i=Zr.dirname(t);return await _o(i)||await ei.mkdirs(i),st.writeFile(t,e,r)}function Vo(t,...e){let r=Zr.dirname(t);st.existsSync(r)||ei.mkdirsSync(r),st.writeFileSync(t,...e)}ti.exports={outputFile:Ro(qo),outputFileSync:Vo}});var ii=h((ga,ri)=>{"use strict";var{stringify:Xo}=De(),{outputFile:$o}=Ce();async function Bo(t,e,r={}){let i=Xo(e,r);await $o(t,i,r)}ri.exports=Bo});var oi=h((va,ni)=>{"use strict";var{stringify:Go}=De(),{outputFileSync:Jo}=Ce();function Wo(t,e,r){let i=Go(e,r);Jo(t,i,r)}ni.exports=Wo});var ai=h((wa,si)=>{"use strict";var Uo=E().fromPromise,q=Yr();q.outputJson=Uo(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((ba,fi)=>{"use strict";var Ho=R(),ci=require("path"),{copy:Qo}=Ee(),{remove:ui}=he(),{mkdirp:zo}=$(),{pathExists:Ko}=z(),li=te();async function Yo(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 zo(s),Zo(t,e,i,o)}async function Zo(t,e,r,i){if(!i){if(r)await ui(e);else if(await Ko(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}),ui(t)}fi.exports=Yo});var Si=h((xa,hi)=>{"use strict";var di=se(),ct=require("path"),ts=Ee().copySync,yi=he().removeSync,rs=$().mkdirpSync,pi=te();function is(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"),ns(e)||rs(ct.dirname(e)),os(t,e,i,o)}function ns(t){let e=ct.dirname(t);return ct.parse(e).root===e}function os(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 ss(t,e,r)}}function ss(t,e,r){return ts(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),yi(t)}hi.exports=is});var vi=h((La,gi)=>{"use strict";var as=E().fromPromise;gi.exports={move:as(mi()),moveSync:Si()}});var bi=h((Pa,wi)=>{"use strict";wi.exports={...R(),...Ee(),...vr(),...Jr(),...ai(),...$(),...vi(),...Ce(),...z(),...he()}});var xi=h(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.EXTENSIONS_LANGUAGES=void 0;Te.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=cs;function cs(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 ls=require("path"),Li=bi(),us=xi(),fs=ge(),ut=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();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=ls.extname(m.physicalLocation.artifactLocation.uri).replace(".",""),l=us.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 ms=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,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={})}};Ae.SarifResultBuilder=ft});var Oi=h(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.SarifRuleBuilder=void 0;var ps=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,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}};Ne.SarifRuleBuilder=mt});var Fi=h(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.SarifRunBuilder=void 0;var ds=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,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}};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 ys=Pi();Object.defineProperty(J,"SarifBuilder",{enumerable:!0,get:function(){return ys.SarifBuilder}});var hs=ki();Object.defineProperty(J,"SarifResultBuilder",{enumerable:!0,get:function(){return hs.SarifResultBuilder}});var Ss=Oi();Object.defineProperty(J,"SarifRuleBuilder",{enumerable:!0,get:function(){return Ss.SarifRuleBuilder}});var gs=Fi();Object.defineProperty(J,"SarifRunBuilder",{enumerable:!0,get:function(){return gs.SarifRunBuilder}})});var Mi=h((Ca,Di)=>{"use strict";var vs=/["'&<>]/;Di.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 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(/\?.*$/,"")));on(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}`),tn(i,a)}async function Yi(t){return(await B(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 Z=vt(Ei()),ji=vt(Mi());function Ci(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=xs(o.severity),c=o.id,u=bs(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:Ls(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 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?`
7
+ see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:i,destStat:n}=be.checkPathsSync(t,e,"copy",r);if(be.checkParentPathsSync(t,i,e,"copy"),r.filter&&!r.filter(t,e))return;let o=we.dirname(e);return V.existsSync(o)||Vn(o),ar(n,t,e,r)}function ar(t,e,r,i){let o=(i.dereference?V.statSync:V.lstatSync)(e);if(o.isDirectory())return Hn(o,t,e,r,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return $n(o,t,e,r,i);if(o.isSymbolicLink())return zn(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?Bn(t,r,i,n):cr(t,r,i,n)}function Bn(t,e,r,i){if(i.overwrite)return V.unlinkSync(r),cr(t,e,r,i);if(i.errorOnExist)throw new Error(`'${r}' already exists`)}function cr(t,e,r,i){return V.copyFileSync(e,r),i.preserveTimestamps&&Un(t.mode,e,r),mt(r,t.mode)}function Un(t,e,r){return Gn(t)&&Jn(r,t),Wn(e,r)}function Gn(t){return(t&128)===0}function Jn(t,e){return mt(t,e|128)}function mt(t,e){return V.chmodSync(t,e)}function Wn(t,e){let r=V.statSync(t);return _n(e,r.atime,r.mtime)}function Hn(t,e,r,i,n){return e?lr(r,i,n):Qn(t.mode,r,i,n)}function Qn(t,e,r,i){return V.mkdirSync(r),lr(e,r,i),mt(r,t)}function lr(t,e,r){V.readdirSync(t).forEach(i=>Kn(i,t,e,r))}function Kn(t,e,r,i){let n=we.join(e,t),o=we.join(r,t);if(i.filter&&!i.filter(n,o))return;let{destStat:s}=be.checkPathsSync(n,o,"copy",i);return ar(s,n,o,i)}function zn(t,e,r,i){let n=V.readlinkSync(e);if(i.dereference&&(n=we.resolve(process.cwd(),n)),t){let o;try{o=V.readlinkSync(r)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return V.symlinkSync(n,r);throw s}if(i.dereference&&(o=we.resolve(process.cwd(),o)),be.isSrcSubdir(n,o))throw new Error(`Cannot copy '${n}' to a subdirectory of itself, '${o}'.`);if(be.isSrcSubdir(o,n))throw new Error(`Cannot overwrite '${o}' with '${n}'.`);return Yn(n,r)}else return V.symlinkSync(n,r)}function Yn(t,e){return V.unlinkSync(e),V.symlinkSync(t,e)}ur.exports=Xn});var Ae=h((ia,mr)=>{"use strict";var Zn=D().fromPromise;mr.exports={copy:Zn(sr()),copySync:fr()}});var xe=h((na,dr)=>{"use strict";var pr=fe(),eo=D().fromCallback;function to(t,e){pr.rm(t,{recursive:!0,force:!0},e)}function ro(t){pr.rmSync(t,{recursive:!0,force:!0})}dr.exports={remove:eo(to),removeSync:ro}});var xr=h((oa,br)=>{"use strict";var io=D().fromPromise,Sr=q(),gr=require("path"),vr=U(),wr=xe(),yr=io(async function(e){let r;try{r=await Sr.readdir(e)}catch{return vr.mkdirs(e)}return Promise.all(r.map(i=>wr.remove(gr.join(e,i))))});function hr(t){let e;try{e=Sr.readdirSync(t)}catch{return vr.mkdirsSync(t)}e.forEach(r=>{r=gr.join(t,r),wr.removeSync(r)})}br.exports={emptyDirSync:hr,emptydirSync:hr,emptyDir:yr,emptydir:yr}});var Fr=h((sa,kr)=>{"use strict";var no=D().fromPromise,Lr=require("path"),K=q(),Pr=U();async function oo(t){let e;try{e=await K.stat(t)}catch{}if(e&&e.isFile())return;let r=Lr.dirname(t),i=null;try{i=await K.stat(r)}catch(n){if(n.code==="ENOENT"){await Pr.mkdirs(r),await K.writeFile(t,"");return}else throw n}i.isDirectory()?await K.writeFile(t,""):await K.readdir(r)}function so(t){let e;try{e=K.statSync(t)}catch{}if(e&&e.isFile())return;let r=Lr.dirname(t);try{K.statSync(r).isDirectory()||K.readdirSync(r)}catch(i){if(i&&i.code==="ENOENT")Pr.mkdirsSync(r);else throw i}K.writeFileSync(t,"")}kr.exports={createFile:no(oo),createFileSync:so}});var Tr=h((aa,jr)=>{"use strict";var ao=D().fromPromise,Or=require("path"),te=q(),Er=U(),{pathExists:co}=ee(),{areIdentical:Dr}=se();async function lo(t,e){let r;try{r=await te.lstat(e)}catch{}let i;try{i=await te.lstat(t)}catch(s){throw s.message=s.message.replace("lstat","ensureLink"),s}if(r&&Dr(i,r))return;let n=Or.dirname(e);await co(n)||await Er.mkdirs(n),await te.link(t,e)}function uo(t,e){let r;try{r=te.lstatSync(e)}catch{}try{let o=te.lstatSync(t);if(r&&Dr(o,r))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let i=Or.dirname(e);return te.existsSync(i)||Er.mkdirsSync(i),te.linkSync(t,e)}jr.exports={createLink:ao(lo),createLinkSync:uo}});var Cr=h((ca,Mr)=>{"use strict";var re=require("path"),Le=q(),{pathExists:fo}=ee(),mo=D().fromPromise;async function po(t,e){if(re.isAbsolute(t)){try{await Le.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:t}}let r=re.dirname(e),i=re.join(r,t);if(await fo(i))return{toCwd:i,toDst:t};try{await Le.lstat(t)}catch(o){throw o.message=o.message.replace("lstat","ensureSymlink"),o}return{toCwd:t,toDst:re.relative(r,t)}}function yo(t,e){if(re.isAbsolute(t)){if(!Le.existsSync(t))throw new Error("absolute srcpath does not exist");return{toCwd:t,toDst:t}}let r=re.dirname(e),i=re.join(r,t);if(Le.existsSync(i))return{toCwd:i,toDst:t};if(!Le.existsSync(t))throw new Error("relative srcpath does not exist");return{toCwd:t,toDst:re.relative(r,t)}}Mr.exports={symlinkPaths:mo(po),symlinkPathsSync:yo}});var Rr=h((la,Ar)=>{"use strict";var Ir=q(),ho=D().fromPromise;async function So(t,e){if(e)return e;let r;try{r=await Ir.lstat(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function go(t,e){if(e)return e;let r;try{r=Ir.lstatSync(t)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}Ar.exports={symlinkType:ho(So),symlinkTypeSync:go}});var _r=h((ua,Vr)=>{"use strict";var vo=D().fromPromise,Nr=require("path"),J=q(),{mkdirs:wo,mkdirsSync:bo}=U(),{symlinkPaths:xo,symlinkPathsSync:Lo}=Cr(),{symlinkType:Po,symlinkTypeSync:ko}=Rr(),{pathExists:Fo}=ee(),{areIdentical:qr}=se();async function Oo(t,e,r){let i;try{i=await J.lstat(e)}catch{}if(i&&i.isSymbolicLink()){let[c,u]=await Promise.all([J.stat(t),J.stat(e)]);if(qr(c,u))return}let n=await xo(t,e);t=n.toDst;let o=await Po(n.toCwd,r),s=Nr.dirname(e);return await Fo(s)||await wo(s),J.symlink(t,e,o)}function Eo(t,e,r){let i;try{i=J.lstatSync(e)}catch{}if(i&&i.isSymbolicLink()){let c=J.statSync(t),u=J.statSync(e);if(qr(c,u))return}let n=Lo(t,e);t=n.toDst,r=ko(n.toCwd,r);let o=Nr.dirname(e);return J.existsSync(o)||bo(o),J.symlinkSync(t,e,r)}Vr.exports={createSymlink:vo(Oo),createSymlinkSync:Eo}});var Hr=h((fa,Wr)=>{"use strict";var{createFile:Xr,createFileSync:$r}=Fr(),{createLink:Br,createLinkSync:Ur}=Tr(),{createSymlink:Gr,createSymlinkSync:Jr}=_r();Wr.exports={createFile:Xr,createFileSync:$r,ensureFile:Xr,ensureFileSync:$r,createLink:Br,createLinkSync:Ur,ensureLink:Br,ensureLinkSync:Ur,createSymlink:Gr,createSymlinkSync:Jr,ensureSymlink:Gr,ensureSymlinkSync:Jr}});var Re=h((ma,Qr)=>{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 jo(t){return Buffer.isBuffer(t)&&(t=t.toString("utf8")),t.replace(/^\uFEFF/,"")}Qr.exports={stringify:Do,stripBom:jo}});var Zr=h((pa,Yr)=>{var de;try{de=fe()}catch{de=require("fs")}var Ne=D(),{stringify:Kr,stripBom:zr}=Re();async function To(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||de,i="throws"in e?e.throws:!0,n=await Ne.fromCallback(r.readFile)(t,e);n=zr(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=Ne.fromPromise(To);function Co(t,e={}){typeof e=="string"&&(e={encoding:e});let r=e.fs||de,i="throws"in e?e.throws:!0;try{let n=r.readFileSync(t,e);return n=zr(n),JSON.parse(n,e.reviver)}catch(n){if(i)throw n.message=`${t}: ${n.message}`,n;return null}}async function Io(t,e,r={}){let i=r.fs||de,n=Kr(e,r);await Ne.fromCallback(i.writeFile)(t,n,r)}var Ao=Ne.fromPromise(Io);function Ro(t,e,r={}){let i=r.fs||de,n=Kr(e,r);return i.writeFileSync(t,n,r)}var No={readFile:Mo,readFileSync:Co,writeFile:Ao,writeFileSync:Ro};Yr.exports=No});var ti=h((da,ei)=>{"use strict";var qe=Zr();ei.exports={readJson:qe.readFile,readJsonSync:qe.readFileSync,writeJson:qe.writeFile,writeJsonSync:qe.writeFileSync}});var Ve=h((ya,ni)=>{"use strict";var qo=D().fromPromise,pt=q(),ri=require("path"),ii=U(),Vo=ee().pathExists;async function _o(t,e,r="utf-8"){let i=ri.dirname(t);return await Vo(i)||await ii.mkdirs(i),pt.writeFile(t,e,r)}function Xo(t,...e){let r=ri.dirname(t);pt.existsSync(r)||ii.mkdirsSync(r),pt.writeFileSync(t,...e)}ni.exports={outputFile:qo(_o),outputFileSync:Xo}});var si=h((ha,oi)=>{"use strict";var{stringify:$o}=Re(),{outputFile:Bo}=Ve();async function Uo(t,e,r={}){let i=$o(e,r);await Bo(t,i,r)}oi.exports=Uo});var ci=h((Sa,ai)=>{"use strict";var{stringify:Go}=Re(),{outputFileSync:Jo}=Ve();function Wo(t,e,r){let i=Go(e,r);Jo(t,i,r)}ai.exports=Wo});var ui=h((ga,li)=>{"use strict";var Ho=D().fromPromise,_=ti();_.outputJson=Ho(si());_.outputJsonSync=ci();_.outputJSON=_.outputJson;_.outputJSONSync=_.outputJsonSync;_.writeJSON=_.writeJson;_.writeJSONSync=_.writeJsonSync;_.readJSON=_.readJson;_.readJSONSync=_.readJsonSync;li.exports=_});var yi=h((va,di)=>{"use strict";var Qo=q(),fi=require("path"),{copy:Ko}=Ae(),{remove:pi}=xe(),{mkdirp:zo}=U(),{pathExists:Yo}=ee(),mi=se();async function Zo(t,e,r={}){let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=await mi.checkPaths(t,e,"move",r);await mi.checkParentPaths(t,n,e,"move");let s=fi.dirname(e);return fi.parse(s).root!==s&&await zo(s),es(t,e,i,o)}async function es(t,e,r,i){if(!i){if(r)await pi(e);else if(await Yo(e))throw new Error("dest already exists.")}try{await Qo.rename(t,e)}catch(n){if(n.code!=="EXDEV")throw n;await ts(t,e,r)}}async function ts(t,e,r){return await Ko(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),pi(t)}di.exports=Zo});var wi=h((wa,vi)=>{"use strict";var Si=fe(),yt=require("path"),rs=Ae().copySync,gi=xe().removeSync,is=U().mkdirpSync,hi=se();function ns(t,e,r){r=r||{};let i=r.overwrite||r.clobber||!1,{srcStat:n,isChangingCase:o=!1}=hi.checkPathsSync(t,e,"move",r);return hi.checkParentPathsSync(t,n,e,"move"),os(e)||is(yt.dirname(e)),ss(t,e,i,o)}function os(t){let e=yt.dirname(t);return yt.parse(e).root===e}function ss(t,e,r,i){if(i)return dt(t,e,r);if(r)return gi(e),dt(t,e,r);if(Si.existsSync(e))throw new Error("dest already exists.");return dt(t,e,r)}function dt(t,e,r){try{Si.renameSync(t,e)}catch(i){if(i.code!=="EXDEV")throw i;return as(t,e,r)}}function as(t,e,r){return rs(t,e,{overwrite:r,errorOnExist:!0,preserveTimestamps:!0}),gi(t)}vi.exports=ns});var xi=h((ba,bi)=>{"use strict";var cs=D().fromPromise;bi.exports={move:cs(yi()),moveSync:wi()}});var Pi=h((xa,Li)=>{"use strict";Li.exports={...q(),...Ae(),...xr(),...Hr(),...ui(),...U(),...xi(),...Ve(),...ee(),...xe()}});var ki=h(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.EXTENSIONS_LANGUAGES=void 0;_e.EXTENSIONS_LANGUAGES={1:"Groff",2:"Groff",3:"Groff",4:"Groff",5:"Groff",6:"Groff",7:"Groff",8:"Groff",9:"Groff",abap:"ABAP",asc:"Public Key",ash:"AGS Script",ampl:"AMPL",mod:"XML",g4:"ANTLR",apib:"API Blueprint",apl:"APL",dyalog:"APL",asp:"ASP",asax:"ASP",ascx:"ASP",ashx:"ASP",asmx:"ASP",aspx:"ASP",axd:"ASP",dats:"ATS",hats:"ATS",sats:"ATS",as:"ActionScript",adb:"Ada",ada:"Ada",ads:"Ada",agda:"Agda",als:"Alloy",apacheconf:"ApacheConf",vhost:"Nginx",cls:"Visual Basic",applescript:"AppleScript",scpt:"AppleScript",arc:"Arc",ino:"Arduino",asciidoc:"AsciiDoc",adoc:"AsciiDoc",aj:"AspectJ",asm:"Assembly",a51:"Assembly",inc:"SourcePawn",nasm:"Assembly",aug:"Augeas",ahk:"AutoHotkey",ahkl:"AutoHotkey",au3:"AutoIt",awk:"Awk",auk:"Awk",gawk:"Awk",mawk:"Awk",nawk:"Awk",bat:"Batchfile",cmd:"Batchfile",befunge:"Befunge",bison:"Bison",bb:"BlitzBasic",decls:"BlitzBasic",bmx:"BlitzMax",bsv:"Bluespec",boo:"Boo",b:"Limbo",bf:"HyPhy",brs:"Brightscript",bro:"Bro",c:"C",cats:"C",h:"Objective-C",idc:"C",w:"C",cs:"Smalltalk",cake:"CoffeeScript",cshtml:"C#",csx:"C#",cpp:"C++","c++":"C++",cc:"C++",cp:"Component Pascal",cxx:"C++","h++":"C++",hh:"Hack",hpp:"C++",hxx:"C++",inl:"C++",ipp:"C++",tcc:"C++",tpp:"C++","c-objdump":"C-ObjDump",chs:"C2hs Haskell",clp:"CLIPS",cmake:"CMake","cmake.in":"CMake",cob:"COBOL",cbl:"COBOL",ccp:"COBOL",cobol:"COBOL",cpy:"COBOL",css:"CSS",csv:"CSV",capnp:"Cap'n Proto",mss:"CartoCSS",ceylon:"Ceylon",chpl:"Chapel",ch:"xBase",ck:"ChucK",cirru:"Cirru",clw:"Clarion",icl:"Clean",dcl:"Clean",click:"Click",clj:"Clojure",boot:"Clojure",cl2:"Clojure",cljc:"Clojure",cljs:"Clojure","cljs.hl":"Clojure",cljscm:"Clojure",cljx:"Clojure",hic:"Clojure",coffee:"CoffeeScript",_coffee:"CoffeeScript",cjsx:"CoffeeScript",cson:"CoffeeScript",iced:"CoffeeScript",cfm:"ColdFusion",cfml:"ColdFusion",cfc:"ColdFusion CFC",lisp:"NewLisp",asd:"Common Lisp",cl:"OpenCL",l:"PicoLisp",lsp:"NewLisp",ny:"Common Lisp",podsl:"Common Lisp",sexp:"Common Lisp",cps:"Component Pascal",coq:"Coq",v:"Verilog",cppobjdump:"Cpp-ObjDump","c++-objdump":"Cpp-ObjDump","c++objdump":"Cpp-ObjDump","cpp-objdump":"Cpp-ObjDump","cxx-objdump":"Cpp-ObjDump",creole:"Creole",cr:"Crystal",feature:"Cucumber",cu:"Cuda",cuh:"Cuda",cy:"Cycript",pyx:"Cython",pxd:"Cython",pxi:"Cython",d:"Makefile",di:"D","d-objdump":"D-ObjDump",com:"DIGITAL Command Language",dm:"DM",zone:"DNS Zone",arpa:"DNS Zone",darcspatch:"Darcs Patch",dpatch:"Darcs Patch",dart:"Dart",diff:"Diff",patch:"Diff",dockerfile:"Dockerfile",djs:"Dogescript",dylan:"Dylan",dyl:"Dylan",intr:"Dylan",lid:"Dylan",E:"E",ecl:"ECLiPSe",eclxml:"ECL",sch:"KiCad",brd:"KiCad",epj:"Ecere Projects",e:"Eiffel",ex:"Elixir",exs:"Elixir",elm:"Elm",el:"Emacs Lisp",emacs:"Emacs Lisp","emacs.desktop":"Emacs Lisp",em:"EmberScript",emberscript:"EmberScript",erl:"Erlang",es:"JavaScript",escript:"Erlang",hrl:"Erlang",xrl:"Erlang",yrl:"Erlang",fs:"GLSL",fsi:"F#",fsx:"F#",fx:"HLSL",flux:"FLUX",f90:"FORTRAN",f:"Forth",f03:"FORTRAN",f08:"FORTRAN",f77:"FORTRAN",f95:"FORTRAN",for:"Forth",fpp:"FORTRAN",factor:"Factor",fy:"Fancy",fancypack:"Fancy",fan:"Fantom","eam.fs":"Formatted",fth:"Forth","4th":"Forth",forth:"Forth",fr:"Text",frt:"Forth",ftl:"FreeMarker",g:"GAP",gco:"G-code",gcode:"G-code",gms:"GAMS",gap:"GAP",gd:"GDScript",gi:"GAP",tst:"Scilab",s:"GAS",ms:"MAXScript",glsl:"GLSL",fp:"GLSL",frag:"JavaScript",frg:"GLSL",fsh:"GLSL",fshader:"GLSL",geo:"GLSL",geom:"GLSL",glslv:"GLSL",gshader:"GLSL",shader:"GLSL",vert:"GLSL",vrx:"GLSL",vsh:"GLSL",vshader:"GLSL",gml:"XML",kid:"Genshi",ebuild:"Gentoo Ebuild",eclass:"Gentoo Eclass",po:"Gettext Catalog",pot:"Gettext Catalog",glf:"Glyph",gp:"Gnuplot",gnu:"Gnuplot",gnuplot:"Gnuplot",plot:"Gnuplot",plt:"Gnuplot",go:"Go",golo:"Golo",gs:"JavaScript",gst:"Gosu",gsx:"Gosu",vark:"Gosu",grace:"Grace",gradle:"Gradle",gf:"Grammatical Framework",graphql:"GraphQL",dot:"Graphviz (DOT)",gv:"Graphviz (DOT)",man:"Groff","1in":"Groff","1m":"Groff","1x":"Groff","3in":"Groff","3m":"Groff","3qt":"Groff","3x":"Groff",me:"Groff",n:"Nemerle",rno:"Groff",roff:"Groff",groovy:"Groovy",grt:"Groovy",gtpl:"Groovy",gvy:"Groovy",gsp:"Groovy Server Pages",hcl:"HCL",tf:"HCL",hlsl:"HLSL",fxh:"HLSL",hlsli:"HLSL",html:"HTML",htm:"HTML","html.hl":"HTML",st:"Smalltalk",xht:"HTML",xhtml:"HTML",mustache:"HTML+Django",jinja:"HTML+Django",eex:"HTML+EEX",erb:"HTML+ERB","erb.deface":"HTML+ERB",phtml:"HTML+PHP",http:"HTTP",php:"PHP",haml:"Haml","haml.deface":"Haml",handlebars:"Handlebars",hbs:"Handlebars",hb:"Harbour",hs:"Haskell",hsc:"Haskell",hx:"Haxe",hxsl:"Haxe",hy:"Hy",pro:"QMake",dlm:"IDL",ipf:"IGOR Pro",ini:"INI",cfg:"INI",prefs:"INI",properties:"INI",irclog:"IRC log",weechatlog:"IRC log",idr:"Idris",lidr:"Idris",ni:"Inform 7",i7x:"Inform 7",iss:"Inno Setup",io:"Io",ik:"Ioke",thy:"Isabelle",ijs:"J",flex:"JFlex",jflex:"JFlex",json:"JSON",geojson:"JSON",lock:"JSON",topojson:"JSON",json5:"JSON5",jsonld:"JSONLD",jq:"JSONiq",jsx:"JSX",jade:"Jade",j:"Objective-J",java:"Java",jsp:"Java Server Pages",js:"JavaScript",_js:"JavaScript",bones:"JavaScript",es6:"JavaScript",jake:"JavaScript",jsb:"JavaScript",jscad:"JavaScript",jsfl:"JavaScript",jsm:"JavaScript",jss:"JavaScript",njs:"JavaScript",pac:"JavaScript",sjs:"JavaScript",ssjs:"JavaScript","sublime-build":"JavaScript","sublime-commands":"JavaScript","sublime-completions":"JavaScript","sublime-keymap":"JavaScript","sublime-macro":"JavaScript","sublime-menu":"JavaScript","sublime-mousemap":"JavaScript","sublime-project":"JavaScript","sublime-settings":"JavaScript","sublime-theme":"JavaScript","sublime-workspace":"JavaScript",sublime_metrics:"JavaScript",sublime_session:"JavaScript",xsjs:"JavaScript",xsjslib:"JavaScript",jl:"Julia",ipynb:"Jupyter Notebook",krl:"KRL",kicad_pcb:"KiCad",kit:"Kit",kt:"Kotlin",ktm:"Kotlin",kts:"Kotlin",lfe:"LFE",ll:"LLVM",lol:"LOLCODE",lsl:"LSL",lslp:"LSL",lvproj:"LabVIEW",lasso:"Lasso",las:"Lasso",lasso8:"Lasso",lasso9:"Lasso",ldml:"Lasso",latte:"Latte",lean:"Lean",hlean:"Lean",less:"Less",lex:"Lex",ly:"LilyPond",ily:"LilyPond",m:"Objective-C",ld:"Linker Script",lds:"Linker Script",liquid:"Liquid",lagda:"Literate Agda",litcoffee:"Literate CoffeeScript",lhs:"Literate Haskell",ls:"LoomScript",_ls:"LiveScript",xm:"Logos",x:"Logos",xi:"Logos",lgt:"Logtalk",logtalk:"Logtalk",lookml:"LookML",lua:"Lua",fcgi:"Shell",nse:"Lua",pd_lua:"Lua",rbxs:"Lua",wlua:"Lua",mumps:"M",m4:"M4Sugar",mcr:"MAXScript",mtml:"MTML",muf:"MUF",mak:"Makefile",mk:"Makefile",mkfile:"Makefile",mako:"Mako",mao:"Mako",md:"Markdown",markdown:"Markdown",mkd:"Markdown",mkdn:"Markdown",mkdown:"Markdown",ron:"Markdown",mask:"Mask",mathematica:"Mathematica",cdf:"Mathematica",ma:"Mathematica",mt:"Mathematica",nb:"Text",nbp:"Mathematica",wl:"Mathematica",wlt:"Mathematica",matlab:"Matlab",maxpat:"Max",maxhelp:"Max",maxproj:"Max",mxt:"Max",pat:"Max",mediawiki:"MediaWiki",wiki:"MediaWiki",moo:"Moocode",metal:"Metal",minid:"MiniD",druby:"Mirah",duby:"Mirah",mir:"Mirah",mirah:"Mirah",mo:"Modelica",mms:"Module Management System",mmk:"Module Management System",monkey:"Monkey",moon:"MoonScript",myt:"Myghty",ncl:"Text",nl:"NewLisp",nsi:"NSIS",nsh:"NSIS",axs:"NetLinx",axi:"NetLinx","axs.erb":"NetLinx+ERB","axi.erb":"NetLinx+ERB",nlogo:"NetLogo",nginxconf:"Nginx",nim:"Nimrod",nimrod:"Nimrod",ninja:"Ninja",nit:"Nit",nix:"Nix",nu:"Nu",numpy:"NumPy",numpyw:"NumPy",numsc:"NumPy",ml:"OCaml",eliom:"OCaml",eliomi:"OCaml",ml4:"OCaml",mli:"OCaml",mll:"OCaml",mly:"OCaml",objdump:"ObjDump",mm:"XML",sj:"Objective-J",omgrofl:"Omgrofl",opa:"Opa",opal:"Opal",opencl:"OpenCL",p:"OpenEdge ABL",scad:"OpenSCAD",org:"Org",ox:"Ox",oxh:"Ox",oxo:"Ox",oxygene:"Oxygene",oz:"Oz",pwn:"PAWN",aw:"PHP",ctp:"PHP",php3:"PHP",php4:"PHP",php5:"PHP",phps:"PHP",phpt:"PHP",pls:"PLSQL",pck:"PLSQL",pkb:"PLSQL",pks:"PLSQL",plb:"PLSQL",plsql:"PLSQL",sql:"SQLPL",pov:"POV-Ray SDL",pan:"Pan",psc:"Papyrus",parrot:"Parrot",pasm:"Parrot Assembly",pir:"Parrot Internal Representation",pas:"Pascal",dfm:"Pascal",dpr:"Pascal",lpr:"Pascal",pp:"Puppet",pl:"Prolog",al:"Perl",cgi:"Shell",perl:"Perl",ph:"Perl",plx:"Perl",pm:"Perl6",pod:"Pod",psgi:"Perl",t:"Turing","6pl":"Perl6","6pm":"Perl6",nqp:"Perl6",p6:"Perl6",p6l:"Perl6",p6m:"Perl6",pl6:"Perl6",pm6:"Perl6",pkl:"Pickle",pig:"PigLatin",pike:"Pike",pmod:"Pike",pogo:"PogoScript",pony:"Pony",ps:"PostScript",eps:"PostScript",ps1:"PowerShell",psd1:"PowerShell",psm1:"PowerShell",pde:"Processing",prolog:"Prolog",yap:"Prolog",spin:"Propeller Spin",proto:"Protocol Buffer",pub:"Public Key",pd:"Pure Data",pb:"PureBasic",pbi:"PureBasic",purs:"PureScript",py:"Python",bzl:"Python",gyp:"Python",lmi:"Python",pyde:"Python",pyp:"Python",pyt:"Python",pyw:"Python",rpy:"Ren'Py",tac:"Python",wsgi:"Python",xpy:"Python",pytb:"Python traceback",qml:"QML",qbs:"QML",pri:"QMake",r:"Rebol",rd:"R",rsx:"R",raml:"RAML",rdoc:"RDoc",rbbas:"REALbasic",rbfrm:"REALbasic",rbmnu:"REALbasic",rbres:"REALbasic",rbtbar:"REALbasic",rbuistate:"REALbasic",rhtml:"RHTML",rmd:"RMarkdown",rkt:"Racket",rktd:"Racket",rktl:"Racket",scrbl:"Racket",rl:"Ragel in Ruby Host",raw:"Raw token data",reb:"Rebol",r2:"Rebol",r3:"Rebol",rebol:"Rebol",red:"Red",reds:"Red",cw:"Redcode",rs:"Rust",rsh:"RenderScript",robot:"RobotFramework",rg:"Rouge",rb:"Ruby",builder:"Ruby",gemspec:"Ruby",god:"Ruby",irbrc:"Ruby",jbuilder:"Ruby",mspec:"Ruby",pluginspec:"XML",podspec:"Ruby",rabl:"Ruby",rake:"Ruby",rbuild:"Ruby",rbw:"Ruby",rbx:"Ruby",ru:"Ruby",ruby:"Ruby",thor:"Ruby",watchr:"Ruby","rs.in":"Rust",sas:"SAS",scss:"SCSS",smt2:"SMT",smt:"SMT",sparql:"SPARQL",rq:"SPARQL",sqf:"SQF",hqf:"SQF",cql:"SQL",ddl:"SQL",prc:"SQL",tab:"SQL",udf:"SQL",viw:"SQL",db2:"SQLPL",ston:"STON",svg:"SVG",sage:"Sage",sagews:"Sage",sls:"Scheme",sass:"Sass",scala:"Scala",sbt:"Scala",sc:"SuperCollider",scaml:"Scaml",scm:"Scheme",sld:"Scheme",sps:"Scheme",ss:"Scheme",sci:"Scilab",sce:"Scilab",self:"Self",sh:"Shell",bash:"Shell",bats:"Shell",command:"Shell",ksh:"Shell","sh.in":"Shell",tmux:"Shell",tool:"Shell",zsh:"Shell","sh-session":"ShellSession",shen:"Shen",sl:"Slash",slim:"Slim",smali:"Smali",tpl:"Smarty",sp:"SourcePawn",sma:"SourcePawn",nut:"Squirrel",stan:"Stan",ML:"Standard ML",fun:"Standard ML",sig:"Standard ML",sml:"Standard ML",do:"Stata",ado:"Stata",doh:"Stata",ihlp:"Stata",mata:"Stata",matah:"Stata",sthlp:"Stata",styl:"Stylus",scd:"SuperCollider",swift:"Swift",sv:"SystemVerilog",svh:"SystemVerilog",vh:"SystemVerilog",toml:"TOML",txl:"TXL",tcl:"Tcl",adp:"Tcl",tm:"Tcl",tcsh:"Tcsh",csh:"Tcsh",tex:"TeX",aux:"TeX",bbx:"TeX",bib:"TeX",cbx:"TeX",dtx:"TeX",ins:"TeX",lbx:"TeX",ltx:"TeX",mkii:"TeX",mkiv:"TeX",mkvi:"TeX",sty:"TeX",toc:"TeX",tea:"Tea",txt:"Text",no:"Text",textile:"Textile",thrift:"Thrift",tu:"Turing",ttl:"Turtle",twig:"Twig",ts:"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 Pe=h(ht=>{"use strict";Object.defineProperty(ht,"__esModule",{value:!0});ht.setOptionValues=ls;function ls(t,e){for(let r of Object.keys(e))t[r]!==void 0&&(e[r]=t[r]);return e}});var Oi=h(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.SarifBuilder=void 0;var us=require("path"),Fi=Pi(),fs=ki(),ms=Pe(),St=class{constructor(e={}){this.log={$schema:"http://json.schemastore.org/sarif-2.1.0.json",version:"2.1.0",runs:[]},(0,ms.setOptionValues)(e,this.log)}addRun(e){this.log.runs.push(e.run)}generateSarifFileSync(e){let r=this.buildSarifJsonString();Fi.writeFileSync(e,r,"utf8")}async generateSarifFile(e){let r=this.buildSarifJsonString();await Fi.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=us.extname(m.physicalLocation.artifactLocation.uri).replace(".",""),l=fs.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}};Xe.SarifBuilder=St});var Ei=h($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.SarifResultBuilder=void 0;var ps=Pe(),gt=class{constructor(e={}){this.result={level:"error",message:{},ruleId:"SARIF_BUILDER_INVALID: Please send the rule Id ruleId property, or call setRuleId(ruleId)"},(0,ps.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=gt});var Di=h(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.SarifRuleBuilder=void 0;var ds=Pe(),vt=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,ds.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}};Be.SarifRuleBuilder=vt});var ji=h(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.SarifRunBuilder=void 0;var ys=Pe(),wt=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,ys.setOptionValues)(e,this.run)}initSimple(e){return this.setToolDriverName(e.toolDriverName),this.setToolDriverVersion(e.toolDriverVersion),e.url&&this.setToolDriverUri(e.url),this}addRule(e){this.run.tool.driver.rules.push(e.rule)}addResult(e){this.run.results.push(e.result)}setToolDriverName(e){this.run.tool.driver.name=e}setToolDriverVersion(e){this.run.tool.driver.version=e}setToolDriverUri(e){this.run.tool.driver.informationUri=e}};Ue.SarifRunBuilder=wt});var Ti=h(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.SarifResultBuilder=W.SarifRuleBuilder=W.SarifRunBuilder=W.SarifBuilder=void 0;var hs=Oi();Object.defineProperty(W,"SarifBuilder",{enumerable:!0,get:function(){return hs.SarifBuilder}});var Ss=Ei();Object.defineProperty(W,"SarifResultBuilder",{enumerable:!0,get:function(){return Ss.SarifResultBuilder}});var gs=Di();Object.defineProperty(W,"SarifRuleBuilder",{enumerable:!0,get:function(){return gs.SarifRuleBuilder}});var vs=ji();Object.defineProperty(W,"SarifRunBuilder",{enumerable:!0,get:function(){return vs.SarifRunBuilder}})});var Ci=h((ja,Mi)=>{"use strict";var ws=/["'&<>]/;Mi.exports=bs;function bs(t){var e=""+t,r=ws.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 Ke=require("zx"),ae=require("fs/promises");var Ye={UNKNOWN:0,LOW:1,MEDIUM:2,HIGH:3,CRITICAL:4};var Fe=class{allById=new Map;getAllVulnerabilitiesSortedBySeverity(){let e=Array.from(this.allById.values());return e.sort((r,i)=>{let n=Lt(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=Ze(o.detectedBy,r),o.components=Ze(o.components,e.components[0]),o.refs=Ze(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 Lt(t,e)>0?t:e}function Lt(t,e){return Ye[t]-Ye[e]}function Ze(t,e){return e?Array.from(new Set([...t,e]).values()):t}var Oe=ze(require("path"));var B=require("fs/promises"),et=require("path");async function G(t){if(await ne(t))return JSON.parse(await(0,B.readFile)(t,{encoding:"utf-8"}))}function H(t){return t&&t.replace(/\?.*$/,"")}async function ne(t){try{return await(0,B.access)(t,B.constants.F_OK),!0}catch{return!1}}async function tt(t){let e=(0,et.resolve)(t),r=await(0,B.readdir)(e,{withFileTypes:!0});for(let i of r){let n=(0,et.resolve)(i.parentPath,i.name);i.isDirectory()?await tt(n):await(0,B.rm)(n)}await(0,B.rmdir)(e)}async function he(t,e){let r=e?.user&&e?.pw?{Authorization:`Basic ${Buffer.from(`${e.user}:${e.pw}`).toString("base64")}`}:{},i=await fetch(t,{headers:r});if(!i.ok){let n="";try{n=await i.text()}catch(o){n=`${o}`}throw new Error(`Failed to fetch: ${t}: ${i.status} - ${i.statusText}: ${n}`)}return i}async function Pt(t){let e="https://repository.conterra.de/repository/maven-mirror-ct",r=Y(t.workingDir,"input/vex"),i=Y(t.workingDir,"output"),n=Y(t.workingDir,"cache"),o=["grype","trivy","ossindex"],s=Y(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,vexUrls:c.vexUrls??[],vexDir:Y(t.workingDir,c.vexDir)??r,outDir:Y(t.workingDir,c.outDir)??i,cacheDir:Y(t.workingDir,c.cacheDir)??n,scanners:c.scanners??o,projects:(c.projects??[]).map(u=>{let m=u;return m.sbomFile?{...m,sbomFile:Y(t.workingDir,m.sbomFile)}:u})}}function Y(t,e){if(e)return Oe.default.isAbsolute(e)?e:(0,Oe.resolve)(t,e)}var kt=require("zx");var Ee=require("path");async function Ft(t,e,r,i){console.log(" with Grype ...");let n=(0,Ee.dirname)(e),o=(0,Ee.basename)(e),s=await kt.$`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);Wi(i,c)}function Wi(t,e){if(e)for(let r of e.matches){let i=Hi(r);t.addVulnerability(i,"grype")}}function Hi(t){let e=t.vulnerability,r=e.id,i=H(t.artifact.purl),n=H(e.dataSource),o=Qi(e.severity);return{id:r,severity:o,scannerSeverity:{grype:o},title:"",description:e.description,components:[i],detectedBy:["grype"],refs:[n]}}function Qi(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 Ot=require("zx");var De=require("path");async function Et(t,e,r,i,n){let o=(0,De.dirname)(e),s=(0,De.basename)(e),c=[];i&&(c.push("-e"),c.push(`GITHUB_TOKEN=${i}`));let u=[];u.push("--db-repository"),u.push("public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db"),console.log(` with Trivy...${i?" (with GitHub token)":""}`);let m=await Ot.$`docker run --rm -v '${t}:/.cache' -v '${o}:/tmp/output' -v '${r.sbomFile}:/tmp/input.json' ${c} aquasec/trivy:latest sbom ${u} --cache-dir '/.cache' --format json --output '/tmp/output/${s}' --quiet /tmp/input.json`;m.stdout&&console.log(` Scan log: ${m.stdout}`),m.stderr&&console.log(` Scan error: ${m.stderr}`),console.log(` Trivy output file: ${e}`);let a=await G(e);Ki(n,a)}function Ki(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=H(t.PkgIdentifier.PURL),i=H(t.PrimaryURL),n=Yi(t.Severity);return{id:e,severity:n,scannerSeverity:{trivy:n},title:t.Title,description:t.Description,components:[r],detectedBy:["trivy"],refs:[i]}}function Yi(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 jt(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 Zi(e.sbomFile),u=new Set(c.map(l=>l.purl.replace(/\?.*$/,"")));sn(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,Dt.writeFile)(t,JSON.stringify(a,null,2)),console.log(` Sonatype OssIndex output file: ${t}`),rn(i,a)}async function Zi(t){return(await G(t)).components.filter(r=>en(r)&&!tn(r))}function en(t){return!!t.purl}function tn(t){return t.group?t.group.startsWith("de.conterra")||t.group.startsWith("org.n52.security"):!1}function rn(t,e){if(e)for(let r of e)for(let i of r.vulnerabilities){let n=nn(i,r.coordinates);t.addVulnerability(n,"ossindex")}}function nn(t,e){let r=t.cve||t.id,i=H(e),n=H(t.reference),o=on(t.cvssScore);return{id:r,severity:o,scannerSeverity:{ossindex:o},title:t.title,description:t.description,components:[i],detectedBy:["ossindex"],refs:n?[n]:[]}}function on(t){return t===0?"UNKNOWN":t<4?"LOW":t<7?"MEDIUM":t<9?"HIGH":"CRITICAL"}function sn(t){let e=Array.from(t);for(let r of e){let i=r.replace(/(@[^-]+)-.*$/g,"$1");t.add(i)}}var ie=ze(Ti()),Ii=ze(Ci());function Ai(t,e){let r=new ie.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=Ls(o.severity),c=o.id,u=xs(o.refs),m=new ie.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:Ps(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 ie.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 ie.SarifBuilder;return n.addRun(r),n.buildSarifOutput()}function xs(t){for(let e of t)if(e.startsWith("https://nvd.nist.gov"))return e;return t[0]}function Ls(t){switch(t){case"CRITICAL":return"error";case"HIGH":return"error";case"MEDIUM":return"warning";case"LOW":return"note";default:return"note"}}function Ps(t,e,r){let i=t.vexStatement,n=i?`
9
9
  ${r}
10
10
  ${i.justification??""}
11
11
  ${i.impact_statement??""}
@@ -17,12 +17,12 @@ ${n}
17
17
 
18
18
  --- DETAILS ---
19
19
 
20
- ${(0,ji.default)(t.description)}
20
+ ${(0,Ii.default)(t.description)}
21
21
 
22
22
  ${t.refs.map(o=>`* <${o}>`).join(`
23
23
  `)}
24
- `}var qe=require("fs/promises");async function Ti(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],Ps=process.env.OSS_INDEX_API_TOKEN,ks=process.env.OSS_INDEX_API_USER,Os=process.env.MAVEN_REPO_PW,Fs=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:Fs,pw:Os}),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 Ti(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=>Es(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 Ds(u,m,a,l)}if(s.size>0){console.log(`
25
- 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 Es(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:ks,token:Ps},n)}}async function Ds(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=Ci(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 Je=require("fs/promises");async function Ri(t,e,r){if("sbomFile"in t)return await(0,Je.copyFile)(t.sbomFile,e),t.sbomFile=e,t;let i=await r.downloadArtifact(t.sbomMavenCoordinates);return await(0,Je.writeFile)(e,i),{...t,sbomFile:e}}var Ge=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 he(i,this.authn);return Buffer.from(await n.arrayBuffer())}async fetchLatestSnapshotTimestamp(e){let r=`${this.toArtifactBaseUrl(e)}/maven-metadata.xml`,n=await(await he(r,this.authn)).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"}}};var Ni=require("fs/promises"),We=require("path");var ye=class t{statements=[];filteredToProduct;static async fromUrl(e,r,i=new t){let o=await(await he(e,r)).json();return i.add(o),i}static async fromFiles(e,r=new t){let i=(0,We.resolve)(e);for(let n of await(0,Ni.readdir)(i,{withFileTypes:!0}))if(n.name.endsWith(".json")){let o=await G((0,We.resolve)(n.parentPath,n.name));r.add(o)}else n.isDirectory()&&await t.fromFiles((0,We.resolve)(n.parentPath,n.name),r);return r}add(e){ks(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 bt(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)}},bt=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)}};function ks(t){if(t?.["@context"]!=="https://openvex.dev/ns/v0.2.0")throw new Error("Invalid VEX file format")}var Qe=require("path"),qi=require("fs/promises");var He=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,Qe.resolve)(this.outputDir,r,`${i}${n}`),s=(0,Qe.dirname)(o);return await ne(s)||await(0,qi.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}`)}}};Ke.os.type().startsWith("Windows")&&(0,Ke.usePowerShell)();async function Vi(t){let{mavenRepoUser:e,mavenRepoPw:r,reduceToProjectVersion:i,reduceToProjectName:n,ossIndexApiUser:o,ossIndexApiToken:s,trivyGithubToken:c,vexUrlsUser:u,vexUrlsPw:m}=t,a=await Pt(t),l=a.cacheDir;await ne(l)||await(0,ae.mkdir)(l);let p=a.outDir;await ne(p)&&await tt(p),await(0,ae.mkdir)(p);let f=a.vexDir,d;await ne(f)?d=await ye.fromFiles(f):d=new ye;for(let x of a.vexUrls)await ye.fromUrl(x,{user:u,pw:m},d);let S=new Ge(a.mavenRepo,{user:e,pw:r}),v=a.projects,b=new Map,A=t.scannerEngines??a.scanners.map(x=>({scanProject($,X,z){return Fs(x,$,X,l,z,o,s,c)}}));for(let x of v){if(n&&(x.name!==n||i&&x.version!==i))continue;let $=new He(x,p,a.createSubDirsForProject),X=await Ri(x,await $.lookupOutputFileForWriting("project-cyclonedx-sbom-file"),S);console.log(`Analyzing project: ${X.name} - ${X.version} - ${X.sbomFile}`);let z=new Fe;await Promise.all(A.map(y=>y.scanProject(X,$,z)));let ke=d.filterByProduct(X.purl),{unmatchedVulnerabilities:le}=z.enhanceWithVexData(ke);le.length>0&&b.set(X.purl,le),await Os($,X,z,ke)}if(b.size>0){console.log(`
25
+ Detected new vulnerabilities for products:`);for(let[x,$]of b){console.log(` ${x}:`);for(let X of $)console.log(` ${X}`)}t.mode!=="test"&&console.log("##vso[task.complete result=SucceededWithIssues;]NEW_VULNERABILITIES_DETECTED"),a.failOnNewVulnerabilities&&process.exit(1)}}async function Fs(t,e,r,i,n,o,s,c){switch(t){case"grype":return Ft(i,await r.lookupOutputFileForWriting("grype-results"),e,n);case"trivy":return Et(i,await r.lookupOutputFileForWriting("trivy-results"),e,c,n);case"ossindex":return jt(await r.lookupOutputFileForWriting("ossindex-results"),e,{user:o,token:s},n)}}async function Os(t,e,r,i){let n=r.getAllVulnerabilitiesSortedBySeverity(),o=await t.lookupOutputFileForWriting("aggregate-results");await(0,ae.writeFile)(o,JSON.stringify(n,null,2)),console.log(` Vulnerabilities output file: ${o}`);let s=await t.lookupOutputFileForWriting("aggregated-sarif-results"),c=Ai(n,e);await(0,ae.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,ae.writeFile)(m,JSON.stringify(u,null,2)),console.log(` OpenVex file: ${m}`)}var ce=process.env;Vi({workingDir:process.cwd(),reduceToProjectName:process.argv[2],reduceToProjectVersion:process.argv[3],ossIndexApiUser:ce.OSS_INDEX_API_USER,ossIndexApiToken:ce.OSS_INDEX_API_TOKEN,mavenRepoUser:ce.MAVEN_REPO_USER,mavenRepoPw:ce.MAVEN_REPO_PW,trivyGithubToken:ce.TRIVY_GITHUB_TOKEN,vexUrlsUser:ce.VEX_URLS_USER,vexUrlsPw:ce.VEX_URLS_PW});
26
26
  /*! Bundled license information:
27
27
 
28
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.3",
3
+ "version": "0.0.5",
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
  }