diff --git a/.gitignore b/.gitignore
index 4daa310..6e87027 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,11 @@ htmlcov/
# Local virtual environments
.venv/
.venv-win/
+PythonModels/runs/
+app/data/
+frontend/node_modules/
+frontend/dist/
+frontend/.vite/
venv/
env/
diff --git a/.tools/node-v24.18.0-win-x64.zip b/.tools/node-v24.18.0-win-x64.zip
new file mode 100644
index 0000000..f24ffbd
Binary files /dev/null and b/.tools/node-v24.18.0-win-x64.zip differ
diff --git a/.tools/node-v24.18.0-win-x64/CHANGELOG.md b/.tools/node-v24.18.0-win-x64/CHANGELOG.md
new file mode 100644
index 0000000..ecac7da
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/CHANGELOG.md
@@ -0,0 +1,1403 @@
+# Node.js Changelog
+
+Select a Node.js version below to view the changelog history:
+
+* [Node.js 24](doc/changelogs/CHANGELOG_V24.md) **Long Term Support**
+* [Node.js 23](doc/changelogs/CHANGELOG_V23.md) **Current**
+* [Node.js 22](doc/changelogs/CHANGELOG_V22.md) Long Term Support
+* [Node.js 21](doc/changelogs/CHANGELOG_V21.md) End-of-Life
+* [Node.js 20](doc/changelogs/CHANGELOG_V20.md) Long Term Support
+* [Node.js 19](doc/changelogs/CHANGELOG_V19.md) End-of-Life
+* [Node.js 18](doc/changelogs/CHANGELOG_V18.md) End-of-Life
+* [Node.js 17](doc/changelogs/CHANGELOG_V17.md) End-of-Life
+* [Node.js 16](doc/changelogs/CHANGELOG_V16.md) End-of-Life
+* [Node.js 15](doc/changelogs/CHANGELOG_V15.md) End-of-Life
+* [Node.js 14](doc/changelogs/CHANGELOG_V14.md) End-of-Life
+* [Node.js 13](doc/changelogs/CHANGELOG_V13.md) End-of-Life
+* [Node.js 12](doc/changelogs/CHANGELOG_V12.md) End-of-Life
+* [Node.js 11](doc/changelogs/CHANGELOG_V11.md) End-of-Life
+* [Node.js 10](doc/changelogs/CHANGELOG_V10.md) End-of-Life
+* [Node.js 9](doc/changelogs/CHANGELOG_V9.md) End-of-Life
+* [Node.js 8](doc/changelogs/CHANGELOG_V8.md) End-of-Life
+* [Node.js 7](doc/changelogs/CHANGELOG_V7.md) End-of-Life
+* [Node.js 6](doc/changelogs/CHANGELOG_V6.md) End-of-Life
+* [Node.js 5](doc/changelogs/CHANGELOG_V5.md) End-of-Life
+* [Node.js 4](doc/changelogs/CHANGELOG_V4.md) End-of-Life
+* [io.js](doc/changelogs/CHANGELOG_IOJS.md) End-of-Life
+* [Node.js 0.12](doc/changelogs/CHANGELOG_V012.md) End-of-Life
+* [Node.js 0.10](doc/changelogs/CHANGELOG_V010.md) End-of-Life
+* [Archive](doc/changelogs/CHANGELOG_ARCHIVE.md)
+
+Please use the following table to find the changelog for a specific Node.js
+release.
+
+
+
+## Notes
+
+* The [Node.js Long Term Support plan](https://github.com/nodejs/Release) covers
+ LTS releases.
+* Release versions in **bold** text are the most recent supported releases.
+
+***
+
+***
+
+## 2016-05-06, Version 0.12.14 (Maintenance), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.14.
+
+## 2016-05-06, Version 0.10.45 (Maintenance), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.45.
+
+## 2016-05-05, Version 6.1.0 (Current), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V6.md#6.1.0.
+
+## 2016-05-05, Version 5.11.1 (Stable), @evanlucas
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.11.1.
+
+## 2016-05-05, Version 4.4.4 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.4.4.
+
+## 2016-04-26, Version 6.0.0 (Current), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V6.md#6.0.0.
+
+## 2016-04-20, Version 5.11.0 (Stable), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.11.0.
+
+## 2016-04-05, Version 5.10.1 (Stable), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.10.1.
+
+## 2016-03-31, Version 0.10.44 (Maintenance), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.44.
+
+## 2016-03-31, Version 5.10.0 (Stable), @evanlucas
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.10.0.
+
+## 2016-03-31, Version 4.4.2 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.4.2.
+
+## 2016-03-31, Version 0.12.13 (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.13.
+
+## 2016-03-23, Version 5.9.1 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.9.1.
+
+## 2016-03-22, Version 4.4.1 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.4.1.
+
+## 2016-03-16, Version 5.9.0 (Stable), @evanlucas
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.9.0.
+
+## 2016-03-08, Version 5.8.0 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.8.0.
+
+## 2016-03-08, Version 4.4.0 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.4.0.
+
+## 2016-03-08, Version 0.12.12 (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.12.
+
+## 2016-03-03, Version 0.12.11 (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.11.
+
+## 2016-03-02, Version 5.7.1 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.7.1.
+
+## 2016-03-02, Version 4.3.2 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.3.2.
+
+## 2016-02-23, Version 5.7.0 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.7.0.
+
+## 2016-02-16, Version 4.3.1 'Argon' (LTS), @thealphanerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.3.1.
+
+## 2016-02-09, Version 5.6.0 (Stable), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.6.0.
+
+## 2016-02-09, Version 4.3.0 'Argon' (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.3.0.
+
+## 2016-02-09, Version 0.12.10 (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.10.
+
+## 2016-02-09, Version 0.10.42 (Maintenance), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.42.
+
+## 2016-01-21, Version 4.2.6 'Argon' (LTS), @TheAlphaNerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.6.
+
+## 2016-01-20, Version 5.5.0 (Stable), @evanlucas
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.5.0.
+
+## 2016-01-20, Version 4.2.5 'Argon' (LTS), @TheAlphaNerd
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.5.
+
+## 2016-01-12, Version 5.4.1 (Stable), @TheAlphaNerd
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.4.1.
+
+## 2016-01-06, Version 5.4.0 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.4.0.
+
+## 2015-12-23, Version 4.2.4 'Argon' (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.4.
+
+## 2015-12-16, Version 5.3.0 (Stable), @cjihrig
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.3.0.
+
+## 2015-12-09, Version 5.2.0 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.2.0.
+
+## 2015-12-04, Version 5.1.1 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.1.1.
+
+## 2015-12-04, Version 4.2.3 'Argon' (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.3.
+
+## 2015-12-04, Version 0.12.9 (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.9.
+
+## 2015-12-04, Version 0.10.41 (Maintenance), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.41.
+
+## 2015.11.25, Version 0.12.8 (LTS), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.8.
+
+## 2015-11-17, Version 5.1.0 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.1.0.
+
+## 2015-11-03, Version 4.2.2 'Argon' (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.2.
+
+## 2015-10-29, Version 5.0.0 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V5.md#5.0.0.
+
+## 2015-10-13, Version 4.2.1 'Argon' (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.1.
+
+## 2015-10-07, Version 4.2.0 'Argon' (LTS), @jasnell
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.2.0.
+
+## 2015-10-05, Version 4.1.2 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.1.2.
+
+## 2015-09-22, Version 4.1.1 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.1.1.
+
+## 2015-09-17, Version 4.1.0 (Stable), @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_V4.md#4.1.0.
+
+## 2015-09-15, io.js Version 3.3.1 @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#3.3.1.
+
+## 2015-09-08, Version 4.0.0 (Stable), @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_V6.md#6.0.0.
+
+## 2015-09-02, Version 3.3.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#3.3.0.
+
+## 2015-08-25, Version 3.2.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#3.2.0.
+
+## 2015-08-18, Version 3.1.0, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#3.1.0.
+
+## 2015-08-04, Version 3.0.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#3.0.0.
+
+## 2015-07-28, Version 2.5.0, @cjihrig
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.5.0.
+
+## 2015-07-17, Version 2.4.0, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.4.0.
+
+## 2015-07-09, Version 2.3.4, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.3.4.
+
+## 2015-07-09, Version 1.8.4, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.8.4.
+
+## 2015-07-09, Version 0.12.7 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.7.
+
+## 2015-07-04, Version 2.3.3, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.3.3.
+
+## 2015-07-04, Version 1.8.3, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.8.3.
+
+## 2015-07-03, Version 0.12.6 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.6.
+
+## 2015-07-01, Version 2.3.2, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.3.2.
+
+## 2015-06-23, Version 2.3.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.3.1.
+
+## 2015-06-22, Version 0.12.5 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.5.
+
+## 2015-06-18, Version 0.10.39 (Maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.39.
+
+## 2015-06-13, Version 2.3.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.3.0.
+
+## 2015-06-01, Version 2.2.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.2.1.
+
+## 2015-05-31, Version 2.2.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.2.0.
+
+## 2015-05-24, Version 2.1.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.1.0.
+
+## 2015-05-22, Version 0.12.4 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.4.
+
+## 2015-05-17, Version 1.8.2, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.8.2.
+
+## 2015-05-15, Version 2.0.2, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.0.2.
+
+## 2015-05-13, Version 0.12.3 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.3.
+
+## 2015-05-07, Version 2.0.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.0.1.
+
+## 2015-05-04, Version 2.0.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#2.0.0.
+
+## 2015-04-20, Version 1.8.1, @chrisdickinson
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.8.1.
+
+## 2015-04-14, Version 1.7.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.7.1.
+
+## 2015-04-14, Version 1.7.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.7.0.
+
+## 2015-04-06, Version 1.6.4, @Fishrock123
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.6.4.
+
+## 2015-03-31, Version 1.6.3, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.6.3.
+
+## 2015-03-31, Version 0.12.2 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.2.
+
+## 2015-03-23, Version 1.6.2, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.6.2.
+
+## 2015-03-23, Version 0.12.1 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.1.
+
+## 2015-03-23, Version 0.10.38 (Maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.38.
+
+## 2015-03-20, Version 1.6.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.6.1.
+
+## 2015-03-19, Version 1.6.0, @chrisdickinson
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.6.0.
+
+## 2015-03-11, Version 0.10.37 (Maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.37.
+
+## 2015-03-09, Version 1.5.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.5.1.
+
+## 2015-03-06, Version 1.5.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.5.0.
+
+## 2015-03-02, Version 1.4.3, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.4.3.
+
+## 2015-02-28, Version 1.4.2, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.4.2.
+
+## 2015-02-26, Version 1.4.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.4.1.
+
+## 2015-02-20, Version 1.3.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.3.0.
+
+## 2015-02-10, Version 1.2.0, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.2.0.
+
+## 2015-02-06, Version 0.12.0 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V012.md#0.12.0.
+
+## 2015-02-03, Version 1.1.0, @chrisdickinson
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.1.0.
+
+## 2015-01-26, Version 0.10.36 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.36.
+
+## 2015-01-24, Version 1.0.4, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.0.4.
+
+## 2015-01-20, Version 1.0.3, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.0.3.
+
+## 2015-01-16, Version 1.0.2, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.0.2.
+
+## 2015-01-14, Version 1.0.1, @rvagg
+
+Moved to doc/changelogs/CHANGELOG\_IOJS.md#1.0.1.
+
+## 2014.09.24, Version 0.11.14 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.14.
+
+## 2014.05.01, Version 0.11.13 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.13.
+
+## 2014.03.11, Version 0.11.12 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.12.
+
+## 2014.01.29, Version 0.11.11 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.11.
+
+## 2013.12.31, Version 0.11.10 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.10.
+
+## 2013.11.20, Version 0.11.9 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.9.
+
+## 2013.10.30, Version 0.11.8 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.8.
+
+## 2013.08.21, Version 0.11.7 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.7.
+
+## 2013.08.21, Version 0.11.6 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.6.
+
+## 2013.08.06, Version 0.11.5 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.5.
+
+## 2013.07.12, Version 0.11.4 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.4.
+
+## 2013.06.26, Version 0.11.3 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.3.
+
+## 2013.05.13, Version 0.11.2 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.2.
+
+## 2013.04.19, Version 0.11.1 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.1.
+
+## 2013.03.28, Version 0.11.0 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.11.0.
+
+## 2014.12.22, Version 0.10.35 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.35.
+
+## 2014.12.17, Version 0.10.34 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.34.
+
+## 2014.10.20, Version 0.10.33 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.33.
+
+## 2014.09.16, Version 0.10.32 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.32.
+
+## 2014.08.19, Version 0.10.31 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.31.
+
+## 2014.07.31, Version 0.10.30 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.30.
+
+## 2014.06.05, Version 0.10.29 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.29.
+
+## 2014.05.01, Version 0.10.28 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.28.
+
+## 2014.05.01, Version 0.10.27 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.27.
+
+## 2014.02.18, Version 0.10.26 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.26.
+
+## 2014.01.23, Version 0.10.25 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.25.
+
+## 2013.12.18, Version 0.10.24 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.24.
+
+## 2013.12.12, Version 0.10.23 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.23.
+
+## 2013.11.12, Version 0.10.22 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.22.
+
+## 2013.10.18, Version 0.10.21 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.21.
+
+## 2013.09.30, Version 0.10.20 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.20.
+
+## 2013.09.24, Version 0.10.19 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.19.
+
+## 2013.09.04, Version 0.10.18 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.18.
+
+## 2013.08.21, Version 0.10.17 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.17.
+
+## 2013.08.16, Version 0.10.16 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.16.
+
+## 2013.07.25, Version 0.10.15 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.15.
+
+## 2013.07.25, Version 0.10.14 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.14.
+
+## 2013.07.09, Version 0.10.13 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.13.
+
+## 2013.06.18, Version 0.10.12 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.12.
+
+## 2013.06.13, Version 0.10.11 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.11.
+
+## 2013.06.04, Version 0.10.10 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.10.
+
+## 2013.05.30, Version 0.10.9 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.9.
+
+## 2013.05.24, Version 0.10.8 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.8.
+
+## 2013.05.17, Version 0.10.7 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.7.
+
+## 2013.05.14, Version 0.10.6 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.6.
+
+## 2013.04.23, Version 0.10.5 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.5.
+
+## 2013.04.11, Version 0.10.4 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.4.
+
+## 2013.04.03, Version 0.10.3 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.3.
+
+## 2013.03.28, Version 0.10.2 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.2.
+
+## 2013.03.21, Version 0.10.1 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.1.
+
+## 2013.03.11, Version 0.10.0 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_V010.md#0.10.0.
+
+## 2013.03.06, Version 0.9.12 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.12.
+
+## 2013.03.01, Version 0.9.11 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.11.
+
+## 2013.02.19, Version 0.9.10 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.10.
+
+## 2013.02.07, Version 0.9.9 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.9.
+
+## 2013.01.24, Version 0.9.8 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.8.
+
+## 2013.01.18, Version 0.9.7 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.7.
+
+## 2013.01.11, Version 0.9.6 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.6.
+
+## 2012.12.30, Version 0.9.5 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.5.
+
+## 2012.12.21, Version 0.9.4 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.4.
+
+## 2012.10.24, Version 0.9.3 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.3.
+
+## 2012.09.17, Version 0.9.2 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.2.
+
+## 2012.08.28, Version 0.9.1 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.1.
+
+## 2012.07.20, Version 0.9.0 (Unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.9.0.
+
+## 2013.06.13, Version 0.8.25 (maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.25.
+
+## 2013.06.04, Version 0.8.24 (maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.24.
+
+## 2013.04.09, Version 0.8.23 (maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.23.
+
+## 2013.03.07, Version 0.8.22 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.22.
+
+## 2013.02.25, Version 0.8.21 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.21.
+
+## 2013.02.15, Version 0.8.20 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.20.
+
+## 2013.02.06, Version 0.8.19 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.19.
+
+## 2013.01.18, Version 0.8.18 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.18.
+
+## 2013.01.09, Version 0.8.17 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.17.
+
+## 2012.12.13, Version 0.8.16 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.16.
+
+## 2012.11.26, Version 0.8.15 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.15.
+
+## 2012.10.25, Version 0.8.14 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.14.
+
+## 2012.10.25, Version 0.8.13 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.13.
+
+## 2012.10.12, Version 0.8.12 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.12.
+
+## 2012.09.27, Version 0.8.11 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.11.
+
+## 2012.09.25, Version 0.8.10 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.10.
+
+## 2012.09.11, Version 0.8.9 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.9.
+
+## 2012.08.22, Version 0.8.8 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.8.
+
+## 2012.08.15, Version 0.8.7 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.7.
+
+## 2012.08.07, Version 0.8.6 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.6.
+
+## 2012.08.02, Version 0.8.5 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.5.
+
+## 2012.07.25, Version 0.8.4 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.4.
+
+## 2012.07.19, Version 0.8.3 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.3.
+
+## 2012.07.09, Version 0.8.2 (Stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.2.
+
+## 2012.06.29, Version 0.8.1 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.1.
+
+## 2012.06.25, Version 0.8.0 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.8.0.
+
+## 2012.06.19, Version 0.7.12 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.12.
+
+## 2012.06.15, Version 0.7.11 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.11.
+
+## 2012.06.11, Version 0.7.10 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.10.
+
+## 2012.05.28, Version 0.7.9 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.9.
+
+## 2012.04.18, Version 0.7.8 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.8.
+
+## 2012.03.30, Version 0.7.7 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.7.
+
+## 2012.03.13, Version 0.7.6 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.6.
+
+## 2012.02.23, Version 0.7.5 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.5.
+
+## 2012.02.14, Version 0.7.4 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.4.
+
+## 2012.02.07, Version 0.7.3 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.3.
+
+## 2012.02.01, Version 0.7.2 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.2.
+
+## 2012.01.23, Version 0.7.1 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.1.
+
+## 2012.01.16, Version 0.7.0 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.7.0.
+
+## 2012.07.10 Version 0.6.20 (maintenance)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.20.
+
+## 2012.06.06 Version 0.6.19 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.19.
+
+## 2012.05.15 Version 0.6.18 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.18.
+
+## 2012.05.04 Version 0.6.17 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.17.
+
+## 2012.04.30 Version 0.6.16 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.16.
+
+## 2012.04.09 Version 0.6.15 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.15.
+
+## 2012.03.22 Version 0.6.14 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.14.
+
+## 2012.03.15 Version 0.6.13 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.13.
+
+## 2012.03.02 Version 0.6.12 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.12.
+
+## 2012.02.17 Version 0.6.11 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.11.
+
+## 2012.02.02, Version 0.6.10 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.10.
+
+## 2012.01.27, Version 0.6.9 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.9.
+
+## 2012.01.19, Version 0.6.8 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.8.
+
+## 2012.01.06, Version 0.6.7 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.7.
+
+## 2011.12.14, Version 0.6.6 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.6.
+
+## 2011.12.04, Version 0.6.5 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.5.
+
+## 2011.12.02, Version 0.6.4 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.4.
+
+## 2011.11.25, Version 0.6.3 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.3.
+
+## 2011.11.18, Version 0.6.2 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.2.
+
+## 2011.11.11, Version 0.6.1 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.1.
+
+## 2011.11.04, Version 0.6.0 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.6.0.
+
+## 2011.10.21, Version 0.5.10 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.10.
+
+## 2011.10.10, Version 0.5.9 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.9.
+
+## 2011.09.30, Version 0.5.8 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.8.
+
+## 2011.09.16, Version 0.5.7 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.7.
+
+## 2011.09.08, Version 0.5.6 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.6.
+
+## 2011.08.26, Version 0.5.5 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.5.
+
+## 2011.08.12, Version 0.5.4 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.4.
+
+## 2011.08.01, Version 0.5.3 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.3.
+
+## 2011.07.22, Version 0.5.2 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.2.
+
+## 2011.07.14, Version 0.5.1 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.1.
+
+## 2011.07.05, Version 0.5.0 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.5.0.
+
+## 2011.09.15, Version 0.4.12 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.12.
+
+## 2011.08.17, Version 0.4.11 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.11.
+
+## 2011.07.19, Version 0.4.10 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.10.
+
+## 2011.06.29, Version 0.4.9 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.9.
+
+## 2011.05.20, Version 0.4.8 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.8.
+
+## 2011.04.22, Version 0.4.7 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.7.
+
+## 2011.04.13, Version 0.4.6 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.6.
+
+## 2011.04.01, Version 0.4.5 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.5.
+
+## 2011.03.26, Version 0.4.4 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.4.
+
+## 2011.03.18, Version 0.4.3 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.3.
+
+## 2011.03.02, Version 0.4.2 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.2.
+
+## 2011.02.19, Version 0.4.1 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.1.
+
+## 2011.02.10, Version 0.4.0 (stable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.4.0.
+
+## 2011.02.04, Version 0.3.8 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.8.
+
+## 2011.01.27, Version 0.3.7 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.7.
+
+## 2011.01.21, Version 0.3.6 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.6.
+
+## 2011.01.16, Version 0.3.5 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.5.
+
+## 2011.01.08, Version 0.3.4 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.4.
+
+## 2011.01.02, Version 0.3.3 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.3.
+
+## 2010.12.16, Version 0.3.2 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.2.
+
+## 2010.11.16, Version 0.3.1 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.1.
+
+## 2010.10.23, Version 0.3.0 (unstable)
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.3.0.
+
+## 2010.08.20, Version 0.2.0
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.2.0.
+
+## 2010.08.13, Version 0.1.104
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.104.
+
+## 2010.08.04, Version 0.1.103
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.103.
+
+## 2010.07.25, Version 0.1.102
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.102.
+
+## 2010.07.16, Version 0.1.101
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.101.
+
+## 2010.07.03, Version 0.1.100
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.100.
+
+## 2010.06.21, Version 0.1.99
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.99.
+
+## 2010.06.11, Version 0.1.98
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.98.
+
+## 2010.05.29, Version 0.1.97
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.97.
+
+## 2010.05.21, Version 0.1.96
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.96.
+
+## 2010.05.13, Version 0.1.95
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.95.
+
+## 2010.05.06, Version 0.1.94
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.94.
+
+## 2010.04.29, Version 0.1.93
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.93.
+
+## 2010.04.23, Version 0.1.92
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.92.
+
+## 2010.04.15, Version 0.1.91
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.91.
+
+## 2010.04.09, Version 0.1.90
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.90.
+
+## 2010.03.19, Version 0.1.33
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.33.
+
+## 2010.03.12, Version 0.1.32
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.32.
+
+## 2010.03.05, Version 0.1.31
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.31.
+
+## 2010.02.22, Version 0.1.30
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.30.
+
+## 2010.02.17, Version 0.1.29
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.29.
+
+## 2010.02.09, Version 0.1.28
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.28.
+
+## 2010.02.03, Version 0.1.27
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.27.
+
+## 2010.01.20, Version 0.1.26
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.26.
+
+## 2010.01.09, Version 0.1.25
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.25.
+
+## 2009.12.31, Version 0.1.24
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.24.
+
+## 2009.12.22, Version 0.1.23
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.23.
+
+## 2009.12.19, Version 0.1.22
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.22.
+
+## 2009.12.06, Version 0.1.21
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.21.
+
+## 2009.11.28, Version 0.1.20
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.20.
+
+## 2009.11.28, Version 0.1.19
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.19.
+
+## 2009.11.17, Version 0.1.18
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.18.
+
+## 2009.11.07, Version 0.1.17
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.17.
+
+## 2009.11.03, Version 0.1.16
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.16.
+
+## 2009.10.28, Version 0.1.15
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.15.
+
+## 2009.10.09, Version 0.1.14
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.14.
+
+## 2009.09.30, Version 0.1.13
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.13.
+
+## 2009.09.24, Version 0.1.12
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.12.
+
+## 2009.09.18, Version 0.1.11
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.11.
+
+## 2009.09.11, Version 0.1.10
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.10.
+
+## 2009.09.05, Version 0.1.9
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.9.
+
+## 2009.09.04, Version 0.1.8
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.8.
+
+## 2009.08.27, Version 0.1.7
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.7.
+
+## 2009.08.22, Version 0.1.6
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.6.
+
+## 2009.08.21, Version 0.1.5
+
+Moved to doc/changelogs/CHANGELOG\_V6.md#6.0.0.
+
+## 2009.08.13, Version 0.1.4
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.4.
+
+## 2009.08.06, Version 0.1.3
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.3.
+
+## 2009.08.01, Version 0.1.2
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.2.
+
+## 2009.07.27, Version 0.1.1
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.1.
+
+## 2009.06.30, Version 0.1.0
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.1.0.
+
+## 2009.06.24, Version 0.0.6
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.0.6.
+
+## 2009.06.18, Version 0.0.5
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.0.5.
+
+## 2009.06.13, Version 0.0.4
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.0.4.
+
+## 2009.06.11, Version 0.0.3
+
+Moved to doc/changelogs/CHANGELOG\_ARCHIVE.md#0.0.3.
diff --git a/.tools/node-v24.18.0-win-x64/LICENSE b/.tools/node-v24.18.0-win-x64/LICENSE
new file mode 100644
index 0000000..2842efa
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/LICENSE
@@ -0,0 +1,2946 @@
+Node.js is licensed for use as follows:
+
+"""
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+This license applies to parts of Node.js originating from the
+https://github.com/joyent/node repository:
+
+"""
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+The Node.js license applies to all parts of Node.js that are not externally
+maintained libraries.
+
+The externally maintained libraries used by Node.js are:
+
+- Acorn, located at deps/acorn, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (C) 2012-2022 by various contributors (see AUTHORS)
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ """
+
+- c-ares, located at deps/cares, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) 1998 Massachusetts Institute of Technology
+ Copyright (c) 2007 - 2023 Daniel Stenberg with many contributors, see AUTHORS
+ file.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- merve, located at deps/merve, is licensed as follows:
+ """
+ Copyright 2026 Yagiz Nizipli
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- ittapi, located at deps/v8/third_party/ittapi, is licensed as follows:
+ """
+ Copyright (c) 2019 Intel Corporation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- amaro, located at deps/amaro, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) Marco Ippolito and Amaro contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- swc, located at deps/amaro/dist, is licensed as follows:
+ """
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2024 SWC contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ """
+
+- ICU, located at deps/icu-small, is licensed as follows:
+ """
+ UNICODE LICENSE V3
+
+ COPYRIGHT AND PERMISSION NOTICE
+
+ Copyright © 2016-2025 Unicode, Inc.
+
+ NOTICE TO USER: Carefully read the following legal agreement. BY
+ DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
+ SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+ TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
+ DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of data files and any associated documentation (the "Data Files") or
+ software and any associated documentation (the "Software") to deal in the
+ Data Files or Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, and/or sell
+ copies of the Data Files or Software, and to permit persons to whom the
+ Data Files or Software are furnished to do so, provided that either (a)
+ this copyright and permission notice appear with all copies of the Data
+ Files or Software, or (b) this copyright and permission notice appear in
+ associated Documentation.
+
+ THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+ THIRD PARTY RIGHTS.
+
+ IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
+ BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
+ FILES OR SOFTWARE.
+
+ Except as contained in this notice, the name of a copyright holder shall
+ not be used in advertising or otherwise to promote the sale, use or other
+ dealings in these Data Files or Software without prior written
+ authorization of the copyright holder.
+
+ SPDX-License-Identifier: Unicode-3.0
+
+ ----------------------------------------------------------------------
+
+ Third-Party Software Licenses
+
+ This section contains third-party software notices and/or additional
+ terms for licensed third-party software components included within ICU
+ libraries.
+
+ ----------------------------------------------------------------------
+
+ ICU License - ICU 1.8.1 to ICU 57.1
+
+ COPYRIGHT AND PERMISSION NOTICE
+
+ Copyright (c) 1995-2016 International Business Machines Corporation and others
+ All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, and/or sell copies of the Software, and to permit persons
+ to whom the Software is furnished to do so, provided that the above
+ copyright notice(s) and this permission notice appear in all copies of
+ the Software and that both the above copyright notice(s) and this
+ permission notice appear in supporting documentation.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+ SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ Except as contained in this notice, the name of a copyright holder
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ of the copyright holder.
+
+ All trademarks and registered trademarks mentioned herein are the
+ property of their respective owners.
+
+ ----------------------------------------------------------------------
+
+ Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ # The Google Chrome software developed by Google is licensed under
+ # the BSD license. Other software included in this distribution is
+ # provided under other licenses, as set forth below.
+ #
+ # The BSD License
+ # http://opensource.org/licenses/bsd-license.php
+ # Copyright (C) 2006-2008, Google Inc.
+ #
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # Redistributions of source code must retain the above copyright notice,
+ # this list of conditions and the following disclaimer.
+ # Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided with
+ # the distribution.
+ # Neither the name of Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ # The word list in cjdict.txt are generated by combining three word lists
+ # listed below with further processing for compound word breaking. The
+ # frequency is generated with an iterative training against Google web
+ # corpora.
+ #
+ # * Libtabe (Chinese)
+ # - https://sourceforge.net/project/?group_id=1519
+ # - Its license terms and conditions are shown below.
+ #
+ # * IPADIC (Japanese)
+ # - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ # - Its license terms and conditions are shown below.
+ #
+ # ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ # /*
+ # * Copyright (c) 1999 TaBE Project.
+ # * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ # * All rights reserved.
+ # *
+ # * Redistribution and use in source and binary forms, with or without
+ # * modification, are permitted provided that the following conditions
+ # * are met:
+ # *
+ # * . Redistributions of source code must retain the above copyright
+ # * notice, this list of conditions and the following disclaimer.
+ # * . Redistributions in binary form must reproduce the above copyright
+ # * notice, this list of conditions and the following disclaimer in
+ # * the documentation and/or other materials provided with the
+ # * distribution.
+ # * . Neither the name of the TaBE Project nor the names of its
+ # * contributors may be used to endorse or promote products derived
+ # * from this software without specific prior written permission.
+ # *
+ # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # * OF THE POSSIBILITY OF SUCH DAMAGE.
+ # */
+ #
+ # /*
+ # * Copyright (c) 1999 Computer Systems and Communication Lab,
+ # * Institute of Information Science, Academia
+ # * Sinica. All rights reserved.
+ # *
+ # * Redistribution and use in source and binary forms, with or without
+ # * modification, are permitted provided that the following conditions
+ # * are met:
+ # *
+ # * . Redistributions of source code must retain the above copyright
+ # * notice, this list of conditions and the following disclaimer.
+ # * . Redistributions in binary form must reproduce the above copyright
+ # * notice, this list of conditions and the following disclaimer in
+ # * the documentation and/or other materials provided with the
+ # * distribution.
+ # * . Neither the name of the Computer Systems and Communication Lab
+ # * nor the names of its contributors may be used to endorse or
+ # * promote products derived from this software without specific
+ # * prior written permission.
+ # *
+ # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # * OF THE POSSIBILITY OF SUCH DAMAGE.
+ # */
+ #
+ # Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
+ # University of Illinois
+ # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ # ---------------COPYING.libtabe-----END--------------------------------
+ #
+ #
+ # ---------------COPYING.ipadic-----BEGIN-------------------------------
+ #
+ # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ # and Technology. All Rights Reserved.
+ #
+ # Use, reproduction, and distribution of this software is permitted.
+ # Any copy of this software, whether in its original form or modified,
+ # must include both the above copyright notice and the following
+ # paragraphs.
+ #
+ # Nara Institute of Science and Technology (NAIST),
+ # the copyright holders, disclaims all warranties with regard to this
+ # software, including all implied warranties of merchantability and
+ # fitness, in no event shall NAIST be liable for
+ # any special, indirect or consequential damages or any damages
+ # whatsoever resulting from loss of use, data or profits, whether in an
+ # action of contract, negligence or other tortuous action, arising out
+ # of or in connection with the use or performance of this software.
+ #
+ # A large portion of the dictionary entries
+ # originate from ICOT Free Software. The following conditions for ICOT
+ # Free Software applies to the current dictionary as well.
+ #
+ # Each User may also freely distribute the Program, whether in its
+ # original form or modified, to any third party or parties, PROVIDED
+ # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ # on, or be attached to, the Program, which is distributed substantially
+ # in the same form as set out herein and that such intended
+ # distribution, if actually made, will neither violate or otherwise
+ # contravene any of the laws and regulations of the countries having
+ # jurisdiction over the User or the intended distribution itself.
+ #
+ # NO WARRANTY
+ #
+ # The program was produced on an experimental basis in the course of the
+ # research and development conducted during the project and is provided
+ # to users as so produced on an experimental basis. Accordingly, the
+ # program is provided without any warranty whatsoever, whether express,
+ # implied, statutory or otherwise. The term "warranty" used herein
+ # includes, but is not limited to, any warranty of the quality,
+ # performance, merchantability and fitness for a particular purpose of
+ # the program and the nonexistence of any infringement or violation of
+ # any right of any third party.
+ #
+ # Each user of the program will agree and understand, and be deemed to
+ # have agreed and understood, that there is no warranty whatsoever for
+ # the program and, accordingly, the entire risk arising from or
+ # otherwise connected with the program is assumed by the user.
+ #
+ # Therefore, neither ICOT, the copyright holder, or any other
+ # organization that participated in or was otherwise related to the
+ # development of the program and their respective officials, directors,
+ # officers and other employees shall be held liable for any and all
+ # damages, including, without limitation, general, special, incidental
+ # and consequential damages, arising out of or otherwise in connection
+ # with the use or inability to use the program or any product, material
+ # or result produced or otherwise obtained by using the program,
+ # regardless of whether they have been advised of, or otherwise had
+ # knowledge of, the possibility of such damages at any time during the
+ # project or thereafter. Each user will be deemed to have agreed to the
+ # foregoing by his or her commencement of use of the program. The term
+ # "use" as used herein includes, but is not limited to, the use,
+ # modification, copying and distribution of the program and the
+ # production of secondary products from the program.
+ #
+ # In the case where the program, whether in its original form or
+ # modified, was distributed or delivered to or received by a user from
+ # any person, organization or entity other than ICOT, unless it makes or
+ # grants independently of ICOT any specific warranty to the user in
+ # writing, such person, organization or entity, will also be exempted
+ # from and not be held liable to the user for any such damages as noted
+ # above as far as the program is concerned.
+ #
+ # ---------------COPYING.ipadic-----END----------------------------------
+
+ ----------------------------------------------------------------------
+
+ Lao Word Break Dictionary Data (laodict.txt)
+
+ # Copyright (C) 2016 and later: Unicode, Inc. and others.
+ # License & terms of use: http://www.unicode.org/copyright.html
+ # Copyright (c) 2015 International Business Machines Corporation
+ # and others. All Rights Reserved.
+ #
+ # Project: https://github.com/rober42539/lao-dictionary
+ # Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
+ # License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
+ # (copied below)
+ #
+ # This file is derived from the above dictionary version of Nov 22, 2020
+ # ----------------------------------------------------------------------
+ # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # Redistributions of source code must retain the above copyright notice, this
+ # list of conditions and the following disclaimer. Redistributions in binary
+ # form must reproduce the above copyright notice, this list of conditions and
+ # the following disclaimer in the documentation and/or other materials
+ # provided with the distribution.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # OF THE POSSIBILITY OF SUCH DAMAGE.
+ # --------------------------------------------------------------------------
+
+ ----------------------------------------------------------------------
+
+ Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ # Copyright (c) 2014 International Business Machines Corporation
+ # and others. All Rights Reserved.
+ #
+ # This list is part of a project hosted at:
+ # github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ # --------------------------------------------------------------------------
+ # Copyright (c) 2013, LeRoy Benjamin Sharon
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met: Redistributions of source code must retain the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer. Redistributions in binary form must reproduce the
+ # above copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided
+ # with the distribution.
+ #
+ # Neither the name Myanmar Karen Word Lists, nor the names of its
+ # contributors may be used to endorse or promote products derived
+ # from this software without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ # --------------------------------------------------------------------------
+
+ ----------------------------------------------------------------------
+
+ Time Zone Database
+
+ ICU uses the public domain data and code derived from Time Zone
+ Database for its time zone support. The ownership of the TZ database
+ is explained in BCP 175: Procedure for Maintaining the Time Zone
+ Database section 7.
+
+ # 7. Database Ownership
+ #
+ # The TZ database itself is not an IETF Contribution or an IETF
+ # document. Rather it is a pre-existing and regularly updated work
+ # that is in the public domain, and is intended to remain in the
+ # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
+ # not apply to the TZ Database or contributions that individuals make
+ # to it. Should any claims be made and substantiated against the TZ
+ # Database, the organization that is providing the IANA
+ # Considerations defined in this RFC, under the memorandum of
+ # understanding with the IETF, currently ICANN, may act in accordance
+ # with all competent court orders. No ownership claims will be made
+ # by ICANN or the IETF Trust on the database or the code. Any person
+ # making a contribution to the database or code waives all rights to
+ # future claims in that contribution or in the TZ Database.
+
+ ----------------------------------------------------------------------
+
+ Google double-conversion
+
+ Copyright 2006-2011, the V8 project authors. All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ----------------------------------------------------------------------
+
+ JSON parsing library (nlohmann/json)
+
+ File: vendor/json/upstream/single_include/nlohmann/json.hpp (only for ICU4C)
+
+ MIT License
+
+ Copyright (c) 2013-2022 Niels Lohmann
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ ----------------------------------------------------------------------
+
+ File: aclocal.m4 (only for ICU4C)
+ Section: pkg.m4 - Macros to locate and utilise pkg-config.
+
+ Copyright © 2004 Scott James Remnant .
+ Copyright © 2012-2015 Dan Nicholson
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ As a special exception to the GNU General Public License, if you
+ distribute this file as part of a program that contains a
+ configuration script generated by Autoconf, you may include it under
+ the same distribution terms that you use for the rest of that
+ program.
+
+ (The condition for the exception is fulfilled because
+ ICU4C includes a configuration script generated by Autoconf,
+ namely the `configure` script.)
+
+ ----------------------------------------------------------------------
+
+ File: config.guess (only for ICU4C)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see .
+
+ As a special exception to the GNU General Public License, if you
+ distribute this file as part of a program that contains a
+ configuration script generated by Autoconf, you may include it under
+ the same distribution terms that you use for the rest of that
+ program. This Exception is an additional permission under section 7
+ of the GNU General Public License, version 3 ("GPLv3").
+
+ (The condition for the exception is fulfilled because
+ ICU4C includes a configuration script generated by Autoconf,
+ namely the `configure` script.)
+
+ ----------------------------------------------------------------------
+
+ File: install-sh (only for ICU4C)
+
+ Copyright 1991 by the Massachusetts Institute of Technology
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of M.I.T. not be used in advertising or
+ publicity pertaining to distribution of the software without specific,
+ written prior permission. M.I.T. makes no representations about the
+ suitability of this software for any purpose. It is provided "as is"
+ without express or implied warranty.
+
+ ----------------------------------------------------------------------
+
+ File: sorttable.js (only for ICU4J)
+
+ The MIT Licence, for code from kryogenix.org
+
+ Code downloaded from the Browser Experiments section of kryogenix.org is
+ licenced under the so-called MIT licence. The licence is below.
+
+ Copyright (c) 1997-date Stuart Langridge
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- libuv, located at deps/uv, is licensed as follows:
+ """
+ Copyright (c) 2015-present libuv project contributors.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+ This license applies to parts of libuv originating from the
+ https://github.com/joyent/libuv repository:
+
+ ====
+
+ Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+
+ ====
+
+ This license applies to all parts of libuv that are not externally
+ maintained libraries.
+
+ The externally maintained libraries used by libuv are:
+
+ - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license.
+
+ - inet_pton and inet_ntop implementations, contained in src/inet.c, are
+ copyright the Internet Systems Consortium, Inc., and licensed under the ISC
+ license.
+ """
+
+- LIEF, located at deps/LIEF, is licensed as follows:
+ """
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2017 - 2025 R. Thomas
+ Copyright 2017 - 2025 Quarkslab
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ """
+
+- llhttp, located at deps/llhttp, is licensed as follows:
+ """
+ This software is licensed under the MIT License.
+
+ Copyright Fedor Indutny, 2018.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to permit
+ persons to whom the Software is furnished to do so, subject to the
+ following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+ NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- corepack, located at deps/corepack, is licensed as follows:
+ """
+ **Copyright © Corepack contributors**
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- undici, located at deps/undici, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) Matteo Collina and Undici contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- postject, located at test/fixtures/postject-copy, is licensed as follows:
+ """
+ Postject is licensed for use as follows:
+
+ """
+ MIT License
+
+ Copyright (c) 2022 Postman, Inc
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+ The Postject license applies to all parts of Postject that are not externally
+ maintained libraries.
+
+ The externally maintained libraries used by Postject are:
+
+ - LIEF, located at vendor/LIEF, is licensed as follows:
+ """
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2017 - 2022 R. Thomas
+ Copyright 2017 - 2022 Quarkslab
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ """
+ """
+
+- OpenSSL, located at deps/openssl, is licensed as follows:
+ """
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+ """
+
+- Punycode.js, located at lib/punycode.js, is licensed as follows:
+ """
+ Copyright Mathias Bynens
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- V8, located at deps/v8, is licensed as follows:
+ """
+ This license applies to all parts of V8 that are not externally
+ maintained libraries. The externally maintained libraries used by V8
+ are:
+
+ - PCRE test suite, located in
+ test/mjsunit/third_party/regexp-pcre/regexp-pcre.js. This is based on the
+ test suite from PCRE-7.3, which is copyrighted by the University
+ of Cambridge and Google, Inc. The copyright notice and license
+ are embedded in regexp-pcre.js.
+
+ - Layout tests, located in test/mjsunit/third_party/object-keys. These are
+ based on layout tests from webkit.org which are copyrighted by
+ Apple Computer, Inc. and released under a 3-clause BSD license.
+
+ - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
+ assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
+ assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
+ assembler-x64.cc, assembler-x64.h, assembler.cc and assembler.h.
+ This code is copyrighted by Sun Microsystems Inc. and released
+ under a 3-clause BSD license.
+
+ - Valgrind client API header, located at third_party/valgrind/valgrind.h
+ This is released under the BSD license.
+
+ - The Wasm C/C++ API headers, located at third_party/wasm-api/wasm.{h,hh}
+ This is released under the Apache license. The API's upstream prototype
+ implementation also formed the basis of V8's implementation in
+ src/wasm/c-api.cc.
+
+ These libraries have their own licenses; we recommend you read them,
+ as their terms may differ from the terms below.
+
+ Further license information can be found in LICENSE files located in
+ sub-directories.
+
+ Copyright 2014, the V8 project authors. All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- SipHash, located at deps/v8/src/third_party/siphash, is licensed as follows:
+ """
+ SipHash reference C implementation
+
+ Copyright (c) 2016 Jean-Philippe Aumasson
+
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to the public
+ domain worldwide. This software is distributed without any warranty.
+ """
+
+- zlib, located at deps/zlib, is licensed as follows:
+ """
+ zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.3.1, January 22nd, 2024
+
+ Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+ """
+
+- simdjson, located at deps/simdjson, is licensed as follows:
+ """
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2018-2025 The simdjson authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ """
+
+- simdutf, located at deps/v8/third_party/simdutf, is licensed as follows:
+ """
+ Copyright 2021 The simdutf authors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- ada, located at deps/ada, is licensed as follows:
+ """
+ Copyright 2023 Yagiz Nizipli and Daniel Lemire
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- minimatch, located at deps/minimatch, is licensed as follows:
+ """
+ # Blue Oak Model License
+
+ Version 1.0.0
+
+ ## Purpose
+
+ This license gives everyone as much permission to work with
+ this software as possible, while protecting contributors
+ from liability.
+
+ ## Acceptance
+
+ In order to receive this license, you must agree to its
+ rules. The rules of this license are both obligations
+ under that agreement and conditions to your license.
+ You must not do anything with this software that triggers
+ a rule that you cannot or will not follow.
+
+ ## Copyright
+
+ Each contributor licenses you to do everything with this
+ software that would otherwise infringe that contributor's
+ copyright in it.
+
+ ## Notices
+
+ You must ensure that everyone who gets a copy of
+ any part of this software from you, with or without
+ changes, also gets the text of this license or a link to
+ .
+
+ ## Excuse
+
+ If anyone notifies you in writing that you have not
+ complied with [Notices](#notices), you can keep your
+ license by taking all practical steps to comply within 30
+ days after the notice. If you do not do so, your license
+ ends immediately.
+
+ ## Patent
+
+ Each contributor licenses you to do everything with this
+ software that would otherwise infringe any patent claims
+ they can license or become able to license.
+
+ ## Reliability
+
+ No contributor can revoke this license.
+
+ ## No Liability
+
+ **_As far as the law allows, this software comes as is,
+ without any warranty or condition, and no contributor
+ will be liable to anyone for any damages related to this
+ software or this license, under any kind of legal claim._**
+ """
+
+- npm, located at deps/npm, is licensed as follows:
+ """
+ The npm application
+ Copyright (c) npm, Inc. and Contributors
+ Licensed on the terms of The Artistic License 2.0
+
+ Node package dependencies of the npm application
+ Copyright (c) their respective copyright owners
+ Licensed on their respective license terms
+
+ The npm public registry at https://registry.npmjs.org
+ and the npm website at https://www.npmjs.com
+ Operated by npm, Inc.
+ Use governed by terms published on https://www.npmjs.com
+
+ "Node.js"
+ Trademark Joyent, Inc., https://joyent.com
+ Neither npm nor npm, Inc. are affiliated with Joyent, Inc.
+
+ The Node.js application
+ Project of Node Foundation, https://nodejs.org
+
+ The npm Logo
+ Copyright (c) Mathias Pettersson and Brian Hammond
+
+ "Gubblebum Blocky" typeface
+ Copyright (c) Tjarda Koster, https://jelloween.deviantart.com
+ Used with permission
+
+ --------
+
+ The Artistic License 2.0
+
+ Copyright (c) 2000-2006, The Perl Foundation.
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ This license establishes the terms under which a given free software
+ Package may be copied, modified, distributed, and/or redistributed.
+ The intent is that the Copyright Holder maintains some artistic
+ control over the development of that Package while still keeping the
+ Package available as open source and free software.
+
+ You are always permitted to make arrangements wholly outside of this
+ license directly with the Copyright Holder of a given Package. If the
+ terms of this license do not permit the full use that you propose to
+ make of the Package, you should contact the Copyright Holder and seek
+ a different licensing arrangement.
+
+ Definitions
+
+ "Copyright Holder" means the individual(s) or organization(s)
+ named in the copyright notice for the entire Package.
+
+ "Contributor" means any party that has contributed code or other
+ material to the Package, in accordance with the Copyright Holder's
+ procedures.
+
+ "You" and "your" means any person who would like to copy,
+ distribute, or modify the Package.
+
+ "Package" means the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection and/or of
+ those files. A given Package may consist of either the Standard
+ Version, or a Modified Version.
+
+ "Distribute" means providing a copy of the Package or making it
+ accessible to anyone else, or in the case of a company or
+ organization, to others outside of your company or organization.
+
+ "Distributor Fee" means any fee that you charge for Distributing
+ this Package or providing support for this Package to another
+ party. It does not mean licensing fees.
+
+ "Standard Version" refers to the Package if it has not been
+ modified, or has been modified only in ways explicitly requested
+ by the Copyright Holder.
+
+ "Modified Version" means the Package, if it has been changed, and
+ such changes were not explicitly requested by the Copyright
+ Holder.
+
+ "Original License" means this Artistic License as Distributed with
+ the Standard Version of the Package, in its current version or as
+ it may be modified by The Perl Foundation in the future.
+
+ "Source" form means the source code, documentation source, and
+ configuration files for the Package.
+
+ "Compiled" form means the compiled bytecode, object code, binary,
+ or any other form resulting from mechanical transformation or
+ translation of the Source form.
+
+ Permission for Use and Modification Without Distribution
+
+ (1) You are permitted to use the Standard Version and create and use
+ Modified Versions for any purpose without restriction, provided that
+ you do not Distribute the Modified Version.
+
+ Permissions for Redistribution of the Standard Version
+
+ (2) You may Distribute verbatim copies of the Source form of the
+ Standard Version of this Package in any medium without restriction,
+ either gratis or for a Distributor Fee, provided that you duplicate
+ all of the original copyright notices and associated disclaimers. At
+ your discretion, such verbatim copies may or may not include a
+ Compiled form of the Package.
+
+ (3) You may apply any bug fixes, portability changes, and other
+ modifications made available from the Copyright Holder. The resulting
+ Package will still be considered the Standard Version, and as such
+ will be subject to the Original License.
+
+ Distribution of Modified Versions of the Package as Source
+
+ (4) You may Distribute your Modified Version as Source (either gratis
+ or for a Distributor Fee, and with or without a Compiled form of the
+ Modified Version) provided that you clearly document how it differs
+ from the Standard Version, including, but not limited to, documenting
+ any non-standard features, executables, or modules, and provided that
+ you do at least ONE of the following:
+
+ (a) make the Modified Version available to the Copyright Holder
+ of the Standard Version, under the Original License, so that the
+ Copyright Holder may include your modifications in the Standard
+ Version.
+
+ (b) ensure that installation of your Modified Version does not
+ prevent the user installing or running the Standard Version. In
+ addition, the Modified Version must bear a name that is different
+ from the name of the Standard Version.
+
+ (c) allow anyone who receives a copy of the Modified Version to
+ make the Source form of the Modified Version available to others
+ under
+
+ (i) the Original License or
+
+ (ii) a license that permits the licensee to freely copy,
+ modify and redistribute the Modified Version using the same
+ licensing terms that apply to the copy that the licensee
+ received, and requires that the Source form of the Modified
+ Version, and of any works derived from it, be made freely
+ available in that license fees are prohibited but Distributor
+ Fees are allowed.
+
+ Distribution of Compiled Forms of the Standard Version
+ or Modified Versions without the Source
+
+ (5) You may Distribute Compiled forms of the Standard Version without
+ the Source, provided that you include complete instructions on how to
+ get the Source of the Standard Version. Such instructions must be
+ valid at the time of your distribution. If these instructions, at any
+ time while you are carrying out such distribution, become invalid, you
+ must provide new instructions on demand or cease further distribution.
+ If you provide valid instructions or cease distribution within thirty
+ days after you become aware that the instructions are invalid, then
+ you do not forfeit any of your rights under this license.
+
+ (6) You may Distribute a Modified Version in Compiled form without
+ the Source, provided that you comply with Section 4 with respect to
+ the Source of the Modified Version.
+
+ Aggregating or Linking the Package
+
+ (7) You may aggregate the Package (either the Standard Version or
+ Modified Version) with other packages and Distribute the resulting
+ aggregation provided that you do not charge a licensing fee for the
+ Package. Distributor Fees are permitted, and licensing fees for other
+ components in the aggregation are permitted. The terms of this license
+ apply to the use and Distribution of the Standard or Modified Versions
+ as included in the aggregation.
+
+ (8) You are permitted to link Modified and Standard Versions with
+ other works, to embed the Package in a larger work of your own, or to
+ build stand-alone binary or bytecode versions of applications that
+ include the Package, and Distribute the result without restriction,
+ provided the result does not expose a direct interface to the Package.
+
+ Items That are Not Considered Part of a Modified Version
+
+ (9) Works (including, but not limited to, modules and scripts) that
+ merely extend or make use of the Package, do not, by themselves, cause
+ the Package to be a Modified Version. In addition, such works are not
+ considered parts of the Package itself, and are not subject to the
+ terms of this license.
+
+ General Provisions
+
+ (10) Any use, modification, and distribution of the Standard or
+ Modified Versions is governed by this Artistic License. By using,
+ modifying or distributing the Package, you accept this license. Do not
+ use, modify, or distribute the Package, if you do not accept this
+ license.
+
+ (11) If your Modified Version has been derived from a Modified
+ Version made by someone other than you, you are nevertheless required
+ to ensure that your Modified Version complies with the requirements of
+ this license.
+
+ (12) This license does not grant you the right to use any trademark,
+ service mark, tradename, or logo of the Copyright Holder.
+
+ (13) This license includes the non-exclusive, worldwide,
+ free-of-charge patent license to make, have made, use, offer to sell,
+ sell, import and otherwise transfer the Package with respect to any
+ patent claims licensable by the Copyright Holder that are necessarily
+ infringed by the Package. If you institute patent litigation
+ (including a cross-claim or counterclaim) against any party alleging
+ that the Package constitutes direct or contributory patent
+ infringement, then this Artistic License to you shall terminate on the
+ date that such litigation is filed.
+
+ (14) Disclaimer of Warranty:
+ THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+ IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+ NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+ LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ --------
+ """
+
+- GYP, located at tools/gyp, is licensed as follows:
+ """
+ Copyright (c) 2020 Node.js contributors. All rights reserved.
+ Copyright (c) 2009 Google Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- inspector_protocol, located at deps/inspector_protocol, is licensed as follows:
+ """
+ // Copyright 2016 The Chromium Authors.
+ //
+ // Redistribution and use in source and binary forms, with or without
+ // modification, are permitted provided that the following conditions are
+ // met:
+ //
+ // * Redistributions of source code must retain the above copyright
+ // notice, this list of conditions and the following disclaimer.
+ // * Redistributions in binary form must reproduce the above
+ // copyright notice, this list of conditions and the following disclaimer
+ // in the documentation and/or other materials provided with the
+ // distribution.
+ // * Neither the name of Google Inc. nor the names of its
+ // contributors may be used to endorse or promote products derived from
+ // this software without specific prior written permission.
+ //
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- jinja2, located at tools/inspector_protocol/jinja2, is licensed as follows:
+ """
+ Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
+
+ Some rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- markupsafe, located at tools/inspector_protocol/markupsafe, is licensed as follows:
+ """
+ Copyright (c) 2010 by Armin Ronacher and contributors. See AUTHORS
+ for more details.
+
+ Some rights reserved.
+
+ Redistribution and use in source and binary forms of the software as well
+ as documentation, with or without modification, are permitted provided
+ that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+ """
+
+- cpplint.py, located at tools/cpplint.py, is licensed as follows:
+ """
+ Copyright (c) 2009 Google Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- gypi_to_gn.py, located at tools/gypi_to_gn.py, is licensed as follows:
+ """
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Google LLC nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- gtest, located at deps/googletest, is licensed as follows:
+ """
+ Copyright 2008, Google Inc.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- nghttp2, located at deps/nghttp2, is licensed as follows:
+ """
+ The MIT License
+
+ Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
+ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- large_pages, located at src/large_pages, is licensed as follows:
+ """
+ Copyright (C) 2018 Intel Corporation
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom
+ the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+ OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- caja, located at lib/internal/freeze_intrinsics.js, is licensed as follows:
+ """
+ Adapted from SES/Caja - Copyright (C) 2011 Google Inc.
+ Copyright (C) 2018 Agoric
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ """
+
+- brotli, located at deps/brotli, is licensed as follows:
+ """
+ Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ """
+
+- zstd, located at deps/zstd, is licensed as follows:
+ """
+ BSD License
+
+ For Zstandard software
+
+ Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name Facebook, nor Meta, nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- HdrHistogram, located at deps/histogram, is licensed as follows:
+ """
+ The code in this repository code was Written by Gil Tene, Michael Barker,
+ and Matt Warren, and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/
+
+ For users of this code who wish to consume it under the "BSD" license
+ rather than under the public domain or CC0 contribution text mentioned
+ above, the code found under this directory is *also* provided under the
+ following license (commonly referred to as the BSD 2-Clause License). This
+ license does not detract from the above stated release of the code into
+ the public domain, and simply represents an additional license granted by
+ the Author.
+
+ -----------------------------------------------------------------------------
+ ** Beginning of "BSD 2-Clause License" text. **
+
+ Copyright (c) 2012, 2013, 2014 Gil Tene
+ Copyright (c) 2014 Michael Barker
+ Copyright (c) 2014 Matt Warren
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+ """
+
+- node-heapdump, located at src/heap_utils.cc, is licensed as follows:
+ """
+ ISC License
+
+ Copyright (c) 2012, Ben Noordhuis
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ === src/compat.h src/compat-inl.h ===
+
+ ISC License
+
+ Copyright (c) 2014, StrongLoop Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ """
+
+- rimraf, located at lib/internal/fs/rimraf.js, is licensed as follows:
+ """
+ The ISC License
+
+ Copyright (c) Isaac Z. Schlueter and Contributors
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ """
+
+- uvwasi, located at deps/uvwasi, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) 2019 Colin Ihrig and Contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- ngtcp2, located at deps/ngtcp2/ngtcp2/, is licensed as follows:
+ """
+ The MIT License
+
+ Copyright (c) 2016 ngtcp2 contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- nghttp3, located at deps/ngtcp2/nghttp3/, is licensed as follows:
+ """
+ The MIT License
+
+ Copyright (c) 2019 nghttp3 contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- node-fs-extra, located at lib/internal/fs/cp, is licensed as follows:
+ """
+ (The MIT License)
+
+ Copyright (c) 2011-2017 JP Richardson
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
+ (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+ OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ """
+
+- on-exit-leak-free, located at lib/internal/process/finalization, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) 2021 Matteo Collina
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
+
+- sonic-boom, located at lib/internal/streams/fast-utf8-stream.js, is licensed as follows:
+ """
+ MIT License
+
+ Copyright (c) 2017 Matteo Collina
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+ """
diff --git a/.tools/node-v24.18.0-win-x64/README.md b/.tools/node-v24.18.0-win-x64/README.md
new file mode 100644
index 0000000..c201252
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/README.md
@@ -0,0 +1,907 @@
+# Node.js
+
+Node.js is an open-source, cross-platform JavaScript runtime environment.
+
+For information on using Node.js, see the [Node.js website][].
+
+The Node.js project uses an [open governance model](./GOVERNANCE.md). The
+[OpenJS Foundation][] provides support for the project.
+
+Contributors are expected to act in a collaborative manner to move
+the project forward. We encourage the constructive exchange of contrary
+opinions and compromise. The [TSC](./GOVERNANCE.md#technical-steering-committee)
+reserves the right to limit or block contributors who repeatedly act in ways
+that discourage, exhaust, or otherwise negatively affect other participants.
+
+**This project has a [Code of Conduct][].**
+
+## Table of contents
+
+* [Support](#support)
+* [Release types](#release-types)
+ * [Download](#download)
+ * [Current and LTS releases](#current-and-lts-releases)
+ * [Nightly releases](#nightly-releases)
+ * [API documentation](#api-documentation)
+ * [Verifying binaries](#verifying-binaries)
+* [Building Node.js](#building-nodejs)
+* [Security](#security)
+* [Contributing to Node.js](#contributing-to-nodejs)
+* [Current project team members](#current-project-team-members)
+ * [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)
+ * [Collaborators](#collaborators)
+ * [Triagers](#triagers)
+ * [Release keys](#release-keys)
+* [License](#license)
+
+## Support
+
+Looking for help? Check out the
+[instructions for getting support](.github/SUPPORT.md).
+
+## Release types
+
+* **Current**: Under active development. Code for the Current release is in the
+ branch for its major version number (for example,
+ [v22.x](https://github.com/nodejs/node/tree/v22.x)). Node.js releases a new
+ major version every 6 months, allowing for breaking changes. This happens in
+ April and October every year. Releases appearing each October have a support
+ life of 8 months. Releases appearing each April convert to LTS (see below)
+ each October.
+* **LTS**: Releases that receive Long Term Support, with a focus on stability
+ and security. Every even-numbered major version will become an LTS release.
+ LTS releases receive 12 months of _Active LTS_ support and a further 18 months
+ of _Maintenance_. LTS release lines have alphabetically-ordered code names,
+ beginning with v4 Argon. There are no breaking changes or feature additions,
+ except in some special circumstances.
+* **Nightly**: Code from the Current branch built every 24-hours when there are
+ changes. Use with caution.
+
+Current and LTS releases follow [semantic versioning](https://semver.org). A
+member of the Release Team [signs](#release-keys) each Current and LTS release.
+For more information, see the
+[Release README](https://github.com/nodejs/Release#readme).
+
+### Download
+
+Binaries, installers, and source tarballs are available at
+.
+
+#### Current and LTS releases
+
+
+
+The [latest](https://nodejs.org/download/release/latest/) directory is an
+alias for the latest Current release. The latest-_codename_ directory is an
+alias for the latest release from an LTS line. For example, the
+[latest-hydrogen](https://nodejs.org/download/release/latest-hydrogen/)
+directory contains the latest Hydrogen (Node.js 18) release.
+
+#### Nightly releases
+
+
+
+Each directory and filename includes the version (e.g., `v22.0.0`),
+followed by the UTC date (e.g., `20240424` for April 24, 2024),
+and the short commit SHA of the HEAD of the release (e.g., `ddd0a9e494`).
+For instance, a full directory name might look like `v22.0.0-nightly20240424ddd0a9e494`.
+
+#### API documentation
+
+Documentation for the latest Current release is at .
+Version-specific documentation is available in each release directory in the
+_docs_ subdirectory. Version-specific documentation is also at
+.
+
+### Verifying binaries
+
+Download directories contain a `SHASUMS256.txt.asc` file with SHA checksums for the
+files and the releaser PGP signature.
+
+You can get a trusted keyring from nodejs/release-keys, e.g. using `curl`:
+
+```bash
+curl -fsLo "/path/to/nodejs-keyring.kbx" "https://github.com/nodejs/release-keys/raw/HEAD/gpg/pubring.kbx"
+```
+
+Alternatively, you can import the releaser keys in your default keyring, see
+[Release keys](#release-keys) for commands on how to do that.
+
+Then, you can verify the files you've downloaded locally
+(if you're using your default keyring, pass `--keyring="${GNUPGHOME:-~/.gnupg}/pubring.kbx"`):
+
+```bash
+curl -fsO "https://nodejs.org/dist/${VERSION}/SHASUMS256.txt.asc" \
+&& gpgv --keyring="/path/to/nodejs-keyring.kbx" --output SHASUMS256.txt < SHASUMS256.txt.asc \
+&& shasum --check SHASUMS256.txt --ignore-missing
+```
+
+## Building Node.js
+
+See [BUILDING.md](BUILDING.md) for instructions on how to build Node.js from
+source and a list of supported platforms.
+
+## Security
+
+For information on reporting security vulnerabilities in Node.js, see
+[SECURITY.md](./SECURITY.md).
+
+## Contributing to Node.js
+
+* [Contributing to the project][]
+* [Working Groups][]
+* [Strategic initiatives][]
+* [Technical values and prioritization][]
+
+## Current project team members
+
+For information about the governance of the Node.js project, see
+[GOVERNANCE.md](./GOVERNANCE.md).
+
+
+
+### TSC (Technical Steering Committee)
+
+#### TSC voting members
+
+
+
+* [aduh95](https://github.com/aduh95) -
+ **Antoine du Hamel** <> (he/him)
+* [anonrig](https://github.com/anonrig) -
+ **Yagiz Nizipli** <> (he/him)
+* [benjamingr](https://github.com/benjamingr) -
+ **Benjamin Gruenbaum** <>
+* [BridgeAR](https://github.com/BridgeAR) -
+ **Ruben Bridgewater** <> (he/him)
+* [gireeshpunathil](https://github.com/gireeshpunathil) -
+ **Gireesh Punathil** <> (he/him)
+* [jasnell](https://github.com/jasnell) -
+ **James M Snell** <> (he/him)
+* [joyeecheung](https://github.com/joyeecheung) -
+ **Joyee Cheung** <> (she/her)
+* [legendecas](https://github.com/legendecas) -
+ **Chengzhong Wu** <> (he/him)
+* [marco-ippolito](https://github.com/marco-ippolito) -
+ **Marco Ippolito** <> (he/him)
+* [mcollina](https://github.com/mcollina) -
+ **Matteo Collina** <> (he/him)
+* [panva](https://github.com/panva) -
+ **Filip Skokan** <> (he/him)
+* [RafaelGSS](https://github.com/RafaelGSS) -
+ **Rafael Gonzaga** <> (he/him)
+* [RaisinTen](https://github.com/RaisinTen) -
+ **Darshan Sen** <> (he/him)
+* [richardlau](https://github.com/richardlau) -
+ **Richard Lau** <>
+* [ronag](https://github.com/ronag) -
+ **Robert Nagy** <>
+* [ruyadorno](https://github.com/ruyadorno) -
+ **Ruy Adorno** <> (he/him)
+* [ShogunPanda](https://github.com/ShogunPanda) -
+ **Paolo Insogna** <> (he/him)
+* [targos](https://github.com/targos) -
+ **Michaël Zasso** <> (he/him)
+* [tniessen](https://github.com/tniessen) -
+ **Tobias Nießen** <> (he/him)
+
+#### TSC regular members
+
+* [BethGriggs](https://github.com/BethGriggs) -
+ **Beth Griggs** <> (she/her)
+* [bnoordhuis](https://github.com/bnoordhuis) -
+ **Ben Noordhuis** <>
+* [cjihrig](https://github.com/cjihrig) -
+ **Colin Ihrig** <> (he/him)
+* [codebytere](https://github.com/codebytere) -
+ **Shelley Vohr** <> (she/her)
+* [GeoffreyBooth](https://github.com/GeoffreyBooth) -
+ **Geoffrey Booth** <> (he/him)
+* [MoLow](https://github.com/MoLow) -
+ **Moshe Atlow** <> (he/him)
+* [Trott](https://github.com/Trott) -
+ **Rich Trott** <> (he/him)
+
+
+
+TSC emeriti members
+
+#### TSC emeriti members
+
+* [addaleax](https://github.com/addaleax) -
+ **Anna Henningsen** <> (she/her)
+* [apapirovski](https://github.com/apapirovski) -
+ **Anatoli Papirovski** <> (he/him)
+* [ChALkeR](https://github.com/ChALkeR) -
+ **Сковорода Никита Андреевич** <> (he/him)
+* [chrisdickinson](https://github.com/chrisdickinson) -
+ **Chris Dickinson** <>
+* [danbev](https://github.com/danbev) -
+ **Daniel Bevenius** <> (he/him)
+* [danielleadams](https://github.com/danielleadams) -
+ **Danielle Adams** <> (she/her)
+* [evanlucas](https://github.com/evanlucas) -
+ **Evan Lucas** <> (he/him)
+* [fhinkel](https://github.com/fhinkel) -
+ **Franziska Hinkelmann** <> (she/her)
+* [Fishrock123](https://github.com/Fishrock123) -
+ **Jeremiah Senkpiel** <> (he/they)
+* [gabrielschulhof](https://github.com/gabrielschulhof) -
+ **Gabriel Schulhof** <>
+* [gibfahn](https://github.com/gibfahn) -
+ **Gibson Fahnestock** <> (he/him)
+* [indutny](https://github.com/indutny) -
+ **Fedor Indutny** <>
+* [isaacs](https://github.com/isaacs) -
+ **Isaac Z. Schlueter** <>
+* [joshgav](https://github.com/joshgav) -
+ **Josh Gavant** <>
+* [mhdawson](https://github.com/mhdawson) -
+ **Michael Dawson** <> (he/him)
+* [mmarchini](https://github.com/mmarchini) -
+ **Mary Marchini** <> (she/her)
+* [mscdex](https://github.com/mscdex) -
+ **Brian White** <>
+* [MylesBorins](https://github.com/MylesBorins) -
+ **Myles Borins** <> (he/him)
+* [nebrius](https://github.com/nebrius) -
+ **Bryan Hughes** <>
+* [ofrobots](https://github.com/ofrobots) -
+ **Ali Ijaz Sheikh** <> (he/him)
+* [orangemocha](https://github.com/orangemocha) -
+ **Alexis Campailla** <>
+* [piscisaureus](https://github.com/piscisaureus) -
+ **Bert Belder** <>
+* [rvagg](https://github.com/rvagg) -
+ **Rod Vagg** <>
+* [sam-github](https://github.com/sam-github) -
+ **Sam Roberts** <>
+* [shigeki](https://github.com/shigeki) -
+ **Shigeki Ohtsu** <> (he/him)
+* [thefourtheye](https://github.com/thefourtheye) -
+ **Sakthipriyan Vairamani** <> (he/him)
+* [TimothyGu](https://github.com/TimothyGu) -
+ **Tiancheng "Timothy" Gu** <> (he/him)
+* [trevnorris](https://github.com/trevnorris) -
+ **Trevor Norris** <>
+
+
+
+
+
+### Collaborators
+
+* [abmusse](https://github.com/abmusse) -
+ **Abdirahim Musse** <>
+* [addaleax](https://github.com/addaleax) -
+ **Anna Henningsen** <> (she/her)
+* [Aditi-1400](https://github.com/Aditi-1400) -
+ **Aditi Singh** <> (she/her)
+* [aduh95](https://github.com/aduh95) -
+ **Antoine du Hamel** <> (he/him) - [Support me](https://github.com/sponsors/aduh95)
+* [anonrig](https://github.com/anonrig) -
+ **Yagiz Nizipli** <> (he/him) - [Support me](https://github.com/sponsors/anonrig)
+* [atlowChemi](https://github.com/atlowChemi) -
+ **Chemi Atlow** <> (he/him)
+* [avivkeller](https://github.com/avivkeller) -
+ **Aviv Keller** <> (he/him) - [Support me](https://github.com/sponsors/avivkeller)
+* [Ayase-252](https://github.com/Ayase-252) -
+ **Qingyu Deng** <>
+* [bengl](https://github.com/bengl) -
+ **Bryan English** <> (he/him)
+* [benjamingr](https://github.com/benjamingr) -
+ **Benjamin Gruenbaum** <>
+* [BethGriggs](https://github.com/BethGriggs) -
+ **Beth Griggs** <> (she/her)
+* [bnb](https://github.com/bnb) -
+ **Tierney Cyren** <> (they/them)
+* [bnoordhuis](https://github.com/bnoordhuis) -
+ **Ben Noordhuis** <>
+* [BridgeAR](https://github.com/BridgeAR) -
+ **Ruben Bridgewater** <> (he/him)
+* [cclauss](https://github.com/cclauss) -
+ **Christian Clauss** <> (he/him)
+* [ChALkeR](https://github.com/ChALkeR) -
+ **Сковорода Никита Андреевич** <> (he/him)
+* [cjihrig](https://github.com/cjihrig) -
+ **Colin Ihrig** <> (he/him)
+* [codebytere](https://github.com/codebytere) -
+ **Shelley Vohr** <> (she/her)
+* [cola119](https://github.com/cola119) -
+ **Kohei Ueno** <> (he/him)
+* [daeyeon](https://github.com/daeyeon) -
+ **Daeyeon Jeong** <> (he/him)
+* [dario-piotrowicz](https://github.com/dario-piotrowicz) -
+ **Dario Piotrowicz** <> (he/him)
+* [deokjinkim](https://github.com/deokjinkim) -
+ **Deokjin Kim** <> (he/him)
+* [edsadr](https://github.com/edsadr) -
+ **Adrian Estrada** <> (he/him)
+* [ErickWendel](https://github.com/ErickWendel) -
+ **Erick Wendel** <> (he/him)
+* [Ethan-Arrowood](https://github.com/Ethan-Arrowood) -
+ **Ethan Arrowood** <> (he/him)
+* [fhinkel](https://github.com/fhinkel) -
+ **Franziska Hinkelmann** <> (she/her)
+* [Flarna](https://github.com/Flarna) -
+ **Gerhard Stöbich** <> (he/they)
+* [gabrielschulhof](https://github.com/gabrielschulhof) -
+ **Gabriel Schulhof** <>
+* [geeksilva97](https://github.com/geeksilva97) -
+ **Edy Silva** <> (he/him)
+* [gengjiawen](https://github.com/gengjiawen) -
+ **Jiawen Geng** <>
+* [GeoffreyBooth](https://github.com/GeoffreyBooth) -
+ **Geoffrey Booth** <> (he/him)
+* [gireeshpunathil](https://github.com/gireeshpunathil) -
+ **Gireesh Punathil** <> (he/him)
+* [gurgunday](https://github.com/gurgunday) -
+ **Gürgün Dayıoğlu** <> (he/him)
+* [guybedford](https://github.com/guybedford) -
+ **Guy Bedford** <> (he/him)
+* [H4ad](https://github.com/H4ad) -
+ **Vinícius Lourenço Claro Cardoso** <> (he/him)
+* [HarshithaKP](https://github.com/HarshithaKP) -
+ **Harshitha K P** <> (she/her)
+* [himself65](https://github.com/himself65) -
+ **Zeyu "Alex" Yang** <> (he/him)
+* [hybrist](https://github.com/hybrist) -
+ **Jan Martin** <> (he/him)
+* [IlyasShabi](https://github.com/IlyasShabi) -
+ **Ilyas Shabi** <> (he/him)
+* [islandryu](https://github.com/islandryu) -
+ **Ryuhei Shima** <> (he/him)
+* [jakecastelli](https://github.com/jakecastelli) -
+ **Jake Yuesong Li** <> (he/him)
+* [JakobJingleheimer](https://github.com/JakobJingleheimer) -
+ **Jacob Smith** <> (he/him)
+* [jasnell](https://github.com/jasnell) -
+ **James M Snell** <> (he/him)
+* [jazelly](https://github.com/jazelly) -
+ **Jason Zhang** <> (he/him)
+* [joyeecheung](https://github.com/joyeecheung) -
+ **Joyee Cheung** <> (she/her)
+* [juanarbol](https://github.com/juanarbol) -
+ **Juan José Arboleda** <> (he/him)
+* [JungMinu](https://github.com/JungMinu) -
+ **Minwoo Jung** <> (he/him)
+* [KhafraDev](https://github.com/KhafraDev) -
+ **Matthew Aitken** <> (he/him)
+* [legendecas](https://github.com/legendecas) -
+ **Chengzhong Wu** <> (he/him)
+* [lemire](https://github.com/lemire) -
+ **Daniel Lemire** <>
+* [LiviaMedeiros](https://github.com/LiviaMedeiros) -
+ **LiviaMedeiros** <>
+* [ljharb](https://github.com/ljharb) -
+ **Jordan Harband** <>
+* [lpinca](https://github.com/lpinca) -
+ **Luigi Pinca** <> (he/him)
+* [Lxxyx](https://github.com/Lxxyx) -
+ **Zijian Liu** <> (he/him)
+* [marco-ippolito](https://github.com/marco-ippolito) -
+ **Marco Ippolito** <> (he/him) - [Support me](https://github.com/sponsors/marco-ippolito)
+* [marsonya](https://github.com/marsonya) -
+ **Akhil Marsonya** <> (he/him)
+* [MattiasBuelens](https://github.com/MattiasBuelens) -
+ **Mattias Buelens** <> (he/him)
+* [mcollina](https://github.com/mcollina) -
+ **Matteo Collina** <> (he/him) - [Support me](https://github.com/sponsors/mcollina)
+* [meixg](https://github.com/meixg) -
+ **Xuguang Mei** <> (he/him)
+* [MoLow](https://github.com/MoLow) -
+ **Moshe Atlow** <> (he/him)
+* [MrJithil](https://github.com/MrJithil) -
+ **Jithil P Ponnan** <> (he/him)
+* [ovflowd](https://github.com/ovflowd) -
+ **Claudio Wunder** <> (he/they)
+* [panva](https://github.com/panva) -
+ **Filip Skokan** <> (he/him) - [Support me](https://github.com/sponsors/panva)
+* [pimterry](https://github.com/pimterry) -
+ **Tim Perry** <> (he/him)
+* [pmarchini](https://github.com/pmarchini) -
+ **Pietro Marchini** <> (he/him)
+* [puskin](https://github.com/puskin) -
+ **Giovanni Bucci** <> (he/him)
+* [Qard](https://github.com/Qard) -
+ **Stephen Belanger** <> (he/him)
+* [RafaelGSS](https://github.com/RafaelGSS) -
+ **Rafael Gonzaga** <> (he/him) - [Support me](https://github.com/sponsors/RafaelGSS)
+* [RaisinTen](https://github.com/RaisinTen) -
+ **Darshan Sen** <> (he/him) - [Support me](https://github.com/sponsors/RaisinTen)
+* [Renegade334](https://github.com/Renegade334) -
+ **René** <>
+* [richardlau](https://github.com/richardlau) -
+ **Richard Lau** <>
+* [rluvaton](https://github.com/rluvaton) -
+ **Raz Luvaton** <> (he/him)
+* [ronag](https://github.com/ronag) -
+ **Robert Nagy** <>
+* [ruyadorno](https://github.com/ruyadorno) -
+ **Ruy Adorno** <> (he/him)
+* [santigimeno](https://github.com/santigimeno) -
+ **Santiago Gimeno** <>
+* [ShogunPanda](https://github.com/ShogunPanda) -
+ **Paolo Insogna** <> (he/him)
+* [srl295](https://github.com/srl295) -
+ **Steven R Loomis** <>
+* [StefanStojanovic](https://github.com/StefanStojanovic) -
+ **Stefan Stojanovic** <> (he/him)
+* [sxa](https://github.com/sxa) -
+ **Stewart X Addison** <> (he/him)
+* [targos](https://github.com/targos) -
+ **Michaël Zasso** <> (he/him)
+* [theanarkh](https://github.com/theanarkh) -
+ **theanarkh** <> (he/him)
+* [tniessen](https://github.com/tniessen) -
+ **Tobias Nießen** <> (he/him)
+* [trivikr](https://github.com/trivikr) -
+ **Trivikram Kamat** <>
+* [Trott](https://github.com/Trott) -
+ **Rich Trott** <> (he/him)
+* [UlisesGascon](https://github.com/UlisesGascon) -
+ **Ulises Gascón** <> (he/him)
+* [vmoroz](https://github.com/vmoroz) -
+ **Vladimir Morozov** <> (he/him)
+* [watilde](https://github.com/watilde) -
+ **Daijiro Wachi** <> (he/him)
+* [ZYSzys](https://github.com/ZYSzys) -
+ **Yongsheng Zhang** <> (he/him)
+
+
+
+Emeriti
+
+
+
+### Collaborator emeriti
+
+* [ak239](https://github.com/ak239) -
+ **Aleksei Koziatinskii** <>
+* [andrasq](https://github.com/andrasq) -
+ **Andras** <>
+* [AndreasMadsen](https://github.com/AndreasMadsen) -
+ **Andreas Madsen** <> (he/him)
+* [AnnaMag](https://github.com/AnnaMag) -
+ **Anna M. Kedzierska** <>
+* [antsmartian](https://github.com/antsmartian) -
+ **Anto Aravinth** <> (he/him)
+* [apapirovski](https://github.com/apapirovski) -
+ **Anatoli Papirovski** <> (he/him)
+* [aqrln](https://github.com/aqrln) -
+ **Alexey Orlenko** <> (he/him)
+* [AshCripps](https://github.com/AshCripps) -
+ **Ash Cripps** <>
+* [bcoe](https://github.com/bcoe) -
+ **Ben Coe** <> (he/him)
+* [bmeck](https://github.com/bmeck) -
+ **Bradley Farias** <>
+* [bmeurer](https://github.com/bmeurer) -
+ **Benedikt Meurer** <>
+* [boneskull](https://github.com/boneskull) -
+ **Christopher Hiller** <> (he/him)
+* [brendanashworth](https://github.com/brendanashworth) -
+ **Brendan Ashworth** <>
+* [bzoz](https://github.com/bzoz) -
+ **Bartosz Sosnowski** <>
+* [calvinmetcalf](https://github.com/calvinmetcalf) -
+ **Calvin Metcalf** <>
+* [chrisdickinson](https://github.com/chrisdickinson) -
+ **Chris Dickinson** <>
+* [claudiorodriguez](https://github.com/claudiorodriguez) -
+ **Claudio Rodriguez** <>
+* [danbev](https://github.com/danbev) -
+ **Daniel Bevenius** <> (he/him)
+* [danielleadams](https://github.com/danielleadams) -
+ **Danielle Adams** <> (she/her)
+* [DavidCai1111](https://github.com/DavidCai1111) -
+ **David Cai** <> (he/him)
+* [davisjam](https://github.com/davisjam) -
+ **Jamie Davis** <> (he/him)
+* [debadree25](https://github.com/debadree25) -
+ **Debadree Chatterjee** <> (he/him)
+* [devnexen](https://github.com/devnexen) -
+ **David Carlier** <>
+* [devsnek](https://github.com/devsnek) -
+ **Gus Caplan** <> (they/them)
+* [digitalinfinity](https://github.com/digitalinfinity) -
+ **Hitesh Kanwathirtha** <> (he/him)
+* [dmabupt](https://github.com/dmabupt) -
+ **Xu Meng** <> (he/him)
+* [dnlup](https://github.com/dnlup) -
+ **dnlup** <>
+* [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) -
+ **Robert Jefe Lindstaedt** <>
+* [estliberitas](https://github.com/estliberitas) -
+ **Alexander Makarenko** <>
+* [eugeneo](https://github.com/eugeneo) -
+ **Eugene Ostroukhov** <>
+* [evanlucas](https://github.com/evanlucas) -
+ **Evan Lucas** <> (he/him)
+* [F3n67u](https://github.com/F3n67u) -
+ **Feng Yu** <> (he/him)
+* [firedfox](https://github.com/firedfox) -
+ **Daniel Wang** <>
+* [Fishrock123](https://github.com/Fishrock123) -
+ **Jeremiah Senkpiel** <> (he/they)
+* [gdams](https://github.com/gdams) -
+ **George Adams** <> (he/him)
+* [geek](https://github.com/geek) -
+ **Wyatt Preul** <>
+* [gibfahn](https://github.com/gibfahn) -
+ **Gibson Fahnestock** <> (he/him)
+* [glentiki](https://github.com/glentiki) -
+ **Glen Keane** <> (he/him)
+* [hashseed](https://github.com/hashseed) -
+ **Yang Guo** <> (he/him)
+* [hiroppy](https://github.com/hiroppy) -
+ **Yuta Hiroto** <> (he/him)
+* [iansu](https://github.com/iansu) -
+ **Ian Sutherland** <>
+* [iarna](https://github.com/iarna) -
+ **Rebecca Turner** <>
+* [imran-iq](https://github.com/imran-iq) -
+ **Imran Iqbal** <>
+* [imyller](https://github.com/imyller) -
+ **Ilkka Myller** <>
+* [indutny](https://github.com/indutny) -
+ **Fedor Indutny** <>
+* [isaacs](https://github.com/isaacs) -
+ **Isaac Z. Schlueter** <>
+* [italoacasas](https://github.com/italoacasas) -
+ **Italo A. Casas** <> (he/him)
+* [JacksonTian](https://github.com/JacksonTian) -
+ **Jackson Tian** <>
+* [jasongin](https://github.com/jasongin) -
+ **Jason Ginchereau** <>
+* [jbergstroem](https://github.com/jbergstroem) -
+ **Johan Bergström** <>
+* [jdalton](https://github.com/jdalton) -
+ **John-David Dalton** <>
+* [jhamhader](https://github.com/jhamhader) -
+ **Yuval Brik** <>
+* [joaocgreis](https://github.com/joaocgreis) -
+ **João Reis** <>
+* [joesepi](https://github.com/joesepi) -
+ **Joe Sepi** <> (he/him)
+* [JonasBa](https://github.com/JonasBa) -
+ **Jonas Badalic** <> (he/him)
+* [joshgav](https://github.com/joshgav) -
+ **Josh Gavant** <>
+* [julianduque](https://github.com/julianduque) -
+ **Julian Duque** <> (he/him)
+* [kfarnung](https://github.com/kfarnung) -
+ **Kyle Farnung** <> (he/him)
+* [kunalspathak](https://github.com/kunalspathak) -
+ **Kunal Pathak** <>
+* [kuriyosh](https://github.com/kuriyosh) -
+ **Yoshiki Kurihara** <> (he/him)
+* [kvakil](https://github.com/kvakil) -
+ **Keyhan Vakil** <>
+* [lance](https://github.com/lance) -
+ **Lance Ball** <> (he/him)
+* [Leko](https://github.com/Leko) -
+ **Shingo Inoue** <> (he/him)
+* [Linkgoron](https://github.com/Linkgoron) -
+ **Nitzan Uziely** <>
+* [lucamaraschi](https://github.com/lucamaraschi) -
+ **Luca Maraschi** <> (he/him)
+* [lukekarrys](https://github.com/lukekarrys) -
+ **Luke Karrys** <> (he/him)
+* [lundibundi](https://github.com/lundibundi) -
+ **Denys Otrishko** <> (he/him)
+* [lxe](https://github.com/lxe) -
+ **Aleksey Smolenchuk** <>
+* [maclover7](https://github.com/maclover7) -
+ **Jon Moss** <> (he/him)
+* [mafintosh](https://github.com/mafintosh) -
+ **Mathias Buus** <> (he/him)
+* [matthewloring](https://github.com/matthewloring) -
+ **Matthew Loring** <>
+* [Mesteery](https://github.com/Mesteery) -
+ **Mestery** <> (he/him)
+* [mhdawson](https://github.com/mhdawson) -
+ **Michael Dawson** <> (he/him)
+* [micnic](https://github.com/micnic) -
+ **Nicu Micleușanu** <> (he/him)
+* [mikeal](https://github.com/mikeal) -
+ **Mikeal Rogers** <>
+* [miladfarca](https://github.com/miladfarca) -
+ **Milad Fa** <> (he/him)
+* [mildsunrise](https://github.com/mildsunrise) -
+ **Alba Mendez** <> (she/her)
+* [misterdjules](https://github.com/misterdjules) -
+ **Julien Gilli** <>
+* [mmarchini](https://github.com/mmarchini) -
+ **Mary Marchini** <> (she/her)
+* [monsanto](https://github.com/monsanto) -
+ **Christopher Monsanto** <>
+* [MoonBall](https://github.com/MoonBall) -
+ **Chen Gang** <>
+* [mscdex](https://github.com/mscdex) -
+ **Brian White** <>
+* [MylesBorins](https://github.com/MylesBorins) -
+ **Myles Borins** <> (he/him)
+* [not-an-aardvark](https://github.com/not-an-aardvark) -
+ **Teddy Katz** <> (he/him)
+* [ofrobots](https://github.com/ofrobots) -
+ **Ali Ijaz Sheikh** <> (he/him)
+* [Olegas](https://github.com/Olegas) -
+ **Oleg Elifantiev** <>
+* [orangemocha](https://github.com/orangemocha) -
+ **Alexis Campailla** <>
+* [othiym23](https://github.com/othiym23) -
+ **Forrest L Norvell** <> (they/them/themself)
+* [oyyd](https://github.com/oyyd) -
+ **Ouyang Yadong** <> (he/him)
+* [petkaantonov](https://github.com/petkaantonov) -
+ **Petka Antonov** <>
+* [phillipj](https://github.com/phillipj) -
+ **Phillip Johnsen** <>
+* [piscisaureus](https://github.com/piscisaureus) -
+ **Bert Belder** <>
+* [pmq20](https://github.com/pmq20) -
+ **Minqi Pan** <>
+* [PoojaDurgad](https://github.com/PoojaDurgad) -
+ **Pooja D P** <> (she/her)
+* [princejwesley](https://github.com/princejwesley) -
+ **Prince John Wesley** <>
+* [psmarshall](https://github.com/psmarshall) -
+ **Peter Marshall** <> (he/him)
+* [puzpuzpuz](https://github.com/puzpuzpuz) -
+ **Andrey Pechkurov** <> (he/him)
+* [refack](https://github.com/refack) -
+ **Refael Ackermann (רפאל פלחי)** <> (he/him/הוא/אתה)
+* [rexagod](https://github.com/rexagod) -
+ **Pranshu Srivastava** <> (he/him)
+* [rickyes](https://github.com/rickyes) -
+ **Ricky Zhou** <<0x19951125@gmail.com>> (he/him)
+* [rlidwka](https://github.com/rlidwka) -
+ **Alex Kocharin** <>
+* [rmg](https://github.com/rmg) -
+ **Ryan Graham** <>
+* [robertkowalski](https://github.com/robertkowalski) -
+ **Robert Kowalski** <>
+* [romankl](https://github.com/romankl) -
+ **Roman Klauke** <>
+* [ronkorving](https://github.com/ronkorving) -
+ **Ron Korving** <>
+* [RReverser](https://github.com/RReverser) -
+ **Ingvar Stepanyan** <>
+* [rubys](https://github.com/rubys) -
+ **Sam Ruby** <>
+* [rvagg](https://github.com/rvagg) -
+ **Rod Vagg** <>
+* [ryzokuken](https://github.com/ryzokuken) -
+ **Ujjwal Sharma** <> (he/him)
+* [saghul](https://github.com/saghul) -
+ **Saúl Ibarra Corretgé** <>
+* [sam-github](https://github.com/sam-github) -
+ **Sam Roberts** <>
+* [sebdeckers](https://github.com/sebdeckers) -
+ **Sebastiaan Deckers** <>
+* [seishun](https://github.com/seishun) -
+ **Nikolai Vavilov** <>
+* [shigeki](https://github.com/shigeki) -
+ **Shigeki Ohtsu** <> (he/him)
+* [shisama](https://github.com/shisama) -
+ **Masashi Hirano** <> (he/him)
+* [silverwind](https://github.com/silverwind) -
+ **Roman Reiss** <>
+* [starkwang](https://github.com/starkwang) -
+ **Weijia Wang** <>
+* [stefanmb](https://github.com/stefanmb) -
+ **Stefan Budeanu** <>
+* [tellnes](https://github.com/tellnes) -
+ **Christian Tellnes** <>
+* [thefourtheye](https://github.com/thefourtheye) -
+ **Sakthipriyan Vairamani** <> (he/him)
+* [thlorenz](https://github.com/thlorenz) -
+ **Thorsten Lorenz** <>
+* [TimothyGu](https://github.com/TimothyGu) -
+ **Tiancheng "Timothy" Gu** <> (he/him)
+* [trevnorris](https://github.com/trevnorris) -
+ **Trevor Norris** <>
+* [tunniclm](https://github.com/tunniclm) -
+ **Mike Tunnicliffe** <>
+* [vdeturckheim](https://github.com/vdeturckheim) -
+ **Vladimir de Turckheim** <> (he/him)
+* [vkurchatkin](https://github.com/vkurchatkin) -
+ **Vladimir Kurchatkin** <>
+* [VoltrexKeyva](https://github.com/VoltrexKeyva) -
+ **Mohammed Keyvanzadeh** <> (he/him)
+* [vsemozhetbyt](https://github.com/vsemozhetbyt) -
+ **Vse Mozhet Byt** <> (he/him)
+* [watson](https://github.com/watson) -
+ **Thomas Watson** <>
+* [whitlockjc](https://github.com/whitlockjc) -
+ **Jeremy Whitlock** <>
+* [XadillaX](https://github.com/XadillaX) -
+ **Khaidi Chu** <> (he/him)
+* [yashLadha](https://github.com/yashLadha) -
+ **Yash Ladha** <> (he/him)
+* [yhwang](https://github.com/yhwang) -
+ **Yihong Wang** <>
+* [yorkie](https://github.com/yorkie) -
+ **Yorkie Liu** <>
+* [yosuke-furukawa](https://github.com/yosuke-furukawa) -
+ **Yosuke Furukawa** <>
+* [zcbenz](https://github.com/zcbenz) -
+ **Cheng Zhao** <> (he/him)
+
+
+
+
+
+Collaborators follow the [Collaborator Guide](./doc/contributing/collaborator-guide.md) in
+maintaining the Node.js project.
+
+### Triagers
+
+* [1ilsang](https://github.com/1ilsang) -
+ **Sangchul Lee** <<1ilsang.dev@gmail.com>> (he/him)
+* [bjohansebas](https://github.com/bjohansebas) -
+ **Sebastian Beltran** <>
+* [bmuenzenmeyer](https://github.com/bmuenzenmeyer) -
+ **Brian Muenzenmeyer** <> (he/him)
+* [efekrskl](https://github.com/efekrskl) -
+ **Efe Karasakal** <> (he/him)
+* [gireeshpunathil](https://github.com/gireeshpunathil) -
+ **Gireesh Punathil** <> (he/him)
+* [haramj](https://github.com/haramj) -
+ **Haram Jeong** <>
+* [HBSPS](https://github.com/HBSPS) -
+ **Wiyeong Seo** <>
+* [iam-frankqiu](https://github.com/iam-frankqiu) -
+ **Frank Qiu** <> (he/him)
+* [milesguicent](https://github.com/milesguicent) -
+ **Miles Guicent** <> (he/him)
+* [preveen-stack](https://github.com/preveen-stack) -
+ **Preveen Padmanabhan** <> (he/him)
+
+Triagers follow the [Triage Guide](./doc/contributing/issues.md#triaging-a-bug-report) when
+responding to new issues.
+
+### Release keys
+
+Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys):
+
+* **Antoine du Hamel** <>
+ `5BE8A3F6C8A5C01D106C0AD820B1A390B168D356`
+* **Juan José Arboleda** <>
+ `DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7`
+* **Marco Ippolito** <>
+ `CC68F5A3106FF448322E48ED27F5E38D5B0A215F`
+* **Michaël Zasso** <>
+ `8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600`
+* **Rafael Gonzaga** <>
+ `890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4`
+* **Richard Lau** <>
+ `C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C`
+* **Ruy Adorno** <>
+ `108F52B48DB57BB0CC439B2997B01419BD92F80A`
+* **Ulises Gascón** <>
+ `A363A499291CBBC940DD62E41F10027AF002F8B0`
+
+You can use the keyring the project maintains at
+.
+Alternatively, you can import them from a public key server. Have in mind that
+the project cannot guarantee the availability of the server nor the keys on
+that server.
+
+```bash
+gpg --keyserver hkps://keys.openpgp.org --recv-keys 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 # Antoine du Hamel
+gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda
+gpg --keyserver hkps://keys.openpgp.org --recv-keys CC68F5A3106FF448322E48ED27F5E38D5B0A215F # Marco Ippolito
+gpg --keyserver hkps://keys.openpgp.org --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 # Michaël Zasso
+gpg --keyserver hkps://keys.openpgp.org --recv-keys 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 # Rafael Gonzaga
+gpg --keyserver hkps://keys.openpgp.org --recv-keys C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C # Richard Lau
+gpg --keyserver hkps://keys.openpgp.org --recv-keys 108F52B48DB57BB0CC439B2997B01419BD92F80A # Ruy Adorno
+gpg --keyserver hkps://keys.openpgp.org --recv-keys A363A499291CBBC940DD62E41F10027AF002F8B0 # Ulises Gascón
+```
+
+See [Verifying binaries](#verifying-binaries) for how to use these keys to
+verify a downloaded file.
+
+
+
+Other keys used to sign some previous releases
+
+* **Antoine du Hamel** <>
+ `C0D6248439F1D5604AAFFB4021D900FFDB233756`
+* **Beth Griggs** <>
+ `4ED778F539E3634C779C87C6D7062848A1AB005C`
+* **Bryan English** <>
+ `141F07595B7B3FFE74309A937405533BE57C7D57`
+* **Chris Dickinson** <>
+ `9554F04D7259F04124DE6B476D5A82AC7E37093B`
+* **Colin Ihrig** <>
+ `94AE36675C464D64BAFA68DD7434390BDBE9B9C5`
+* **Danielle Adams** <>
+ `1C050899334244A8AF75E53792EF661D867B9DFA`
+ `74F12602B6F1C4E913FAA37AD3A89613643B6201`
+* **Evan Lucas** <>
+ `B9AE9905FFD7803F25714661B63B535A4C206CA9`
+* **Gibson Fahnestock** <>
+ `77984A986EBC2AA786BC0F66B01FBB92821C587A`
+* **Isaac Z. Schlueter** <>
+ `93C7E9E91B49E432C2F75674B0A78B0A6C481CF6`
+* **Italo A. Casas** <>
+ `56730D5401028683275BD23C23EFEFE93C4CFFFE`
+* **James M Snell** <>
+ `71DCFD284A79C3B38668286BC97EC7A07EDE3FC1`
+* **Jeremiah Senkpiel** <>
+ `FD3A5288F042B6850C66B31F09FE44734EB7990E`
+* **Juan José Arboleda** <>
+ `61FC681DFB92A079F1685E77973F295594EC4689`
+* **Julien Gilli** <>
+ `114F43EE0176B71C7BC219DD50A3051F888C628D`
+* **Myles Borins** <>
+ `C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8`
+* **Rod Vagg** <>
+ `DD8F2338BAE7501E3DD5AC78C273792F7D83545D`
+* **Ruben Bridgewater** <>
+ `A48C2BEE680E841632CD4E44F07496B3EB3C1762`
+* **Shelley Vohr** <>
+ `B9E2F5981AA6E0CD28160D9FF13993A75599653C`
+* **Timothy J Fontaine** <>
+ `7937DFD2AB06298B2293C3187D33FF9D0246406D`
+
+The project maintains a keyring able to verify all past releases of Node.js at
+.
+
+
+
+### Security release stewards
+
+When possible, the commitment to take slots in the
+security release steward rotation is made by companies in order
+to ensure individuals who act as security stewards have the
+support and recognition from their employer to be able to
+prioritize security releases. Security release stewards manage security
+releases on a rotation basis as outlined in the
+[security release process](./doc/contributing/security-release-process.md).
+
+* [Datadog](https://www.datadoghq.com/)
+ * [bengl](https://github.com/bengl) -
+ **Bryan English** <> (he/him)
+* [HeroDevs](https://www.herodevs.com/)
+ * [juanarbol](https://github.com/juanarbol) - OpenJS Slack handle: `juanarbol`
+ **Juan José Arboleda** <> (he/him)
+ * [marco-ippolito](https://github.com/marco-ippolito) - OpenJS Slack handle: `Marco Ippolito`
+ **Marco Ippolito** <> (he/him)
+* [NodeSource](https://nodesource.com/)
+ * [RafaelGSS](https://github.com/RafaelGSS) - OpenJS Slack handle: `RafaelGSS`
+ **Rafael Gonzaga** <> (he/him)
+* [Platformatic](https://platformatic.dev/)
+ * [mcollina](https://github.com/mcollina) - OpenJS Slack handle: `mcollina`
+ **Matteo Collina** <> (he/him)
+* [Red Hat](https://redhat.com) / [IBM](https://ibm.com)
+ * [BethGriggs](https://github.com/BethGriggs) -
+ **Beth Griggs** <> (she/her)
+ * [sxa](https://github.com/sxa) -
+ **Stewart X Addison** <> (he/him)
+
+## License
+
+Node.js is licensed under the [MIT License](https://opensource.org/licenses/MIT).
+
+This project also depends on external libraries that may use different open-source
+licenses. For a complete list of included licenses, please see the
+[LICENSE](https://github.com/nodejs/node/blob/main/LICENSE) file.
+
+If you are contributing documentation or source changes, please ensure your
+additions comply with the project’s license guidelines.
+
+[Code of Conduct]: https://github.com/nodejs/admin/blob/HEAD/CODE_OF_CONDUCT.md
+[Contributing to the project]: CONTRIBUTING.md
+[Node.js website]: https://nodejs.org/
+[OpenJS Foundation]: https://openjsf.org/
+[Strategic initiatives]: doc/contributing/strategic-initiatives.md
+[Technical values and prioritization]: doc/contributing/technical-values.md
+[Working Groups]: https://github.com/nodejs/TSC/blob/HEAD/WORKING_GROUPS.md
diff --git a/.tools/node-v24.18.0-win-x64/corepack b/.tools/node-v24.18.0-win-x64/corepack
new file mode 100644
index 0000000..04fc5cc
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/corepack
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/node_modules/corepack/dist/corepack.js" "$@"
+else
+ exec node "$basedir/node_modules/corepack/dist/corepack.js" "$@"
+fi
diff --git a/.tools/node-v24.18.0-win-x64/corepack.cmd b/.tools/node-v24.18.0-win-x64/corepack.cmd
new file mode 100644
index 0000000..d2262dd
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/corepack.cmd
@@ -0,0 +1,7 @@
+@SETLOCAL
+@IF EXIST "%~dp0\node.exe" (
+ "%~dp0\node.exe" "%~dp0\node_modules\corepack\dist\corepack.js" %*
+) ELSE (
+ @SET PATHEXT=%PATHEXT:;.JS;=;%
+ node "%~dp0\node_modules\corepack\dist\corepack.js" %*
+)
diff --git a/.tools/node-v24.18.0-win-x64/install_tools.bat b/.tools/node-v24.18.0-win-x64/install_tools.bat
new file mode 100644
index 0000000..066f5ad
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/install_tools.bat
@@ -0,0 +1,66 @@
+@echo off
+
+setlocal
+title Install Additional Tools for Node.js
+
+cls
+
+echo ====================================================
+echo Tools for Node.js Native Modules Installation Script
+echo ====================================================
+echo.
+echo This script will install Python and the Visual Studio Build Tools, necessary
+echo to compile Node.js native modules. Note that Chocolatey and required Windows
+echo updates will also be installed.
+echo.
+echo This will require about 7 GiB of free disk space, plus any space necessary to
+echo install Windows updates. This will take a while to run.
+echo.
+echo Please close all open programs for the duration of the installation. If the
+echo installation fails, please ensure Windows is fully updated, reboot your
+echo computer and try to run this again. This script can be found in the
+echo Start menu under Node.js.
+echo.
+echo You can close this window to stop now. Detailed instructions to install these
+echo tools manually are available at https://github.com/nodejs/node-gyp#on-windows
+echo.
+pause
+
+cls
+
+REM Adapted from https://github.com/Microsoft/windows-dev-box-setup-scripts/blob/79bbe5bdc4867088b3e074f9610932f8e4e192c2/README.md#legal
+echo Using this script downloads third party software
+echo ------------------------------------------------
+echo This script will direct to Chocolatey to install packages. By using
+echo Chocolatey to install a package, you are accepting the license for the
+echo application, executable(s), or other artifacts delivered to your machine as a
+echo result of a Chocolatey install. This acceptance occurs whether you know the
+echo license terms or not. Read and understand the license terms of the packages
+echo being installed and their dependencies prior to installation:
+echo - https://chocolatey.org/packages/chocolatey
+echo - https://chocolatey.org/packages/python
+echo - https://chocolatey.org/packages/visualstudio2026-workload-vctools
+echo.
+echo This script is provided AS-IS without any warranties of any kind
+echo ----------------------------------------------------------------
+echo Chocolatey has implemented security safeguards in their process to help
+echo protect the community from malicious or pirated software, but any use of this
+echo script is at your own risk. Please read the Chocolatey's legal terms of use
+echo as well as how the community repository for Chocolatey.org is maintained.
+echo.
+pause
+
+cls
+
+"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" ^
+-NoProfile ^
+-InputFormat None ^
+-ExecutionPolicy Bypass ^
+-Command Start-Process ^
+ '%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe' ^
+ -ArgumentList '-NoProfile -InputFormat None -ExecutionPolicy Bypass -Command ^
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; ^
+ iex ((New-Object System.Net.WebClient).DownloadString(''https://chocolatey.org/install.ps1'')); ^
+ choco upgrade -y python visualstudio2026-workload-vctools; ^
+ Read-Host ''Type ENTER to exit'' ' ^
+ -Verb RunAs
diff --git a/.tools/node-v24.18.0-win-x64/node.exe b/.tools/node-v24.18.0-win-x64/node.exe
new file mode 100644
index 0000000..51139dc
Binary files /dev/null and b/.tools/node-v24.18.0-win-x64/node.exe differ
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/CHANGELOG.md b/.tools/node-v24.18.0-win-x64/node_modules/corepack/CHANGELOG.md
new file mode 100644
index 0000000..be8dfa5
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/CHANGELOG.md
@@ -0,0 +1,621 @@
+# Changelog
+
+## [0.35.0](https://github.com/nodejs/corepack/compare/v0.34.7...v0.35.0) (2026-05-15)
+
+
+### ⚠ BREAKING CHANGES
+
+* Drop support for Node.js 20 and Node.js 25.
+* Switching to Node.js built-in proxy support, meaning that proxy support is now
+ gated by having `NODE_USE_ENV_PROXY` set as an environment variable.
+
+### Features
+
+* update package manager versions ([#820](https://github.com/nodejs/corepack/issues/820)) ([fdbd751](https://github.com/nodejs/corepack/commit/fdbd751d9851a50730925de053e9722963c2e135))
+
+
+### Bug Fixes
+
+* target node 22.22.2 in esbuild ([#845](https://github.com/nodejs/corepack/issues/845)) ([0f01502](https://github.com/nodejs/corepack/commit/0f01502fd8832649a573bc68e1851128f547646d))
+
+
+### Miscellaneous Chores
+
+* **deps:** bump engine support matrix ([88c602a](https://github.com/nodejs/corepack/commit/88c602a6ea3f75bf30dc1d071bdb488fae2c8276))
+* **deps:** drop Undici and `proxy-from-env` ([8167b0d](https://github.com/nodejs/corepack/commit/8167b0d65acc091af464ead019f7485cb512082f))
+
+## [0.34.7](https://github.com/nodejs/corepack/compare/v0.34.6...v0.34.7) (2026-04-17)
+
+
+### Bug Fixes
+
+* update package manager versions ([#790](https://github.com/nodejs/corepack/issues/790)) ([e8961d6](https://github.com/nodejs/corepack/commit/e8961d6bdc14b8141fbda008febdd3649022862c))
+
+## [0.34.6](https://github.com/nodejs/corepack/compare/v0.34.5...v0.34.6) (2026-01-23)
+
+
+### Bug Fixes
+
+* **docs:** fix PowerShell functions suggestions ([#784](https://github.com/nodejs/corepack/issues/784)) ([b1544c8](https://github.com/nodejs/corepack/commit/b1544c82a63781bd77d49f7b566fefd0104b7d6d))
+* update package manager versions ([#778](https://github.com/nodejs/corepack/issues/778)) ([efed597](https://github.com/nodejs/corepack/commit/efed59797d30caa362a1fa8475cd7d17dc3b7282))
+
+## [0.34.5](https://github.com/nodejs/corepack/compare/v0.34.4...v0.34.5) (2025-11-24)
+
+
+### Bug Fixes
+
+* **pnpm:** fix bin path for v11 ([#776](https://github.com/nodejs/corepack/issues/776)) ([0c8048a](https://github.com/nodejs/corepack/commit/0c8048adc61651f6eb798448675d3ecc4a7e26a9))
+* update package manager versions ([#773](https://github.com/nodejs/corepack/issues/773)) ([06c286b](https://github.com/nodejs/corepack/commit/06c286b5fc171e43090b5eed5cd501bc9580927f))
+
+## [0.34.4](https://github.com/nodejs/corepack/compare/v0.34.3...v0.34.4) (2025-11-14)
+
+
+### Bug Fixes
+
+* bump pnpm version in `config.json` ([#768](https://github.com/nodejs/corepack/issues/768)) ([99a9a6e](https://github.com/nodejs/corepack/commit/99a9a6eb1b6e918ceb896b3d558bb5ed583bdc70))
+* ignore devEngines version range when CLI provides a version ([#762](https://github.com/nodejs/corepack/issues/762)) ([ac518c4](https://github.com/nodejs/corepack/commit/ac518c4106f8d9ceb4e85e6c3614b1eba5d03fcb))
+* use `lstatSync` in `generatePosixLink` ([#767](https://github.com/nodejs/corepack/issues/767)) ([a02bea0](https://github.com/nodejs/corepack/commit/a02bea078eb584ed7492ec561626987e35386bae))
+
+## [0.34.3](https://github.com/nodejs/corepack/compare/v0.34.2...v0.34.3) (2025-11-07)
+
+
+### Bug Fixes
+
+* update package manager versions ([#765](https://github.com/nodejs/corepack/issues/765)) ([13a2e98](https://github.com/nodejs/corepack/commit/13a2e989ee37694a7ec1b1d60acdaa28f90642d1))
+* Yarn switch install support and tests ([#761](https://github.com/nodejs/corepack/issues/761)) ([d04d483](https://github.com/nodejs/corepack/commit/d04d4839aeecaf4fca989c577f6c000dc90be933))
+
+## [0.34.2](https://github.com/nodejs/corepack/compare/v0.34.1...v0.34.2) (2025-10-31)
+
+
+### Bug Fixes
+
+* bump package manager versions ([#754](https://github.com/nodejs/corepack/issues/754)) ([35e3869](https://github.com/nodejs/corepack/commit/35e3869f3f4d21bbfccdf78ea564ab0723d6f36f))
+* fix potential race condition in `node-tar` ([#757](https://github.com/nodejs/corepack/pull/757)) ([78808a7](78808a72691655fe5140c02ae41d4baef88cd9fa))
+
+## [0.34.1](https://github.com/nodejs/corepack/compare/v0.34.0...v0.34.1) (2025-10-17)
+
+
+### Bug Fixes
+
+* incorrect registry origin check ([#743](https://github.com/nodejs/corepack/issues/743)) ([cc840b2](https://github.com/nodejs/corepack/commit/cc840b2d232a29c225d2436d350640f0035ed28b))
+* update package manager versions ([#728](https://github.com/nodejs/corepack/issues/728)) ([78ce029](https://github.com/nodejs/corepack/commit/78ce0297a9152bb5c68f724821a9a0095b408334))
+
+## [0.34.0](https://github.com/nodejs/corepack/compare/v0.33.0...v0.34.0) (2025-07-19)
+
+
+### ⚠ BREAKING CHANGES
+
+* drop Node.js 18.x and 23.x support
+
+### Features
+
+* update package manager versions ([#719](https://github.com/nodejs/corepack/issues/719)) ([7707ea7](https://github.com/nodejs/corepack/commit/7707ea7350c129ad3aae8ca08e9e80fcf164dcb6))
+
+
+### Miscellaneous Chores
+
+* remove Node.js 18.x and 23.x usage, add 24.x ([#718](https://github.com/nodejs/corepack/issues/718)) ([783a42f](https://github.com/nodejs/corepack/commit/783a42fbe35371964e9dde75e2263b179f53bc0c))
+
+## [0.33.0](https://github.com/nodejs/corepack/compare/v0.32.0...v0.33.0) (2025-06-02)
+
+
+### Features
+
+* Adds guard to avoid stepping on Yarn's feet ([#714](https://github.com/nodejs/corepack/issues/714)) ([5fc3691](https://github.com/nodejs/corepack/commit/5fc3691354eb5bdeca17a9495b234584353f0151))
+* update package manager versions ([#671](https://github.com/nodejs/corepack/issues/671)) ([b45b3a3](https://github.com/nodejs/corepack/commit/b45b3a3244bacfbaf65188ae8c04209a1e98307d))
+
+
+### Bug Fixes
+
+* debug text typo ([#698](https://github.com/nodejs/corepack/issues/698)) ([0b94797](https://github.com/nodejs/corepack/commit/0b94797f96e30e46e466873fe7d437d0471cd92c))
+
+## [0.32.0](https://github.com/nodejs/corepack/compare/v0.31.0...v0.32.0) (2025-02-28)
+
+
+### Features
+
+* add limited support for `devEngines` ([#643](https://github.com/nodejs/corepack/issues/643)) ([b456268](https://github.com/nodejs/corepack/commit/b4562688513f23e37e37b0d69a0daff33ca84c8d))
+* add more informative error when fetching latest stable fails ([#644](https://github.com/nodejs/corepack/issues/644)) ([53b1fe7](https://github.com/nodejs/corepack/commit/53b1fe75c47c06bd72a8b8f8bb699a47c9ca32fb))
+* add support for `.corepack.env` ([#642](https://github.com/nodejs/corepack/issues/642)) ([9b95b46](https://github.com/nodejs/corepack/commit/9b95b46f05e50fe1c60f05309c210ba8fe4e23c5))
+* update package manager versions ([#617](https://github.com/nodejs/corepack/issues/617)) ([b83bb5e](https://github.com/nodejs/corepack/commit/b83bb5ec150980c998b9c7053dff307d912cb508))
+
+
+### Bug Fixes
+
+* do not resolve fallback descriptor when `packageManager` is defined ([#632](https://github.com/nodejs/corepack/issues/632)) ([12e77e5](https://github.com/nodejs/corepack/commit/12e77e506946d42a0de9ce8e68d75af8454d6776))
+* **doc:** fix link to proxy library ([#636](https://github.com/nodejs/corepack/issues/636)) ([bae0839](https://github.com/nodejs/corepack/commit/bae08397943d4b99437389b4286546361091f4b3))
+* replace explicit with specify as verb ([#665](https://github.com/nodejs/corepack/issues/665)) ([351d86c](https://github.com/nodejs/corepack/commit/351d86c20226a8c18bfe212be27401f2908b1595))
+* **use:** do not throw on invalid `packageManager` ([#663](https://github.com/nodejs/corepack/issues/663)) ([4be72f6](https://github.com/nodejs/corepack/commit/4be72f6941afa0c9b2b7d26635016bb7b560df8a))
+
+## [0.31.0](https://github.com/nodejs/corepack/compare/v0.30.0...v0.31.0) (2025-01-27)
+
+
+### ⚠ BREAKING CHANGES
+
+* drop support for Node.js 21.x ([#594](https://github.com/nodejs/corepack/issues/594))
+
+### Features
+
+* update package manager versions ([#595](https://github.com/nodejs/corepack/issues/595)) ([c7a9bde](https://github.com/nodejs/corepack/commit/c7a9bde16dcbbb7e6ef03fef740656cde7ade360))
+
+
+### Bug Fixes
+
+* only print message for `UsageError`s ([#602](https://github.com/nodejs/corepack/issues/602)) ([72a588c](https://github.com/nodejs/corepack/commit/72a588c2370c17e415b24fe389efdafb3c84e90b))
+* update npm registry keys ([#614](https://github.com/nodejs/corepack/issues/614)) ([8c90caa](https://github.com/nodejs/corepack/commit/8c90caab7f1c5c9b89f1de113bc1dfc441bf25d2))
+
+
+### Miscellaneous Chores
+
+* drop support for Node.js 21.x ([#594](https://github.com/nodejs/corepack/issues/594)) ([8bebc0c](https://github.com/nodejs/corepack/commit/8bebc0c0a5cbcdeec41673dcbaf581e6e1c1be11))
+
+## [0.30.0](https://github.com/nodejs/corepack/compare/v0.29.4...v0.30.0) (2024-11-23)
+
+
+### Features
+
+* update package manager versions ([#578](https://github.com/nodejs/corepack/issues/578)) ([a286c8f](https://github.com/nodejs/corepack/commit/a286c8f5537ea9ecf9b6ff53c7bc3e8da4e3c8bb))
+
+
+### Performance Improvements
+
+* prefer `module.enableCompileCache` over `v8-compile-cache` ([#574](https://github.com/nodejs/corepack/issues/574)) ([cba6905](https://github.com/nodejs/corepack/commit/cba690575bd606faeee54bd512ccb8797d49055f))
+
+## [0.29.4](https://github.com/nodejs/corepack/compare/v0.29.3...v0.29.4) (2024-09-07)
+
+
+### Features
+
+* update package manager versions ([#543](https://github.com/nodejs/corepack/issues/543)) ([b819e40](https://github.com/nodejs/corepack/commit/b819e404dbb23c4ae3d5dbe55e21de74d714ee9c))
+
+## [0.29.3](https://github.com/nodejs/corepack/compare/v0.29.2...v0.29.3) (2024-07-21)
+
+
+### Bug Fixes
+
+* fallback to `shasum` when `integrity` is not defined ([#542](https://github.com/nodejs/corepack/issues/542)) ([eb63873](https://github.com/nodejs/corepack/commit/eb63873c6c617a2f8ac7106e26ccfe8aa3ae1fb9))
+* make `DEBUG=corepack` more useful ([#538](https://github.com/nodejs/corepack/issues/538)) ([6019d7b](https://github.com/nodejs/corepack/commit/6019d7b56e85bd8b7b58a1a487922c707e70e30e))
+
+## [0.29.2](https://github.com/nodejs/corepack/compare/v0.29.1...v0.29.2) (2024-07-13)
+
+
+### Bug Fixes
+
+* trigger release after 0.29.1 failed to publish ([18e29ce](https://github.com/nodejs/corepack/commit/18e29ce3c465b64d48ccf3feef7cd1be94da70b0))
+
+## [0.29.1](https://github.com/nodejs/corepack/compare/v0.29.0...v0.29.1) (2024-07-13)
+
+
+### Bug Fixes
+
+* trigger release after 0.29.0 failed to publish ([e6ba066](https://github.com/nodejs/corepack/commit/e6ba06657b0985c112f288932ca39c0562129566))
+
+## [0.29.0](https://github.com/nodejs/corepack/compare/v0.28.2...v0.29.0) (2024-07-12)
+
+
+### Features
+
+* parallelize linking, unlinking and installing ([#524](https://github.com/nodejs/corepack/issues/524)) ([f0734e6](https://github.com/nodejs/corepack/commit/f0734e6e8023ff361dac179c0d8656740d550c27))
+* update package manager versions ([#492](https://github.com/nodejs/corepack/issues/492)) ([3e3b046](https://github.com/nodejs/corepack/commit/3e3b04619cb4a91f207a72fb450f6fc4e2f01aec))
+
+
+### Bug Fixes
+
+* replace npm registry domain in tarball URL ([#502](https://github.com/nodejs/corepack/issues/502)) ([db6fae5](https://github.com/nodejs/corepack/commit/db6fae50cf44884d1e9a6f7e99402e7e807ba3ca))
+* selectively import required semver functions ([#511](https://github.com/nodejs/corepack/issues/511)) ([e7ad533](https://github.com/nodejs/corepack/commit/e7ad533d43dc9495493f0d883c3cbbb94caa1d41))
+
+## [0.28.2](https://github.com/nodejs/corepack/compare/v0.28.1...v0.28.2) (2024-05-31)
+
+
+### Features
+
+* update package manager versions ([#481](https://github.com/nodejs/corepack/issues/481)) ([e1abb83](https://github.com/nodejs/corepack/commit/e1abb832416a793b490b2b51b4082fe822fc932c))
+
+## [0.28.1](https://github.com/nodejs/corepack/compare/v0.28.0...v0.28.1) (2024-05-10)
+
+
+### Features
+
+* add support for `COREPACK_INTEGRITY_KEYS=0` ([#470](https://github.com/nodejs/corepack/issues/470)) ([f15ebc2](https://github.com/nodejs/corepack/commit/f15ebc289ebcd6a86580f15ae3c4ef0e1be37c4b))
+* update package manager versions ([#469](https://github.com/nodejs/corepack/issues/469)) ([985895b](https://github.com/nodejs/corepack/commit/985895bccb5ec68b3645c540d8500c572e1ccadb))
+
+
+### Bug Fixes
+
+* COREPACK_NPM_REGISTRY should allow for username/password auth ([#466](https://github.com/nodejs/corepack/issues/466)) ([6efa349](https://github.com/nodejs/corepack/commit/6efa34988229918debe6e881d45ba6715282f283))
+
+## [0.28.0](https://github.com/nodejs/corepack/compare/v0.27.0...v0.28.0) (2024-04-20)
+
+
+### ⚠ BREAKING CHANGES
+
+* call `executePackageManagerRequest` directly ([#430](https://github.com/nodejs/corepack/issues/430))
+
+### Bug Fixes
+
+* call `executePackageManagerRequest` directly ([#430](https://github.com/nodejs/corepack/issues/430)) ([0f9b748](https://github.com/nodejs/corepack/commit/0f9b74864048d5dc150a63cc582966af0c5f363f))
+
+## [0.27.0](https://github.com/nodejs/corepack/compare/v0.26.0...v0.27.0) (2024-04-19)
+
+
+### ⚠ BREAKING CHANGES
+
+* attempting to download a version from the npm registry (or a mirror) that was published using the now deprecated PGP signature without providing a hash will trigger an error. Users can disable the signature verification using a environment variable.
+
+### Features
+
+* separate read and write operations on lastKnownGood.json ([#446](https://github.com/nodejs/corepack/issues/446)) ([c449adc](https://github.com/nodejs/corepack/commit/c449adc81822a604ee8f00ae2b53fc411535f96d))
+* update package manager versions ([#425](https://github.com/nodejs/corepack/issues/425)) ([1423190](https://github.com/nodejs/corepack/commit/142319056424b1e0da2bdbe801c52c5910023707))
+* update package manager versions ([#462](https://github.com/nodejs/corepack/issues/462)) ([56816c2](https://github.com/nodejs/corepack/commit/56816c2b7ebc9926f07048b0ec4ff6025bb4e293))
+* verify integrity signature when downloading from npm registry ([#432](https://github.com/nodejs/corepack/issues/432)) ([e561dd0](https://github.com/nodejs/corepack/commit/e561dd00bbacc5bc15a492fc36574fa0e37bff7b))
+
+
+### Bug Fixes
+
+* add path to `package.json` in error message ([#456](https://github.com/nodejs/corepack/issues/456)) ([32a93ea](https://github.com/nodejs/corepack/commit/32a93ea4f51eb7db7dc95a16c5719695edf4b53e))
+* correctly set `Dispatcher` prototype for `ProxyAgent` ([#451](https://github.com/nodejs/corepack/issues/451)) ([73d9a1e](https://github.com/nodejs/corepack/commit/73d9a1e2d2f84906bf01952f1dca8adab576b7bf))
+* download fewer metadata from npm registry ([#436](https://github.com/nodejs/corepack/issues/436)) ([082fabf](https://github.com/nodejs/corepack/commit/082fabf8b15658e69e4fb62bb854fe9aace78b70))
+* hash check when downloading Yarn Berry from npm ([#439](https://github.com/nodejs/corepack/issues/439)) ([4672162](https://github.com/nodejs/corepack/commit/467216281e1719a739d0eeea370b335adfb37b8d))
+* Incorrect authorization prefix for basic auth, and undocumented env var ([#454](https://github.com/nodejs/corepack/issues/454)) ([2d63536](https://github.com/nodejs/corepack/commit/2d63536413971d43f570deb035845aa0bd5202f0))
+* re-add support for custom registries with auth ([#397](https://github.com/nodejs/corepack/issues/397)) ([d267753](https://github.com/nodejs/corepack/commit/d2677538cdb613fcab6d2a45bb07f349bdc65c2b))
+
+## [0.26.0](https://github.com/nodejs/corepack/compare/v0.25.2...v0.26.0) (2024-03-08)
+
+
+### Features
+
+* Pins the package manager as it's used for the first time ([#413](https://github.com/nodejs/corepack/issues/413)) ([8b6c6d4](https://github.com/nodejs/corepack/commit/8b6c6d4b2b7a9d61ae6c33c07e12354bd5afc2ba))
+* update package manager versions ([#415](https://github.com/nodejs/corepack/issues/415)) ([e8edba7](https://github.com/nodejs/corepack/commit/e8edba771bca6fb10c855c04eee8102ffa792d58))
+
+
+### Bug Fixes
+
+* group the download prompt together ([#391](https://github.com/nodejs/corepack/issues/391)) ([00506b2](https://github.com/nodejs/corepack/commit/00506b2a15dd87ec03240578077a35b7980e00c1))
+* ignore `EROFS` errors ([#421](https://github.com/nodejs/corepack/issues/421)) ([b7ec137](https://github.com/nodejs/corepack/commit/b7ec137210efd35c3461321b6434e3e13a87d42f))
+* improve support for `COREPACK_NPM_REGISTRY` with Yarn Berry ([#396](https://github.com/nodejs/corepack/issues/396)) ([47be27c](https://github.com/nodejs/corepack/commit/47be27c9db988e10f651d23b3f53bcf55318a894))
+* Windows malicious file analysis waiting problem ([#398](https://github.com/nodejs/corepack/issues/398)) ([295a1cd](https://github.com/nodejs/corepack/commit/295a1cdb9cbbbce8434e8d82b96eb63e57c46c1a))
+
+## [0.25.2](https://github.com/nodejs/corepack/compare/v0.25.1...v0.25.2) (2024-02-21)
+
+
+### Features
+
+* update package manager versions ([#362](https://github.com/nodejs/corepack/issues/362)) ([1423312](https://github.com/nodejs/corepack/commit/1423312a0eb7844dcdd43ae8a63cf12dcacedb2b))
+
+
+### Bug Fixes
+
+* do not hard fail if Corepack home folder cannot be created ([#382](https://github.com/nodejs/corepack/issues/382)) ([9834f57](https://github.com/nodejs/corepack/commit/9834f5790a99ce2c6c283321bb38b02e5561b7ca))
+* do not show download prompt when downloading JSON ([#383](https://github.com/nodejs/corepack/issues/383)) ([bc137a0](https://github.com/nodejs/corepack/commit/bc137a0073c3343ce2d552b6e13bfd2a48f08351))
+
+## [0.25.1](https://github.com/nodejs/corepack/compare/v0.25.0...v0.25.1) (2024-02-20)
+
+
+### Bug Fixes
+
+* use valid semver range for `engines.node` ([#378](https://github.com/nodejs/corepack/issues/378)) ([f2185fe](https://github.com/nodejs/corepack/commit/f2185fefa145cc75fca082acc169f8aaef637ca2))
+
+## [0.25.0](https://github.com/nodejs/corepack/compare/v0.24.1...v0.25.0) (2024-02-20)
+
+
+### ⚠ BREAKING CHANGES
+
+* remove `--all` flag ([#351](https://github.com/nodejs/corepack/issues/351))
+* remove Node.js 19.x from the range of supported versions ([#375](https://github.com/nodejs/corepack/issues/375))
+* use `fetch` ([#365](https://github.com/nodejs/corepack/issues/365))
+* remove old install folder migration ([#373](https://github.com/nodejs/corepack/issues/373))
+* prompt user before downloading software ([#360](https://github.com/nodejs/corepack/issues/360))
+
+### Features
+
+* add `corepack cache` command ([#363](https://github.com/nodejs/corepack/issues/363)) ([f442366](https://github.com/nodejs/corepack/commit/f442366c1c00d0c3f388b757c3797504f9a6b62e))
+* add support for URL in `"packageManager"` ([#359](https://github.com/nodejs/corepack/issues/359)) ([4a8ce6d](https://github.com/nodejs/corepack/commit/4a8ce6d42f081047a341f36067696346c9f3e1ea))
+* bump Known Good Release when downloading new version ([#364](https://github.com/nodejs/corepack/issues/364)) ([a56c13b](https://github.com/nodejs/corepack/commit/a56c13bd0b1c11e50361b8b4b6f8a53571e3981a))
+* prompt user before downloading software ([#360](https://github.com/nodejs/corepack/issues/360)) ([6b8d87f](https://github.com/nodejs/corepack/commit/6b8d87f2374f79855b24d659f2a2579d6b39f54f))
+* remove `--all` flag ([#351](https://github.com/nodejs/corepack/issues/351)) ([d9c70b9](https://github.com/nodejs/corepack/commit/d9c70b91f698787d693406626a73dc95cb18bc1d))
+* remove old install folder migration ([#373](https://github.com/nodejs/corepack/issues/373)) ([54e9510](https://github.com/nodejs/corepack/commit/54e9510cdaf6ed08c9dea1ed3999fa65116cb4c7))
+* use `fetch` ([#365](https://github.com/nodejs/corepack/issues/365)) ([fe6a307](https://github.com/nodejs/corepack/commit/fe6a3072f64efa810b90e4ee52e0b3ff14c63184))
+
+
+### Bug Fixes
+
+* remove unsafe remove of install folder ([#372](https://github.com/nodejs/corepack/issues/372)) ([65880ca](https://github.com/nodejs/corepack/commit/65880cafed5f4195f8e7656ca9af4cbcbb7682d3))
+
+
+### Miscellaneous Chores
+
+* remove Node.js 19.x from the range of supported versions ([#375](https://github.com/nodejs/corepack/issues/375)) ([9a1cb38](https://github.com/nodejs/corepack/commit/9a1cb385bba9ade8e9fbf5517c2bdff60295f9ed))
+
+## [0.24.1](https://github.com/nodejs/corepack/compare/v0.24.0...v0.24.1) (2024-01-13)
+
+
+### Features
+
+* update package manager versions ([#348](https://github.com/nodejs/corepack/issues/348)) ([cc3ada7](https://github.com/nodejs/corepack/commit/cc3ada73bccd0a5b0ff16834e518efa521c9eea4))
+
+
+### Bug Fixes
+
+* **use:** create `package.json` when calling `corepack use` on empty dir ([#350](https://github.com/nodejs/corepack/issues/350)) ([2950a8a](https://github.com/nodejs/corepack/commit/2950a8a30b64b4598abc354e45400e83d56e541b))
+
+## [0.24.0](https://github.com/nodejs/corepack/compare/v0.23.0...v0.24.0) (2023-12-29)
+
+
+### Features
+
+* add support for HTTP redirect ([#341](https://github.com/nodejs/corepack/issues/341)) ([6df5063](https://github.com/nodejs/corepack/commit/6df5063b14868ff21499a051e5122fa7211be6ed))
+* add support for rangeless commands ([#338](https://github.com/nodejs/corepack/issues/338)) ([9bee415](https://github.com/nodejs/corepack/commit/9bee4150815113d97f0bd77d62c8d999cfd68ad3))
+* update package manager versions ([#330](https://github.com/nodejs/corepack/issues/330)) ([cfcc280](https://github.com/nodejs/corepack/commit/cfcc28047a788daeef2c0b15ee35a8b1a8149bb6))
+* **yarn:** fallback to npm when `COREPACK_NPM_REGISTRY` is set ([#339](https://github.com/nodejs/corepack/issues/339)) ([0717c6a](https://github.com/nodejs/corepack/commit/0717c6af898e075f57c5694d699a3c51e79a024c))
+
+
+### Bug Fixes
+
+* clarify `EACCES` errors ([#343](https://github.com/nodejs/corepack/issues/343)) ([518bed8](https://github.com/nodejs/corepack/commit/518bed8b7d7c313163c79d31cb9bbc023dba6560))
+
+## [0.23.0](https://github.com/nodejs/corepack/compare/v0.22.0...v0.23.0) (2023-11-05)
+
+
+### Features
+
+* update package manager versions ([#325](https://github.com/nodejs/corepack/issues/325)) ([450cd33](https://github.com/nodejs/corepack/commit/450cd332d00d3428f49ed09a4235bd12139931c9))
+
+## [0.22.0](https://github.com/nodejs/corepack/compare/v0.21.0...v0.22.0) (2023-10-21)
+
+
+### Features
+
+* allow fallback to application/json for custom registries ([#314](https://github.com/nodejs/corepack/issues/314)) ([92f8e71](https://github.com/nodejs/corepack/commit/92f8e71f8c97c44f404ce9b7df8787a4292e6830))
+* update package manager versions ([#318](https://github.com/nodejs/corepack/issues/318)) ([0bd2577](https://github.com/nodejs/corepack/commit/0bd2577bb4c6c3a5a33ecdb3b6ca2ff244c54f28))
+
+## [0.21.0](https://github.com/nodejs/corepack/compare/v0.20.0...v0.21.0) (2023-10-08)
+
+
+### ⚠ BREAKING CHANGES
+
+* remove support for Node.js 16.x
+
+### Features
+
+* update package manager versions ([#297](https://github.com/nodejs/corepack/issues/297)) ([503e135](https://github.com/nodejs/corepack/commit/503e135878935cc881ebd94b48d5eca94ec4c27b))
+
+
+### Miscellaneous Chores
+
+* update supported Node.js versions ([#309](https://github.com/nodejs/corepack/issues/309)) ([787e24d](https://github.com/nodejs/corepack/commit/787e24df609513702eafcd8c6a5f03544d7d45cc))
+
+## [0.20.0](https://github.com/nodejs/corepack/compare/v0.19.0...v0.20.0) (2023-08-29)
+
+
+### Features
+
+* refactor the CLI interface ([#291](https://github.com/nodejs/corepack/issues/291)) ([fe3e5cd](https://github.com/nodejs/corepack/commit/fe3e5cd86c45db0d87c7fdea87d57d59b0bdcb78))
+* update package manager versions ([#292](https://github.com/nodejs/corepack/issues/292)) ([be9c286](https://github.com/nodejs/corepack/commit/be9c286846443ff03081e736fdf4a0ff031fbd38))
+
+## [0.19.0](https://github.com/nodejs/corepack/compare/v0.18.1...v0.19.0) (2023-06-24)
+
+
+### Features
+
+* support ESM ([#270](https://github.com/nodejs/corepack/issues/270)) ([be2489c](https://github.com/nodejs/corepack/commit/be2489cd0aaabf26a019e1c089a3c8bcc329e94a))
+* update package manager versions ([#280](https://github.com/nodejs/corepack/issues/280)) ([4188f2b](https://github.com/nodejs/corepack/commit/4188f2b4671228339fe16f9f566e7bac0c2c4f6d))
+
+## [0.18.1](https://github.com/nodejs/corepack/compare/v0.18.0...v0.18.1) (2023-06-13)
+
+
+### Features
+
+* update package manager versions ([#272](https://github.com/nodejs/corepack/issues/272)) ([5345774](https://github.com/nodejs/corepack/commit/53457747a26a5de3debbd0d9282b338186bbd7c3))
+
+
+### Bug Fixes
+
+* disable `v8-compile-cache` when using `npm@>=9.7.0` ([#276](https://github.com/nodejs/corepack/issues/276)) ([2f3678c](https://github.com/nodejs/corepack/commit/2f3678cd7915978f4e2ce7a32cbe5db58e9d0b8d))
+* don't override `process.exitCode` ([#268](https://github.com/nodejs/corepack/issues/268)) ([17d1f3d](https://github.com/nodejs/corepack/commit/17d1f3dd41ef6127228d427fd5cca373d6c97f0f))
+
+## [0.18.0](https://github.com/nodejs/corepack/compare/v0.17.2...v0.18.0) (2023-05-19)
+
+
+### ⚠ BREAKING CHANGES
+
+* remove support for Node.js 14.x
+
+### Features
+
+* update package manager versions ([#256](https://github.com/nodejs/corepack/issues/256)) ([7b61ff6](https://github.com/nodejs/corepack/commit/7b61ff6bc797ec4ed50c2ba1e1f1689264cbf4fc))
+
+
+### Bug Fixes
+
+* **doc:** add a note about troubleshooting network errors ([#259](https://github.com/nodejs/corepack/issues/259)) ([aa3cbdb](https://github.com/nodejs/corepack/commit/aa3cbdb54fb21b8e0adde96dc781cdf750932843))
+
+
+### Miscellaneous Chores
+
+* update supported Node.js versions ([#258](https://github.com/nodejs/corepack/issues/258)) ([74f679d](https://github.com/nodejs/corepack/commit/74f679d8a72cc10a3720fc679b95e9bd086d95be))
+
+## [0.17.2](https://github.com/nodejs/corepack/compare/v0.17.1...v0.17.2) (2023-04-07)
+
+
+### Features
+
+* update package manager versions ([#249](https://github.com/nodejs/corepack/issues/249)) ([2507e9b](https://github.com/nodejs/corepack/commit/2507e9b317eacdeb939aee086de5711218ebd794))
+
+## [0.17.1](https://github.com/nodejs/corepack/compare/v0.17.0...v0.17.1) (2023-03-17)
+
+
+### Features
+
+* update package manager versions ([#245](https://github.com/nodejs/corepack/issues/245)) ([673f3b7](https://github.com/nodejs/corepack/commit/673f3b7f18421a49da1e2c55656666a74ce94474))
+
+## [0.17.0](https://github.com/nodejs/corepack/compare/v0.16.0...v0.17.0) (2023-02-24)
+
+
+### ⚠ BREAKING CHANGES
+
+* add `"exports"` to the `package.json` ([#239](https://github.com/nodejs/corepack/issues/239))
+
+### Features
+
+* update package manager versions ([#242](https://github.com/nodejs/corepack/issues/242)) ([5141639](https://github.com/nodejs/corepack/commit/5141639af8198a343105be1e98a74f7c9e152472))
+
+
+### Bug Fixes
+
+* add `"exports"` to the `package.json` ([#239](https://github.com/nodejs/corepack/issues/239)) ([8e12d08](https://github.com/nodejs/corepack/commit/8e12d088dec171c03e90f623895a1fbf867130e6))
+
+## [0.16.0](https://github.com/nodejs/corepack/compare/v0.15.3...v0.16.0) (2023-02-17)
+
+
+### Features
+
+* update package manager versions ([#228](https://github.com/nodejs/corepack/issues/228)) ([bb000f9](https://github.com/nodejs/corepack/commit/bb000f9c10a1fbd85f2c15a90218d90b42473130))
+* build: migrate to ESBuild ([#229](https://github.com/nodejs/corepack/pull/229)) ([15ceb83](https://github.com/nodejs/corepack/commit/15ceb832a34a223efbe3d3f9cb792d9101a7022a))
+
+
+### Bug Fixes
+
+* npm registry override ([#219](https://github.com/nodejs/corepack/issues/219)) ([1b35362](https://github.com/nodejs/corepack/commit/1b353624e644874d9ef6c9acaf6d1254bff3015a))
+
+## [0.15.3](https://github.com/nodejs/corepack/compare/v0.15.2...v0.15.3) (2022-12-30)
+
+
+### Features
+
+* update package manager versions ([#215](https://github.com/nodejs/corepack/issues/215)) ([f84cfcb](https://github.com/nodejs/corepack/commit/f84cfcb00ffb985d44b6aa0b563b2b4056a8f0d0))
+
+## [0.15.2](https://github.com/nodejs/corepack/compare/v0.15.1...v0.15.2) (2022-11-25)
+
+
+### Features
+
+* update package manager versions ([#211](https://github.com/nodejs/corepack/issues/211)) ([c536c0c](https://github.com/nodejs/corepack/commit/c536c0c27c137c87a14487a2c2a63a1fe6bf88ec))
+
+## [0.15.1](https://github.com/nodejs/corepack/compare/v0.15.0...v0.15.1) (2022-11-04)
+
+
+### Features
+
+* update package manager versions ([#205](https://github.com/nodejs/corepack/issues/205)) ([5bfac11](https://github.com/nodejs/corepack/commit/5bfac11715474a4318c67fc806fd1ff4252c683a))
+
+## [0.15.0](https://github.com/nodejs/corepack/compare/v0.14.2...v0.15.0) (2022-10-28)
+
+
+### Features
+
+* add support for configurable registries and applicable auth options ([#186](https://github.com/nodejs/corepack/issues/186)) ([662ae90](https://github.com/nodejs/corepack/commit/662ae9057c7360cb05e9476914e611a9bf0074db))
+* update package manager versions ([#193](https://github.com/nodejs/corepack/issues/193)) ([0ec3a73](https://github.com/nodejs/corepack/commit/0ec3a7384729c5cf4ac566d91f1a4bb74e08a64f))
+* when strict checking is off, treat like transparent ([#197](https://github.com/nodejs/corepack/issues/197)) ([5eadc50](https://github.com/nodejs/corepack/commit/5eadc50192e205c60bfb1cad91854e9014a747b8))
+
+
+### Bug Fixes
+
+* **doc:** add package configuration instruction to readme ([#188](https://github.com/nodejs/corepack/issues/188)) ([0b7abb9](https://github.com/nodejs/corepack/commit/0b7abb9833d332bad97902260d31652482c274a0))
+* recreate cache folder if necessary ([#200](https://github.com/nodejs/corepack/issues/200)) ([7b5f2f9](https://github.com/nodejs/corepack/commit/7b5f2f9fcb24fe3fe517a96deaac7f32854f3124))
+
+## [0.14.2](https://github.com/nodejs/corepack/compare/v0.14.1...v0.14.2) (2022-09-24)
+
+### Features
+
+* update package manager versions ([#184](https://github.com/nodejs/corepack/issues/184)) ([84ae313](https://github.com/nodejs/corepack/commit/84ae3139e4b9a86d97465e36b50beb9201fda732))
+
+## [0.14.1](https://github.com/nodejs/corepack/compare/v0.14.0...v0.14.1) (2022-09-16)
+
+
+### Features
+
+* update package manager versions ([#179](https://github.com/nodejs/corepack/issues/179)) ([0b88dcb](https://github.com/nodejs/corepack/commit/0b88dcbaaf190117c6f407b6632a4b3b10da8ad9))
+
+## [0.14.0](https://github.com/nodejs/corepack/compare/v0.13.0...v0.14.0) (2022-09-02)
+
+
+### Features
+
+* add `COREPACK_ENABLE_STRICT` env variable ([#167](https://github.com/nodejs/corepack/issues/167)) ([92b52f6](https://github.com/nodejs/corepack/commit/92b52f6b4918aff968c0942b89fc722ebf57bce2))
+* update package manager versions ([#170](https://github.com/nodejs/corepack/issues/170)) ([6f70bfc](https://github.com/nodejs/corepack/commit/6f70bfc4b6a8a57cccb1ff9cbf2f49240648f1ed))
+
+
+### Bug Fixes
+
+* handle tags including numbers in `prepare` command ([#165](https://github.com/nodejs/corepack/issues/165)) ([5a0727b](https://github.com/nodejs/corepack/commit/5a0727b43976e0dc299151876c0dde2c4a85174d))
+
+## [0.13.0](https://github.com/nodejs/corepack/compare/v0.12.3...v0.13.0) (2022-08-19)
+
+
+### Features
+
+* do not use `~/.node` as default value for `COREPACK_HOME` ([#152](https://github.com/nodejs/corepack/issues/152)) ([09e24cf](https://github.com/nodejs/corepack/commit/09e24cf497de27fe92668cf0a8e555f2c7e2530d))
+* download the latest version instead of a pinned one ([#134](https://github.com/nodejs/corepack/issues/134)) ([055b928](https://github.com/nodejs/corepack/commit/055b92807f711b5c8c8be6e62b8d3ce83e1ff002))
+* update package manager versions ([#163](https://github.com/nodejs/corepack/issues/163)) ([af38d5a](https://github.com/nodejs/corepack/commit/af38d5afbbc10d61265b2f4687c5cc498b059b41))
+
+## [0.12.3](https://github.com/nodejs/corepack/compare/v0.12.2...v0.12.3) (2022-08-12)
+
+
+### Features
+
+* update package manager versions ([#160](https://github.com/nodejs/corepack/issues/160)) ([ad092a7](https://github.com/nodejs/corepack/commit/ad092a7fb4296143fa5224c04dbd628451b3c158))
+
+## [0.12.2](https://github.com/nodejs/corepack/compare/v0.12.1...v0.12.2) (2022-08-05)
+
+### Features
+
+* update package manager versions ([#154](https://github.com/nodejs/corepack/issues/154)) ([4b95fd3](https://github.com/nodejs/corepack/commit/4b95fd3b926659855970a887c893c10db0b98e5d))
+
+## [0.12.1](https://github.com/nodejs/corepack/compare/v0.12.0...v0.12.1) (2022-07-21)
+
+
+### Bug Fixes
+
+* **doc:** update DESIGN.md s/engines.pm/packageManager/ ([#141](https://github.com/nodejs/corepack/issues/141)) ([d6039c5](https://github.com/nodejs/corepack/commit/d6039c5b16cdddb33069b9aa864854ed16d17e4e))
+* update package manager versions ([#146](https://github.com/nodejs/corepack/issues/146)) ([fdb187a](https://github.com/nodejs/corepack/commit/fdb187a640de77df9b3688623ba510bdafda8702))
+
+## [0.12.0](https://github.com/nodejs/corepack/compare/v0.11.2...v0.12.0) (2022-07-09)
+
+
+### Features
+
+* add support for hash checking ([#133](https://github.com/nodejs/corepack/issues/133)) ([6a480a7](https://github.com/nodejs/corepack/commit/6a480a72c2e9fc6725f2ab6dfaf4c52e4d3d2ade))
+* add support for tags and ranges in `prepare` command ([#136](https://github.com/nodejs/corepack/issues/136)) ([29da06c](https://github.com/nodejs/corepack/commit/29da06c515e917829e5ffbedb34284a6597e9d56))
+* update package manager versions ([#129](https://github.com/nodejs/corepack/issues/129)) ([2470f58](https://github.com/nodejs/corepack/commit/2470f58b74491a1301221df643c55be5adf1d349))
+* update package manager versions ([#139](https://github.com/nodejs/corepack/issues/139)) ([cd0dcad](https://github.com/nodejs/corepack/commit/cd0dcade85621199048d7ca30dfc3efce11e1f37))
+
+
+### Bug Fixes
+
+* streamline the cache exploration ([#135](https://github.com/nodejs/corepack/issues/135)) ([185da44](https://github.com/nodejs/corepack/commit/185da44078fd1ca34aec2e4e6f8a52ecffcf3c11))
+
+## [0.11.2](https://github.com/nodejs/corepack/compare/v0.11.1...v0.11.2) (2022-06-13)
+
+### Bug Fixes
+
+* only set bins on pack ([#127](https://github.com/nodejs/corepack/issues/127)) ([7ae489a](https://github.com/nodejs/corepack/commit/7ae489a86c3fe584b9915f4ec57deb7c316c1a25))
+
+## [0.11.1](https://github.com/nodejs/corepack/compare/v0.11.0...v0.11.1) (2022-06-12)
+
+
+### Bug Fixes
+
+* **ci:** YAML formatting in publish workflow ([#124](https://github.com/nodejs/corepack/issues/124)) ([01c7d63](https://github.com/nodejs/corepack/commit/01c7d638b04a1340b3939a7985e24b586e344995))
+
+## 0.11.0 (2022-06-12)
+
+
+### Features
+
+* auto setup proxy for http requests ([#69](https://github.com/nodejs/corepack/issues/69)) ([876ce02](https://github.com/nodejs/corepack/commit/876ce02fe7385ea5bc896b2dc93d1fb320361c64))
+
+
+### Bug Fixes
+
+* avoid symlinks to work on Windows ([#13](https://github.com/nodejs/corepack/issues/13)) ([b56df30](https://github.com/nodejs/corepack/commit/b56df30796da9c7cb0ba5e1bb7152c81582abba6))
+* avoid using eval to get the corepack version ([#45](https://github.com/nodejs/corepack/issues/45)) ([78d94eb](https://github.com/nodejs/corepack/commit/78d94eb297444d7558e8b4395f0108c97117f8ab))
+* bin file name for pnpm >=6.0 ([#35](https://github.com/nodejs/corepack/issues/35)) ([8ff2499](https://github.com/nodejs/corepack/commit/8ff2499e831c8cf2dea604ea985d830afc8a479e))
+* generate cmd shim files ([a900b4d](https://github.com/nodejs/corepack/commit/a900b4db12fcd4d99c0a4d011b426cdc6485d323))
+* handle package managers with a bin array correctly ([#20](https://github.com/nodejs/corepack/issues/20)) ([1836d17](https://github.com/nodejs/corepack/commit/1836d17b4fc4c0164df2fe1ccaca4d2f16f6f2d1))
+* handle parallel installs ([#84](https://github.com/nodejs/corepack/issues/84)) ([5cfc6c9](https://github.com/nodejs/corepack/commit/5cfc6c9df0dbec8e4de4324be37aa0a54a300552))
+* handle prereleases ([#32](https://github.com/nodejs/corepack/issues/32)) ([2a46b6d](https://github.com/nodejs/corepack/commit/2a46b6d13adae139141012254ef670d6ddcb5d11))
+
+
+### Performance Improvements
+
+* load binaries in the same process ([#97](https://github.com/nodejs/corepack/issues/97)) ([5ff6e82](https://github.com/nodejs/corepack/commit/5ff6e82028e58448ba5ba986854b61ecdc69885b))
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/LICENSE.md b/.tools/node-v24.18.0-win-x64/node_modules/corepack/LICENSE.md
new file mode 100644
index 0000000..965ccaa
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/LICENSE.md
@@ -0,0 +1,7 @@
+**Copyright © Corepack contributors**
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/README.md b/.tools/node-v24.18.0-win-x64/node_modules/corepack/README.md
new file mode 100644
index 0000000..dd32b4a
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/README.md
@@ -0,0 +1,379 @@
+#
corepack
+
+[](https://slack-invite.openjsf.org/)
+
+Corepack is a zero-runtime-dependency Node.js script that acts as a bridge
+between Node.js projects and the package managers they are intended to be used
+with during development. In practical terms, **Corepack lets you use Yarn, npm,
+and pnpm without having to install them**.
+
+## How to Install
+
+### Default Installs
+
+Corepack is distributed with Node.js from version 14.19.0 up to (but not including) 25.0.0.
+Run `corepack enable` to install the required Yarn and pnpm binaries on your path.
+
+### Manual Installs
+
+
+Install Corepack using npm
+
+First uninstall your global Yarn and pnpm binaries (just leave npm). In general,
+you'd do this by running the following command:
+
+```shell
+npm uninstall -g yarn pnpm
+
+# That should be enough, but if you installed Yarn without going through npm it might
+# be more tedious - for example, you might need to run `brew uninstall yarn` as well.
+```
+
+Then install Corepack:
+
+```shell
+npm install -g corepack
+```
+
+We do acknowledge the irony and overhead of using npm to install Corepack, which
+is at least part of why the preferred option is to use the Corepack version that
+is distributed along with Node.js itself.
+
+
+
+Update Corepack using npm
+
+To install the latest version of Corepack, use:
+
+```shell
+npm install -g corepack@latest
+```
+
+If Corepack was installed on your system using a Node.js Windows Installer
+`.msi` package then you might need to remove it before attempting to install a
+different version of Corepack using npm. You can select the Modify option of the
+Node.js app settings to access the Windows Installer feature selection, and on
+the "corepack manager" feature of the Node.js `.msi` package by selecting
+"Entire feature will be unavailable". See
+[Repair apps and programs in Windows](https://support.microsoft.com/en-us/windows/repair-apps-and-programs-in-windows-e90eefe4-d0a2-7c1b-dd59-949a9030f317)
+for instructions on accessing the Windows apps page to modify settings.
+
+
+
+Install Corepack from source
+
+See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
+
+
+
+## Usage
+
+### When Building Packages
+
+Just use your package managers as you usually would. Run `yarn install` in Yarn
+projects, `pnpm install` in pnpm projects, and `npm` in npm projects. Corepack
+will catch these calls, and depending on the situation:
+
+- **If the local project is configured for the package manager you're using**,
+ Corepack will download and cache the latest compatible version.
+
+- **If the local project is configured for a different package manager**,
+ Corepack will request you to run the command again using the right package
+ manager - thus avoiding corruptions of your install artifacts.
+
+- **If the local project isn't configured for any package manager**, Corepack
+ will assume that you know what you're doing, and will use whatever package
+ manager version has been pinned as "known good release". Check the relevant
+ section for more details.
+
+### When Authoring Packages
+
+Set your package's manager with the `packageManager` field in `package.json`:
+
+```json
+{
+ "packageManager": "yarn@3.2.3+sha224.953c8233f7a92884eee2de69a1b92d1f2ec1655e66d08071ba9a02fa"
+}
+```
+
+Here, `yarn` is the name of the package manager, specified at version `3.2.3`,
+along with the SHA-224 hash of this version for validation.
+`packageManager@x.y.z` is required. The hash is optional but strongly
+recommended as a security practice. Permitted values for the package manager are
+`yarn`, `npm`, and `pnpm`.
+
+You can also provide a URL to a `.js` file (which will be interpreted as a
+CommonJS module) or a `.tgz` file (which will be interpreted as a package, and
+the `"bin"` field of the `package.json` will be used to determine which file to
+use in the archive).
+
+```json
+{
+ "packageManager": "yarn@https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-3.2.3.tgz#sha224.16a0797d1710d1fb7ec40ab5c3801b68370a612a9b66ba117ad9924b"
+}
+```
+
+#### `devEngines.packageManager`
+
+When a `devEngines.packageManager` field is defined, and is an object containing
+a `"name"` field (can also optionally contain `version` and `onFail` fields),
+Corepack will use it to validate you're using a compatible package manager.
+
+Depending on the value of `devEngines.packageManager.onFail`:
+
+- if set to `ignore`, Corepack won't print any warning or error.
+- if unset or set to `error`, Corepack will throw an error in case of a mismatch.
+- if set to `warn` or some other value, Corepack will print a warning in case
+ of mismatch.
+
+If the top-level `packageManager` field is missing, Corepack will use the
+package manager defined in `devEngines.packageManager` – in which case you must
+provide a specific version in `devEngines.packageManager.version`, ideally with
+a hash, as explained in the previous section:
+
+```json
+{
+ "devEngines":{
+ "packageManager": {
+ "name": "yarn",
+ "version": "3.2.3+sha224.953c8233f7a92884eee2de69a1b92d1f2ec1655e66d08071ba9a02fa"
+ }
+ }
+}
+```
+
+## Known Good Releases
+
+When running Corepack within projects that don't list a supported package
+manager, it will default to a set of Known Good Releases.
+
+If there is no Known Good Release for the requested package manager, Corepack
+looks up the npm registry for the latest available version and cache it for
+future use.
+
+The Known Good Releases can be updated system-wide using `corepack install -g`.
+When Corepack downloads a new version of a given package manager on the same
+major line as the Known Good Release, it auto-updates it by default.
+
+## Offline Workflow
+
+The utility commands detailed in the next section.
+
+- Either you can use the network while building your container image, in which
+ case you'll simply run `corepack pack` to make sure that your image
+ includes the Last Known Good release for the specified package manager.
+
+- Or you're publishing your project to a system where the network is
+ unavailable, in which case you'll preemptively generate a package manager
+ archive from your local computer (using `corepack pack -o`) before storing
+ it somewhere your container will be able to access (for example within your
+ repository). After that it'll just be a matter of running
+ `corepack install -g --cache-only ` to setup the cache.
+
+## Utility Commands
+
+### `corepack [@] [... args]`
+
+This meta-command runs the specified package manager in the local folder. You
+can use it to force an install to run with a given version, which can be useful
+when looking for regressions.
+
+Note that those commands still check whether the local project is configured for
+the given package manager (ie you won't be able to run `corepack yarn install`
+on a project where the `packageManager` field references `pnpm`).
+
+### `corepack cache clean`
+
+Clears the local `COREPACK_HOME` cache directory.
+
+### `corepack cache clear`
+
+Clears the local `COREPACK_HOME` cache directory.
+
+### `corepack enable [... name]`
+
+| Option | Description |
+| --------------------- | --------------------------------------- |
+| `--install-directory` | Add the shims to the specified location |
+
+This command will detect where Corepack is installed and will create shims next
+to it for each of the specified package managers (or all of them if the command
+is called without parameters). Note that the npm shims will not be installed
+unless explicitly requested, as npm is currently distributed with Node.js
+through other means.
+
+If the file system where the `corepack` binary is located is read-only, this
+command will fail. A workaround is to add the binaries as alias in your
+shell configuration file (e.g. in `~/.bash_aliases`):
+
+```sh
+alias yarn="corepack yarn"
+alias yarnpkg="corepack yarnpkg"
+alias pnpm="corepack pnpm"
+alias pnpx="corepack pnpx"
+alias npm="corepack npm"
+alias npx="corepack npx"
+```
+
+On Windows PowerShell, you can add functions using the `$PROFILE` automatic
+variable:
+
+```powershell
+echo 'function yarn { corepack yarn @args }' >> $PROFILE
+echo 'function yarnpkg { corepack yarnpkg @args }' >> $PROFILE
+echo 'function pnpm { corepack pnpm @args }' >> $PROFILE
+echo 'function pnpx { corepack pnpx @args }' >> $PROFILE
+echo 'function npm { corepack npm @args }' >> $PROFILE
+echo 'function npx { corepack npx @args }' >> $PROFILE
+```
+
+### `corepack disable [... name]`
+
+| Option | Description |
+| --------------------- | ------------------------------------------ |
+| `--install-directory` | Remove the shims to the specified location |
+
+This command will detect where Node.js is installed and will remove the shims
+from there.
+
+### `corepack install`
+
+Download and install the package manager configured in the local project.
+This command doesn't change the global version used when running the package
+manager from outside the project (use the \`-g,--global\` flag if you wish
+to do this).
+
+### `corepack install <-g,--global> [... name[@]]`
+
+Install the selected package managers and install them on the system.
+
+Package managers thus installed will be configured as the new default when
+calling their respective binaries outside of projects defining the
+`packageManager` field.
+
+### `corepack pack [... name[@]]`
+
+| Option | Description |
+| --------------------- | ------------------------------------------ |
+| `--json ` | Print the output folder rather than logs |
+| `-o,--output ` | Path where to generate the archive |
+
+Download the selected package managers and store them inside a tarball
+suitable for use with `corepack install -g`.
+
+### `corepack use ]>`
+
+When run, this command will retrieve the latest release matching the provided
+descriptor, assign it to the project's package.json file, and automatically
+perform an install.
+
+### `corepack up`
+
+Retrieve the latest available version for the current major release line of
+the package manager used in the local project, and update the project to use
+it.
+
+Unlike `corepack use` this command doesn't take a package manager name nor a
+version range, as it will always select the latest available version from the
+range specified in `devEngines.packageManager.version`, or fallback to the
+same major line. Should you need to upgrade to a new major, use an explicit
+`corepack use {name}@latest` call (or simply `corepack use {name}`).
+
+## Environment Variables
+
+- `COREPACK_DEFAULT_TO_LATEST` can be set to `0` in order to instruct Corepack
+ not to lookup on the remote registry for the latest version of the selected
+ package manager, and to not update the Last Known Good version when it
+ downloads a new version of the same major line.
+
+- `COREPACK_ENABLE_AUTO_PIN` can be set to `1` to instruct Corepack to
+ update the `packageManager` field when it detects that the local package
+ doesn't list it. In general we recommend to always list a `packageManager`
+ field (which you can easily set through `corepack use [name]@[version]`), as
+ it ensures that your project installs are always deterministic.
+
+- `COREPACK_ENABLE_DOWNLOAD_PROMPT` can be set to `0` to
+ prevent Corepack showing the URL when it needs to download software, or can be
+ set to `1` to have the URL shown. By default, when Corepack is called
+ explicitly (e.g. `corepack pnpm …`), it is set to `0`; when Corepack is called
+ implicitly (e.g. `pnpm …`), it is set to `1`.
+ The default value cannot be overridden in a `.corepack.env` file.
+ When standard input is a TTY and no CI environment is detected, Corepack will
+ ask for user input before starting the download.
+
+- `COREPACK_ENABLE_UNSAFE_CUSTOM_URLS` can be set to `1` to allow use of
+ custom URLs to load a package manager known by Corepack (`yarn`, `npm`, and
+ `pnpm`).
+
+- `COREPACK_ENABLE_NETWORK` can be set to `0` to prevent Corepack from accessing
+ the network (in which case you'll be responsible for hydrating the package
+ manager versions that will be required for the projects you'll run, using
+ `corepack install -g --cache-only`).
+
+- `COREPACK_ENABLE_STRICT` can be set to `0` to prevent Corepack from throwing
+ error if the package manager does not correspond to the one defined for the
+ current project. This means that if a user is using the package manager
+ specified in the current project, it will use the version specified by the
+ project's `packageManager` field. But if the user is using other package
+ manager different from the one specified for the current project, it will use
+ the system-wide package manager version.
+
+- `COREPACK_ENABLE_PROJECT_SPEC` can be set to `0` to prevent Corepack from
+ checking if the package manager corresponds to the one defined for the current
+ project. This means that it will always use the system-wide package manager
+ regardless of what is being specified in the project's `packageManager` field.
+
+- `COREPACK_ENV_FILE` can be set to `0` to request Corepack to not attempt to
+ load `.corepack.env`; it can be set to a path to specify a different env file.
+ Only keys that start with `COREPACK_` and are not in the exception list
+ (`COREPACK_ENABLE_DOWNLOAD_PROMPT` and `COREPACK_ENV_FILE` are ignored)
+ will be taken into account.
+
+- `COREPACK_HOME` can be set in order to define where Corepack should install
+ the package managers. By default it is set to `%LOCALAPPDATA%\node\corepack`
+ on Windows, and to `$HOME/.cache/node/corepack` everywhere else.
+
+- `COREPACK_ROOT` has no functional impact on Corepack itself; it's
+ automatically being set in your environment by Corepack when it shells out to
+ the underlying package managers, so that they can feature-detect its presence
+ (useful for commands like `yarn init`).
+
+- `COREPACK_NPM_REGISTRY` sets the registry base url used when retrieving
+ package managers from npm. Default value is `https://registry.npmjs.org`
+
+- `COREPACK_NPM_TOKEN` sets a Bearer token authorization header when connecting
+ to a npm type registry.
+
+- `COREPACK_NPM_USERNAME` and `COREPACK_NPM_PASSWORD` to set a Basic
+ authorization header when connecting to a npm type registry. Note that both
+ environment variables are required and as plain text. If you want to send an
+ empty password, explicitly set `COREPACK_NPM_PASSWORD` to an empty string.
+
+- `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` are supported through
+ [`NODE_USE_ENV_PROXY=1`](https://nodejs.org/api/cli.html#node_use_env_proxy1).
+
+- `COREPACK_INTEGRITY_KEYS` can be set to an empty string or `0` to
+ instruct Corepack to skip integrity checks, or to a JSON string containing
+ custom keys.
+
+## Troubleshooting
+
+The environment variable `DEBUG` can be set to `corepack` to enable additional debug logging.
+
+### Networking
+
+There are a wide variety of networking issues that can occur while running
+`corepack` commands. Things to check:
+
+- Make sure your network connection is active.
+- Make sure the host for your request can be resolved by your DNS; try using
+ `curl [URL]` (ipv4) and `curl -6 [URL]` (ipv6) from your shell.
+- Check your proxy settings (see [Environment Variables](#environment-variables)).
+
+## Contributing
+
+See [`CONTRIBUTING.md`](./CONTRIBUTING.md).
+
+## License (MIT)
+
+See [`LICENSE.md`](./LICENSE.md).
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/corepack.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/corepack.js
new file mode 100644
index 0000000..6179b11
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/corepack.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='0';
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(process.argv.slice(2));
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/lib/corepack.cjs b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/lib/corepack.cjs
new file mode 100644
index 0000000..478389c
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/lib/corepack.cjs
@@ -0,0 +1,14592 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __esm = (fn2, res) => function __init() {
+ return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res;
+};
+var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+ for (var name2 in all)
+ __defProp(target, name2, { get: all[name2], enumerable: true });
+};
+var __copyProps = (to, from, except, desc2) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc2 = __getOwnPropDesc(from, key)) || desc2.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// node_modules/clipanion/lib/constants.js
+var require_constants = __commonJS({
+ "node_modules/clipanion/lib/constants.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var NODE_INITIAL = 0;
+ var NODE_SUCCESS = 1;
+ var NODE_ERRORED = 2;
+ var START_OF_INPUT = ``;
+ var END_OF_INPUT = `\0`;
+ var HELP_COMMAND_INDEX = -1;
+ var HELP_REGEX = /^(-h|--help)(?:=([0-9]+))?$/;
+ var OPTION_REGEX = /^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/;
+ var BATCH_REGEX = /^-[a-zA-Z]{2,}$/;
+ var BINDING_REGEX = /^([^=]+)=([\s\S]*)$/;
+ var DEBUG = process.env.DEBUG_CLI === `1`;
+ exports2.BATCH_REGEX = BATCH_REGEX;
+ exports2.BINDING_REGEX = BINDING_REGEX;
+ exports2.DEBUG = DEBUG;
+ exports2.END_OF_INPUT = END_OF_INPUT;
+ exports2.HELP_COMMAND_INDEX = HELP_COMMAND_INDEX;
+ exports2.HELP_REGEX = HELP_REGEX;
+ exports2.NODE_ERRORED = NODE_ERRORED;
+ exports2.NODE_INITIAL = NODE_INITIAL;
+ exports2.NODE_SUCCESS = NODE_SUCCESS;
+ exports2.OPTION_REGEX = OPTION_REGEX;
+ exports2.START_OF_INPUT = START_OF_INPUT;
+ }
+});
+
+// node_modules/clipanion/lib/errors.js
+var require_errors = __commonJS({
+ "node_modules/clipanion/lib/errors.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var constants2 = require_constants();
+ var UsageError16 = class extends Error {
+ constructor(message) {
+ super(message);
+ this.clipanion = { type: `usage` };
+ this.name = `UsageError`;
+ }
+ };
+ var UnknownSyntaxError = class extends Error {
+ constructor(input, candidates) {
+ super();
+ this.input = input;
+ this.candidates = candidates;
+ this.clipanion = { type: `none` };
+ this.name = `UnknownSyntaxError`;
+ if (this.candidates.length === 0) {
+ this.message = `Command not found, but we're not sure what's the alternative.`;
+ } else if (this.candidates.every((candidate) => candidate.reason !== null && candidate.reason === candidates[0].reason)) {
+ const [{ reason }] = this.candidates;
+ this.message = `${reason}
+
+${this.candidates.map(({ usage }) => `$ ${usage}`).join(`
+`)}`;
+ } else if (this.candidates.length === 1) {
+ const [{ usage }] = this.candidates;
+ this.message = `Command not found; did you mean:
+
+$ ${usage}
+${whileRunning(input)}`;
+ } else {
+ this.message = `Command not found; did you mean one of:
+
+${this.candidates.map(({ usage }, index) => {
+ return `${`${index}.`.padStart(4)} ${usage}`;
+ }).join(`
+`)}
+
+${whileRunning(input)}`;
+ }
+ }
+ };
+ var AmbiguousSyntaxError = class extends Error {
+ constructor(input, usages) {
+ super();
+ this.input = input;
+ this.usages = usages;
+ this.clipanion = { type: `none` };
+ this.name = `AmbiguousSyntaxError`;
+ this.message = `Cannot find which to pick amongst the following alternatives:
+
+${this.usages.map((usage, index) => {
+ return `${`${index}.`.padStart(4)} ${usage}`;
+ }).join(`
+`)}
+
+${whileRunning(input)}`;
+ }
+ };
+ var whileRunning = (input) => `While running ${input.filter((token) => {
+ return token !== constants2.END_OF_INPUT;
+ }).map((token) => {
+ const json = JSON.stringify(token);
+ if (token.match(/\s/) || token.length === 0 || json !== `"${token}"`) {
+ return json;
+ } else {
+ return token;
+ }
+ }).join(` `)}`;
+ exports2.AmbiguousSyntaxError = AmbiguousSyntaxError;
+ exports2.UnknownSyntaxError = UnknownSyntaxError;
+ exports2.UsageError = UsageError16;
+ }
+});
+
+// node_modules/clipanion/lib/format.js
+var require_format = __commonJS({
+ "node_modules/clipanion/lib/format.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var MAX_LINE_LENGTH = 80;
+ var richLine = Array(MAX_LINE_LENGTH).fill(`\u2501`);
+ for (let t = 0; t <= 24; ++t)
+ richLine[richLine.length - t] = `\x1B[38;5;${232 + t}m\u2501`;
+ var richFormat = {
+ header: (str) => `\x1B[1m\u2501\u2501\u2501 ${str}${str.length < MAX_LINE_LENGTH - 5 ? ` ${richLine.slice(str.length + 5).join(``)}` : `:`}\x1B[0m`,
+ bold: (str) => `\x1B[1m${str}\x1B[22m`,
+ error: (str) => `\x1B[31m\x1B[1m${str}\x1B[22m\x1B[39m`,
+ code: (str) => `\x1B[36m${str}\x1B[39m`
+ };
+ var textFormat = {
+ header: (str) => str,
+ bold: (str) => str,
+ error: (str) => str,
+ code: (str) => str
+ };
+ function dedent(text) {
+ const lines = text.split(`
+`);
+ const nonEmptyLines = lines.filter((line) => line.match(/\S/));
+ const indent = nonEmptyLines.length > 0 ? nonEmptyLines.reduce((minLength, line) => Math.min(minLength, line.length - line.trimStart().length), Number.MAX_VALUE) : 0;
+ return lines.map((line) => line.slice(indent).trimRight()).join(`
+`);
+ }
+ function formatMarkdownish(text, { format, paragraphs }) {
+ text = text.replace(/\r\n?/g, `
+`);
+ text = dedent(text);
+ text = text.replace(/^\n+|\n+$/g, ``);
+ text = text.replace(/^(\s*)-([^\n]*?)\n+/gm, `$1-$2
+
+`);
+ text = text.replace(/\n(\n)?\n*/g, ($0, $1) => $1 ? $1 : ` `);
+ if (paragraphs) {
+ text = text.split(/\n/).map((paragraph) => {
+ const bulletMatch = paragraph.match(/^\s*[*-][\t ]+(.*)/);
+ if (!bulletMatch)
+ return paragraph.match(/(.{1,80})(?: |$)/g).join(`
+`);
+ const indent = paragraph.length - paragraph.trimStart().length;
+ return bulletMatch[1].match(new RegExp(`(.{1,${78 - indent}})(?: |$)`, `g`)).map((line, index) => {
+ return ` `.repeat(indent) + (index === 0 ? `- ` : ` `) + line;
+ }).join(`
+`);
+ }).join(`
+
+`);
+ }
+ text = text.replace(/(`+)((?:.|[\n])*?)\1/g, ($0, $1, $2) => {
+ return format.code($1 + $2 + $1);
+ });
+ text = text.replace(/(\*\*)((?:.|[\n])*?)\1/g, ($0, $1, $2) => {
+ return format.bold($1 + $2 + $1);
+ });
+ return text ? `${text}
+` : ``;
+ }
+ exports2.formatMarkdownish = formatMarkdownish;
+ exports2.richFormat = richFormat;
+ exports2.textFormat = textFormat;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/utils.js
+var require_utils = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/utils.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var errors = require_errors();
+ var isOptionSymbol = /* @__PURE__ */ Symbol(`clipanion/isOption`);
+ function makeCommandOption(spec) {
+ return { ...spec, [isOptionSymbol]: true };
+ }
+ function rerouteArguments(a, b) {
+ if (typeof a === `undefined`)
+ return [a, b];
+ if (typeof a === `object` && a !== null && !Array.isArray(a)) {
+ return [void 0, a];
+ } else {
+ return [a, b];
+ }
+ }
+ function cleanValidationError(message, { mergeName = false } = {}) {
+ const match = message.match(/^([^:]+): (.*)$/m);
+ if (!match)
+ return `validation failed`;
+ let [, path16, line] = match;
+ if (mergeName)
+ line = line[0].toLowerCase() + line.slice(1);
+ line = path16 !== `.` || !mergeName ? `${path16.replace(/^\.(\[|$)/, `$1`)}: ${line}` : `: ${line}`;
+ return line;
+ }
+ function formatError(message, errors$1) {
+ if (errors$1.length === 1) {
+ return new errors.UsageError(`${message}${cleanValidationError(errors$1[0], { mergeName: true })}`);
+ } else {
+ return new errors.UsageError(`${message}:
+${errors$1.map((error) => `
+- ${cleanValidationError(error)}`).join(``)}`);
+ }
+ }
+ function applyValidator(name2, value, validator) {
+ if (typeof validator === `undefined`)
+ return value;
+ const errors2 = [];
+ const coercions = [];
+ const coercion = (v) => {
+ const orig = value;
+ value = v;
+ return coercion.bind(null, orig);
+ };
+ const check = validator(value, { errors: errors2, coercions, coercion });
+ if (!check)
+ throw formatError(`Invalid value for ${name2}`, errors2);
+ for (const [, op] of coercions)
+ op();
+ return value;
+ }
+ exports2.applyValidator = applyValidator;
+ exports2.cleanValidationError = cleanValidationError;
+ exports2.formatError = formatError;
+ exports2.isOptionSymbol = isOptionSymbol;
+ exports2.makeCommandOption = makeCommandOption;
+ exports2.rerouteArguments = rerouteArguments;
+ }
+});
+
+// node_modules/typanion/lib/index.mjs
+var lib_exports = {};
+__export(lib_exports, {
+ KeyRelationship: () => KeyRelationship,
+ TypeAssertionError: () => TypeAssertionError,
+ applyCascade: () => applyCascade,
+ as: () => as,
+ assert: () => assert,
+ assertWithErrors: () => assertWithErrors,
+ cascade: () => cascade,
+ fn: () => fn,
+ hasAtLeastOneKey: () => hasAtLeastOneKey,
+ hasExactLength: () => hasExactLength,
+ hasForbiddenKeys: () => hasForbiddenKeys,
+ hasKeyRelationship: () => hasKeyRelationship,
+ hasMaxLength: () => hasMaxLength,
+ hasMinLength: () => hasMinLength,
+ hasMutuallyExclusiveKeys: () => hasMutuallyExclusiveKeys,
+ hasRequiredKeys: () => hasRequiredKeys,
+ hasUniqueItems: () => hasUniqueItems,
+ isArray: () => isArray,
+ isAtLeast: () => isAtLeast,
+ isAtMost: () => isAtMost,
+ isBase64: () => isBase64,
+ isBoolean: () => isBoolean,
+ isDate: () => isDate,
+ isDict: () => isDict,
+ isEnum: () => isEnum,
+ isHexColor: () => isHexColor,
+ isISO8601: () => isISO8601,
+ isInExclusiveRange: () => isInExclusiveRange,
+ isInInclusiveRange: () => isInInclusiveRange,
+ isInstanceOf: () => isInstanceOf,
+ isInteger: () => isInteger,
+ isJSON: () => isJSON,
+ isLiteral: () => isLiteral,
+ isLowerCase: () => isLowerCase,
+ isMap: () => isMap,
+ isNegative: () => isNegative,
+ isNullable: () => isNullable,
+ isNumber: () => isNumber,
+ isObject: () => isObject,
+ isOneOf: () => isOneOf,
+ isOptional: () => isOptional,
+ isPartial: () => isPartial,
+ isPayload: () => isPayload,
+ isPositive: () => isPositive,
+ isRecord: () => isRecord,
+ isSet: () => isSet,
+ isString: () => isString,
+ isTuple: () => isTuple,
+ isUUID4: () => isUUID4,
+ isUnknown: () => isUnknown,
+ isUpperCase: () => isUpperCase,
+ makeTrait: () => makeTrait,
+ makeValidator: () => makeValidator,
+ matchesRegExp: () => matchesRegExp,
+ softAssert: () => softAssert
+});
+function getPrintable(value) {
+ if (value === null)
+ return `null`;
+ if (value === void 0)
+ return `undefined`;
+ if (value === ``)
+ return `an empty string`;
+ if (typeof value === "symbol")
+ return `<${value.toString()}>`;
+ if (Array.isArray(value))
+ return `an array`;
+ return JSON.stringify(value);
+}
+function getPrintableArray(value, conjunction) {
+ if (value.length === 0)
+ return `nothing`;
+ if (value.length === 1)
+ return getPrintable(value[0]);
+ const rest = value.slice(0, -1);
+ const trailing = value[value.length - 1];
+ const separator = value.length > 2 ? `, ${conjunction} ` : ` ${conjunction} `;
+ return `${rest.map((value2) => getPrintable(value2)).join(`, `)}${separator}${getPrintable(trailing)}`;
+}
+function computeKey(state, key) {
+ var _a, _b, _c;
+ if (typeof key === `number`) {
+ return `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}[${key}]`;
+ } else if (simpleKeyRegExp.test(key)) {
+ return `${(_b = state === null || state === void 0 ? void 0 : state.p) !== null && _b !== void 0 ? _b : ``}.${key}`;
+ } else {
+ return `${(_c = state === null || state === void 0 ? void 0 : state.p) !== null && _c !== void 0 ? _c : `.`}[${JSON.stringify(key)}]`;
+ }
+}
+function plural(n, singular, plural2) {
+ return n === 1 ? singular : plural2;
+}
+function pushError({ errors, p } = {}, message) {
+ errors === null || errors === void 0 ? void 0 : errors.push(`${p !== null && p !== void 0 ? p : `.`}: ${message}`);
+ return false;
+}
+function makeSetter(target, key) {
+ return (v) => {
+ target[key] = v;
+ };
+}
+function makeCoercionFn(target, key) {
+ return (v) => {
+ const previous = target[key];
+ target[key] = v;
+ return makeCoercionFn(target, key).bind(null, previous);
+ };
+}
+function makeLazyCoercionFn(fn2, orig, generator) {
+ const commit = () => {
+ fn2(generator());
+ return revert;
+ };
+ const revert = () => {
+ fn2(orig);
+ return commit;
+ };
+ return commit;
+}
+function isUnknown() {
+ return makeValidator({
+ test: (value, state) => {
+ return true;
+ }
+ });
+}
+function isLiteral(expected) {
+ return makeValidator({
+ test: (value, state) => {
+ if (value !== expected)
+ return pushError(state, `Expected ${getPrintable(expected)} (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isString() {
+ return makeValidator({
+ test: (value, state) => {
+ if (typeof value !== `string`)
+ return pushError(state, `Expected a string (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isEnum(enumSpec) {
+ const valuesArray = Array.isArray(enumSpec) ? enumSpec : Object.values(enumSpec);
+ const isAlphaNum = valuesArray.every((item) => typeof item === "string" || typeof item === "number");
+ const values = new Set(valuesArray);
+ if (values.size === 1)
+ return isLiteral([...values][0]);
+ return makeValidator({
+ test: (value, state) => {
+ if (!values.has(value)) {
+ if (isAlphaNum) {
+ return pushError(state, `Expected one of ${getPrintableArray(valuesArray, `or`)} (got ${getPrintable(value)})`);
+ } else {
+ return pushError(state, `Expected a valid enumeration value (got ${getPrintable(value)})`);
+ }
+ }
+ return true;
+ }
+ });
+}
+function isBoolean() {
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (typeof value !== `boolean`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ const coercion = BOOLEAN_COERCIONS.get(value);
+ if (typeof coercion !== `undefined`) {
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]);
+ return true;
+ }
+ }
+ return pushError(state, `Expected a boolean (got ${getPrintable(value)})`);
+ }
+ return true;
+ }
+ });
+}
+function isNumber() {
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (typeof value !== `number`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ let coercion;
+ if (typeof value === `string`) {
+ let val;
+ try {
+ val = JSON.parse(value);
+ } catch (_b) {
+ }
+ if (typeof val === `number`) {
+ if (JSON.stringify(val) === value) {
+ coercion = val;
+ } else {
+ return pushError(state, `Received a number that can't be safely represented by the runtime (${value})`);
+ }
+ }
+ }
+ if (typeof coercion !== `undefined`) {
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]);
+ return true;
+ }
+ }
+ return pushError(state, `Expected a number (got ${getPrintable(value)})`);
+ }
+ return true;
+ }
+ });
+}
+function isPayload(spec) {
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) === `undefined`)
+ return pushError(state, `The isPayload predicate can only be used with coercion enabled`);
+ if (typeof state.coercion === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ if (typeof value !== `string`)
+ return pushError(state, `Expected a string (got ${getPrintable(value)})`);
+ let inner;
+ try {
+ inner = JSON.parse(value);
+ } catch (_b) {
+ return pushError(state, `Expected a JSON string (got ${getPrintable(value)})`);
+ }
+ const wrapper = { value: inner };
+ if (!spec(inner, Object.assign(Object.assign({}, state), { coercion: makeCoercionFn(wrapper, `value`) })))
+ return false;
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, wrapper.value)]);
+ return true;
+ }
+ });
+}
+function isDate() {
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (!(value instanceof Date)) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ let coercion;
+ if (typeof value === `string` && iso8601RegExp.test(value)) {
+ coercion = new Date(value);
+ } else {
+ let timestamp;
+ if (typeof value === `string`) {
+ let val;
+ try {
+ val = JSON.parse(value);
+ } catch (_b) {
+ }
+ if (typeof val === `number`) {
+ timestamp = val;
+ }
+ } else if (typeof value === `number`) {
+ timestamp = value;
+ }
+ if (typeof timestamp !== `undefined`) {
+ if (Number.isSafeInteger(timestamp) || !Number.isSafeInteger(timestamp * 1e3)) {
+ coercion = new Date(timestamp * 1e3);
+ } else {
+ return pushError(state, `Received a timestamp that can't be safely represented by the runtime (${value})`);
+ }
+ }
+ }
+ if (typeof coercion !== `undefined`) {
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, coercion)]);
+ return true;
+ }
+ }
+ return pushError(state, `Expected a date (got ${getPrintable(value)})`);
+ }
+ return true;
+ }
+ });
+}
+function isArray(spec, { delimiter } = {}) {
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ const originalValue = value;
+ if (typeof value === `string` && typeof delimiter !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ value = value.split(delimiter);
+ }
+ }
+ if (!Array.isArray(value))
+ return pushError(state, `Expected an array (got ${getPrintable(value)})`);
+ let valid = true;
+ for (let t = 0, T = value.length; t < T; ++t) {
+ valid = spec(value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid;
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ }
+ if (value !== originalValue)
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]);
+ return valid;
+ }
+ });
+}
+function isSet(spec, { delimiter } = {}) {
+ const isArrayValidator = isArray(spec, { delimiter });
+ return makeValidator({
+ test: (value, state) => {
+ var _a, _b;
+ if (Object.getPrototypeOf(value).toString() === `[object Set]`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ const originalValues = [...value];
+ const coercedValues = [...value];
+ if (!isArrayValidator(coercedValues, Object.assign(Object.assign({}, state), { coercion: void 0 })))
+ return false;
+ const updateValue = () => coercedValues.some((val, t) => val !== originalValues[t]) ? new Set(coercedValues) : value;
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, makeLazyCoercionFn(state.coercion, value, updateValue)]);
+ return true;
+ } else {
+ let valid = true;
+ for (const subValue of value) {
+ valid = spec(subValue, Object.assign({}, state)) && valid;
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ }
+ return valid;
+ }
+ }
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ const store = { value };
+ if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: makeCoercionFn(store, `value`) })))
+ return false;
+ state.coercions.push([(_b = state.p) !== null && _b !== void 0 ? _b : `.`, makeLazyCoercionFn(state.coercion, value, () => new Set(store.value))]);
+ return true;
+ }
+ return pushError(state, `Expected a set (got ${getPrintable(value)})`);
+ }
+ });
+}
+function isMap(keySpec, valueSpec) {
+ const isArrayValidator = isArray(isTuple([keySpec, valueSpec]));
+ const isRecordValidator = isRecord(valueSpec, { keys: keySpec });
+ return makeValidator({
+ test: (value, state) => {
+ var _a, _b, _c;
+ if (Object.getPrototypeOf(value).toString() === `[object Map]`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ const originalValues = [...value];
+ const coercedValues = [...value];
+ if (!isArrayValidator(coercedValues, Object.assign(Object.assign({}, state), { coercion: void 0 })))
+ return false;
+ const updateValue = () => coercedValues.some((val, t) => val[0] !== originalValues[t][0] || val[1] !== originalValues[t][1]) ? new Map(coercedValues) : value;
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, makeLazyCoercionFn(state.coercion, value, updateValue)]);
+ return true;
+ } else {
+ let valid = true;
+ for (const [key, subValue] of value) {
+ valid = keySpec(key, Object.assign({}, state)) && valid;
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ valid = valueSpec(subValue, Object.assign(Object.assign({}, state), { p: computeKey(state, key) })) && valid;
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ }
+ return valid;
+ }
+ }
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ const store = { value };
+ if (Array.isArray(value)) {
+ if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: void 0 })))
+ return false;
+ state.coercions.push([(_b = state.p) !== null && _b !== void 0 ? _b : `.`, makeLazyCoercionFn(state.coercion, value, () => new Map(store.value))]);
+ return true;
+ } else {
+ if (!isRecordValidator(value, Object.assign(Object.assign({}, state), { coercion: makeCoercionFn(store, `value`) })))
+ return false;
+ state.coercions.push([(_c = state.p) !== null && _c !== void 0 ? _c : `.`, makeLazyCoercionFn(state.coercion, value, () => new Map(Object.entries(store.value)))]);
+ return true;
+ }
+ }
+ return pushError(state, `Expected a map (got ${getPrintable(value)})`);
+ }
+ });
+}
+function isTuple(spec, { delimiter } = {}) {
+ const lengthValidator = hasExactLength(spec.length);
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (typeof value === `string` && typeof delimiter !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ value = value.split(delimiter);
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]);
+ }
+ }
+ if (!Array.isArray(value))
+ return pushError(state, `Expected a tuple (got ${getPrintable(value)})`);
+ let valid = lengthValidator(value, Object.assign({}, state));
+ for (let t = 0, T = value.length; t < T && t < spec.length; ++t) {
+ valid = spec[t](value[t], Object.assign(Object.assign({}, state), { p: computeKey(state, t), coercion: makeCoercionFn(value, t) })) && valid;
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ }
+ return valid;
+ }
+ });
+}
+function isRecord(spec, { keys: keySpec = null } = {}) {
+ const isArrayValidator = isArray(isTuple([keySpec !== null && keySpec !== void 0 ? keySpec : isString(), spec]));
+ return makeValidator({
+ test: (value, state) => {
+ var _a;
+ if (Array.isArray(value)) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ if (!isArrayValidator(value, Object.assign(Object.assign({}, state), { coercion: void 0 })))
+ return false;
+ value = Object.fromEntries(value);
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, value)]);
+ return true;
+ }
+ }
+ if (typeof value !== `object` || value === null)
+ return pushError(state, `Expected an object (got ${getPrintable(value)})`);
+ const keys = Object.keys(value);
+ let valid = true;
+ for (let t = 0, T = keys.length; t < T && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null); ++t) {
+ const key = keys[t];
+ const sub = value[key];
+ if (key === `__proto__` || key === `constructor`) {
+ valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`);
+ continue;
+ }
+ if (keySpec !== null && !keySpec(key, state)) {
+ valid = false;
+ continue;
+ }
+ if (!spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) }))) {
+ valid = false;
+ continue;
+ }
+ }
+ return valid;
+ }
+ });
+}
+function isDict(spec, opts = {}) {
+ return isRecord(spec, opts);
+}
+function isObject(props, { extra: extraSpec = null } = {}) {
+ const specKeys = Object.keys(props);
+ const validator = makeValidator({
+ test: (value, state) => {
+ if (typeof value !== `object` || value === null)
+ return pushError(state, `Expected an object (got ${getPrintable(value)})`);
+ const keys = /* @__PURE__ */ new Set([...specKeys, ...Object.keys(value)]);
+ const extra = {};
+ let valid = true;
+ for (const key of keys) {
+ if (key === `constructor` || key === `__proto__`) {
+ valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Unsafe property name`);
+ } else {
+ const spec = Object.prototype.hasOwnProperty.call(props, key) ? props[key] : void 0;
+ const sub = Object.prototype.hasOwnProperty.call(value, key) ? value[key] : void 0;
+ if (typeof spec !== `undefined`) {
+ valid = spec(sub, Object.assign(Object.assign({}, state), { p: computeKey(state, key), coercion: makeCoercionFn(value, key) })) && valid;
+ } else if (extraSpec === null) {
+ valid = pushError(Object.assign(Object.assign({}, state), { p: computeKey(state, key) }), `Extraneous property (got ${getPrintable(sub)})`);
+ } else {
+ Object.defineProperty(extra, key, {
+ enumerable: true,
+ get: () => sub,
+ set: makeSetter(value, key)
+ });
+ }
+ }
+ if (!valid && (state === null || state === void 0 ? void 0 : state.errors) == null) {
+ break;
+ }
+ }
+ if (extraSpec !== null && (valid || (state === null || state === void 0 ? void 0 : state.errors) != null))
+ valid = extraSpec(extra, state) && valid;
+ return valid;
+ }
+ });
+ return Object.assign(validator, {
+ properties: props
+ });
+}
+function isPartial(props) {
+ return isObject(props, { extra: isRecord(isUnknown()) });
+}
+function makeTrait(value) {
+ return () => {
+ return value;
+ };
+}
+function makeValidator({ test }) {
+ return makeTrait(test)();
+}
+function assert(val, validator) {
+ if (!validator(val)) {
+ throw new TypeAssertionError();
+ }
+}
+function assertWithErrors(val, validator) {
+ const errors = [];
+ if (!validator(val, { errors })) {
+ throw new TypeAssertionError({ errors });
+ }
+}
+function softAssert(val, validator) {
+}
+function as(value, validator, { coerce = false, errors: storeErrors, throw: throws } = {}) {
+ const errors = storeErrors ? [] : void 0;
+ if (!coerce) {
+ if (validator(value, { errors })) {
+ return throws ? value : { value, errors: void 0 };
+ } else if (!throws) {
+ return { value: void 0, errors: errors !== null && errors !== void 0 ? errors : true };
+ } else {
+ throw new TypeAssertionError({ errors });
+ }
+ }
+ const state = { value };
+ const coercion = makeCoercionFn(state, `value`);
+ const coercions = [];
+ if (!validator(value, { errors, coercion, coercions })) {
+ if (!throws) {
+ return { value: void 0, errors: errors !== null && errors !== void 0 ? errors : true };
+ } else {
+ throw new TypeAssertionError({ errors });
+ }
+ }
+ for (const [, apply] of coercions)
+ apply();
+ if (throws) {
+ return state.value;
+ } else {
+ return { value: state.value, errors: void 0 };
+ }
+}
+function fn(validators, fn2) {
+ const isValidArgList = isTuple(validators);
+ return ((...args) => {
+ const check = isValidArgList(args);
+ if (!check)
+ throw new TypeAssertionError();
+ return fn2(...args);
+ });
+}
+function hasMinLength(length) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value.length >= length))
+ return pushError(state, `Expected to have a length of at least ${length} elements (got ${value.length})`);
+ return true;
+ }
+ });
+}
+function hasMaxLength(length) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value.length <= length))
+ return pushError(state, `Expected to have a length of at most ${length} elements (got ${value.length})`);
+ return true;
+ }
+ });
+}
+function hasExactLength(length) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value.length === length))
+ return pushError(state, `Expected to have a length of exactly ${length} elements (got ${value.length})`);
+ return true;
+ }
+ });
+}
+function hasUniqueItems({ map } = {}) {
+ return makeValidator({
+ test: (value, state) => {
+ const set = /* @__PURE__ */ new Set();
+ const dup = /* @__PURE__ */ new Set();
+ for (let t = 0, T = value.length; t < T; ++t) {
+ const sub = value[t];
+ const key = typeof map !== `undefined` ? map(sub) : sub;
+ if (set.has(key)) {
+ if (dup.has(key))
+ continue;
+ pushError(state, `Expected to contain unique elements; got a duplicate with ${getPrintable(value)}`);
+ dup.add(key);
+ } else {
+ set.add(key);
+ }
+ }
+ return dup.size === 0;
+ }
+ });
+}
+function isNegative() {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value <= 0))
+ return pushError(state, `Expected to be negative (got ${value})`);
+ return true;
+ }
+ });
+}
+function isPositive() {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value >= 0))
+ return pushError(state, `Expected to be positive (got ${value})`);
+ return true;
+ }
+ });
+}
+function isAtLeast(n) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value >= n))
+ return pushError(state, `Expected to be at least ${n} (got ${value})`);
+ return true;
+ }
+ });
+}
+function isAtMost(n) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value <= n))
+ return pushError(state, `Expected to be at most ${n} (got ${value})`);
+ return true;
+ }
+ });
+}
+function isInInclusiveRange(a, b) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value >= a && value <= b))
+ return pushError(state, `Expected to be in the [${a}; ${b}] range (got ${value})`);
+ return true;
+ }
+ });
+}
+function isInExclusiveRange(a, b) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!(value >= a && value < b))
+ return pushError(state, `Expected to be in the [${a}; ${b}[ range (got ${value})`);
+ return true;
+ }
+ });
+}
+function isInteger({ unsafe = false } = {}) {
+ return makeValidator({
+ test: (value, state) => {
+ if (value !== Math.round(value))
+ return pushError(state, `Expected to be an integer (got ${value})`);
+ if (!unsafe && !Number.isSafeInteger(value))
+ return pushError(state, `Expected to be a safe integer (got ${value})`);
+ return true;
+ }
+ });
+}
+function matchesRegExp(regExp) {
+ return makeValidator({
+ test: (value, state) => {
+ if (!regExp.test(value))
+ return pushError(state, `Expected to match the pattern ${regExp.toString()} (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isLowerCase() {
+ return makeValidator({
+ test: (value, state) => {
+ if (value !== value.toLowerCase())
+ return pushError(state, `Expected to be all-lowercase (got ${value})`);
+ return true;
+ }
+ });
+}
+function isUpperCase() {
+ return makeValidator({
+ test: (value, state) => {
+ if (value !== value.toUpperCase())
+ return pushError(state, `Expected to be all-uppercase (got ${value})`);
+ return true;
+ }
+ });
+}
+function isUUID4() {
+ return makeValidator({
+ test: (value, state) => {
+ if (!uuid4RegExp.test(value))
+ return pushError(state, `Expected to be a valid UUID v4 (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isISO8601() {
+ return makeValidator({
+ test: (value, state) => {
+ if (!iso8601RegExp.test(value))
+ return pushError(state, `Expected to be a valid ISO 8601 date string (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isHexColor({ alpha = false }) {
+ return makeValidator({
+ test: (value, state) => {
+ const res = alpha ? colorStringRegExp.test(value) : colorStringAlphaRegExp.test(value);
+ if (!res)
+ return pushError(state, `Expected to be a valid hexadecimal color string (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isBase64() {
+ return makeValidator({
+ test: (value, state) => {
+ if (!base64RegExp.test(value))
+ return pushError(state, `Expected to be a valid base 64 string (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+}
+function isJSON(spec = isUnknown()) {
+ return makeValidator({
+ test: (value, state) => {
+ let data;
+ try {
+ data = JSON.parse(value);
+ } catch (_a) {
+ return pushError(state, `Expected to be a valid JSON string (got ${getPrintable(value)})`);
+ }
+ return spec(data, state);
+ }
+ });
+}
+function cascade(spec, ...followups) {
+ const resolvedFollowups = Array.isArray(followups[0]) ? followups[0] : followups;
+ return makeValidator({
+ test: (value, state) => {
+ var _a, _b;
+ const context = { value };
+ const subCoercion = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` ? makeCoercionFn(context, `value`) : void 0;
+ const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` ? [] : void 0;
+ if (!spec(value, Object.assign(Object.assign({}, state), { coercion: subCoercion, coercions: subCoercions })))
+ return false;
+ const reverts = [];
+ if (typeof subCoercions !== `undefined`)
+ for (const [, coercion] of subCoercions)
+ reverts.push(coercion());
+ try {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined`) {
+ if (context.value !== value) {
+ if (typeof (state === null || state === void 0 ? void 0 : state.coercion) === `undefined`)
+ return pushError(state, `Unbound coercion result`);
+ state.coercions.push([(_a = state.p) !== null && _a !== void 0 ? _a : `.`, state.coercion.bind(null, context.value)]);
+ }
+ (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions);
+ }
+ return resolvedFollowups.every((spec2) => {
+ return spec2(context.value, state);
+ });
+ } finally {
+ for (const revert of reverts) {
+ revert();
+ }
+ }
+ }
+ });
+}
+function applyCascade(spec, ...followups) {
+ const resolvedFollowups = Array.isArray(followups[0]) ? followups[0] : followups;
+ return cascade(spec, resolvedFollowups);
+}
+function isOptional(spec) {
+ return makeValidator({
+ test: (value, state) => {
+ if (typeof value === `undefined`)
+ return true;
+ return spec(value, state);
+ }
+ });
+}
+function isNullable(spec) {
+ return makeValidator({
+ test: (value, state) => {
+ if (value === null)
+ return true;
+ return spec(value, state);
+ }
+ });
+}
+function hasRequiredKeys(requiredKeys, options) {
+ var _a;
+ const requiredSet = new Set(requiredKeys);
+ const check = checks[(_a = options === null || options === void 0 ? void 0 : options.missingIf) !== null && _a !== void 0 ? _a : "missing"];
+ return makeValidator({
+ test: (value, state) => {
+ const keys = new Set(Object.keys(value));
+ const problems = [];
+ for (const key of requiredSet)
+ if (!check(keys, key, value))
+ problems.push(key);
+ if (problems.length > 0)
+ return pushError(state, `Missing required ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, `and`)}`);
+ return true;
+ }
+ });
+}
+function hasAtLeastOneKey(requiredKeys, options) {
+ var _a;
+ const requiredSet = new Set(requiredKeys);
+ const check = checks[(_a = options === null || options === void 0 ? void 0 : options.missingIf) !== null && _a !== void 0 ? _a : "missing"];
+ return makeValidator({
+ test: (value, state) => {
+ const keys = Object.keys(value);
+ const valid = keys.some((key) => check(requiredSet, key, value));
+ if (!valid)
+ return pushError(state, `Missing at least one property from ${getPrintableArray(Array.from(requiredSet), `or`)}`);
+ return true;
+ }
+ });
+}
+function hasForbiddenKeys(forbiddenKeys, options) {
+ var _a;
+ const forbiddenSet = new Set(forbiddenKeys);
+ const check = checks[(_a = options === null || options === void 0 ? void 0 : options.missingIf) !== null && _a !== void 0 ? _a : "missing"];
+ return makeValidator({
+ test: (value, state) => {
+ const keys = new Set(Object.keys(value));
+ const problems = [];
+ for (const key of forbiddenSet)
+ if (check(keys, key, value))
+ problems.push(key);
+ if (problems.length > 0)
+ return pushError(state, `Forbidden ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, `and`)}`);
+ return true;
+ }
+ });
+}
+function hasMutuallyExclusiveKeys(exclusiveKeys, options) {
+ var _a;
+ const exclusiveSet = new Set(exclusiveKeys);
+ const check = checks[(_a = options === null || options === void 0 ? void 0 : options.missingIf) !== null && _a !== void 0 ? _a : "missing"];
+ return makeValidator({
+ test: (value, state) => {
+ const keys = new Set(Object.keys(value));
+ const used = [];
+ for (const key of exclusiveSet)
+ if (check(keys, key, value))
+ used.push(key);
+ if (used.length > 1)
+ return pushError(state, `Mutually exclusive properties ${getPrintableArray(used, `and`)}`);
+ return true;
+ }
+ });
+}
+function hasKeyRelationship(subject, relationship, others, options) {
+ var _a, _b;
+ const skipped = new Set((_a = options === null || options === void 0 ? void 0 : options.ignore) !== null && _a !== void 0 ? _a : []);
+ const check = checks[(_b = options === null || options === void 0 ? void 0 : options.missingIf) !== null && _b !== void 0 ? _b : "missing"];
+ const otherSet = new Set(others);
+ const spec = keyRelationships[relationship];
+ const conjunction = relationship === KeyRelationship.Forbids ? `or` : `and`;
+ return makeValidator({
+ test: (value, state) => {
+ const keys = new Set(Object.keys(value));
+ if (!check(keys, subject, value) || skipped.has(value[subject]))
+ return true;
+ const problems = [];
+ for (const key of otherSet)
+ if ((check(keys, key, value) && !skipped.has(value[key])) !== spec.expect)
+ problems.push(key);
+ if (problems.length >= 1)
+ return pushError(state, `Property "${subject}" ${spec.message} ${plural(problems.length, `property`, `properties`)} ${getPrintableArray(problems, conjunction)}`);
+ return true;
+ }
+ });
+}
+var simpleKeyRegExp, colorStringRegExp, colorStringAlphaRegExp, base64RegExp, uuid4RegExp, iso8601RegExp, BOOLEAN_COERCIONS, isInstanceOf, isOneOf, TypeAssertionError, checks, KeyRelationship, keyRelationships;
+var init_lib = __esm({
+ "node_modules/typanion/lib/index.mjs"() {
+ simpleKeyRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
+ colorStringRegExp = /^#[0-9a-f]{6}$/i;
+ colorStringAlphaRegExp = /^#[0-9a-f]{6}([0-9a-f]{2})?$/i;
+ base64RegExp = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
+ uuid4RegExp = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i;
+ iso8601RegExp = /^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;
+ BOOLEAN_COERCIONS = /* @__PURE__ */ new Map([
+ [`true`, true],
+ [`True`, true],
+ [`1`, true],
+ [1, true],
+ [`false`, false],
+ [`False`, false],
+ [`0`, false],
+ [0, false]
+ ]);
+ isInstanceOf = (constructor) => makeValidator({
+ test: (value, state) => {
+ if (!(value instanceof constructor))
+ return pushError(state, `Expected an instance of ${constructor.name} (got ${getPrintable(value)})`);
+ return true;
+ }
+ });
+ isOneOf = (specs, { exclusive = false } = {}) => makeValidator({
+ test: (value, state) => {
+ var _a, _b, _c;
+ const matches = [];
+ const errorBuffer = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` ? [] : void 0;
+ for (let t = 0, T = specs.length; t < T; ++t) {
+ const subErrors = typeof (state === null || state === void 0 ? void 0 : state.errors) !== `undefined` ? [] : void 0;
+ const subCoercions = typeof (state === null || state === void 0 ? void 0 : state.coercions) !== `undefined` ? [] : void 0;
+ if (specs[t](value, Object.assign(Object.assign({}, state), { errors: subErrors, coercions: subCoercions, p: `${(_a = state === null || state === void 0 ? void 0 : state.p) !== null && _a !== void 0 ? _a : `.`}#${t + 1}` }))) {
+ matches.push([`#${t + 1}`, subCoercions]);
+ if (!exclusive) {
+ break;
+ }
+ } else {
+ errorBuffer === null || errorBuffer === void 0 ? void 0 : errorBuffer.push(subErrors[0]);
+ }
+ }
+ if (matches.length === 1) {
+ const [, subCoercions] = matches[0];
+ if (typeof subCoercions !== `undefined`)
+ (_b = state === null || state === void 0 ? void 0 : state.coercions) === null || _b === void 0 ? void 0 : _b.push(...subCoercions);
+ return true;
+ }
+ if (matches.length > 1)
+ pushError(state, `Expected to match exactly a single predicate (matched ${matches.join(`, `)})`);
+ else
+ (_c = state === null || state === void 0 ? void 0 : state.errors) === null || _c === void 0 ? void 0 : _c.push(...errorBuffer);
+ return false;
+ }
+ });
+ TypeAssertionError = class extends Error {
+ constructor({ errors } = {}) {
+ let errorMessage = `Type mismatch`;
+ if (errors && errors.length > 0) {
+ errorMessage += `
+`;
+ for (const error of errors) {
+ errorMessage += `
+- ${error}`;
+ }
+ }
+ super(errorMessage);
+ }
+ };
+ checks = {
+ missing: (keys, key) => keys.has(key),
+ undefined: (keys, key, value) => keys.has(key) && typeof value[key] !== `undefined`,
+ nil: (keys, key, value) => keys.has(key) && value[key] != null,
+ falsy: (keys, key, value) => keys.has(key) && !!value[key]
+ };
+ (function(KeyRelationship2) {
+ KeyRelationship2["Forbids"] = "Forbids";
+ KeyRelationship2["Requires"] = "Requires";
+ })(KeyRelationship || (KeyRelationship = {}));
+ keyRelationships = {
+ [KeyRelationship.Forbids]: {
+ expect: false,
+ message: `forbids using`
+ },
+ [KeyRelationship.Requires]: {
+ expect: true,
+ message: `requires using`
+ }
+ };
+ }
+});
+
+// node_modules/clipanion/lib/advanced/Command.js
+var require_Command = __commonJS({
+ "node_modules/clipanion/lib/advanced/Command.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ function _interopNamespace(e) {
+ if (e && e.__esModule) return e;
+ var n = /* @__PURE__ */ Object.create(null);
+ if (e) {
+ Object.keys(e).forEach(function(k) {
+ if (k !== "default") {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function() {
+ return e[k];
+ }
+ });
+ }
+ });
+ }
+ n["default"] = e;
+ return Object.freeze(n);
+ }
+ var Command12 = class {
+ constructor() {
+ this.help = false;
+ }
+ /**
+ * Defines the usage information for the given command.
+ */
+ static Usage(usage) {
+ return usage;
+ }
+ /**
+ * Standard error handler which will simply rethrow the error. Can be used
+ * to add custom logic to handle errors from the command or simply return
+ * the parent class error handling.
+ */
+ async catch(error) {
+ throw error;
+ }
+ async validateAndExecute() {
+ const commandClass = this.constructor;
+ const cascade2 = commandClass.schema;
+ if (Array.isArray(cascade2)) {
+ const { isDict: isDict2, isUnknown: isUnknown2, applyCascade: applyCascade2 } = await Promise.resolve().then(function() {
+ return /* @__PURE__ */ _interopNamespace((init_lib(), __toCommonJS(lib_exports)));
+ });
+ const schema = applyCascade2(isDict2(isUnknown2()), cascade2);
+ const errors = [];
+ const coercions = [];
+ const check = schema(this, { errors, coercions });
+ if (!check)
+ throw advanced_options_utils.formatError(`Invalid option schema`, errors);
+ for (const [, op] of coercions) {
+ op();
+ }
+ } else if (cascade2 != null) {
+ throw new Error(`Invalid command schema`);
+ }
+ const exitCode = await this.execute();
+ if (typeof exitCode !== `undefined`) {
+ return exitCode;
+ } else {
+ return 0;
+ }
+ }
+ };
+ Command12.isOption = advanced_options_utils.isOptionSymbol;
+ Command12.Default = [];
+ exports2.Command = Command12;
+ }
+});
+
+// node_modules/clipanion/lib/core.js
+var require_core = __commonJS({
+ "node_modules/clipanion/lib/core.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var constants2 = require_constants();
+ var errors = require_errors();
+ function debug(str) {
+ if (constants2.DEBUG) {
+ console.log(str);
+ }
+ }
+ var basicHelpState = {
+ candidateUsage: null,
+ requiredOptions: [],
+ errorMessage: null,
+ ignoreOptions: false,
+ path: [],
+ positionals: [],
+ options: [],
+ remainder: null,
+ selectedIndex: constants2.HELP_COMMAND_INDEX
+ };
+ function makeStateMachine() {
+ return {
+ nodes: [makeNode(), makeNode(), makeNode()]
+ };
+ }
+ function makeAnyOfMachine(inputs) {
+ const output = makeStateMachine();
+ const heads = [];
+ let offset = output.nodes.length;
+ for (const input of inputs) {
+ heads.push(offset);
+ for (let t = 0; t < input.nodes.length; ++t)
+ if (!isTerminalNode(t))
+ output.nodes.push(cloneNode(input.nodes[t], offset));
+ offset += input.nodes.length - 2;
+ }
+ for (const head of heads)
+ registerShortcut(output, constants2.NODE_INITIAL, head);
+ return output;
+ }
+ function injectNode(machine, node) {
+ machine.nodes.push(node);
+ return machine.nodes.length - 1;
+ }
+ function simplifyMachine(input) {
+ const visited = /* @__PURE__ */ new Set();
+ const process5 = (node) => {
+ if (visited.has(node))
+ return;
+ visited.add(node);
+ const nodeDef = input.nodes[node];
+ for (const transitions of Object.values(nodeDef.statics))
+ for (const { to } of transitions)
+ process5(to);
+ for (const [, { to }] of nodeDef.dynamics)
+ process5(to);
+ for (const { to } of nodeDef.shortcuts)
+ process5(to);
+ const shortcuts = new Set(nodeDef.shortcuts.map(({ to }) => to));
+ while (nodeDef.shortcuts.length > 0) {
+ const { to } = nodeDef.shortcuts.shift();
+ const toDef = input.nodes[to];
+ for (const [segment, transitions] of Object.entries(toDef.statics)) {
+ const store = !Object.prototype.hasOwnProperty.call(nodeDef.statics, segment) ? nodeDef.statics[segment] = [] : nodeDef.statics[segment];
+ for (const transition of transitions) {
+ if (!store.some(({ to: to2 }) => transition.to === to2)) {
+ store.push(transition);
+ }
+ }
+ }
+ for (const [test, transition] of toDef.dynamics)
+ if (!nodeDef.dynamics.some(([otherTest, { to: to2 }]) => test === otherTest && transition.to === to2))
+ nodeDef.dynamics.push([test, transition]);
+ for (const transition of toDef.shortcuts) {
+ if (!shortcuts.has(transition.to)) {
+ nodeDef.shortcuts.push(transition);
+ shortcuts.add(transition.to);
+ }
+ }
+ }
+ };
+ process5(constants2.NODE_INITIAL);
+ }
+ function debugMachine(machine, { prefix = `` } = {}) {
+ if (constants2.DEBUG) {
+ debug(`${prefix}Nodes are:`);
+ for (let t = 0; t < machine.nodes.length; ++t) {
+ debug(`${prefix} ${t}: ${JSON.stringify(machine.nodes[t])}`);
+ }
+ }
+ }
+ function runMachineInternal(machine, input, partial = false) {
+ debug(`Running a vm on ${JSON.stringify(input)}`);
+ let branches = [{ node: constants2.NODE_INITIAL, state: {
+ candidateUsage: null,
+ requiredOptions: [],
+ errorMessage: null,
+ ignoreOptions: false,
+ options: [],
+ path: [],
+ positionals: [],
+ remainder: null,
+ selectedIndex: null
+ } }];
+ debugMachine(machine, { prefix: ` ` });
+ const tokens = [constants2.START_OF_INPUT, ...input];
+ for (let t = 0; t < tokens.length; ++t) {
+ const segment = tokens[t];
+ debug(` Processing ${JSON.stringify(segment)}`);
+ const nextBranches = [];
+ for (const { node, state } of branches) {
+ debug(` Current node is ${node}`);
+ const nodeDef = machine.nodes[node];
+ if (node === constants2.NODE_ERRORED) {
+ nextBranches.push({ node, state });
+ continue;
+ }
+ console.assert(nodeDef.shortcuts.length === 0, `Shortcuts should have been eliminated by now`);
+ const hasExactMatch = Object.prototype.hasOwnProperty.call(nodeDef.statics, segment);
+ if (!partial || t < tokens.length - 1 || hasExactMatch) {
+ if (hasExactMatch) {
+ const transitions = nodeDef.statics[segment];
+ for (const { to, reducer } of transitions) {
+ nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state });
+ debug(` Static transition to ${to} found`);
+ }
+ } else {
+ debug(` No static transition found`);
+ }
+ } else {
+ let hasMatches = false;
+ for (const candidate of Object.keys(nodeDef.statics)) {
+ if (!candidate.startsWith(segment))
+ continue;
+ if (segment === candidate) {
+ for (const { to, reducer } of nodeDef.statics[candidate]) {
+ nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state });
+ debug(` Static transition to ${to} found`);
+ }
+ } else {
+ for (const { to } of nodeDef.statics[candidate]) {
+ nextBranches.push({ node: to, state: { ...state, remainder: candidate.slice(segment.length) } });
+ debug(` Static transition to ${to} found (partial match)`);
+ }
+ }
+ hasMatches = true;
+ }
+ if (!hasMatches) {
+ debug(` No partial static transition found`);
+ }
+ }
+ if (segment !== constants2.END_OF_INPUT) {
+ for (const [test, { to, reducer }] of nodeDef.dynamics) {
+ if (execute(tests, test, state, segment)) {
+ nextBranches.push({ node: to, state: typeof reducer !== `undefined` ? execute(reducers, reducer, state, segment) : state });
+ debug(` Dynamic transition to ${to} found (via ${test})`);
+ }
+ }
+ }
+ }
+ if (nextBranches.length === 0 && segment === constants2.END_OF_INPUT && input.length === 1) {
+ return [{
+ node: constants2.NODE_INITIAL,
+ state: basicHelpState
+ }];
+ }
+ if (nextBranches.length === 0) {
+ throw new errors.UnknownSyntaxError(input, branches.filter(({ node }) => {
+ return node !== constants2.NODE_ERRORED;
+ }).map(({ state }) => {
+ return { usage: state.candidateUsage, reason: null };
+ }));
+ }
+ if (nextBranches.every(({ node }) => node === constants2.NODE_ERRORED)) {
+ throw new errors.UnknownSyntaxError(input, nextBranches.map(({ state }) => {
+ return { usage: state.candidateUsage, reason: state.errorMessage };
+ }));
+ }
+ branches = trimSmallerBranches(nextBranches);
+ }
+ if (branches.length > 0) {
+ debug(` Results:`);
+ for (const branch of branches) {
+ debug(` - ${branch.node} -> ${JSON.stringify(branch.state)}`);
+ }
+ } else {
+ debug(` No results`);
+ }
+ return branches;
+ }
+ function checkIfNodeIsFinished(node, state) {
+ if (state.selectedIndex !== null)
+ return true;
+ if (Object.prototype.hasOwnProperty.call(node.statics, constants2.END_OF_INPUT)) {
+ for (const { to } of node.statics[constants2.END_OF_INPUT])
+ if (to === constants2.NODE_SUCCESS)
+ return true;
+ }
+ return false;
+ }
+ function suggestMachine(machine, input, partial) {
+ const prefix = partial && input.length > 0 ? [``] : [];
+ const branches = runMachineInternal(machine, input, partial);
+ const suggestions = [];
+ const suggestionsJson = /* @__PURE__ */ new Set();
+ const traverseSuggestion = (suggestion, node, skipFirst = true) => {
+ let nextNodes = [node];
+ while (nextNodes.length > 0) {
+ const currentNodes = nextNodes;
+ nextNodes = [];
+ for (const node2 of currentNodes) {
+ const nodeDef = machine.nodes[node2];
+ const keys = Object.keys(nodeDef.statics);
+ for (const key of Object.keys(nodeDef.statics)) {
+ const segment = keys[0];
+ for (const { to, reducer } of nodeDef.statics[segment]) {
+ if (reducer !== `pushPath`)
+ continue;
+ if (!skipFirst)
+ suggestion.push(segment);
+ nextNodes.push(to);
+ }
+ }
+ }
+ skipFirst = false;
+ }
+ const json = JSON.stringify(suggestion);
+ if (suggestionsJson.has(json))
+ return;
+ suggestions.push(suggestion);
+ suggestionsJson.add(json);
+ };
+ for (const { node, state } of branches) {
+ if (state.remainder !== null) {
+ traverseSuggestion([state.remainder], node);
+ continue;
+ }
+ const nodeDef = machine.nodes[node];
+ const isFinished = checkIfNodeIsFinished(nodeDef, state);
+ for (const [candidate, transitions] of Object.entries(nodeDef.statics))
+ if (isFinished && candidate !== constants2.END_OF_INPUT || !candidate.startsWith(`-`) && transitions.some(({ reducer }) => reducer === `pushPath`))
+ traverseSuggestion([...prefix, candidate], node);
+ if (!isFinished)
+ continue;
+ for (const [test, { to }] of nodeDef.dynamics) {
+ if (to === constants2.NODE_ERRORED)
+ continue;
+ const tokens = suggest(test, state);
+ if (tokens === null)
+ continue;
+ for (const token of tokens) {
+ traverseSuggestion([...prefix, token], node);
+ }
+ }
+ }
+ return [...suggestions].sort();
+ }
+ function runMachine(machine, input) {
+ const branches = runMachineInternal(machine, [...input, constants2.END_OF_INPUT]);
+ return selectBestState(input, branches.map(({ state }) => {
+ return state;
+ }));
+ }
+ function trimSmallerBranches(branches) {
+ let maxPathSize = 0;
+ for (const { state } of branches)
+ if (state.path.length > maxPathSize)
+ maxPathSize = state.path.length;
+ return branches.filter(({ state }) => {
+ return state.path.length === maxPathSize;
+ });
+ }
+ function selectBestState(input, states) {
+ const terminalStates = states.filter((state) => {
+ return state.selectedIndex !== null;
+ });
+ if (terminalStates.length === 0)
+ throw new Error();
+ const requiredOptionsSetStates = terminalStates.filter((state) => state.selectedIndex === constants2.HELP_COMMAND_INDEX || state.requiredOptions.every((names) => names.some((name2) => state.options.find((opt) => opt.name === name2))));
+ if (requiredOptionsSetStates.length === 0) {
+ throw new errors.UnknownSyntaxError(input, terminalStates.map((state) => ({
+ usage: state.candidateUsage,
+ reason: null
+ })));
+ }
+ let maxPathSize = 0;
+ for (const state of requiredOptionsSetStates)
+ if (state.path.length > maxPathSize)
+ maxPathSize = state.path.length;
+ const bestPathBranches = requiredOptionsSetStates.filter((state) => {
+ return state.path.length === maxPathSize;
+ });
+ const getPositionalCount = (state) => state.positionals.filter(({ extra }) => {
+ return !extra;
+ }).length + state.options.length;
+ const statesWithPositionalCount = bestPathBranches.map((state) => {
+ return { state, positionalCount: getPositionalCount(state) };
+ });
+ let maxPositionalCount = 0;
+ for (const { positionalCount } of statesWithPositionalCount)
+ if (positionalCount > maxPositionalCount)
+ maxPositionalCount = positionalCount;
+ const bestPositionalStates = statesWithPositionalCount.filter(({ positionalCount }) => {
+ return positionalCount === maxPositionalCount;
+ }).map(({ state }) => {
+ return state;
+ });
+ const fixedStates = aggregateHelpStates(bestPositionalStates);
+ if (fixedStates.length > 1)
+ throw new errors.AmbiguousSyntaxError(input, fixedStates.map((state) => state.candidateUsage));
+ return fixedStates[0];
+ }
+ function aggregateHelpStates(states) {
+ const notHelps = [];
+ const helps = [];
+ for (const state of states) {
+ if (state.selectedIndex === constants2.HELP_COMMAND_INDEX) {
+ helps.push(state);
+ } else {
+ notHelps.push(state);
+ }
+ }
+ if (helps.length > 0) {
+ notHelps.push({
+ ...basicHelpState,
+ path: findCommonPrefix(...helps.map((state) => state.path)),
+ options: helps.reduce((options, state) => options.concat(state.options), [])
+ });
+ }
+ return notHelps;
+ }
+ function findCommonPrefix(firstPath, secondPath, ...rest) {
+ if (secondPath === void 0)
+ return Array.from(firstPath);
+ return findCommonPrefix(firstPath.filter((segment, i) => segment === secondPath[i]), ...rest);
+ }
+ function makeNode() {
+ return {
+ dynamics: [],
+ shortcuts: [],
+ statics: {}
+ };
+ }
+ function isTerminalNode(node) {
+ return node === constants2.NODE_SUCCESS || node === constants2.NODE_ERRORED;
+ }
+ function cloneTransition(input, offset = 0) {
+ return {
+ to: !isTerminalNode(input.to) ? input.to > 2 ? input.to + offset - 2 : input.to + offset : input.to,
+ reducer: input.reducer
+ };
+ }
+ function cloneNode(input, offset = 0) {
+ const output = makeNode();
+ for (const [test, transition] of input.dynamics)
+ output.dynamics.push([test, cloneTransition(transition, offset)]);
+ for (const transition of input.shortcuts)
+ output.shortcuts.push(cloneTransition(transition, offset));
+ for (const [segment, transitions] of Object.entries(input.statics))
+ output.statics[segment] = transitions.map((transition) => cloneTransition(transition, offset));
+ return output;
+ }
+ function registerDynamic(machine, from, test, to, reducer) {
+ machine.nodes[from].dynamics.push([
+ test,
+ { to, reducer }
+ ]);
+ }
+ function registerShortcut(machine, from, to, reducer) {
+ machine.nodes[from].shortcuts.push({ to, reducer });
+ }
+ function registerStatic(machine, from, test, to, reducer) {
+ const store = !Object.prototype.hasOwnProperty.call(machine.nodes[from].statics, test) ? machine.nodes[from].statics[test] = [] : machine.nodes[from].statics[test];
+ store.push({ to, reducer });
+ }
+ function execute(store, callback, state, segment) {
+ if (Array.isArray(callback)) {
+ const [name2, ...args] = callback;
+ return store[name2](state, segment, ...args);
+ } else {
+ return store[callback](state, segment);
+ }
+ }
+ function suggest(callback, state) {
+ const fn2 = Array.isArray(callback) ? tests[callback[0]] : tests[callback];
+ if (typeof fn2.suggest === `undefined`)
+ return null;
+ const args = Array.isArray(callback) ? callback.slice(1) : [];
+ return fn2.suggest(state, ...args);
+ }
+ var tests = {
+ always: () => {
+ return true;
+ },
+ isOptionLike: (state, segment) => {
+ return !state.ignoreOptions && (segment !== `-` && segment.startsWith(`-`));
+ },
+ isNotOptionLike: (state, segment) => {
+ return state.ignoreOptions || segment === `-` || !segment.startsWith(`-`);
+ },
+ isOption: (state, segment, name2, hidden) => {
+ return !state.ignoreOptions && segment === name2;
+ },
+ isBatchOption: (state, segment, names) => {
+ return !state.ignoreOptions && constants2.BATCH_REGEX.test(segment) && [...segment.slice(1)].every((name2) => names.includes(`-${name2}`));
+ },
+ isBoundOption: (state, segment, names, options) => {
+ const optionParsing = segment.match(constants2.BINDING_REGEX);
+ return !state.ignoreOptions && !!optionParsing && constants2.OPTION_REGEX.test(optionParsing[1]) && names.includes(optionParsing[1]) && options.filter((opt) => opt.names.includes(optionParsing[1])).every((opt) => opt.allowBinding);
+ },
+ isNegatedOption: (state, segment, name2) => {
+ return !state.ignoreOptions && segment === `--no-${name2.slice(2)}`;
+ },
+ isHelp: (state, segment) => {
+ return !state.ignoreOptions && constants2.HELP_REGEX.test(segment);
+ },
+ isUnsupportedOption: (state, segment, names) => {
+ return !state.ignoreOptions && segment.startsWith(`-`) && constants2.OPTION_REGEX.test(segment) && !names.includes(segment);
+ },
+ isInvalidOption: (state, segment) => {
+ return !state.ignoreOptions && segment.startsWith(`-`) && !constants2.OPTION_REGEX.test(segment);
+ }
+ };
+ tests.isOption.suggest = (state, name2, hidden = true) => {
+ return !hidden ? [name2] : null;
+ };
+ var reducers = {
+ setCandidateState: (state, segment, candidateState) => {
+ return { ...state, ...candidateState };
+ },
+ setSelectedIndex: (state, segment, index) => {
+ return { ...state, selectedIndex: index };
+ },
+ pushBatch: (state, segment) => {
+ return { ...state, options: state.options.concat([...segment.slice(1)].map((name2) => ({ name: `-${name2}`, value: true }))) };
+ },
+ pushBound: (state, segment) => {
+ const [, name2, value] = segment.match(constants2.BINDING_REGEX);
+ return { ...state, options: state.options.concat({ name: name2, value }) };
+ },
+ pushPath: (state, segment) => {
+ return { ...state, path: state.path.concat(segment) };
+ },
+ pushPositional: (state, segment) => {
+ return { ...state, positionals: state.positionals.concat({ value: segment, extra: false }) };
+ },
+ pushExtra: (state, segment) => {
+ return { ...state, positionals: state.positionals.concat({ value: segment, extra: true }) };
+ },
+ pushExtraNoLimits: (state, segment) => {
+ return { ...state, positionals: state.positionals.concat({ value: segment, extra: NoLimits }) };
+ },
+ pushTrue: (state, segment, name2 = segment) => {
+ return { ...state, options: state.options.concat({ name: segment, value: true }) };
+ },
+ pushFalse: (state, segment, name2 = segment) => {
+ return { ...state, options: state.options.concat({ name: name2, value: false }) };
+ },
+ pushUndefined: (state, segment) => {
+ return { ...state, options: state.options.concat({ name: segment, value: void 0 }) };
+ },
+ pushStringValue: (state, segment) => {
+ var _a;
+ const copy = { ...state, options: [...state.options] };
+ const lastOption = state.options[state.options.length - 1];
+ lastOption.value = ((_a = lastOption.value) !== null && _a !== void 0 ? _a : []).concat([segment]);
+ return copy;
+ },
+ setStringValue: (state, segment) => {
+ const copy = { ...state, options: [...state.options] };
+ const lastOption = state.options[state.options.length - 1];
+ lastOption.value = segment;
+ return copy;
+ },
+ inhibateOptions: (state) => {
+ return { ...state, ignoreOptions: true };
+ },
+ useHelp: (state, segment, command) => {
+ const [
+ ,
+ /* name */
+ ,
+ index
+ ] = segment.match(constants2.HELP_REGEX);
+ if (typeof index !== `undefined`) {
+ return { ...state, options: [{ name: `-c`, value: String(command) }, { name: `-i`, value: index }] };
+ } else {
+ return { ...state, options: [{ name: `-c`, value: String(command) }] };
+ }
+ },
+ setError: (state, segment, errorMessage) => {
+ if (segment === constants2.END_OF_INPUT) {
+ return { ...state, errorMessage: `${errorMessage}.` };
+ } else {
+ return { ...state, errorMessage: `${errorMessage} ("${segment}").` };
+ }
+ },
+ setOptionArityError: (state, segment) => {
+ const lastOption = state.options[state.options.length - 1];
+ return { ...state, errorMessage: `Not enough arguments to option ${lastOption.name}.` };
+ }
+ };
+ var NoLimits = /* @__PURE__ */ Symbol();
+ var CommandBuilder = class {
+ constructor(cliIndex, cliOpts) {
+ this.allOptionNames = [];
+ this.arity = { leading: [], trailing: [], extra: [], proxy: false };
+ this.options = [];
+ this.paths = [];
+ this.cliIndex = cliIndex;
+ this.cliOpts = cliOpts;
+ }
+ addPath(path16) {
+ this.paths.push(path16);
+ }
+ setArity({ leading = this.arity.leading, trailing = this.arity.trailing, extra = this.arity.extra, proxy = this.arity.proxy }) {
+ Object.assign(this.arity, { leading, trailing, extra, proxy });
+ }
+ addPositional({ name: name2 = `arg`, required = true } = {}) {
+ if (!required && this.arity.extra === NoLimits)
+ throw new Error(`Optional parameters cannot be declared when using .rest() or .proxy()`);
+ if (!required && this.arity.trailing.length > 0)
+ throw new Error(`Optional parameters cannot be declared after the required trailing positional arguments`);
+ if (!required && this.arity.extra !== NoLimits) {
+ this.arity.extra.push(name2);
+ } else if (this.arity.extra !== NoLimits && this.arity.extra.length === 0) {
+ this.arity.leading.push(name2);
+ } else {
+ this.arity.trailing.push(name2);
+ }
+ }
+ addRest({ name: name2 = `arg`, required = 0 } = {}) {
+ if (this.arity.extra === NoLimits)
+ throw new Error(`Infinite lists cannot be declared multiple times in the same command`);
+ if (this.arity.trailing.length > 0)
+ throw new Error(`Infinite lists cannot be declared after the required trailing positional arguments`);
+ for (let t = 0; t < required; ++t)
+ this.addPositional({ name: name2 });
+ this.arity.extra = NoLimits;
+ }
+ addProxy({ required = 0 } = {}) {
+ this.addRest({ required });
+ this.arity.proxy = true;
+ }
+ addOption({ names, description, arity = 0, hidden = false, required = false, allowBinding = true }) {
+ if (!allowBinding && arity > 1)
+ throw new Error(`The arity cannot be higher than 1 when the option only supports the --arg=value syntax`);
+ if (!Number.isInteger(arity))
+ throw new Error(`The arity must be an integer, got ${arity}`);
+ if (arity < 0)
+ throw new Error(`The arity must be positive, got ${arity}`);
+ this.allOptionNames.push(...names);
+ this.options.push({ names, description, arity, hidden, required, allowBinding });
+ }
+ setContext(context) {
+ this.context = context;
+ }
+ usage({ detailed = true, inlineOptions = true } = {}) {
+ const segments = [this.cliOpts.binaryName];
+ const detailedOptionList = [];
+ if (this.paths.length > 0)
+ segments.push(...this.paths[0]);
+ if (detailed) {
+ for (const { names, arity, hidden, description, required } of this.options) {
+ if (hidden)
+ continue;
+ const args = [];
+ for (let t = 0; t < arity; ++t)
+ args.push(` #${t}`);
+ const definition = `${names.join(`,`)}${args.join(``)}`;
+ if (!inlineOptions && description) {
+ detailedOptionList.push({ definition, description, required });
+ } else {
+ segments.push(required ? `<${definition}>` : `[${definition}]`);
+ }
+ }
+ segments.push(...this.arity.leading.map((name2) => `<${name2}>`));
+ if (this.arity.extra === NoLimits)
+ segments.push(`...`);
+ else
+ segments.push(...this.arity.extra.map((name2) => `[${name2}]`));
+ segments.push(...this.arity.trailing.map((name2) => `<${name2}>`));
+ }
+ const usage = segments.join(` `);
+ return { usage, options: detailedOptionList };
+ }
+ compile() {
+ if (typeof this.context === `undefined`)
+ throw new Error(`Assertion failed: No context attached`);
+ const machine = makeStateMachine();
+ let firstNode = constants2.NODE_INITIAL;
+ const candidateUsage = this.usage().usage;
+ const requiredOptions = this.options.filter((opt) => opt.required).map((opt) => opt.names);
+ firstNode = injectNode(machine, makeNode());
+ registerStatic(machine, constants2.NODE_INITIAL, constants2.START_OF_INPUT, firstNode, [`setCandidateState`, { candidateUsage, requiredOptions }]);
+ const positionalArgument = this.arity.proxy ? `always` : `isNotOptionLike`;
+ const paths = this.paths.length > 0 ? this.paths : [[]];
+ for (const path16 of paths) {
+ let lastPathNode = firstNode;
+ if (path16.length > 0) {
+ const optionPathNode = injectNode(machine, makeNode());
+ registerShortcut(machine, lastPathNode, optionPathNode);
+ this.registerOptions(machine, optionPathNode);
+ lastPathNode = optionPathNode;
+ }
+ for (let t = 0; t < path16.length; ++t) {
+ const nextPathNode = injectNode(machine, makeNode());
+ registerStatic(machine, lastPathNode, path16[t], nextPathNode, `pushPath`);
+ lastPathNode = nextPathNode;
+ }
+ if (this.arity.leading.length > 0 || !this.arity.proxy) {
+ const helpNode = injectNode(machine, makeNode());
+ registerDynamic(machine, lastPathNode, `isHelp`, helpNode, [`useHelp`, this.cliIndex]);
+ registerDynamic(machine, helpNode, `always`, helpNode, `pushExtra`);
+ registerStatic(machine, helpNode, constants2.END_OF_INPUT, constants2.NODE_SUCCESS, [`setSelectedIndex`, constants2.HELP_COMMAND_INDEX]);
+ this.registerOptions(machine, lastPathNode);
+ }
+ if (this.arity.leading.length > 0)
+ registerStatic(machine, lastPathNode, constants2.END_OF_INPUT, constants2.NODE_ERRORED, [`setError`, `Not enough positional arguments`]);
+ let lastLeadingNode = lastPathNode;
+ for (let t = 0; t < this.arity.leading.length; ++t) {
+ const nextLeadingNode = injectNode(machine, makeNode());
+ if (!this.arity.proxy || t + 1 !== this.arity.leading.length)
+ this.registerOptions(machine, nextLeadingNode);
+ if (this.arity.trailing.length > 0 || t + 1 !== this.arity.leading.length)
+ registerStatic(machine, nextLeadingNode, constants2.END_OF_INPUT, constants2.NODE_ERRORED, [`setError`, `Not enough positional arguments`]);
+ registerDynamic(machine, lastLeadingNode, `isNotOptionLike`, nextLeadingNode, `pushPositional`);
+ lastLeadingNode = nextLeadingNode;
+ }
+ let lastExtraNode = lastLeadingNode;
+ if (this.arity.extra === NoLimits || this.arity.extra.length > 0) {
+ const extraShortcutNode = injectNode(machine, makeNode());
+ registerShortcut(machine, lastLeadingNode, extraShortcutNode);
+ if (this.arity.extra === NoLimits) {
+ const extraNode = injectNode(machine, makeNode());
+ if (!this.arity.proxy)
+ this.registerOptions(machine, extraNode);
+ registerDynamic(machine, lastLeadingNode, positionalArgument, extraNode, `pushExtraNoLimits`);
+ registerDynamic(machine, extraNode, positionalArgument, extraNode, `pushExtraNoLimits`);
+ registerShortcut(machine, extraNode, extraShortcutNode);
+ } else {
+ for (let t = 0; t < this.arity.extra.length; ++t) {
+ const nextExtraNode = injectNode(machine, makeNode());
+ if (!this.arity.proxy || t > 0)
+ this.registerOptions(machine, nextExtraNode);
+ registerDynamic(machine, lastExtraNode, positionalArgument, nextExtraNode, `pushExtra`);
+ registerShortcut(machine, nextExtraNode, extraShortcutNode);
+ lastExtraNode = nextExtraNode;
+ }
+ }
+ lastExtraNode = extraShortcutNode;
+ }
+ if (this.arity.trailing.length > 0)
+ registerStatic(machine, lastExtraNode, constants2.END_OF_INPUT, constants2.NODE_ERRORED, [`setError`, `Not enough positional arguments`]);
+ let lastTrailingNode = lastExtraNode;
+ for (let t = 0; t < this.arity.trailing.length; ++t) {
+ const nextTrailingNode = injectNode(machine, makeNode());
+ if (!this.arity.proxy)
+ this.registerOptions(machine, nextTrailingNode);
+ if (t + 1 < this.arity.trailing.length)
+ registerStatic(machine, nextTrailingNode, constants2.END_OF_INPUT, constants2.NODE_ERRORED, [`setError`, `Not enough positional arguments`]);
+ registerDynamic(machine, lastTrailingNode, `isNotOptionLike`, nextTrailingNode, `pushPositional`);
+ lastTrailingNode = nextTrailingNode;
+ }
+ registerDynamic(machine, lastTrailingNode, positionalArgument, constants2.NODE_ERRORED, [`setError`, `Extraneous positional argument`]);
+ registerStatic(machine, lastTrailingNode, constants2.END_OF_INPUT, constants2.NODE_SUCCESS, [`setSelectedIndex`, this.cliIndex]);
+ }
+ return {
+ machine,
+ context: this.context
+ };
+ }
+ registerOptions(machine, node) {
+ registerDynamic(machine, node, [`isOption`, `--`], node, `inhibateOptions`);
+ registerDynamic(machine, node, [`isBatchOption`, this.allOptionNames], node, `pushBatch`);
+ registerDynamic(machine, node, [`isBoundOption`, this.allOptionNames, this.options], node, `pushBound`);
+ registerDynamic(machine, node, [`isUnsupportedOption`, this.allOptionNames], constants2.NODE_ERRORED, [`setError`, `Unsupported option name`]);
+ registerDynamic(machine, node, [`isInvalidOption`], constants2.NODE_ERRORED, [`setError`, `Invalid option name`]);
+ for (const option of this.options) {
+ const longestName = option.names.reduce((longestName2, name2) => {
+ return name2.length > longestName2.length ? name2 : longestName2;
+ }, ``);
+ if (option.arity === 0) {
+ for (const name2 of option.names) {
+ registerDynamic(machine, node, [`isOption`, name2, option.hidden || name2 !== longestName], node, `pushTrue`);
+ if (name2.startsWith(`--`) && !name2.startsWith(`--no-`)) {
+ registerDynamic(machine, node, [`isNegatedOption`, name2], node, [`pushFalse`, name2]);
+ }
+ }
+ } else {
+ let lastNode = injectNode(machine, makeNode());
+ for (const name2 of option.names)
+ registerDynamic(machine, node, [`isOption`, name2, option.hidden || name2 !== longestName], lastNode, `pushUndefined`);
+ for (let t = 0; t < option.arity; ++t) {
+ const nextNode = injectNode(machine, makeNode());
+ registerStatic(machine, lastNode, constants2.END_OF_INPUT, constants2.NODE_ERRORED, `setOptionArityError`);
+ registerDynamic(machine, lastNode, `isOptionLike`, constants2.NODE_ERRORED, `setOptionArityError`);
+ const action = option.arity === 1 ? `setStringValue` : `pushStringValue`;
+ registerDynamic(machine, lastNode, `isNotOptionLike`, nextNode, action);
+ lastNode = nextNode;
+ }
+ registerShortcut(machine, lastNode, node);
+ }
+ }
+ }
+ };
+ var CliBuilder = class _CliBuilder {
+ constructor({ binaryName = `...` } = {}) {
+ this.builders = [];
+ this.opts = { binaryName };
+ }
+ static build(cbs, opts = {}) {
+ return new _CliBuilder(opts).commands(cbs).compile();
+ }
+ getBuilderByIndex(n) {
+ if (!(n >= 0 && n < this.builders.length))
+ throw new Error(`Assertion failed: Out-of-bound command index (${n})`);
+ return this.builders[n];
+ }
+ commands(cbs) {
+ for (const cb of cbs)
+ cb(this.command());
+ return this;
+ }
+ command() {
+ const builder = new CommandBuilder(this.builders.length, this.opts);
+ this.builders.push(builder);
+ return builder;
+ }
+ compile() {
+ const machines = [];
+ const contexts = [];
+ for (const builder of this.builders) {
+ const { machine: machine2, context } = builder.compile();
+ machines.push(machine2);
+ contexts.push(context);
+ }
+ const machine = makeAnyOfMachine(machines);
+ simplifyMachine(machine);
+ return {
+ machine,
+ contexts,
+ process: (input) => {
+ return runMachine(machine, input);
+ },
+ suggest: (input, partial) => {
+ return suggestMachine(machine, input, partial);
+ }
+ };
+ }
+ };
+ exports2.CliBuilder = CliBuilder;
+ exports2.CommandBuilder = CommandBuilder;
+ exports2.NoLimits = NoLimits;
+ exports2.aggregateHelpStates = aggregateHelpStates;
+ exports2.cloneNode = cloneNode;
+ exports2.cloneTransition = cloneTransition;
+ exports2.debug = debug;
+ exports2.debugMachine = debugMachine;
+ exports2.execute = execute;
+ exports2.injectNode = injectNode;
+ exports2.isTerminalNode = isTerminalNode;
+ exports2.makeAnyOfMachine = makeAnyOfMachine;
+ exports2.makeNode = makeNode;
+ exports2.makeStateMachine = makeStateMachine;
+ exports2.reducers = reducers;
+ exports2.registerDynamic = registerDynamic;
+ exports2.registerShortcut = registerShortcut;
+ exports2.registerStatic = registerStatic;
+ exports2.runMachineInternal = runMachineInternal;
+ exports2.selectBestState = selectBestState;
+ exports2.simplifyMachine = simplifyMachine;
+ exports2.suggest = suggest;
+ exports2.tests = tests;
+ exports2.trimSmallerBranches = trimSmallerBranches;
+ }
+});
+
+// node_modules/clipanion/lib/platform/node.mjs
+var node_exports = {};
+__export(node_exports, {
+ getCaptureActivator: () => getCaptureActivator,
+ getDefaultColorDepth: () => getDefaultColorDepth
+});
+function getDefaultColorDepth() {
+ if (import_tty.default && `getColorDepth` in import_tty.default.WriteStream.prototype)
+ return import_tty.default.WriteStream.prototype.getColorDepth();
+ if (process.env.FORCE_COLOR === `0`)
+ return 1;
+ if (process.env.FORCE_COLOR === `1`)
+ return 8;
+ if (typeof process.stdout !== `undefined` && process.stdout.isTTY)
+ return 8;
+ return 1;
+}
+function getCaptureActivator(context) {
+ let contextStorage = gContextStorage;
+ if (typeof contextStorage === `undefined`) {
+ if (context.stdout === process.stdout && context.stderr === process.stderr)
+ return null;
+ const { AsyncLocalStorage: LazyAsyncLocalStorage } = require("async_hooks");
+ contextStorage = gContextStorage = new LazyAsyncLocalStorage();
+ const origStdoutWrite = process.stdout._write;
+ process.stdout._write = function(chunk, encoding, cb) {
+ const context2 = contextStorage.getStore();
+ if (typeof context2 === `undefined`)
+ return origStdoutWrite.call(this, chunk, encoding, cb);
+ return context2.stdout.write(chunk, encoding, cb);
+ };
+ const origStderrWrite = process.stderr._write;
+ process.stderr._write = function(chunk, encoding, cb) {
+ const context2 = contextStorage.getStore();
+ if (typeof context2 === `undefined`)
+ return origStderrWrite.call(this, chunk, encoding, cb);
+ return context2.stderr.write(chunk, encoding, cb);
+ };
+ }
+ return (fn2) => {
+ return contextStorage.run(context, fn2);
+ };
+}
+var import_tty, gContextStorage;
+var init_node = __esm({
+ "node_modules/clipanion/lib/platform/node.mjs"() {
+ import_tty = __toESM(require("tty"), 1);
+ }
+});
+
+// node_modules/clipanion/lib/advanced/HelpCommand.js
+var require_HelpCommand = __commonJS({
+ "node_modules/clipanion/lib/advanced/HelpCommand.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_Command = require_Command();
+ var HelpCommand = class _HelpCommand extends advanced_Command.Command {
+ constructor(contexts) {
+ super();
+ this.contexts = contexts;
+ this.commands = [];
+ }
+ static from(state, contexts) {
+ const command = new _HelpCommand(contexts);
+ command.path = state.path;
+ for (const opt of state.options) {
+ switch (opt.name) {
+ case `-c`:
+ {
+ command.commands.push(Number(opt.value));
+ }
+ break;
+ case `-i`:
+ {
+ command.index = Number(opt.value);
+ }
+ break;
+ }
+ }
+ return command;
+ }
+ async execute() {
+ let commands = this.commands;
+ if (typeof this.index !== `undefined` && this.index >= 0 && this.index < commands.length)
+ commands = [commands[this.index]];
+ if (commands.length === 0) {
+ this.context.stdout.write(this.cli.usage());
+ } else if (commands.length === 1) {
+ this.context.stdout.write(this.cli.usage(this.contexts[commands[0]].commandClass, { detailed: true }));
+ } else if (commands.length > 1) {
+ this.context.stdout.write(`Multiple commands match your selection:
+`);
+ this.context.stdout.write(`
+`);
+ let index = 0;
+ for (const command of this.commands)
+ this.context.stdout.write(this.cli.usage(this.contexts[command].commandClass, { prefix: `${index++}. `.padStart(5) }));
+ this.context.stdout.write(`
+`);
+ this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands.
+`);
+ }
+ }
+ };
+ exports2.HelpCommand = HelpCommand;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/Cli.js
+var require_Cli = __commonJS({
+ "node_modules/clipanion/lib/advanced/Cli.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var constants2 = require_constants();
+ var core = require_core();
+ var format = require_format();
+ var platform5 = (init_node(), __toCommonJS(node_exports));
+ var advanced_Command = require_Command();
+ var advanced_HelpCommand = require_HelpCommand();
+ var errorCommandSymbol = /* @__PURE__ */ Symbol(`clipanion/errorCommand`);
+ async function runExit(...args) {
+ const { resolvedOptions, resolvedCommandClasses, resolvedArgv, resolvedContext } = resolveRunParameters(args);
+ const cli = Cli2.from(resolvedCommandClasses, resolvedOptions);
+ return cli.runExit(resolvedArgv, resolvedContext);
+ }
+ async function run(...args) {
+ const { resolvedOptions, resolvedCommandClasses, resolvedArgv, resolvedContext } = resolveRunParameters(args);
+ const cli = Cli2.from(resolvedCommandClasses, resolvedOptions);
+ return cli.run(resolvedArgv, resolvedContext);
+ }
+ function resolveRunParameters(args) {
+ let resolvedOptions;
+ let resolvedCommandClasses;
+ let resolvedArgv;
+ let resolvedContext;
+ if (typeof process !== `undefined` && typeof process.argv !== `undefined`)
+ resolvedArgv = process.argv.slice(2);
+ switch (args.length) {
+ case 1:
+ {
+ resolvedCommandClasses = args[0];
+ }
+ break;
+ case 2:
+ {
+ if (args[0] && args[0].prototype instanceof advanced_Command.Command || Array.isArray(args[0])) {
+ resolvedCommandClasses = args[0];
+ if (Array.isArray(args[1])) {
+ resolvedArgv = args[1];
+ } else {
+ resolvedContext = args[1];
+ }
+ } else {
+ resolvedOptions = args[0];
+ resolvedCommandClasses = args[1];
+ }
+ }
+ break;
+ case 3:
+ {
+ if (Array.isArray(args[2])) {
+ resolvedOptions = args[0];
+ resolvedCommandClasses = args[1];
+ resolvedArgv = args[2];
+ } else if (args[0] && args[0].prototype instanceof advanced_Command.Command || Array.isArray(args[0])) {
+ resolvedCommandClasses = args[0];
+ resolvedArgv = args[1];
+ resolvedContext = args[2];
+ } else {
+ resolvedOptions = args[0];
+ resolvedCommandClasses = args[1];
+ resolvedContext = args[2];
+ }
+ }
+ break;
+ default:
+ {
+ resolvedOptions = args[0];
+ resolvedCommandClasses = args[1];
+ resolvedArgv = args[2];
+ resolvedContext = args[3];
+ }
+ break;
+ }
+ if (typeof resolvedArgv === `undefined`)
+ throw new Error(`The argv parameter must be provided when running Clipanion outside of a Node context`);
+ return {
+ resolvedOptions,
+ resolvedCommandClasses,
+ resolvedArgv,
+ resolvedContext
+ };
+ }
+ var Cli2 = class _Cli {
+ constructor({ binaryLabel, binaryName: binaryNameOpt = `...`, binaryVersion, enableCapture = false, enableColors } = {}) {
+ this.registrations = /* @__PURE__ */ new Map();
+ this.builder = new core.CliBuilder({ binaryName: binaryNameOpt });
+ this.binaryLabel = binaryLabel;
+ this.binaryName = binaryNameOpt;
+ this.binaryVersion = binaryVersion;
+ this.enableCapture = enableCapture;
+ this.enableColors = enableColors;
+ }
+ /**
+ * Creates a new Cli and registers all commands passed as parameters.
+ *
+ * @param commandClasses The Commands to register
+ * @returns The created `Cli` instance
+ */
+ static from(commandClasses, options = {}) {
+ const cli = new _Cli(options);
+ const resolvedCommandClasses = Array.isArray(commandClasses) ? commandClasses : [commandClasses];
+ for (const commandClass of resolvedCommandClasses)
+ cli.register(commandClass);
+ return cli;
+ }
+ /**
+ * Registers a command inside the CLI.
+ */
+ register(commandClass) {
+ var _a;
+ const specs = /* @__PURE__ */ new Map();
+ const command = new commandClass();
+ for (const key in command) {
+ const value = command[key];
+ if (typeof value === `object` && value !== null && value[advanced_Command.Command.isOption]) {
+ specs.set(key, value);
+ }
+ }
+ const builder = this.builder.command();
+ const index = builder.cliIndex;
+ const paths = (_a = commandClass.paths) !== null && _a !== void 0 ? _a : command.paths;
+ if (typeof paths !== `undefined`)
+ for (const path16 of paths)
+ builder.addPath(path16);
+ this.registrations.set(commandClass, { specs, builder, index });
+ for (const [key, { definition }] of specs.entries())
+ definition(builder, key);
+ builder.setContext({
+ commandClass
+ });
+ }
+ process(input, userContext) {
+ const { contexts, process: process5 } = this.builder.compile();
+ const state = process5(input);
+ const context = {
+ ..._Cli.defaultContext,
+ ...userContext
+ };
+ switch (state.selectedIndex) {
+ case constants2.HELP_COMMAND_INDEX: {
+ const command = advanced_HelpCommand.HelpCommand.from(state, contexts);
+ command.context = context;
+ return command;
+ }
+ default:
+ {
+ const { commandClass } = contexts[state.selectedIndex];
+ const record = this.registrations.get(commandClass);
+ if (typeof record === `undefined`)
+ throw new Error(`Assertion failed: Expected the command class to have been registered.`);
+ const command = new commandClass();
+ command.context = context;
+ command.path = state.path;
+ try {
+ for (const [key, { transformer }] of record.specs.entries())
+ command[key] = transformer(record.builder, key, state, context);
+ return command;
+ } catch (error) {
+ error[errorCommandSymbol] = command;
+ throw error;
+ }
+ }
+ break;
+ }
+ }
+ async run(input, userContext) {
+ var _a, _b;
+ let command;
+ const context = {
+ ..._Cli.defaultContext,
+ ...userContext
+ };
+ const colored = (_a = this.enableColors) !== null && _a !== void 0 ? _a : context.colorDepth > 1;
+ if (!Array.isArray(input)) {
+ command = input;
+ } else {
+ try {
+ command = this.process(input, context);
+ } catch (error) {
+ context.stdout.write(this.error(error, { colored }));
+ return 1;
+ }
+ }
+ if (command.help) {
+ context.stdout.write(this.usage(command, { colored, detailed: true }));
+ return 0;
+ }
+ command.context = context;
+ command.cli = {
+ binaryLabel: this.binaryLabel,
+ binaryName: this.binaryName,
+ binaryVersion: this.binaryVersion,
+ enableCapture: this.enableCapture,
+ enableColors: this.enableColors,
+ definitions: () => this.definitions(),
+ error: (error, opts) => this.error(error, opts),
+ format: (colored2) => this.format(colored2),
+ process: (input2, subContext) => this.process(input2, { ...context, ...subContext }),
+ run: (input2, subContext) => this.run(input2, { ...context, ...subContext }),
+ usage: (command2, opts) => this.usage(command2, opts)
+ };
+ const activate = this.enableCapture ? (_b = platform5.getCaptureActivator(context)) !== null && _b !== void 0 ? _b : noopCaptureActivator : noopCaptureActivator;
+ let exitCode;
+ try {
+ exitCode = await activate(() => command.validateAndExecute().catch((error) => command.catch(error).then(() => 0)));
+ } catch (error) {
+ context.stdout.write(this.error(error, { colored, command }));
+ return 1;
+ }
+ return exitCode;
+ }
+ async runExit(input, context) {
+ process.exitCode = await this.run(input, context);
+ }
+ suggest(input, partial) {
+ const { suggest } = this.builder.compile();
+ return suggest(input, partial);
+ }
+ definitions({ colored = false } = {}) {
+ const data = [];
+ for (const [commandClass, { index }] of this.registrations) {
+ if (typeof commandClass.usage === `undefined`)
+ continue;
+ const { usage: path16 } = this.getUsageByIndex(index, { detailed: false });
+ const { usage, options } = this.getUsageByIndex(index, { detailed: true, inlineOptions: false });
+ const category = typeof commandClass.usage.category !== `undefined` ? format.formatMarkdownish(commandClass.usage.category, { format: this.format(colored), paragraphs: false }) : void 0;
+ const description = typeof commandClass.usage.description !== `undefined` ? format.formatMarkdownish(commandClass.usage.description, { format: this.format(colored), paragraphs: false }) : void 0;
+ const details = typeof commandClass.usage.details !== `undefined` ? format.formatMarkdownish(commandClass.usage.details, { format: this.format(colored), paragraphs: true }) : void 0;
+ const examples = typeof commandClass.usage.examples !== `undefined` ? commandClass.usage.examples.map(([label, cli]) => [format.formatMarkdownish(label, { format: this.format(colored), paragraphs: false }), cli.replace(/\$0/g, this.binaryName)]) : void 0;
+ data.push({ path: path16, usage, category, description, details, examples, options });
+ }
+ return data;
+ }
+ usage(command = null, { colored, detailed = false, prefix = `$ ` } = {}) {
+ var _a;
+ if (command === null) {
+ for (const commandClass2 of this.registrations.keys()) {
+ const paths = commandClass2.paths;
+ const isDocumented = typeof commandClass2.usage !== `undefined`;
+ const isExclusivelyDefault = !paths || paths.length === 0 || paths.length === 1 && paths[0].length === 0;
+ const isDefault = isExclusivelyDefault || ((_a = paths === null || paths === void 0 ? void 0 : paths.some((path16) => path16.length === 0)) !== null && _a !== void 0 ? _a : false);
+ if (isDefault) {
+ if (command) {
+ command = null;
+ break;
+ } else {
+ command = commandClass2;
+ }
+ } else {
+ if (isDocumented) {
+ command = null;
+ continue;
+ }
+ }
+ }
+ if (command) {
+ detailed = true;
+ }
+ }
+ const commandClass = command !== null && command instanceof advanced_Command.Command ? command.constructor : command;
+ let result = ``;
+ if (!commandClass) {
+ const commandsByCategories = /* @__PURE__ */ new Map();
+ for (const [commandClass2, { index }] of this.registrations.entries()) {
+ if (typeof commandClass2.usage === `undefined`)
+ continue;
+ const category = typeof commandClass2.usage.category !== `undefined` ? format.formatMarkdownish(commandClass2.usage.category, { format: this.format(colored), paragraphs: false }) : null;
+ let categoryCommands = commandsByCategories.get(category);
+ if (typeof categoryCommands === `undefined`)
+ commandsByCategories.set(category, categoryCommands = []);
+ const { usage } = this.getUsageByIndex(index);
+ categoryCommands.push({ commandClass: commandClass2, usage });
+ }
+ const categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => {
+ if (a === null)
+ return -1;
+ if (b === null)
+ return 1;
+ return a.localeCompare(b, `en`, { usage: `sort`, caseFirst: `upper` });
+ });
+ const hasLabel = typeof this.binaryLabel !== `undefined`;
+ const hasVersion = typeof this.binaryVersion !== `undefined`;
+ if (hasLabel || hasVersion) {
+ if (hasLabel && hasVersion)
+ result += `${this.format(colored).header(`${this.binaryLabel} - ${this.binaryVersion}`)}
+
+`;
+ else if (hasLabel)
+ result += `${this.format(colored).header(`${this.binaryLabel}`)}
+`;
+ else
+ result += `${this.format(colored).header(`${this.binaryVersion}`)}
+`;
+ result += ` ${this.format(colored).bold(prefix)}${this.binaryName}
+`;
+ } else {
+ result += `${this.format(colored).bold(prefix)}${this.binaryName}
+`;
+ }
+ for (const categoryName of categoryNames) {
+ const commands = commandsByCategories.get(categoryName).slice().sort((a, b) => {
+ return a.usage.localeCompare(b.usage, `en`, { usage: `sort`, caseFirst: `upper` });
+ });
+ const header = categoryName !== null ? categoryName.trim() : `General commands`;
+ result += `
+`;
+ result += `${this.format(colored).header(`${header}`)}
+`;
+ for (const { commandClass: commandClass2, usage } of commands) {
+ const doc = commandClass2.usage.description || `undocumented`;
+ result += `
+`;
+ result += ` ${this.format(colored).bold(usage)}
+`;
+ result += ` ${format.formatMarkdownish(doc, { format: this.format(colored), paragraphs: false })}`;
+ }
+ }
+ result += `
+`;
+ result += format.formatMarkdownish(`You can also print more details about any of these commands by calling them with the \`-h,--help\` flag right after the command name.`, { format: this.format(colored), paragraphs: true });
+ } else {
+ if (!detailed) {
+ const { usage } = this.getUsageByRegistration(commandClass);
+ result += `${this.format(colored).bold(prefix)}${usage}
+`;
+ } else {
+ const { description = ``, details = ``, examples = [] } = commandClass.usage || {};
+ if (description !== ``) {
+ result += format.formatMarkdownish(description, { format: this.format(colored), paragraphs: false }).replace(/^./, ($0) => $0.toUpperCase());
+ result += `
+`;
+ }
+ if (details !== `` || examples.length > 0) {
+ result += `${this.format(colored).header(`Usage`)}
+`;
+ result += `
+`;
+ }
+ const { usage, options } = this.getUsageByRegistration(commandClass, { inlineOptions: false });
+ result += `${this.format(colored).bold(prefix)}${usage}
+`;
+ if (options.length > 0) {
+ result += `
+`;
+ result += `${this.format(colored).header(`Options`)}
+`;
+ const maxDefinitionLength = options.reduce((length, option) => {
+ return Math.max(length, option.definition.length);
+ }, 0);
+ result += `
+`;
+ for (const { definition, description: description2 } of options) {
+ result += ` ${this.format(colored).bold(definition.padEnd(maxDefinitionLength))} ${format.formatMarkdownish(description2, { format: this.format(colored), paragraphs: false })}`;
+ }
+ }
+ if (details !== ``) {
+ result += `
+`;
+ result += `${this.format(colored).header(`Details`)}
+`;
+ result += `
+`;
+ result += format.formatMarkdownish(details, { format: this.format(colored), paragraphs: true });
+ }
+ if (examples.length > 0) {
+ result += `
+`;
+ result += `${this.format(colored).header(`Examples`)}
+`;
+ for (const [description2, example] of examples) {
+ result += `
+`;
+ result += format.formatMarkdownish(description2, { format: this.format(colored), paragraphs: false });
+ result += `${example.replace(/^/m, ` ${this.format(colored).bold(prefix)}`).replace(/\$0/g, this.binaryName)}
+`;
+ }
+ }
+ }
+ }
+ return result;
+ }
+ error(error, _a) {
+ var _b;
+ var { colored, command = (_b = error[errorCommandSymbol]) !== null && _b !== void 0 ? _b : null } = _a === void 0 ? {} : _a;
+ if (!error || typeof error !== `object` || !(`stack` in error))
+ error = new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(error)})`);
+ let result = ``;
+ let name2 = error.name.replace(/([a-z])([A-Z])/g, `$1 $2`);
+ if (name2 === `Error`)
+ name2 = `Internal Error`;
+ result += `${this.format(colored).error(name2)}: ${error.message}
+`;
+ const meta = error.clipanion;
+ if (typeof meta !== `undefined`) {
+ if (meta.type === `usage`) {
+ result += `
+`;
+ result += this.usage(command);
+ }
+ } else {
+ if (error.stack) {
+ result += `${error.stack.replace(/^.*\n/, ``)}
+`;
+ }
+ }
+ return result;
+ }
+ format(colored) {
+ var _a;
+ return ((_a = colored !== null && colored !== void 0 ? colored : this.enableColors) !== null && _a !== void 0 ? _a : _Cli.defaultContext.colorDepth > 1) ? format.richFormat : format.textFormat;
+ }
+ getUsageByRegistration(klass, opts) {
+ const record = this.registrations.get(klass);
+ if (typeof record === `undefined`)
+ throw new Error(`Assertion failed: Unregistered command`);
+ return this.getUsageByIndex(record.index, opts);
+ }
+ getUsageByIndex(n, opts) {
+ return this.builder.getBuilderByIndex(n).usage(opts);
+ }
+ };
+ Cli2.defaultContext = {
+ env: process.env,
+ stdin: process.stdin,
+ stdout: process.stdout,
+ stderr: process.stderr,
+ colorDepth: platform5.getDefaultColorDepth()
+ };
+ function noopCaptureActivator(fn2) {
+ return fn2();
+ }
+ exports2.Cli = Cli2;
+ exports2.run = run;
+ exports2.runExit = runExit;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/builtins/definitions.js
+var require_definitions = __commonJS({
+ "node_modules/clipanion/lib/advanced/builtins/definitions.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_Command = require_Command();
+ var DefinitionsCommand = class extends advanced_Command.Command {
+ async execute() {
+ this.context.stdout.write(`${JSON.stringify(this.cli.definitions(), null, 2)}
+`);
+ }
+ };
+ DefinitionsCommand.paths = [[`--clipanion=definitions`]];
+ exports2.DefinitionsCommand = DefinitionsCommand;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/builtins/help.js
+var require_help = __commonJS({
+ "node_modules/clipanion/lib/advanced/builtins/help.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_Command = require_Command();
+ var HelpCommand = class extends advanced_Command.Command {
+ async execute() {
+ this.context.stdout.write(this.cli.usage());
+ }
+ };
+ HelpCommand.paths = [[`-h`], [`--help`]];
+ exports2.HelpCommand = HelpCommand;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/builtins/version.js
+var require_version = __commonJS({
+ "node_modules/clipanion/lib/advanced/builtins/version.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_Command = require_Command();
+ var VersionCommand = class extends advanced_Command.Command {
+ async execute() {
+ var _a;
+ this.context.stdout.write(`${(_a = this.cli.binaryVersion) !== null && _a !== void 0 ? _a : ``}
+`);
+ }
+ };
+ VersionCommand.paths = [[`-v`], [`--version`]];
+ exports2.VersionCommand = VersionCommand;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/builtins/index.js
+var require_builtins = __commonJS({
+ "node_modules/clipanion/lib/advanced/builtins/index.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_builtins_definitions = require_definitions();
+ var advanced_builtins_help = require_help();
+ var advanced_builtins_version = require_version();
+ exports2.DefinitionsCommand = advanced_builtins_definitions.DefinitionsCommand;
+ exports2.HelpCommand = advanced_builtins_help.HelpCommand;
+ exports2.VersionCommand = advanced_builtins_version.VersionCommand;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/Array.js
+var require_Array = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/Array.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ function Array2(descriptor, initialValueBase, optsBase) {
+ const [initialValue, opts] = advanced_options_utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {});
+ const { arity = 1 } = opts;
+ const optNames = descriptor.split(`,`);
+ const nameSet = new Set(optNames);
+ return advanced_options_utils.makeCommandOption({
+ definition(builder) {
+ builder.addOption({
+ names: optNames,
+ arity,
+ hidden: opts === null || opts === void 0 ? void 0 : opts.hidden,
+ description: opts === null || opts === void 0 ? void 0 : opts.description,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state) {
+ let usedName;
+ let currentValue = typeof initialValue !== `undefined` ? [...initialValue] : void 0;
+ for (const { name: name2, value } of state.options) {
+ if (!nameSet.has(name2))
+ continue;
+ usedName = name2;
+ currentValue = currentValue !== null && currentValue !== void 0 ? currentValue : [];
+ currentValue.push(value);
+ }
+ if (typeof currentValue !== `undefined`) {
+ return advanced_options_utils.applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator);
+ } else {
+ return currentValue;
+ }
+ }
+ });
+ }
+ exports2.Array = Array2;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/Boolean.js
+var require_Boolean = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/Boolean.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ function Boolean2(descriptor, initialValueBase, optsBase) {
+ const [initialValue, opts] = advanced_options_utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {});
+ const optNames = descriptor.split(`,`);
+ const nameSet = new Set(optNames);
+ return advanced_options_utils.makeCommandOption({
+ definition(builder) {
+ builder.addOption({
+ names: optNames,
+ allowBinding: false,
+ arity: 0,
+ hidden: opts.hidden,
+ description: opts.description,
+ required: opts.required
+ });
+ },
+ transformer(builer, key, state) {
+ let currentValue = initialValue;
+ for (const { name: name2, value } of state.options) {
+ if (!nameSet.has(name2))
+ continue;
+ currentValue = value;
+ }
+ return currentValue;
+ }
+ });
+ }
+ exports2.Boolean = Boolean2;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/Counter.js
+var require_Counter = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/Counter.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ function Counter(descriptor, initialValueBase, optsBase) {
+ const [initialValue, opts] = advanced_options_utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {});
+ const optNames = descriptor.split(`,`);
+ const nameSet = new Set(optNames);
+ return advanced_options_utils.makeCommandOption({
+ definition(builder) {
+ builder.addOption({
+ names: optNames,
+ allowBinding: false,
+ arity: 0,
+ hidden: opts.hidden,
+ description: opts.description,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state) {
+ let currentValue = initialValue;
+ for (const { name: name2, value } of state.options) {
+ if (!nameSet.has(name2))
+ continue;
+ currentValue !== null && currentValue !== void 0 ? currentValue : currentValue = 0;
+ if (!value) {
+ currentValue = 0;
+ } else {
+ currentValue += 1;
+ }
+ }
+ return currentValue;
+ }
+ });
+ }
+ exports2.Counter = Counter;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/Proxy.js
+var require_Proxy = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/Proxy.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ function Proxy2(opts = {}) {
+ return advanced_options_utils.makeCommandOption({
+ definition(builder, key) {
+ var _a;
+ builder.addProxy({
+ name: (_a = opts.name) !== null && _a !== void 0 ? _a : key,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state) {
+ return state.positionals.map(({ value }) => value);
+ }
+ });
+ }
+ exports2.Proxy = Proxy2;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/Rest.js
+var require_Rest = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/Rest.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var core = require_core();
+ var advanced_options_utils = require_utils();
+ function Rest(opts = {}) {
+ return advanced_options_utils.makeCommandOption({
+ definition(builder, key) {
+ var _a;
+ builder.addRest({
+ name: (_a = opts.name) !== null && _a !== void 0 ? _a : key,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state) {
+ const isRestPositional = (index) => {
+ const positional = state.positionals[index];
+ if (positional.extra === core.NoLimits)
+ return true;
+ if (positional.extra === false && index < builder.arity.leading.length)
+ return true;
+ return false;
+ };
+ let count = 0;
+ while (count < state.positionals.length && isRestPositional(count))
+ count += 1;
+ return state.positionals.splice(0, count).map(({ value }) => value);
+ }
+ });
+ }
+ exports2.Rest = Rest;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/String.js
+var require_String = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/String.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var core = require_core();
+ var advanced_options_utils = require_utils();
+ function StringOption(descriptor, initialValueBase, optsBase) {
+ const [initialValue, opts] = advanced_options_utils.rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {});
+ const { arity = 1 } = opts;
+ const optNames = descriptor.split(`,`);
+ const nameSet = new Set(optNames);
+ return advanced_options_utils.makeCommandOption({
+ definition(builder) {
+ builder.addOption({
+ names: optNames,
+ arity: opts.tolerateBoolean ? 0 : arity,
+ hidden: opts.hidden,
+ description: opts.description,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state, context) {
+ let usedName;
+ let currentValue = initialValue;
+ if (typeof opts.env !== `undefined` && context.env[opts.env]) {
+ usedName = opts.env;
+ currentValue = context.env[opts.env];
+ }
+ for (const { name: name2, value } of state.options) {
+ if (!nameSet.has(name2))
+ continue;
+ usedName = name2;
+ currentValue = value;
+ }
+ if (typeof currentValue === `string`) {
+ return advanced_options_utils.applyValidator(usedName !== null && usedName !== void 0 ? usedName : key, currentValue, opts.validator);
+ } else {
+ return currentValue;
+ }
+ }
+ });
+ }
+ function StringPositional(opts = {}) {
+ const { required = true } = opts;
+ return advanced_options_utils.makeCommandOption({
+ definition(builder, key) {
+ var _a;
+ builder.addPositional({
+ name: (_a = opts.name) !== null && _a !== void 0 ? _a : key,
+ required: opts.required
+ });
+ },
+ transformer(builder, key, state) {
+ var _a;
+ for (let i = 0; i < state.positionals.length; ++i) {
+ if (state.positionals[i].extra === core.NoLimits)
+ continue;
+ if (required && state.positionals[i].extra === true)
+ continue;
+ if (!required && state.positionals[i].extra === false)
+ continue;
+ const [positional] = state.positionals.splice(i, 1);
+ return advanced_options_utils.applyValidator((_a = opts.name) !== null && _a !== void 0 ? _a : key, positional.value, opts.validator);
+ }
+ return void 0;
+ }
+ });
+ }
+ function String2(descriptor, ...args) {
+ if (typeof descriptor === `string`) {
+ return StringOption(descriptor, ...args);
+ } else {
+ return StringPositional(descriptor);
+ }
+ }
+ exports2.String = String2;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/options/index.js
+var require_options = __commonJS({
+ "node_modules/clipanion/lib/advanced/options/index.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var advanced_options_utils = require_utils();
+ var advanced_options_Array = require_Array();
+ var advanced_options_Boolean = require_Boolean();
+ var advanced_options_Counter = require_Counter();
+ var advanced_options_Proxy = require_Proxy();
+ var advanced_options_Rest = require_Rest();
+ var advanced_options_String = require_String();
+ exports2.applyValidator = advanced_options_utils.applyValidator;
+ exports2.cleanValidationError = advanced_options_utils.cleanValidationError;
+ exports2.formatError = advanced_options_utils.formatError;
+ exports2.isOptionSymbol = advanced_options_utils.isOptionSymbol;
+ exports2.makeCommandOption = advanced_options_utils.makeCommandOption;
+ exports2.rerouteArguments = advanced_options_utils.rerouteArguments;
+ exports2.Array = advanced_options_Array.Array;
+ exports2.Boolean = advanced_options_Boolean.Boolean;
+ exports2.Counter = advanced_options_Counter.Counter;
+ exports2.Proxy = advanced_options_Proxy.Proxy;
+ exports2.Rest = advanced_options_Rest.Rest;
+ exports2.String = advanced_options_String.String;
+ }
+});
+
+// node_modules/clipanion/lib/advanced/index.js
+var require_advanced = __commonJS({
+ "node_modules/clipanion/lib/advanced/index.js"(exports2) {
+ "use strict";
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ var errors = require_errors();
+ var format = require_format();
+ var advanced_Command = require_Command();
+ var advanced_Cli = require_Cli();
+ var advanced_builtins_index = require_builtins();
+ var advanced_options_index = require_options();
+ exports2.UsageError = errors.UsageError;
+ exports2.formatMarkdownish = format.formatMarkdownish;
+ exports2.Command = advanced_Command.Command;
+ exports2.Cli = advanced_Cli.Cli;
+ exports2.run = advanced_Cli.run;
+ exports2.runExit = advanced_Cli.runExit;
+ exports2.Builtins = advanced_builtins_index;
+ exports2.Option = advanced_options_index;
+ }
+});
+
+// node_modules/semver/internal/debug.js
+var require_debug = __commonJS({
+ "node_modules/semver/internal/debug.js"(exports2, module2) {
+ "use strict";
+ var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
+ };
+ module2.exports = debug;
+ }
+});
+
+// node_modules/semver/internal/constants.js
+var require_constants2 = __commonJS({
+ "node_modules/semver/internal/constants.js"(exports2, module2) {
+ "use strict";
+ var SEMVER_SPEC_VERSION = "2.0.0";
+ var MAX_LENGTH = 256;
+ var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
+ 9007199254740991;
+ var MAX_SAFE_COMPONENT_LENGTH = 16;
+ var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
+ var RELEASE_TYPES = [
+ "major",
+ "premajor",
+ "minor",
+ "preminor",
+ "patch",
+ "prepatch",
+ "prerelease"
+ ];
+ module2.exports = {
+ MAX_LENGTH,
+ MAX_SAFE_COMPONENT_LENGTH,
+ MAX_SAFE_BUILD_LENGTH,
+ MAX_SAFE_INTEGER,
+ RELEASE_TYPES,
+ SEMVER_SPEC_VERSION,
+ FLAG_INCLUDE_PRERELEASE: 1,
+ FLAG_LOOSE: 2
+ };
+ }
+});
+
+// node_modules/semver/internal/re.js
+var require_re = __commonJS({
+ "node_modules/semver/internal/re.js"(exports2, module2) {
+ "use strict";
+ var {
+ MAX_SAFE_COMPONENT_LENGTH,
+ MAX_SAFE_BUILD_LENGTH,
+ MAX_LENGTH
+ } = require_constants2();
+ var debug = require_debug();
+ exports2 = module2.exports = {};
+ var re = exports2.re = [];
+ var safeRe = exports2.safeRe = [];
+ var src = exports2.src = [];
+ var safeSrc = exports2.safeSrc = [];
+ var t = exports2.t = {};
+ var R = 0;
+ var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
+ var safeRegexReplacements = [
+ ["\\s", 1],
+ ["\\d", MAX_LENGTH],
+ [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
+ ];
+ var makeSafeRegex = (value) => {
+ for (const [token, max] of safeRegexReplacements) {
+ value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
+ }
+ return value;
+ };
+ var createToken = (name2, value, isGlobal) => {
+ const safe = makeSafeRegex(value);
+ const index = R++;
+ debug(name2, index, value);
+ t[name2] = index;
+ src[index] = value;
+ safeSrc[index] = safe;
+ re[index] = new RegExp(value, isGlobal ? "g" : void 0);
+ safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
+ };
+ createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
+ createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
+ createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
+ createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
+ createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
+ createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
+ createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
+ createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
+ createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
+ createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
+ createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
+ createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
+ createToken("FULL", `^${src[t.FULLPLAIN]}$`);
+ createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
+ createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
+ createToken("GTLT", "((?:<|>)?=?)");
+ createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
+ createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
+ createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
+ createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
+ createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
+ createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
+ createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
+ createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
+ createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
+ createToken("COERCERTL", src[t.COERCE], true);
+ createToken("COERCERTLFULL", src[t.COERCEFULL], true);
+ createToken("LONETILDE", "(?:~>?)");
+ createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
+ exports2.tildeTrimReplace = "$1~";
+ createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
+ createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
+ createToken("LONECARET", "(?:\\^)");
+ createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
+ exports2.caretTrimReplace = "$1^";
+ createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
+ createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
+ createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
+ createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
+ createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
+ exports2.comparatorTrimReplace = "$1$2$3";
+ createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
+ createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
+ createToken("STAR", "(<|>)?=?\\s*\\*");
+ createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
+ createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
+ }
+});
+
+// node_modules/semver/internal/parse-options.js
+var require_parse_options = __commonJS({
+ "node_modules/semver/internal/parse-options.js"(exports2, module2) {
+ "use strict";
+ var looseOption = Object.freeze({ loose: true });
+ var emptyOpts = Object.freeze({});
+ var parseOptions = (options) => {
+ if (!options) {
+ return emptyOpts;
+ }
+ if (typeof options !== "object") {
+ return looseOption;
+ }
+ return options;
+ };
+ module2.exports = parseOptions;
+ }
+});
+
+// node_modules/semver/internal/identifiers.js
+var require_identifiers = __commonJS({
+ "node_modules/semver/internal/identifiers.js"(exports2, module2) {
+ "use strict";
+ var numeric = /^[0-9]+$/;
+ var compareIdentifiers = (a, b) => {
+ if (typeof a === "number" && typeof b === "number") {
+ return a === b ? 0 : a < b ? -1 : 1;
+ }
+ const anum = numeric.test(a);
+ const bnum = numeric.test(b);
+ if (anum && bnum) {
+ a = +a;
+ b = +b;
+ }
+ return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
+ };
+ var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
+ module2.exports = {
+ compareIdentifiers,
+ rcompareIdentifiers
+ };
+ }
+});
+
+// node_modules/semver/classes/semver.js
+var require_semver = __commonJS({
+ "node_modules/semver/classes/semver.js"(exports2, module2) {
+ "use strict";
+ var debug = require_debug();
+ var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants2();
+ var { safeRe: re, t } = require_re();
+ var parseOptions = require_parse_options();
+ var { compareIdentifiers } = require_identifiers();
+ var SemVer3 = class _SemVer {
+ constructor(version2, options) {
+ options = parseOptions(options);
+ if (version2 instanceof _SemVer) {
+ if (version2.loose === !!options.loose && version2.includePrerelease === !!options.includePrerelease) {
+ return version2;
+ } else {
+ version2 = version2.version;
+ }
+ } else if (typeof version2 !== "string") {
+ throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version2}".`);
+ }
+ if (version2.length > MAX_LENGTH) {
+ throw new TypeError(
+ `version is longer than ${MAX_LENGTH} characters`
+ );
+ }
+ debug("SemVer", version2, options);
+ this.options = options;
+ this.loose = !!options.loose;
+ this.includePrerelease = !!options.includePrerelease;
+ const m = version2.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
+ if (!m) {
+ throw new TypeError(`Invalid Version: ${version2}`);
+ }
+ this.raw = version2;
+ this.major = +m[1];
+ this.minor = +m[2];
+ this.patch = +m[3];
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+ throw new TypeError("Invalid major version");
+ }
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+ throw new TypeError("Invalid minor version");
+ }
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+ throw new TypeError("Invalid patch version");
+ }
+ if (!m[4]) {
+ this.prerelease = [];
+ } else {
+ this.prerelease = m[4].split(".").map((id) => {
+ if (/^[0-9]+$/.test(id)) {
+ const num = +id;
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
+ return num;
+ }
+ }
+ return id;
+ });
+ }
+ this.build = m[5] ? m[5].split(".") : [];
+ this.format();
+ }
+ format() {
+ this.version = `${this.major}.${this.minor}.${this.patch}`;
+ if (this.prerelease.length) {
+ this.version += `-${this.prerelease.join(".")}`;
+ }
+ return this.version;
+ }
+ toString() {
+ return this.version;
+ }
+ compare(other) {
+ debug("SemVer.compare", this.version, this.options, other);
+ if (!(other instanceof _SemVer)) {
+ if (typeof other === "string" && other === this.version) {
+ return 0;
+ }
+ other = new _SemVer(other, this.options);
+ }
+ if (other.version === this.version) {
+ return 0;
+ }
+ return this.compareMain(other) || this.comparePre(other);
+ }
+ compareMain(other) {
+ if (!(other instanceof _SemVer)) {
+ other = new _SemVer(other, this.options);
+ }
+ if (this.major < other.major) {
+ return -1;
+ }
+ if (this.major > other.major) {
+ return 1;
+ }
+ if (this.minor < other.minor) {
+ return -1;
+ }
+ if (this.minor > other.minor) {
+ return 1;
+ }
+ if (this.patch < other.patch) {
+ return -1;
+ }
+ if (this.patch > other.patch) {
+ return 1;
+ }
+ return 0;
+ }
+ comparePre(other) {
+ if (!(other instanceof _SemVer)) {
+ other = new _SemVer(other, this.options);
+ }
+ if (this.prerelease.length && !other.prerelease.length) {
+ return -1;
+ } else if (!this.prerelease.length && other.prerelease.length) {
+ return 1;
+ } else if (!this.prerelease.length && !other.prerelease.length) {
+ return 0;
+ }
+ let i = 0;
+ do {
+ const a = this.prerelease[i];
+ const b = other.prerelease[i];
+ debug("prerelease compare", i, a, b);
+ if (a === void 0 && b === void 0) {
+ return 0;
+ } else if (b === void 0) {
+ return 1;
+ } else if (a === void 0) {
+ return -1;
+ } else if (a === b) {
+ continue;
+ } else {
+ return compareIdentifiers(a, b);
+ }
+ } while (++i);
+ }
+ compareBuild(other) {
+ if (!(other instanceof _SemVer)) {
+ other = new _SemVer(other, this.options);
+ }
+ let i = 0;
+ do {
+ const a = this.build[i];
+ const b = other.build[i];
+ debug("build compare", i, a, b);
+ if (a === void 0 && b === void 0) {
+ return 0;
+ } else if (b === void 0) {
+ return 1;
+ } else if (a === void 0) {
+ return -1;
+ } else if (a === b) {
+ continue;
+ } else {
+ return compareIdentifiers(a, b);
+ }
+ } while (++i);
+ }
+ // preminor will bump the version up to the next minor release, and immediately
+ // down to pre-release. premajor and prepatch work the same way.
+ inc(release, identifier, identifierBase) {
+ if (release.startsWith("pre")) {
+ if (!identifier && identifierBase === false) {
+ throw new Error("invalid increment argument: identifier is empty");
+ }
+ if (identifier) {
+ const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
+ if (!match || match[1] !== identifier) {
+ throw new Error(`invalid identifier: ${identifier}`);
+ }
+ }
+ }
+ switch (release) {
+ case "premajor":
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor = 0;
+ this.major++;
+ this.inc("pre", identifier, identifierBase);
+ break;
+ case "preminor":
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor++;
+ this.inc("pre", identifier, identifierBase);
+ break;
+ case "prepatch":
+ this.prerelease.length = 0;
+ this.inc("patch", identifier, identifierBase);
+ this.inc("pre", identifier, identifierBase);
+ break;
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case "prerelease":
+ if (this.prerelease.length === 0) {
+ this.inc("patch", identifier, identifierBase);
+ }
+ this.inc("pre", identifier, identifierBase);
+ break;
+ case "release":
+ if (this.prerelease.length === 0) {
+ throw new Error(`version ${this.raw} is not a prerelease`);
+ }
+ this.prerelease.length = 0;
+ break;
+ case "major":
+ if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
+ this.major++;
+ }
+ this.minor = 0;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
+ case "minor":
+ if (this.patch !== 0 || this.prerelease.length === 0) {
+ this.minor++;
+ }
+ this.patch = 0;
+ this.prerelease = [];
+ break;
+ case "patch":
+ if (this.prerelease.length === 0) {
+ this.patch++;
+ }
+ this.prerelease = [];
+ break;
+ // This probably shouldn't be used publicly.
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
+ case "pre": {
+ const base = Number(identifierBase) ? 1 : 0;
+ if (this.prerelease.length === 0) {
+ this.prerelease = [base];
+ } else {
+ let i = this.prerelease.length;
+ while (--i >= 0) {
+ if (typeof this.prerelease[i] === "number") {
+ this.prerelease[i]++;
+ i = -2;
+ }
+ }
+ if (i === -1) {
+ if (identifier === this.prerelease.join(".") && identifierBase === false) {
+ throw new Error("invalid increment argument: identifier already exists");
+ }
+ this.prerelease.push(base);
+ }
+ }
+ if (identifier) {
+ let prerelease = [identifier, base];
+ if (identifierBase === false) {
+ prerelease = [identifier];
+ }
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
+ if (isNaN(this.prerelease[1])) {
+ this.prerelease = prerelease;
+ }
+ } else {
+ this.prerelease = prerelease;
+ }
+ }
+ break;
+ }
+ default:
+ throw new Error(`invalid increment argument: ${release}`);
+ }
+ this.raw = this.format();
+ if (this.build.length) {
+ this.raw += `+${this.build.join(".")}`;
+ }
+ return this;
+ }
+ };
+ module2.exports = SemVer3;
+ }
+});
+
+// node_modules/semver/functions/compare.js
+var require_compare = __commonJS({
+ "node_modules/semver/functions/compare.js"(exports2, module2) {
+ "use strict";
+ var SemVer3 = require_semver();
+ var compare = (a, b, loose) => new SemVer3(a, loose).compare(new SemVer3(b, loose));
+ module2.exports = compare;
+ }
+});
+
+// node_modules/semver/functions/rcompare.js
+var require_rcompare = __commonJS({
+ "node_modules/semver/functions/rcompare.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var rcompare = (a, b, loose) => compare(b, a, loose);
+ module2.exports = rcompare;
+ }
+});
+
+// node_modules/semver/functions/parse.js
+var require_parse = __commonJS({
+ "node_modules/semver/functions/parse.js"(exports2, module2) {
+ "use strict";
+ var SemVer3 = require_semver();
+ var parse4 = (version2, options, throwErrors = false) => {
+ if (version2 instanceof SemVer3) {
+ return version2;
+ }
+ try {
+ return new SemVer3(version2, options);
+ } catch (er) {
+ if (!throwErrors) {
+ return null;
+ }
+ throw er;
+ }
+ };
+ module2.exports = parse4;
+ }
+});
+
+// node_modules/semver/functions/valid.js
+var require_valid = __commonJS({
+ "node_modules/semver/functions/valid.js"(exports2, module2) {
+ "use strict";
+ var parse4 = require_parse();
+ var valid = (version2, options) => {
+ const v = parse4(version2, options);
+ return v ? v.version : null;
+ };
+ module2.exports = valid;
+ }
+});
+
+// node_modules/semver/internal/lrucache.js
+var require_lrucache = __commonJS({
+ "node_modules/semver/internal/lrucache.js"(exports2, module2) {
+ "use strict";
+ var LRUCache = class {
+ constructor() {
+ this.max = 1e3;
+ this.map = /* @__PURE__ */ new Map();
+ }
+ get(key) {
+ const value = this.map.get(key);
+ if (value === void 0) {
+ return void 0;
+ } else {
+ this.map.delete(key);
+ this.map.set(key, value);
+ return value;
+ }
+ }
+ delete(key) {
+ return this.map.delete(key);
+ }
+ set(key, value) {
+ const deleted = this.delete(key);
+ if (!deleted && value !== void 0) {
+ if (this.map.size >= this.max) {
+ const firstKey = this.map.keys().next().value;
+ this.delete(firstKey);
+ }
+ this.map.set(key, value);
+ }
+ return this;
+ }
+ };
+ module2.exports = LRUCache;
+ }
+});
+
+// node_modules/semver/functions/eq.js
+var require_eq = __commonJS({
+ "node_modules/semver/functions/eq.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var eq = (a, b, loose) => compare(a, b, loose) === 0;
+ module2.exports = eq;
+ }
+});
+
+// node_modules/semver/functions/neq.js
+var require_neq = __commonJS({
+ "node_modules/semver/functions/neq.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var neq = (a, b, loose) => compare(a, b, loose) !== 0;
+ module2.exports = neq;
+ }
+});
+
+// node_modules/semver/functions/gt.js
+var require_gt = __commonJS({
+ "node_modules/semver/functions/gt.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var gt = (a, b, loose) => compare(a, b, loose) > 0;
+ module2.exports = gt;
+ }
+});
+
+// node_modules/semver/functions/gte.js
+var require_gte = __commonJS({
+ "node_modules/semver/functions/gte.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var gte = (a, b, loose) => compare(a, b, loose) >= 0;
+ module2.exports = gte;
+ }
+});
+
+// node_modules/semver/functions/lt.js
+var require_lt = __commonJS({
+ "node_modules/semver/functions/lt.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var lt = (a, b, loose) => compare(a, b, loose) < 0;
+ module2.exports = lt;
+ }
+});
+
+// node_modules/semver/functions/lte.js
+var require_lte = __commonJS({
+ "node_modules/semver/functions/lte.js"(exports2, module2) {
+ "use strict";
+ var compare = require_compare();
+ var lte = (a, b, loose) => compare(a, b, loose) <= 0;
+ module2.exports = lte;
+ }
+});
+
+// node_modules/semver/functions/cmp.js
+var require_cmp = __commonJS({
+ "node_modules/semver/functions/cmp.js"(exports2, module2) {
+ "use strict";
+ var eq = require_eq();
+ var neq = require_neq();
+ var gt = require_gt();
+ var gte = require_gte();
+ var lt = require_lt();
+ var lte = require_lte();
+ var cmp = (a, op, b, loose) => {
+ switch (op) {
+ case "===":
+ if (typeof a === "object") {
+ a = a.version;
+ }
+ if (typeof b === "object") {
+ b = b.version;
+ }
+ return a === b;
+ case "!==":
+ if (typeof a === "object") {
+ a = a.version;
+ }
+ if (typeof b === "object") {
+ b = b.version;
+ }
+ return a !== b;
+ case "":
+ case "=":
+ case "==":
+ return eq(a, b, loose);
+ case "!=":
+ return neq(a, b, loose);
+ case ">":
+ return gt(a, b, loose);
+ case ">=":
+ return gte(a, b, loose);
+ case "<":
+ return lt(a, b, loose);
+ case "<=":
+ return lte(a, b, loose);
+ default:
+ throw new TypeError(`Invalid operator: ${op}`);
+ }
+ };
+ module2.exports = cmp;
+ }
+});
+
+// node_modules/semver/classes/comparator.js
+var require_comparator = __commonJS({
+ "node_modules/semver/classes/comparator.js"(exports2, module2) {
+ "use strict";
+ var ANY = /* @__PURE__ */ Symbol("SemVer ANY");
+ var Comparator = class _Comparator {
+ static get ANY() {
+ return ANY;
+ }
+ constructor(comp, options) {
+ options = parseOptions(options);
+ if (comp instanceof _Comparator) {
+ if (comp.loose === !!options.loose) {
+ return comp;
+ } else {
+ comp = comp.value;
+ }
+ }
+ comp = comp.trim().split(/\s+/).join(" ");
+ debug("comparator", comp, options);
+ this.options = options;
+ this.loose = !!options.loose;
+ this.parse(comp);
+ if (this.semver === ANY) {
+ this.value = "";
+ } else {
+ this.value = this.operator + this.semver.version;
+ }
+ debug("comp", this);
+ }
+ parse(comp) {
+ const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
+ const m = comp.match(r);
+ if (!m) {
+ throw new TypeError(`Invalid comparator: ${comp}`);
+ }
+ this.operator = m[1] !== void 0 ? m[1] : "";
+ if (this.operator === "=") {
+ this.operator = "";
+ }
+ if (!m[2]) {
+ this.semver = ANY;
+ } else {
+ this.semver = new SemVer3(m[2], this.options.loose);
+ }
+ }
+ toString() {
+ return this.value;
+ }
+ test(version2) {
+ debug("Comparator.test", version2, this.options.loose);
+ if (this.semver === ANY || version2 === ANY) {
+ return true;
+ }
+ if (typeof version2 === "string") {
+ try {
+ version2 = new SemVer3(version2, this.options);
+ } catch (er) {
+ return false;
+ }
+ }
+ return cmp(version2, this.operator, this.semver, this.options);
+ }
+ intersects(comp, options) {
+ if (!(comp instanceof _Comparator)) {
+ throw new TypeError("a Comparator is required");
+ }
+ if (this.operator === "") {
+ if (this.value === "") {
+ return true;
+ }
+ return new Range3(comp.value, options).test(this.value);
+ } else if (comp.operator === "") {
+ if (comp.value === "") {
+ return true;
+ }
+ return new Range3(this.value, options).test(comp.semver);
+ }
+ options = parseOptions(options);
+ if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) {
+ return false;
+ }
+ if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) {
+ return false;
+ }
+ if (this.operator.startsWith(">") && comp.operator.startsWith(">")) {
+ return true;
+ }
+ if (this.operator.startsWith("<") && comp.operator.startsWith("<")) {
+ return true;
+ }
+ if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) {
+ return true;
+ }
+ if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) {
+ return true;
+ }
+ if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) {
+ return true;
+ }
+ return false;
+ }
+ };
+ module2.exports = Comparator;
+ var parseOptions = require_parse_options();
+ var { safeRe: re, t } = require_re();
+ var cmp = require_cmp();
+ var debug = require_debug();
+ var SemVer3 = require_semver();
+ var Range3 = require_range();
+ }
+});
+
+// node_modules/semver/classes/range.js
+var require_range = __commonJS({
+ "node_modules/semver/classes/range.js"(exports2, module2) {
+ "use strict";
+ var SPACE_CHARACTERS = /\s+/g;
+ var Range3 = class _Range {
+ constructor(range, options) {
+ options = parseOptions(options);
+ if (range instanceof _Range) {
+ if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
+ return range;
+ } else {
+ return new _Range(range.raw, options);
+ }
+ }
+ if (range instanceof Comparator) {
+ this.raw = range.value;
+ this.set = [[range]];
+ this.formatted = void 0;
+ return this;
+ }
+ this.options = options;
+ this.loose = !!options.loose;
+ this.includePrerelease = !!options.includePrerelease;
+ this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
+ this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
+ if (!this.set.length) {
+ throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
+ }
+ if (this.set.length > 1) {
+ const first = this.set[0];
+ this.set = this.set.filter((c) => !isNullSet(c[0]));
+ if (this.set.length === 0) {
+ this.set = [first];
+ } else if (this.set.length > 1) {
+ for (const c of this.set) {
+ if (c.length === 1 && isAny(c[0])) {
+ this.set = [c];
+ break;
+ }
+ }
+ }
+ }
+ this.formatted = void 0;
+ }
+ get range() {
+ if (this.formatted === void 0) {
+ this.formatted = "";
+ for (let i = 0; i < this.set.length; i++) {
+ if (i > 0) {
+ this.formatted += "||";
+ }
+ const comps = this.set[i];
+ for (let k = 0; k < comps.length; k++) {
+ if (k > 0) {
+ this.formatted += " ";
+ }
+ this.formatted += comps[k].toString().trim();
+ }
+ }
+ }
+ return this.formatted;
+ }
+ format() {
+ return this.range;
+ }
+ toString() {
+ return this.range;
+ }
+ parseRange(range) {
+ const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
+ const memoKey = memoOpts + ":" + range;
+ const cached = cache2.get(memoKey);
+ if (cached) {
+ return cached;
+ }
+ const loose = this.options.loose;
+ const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
+ range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
+ debug("hyphen replace", range);
+ range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
+ debug("comparator trim", range);
+ range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
+ debug("tilde trim", range);
+ range = range.replace(re[t.CARETTRIM], caretTrimReplace);
+ debug("caret trim", range);
+ let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
+ if (loose) {
+ rangeList = rangeList.filter((comp) => {
+ debug("loose invalid filter", comp, this.options);
+ return !!comp.match(re[t.COMPARATORLOOSE]);
+ });
+ }
+ debug("range list", rangeList);
+ const rangeMap = /* @__PURE__ */ new Map();
+ const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
+ for (const comp of comparators) {
+ if (isNullSet(comp)) {
+ return [comp];
+ }
+ rangeMap.set(comp.value, comp);
+ }
+ if (rangeMap.size > 1 && rangeMap.has("")) {
+ rangeMap.delete("");
+ }
+ const result = [...rangeMap.values()];
+ cache2.set(memoKey, result);
+ return result;
+ }
+ intersects(range, options) {
+ if (!(range instanceof _Range)) {
+ throw new TypeError("a Range is required");
+ }
+ return this.set.some((thisComparators) => {
+ return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
+ return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
+ return rangeComparators.every((rangeComparator) => {
+ return thisComparator.intersects(rangeComparator, options);
+ });
+ });
+ });
+ });
+ }
+ // if ANY of the sets match ALL of its comparators, then pass
+ test(version2) {
+ if (!version2) {
+ return false;
+ }
+ if (typeof version2 === "string") {
+ try {
+ version2 = new SemVer3(version2, this.options);
+ } catch (er) {
+ return false;
+ }
+ }
+ for (let i = 0; i < this.set.length; i++) {
+ if (testSet(this.set[i], version2, this.options)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ };
+ module2.exports = Range3;
+ var LRU = require_lrucache();
+ var cache2 = new LRU();
+ var parseOptions = require_parse_options();
+ var Comparator = require_comparator();
+ var debug = require_debug();
+ var SemVer3 = require_semver();
+ var {
+ safeRe: re,
+ t,
+ comparatorTrimReplace,
+ tildeTrimReplace,
+ caretTrimReplace
+ } = require_re();
+ var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants2();
+ var isNullSet = (c) => c.value === "<0.0.0-0";
+ var isAny = (c) => c.value === "";
+ var isSatisfiable = (comparators, options) => {
+ let result = true;
+ const remainingComparators = comparators.slice();
+ let testComparator = remainingComparators.pop();
+ while (result && remainingComparators.length) {
+ result = remainingComparators.every((otherComparator) => {
+ return testComparator.intersects(otherComparator, options);
+ });
+ testComparator = remainingComparators.pop();
+ }
+ return result;
+ };
+ var parseComparator = (comp, options) => {
+ comp = comp.replace(re[t.BUILD], "");
+ debug("comp", comp, options);
+ comp = replaceCarets(comp, options);
+ debug("caret", comp);
+ comp = replaceTildes(comp, options);
+ debug("tildes", comp);
+ comp = replaceXRanges(comp, options);
+ debug("xrange", comp);
+ comp = replaceStars(comp, options);
+ debug("stars", comp);
+ return comp;
+ };
+ var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
+ var replaceTildes = (comp, options) => {
+ return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
+ };
+ var replaceTilde = (comp, options) => {
+ const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug("tilde", comp, _, M, m, p, pr);
+ let ret;
+ if (isX(M)) {
+ ret = "";
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
+ } else if (isX(p)) {
+ ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
+ } else if (pr) {
+ debug("replaceTilde pr", pr);
+ ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+ } else {
+ ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
+ }
+ debug("tilde return", ret);
+ return ret;
+ });
+ };
+ var replaceCarets = (comp, options) => {
+ return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
+ };
+ var replaceCaret = (comp, options) => {
+ debug("caret", comp, options);
+ const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
+ const z = options.includePrerelease ? "-0" : "";
+ return comp.replace(r, (_, M, m, p, pr) => {
+ debug("caret", comp, _, M, m, p, pr);
+ let ret;
+ if (isX(M)) {
+ ret = "";
+ } else if (isX(m)) {
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
+ } else if (isX(p)) {
+ if (M === "0") {
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
+ } else {
+ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
+ }
+ } else if (pr) {
+ debug("replaceCaret pr", pr);
+ if (M === "0") {
+ if (m === "0") {
+ ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
+ }
+ } else {
+ ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
+ }
+ } else {
+ debug("no pr");
+ if (M === "0") {
+ if (m === "0") {
+ ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
+ } else {
+ ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
+ }
+ } else {
+ ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
+ }
+ }
+ debug("caret return", ret);
+ return ret;
+ });
+ };
+ var replaceXRanges = (comp, options) => {
+ debug("replaceXRanges", comp, options);
+ return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
+ };
+ var replaceXRange = (comp, options) => {
+ comp = comp.trim();
+ const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
+ return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
+ debug("xRange", comp, ret, gtlt, M, m, p, pr);
+ const xM = isX(M);
+ const xm = xM || isX(m);
+ const xp = xm || isX(p);
+ const anyX = xp;
+ if (gtlt === "=" && anyX) {
+ gtlt = "";
+ }
+ pr = options.includePrerelease ? "-0" : "";
+ if (xM) {
+ if (gtlt === ">" || gtlt === "<") {
+ ret = "<0.0.0-0";
+ } else {
+ ret = "*";
+ }
+ } else if (gtlt && anyX) {
+ if (xm) {
+ m = 0;
+ }
+ p = 0;
+ if (gtlt === ">") {
+ gtlt = ">=";
+ if (xm) {
+ M = +M + 1;
+ m = 0;
+ p = 0;
+ } else {
+ m = +m + 1;
+ p = 0;
+ }
+ } else if (gtlt === "<=") {
+ gtlt = "<";
+ if (xm) {
+ M = +M + 1;
+ } else {
+ m = +m + 1;
+ }
+ }
+ if (gtlt === "<") {
+ pr = "-0";
+ }
+ ret = `${gtlt + M}.${m}.${p}${pr}`;
+ } else if (xm) {
+ ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
+ } else if (xp) {
+ ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
+ }
+ debug("xRange return", ret);
+ return ret;
+ });
+ };
+ var replaceStars = (comp, options) => {
+ debug("replaceStars", comp, options);
+ return comp.trim().replace(re[t.STAR], "");
+ };
+ var replaceGTE0 = (comp, options) => {
+ debug("replaceGTE0", comp, options);
+ return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
+ };
+ var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
+ if (isX(fM)) {
+ from = "";
+ } else if (isX(fm)) {
+ from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
+ } else if (isX(fp)) {
+ from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
+ } else if (fpr) {
+ from = `>=${from}`;
+ } else {
+ from = `>=${from}${incPr ? "-0" : ""}`;
+ }
+ if (isX(tM)) {
+ to = "";
+ } else if (isX(tm)) {
+ to = `<${+tM + 1}.0.0-0`;
+ } else if (isX(tp)) {
+ to = `<${tM}.${+tm + 1}.0-0`;
+ } else if (tpr) {
+ to = `<=${tM}.${tm}.${tp}-${tpr}`;
+ } else if (incPr) {
+ to = `<${tM}.${tm}.${+tp + 1}-0`;
+ } else {
+ to = `<=${to}`;
+ }
+ return `${from} ${to}`.trim();
+ };
+ var testSet = (set, version2, options) => {
+ for (let i = 0; i < set.length; i++) {
+ if (!set[i].test(version2)) {
+ return false;
+ }
+ }
+ if (version2.prerelease.length && !options.includePrerelease) {
+ for (let i = 0; i < set.length; i++) {
+ debug(set[i].semver);
+ if (set[i].semver === Comparator.ANY) {
+ continue;
+ }
+ if (set[i].semver.prerelease.length > 0) {
+ const allowed = set[i].semver;
+ if (allowed.major === version2.major && allowed.minor === version2.minor && allowed.patch === version2.patch) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ return true;
+ };
+ }
+});
+
+// node_modules/semver/ranges/valid.js
+var require_valid2 = __commonJS({
+ "node_modules/semver/ranges/valid.js"(exports2, module2) {
+ "use strict";
+ var Range3 = require_range();
+ var validRange = (range, options) => {
+ try {
+ return new Range3(range, options).range || "*";
+ } catch (er) {
+ return null;
+ }
+ };
+ module2.exports = validRange;
+ }
+});
+
+// node_modules/ms/index.js
+var require_ms = __commonJS({
+ "node_modules/ms/index.js"(exports2, module2) {
+ var s = 1e3;
+ var m = s * 60;
+ var h = m * 60;
+ var d = h * 24;
+ var w = d * 7;
+ var y = d * 365.25;
+ module2.exports = function(val, options) {
+ options = options || {};
+ var type = typeof val;
+ if (type === "string" && val.length > 0) {
+ return parse4(val);
+ } else if (type === "number" && isFinite(val)) {
+ return options.long ? fmtLong(val) : fmtShort(val);
+ }
+ throw new Error(
+ "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
+ );
+ };
+ function parse4(str) {
+ str = String(str);
+ if (str.length > 100) {
+ return;
+ }
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+ str
+ );
+ if (!match) {
+ return;
+ }
+ var n = parseFloat(match[1]);
+ var type = (match[2] || "ms").toLowerCase();
+ switch (type) {
+ case "years":
+ case "year":
+ case "yrs":
+ case "yr":
+ case "y":
+ return n * y;
+ case "weeks":
+ case "week":
+ case "w":
+ return n * w;
+ case "days":
+ case "day":
+ case "d":
+ return n * d;
+ case "hours":
+ case "hour":
+ case "hrs":
+ case "hr":
+ case "h":
+ return n * h;
+ case "minutes":
+ case "minute":
+ case "mins":
+ case "min":
+ case "m":
+ return n * m;
+ case "seconds":
+ case "second":
+ case "secs":
+ case "sec":
+ case "s":
+ return n * s;
+ case "milliseconds":
+ case "millisecond":
+ case "msecs":
+ case "msec":
+ case "ms":
+ return n;
+ default:
+ return void 0;
+ }
+ }
+ function fmtShort(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return Math.round(ms / d) + "d";
+ }
+ if (msAbs >= h) {
+ return Math.round(ms / h) + "h";
+ }
+ if (msAbs >= m) {
+ return Math.round(ms / m) + "m";
+ }
+ if (msAbs >= s) {
+ return Math.round(ms / s) + "s";
+ }
+ return ms + "ms";
+ }
+ function fmtLong(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return plural2(ms, msAbs, d, "day");
+ }
+ if (msAbs >= h) {
+ return plural2(ms, msAbs, h, "hour");
+ }
+ if (msAbs >= m) {
+ return plural2(ms, msAbs, m, "minute");
+ }
+ if (msAbs >= s) {
+ return plural2(ms, msAbs, s, "second");
+ }
+ return ms + " ms";
+ }
+ function plural2(ms, msAbs, n, name2) {
+ var isPlural = msAbs >= n * 1.5;
+ return Math.round(ms / n) + " " + name2 + (isPlural ? "s" : "");
+ }
+ }
+});
+
+// node_modules/debug/src/common.js
+var require_common = __commonJS({
+ "node_modules/debug/src/common.js"(exports2, module2) {
+ function setup(env2) {
+ createDebug.debug = createDebug;
+ createDebug.default = createDebug;
+ createDebug.coerce = coerce;
+ createDebug.disable = disable;
+ createDebug.enable = enable;
+ createDebug.enabled = enabled;
+ createDebug.humanize = require_ms();
+ createDebug.destroy = destroy;
+ Object.keys(env2).forEach((key) => {
+ createDebug[key] = env2[key];
+ });
+ createDebug.names = [];
+ createDebug.skips = [];
+ createDebug.formatters = {};
+ function selectColor(namespace) {
+ let hash = 0;
+ for (let i = 0; i < namespace.length; i++) {
+ hash = (hash << 5) - hash + namespace.charCodeAt(i);
+ hash |= 0;
+ }
+ return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+ }
+ createDebug.selectColor = selectColor;
+ function createDebug(namespace) {
+ let prevTime;
+ let enableOverride = null;
+ let namespacesCache;
+ let enabledCache;
+ function debug(...args) {
+ if (!debug.enabled) {
+ return;
+ }
+ const self2 = debug;
+ const curr = Number(/* @__PURE__ */ new Date());
+ const ms = curr - (prevTime || curr);
+ self2.diff = ms;
+ self2.prev = prevTime;
+ self2.curr = curr;
+ prevTime = curr;
+ args[0] = createDebug.coerce(args[0]);
+ if (typeof args[0] !== "string") {
+ args.unshift("%O");
+ }
+ let index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+ if (match === "%%") {
+ return "%";
+ }
+ index++;
+ const formatter = createDebug.formatters[format];
+ if (typeof formatter === "function") {
+ const val = args[index];
+ match = formatter.call(self2, val);
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+ createDebug.formatArgs.call(self2, args);
+ const logFn = self2.log || createDebug.log;
+ logFn.apply(self2, args);
+ }
+ debug.namespace = namespace;
+ debug.useColors = createDebug.useColors();
+ debug.color = createDebug.selectColor(namespace);
+ debug.extend = extend;
+ debug.destroy = createDebug.destroy;
+ Object.defineProperty(debug, "enabled", {
+ enumerable: true,
+ configurable: false,
+ get: () => {
+ if (enableOverride !== null) {
+ return enableOverride;
+ }
+ if (namespacesCache !== createDebug.namespaces) {
+ namespacesCache = createDebug.namespaces;
+ enabledCache = createDebug.enabled(namespace);
+ }
+ return enabledCache;
+ },
+ set: (v) => {
+ enableOverride = v;
+ }
+ });
+ if (typeof createDebug.init === "function") {
+ createDebug.init(debug);
+ }
+ return debug;
+ }
+ function extend(namespace, delimiter) {
+ const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
+ newDebug.log = this.log;
+ return newDebug;
+ }
+ function enable(namespaces) {
+ createDebug.save(namespaces);
+ createDebug.namespaces = namespaces;
+ createDebug.names = [];
+ createDebug.skips = [];
+ const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
+ for (const ns of split) {
+ if (ns[0] === "-") {
+ createDebug.skips.push(ns.slice(1));
+ } else {
+ createDebug.names.push(ns);
+ }
+ }
+ }
+ function matchesTemplate(search, template) {
+ let searchIndex = 0;
+ let templateIndex = 0;
+ let starIndex = -1;
+ let matchIndex = 0;
+ while (searchIndex < search.length) {
+ if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
+ if (template[templateIndex] === "*") {
+ starIndex = templateIndex;
+ matchIndex = searchIndex;
+ templateIndex++;
+ } else {
+ searchIndex++;
+ templateIndex++;
+ }
+ } else if (starIndex !== -1) {
+ templateIndex = starIndex + 1;
+ matchIndex++;
+ searchIndex = matchIndex;
+ } else {
+ return false;
+ }
+ }
+ while (templateIndex < template.length && template[templateIndex] === "*") {
+ templateIndex++;
+ }
+ return templateIndex === template.length;
+ }
+ function disable() {
+ const namespaces = [
+ ...createDebug.names,
+ ...createDebug.skips.map((namespace) => "-" + namespace)
+ ].join(",");
+ createDebug.enable("");
+ return namespaces;
+ }
+ function enabled(name2) {
+ for (const skip of createDebug.skips) {
+ if (matchesTemplate(name2, skip)) {
+ return false;
+ }
+ }
+ for (const ns of createDebug.names) {
+ if (matchesTemplate(name2, ns)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function coerce(val) {
+ if (val instanceof Error) {
+ return val.stack || val.message;
+ }
+ return val;
+ }
+ function destroy() {
+ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+ }
+ createDebug.enable(createDebug.load());
+ return createDebug;
+ }
+ module2.exports = setup;
+ }
+});
+
+// node_modules/debug/src/browser.js
+var require_browser = __commonJS({
+ "node_modules/debug/src/browser.js"(exports2, module2) {
+ exports2.formatArgs = formatArgs;
+ exports2.save = save;
+ exports2.load = load;
+ exports2.useColors = useColors;
+ exports2.storage = localstorage();
+ exports2.destroy = /* @__PURE__ */ (() => {
+ let warned = false;
+ return () => {
+ if (!warned) {
+ warned = true;
+ console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
+ }
+ };
+ })();
+ exports2.colors = [
+ "#0000CC",
+ "#0000FF",
+ "#0033CC",
+ "#0033FF",
+ "#0066CC",
+ "#0066FF",
+ "#0099CC",
+ "#0099FF",
+ "#00CC00",
+ "#00CC33",
+ "#00CC66",
+ "#00CC99",
+ "#00CCCC",
+ "#00CCFF",
+ "#3300CC",
+ "#3300FF",
+ "#3333CC",
+ "#3333FF",
+ "#3366CC",
+ "#3366FF",
+ "#3399CC",
+ "#3399FF",
+ "#33CC00",
+ "#33CC33",
+ "#33CC66",
+ "#33CC99",
+ "#33CCCC",
+ "#33CCFF",
+ "#6600CC",
+ "#6600FF",
+ "#6633CC",
+ "#6633FF",
+ "#66CC00",
+ "#66CC33",
+ "#9900CC",
+ "#9900FF",
+ "#9933CC",
+ "#9933FF",
+ "#99CC00",
+ "#99CC33",
+ "#CC0000",
+ "#CC0033",
+ "#CC0066",
+ "#CC0099",
+ "#CC00CC",
+ "#CC00FF",
+ "#CC3300",
+ "#CC3333",
+ "#CC3366",
+ "#CC3399",
+ "#CC33CC",
+ "#CC33FF",
+ "#CC6600",
+ "#CC6633",
+ "#CC9900",
+ "#CC9933",
+ "#CCCC00",
+ "#CCCC33",
+ "#FF0000",
+ "#FF0033",
+ "#FF0066",
+ "#FF0099",
+ "#FF00CC",
+ "#FF00FF",
+ "#FF3300",
+ "#FF3333",
+ "#FF3366",
+ "#FF3399",
+ "#FF33CC",
+ "#FF33FF",
+ "#FF6600",
+ "#FF6633",
+ "#FF9900",
+ "#FF9933",
+ "#FFCC00",
+ "#FFCC33"
+ ];
+ function useColors() {
+ if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
+ return true;
+ }
+ if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+ return false;
+ }
+ let m;
+ return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
+ typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
+ typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+ }
+ function formatArgs(args) {
+ args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
+ if (!this.useColors) {
+ return;
+ }
+ const c = "color: " + this.color;
+ args.splice(1, 0, c, "color: inherit");
+ let index = 0;
+ let lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, (match) => {
+ if (match === "%%") {
+ return;
+ }
+ index++;
+ if (match === "%c") {
+ lastC = index;
+ }
+ });
+ args.splice(lastC, 0, c);
+ }
+ exports2.log = console.debug || console.log || (() => {
+ });
+ function save(namespaces) {
+ try {
+ if (namespaces) {
+ exports2.storage.setItem("debug", namespaces);
+ } else {
+ exports2.storage.removeItem("debug");
+ }
+ } catch (error) {
+ }
+ }
+ function load() {
+ let r;
+ try {
+ r = exports2.storage.getItem("debug") || exports2.storage.getItem("DEBUG");
+ } catch (error) {
+ }
+ if (!r && typeof process !== "undefined" && "env" in process) {
+ r = process.env.DEBUG;
+ }
+ return r;
+ }
+ function localstorage() {
+ try {
+ return localStorage;
+ } catch (error) {
+ }
+ }
+ module2.exports = require_common()(exports2);
+ var { formatters } = module2.exports;
+ formatters.j = function(v) {
+ try {
+ return JSON.stringify(v);
+ } catch (error) {
+ return "[UnexpectedJSONParseError]: " + error.message;
+ }
+ };
+ }
+});
+
+// node_modules/supports-color/index.js
+var supports_color_exports = {};
+__export(supports_color_exports, {
+ createSupportsColor: () => createSupportsColor,
+ default: () => supports_color_default
+});
+function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
+ const position = argv.indexOf(prefix + flag);
+ const terminatorPosition = argv.indexOf("--");
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+function envForceColor() {
+ if (!("FORCE_COLOR" in env)) {
+ return;
+ }
+ if (env.FORCE_COLOR === "true") {
+ return 1;
+ }
+ if (env.FORCE_COLOR === "false") {
+ return 0;
+ }
+ if (env.FORCE_COLOR.length === 0) {
+ return 1;
+ }
+ const level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+ if (![0, 1, 2, 3].includes(level)) {
+ return;
+ }
+ return level;
+}
+function translateLevel(level) {
+ if (level === 0) {
+ return false;
+ }
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3
+ };
+}
+function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
+ const noFlagForceColor = envForceColor();
+ if (noFlagForceColor !== void 0) {
+ flagForceColor = noFlagForceColor;
+ }
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+ if (forceColor === 0) {
+ return 0;
+ }
+ if (sniffFlags) {
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
+ return 3;
+ }
+ if (hasFlag("color=256")) {
+ return 2;
+ }
+ }
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
+ return 1;
+ }
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
+ return 0;
+ }
+ const min = forceColor || 0;
+ if (env.TERM === "dumb") {
+ return min;
+ }
+ if (import_node_process.default.platform === "win32") {
+ const osRelease = import_node_os.default.release().split(".");
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
+ }
+ return 1;
+ }
+ if ("CI" in env) {
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
+ return 3;
+ }
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
+ return 1;
+ }
+ return min;
+ }
+ if ("TEAMCITY_VERSION" in env) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+ }
+ if (env.COLORTERM === "truecolor") {
+ return 3;
+ }
+ if (env.TERM === "xterm-kitty") {
+ return 3;
+ }
+ if (env.TERM === "xterm-ghostty") {
+ return 3;
+ }
+ if (env.TERM === "wezterm") {
+ return 3;
+ }
+ if ("TERM_PROGRAM" in env) {
+ const version2 = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
+ switch (env.TERM_PROGRAM) {
+ case "iTerm.app": {
+ return version2 >= 3 ? 3 : 2;
+ }
+ case "Apple_Terminal": {
+ return 2;
+ }
+ }
+ }
+ if (/-256(color)?$/i.test(env.TERM)) {
+ return 2;
+ }
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+ return 1;
+ }
+ if ("COLORTERM" in env) {
+ return 1;
+ }
+ return min;
+}
+function createSupportsColor(stream, options = {}) {
+ const level = _supportsColor(stream, {
+ streamIsTTY: stream && stream.isTTY,
+ ...options
+ });
+ return translateLevel(level);
+}
+var import_node_process, import_node_os, import_node_tty, env, flagForceColor, supportsColor, supports_color_default;
+var init_supports_color = __esm({
+ "node_modules/supports-color/index.js"() {
+ import_node_process = __toESM(require("node:process"), 1);
+ import_node_os = __toESM(require("node:os"), 1);
+ import_node_tty = __toESM(require("node:tty"), 1);
+ ({ env } = import_node_process.default);
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
+ flagForceColor = 0;
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
+ flagForceColor = 1;
+ }
+ supportsColor = {
+ stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
+ stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
+ };
+ supports_color_default = supportsColor;
+ }
+});
+
+// node_modules/debug/src/node.js
+var require_node = __commonJS({
+ "node_modules/debug/src/node.js"(exports2, module2) {
+ var tty3 = require("tty");
+ var util = require("util");
+ exports2.init = init;
+ exports2.log = log2;
+ exports2.formatArgs = formatArgs;
+ exports2.save = save;
+ exports2.load = load;
+ exports2.useColors = useColors;
+ exports2.destroy = util.deprecate(
+ () => {
+ },
+ "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
+ );
+ exports2.colors = [6, 2, 3, 4, 5, 1];
+ try {
+ const supportsColor2 = (init_supports_color(), __toCommonJS(supports_color_exports));
+ if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) {
+ exports2.colors = [
+ 20,
+ 21,
+ 26,
+ 27,
+ 32,
+ 33,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 56,
+ 57,
+ 62,
+ 63,
+ 68,
+ 69,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 92,
+ 93,
+ 98,
+ 99,
+ 112,
+ 113,
+ 128,
+ 129,
+ 134,
+ 135,
+ 148,
+ 149,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 178,
+ 179,
+ 184,
+ 185,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 214,
+ 215,
+ 220,
+ 221
+ ];
+ }
+ } catch (error) {
+ }
+ exports2.inspectOpts = Object.keys(process.env).filter((key) => {
+ return /^debug_/i.test(key);
+ }).reduce((obj, key) => {
+ const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
+ return k.toUpperCase();
+ });
+ let val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) {
+ val = true;
+ } else if (/^(no|off|false|disabled)$/i.test(val)) {
+ val = false;
+ } else if (val === "null") {
+ val = null;
+ } else {
+ val = Number(val);
+ }
+ obj[prop] = val;
+ return obj;
+ }, {});
+ function useColors() {
+ return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty3.isatty(process.stderr.fd);
+ }
+ function formatArgs(args) {
+ const { namespace: name2, useColors: useColors2 } = this;
+ if (useColors2) {
+ const c = this.color;
+ const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
+ const prefix = ` ${colorCode};1m${name2} \x1B[0m`;
+ args[0] = prefix + args[0].split("\n").join("\n" + prefix);
+ args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
+ } else {
+ args[0] = getDate() + name2 + " " + args[0];
+ }
+ }
+ function getDate() {
+ if (exports2.inspectOpts.hideDate) {
+ return "";
+ }
+ return (/* @__PURE__ */ new Date()).toISOString() + " ";
+ }
+ function log2(...args) {
+ return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
+ }
+ function save(namespaces) {
+ if (namespaces) {
+ process.env.DEBUG = namespaces;
+ } else {
+ delete process.env.DEBUG;
+ }
+ }
+ function load() {
+ return process.env.DEBUG;
+ }
+ function init(debug) {
+ debug.inspectOpts = {};
+ const keys = Object.keys(exports2.inspectOpts);
+ for (let i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
+ }
+ }
+ module2.exports = require_common()(exports2);
+ var { formatters } = module2.exports;
+ formatters.o = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
+ };
+ formatters.O = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+ };
+ }
+});
+
+// node_modules/debug/src/index.js
+var require_src = __commonJS({
+ "node_modules/debug/src/index.js"(exports2, module2) {
+ if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
+ module2.exports = require_browser();
+ } else {
+ module2.exports = require_node();
+ }
+ }
+});
+
+// node_modules/minipass/dist/esm/index.js
+var import_node_events, import_node_stream, import_node_string_decoder, proc, isStream, isReadable, isWritable, EOF, MAYBE_EMIT_END, EMITTED_END, EMITTING_END, EMITTED_ERROR, CLOSED, READ, FLUSH, FLUSHCHUNK, ENCODING, DECODER, FLOWING, PAUSED, RESUME, BUFFER, PIPES, BUFFERLENGTH, BUFFERPUSH, BUFFERSHIFT, OBJECTMODE, DESTROYED, ERROR, EMITDATA, EMITEND, EMITEND2, ASYNC, ABORT, ABORTED, SIGNAL, DATALISTENERS, DISCARDED, defer, nodefer, isEndish, isArrayBufferLike, isArrayBufferView, Pipe, PipeProxyErrors, isObjectModeOptions, isEncodingOptions, Minipass;
+var init_esm = __esm({
+ "node_modules/minipass/dist/esm/index.js"() {
+ import_node_events = require("node:events");
+ import_node_stream = __toESM(require("node:stream"), 1);
+ import_node_string_decoder = require("node:string_decoder");
+ proc = typeof process === "object" && process ? process : {
+ stdout: null,
+ stderr: null
+ };
+ isStream = (s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof import_node_stream.default || isReadable(s) || isWritable(s));
+ isReadable = (s) => !!s && typeof s === "object" && s instanceof import_node_events.EventEmitter && typeof s.pipe === "function" && // node core Writable streams have a pipe() method, but it throws
+ s.pipe !== import_node_stream.default.Writable.prototype.pipe;
+ isWritable = (s) => !!s && typeof s === "object" && s instanceof import_node_events.EventEmitter && typeof s.write === "function" && typeof s.end === "function";
+ EOF = /* @__PURE__ */ Symbol("EOF");
+ MAYBE_EMIT_END = /* @__PURE__ */ Symbol("maybeEmitEnd");
+ EMITTED_END = /* @__PURE__ */ Symbol("emittedEnd");
+ EMITTING_END = /* @__PURE__ */ Symbol("emittingEnd");
+ EMITTED_ERROR = /* @__PURE__ */ Symbol("emittedError");
+ CLOSED = /* @__PURE__ */ Symbol("closed");
+ READ = /* @__PURE__ */ Symbol("read");
+ FLUSH = /* @__PURE__ */ Symbol("flush");
+ FLUSHCHUNK = /* @__PURE__ */ Symbol("flushChunk");
+ ENCODING = /* @__PURE__ */ Symbol("encoding");
+ DECODER = /* @__PURE__ */ Symbol("decoder");
+ FLOWING = /* @__PURE__ */ Symbol("flowing");
+ PAUSED = /* @__PURE__ */ Symbol("paused");
+ RESUME = /* @__PURE__ */ Symbol("resume");
+ BUFFER = /* @__PURE__ */ Symbol("buffer");
+ PIPES = /* @__PURE__ */ Symbol("pipes");
+ BUFFERLENGTH = /* @__PURE__ */ Symbol("bufferLength");
+ BUFFERPUSH = /* @__PURE__ */ Symbol("bufferPush");
+ BUFFERSHIFT = /* @__PURE__ */ Symbol("bufferShift");
+ OBJECTMODE = /* @__PURE__ */ Symbol("objectMode");
+ DESTROYED = /* @__PURE__ */ Symbol("destroyed");
+ ERROR = /* @__PURE__ */ Symbol("error");
+ EMITDATA = /* @__PURE__ */ Symbol("emitData");
+ EMITEND = /* @__PURE__ */ Symbol("emitEnd");
+ EMITEND2 = /* @__PURE__ */ Symbol("emitEnd2");
+ ASYNC = /* @__PURE__ */ Symbol("async");
+ ABORT = /* @__PURE__ */ Symbol("abort");
+ ABORTED = /* @__PURE__ */ Symbol("aborted");
+ SIGNAL = /* @__PURE__ */ Symbol("signal");
+ DATALISTENERS = /* @__PURE__ */ Symbol("dataListeners");
+ DISCARDED = /* @__PURE__ */ Symbol("discarded");
+ defer = (fn2) => Promise.resolve().then(fn2);
+ nodefer = (fn2) => fn2();
+ isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish";
+ isArrayBufferLike = (b) => b instanceof ArrayBuffer || !!b && typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0;
+ isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
+ Pipe = class {
+ src;
+ dest;
+ opts;
+ ondrain;
+ constructor(src, dest, opts) {
+ this.src = src;
+ this.dest = dest;
+ this.opts = opts;
+ this.ondrain = () => src[RESUME]();
+ this.dest.on("drain", this.ondrain);
+ }
+ unpipe() {
+ this.dest.removeListener("drain", this.ondrain);
+ }
+ // only here for the prototype
+ /* c8 ignore start */
+ proxyErrors(_er) {
+ }
+ /* c8 ignore stop */
+ end() {
+ this.unpipe();
+ if (this.opts.end)
+ this.dest.end();
+ }
+ };
+ PipeProxyErrors = class extends Pipe {
+ unpipe() {
+ this.src.removeListener("error", this.proxyErrors);
+ super.unpipe();
+ }
+ constructor(src, dest, opts) {
+ super(src, dest, opts);
+ this.proxyErrors = (er) => this.dest.emit("error", er);
+ src.on("error", this.proxyErrors);
+ }
+ };
+ isObjectModeOptions = (o) => !!o.objectMode;
+ isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== "buffer";
+ Minipass = class extends import_node_events.EventEmitter {
+ [FLOWING] = false;
+ [PAUSED] = false;
+ [PIPES] = [];
+ [BUFFER] = [];
+ [OBJECTMODE];
+ [ENCODING];
+ [ASYNC];
+ [DECODER];
+ [EOF] = false;
+ [EMITTED_END] = false;
+ [EMITTING_END] = false;
+ [CLOSED] = false;
+ [EMITTED_ERROR] = null;
+ [BUFFERLENGTH] = 0;
+ [DESTROYED] = false;
+ [SIGNAL];
+ [ABORTED] = false;
+ [DATALISTENERS] = 0;
+ [DISCARDED] = false;
+ /**
+ * true if the stream can be written
+ */
+ writable = true;
+ /**
+ * true if the stream can be read
+ */
+ readable = true;
+ /**
+ * If `RType` is Buffer, then options do not need to be provided.
+ * Otherwise, an options object must be provided to specify either
+ * {@link Minipass.SharedOptions.objectMode} or
+ * {@link Minipass.SharedOptions.encoding}, as appropriate.
+ */
+ constructor(...args) {
+ const options = args[0] || {};
+ super();
+ if (options.objectMode && typeof options.encoding === "string") {
+ throw new TypeError("Encoding and objectMode may not be used together");
+ }
+ if (isObjectModeOptions(options)) {
+ this[OBJECTMODE] = true;
+ this[ENCODING] = null;
+ } else if (isEncodingOptions(options)) {
+ this[ENCODING] = options.encoding;
+ this[OBJECTMODE] = false;
+ } else {
+ this[OBJECTMODE] = false;
+ this[ENCODING] = null;
+ }
+ this[ASYNC] = !!options.async;
+ this[DECODER] = this[ENCODING] ? new import_node_string_decoder.StringDecoder(this[ENCODING]) : null;
+ if (options && options.debugExposeBuffer === true) {
+ Object.defineProperty(this, "buffer", { get: () => this[BUFFER] });
+ }
+ if (options && options.debugExposePipes === true) {
+ Object.defineProperty(this, "pipes", { get: () => this[PIPES] });
+ }
+ const { signal } = options;
+ if (signal) {
+ this[SIGNAL] = signal;
+ if (signal.aborted) {
+ this[ABORT]();
+ } else {
+ signal.addEventListener("abort", () => this[ABORT]());
+ }
+ }
+ }
+ /**
+ * The amount of data stored in the buffer waiting to be read.
+ *
+ * For Buffer strings, this will be the total byte length.
+ * For string encoding streams, this will be the string character length,
+ * according to JavaScript's `string.length` logic.
+ * For objectMode streams, this is a count of the items waiting to be
+ * emitted.
+ */
+ get bufferLength() {
+ return this[BUFFERLENGTH];
+ }
+ /**
+ * The `BufferEncoding` currently in use, or `null`
+ */
+ get encoding() {
+ return this[ENCODING];
+ }
+ /**
+ * @deprecated - This is a read only property
+ */
+ set encoding(_enc) {
+ throw new Error("Encoding must be set at instantiation time");
+ }
+ /**
+ * @deprecated - Encoding may only be set at instantiation time
+ */
+ setEncoding(_enc) {
+ throw new Error("Encoding must be set at instantiation time");
+ }
+ /**
+ * True if this is an objectMode stream
+ */
+ get objectMode() {
+ return this[OBJECTMODE];
+ }
+ /**
+ * @deprecated - This is a read-only property
+ */
+ set objectMode(_om) {
+ throw new Error("objectMode must be set at instantiation time");
+ }
+ /**
+ * true if this is an async stream
+ */
+ get ["async"]() {
+ return this[ASYNC];
+ }
+ /**
+ * Set to true to make this stream async.
+ *
+ * Once set, it cannot be unset, as this would potentially cause incorrect
+ * behavior. Ie, a sync stream can be made async, but an async stream
+ * cannot be safely made sync.
+ */
+ set ["async"](a) {
+ this[ASYNC] = this[ASYNC] || !!a;
+ }
+ // drop everything and get out of the flow completely
+ [ABORT]() {
+ this[ABORTED] = true;
+ this.emit("abort", this[SIGNAL]?.reason);
+ this.destroy(this[SIGNAL]?.reason);
+ }
+ /**
+ * True if the stream has been aborted.
+ */
+ get aborted() {
+ return this[ABORTED];
+ }
+ /**
+ * No-op setter. Stream aborted status is set via the AbortSignal provided
+ * in the constructor options.
+ */
+ set aborted(_) {
+ }
+ write(chunk, encoding, cb) {
+ if (this[ABORTED])
+ return false;
+ if (this[EOF])
+ throw new Error("write after end");
+ if (this[DESTROYED]) {
+ this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" }));
+ return true;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = "utf8";
+ }
+ if (!encoding)
+ encoding = "utf8";
+ const fn2 = this[ASYNC] ? defer : nodefer;
+ if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+ if (isArrayBufferView(chunk)) {
+ chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+ } else if (isArrayBufferLike(chunk)) {
+ chunk = Buffer.from(chunk);
+ } else if (typeof chunk !== "string") {
+ throw new Error("Non-contiguous data written to non-objectMode stream");
+ }
+ }
+ if (this[OBJECTMODE]) {
+ if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+ this[FLUSH](true);
+ if (this[FLOWING])
+ this.emit("data", chunk);
+ else
+ this[BUFFERPUSH](chunk);
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit("readable");
+ if (cb)
+ fn2(cb);
+ return this[FLOWING];
+ }
+ if (!chunk.length) {
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit("readable");
+ if (cb)
+ fn2(cb);
+ return this[FLOWING];
+ }
+ if (typeof chunk === "string" && // unless it is a string already ready for us to use
+ !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ if (Buffer.isBuffer(chunk) && this[ENCODING]) {
+ chunk = this[DECODER].write(chunk);
+ }
+ if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+ this[FLUSH](true);
+ if (this[FLOWING])
+ this.emit("data", chunk);
+ else
+ this[BUFFERPUSH](chunk);
+ if (this[BUFFERLENGTH] !== 0)
+ this.emit("readable");
+ if (cb)
+ fn2(cb);
+ return this[FLOWING];
+ }
+ /**
+ * Low-level explicit read method.
+ *
+ * In objectMode, the argument is ignored, and one item is returned if
+ * available.
+ *
+ * `n` is the number of bytes (or in the case of encoding streams,
+ * characters) to consume. If `n` is not provided, then the entire buffer
+ * is returned, or `null` is returned if no data is available.
+ *
+ * If `n` is greater that the amount of data in the internal buffer,
+ * then `null` is returned.
+ */
+ read(n) {
+ if (this[DESTROYED])
+ return null;
+ this[DISCARDED] = false;
+ if (this[BUFFERLENGTH] === 0 || n === 0 || n && n > this[BUFFERLENGTH]) {
+ this[MAYBE_EMIT_END]();
+ return null;
+ }
+ if (this[OBJECTMODE])
+ n = null;
+ if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+ this[BUFFER] = [
+ this[ENCODING] ? this[BUFFER].join("") : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])
+ ];
+ }
+ const ret = this[READ](n || null, this[BUFFER][0]);
+ this[MAYBE_EMIT_END]();
+ return ret;
+ }
+ [READ](n, chunk) {
+ if (this[OBJECTMODE])
+ this[BUFFERSHIFT]();
+ else {
+ const c = chunk;
+ if (n === c.length || n === null)
+ this[BUFFERSHIFT]();
+ else if (typeof c === "string") {
+ this[BUFFER][0] = c.slice(n);
+ chunk = c.slice(0, n);
+ this[BUFFERLENGTH] -= n;
+ } else {
+ this[BUFFER][0] = c.subarray(n);
+ chunk = c.subarray(0, n);
+ this[BUFFERLENGTH] -= n;
+ }
+ }
+ this.emit("data", chunk);
+ if (!this[BUFFER].length && !this[EOF])
+ this.emit("drain");
+ return chunk;
+ }
+ end(chunk, encoding, cb) {
+ if (typeof chunk === "function") {
+ cb = chunk;
+ chunk = void 0;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = "utf8";
+ }
+ if (chunk !== void 0)
+ this.write(chunk, encoding);
+ if (cb)
+ this.once("end", cb);
+ this[EOF] = true;
+ this.writable = false;
+ if (this[FLOWING] || !this[PAUSED])
+ this[MAYBE_EMIT_END]();
+ return this;
+ }
+ // don't let the internal resume be overwritten
+ [RESUME]() {
+ if (this[DESTROYED])
+ return;
+ if (!this[DATALISTENERS] && !this[PIPES].length) {
+ this[DISCARDED] = true;
+ }
+ this[PAUSED] = false;
+ this[FLOWING] = true;
+ this.emit("resume");
+ if (this[BUFFER].length)
+ this[FLUSH]();
+ else if (this[EOF])
+ this[MAYBE_EMIT_END]();
+ else
+ this.emit("drain");
+ }
+ /**
+ * Resume the stream if it is currently in a paused state
+ *
+ * If called when there are no pipe destinations or `data` event listeners,
+ * this will place the stream in a "discarded" state, where all data will
+ * be thrown away. The discarded state is removed if a pipe destination or
+ * data handler is added, if pause() is called, or if any synchronous or
+ * asynchronous iteration is started.
+ */
+ resume() {
+ return this[RESUME]();
+ }
+ /**
+ * Pause the stream
+ */
+ pause() {
+ this[FLOWING] = false;
+ this[PAUSED] = true;
+ this[DISCARDED] = false;
+ }
+ /**
+ * true if the stream has been forcibly destroyed
+ */
+ get destroyed() {
+ return this[DESTROYED];
+ }
+ /**
+ * true if the stream is currently in a flowing state, meaning that
+ * any writes will be immediately emitted.
+ */
+ get flowing() {
+ return this[FLOWING];
+ }
+ /**
+ * true if the stream is currently in a paused state
+ */
+ get paused() {
+ return this[PAUSED];
+ }
+ [BUFFERPUSH](chunk) {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] += 1;
+ else
+ this[BUFFERLENGTH] += chunk.length;
+ this[BUFFER].push(chunk);
+ }
+ [BUFFERSHIFT]() {
+ if (this[OBJECTMODE])
+ this[BUFFERLENGTH] -= 1;
+ else
+ this[BUFFERLENGTH] -= this[BUFFER][0].length;
+ return this[BUFFER].shift();
+ }
+ [FLUSH](noDrain = false) {
+ do {
+ } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length);
+ if (!noDrain && !this[BUFFER].length && !this[EOF])
+ this.emit("drain");
+ }
+ [FLUSHCHUNK](chunk) {
+ this.emit("data", chunk);
+ return this[FLOWING];
+ }
+ /**
+ * Pipe all data emitted by this stream into the destination provided.
+ *
+ * Triggers the flow of data.
+ */
+ pipe(dest, opts) {
+ if (this[DESTROYED])
+ return dest;
+ this[DISCARDED] = false;
+ const ended = this[EMITTED_END];
+ opts = opts || {};
+ if (dest === proc.stdout || dest === proc.stderr)
+ opts.end = false;
+ else
+ opts.end = opts.end !== false;
+ opts.proxyErrors = !!opts.proxyErrors;
+ if (ended) {
+ if (opts.end)
+ dest.end();
+ } else {
+ this[PIPES].push(!opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts));
+ if (this[ASYNC])
+ defer(() => this[RESUME]());
+ else
+ this[RESUME]();
+ }
+ return dest;
+ }
+ /**
+ * Fully unhook a piped destination stream.
+ *
+ * If the destination stream was the only consumer of this stream (ie,
+ * there are no other piped destinations or `'data'` event listeners)
+ * then the flow of data will stop until there is another consumer or
+ * {@link Minipass#resume} is explicitly called.
+ */
+ unpipe(dest) {
+ const p = this[PIPES].find((p2) => p2.dest === dest);
+ if (p) {
+ if (this[PIPES].length === 1) {
+ if (this[FLOWING] && this[DATALISTENERS] === 0) {
+ this[FLOWING] = false;
+ }
+ this[PIPES] = [];
+ } else
+ this[PIPES].splice(this[PIPES].indexOf(p), 1);
+ p.unpipe();
+ }
+ }
+ /**
+ * Alias for {@link Minipass#on}
+ */
+ addListener(ev, handler) {
+ return this.on(ev, handler);
+ }
+ /**
+ * Mostly identical to `EventEmitter.on`, with the following
+ * behavior differences to prevent data loss and unnecessary hangs:
+ *
+ * - Adding a 'data' event handler will trigger the flow of data
+ *
+ * - Adding a 'readable' event handler when there is data waiting to be read
+ * will cause 'readable' to be emitted immediately.
+ *
+ * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+ * already passed will cause the event to be emitted immediately and all
+ * handlers removed.
+ *
+ * - Adding an 'error' event handler after an error has been emitted will
+ * cause the event to be re-emitted immediately with the error previously
+ * raised.
+ */
+ on(ev, handler) {
+ const ret = super.on(ev, handler);
+ if (ev === "data") {
+ this[DISCARDED] = false;
+ this[DATALISTENERS]++;
+ if (!this[PIPES].length && !this[FLOWING]) {
+ this[RESUME]();
+ }
+ } else if (ev === "readable" && this[BUFFERLENGTH] !== 0) {
+ super.emit("readable");
+ } else if (isEndish(ev) && this[EMITTED_END]) {
+ super.emit(ev);
+ this.removeAllListeners(ev);
+ } else if (ev === "error" && this[EMITTED_ERROR]) {
+ const h = handler;
+ if (this[ASYNC])
+ defer(() => h.call(this, this[EMITTED_ERROR]));
+ else
+ h.call(this, this[EMITTED_ERROR]);
+ }
+ return ret;
+ }
+ /**
+ * Alias for {@link Minipass#off}
+ */
+ removeListener(ev, handler) {
+ return this.off(ev, handler);
+ }
+ /**
+ * Mostly identical to `EventEmitter.off`
+ *
+ * If a 'data' event handler is removed, and it was the last consumer
+ * (ie, there are no pipe destinations or other 'data' event listeners),
+ * then the flow of data will stop until there is another consumer or
+ * {@link Minipass#resume} is explicitly called.
+ */
+ off(ev, handler) {
+ const ret = super.off(ev, handler);
+ if (ev === "data") {
+ this[DATALISTENERS] = this.listeners("data").length;
+ if (this[DATALISTENERS] === 0 && !this[DISCARDED] && !this[PIPES].length) {
+ this[FLOWING] = false;
+ }
+ }
+ return ret;
+ }
+ /**
+ * Mostly identical to `EventEmitter.removeAllListeners`
+ *
+ * If all 'data' event handlers are removed, and they were the last consumer
+ * (ie, there are no pipe destinations), then the flow of data will stop
+ * until there is another consumer or {@link Minipass#resume} is explicitly
+ * called.
+ */
+ removeAllListeners(ev) {
+ const ret = super.removeAllListeners(ev);
+ if (ev === "data" || ev === void 0) {
+ this[DATALISTENERS] = 0;
+ if (!this[DISCARDED] && !this[PIPES].length) {
+ this[FLOWING] = false;
+ }
+ }
+ return ret;
+ }
+ /**
+ * true if the 'end' event has been emitted
+ */
+ get emittedEnd() {
+ return this[EMITTED_END];
+ }
+ [MAYBE_EMIT_END]() {
+ if (!this[EMITTING_END] && !this[EMITTED_END] && !this[DESTROYED] && this[BUFFER].length === 0 && this[EOF]) {
+ this[EMITTING_END] = true;
+ this.emit("end");
+ this.emit("prefinish");
+ this.emit("finish");
+ if (this[CLOSED])
+ this.emit("close");
+ this[EMITTING_END] = false;
+ }
+ }
+ /**
+ * Mostly identical to `EventEmitter.emit`, with the following
+ * behavior differences to prevent data loss and unnecessary hangs:
+ *
+ * If the stream has been destroyed, and the event is something other
+ * than 'close' or 'error', then `false` is returned and no handlers
+ * are called.
+ *
+ * If the event is 'end', and has already been emitted, then the event
+ * is ignored. If the stream is in a paused or non-flowing state, then
+ * the event will be deferred until data flow resumes. If the stream is
+ * async, then handlers will be called on the next tick rather than
+ * immediately.
+ *
+ * If the event is 'close', and 'end' has not yet been emitted, then
+ * the event will be deferred until after 'end' is emitted.
+ *
+ * If the event is 'error', and an AbortSignal was provided for the stream,
+ * and there are no listeners, then the event is ignored, matching the
+ * behavior of node core streams in the presense of an AbortSignal.
+ *
+ * If the event is 'finish' or 'prefinish', then all listeners will be
+ * removed after emitting the event, to prevent double-firing.
+ */
+ emit(ev, ...args) {
+ const data = args[0];
+ if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED]) {
+ return false;
+ } else if (ev === "data") {
+ return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? (defer(() => this[EMITDATA](data)), true) : this[EMITDATA](data);
+ } else if (ev === "end") {
+ return this[EMITEND]();
+ } else if (ev === "close") {
+ this[CLOSED] = true;
+ if (!this[EMITTED_END] && !this[DESTROYED])
+ return false;
+ const ret2 = super.emit("close");
+ this.removeAllListeners("close");
+ return ret2;
+ } else if (ev === "error") {
+ this[EMITTED_ERROR] = data;
+ super.emit(ERROR, data);
+ const ret2 = !this[SIGNAL] || this.listeners("error").length ? super.emit("error", data) : false;
+ this[MAYBE_EMIT_END]();
+ return ret2;
+ } else if (ev === "resume") {
+ const ret2 = super.emit("resume");
+ this[MAYBE_EMIT_END]();
+ return ret2;
+ } else if (ev === "finish" || ev === "prefinish") {
+ const ret2 = super.emit(ev);
+ this.removeAllListeners(ev);
+ return ret2;
+ }
+ const ret = super.emit(ev, ...args);
+ this[MAYBE_EMIT_END]();
+ return ret;
+ }
+ [EMITDATA](data) {
+ for (const p of this[PIPES]) {
+ if (p.dest.write(data) === false)
+ this.pause();
+ }
+ const ret = this[DISCARDED] ? false : super.emit("data", data);
+ this[MAYBE_EMIT_END]();
+ return ret;
+ }
+ [EMITEND]() {
+ if (this[EMITTED_END])
+ return false;
+ this[EMITTED_END] = true;
+ this.readable = false;
+ return this[ASYNC] ? (defer(() => this[EMITEND2]()), true) : this[EMITEND2]();
+ }
+ [EMITEND2]() {
+ if (this[DECODER]) {
+ const data = this[DECODER].end();
+ if (data) {
+ for (const p of this[PIPES]) {
+ p.dest.write(data);
+ }
+ if (!this[DISCARDED])
+ super.emit("data", data);
+ }
+ }
+ for (const p of this[PIPES]) {
+ p.end();
+ }
+ const ret = super.emit("end");
+ this.removeAllListeners("end");
+ return ret;
+ }
+ /**
+ * Return a Promise that resolves to an array of all emitted data once
+ * the stream ends.
+ */
+ async collect() {
+ const buf = Object.assign([], {
+ dataLength: 0
+ });
+ if (!this[OBJECTMODE])
+ buf.dataLength = 0;
+ const p = this.promise();
+ this.on("data", (c) => {
+ buf.push(c);
+ if (!this[OBJECTMODE])
+ buf.dataLength += c.length;
+ });
+ await p;
+ return buf;
+ }
+ /**
+ * Return a Promise that resolves to the concatenation of all emitted data
+ * once the stream ends.
+ *
+ * Not allowed on objectMode streams.
+ */
+ async concat() {
+ if (this[OBJECTMODE]) {
+ throw new Error("cannot concat in objectMode");
+ }
+ const buf = await this.collect();
+ return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
+ }
+ /**
+ * Return a void Promise that resolves once the stream ends.
+ */
+ async promise() {
+ return new Promise((resolve, reject) => {
+ this.on(DESTROYED, () => reject(new Error("stream destroyed")));
+ this.on("error", (er) => reject(er));
+ this.on("end", () => resolve());
+ });
+ }
+ /**
+ * Asynchronous `for await of` iteration.
+ *
+ * This will continue emitting all chunks until the stream terminates.
+ */
+ [Symbol.asyncIterator]() {
+ this[DISCARDED] = false;
+ let stopped = false;
+ const stop = async () => {
+ this.pause();
+ stopped = true;
+ return { value: void 0, done: true };
+ };
+ const next = () => {
+ if (stopped)
+ return stop();
+ const res = this.read();
+ if (res !== null)
+ return Promise.resolve({ done: false, value: res });
+ if (this[EOF])
+ return stop();
+ let resolve;
+ let reject;
+ const onerr = (er) => {
+ this.off("data", ondata);
+ this.off("end", onend);
+ this.off(DESTROYED, ondestroy);
+ stop();
+ reject(er);
+ };
+ const ondata = (value) => {
+ this.off("error", onerr);
+ this.off("end", onend);
+ this.off(DESTROYED, ondestroy);
+ this.pause();
+ resolve({ value, done: !!this[EOF] });
+ };
+ const onend = () => {
+ this.off("error", onerr);
+ this.off("data", ondata);
+ this.off(DESTROYED, ondestroy);
+ stop();
+ resolve({ done: true, value: void 0 });
+ };
+ const ondestroy = () => onerr(new Error("stream destroyed"));
+ return new Promise((res2, rej) => {
+ reject = rej;
+ resolve = res2;
+ this.once(DESTROYED, ondestroy);
+ this.once("error", onerr);
+ this.once("end", onend);
+ this.once("data", ondata);
+ });
+ };
+ return {
+ next,
+ throw: stop,
+ return: stop,
+ [Symbol.asyncIterator]() {
+ return this;
+ },
+ [Symbol.asyncDispose]: async () => {
+ }
+ };
+ }
+ /**
+ * Synchronous `for of` iteration.
+ *
+ * The iteration will terminate when the internal buffer runs out, even
+ * if the stream has not yet terminated.
+ */
+ [Symbol.iterator]() {
+ this[DISCARDED] = false;
+ let stopped = false;
+ const stop = () => {
+ this.pause();
+ this.off(ERROR, stop);
+ this.off(DESTROYED, stop);
+ this.off("end", stop);
+ stopped = true;
+ return { done: true, value: void 0 };
+ };
+ const next = () => {
+ if (stopped)
+ return stop();
+ const value = this.read();
+ return value === null ? stop() : { done: false, value };
+ };
+ this.once("end", stop);
+ this.once(ERROR, stop);
+ this.once(DESTROYED, stop);
+ return {
+ next,
+ throw: stop,
+ return: stop,
+ [Symbol.iterator]() {
+ return this;
+ },
+ [Symbol.dispose]: () => {
+ }
+ };
+ }
+ /**
+ * Destroy a stream, preventing it from being used for any further purpose.
+ *
+ * If the stream has a `close()` method, then it will be called on
+ * destruction.
+ *
+ * After destruction, any attempt to write data, read data, or emit most
+ * events will be ignored.
+ *
+ * If an error argument is provided, then it will be emitted in an
+ * 'error' event.
+ */
+ destroy(er) {
+ if (this[DESTROYED]) {
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ this[DESTROYED] = true;
+ this[DISCARDED] = true;
+ this[BUFFER].length = 0;
+ this[BUFFERLENGTH] = 0;
+ const wc = this;
+ if (typeof wc.close === "function" && !this[CLOSED])
+ wc.close();
+ if (er)
+ this.emit("error", er);
+ else
+ this.emit(DESTROYED);
+ return this;
+ }
+ /**
+ * Alias for {@link isStream}
+ *
+ * Former export location, maintained for backwards compatibility.
+ *
+ * @deprecated
+ */
+ static get isStream() {
+ return isStream;
+ }
+ };
+ }
+});
+
+// node_modules/@isaacs/fs-minipass/dist/esm/index.js
+var import_events2, import_fs2, writev, _autoClose, _close, _ended, _fd, _finished, _flags, _flush, _handleChunk, _makeBuf, _mode, _needDrain, _onerror, _onopen, _onread, _onwrite, _open, _path, _pos, _queue, _read, _readSize, _reading, _remain, _size, _write, _writing, _defaultFlag, _errored, ReadStream, ReadStreamSync, WriteStream, WriteStreamSync;
+var init_esm2 = __esm({
+ "node_modules/@isaacs/fs-minipass/dist/esm/index.js"() {
+ import_events2 = __toESM(require("events"), 1);
+ import_fs2 = __toESM(require("fs"), 1);
+ init_esm();
+ writev = import_fs2.default.writev;
+ _autoClose = /* @__PURE__ */ Symbol("_autoClose");
+ _close = /* @__PURE__ */ Symbol("_close");
+ _ended = /* @__PURE__ */ Symbol("_ended");
+ _fd = /* @__PURE__ */ Symbol("_fd");
+ _finished = /* @__PURE__ */ Symbol("_finished");
+ _flags = /* @__PURE__ */ Symbol("_flags");
+ _flush = /* @__PURE__ */ Symbol("_flush");
+ _handleChunk = /* @__PURE__ */ Symbol("_handleChunk");
+ _makeBuf = /* @__PURE__ */ Symbol("_makeBuf");
+ _mode = /* @__PURE__ */ Symbol("_mode");
+ _needDrain = /* @__PURE__ */ Symbol("_needDrain");
+ _onerror = /* @__PURE__ */ Symbol("_onerror");
+ _onopen = /* @__PURE__ */ Symbol("_onopen");
+ _onread = /* @__PURE__ */ Symbol("_onread");
+ _onwrite = /* @__PURE__ */ Symbol("_onwrite");
+ _open = /* @__PURE__ */ Symbol("_open");
+ _path = /* @__PURE__ */ Symbol("_path");
+ _pos = /* @__PURE__ */ Symbol("_pos");
+ _queue = /* @__PURE__ */ Symbol("_queue");
+ _read = /* @__PURE__ */ Symbol("_read");
+ _readSize = /* @__PURE__ */ Symbol("_readSize");
+ _reading = /* @__PURE__ */ Symbol("_reading");
+ _remain = /* @__PURE__ */ Symbol("_remain");
+ _size = /* @__PURE__ */ Symbol("_size");
+ _write = /* @__PURE__ */ Symbol("_write");
+ _writing = /* @__PURE__ */ Symbol("_writing");
+ _defaultFlag = /* @__PURE__ */ Symbol("_defaultFlag");
+ _errored = /* @__PURE__ */ Symbol("_errored");
+ ReadStream = class extends Minipass {
+ [_errored] = false;
+ [_fd];
+ [_path];
+ [_readSize];
+ [_reading] = false;
+ [_size];
+ [_remain];
+ [_autoClose];
+ constructor(path16, opt) {
+ opt = opt || {};
+ super(opt);
+ this.readable = true;
+ this.writable = false;
+ if (typeof path16 !== "string") {
+ throw new TypeError("path must be a string");
+ }
+ this[_errored] = false;
+ this[_fd] = typeof opt.fd === "number" ? opt.fd : void 0;
+ this[_path] = path16;
+ this[_readSize] = opt.readSize || 16 * 1024 * 1024;
+ this[_reading] = false;
+ this[_size] = typeof opt.size === "number" ? opt.size : Infinity;
+ this[_remain] = this[_size];
+ this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
+ if (typeof this[_fd] === "number") {
+ this[_read]();
+ } else {
+ this[_open]();
+ }
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ //@ts-ignore
+ write() {
+ throw new TypeError("this is a readable stream");
+ }
+ //@ts-ignore
+ end() {
+ throw new TypeError("this is a readable stream");
+ }
+ [_open]() {
+ import_fs2.default.open(this[_path], "r", (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (er) {
+ this[_onerror](er);
+ } else {
+ this[_fd] = fd;
+ this.emit("open", fd);
+ this[_read]();
+ }
+ }
+ [_makeBuf]() {
+ return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));
+ }
+ [_read]() {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ const buf = this[_makeBuf]();
+ if (buf.length === 0) {
+ return process.nextTick(() => this[_onread](null, 0, buf));
+ }
+ import_fs2.default.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));
+ }
+ }
+ [_onread](er, br, buf) {
+ this[_reading] = false;
+ if (er) {
+ this[_onerror](er);
+ } else if (this[_handleChunk](br, buf)) {
+ this[_read]();
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = void 0;
+ import_fs2.default.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
+ }
+ }
+ [_onerror](er) {
+ this[_reading] = true;
+ this[_close]();
+ this.emit("error", er);
+ }
+ [_handleChunk](br, buf) {
+ let ret = false;
+ this[_remain] -= br;
+ if (br > 0) {
+ ret = super.write(br < buf.length ? buf.subarray(0, br) : buf);
+ }
+ if (br === 0 || this[_remain] <= 0) {
+ ret = false;
+ this[_close]();
+ super.end();
+ }
+ return ret;
+ }
+ emit(ev, ...args) {
+ switch (ev) {
+ case "prefinish":
+ case "finish":
+ return false;
+ case "drain":
+ if (typeof this[_fd] === "number") {
+ this[_read]();
+ }
+ return false;
+ case "error":
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ return super.emit(ev, ...args);
+ default:
+ return super.emit(ev, ...args);
+ }
+ }
+ };
+ ReadStreamSync = class extends ReadStream {
+ [_open]() {
+ let threw = true;
+ try {
+ this[_onopen](null, import_fs2.default.openSync(this[_path], "r"));
+ threw = false;
+ } finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_read]() {
+ let threw = true;
+ try {
+ if (!this[_reading]) {
+ this[_reading] = true;
+ do {
+ const buf = this[_makeBuf]();
+ const br = buf.length === 0 ? 0 : import_fs2.default.readSync(this[_fd], buf, 0, buf.length, null);
+ if (!this[_handleChunk](br, buf)) {
+ break;
+ }
+ } while (true);
+ this[_reading] = false;
+ }
+ threw = false;
+ } finally {
+ if (threw) {
+ this[_close]();
+ }
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = void 0;
+ import_fs2.default.closeSync(fd);
+ this.emit("close");
+ }
+ }
+ };
+ WriteStream = class extends import_events2.default {
+ readable = false;
+ writable = true;
+ [_errored] = false;
+ [_writing] = false;
+ [_ended] = false;
+ [_queue] = [];
+ [_needDrain] = false;
+ [_path];
+ [_mode];
+ [_autoClose];
+ [_fd];
+ [_defaultFlag];
+ [_flags];
+ [_finished] = false;
+ [_pos];
+ constructor(path16, opt) {
+ opt = opt || {};
+ super(opt);
+ this[_path] = path16;
+ this[_fd] = typeof opt.fd === "number" ? opt.fd : void 0;
+ this[_mode] = opt.mode === void 0 ? 438 : opt.mode;
+ this[_pos] = typeof opt.start === "number" ? opt.start : void 0;
+ this[_autoClose] = typeof opt.autoClose === "boolean" ? opt.autoClose : true;
+ const defaultFlag = this[_pos] !== void 0 ? "r+" : "w";
+ this[_defaultFlag] = opt.flags === void 0;
+ this[_flags] = opt.flags === void 0 ? defaultFlag : opt.flags;
+ if (this[_fd] === void 0) {
+ this[_open]();
+ }
+ }
+ emit(ev, ...args) {
+ if (ev === "error") {
+ if (this[_errored]) {
+ return false;
+ }
+ this[_errored] = true;
+ }
+ return super.emit(ev, ...args);
+ }
+ get fd() {
+ return this[_fd];
+ }
+ get path() {
+ return this[_path];
+ }
+ [_onerror](er) {
+ this[_close]();
+ this[_writing] = true;
+ this.emit("error", er);
+ }
+ [_open]() {
+ import_fs2.default.open(this[_path], this[_flags], this[_mode], (er, fd) => this[_onopen](er, fd));
+ }
+ [_onopen](er, fd) {
+ if (this[_defaultFlag] && this[_flags] === "r+" && er && er.code === "ENOENT") {
+ this[_flags] = "w";
+ this[_open]();
+ } else if (er) {
+ this[_onerror](er);
+ } else {
+ this[_fd] = fd;
+ this.emit("open", fd);
+ if (!this[_writing]) {
+ this[_flush]();
+ }
+ }
+ }
+ end(buf, enc) {
+ if (buf) {
+ this.write(buf, enc);
+ }
+ this[_ended] = true;
+ if (!this[_writing] && !this[_queue].length && typeof this[_fd] === "number") {
+ this[_onwrite](null, 0);
+ }
+ return this;
+ }
+ write(buf, enc) {
+ if (typeof buf === "string") {
+ buf = Buffer.from(buf, enc);
+ }
+ if (this[_ended]) {
+ this.emit("error", new Error("write() after end()"));
+ return false;
+ }
+ if (this[_fd] === void 0 || this[_writing] || this[_queue].length) {
+ this[_queue].push(buf);
+ this[_needDrain] = true;
+ return false;
+ }
+ this[_writing] = true;
+ this[_write](buf);
+ return true;
+ }
+ [_write](buf) {
+ import_fs2.default.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ [_onwrite](er, bw) {
+ if (er) {
+ this[_onerror](er);
+ } else {
+ if (this[_pos] !== void 0 && typeof bw === "number") {
+ this[_pos] += bw;
+ }
+ if (this[_queue].length) {
+ this[_flush]();
+ } else {
+ this[_writing] = false;
+ if (this[_ended] && !this[_finished]) {
+ this[_finished] = true;
+ this[_close]();
+ this.emit("finish");
+ } else if (this[_needDrain]) {
+ this[_needDrain] = false;
+ this.emit("drain");
+ }
+ }
+ }
+ }
+ [_flush]() {
+ if (this[_queue].length === 0) {
+ if (this[_ended]) {
+ this[_onwrite](null, 0);
+ }
+ } else if (this[_queue].length === 1) {
+ this[_write](this[_queue].pop());
+ } else {
+ const iovec = this[_queue];
+ this[_queue] = [];
+ writev(this[_fd], iovec, this[_pos], (er, bw) => this[_onwrite](er, bw));
+ }
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = void 0;
+ import_fs2.default.close(fd, (er) => er ? this.emit("error", er) : this.emit("close"));
+ }
+ }
+ };
+ WriteStreamSync = class extends WriteStream {
+ [_open]() {
+ let fd;
+ if (this[_defaultFlag] && this[_flags] === "r+") {
+ try {
+ fd = import_fs2.default.openSync(this[_path], this[_flags], this[_mode]);
+ } catch (er) {
+ if (er?.code === "ENOENT") {
+ this[_flags] = "w";
+ return this[_open]();
+ } else {
+ throw er;
+ }
+ }
+ } else {
+ fd = import_fs2.default.openSync(this[_path], this[_flags], this[_mode]);
+ }
+ this[_onopen](null, fd);
+ }
+ [_close]() {
+ if (this[_autoClose] && typeof this[_fd] === "number") {
+ const fd = this[_fd];
+ this[_fd] = void 0;
+ import_fs2.default.closeSync(fd);
+ this.emit("close");
+ }
+ }
+ [_write](buf) {
+ let threw = true;
+ try {
+ this[_onwrite](null, import_fs2.default.writeSync(this[_fd], buf, 0, buf.length, this[_pos]));
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ this[_close]();
+ } catch {
+ }
+ }
+ }
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/options.js
+var argmap, isSyncFile, isAsyncFile, isSyncNoFile, isAsyncNoFile, dealiasKey, dealias;
+var init_options = __esm({
+ "node_modules/tar/dist/esm/options.js"() {
+ argmap = /* @__PURE__ */ new Map([
+ ["C", "cwd"],
+ ["f", "file"],
+ ["z", "gzip"],
+ ["P", "preservePaths"],
+ ["U", "unlink"],
+ ["strip-components", "strip"],
+ ["stripComponents", "strip"],
+ ["keep-newer", "newer"],
+ ["keepNewer", "newer"],
+ ["keep-newer-files", "newer"],
+ ["keepNewerFiles", "newer"],
+ ["k", "keep"],
+ ["keep-existing", "keep"],
+ ["keepExisting", "keep"],
+ ["m", "noMtime"],
+ ["no-mtime", "noMtime"],
+ ["p", "preserveOwner"],
+ ["L", "follow"],
+ ["h", "follow"],
+ ["onentry", "onReadEntry"]
+ ]);
+ isSyncFile = (o) => !!o.sync && !!o.file;
+ isAsyncFile = (o) => !o.sync && !!o.file;
+ isSyncNoFile = (o) => !!o.sync && !o.file;
+ isAsyncNoFile = (o) => !o.sync && !o.file;
+ dealiasKey = (k) => {
+ const d = argmap.get(k);
+ if (d)
+ return d;
+ return k;
+ };
+ dealias = (opt = {}) => {
+ if (!opt)
+ return {};
+ const result = {};
+ for (const [key, v] of Object.entries(opt)) {
+ const k = dealiasKey(key);
+ result[k] = v;
+ }
+ if (result.chmod === void 0 && result.noChmod === false) {
+ result.chmod = true;
+ }
+ delete result.noChmod;
+ return result;
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/make-command.js
+var makeCommand;
+var init_make_command = __esm({
+ "node_modules/tar/dist/esm/make-command.js"() {
+ init_options();
+ makeCommand = (syncFile, asyncFile, syncNoFile, asyncNoFile, validate) => {
+ return Object.assign((opt_ = [], entries, cb) => {
+ if (Array.isArray(opt_)) {
+ entries = opt_;
+ opt_ = {};
+ }
+ if (typeof entries === "function") {
+ cb = entries;
+ entries = void 0;
+ }
+ entries = !entries ? [] : Array.from(entries);
+ const opt = dealias(opt_);
+ validate?.(opt, entries);
+ if (isSyncFile(opt)) {
+ if (typeof cb === "function") {
+ throw new TypeError("callback not supported for sync tar functions");
+ }
+ return syncFile(opt, entries);
+ } else if (isAsyncFile(opt)) {
+ const p = asyncFile(opt, entries);
+ return cb ? p.then(() => cb(), cb) : p;
+ } else if (isSyncNoFile(opt)) {
+ if (typeof cb === "function") {
+ throw new TypeError("callback not supported for sync tar functions");
+ }
+ return syncNoFile(opt, entries);
+ } else if (isAsyncNoFile(opt)) {
+ if (typeof cb === "function") {
+ throw new TypeError("callback only supported with file option");
+ }
+ return asyncNoFile(opt, entries);
+ }
+ throw new Error("impossible options??");
+ }, {
+ syncFile,
+ asyncFile,
+ syncNoFile,
+ asyncNoFile,
+ validate
+ });
+ };
+ }
+});
+
+// node_modules/minizlib/dist/esm/constants.js
+var import_zlib, realZlibConstants, constants;
+var init_constants = __esm({
+ "node_modules/minizlib/dist/esm/constants.js"() {
+ import_zlib = __toESM(require("zlib"), 1);
+ realZlibConstants = import_zlib.default.constants || { ZLIB_VERNUM: 4736 };
+ constants = Object.freeze(Object.assign(/* @__PURE__ */ Object.create(null), {
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ Z_VERSION_ERROR: -6,
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+ DEFLATE: 1,
+ INFLATE: 2,
+ GZIP: 3,
+ GUNZIP: 4,
+ DEFLATERAW: 5,
+ INFLATERAW: 6,
+ UNZIP: 7,
+ BROTLI_DECODE: 8,
+ BROTLI_ENCODE: 9,
+ Z_MIN_WINDOWBITS: 8,
+ Z_MAX_WINDOWBITS: 15,
+ Z_DEFAULT_WINDOWBITS: 15,
+ Z_MIN_CHUNK: 64,
+ Z_MAX_CHUNK: Infinity,
+ Z_DEFAULT_CHUNK: 16384,
+ Z_MIN_MEMLEVEL: 1,
+ Z_MAX_MEMLEVEL: 9,
+ Z_DEFAULT_MEMLEVEL: 8,
+ Z_MIN_LEVEL: -1,
+ Z_MAX_LEVEL: 9,
+ Z_DEFAULT_LEVEL: -1,
+ BROTLI_OPERATION_PROCESS: 0,
+ BROTLI_OPERATION_FLUSH: 1,
+ BROTLI_OPERATION_FINISH: 2,
+ BROTLI_OPERATION_EMIT_METADATA: 3,
+ BROTLI_MODE_GENERIC: 0,
+ BROTLI_MODE_TEXT: 1,
+ BROTLI_MODE_FONT: 2,
+ BROTLI_DEFAULT_MODE: 0,
+ BROTLI_MIN_QUALITY: 0,
+ BROTLI_MAX_QUALITY: 11,
+ BROTLI_DEFAULT_QUALITY: 11,
+ BROTLI_MIN_WINDOW_BITS: 10,
+ BROTLI_MAX_WINDOW_BITS: 24,
+ BROTLI_LARGE_MAX_WINDOW_BITS: 30,
+ BROTLI_DEFAULT_WINDOW: 22,
+ BROTLI_MIN_INPUT_BLOCK_BITS: 16,
+ BROTLI_MAX_INPUT_BLOCK_BITS: 24,
+ BROTLI_PARAM_MODE: 0,
+ BROTLI_PARAM_QUALITY: 1,
+ BROTLI_PARAM_LGWIN: 2,
+ BROTLI_PARAM_LGBLOCK: 3,
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
+ BROTLI_PARAM_SIZE_HINT: 5,
+ BROTLI_PARAM_LARGE_WINDOW: 6,
+ BROTLI_PARAM_NPOSTFIX: 7,
+ BROTLI_PARAM_NDIRECT: 8,
+ BROTLI_DECODER_RESULT_ERROR: 0,
+ BROTLI_DECODER_RESULT_SUCCESS: 1,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
+ BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
+ BROTLI_DECODER_NO_ERROR: 0,
+ BROTLI_DECODER_SUCCESS: 1,
+ BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
+ BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
+ BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
+ BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
+ BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
+ BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
+ BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
+ BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
+ BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
+ BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
+ BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
+ BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
+ BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
+ BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
+ BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
+ BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
+ BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
+ BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
+ BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
+ BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
+ BROTLI_DECODER_ERROR_UNREACHABLE: -31
+ }, realZlibConstants));
+ }
+});
+
+// node_modules/minizlib/dist/esm/index.js
+var import_assert2, import_buffer, realZlib2, OriginalBufferConcat, desc, noop, passthroughBufferConcat, _superWrite, ZlibError, _flushFlag, ZlibBase, Zlib, Gzip, Unzip, Brotli, BrotliCompress, BrotliDecompress, Zstd, ZstdCompress, ZstdDecompress;
+var init_esm3 = __esm({
+ "node_modules/minizlib/dist/esm/index.js"() {
+ import_assert2 = __toESM(require("assert"), 1);
+ import_buffer = require("buffer");
+ init_esm();
+ realZlib2 = __toESM(require("zlib"), 1);
+ init_constants();
+ init_constants();
+ OriginalBufferConcat = import_buffer.Buffer.concat;
+ desc = Object.getOwnPropertyDescriptor(import_buffer.Buffer, "concat");
+ noop = (args) => args;
+ passthroughBufferConcat = desc?.writable === true || desc?.set !== void 0 ? (makeNoOp) => {
+ import_buffer.Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;
+ } : (_) => {
+ };
+ _superWrite = /* @__PURE__ */ Symbol("_superWrite");
+ ZlibError = class extends Error {
+ code;
+ errno;
+ constructor(err, origin) {
+ super("zlib: " + err.message, { cause: err });
+ this.code = err.code;
+ this.errno = err.errno;
+ if (!this.code)
+ this.code = "ZLIB_ERROR";
+ this.message = "zlib: " + err.message;
+ Error.captureStackTrace(this, origin ?? this.constructor);
+ }
+ get name() {
+ return "ZlibError";
+ }
+ };
+ _flushFlag = /* @__PURE__ */ Symbol("flushFlag");
+ ZlibBase = class extends Minipass {
+ #sawError = false;
+ #ended = false;
+ #flushFlag;
+ #finishFlushFlag;
+ #fullFlushFlag;
+ #handle;
+ #onError;
+ get sawError() {
+ return this.#sawError;
+ }
+ get handle() {
+ return this.#handle;
+ }
+ /* c8 ignore start */
+ get flushFlag() {
+ return this.#flushFlag;
+ }
+ /* c8 ignore stop */
+ constructor(opts, mode) {
+ if (!opts || typeof opts !== "object")
+ throw new TypeError("invalid options for ZlibBase constructor");
+ super(opts);
+ this.#flushFlag = opts.flush ?? 0;
+ this.#finishFlushFlag = opts.finishFlush ?? 0;
+ this.#fullFlushFlag = opts.fullFlushFlag ?? 0;
+ if (typeof realZlib2[mode] !== "function") {
+ throw new TypeError("Compression method not supported: " + mode);
+ }
+ try {
+ this.#handle = new realZlib2[mode](opts);
+ } catch (er) {
+ throw new ZlibError(er, this.constructor);
+ }
+ this.#onError = (err) => {
+ if (this.#sawError)
+ return;
+ this.#sawError = true;
+ this.close();
+ this.emit("error", err);
+ };
+ this.#handle?.on("error", (er) => this.#onError(new ZlibError(er)));
+ this.once("end", () => this.close);
+ }
+ close() {
+ if (this.#handle) {
+ this.#handle.close();
+ this.#handle = void 0;
+ this.emit("close");
+ }
+ }
+ reset() {
+ if (!this.#sawError) {
+ (0, import_assert2.default)(this.#handle, "zlib binding closed");
+ return this.#handle.reset?.();
+ }
+ }
+ flush(flushFlag) {
+ if (this.ended)
+ return;
+ if (typeof flushFlag !== "number")
+ flushFlag = this.#fullFlushFlag;
+ this.write(Object.assign(import_buffer.Buffer.alloc(0), { [_flushFlag]: flushFlag }));
+ }
+ end(chunk, encoding, cb) {
+ if (typeof chunk === "function") {
+ cb = chunk;
+ encoding = void 0;
+ chunk = void 0;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (chunk) {
+ if (encoding)
+ this.write(chunk, encoding);
+ else
+ this.write(chunk);
+ }
+ this.flush(this.#finishFlushFlag);
+ this.#ended = true;
+ return super.end(cb);
+ }
+ get ended() {
+ return this.#ended;
+ }
+ // overridden in the gzip classes to do portable writes
+ [_superWrite](data) {
+ return super.write(data);
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === "function")
+ cb = encoding, encoding = "utf8";
+ if (typeof chunk === "string")
+ chunk = import_buffer.Buffer.from(chunk, encoding);
+ if (this.#sawError)
+ return;
+ (0, import_assert2.default)(this.#handle, "zlib binding closed");
+ const nativeHandle = this.#handle._handle;
+ const originalNativeClose = nativeHandle.close;
+ nativeHandle.close = () => {
+ };
+ const originalClose = this.#handle.close;
+ this.#handle.close = () => {
+ };
+ passthroughBufferConcat(true);
+ let result = void 0;
+ try {
+ const flushFlag = typeof chunk[_flushFlag] === "number" ? chunk[_flushFlag] : this.#flushFlag;
+ result = this.#handle._processChunk(chunk, flushFlag);
+ passthroughBufferConcat(false);
+ } catch (err) {
+ passthroughBufferConcat(false);
+ this.#onError(new ZlibError(err, this.write));
+ } finally {
+ if (this.#handle) {
+ ;
+ this.#handle._handle = nativeHandle;
+ nativeHandle.close = originalNativeClose;
+ this.#handle.close = originalClose;
+ this.#handle.removeAllListeners("error");
+ }
+ }
+ if (this.#handle)
+ this.#handle.on("error", (er) => this.#onError(new ZlibError(er, this.write)));
+ let writeReturn;
+ if (result) {
+ if (Array.isArray(result) && result.length > 0) {
+ const r = result[0];
+ writeReturn = this[_superWrite](import_buffer.Buffer.from(r));
+ for (let i = 1; i < result.length; i++) {
+ writeReturn = this[_superWrite](result[i]);
+ }
+ } else {
+ writeReturn = this[_superWrite](import_buffer.Buffer.from(result));
+ }
+ }
+ if (cb)
+ cb();
+ return writeReturn;
+ }
+ };
+ Zlib = class extends ZlibBase {
+ #level;
+ #strategy;
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.Z_NO_FLUSH;
+ opts.finishFlush = opts.finishFlush || constants.Z_FINISH;
+ opts.fullFlushFlag = constants.Z_FULL_FLUSH;
+ super(opts, mode);
+ this.#level = opts.level;
+ this.#strategy = opts.strategy;
+ }
+ params(level, strategy) {
+ if (this.sawError)
+ return;
+ if (!this.handle)
+ throw new Error("cannot switch params when binding is closed");
+ if (!this.handle.params)
+ throw new Error("not supported in this implementation");
+ if (this.#level !== level || this.#strategy !== strategy) {
+ this.flush(constants.Z_SYNC_FLUSH);
+ (0, import_assert2.default)(this.handle, "zlib binding closed");
+ const origFlush = this.handle.flush;
+ this.handle.flush = (flushFlag, cb) => {
+ if (typeof flushFlag === "function") {
+ cb = flushFlag;
+ flushFlag = this.flushFlag;
+ }
+ this.flush(flushFlag);
+ cb?.();
+ };
+ try {
+ ;
+ this.handle.params(level, strategy);
+ } finally {
+ this.handle.flush = origFlush;
+ }
+ if (this.handle) {
+ this.#level = level;
+ this.#strategy = strategy;
+ }
+ }
+ }
+ };
+ Gzip = class extends Zlib {
+ #portable;
+ constructor(opts) {
+ super(opts, "Gzip");
+ this.#portable = opts && !!opts.portable;
+ }
+ [_superWrite](data) {
+ if (!this.#portable)
+ return super[_superWrite](data);
+ this.#portable = false;
+ data[9] = 255;
+ return super[_superWrite](data);
+ }
+ };
+ Unzip = class extends Zlib {
+ constructor(opts) {
+ super(opts, "Unzip");
+ }
+ };
+ Brotli = class extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;
+ opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH;
+ opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;
+ super(opts, mode);
+ }
+ };
+ BrotliCompress = class extends Brotli {
+ constructor(opts) {
+ super(opts, "BrotliCompress");
+ }
+ };
+ BrotliDecompress = class extends Brotli {
+ constructor(opts) {
+ super(opts, "BrotliDecompress");
+ }
+ };
+ Zstd = class extends ZlibBase {
+ constructor(opts, mode) {
+ opts = opts || {};
+ opts.flush = opts.flush || constants.ZSTD_e_continue;
+ opts.finishFlush = opts.finishFlush || constants.ZSTD_e_end;
+ opts.fullFlushFlag = constants.ZSTD_e_flush;
+ super(opts, mode);
+ }
+ };
+ ZstdCompress = class extends Zstd {
+ constructor(opts) {
+ super(opts, "ZstdCompress");
+ }
+ };
+ ZstdDecompress = class extends Zstd {
+ constructor(opts) {
+ super(opts, "ZstdDecompress");
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/large-numbers.js
+var encode, encodePositive, encodeNegative, parse, twos, pos, onesComp, twosComp;
+var init_large_numbers = __esm({
+ "node_modules/tar/dist/esm/large-numbers.js"() {
+ encode = (num, buf) => {
+ if (!Number.isSafeInteger(num)) {
+ throw Error("cannot encode number outside of javascript safe integer range");
+ } else if (num < 0) {
+ encodeNegative(num, buf);
+ } else {
+ encodePositive(num, buf);
+ }
+ return buf;
+ };
+ encodePositive = (num, buf) => {
+ buf[0] = 128;
+ for (var i = buf.length; i > 1; i--) {
+ buf[i - 1] = num & 255;
+ num = Math.floor(num / 256);
+ }
+ };
+ encodeNegative = (num, buf) => {
+ buf[0] = 255;
+ var flipped = false;
+ num = num * -1;
+ for (var i = buf.length; i > 1; i--) {
+ var byte = num & 255;
+ num = Math.floor(num / 256);
+ if (flipped) {
+ buf[i - 1] = onesComp(byte);
+ } else if (byte === 0) {
+ buf[i - 1] = 0;
+ } else {
+ flipped = true;
+ buf[i - 1] = twosComp(byte);
+ }
+ }
+ };
+ parse = (buf) => {
+ const pre = buf[0];
+ const value = pre === 128 ? pos(buf.subarray(1, buf.length)) : pre === 255 ? twos(buf) : null;
+ if (value === null) {
+ throw Error("invalid base256 encoding");
+ }
+ if (!Number.isSafeInteger(value)) {
+ throw Error("parsed number outside of javascript safe integer range");
+ }
+ return value;
+ };
+ twos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ var flipped = false;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ var f;
+ if (flipped) {
+ f = onesComp(byte);
+ } else if (byte === 0) {
+ f = byte;
+ } else {
+ flipped = true;
+ f = twosComp(byte);
+ }
+ if (f !== 0) {
+ sum -= f * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+ };
+ pos = (buf) => {
+ var len = buf.length;
+ var sum = 0;
+ for (var i = len - 1; i > -1; i--) {
+ var byte = Number(buf[i]);
+ if (byte !== 0) {
+ sum += byte * Math.pow(256, len - i - 1);
+ }
+ }
+ return sum;
+ };
+ onesComp = (byte) => (255 ^ byte) & 255;
+ twosComp = (byte) => (255 ^ byte) + 1 & 255;
+ }
+});
+
+// node_modules/tar/dist/esm/types.js
+var isCode, name, code;
+var init_types = __esm({
+ "node_modules/tar/dist/esm/types.js"() {
+ isCode = (c) => name.has(c);
+ name = /* @__PURE__ */ new Map([
+ ["0", "File"],
+ // same as File
+ ["", "OldFile"],
+ ["1", "Link"],
+ ["2", "SymbolicLink"],
+ // Devices and FIFOs aren't fully supported
+ // they are parsed, but skipped when unpacking
+ ["3", "CharacterDevice"],
+ ["4", "BlockDevice"],
+ ["5", "Directory"],
+ ["6", "FIFO"],
+ // same as File
+ ["7", "ContiguousFile"],
+ // pax headers
+ ["g", "GlobalExtendedHeader"],
+ ["x", "ExtendedHeader"],
+ // vendor-specific stuff
+ // skip
+ ["A", "SolarisACL"],
+ // like 5, but with data, which should be skipped
+ ["D", "GNUDumpDir"],
+ // metadata only, skip
+ ["I", "Inode"],
+ // data = link path of next file
+ ["K", "NextFileHasLongLinkpath"],
+ // data = path of next file
+ ["L", "NextFileHasLongPath"],
+ // skip
+ ["M", "ContinuationFile"],
+ // like L
+ ["N", "OldGnuLongPath"],
+ // skip
+ ["S", "SparseFile"],
+ // skip
+ ["V", "TapeVolumeHeader"],
+ // like x
+ ["X", "OldExtendedHeader"]
+ ]);
+ code = new Map(Array.from(name).map((kv) => [kv[1], kv[0]]));
+ }
+});
+
+// node_modules/tar/dist/esm/header.js
+var import_node_path, Header, splitPrefix, decString, decDate, numToDate, decNumber, nanUndef, decSmallNumber, MAXNUM, encNumber, encSmallNumber, octalString, padOctal, encDate, NULLS, encString;
+var init_header = __esm({
+ "node_modules/tar/dist/esm/header.js"() {
+ import_node_path = require("node:path");
+ init_large_numbers();
+ init_types();
+ Header = class {
+ cksumValid = false;
+ needPax = false;
+ nullBlock = false;
+ block;
+ path;
+ mode;
+ uid;
+ gid;
+ size;
+ cksum;
+ #type = "Unsupported";
+ linkpath;
+ uname;
+ gname;
+ devmaj = 0;
+ devmin = 0;
+ atime;
+ ctime;
+ mtime;
+ charset;
+ comment;
+ constructor(data, off = 0, ex, gex) {
+ if (Buffer.isBuffer(data)) {
+ this.decode(data, off || 0, ex, gex);
+ } else if (data) {
+ this.#slurp(data);
+ }
+ }
+ decode(buf, off, ex, gex) {
+ if (!off) {
+ off = 0;
+ }
+ if (!buf || !(buf.length >= off + 512)) {
+ throw new Error("need 512 bytes for header");
+ }
+ this.path = ex?.path ?? decString(buf, off, 100);
+ this.mode = ex?.mode ?? gex?.mode ?? decNumber(buf, off + 100, 8);
+ this.uid = ex?.uid ?? gex?.uid ?? decNumber(buf, off + 108, 8);
+ this.gid = ex?.gid ?? gex?.gid ?? decNumber(buf, off + 116, 8);
+ this.size = ex?.size ?? gex?.size ?? decNumber(buf, off + 124, 12);
+ this.mtime = ex?.mtime ?? gex?.mtime ?? decDate(buf, off + 136, 12);
+ this.cksum = decNumber(buf, off + 148, 12);
+ if (gex)
+ this.#slurp(gex, true);
+ if (ex)
+ this.#slurp(ex);
+ const t = decString(buf, off + 156, 1);
+ if (isCode(t)) {
+ this.#type = t || "0";
+ }
+ if (this.#type === "0" && this.path.slice(-1) === "/") {
+ this.#type = "5";
+ }
+ if (this.#type === "5") {
+ this.size = 0;
+ }
+ this.linkpath = decString(buf, off + 157, 100);
+ if (buf.subarray(off + 257, off + 265).toString() === "ustar\x0000") {
+ this.uname = ex?.uname ?? gex?.uname ?? decString(buf, off + 265, 32);
+ this.gname = ex?.gname ?? gex?.gname ?? decString(buf, off + 297, 32);
+ this.devmaj = ex?.devmaj ?? gex?.devmaj ?? decNumber(buf, off + 329, 8) ?? 0;
+ this.devmin = ex?.devmin ?? gex?.devmin ?? decNumber(buf, off + 337, 8) ?? 0;
+ if (buf[off + 475] !== 0) {
+ const prefix = decString(buf, off + 345, 155);
+ this.path = prefix + "/" + this.path;
+ } else {
+ const prefix = decString(buf, off + 345, 130);
+ if (prefix) {
+ this.path = prefix + "/" + this.path;
+ }
+ this.atime = ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12);
+ this.ctime = ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12);
+ }
+ }
+ let sum = 8 * 32;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksumValid = sum === this.cksum;
+ if (this.cksum === void 0 && sum === 8 * 32) {
+ this.nullBlock = true;
+ }
+ }
+ #slurp(ex, gex = false) {
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ return !(v === null || v === void 0 || k === "path" && gex || k === "linkpath" && gex || k === "global");
+ })));
+ }
+ encode(buf, off = 0) {
+ if (!buf) {
+ buf = this.block = Buffer.alloc(512);
+ }
+ if (this.#type === "Unsupported") {
+ this.#type = "0";
+ }
+ if (!(buf.length >= off + 512)) {
+ throw new Error("need 512 bytes for header");
+ }
+ const prefixSize = this.ctime || this.atime ? 130 : 155;
+ const split = splitPrefix(this.path || "", prefixSize);
+ const path16 = split[0];
+ const prefix = split[1];
+ this.needPax = !!split[2];
+ this.needPax = encString(buf, off, 100, path16) || this.needPax;
+ this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax;
+ this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax;
+ this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax;
+ this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax;
+ this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax;
+ buf[off + 156] = Number(this.#type.codePointAt(0));
+ this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax;
+ buf.write("ustar\x0000", off + 257, 8);
+ this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax;
+ this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax;
+ this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;
+ this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax;
+ this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax;
+ if (buf[off + 475] !== 0) {
+ this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax;
+ } else {
+ this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax;
+ this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax;
+ this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax;
+ }
+ let sum = 8 * 32;
+ for (let i = off; i < off + 148; i++) {
+ sum += buf[i];
+ }
+ for (let i = off + 156; i < off + 512; i++) {
+ sum += buf[i];
+ }
+ this.cksum = sum;
+ encNumber(buf, off + 148, 8, this.cksum);
+ this.cksumValid = true;
+ return this.needPax;
+ }
+ get type() {
+ return this.#type === "Unsupported" ? this.#type : name.get(this.#type);
+ }
+ get typeKey() {
+ return this.#type;
+ }
+ set type(type) {
+ const c = String(code.get(type));
+ if (isCode(c) || c === "Unsupported") {
+ this.#type = c;
+ } else if (isCode(type)) {
+ this.#type = type;
+ } else {
+ throw new TypeError("invalid entry type: " + type);
+ }
+ }
+ };
+ splitPrefix = (p, prefixSize) => {
+ const pathSize = 100;
+ let pp = p;
+ let prefix = "";
+ let ret = void 0;
+ const root = import_node_path.posix.parse(p).root || ".";
+ if (Buffer.byteLength(pp) < pathSize) {
+ ret = [pp, prefix, false];
+ } else {
+ prefix = import_node_path.posix.dirname(pp);
+ pp = import_node_path.posix.basename(pp);
+ do {
+ if (Buffer.byteLength(pp) <= pathSize && Buffer.byteLength(prefix) <= prefixSize) {
+ ret = [pp, prefix, false];
+ } else if (Buffer.byteLength(pp) > pathSize && Buffer.byteLength(prefix) <= prefixSize) {
+ ret = [pp.slice(0, pathSize - 1), prefix, true];
+ } else {
+ pp = import_node_path.posix.join(import_node_path.posix.basename(prefix), pp);
+ prefix = import_node_path.posix.dirname(prefix);
+ }
+ } while (prefix !== root && ret === void 0);
+ if (!ret) {
+ ret = [p.slice(0, pathSize - 1), "", true];
+ }
+ }
+ return ret;
+ };
+ decString = (buf, off, size) => buf.subarray(off, off + size).toString("utf8").replace(/\0.*/, "");
+ decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));
+ numToDate = (num) => num === void 0 ? void 0 : new Date(num * 1e3);
+ decNumber = (buf, off, size) => Number(buf[off]) & 128 ? parse(buf.subarray(off, off + size)) : decSmallNumber(buf, off, size);
+ nanUndef = (value) => isNaN(value) ? void 0 : value;
+ decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf.subarray(off, off + size).toString("utf8").replace(/\0.*$/, "").trim(), 8));
+ MAXNUM = {
+ 12: 8589934591,
+ 8: 2097151
+ };
+ encNumber = (buf, off, size, num) => num === void 0 ? false : num > MAXNUM[size] || num < 0 ? (encode(num, buf.subarray(off, off + size)), true) : (encSmallNumber(buf, off, size, num), false);
+ encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, "ascii");
+ octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);
+ padOctal = (str, size) => (str.length === size - 1 ? str : new Array(size - str.length - 1).join("0") + str + " ") + "\0";
+ encDate = (buf, off, size, date) => date === void 0 ? false : encNumber(buf, off, size, date.getTime() / 1e3);
+ NULLS = new Array(156).join("\0");
+ encString = (buf, off, size, str) => str === void 0 ? false : (buf.write(str + NULLS, off, size, "utf8"), str.length !== Buffer.byteLength(str) || str.length > size);
+ }
+});
+
+// node_modules/tar/dist/esm/pax.js
+var import_node_path2, Pax, merge, parseKV, parseKVLine;
+var init_pax = __esm({
+ "node_modules/tar/dist/esm/pax.js"() {
+ import_node_path2 = require("node:path");
+ init_header();
+ Pax = class _Pax {
+ atime;
+ mtime;
+ ctime;
+ charset;
+ comment;
+ gid;
+ uid;
+ gname;
+ uname;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ path;
+ size;
+ mode;
+ global;
+ constructor(obj, global2 = false) {
+ this.atime = obj.atime;
+ this.charset = obj.charset;
+ this.comment = obj.comment;
+ this.ctime = obj.ctime;
+ this.dev = obj.dev;
+ this.gid = obj.gid;
+ this.global = global2;
+ this.gname = obj.gname;
+ this.ino = obj.ino;
+ this.linkpath = obj.linkpath;
+ this.mtime = obj.mtime;
+ this.nlink = obj.nlink;
+ this.path = obj.path;
+ this.size = obj.size;
+ this.uid = obj.uid;
+ this.uname = obj.uname;
+ }
+ encode() {
+ const body = this.encodeBody();
+ if (body === "") {
+ return Buffer.allocUnsafe(0);
+ }
+ const bodyLen = Buffer.byteLength(body);
+ const bufLen = 512 * Math.ceil(1 + bodyLen / 512);
+ const buf = Buffer.allocUnsafe(bufLen);
+ for (let i = 0; i < 512; i++) {
+ buf[i] = 0;
+ }
+ new Header({
+ // XXX split the path
+ // then the path should be PaxHeader + basename, but less than 99,
+ // prepend with the dirname
+ /* c8 ignore start */
+ path: ("PaxHeader/" + (0, import_node_path2.basename)(this.path ?? "")).slice(0, 99),
+ /* c8 ignore stop */
+ mode: this.mode || 420,
+ uid: this.uid,
+ gid: this.gid,
+ size: bodyLen,
+ mtime: this.mtime,
+ type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader",
+ linkpath: "",
+ uname: this.uname || "",
+ gname: this.gname || "",
+ devmaj: 0,
+ devmin: 0,
+ atime: this.atime,
+ ctime: this.ctime
+ }).encode(buf);
+ buf.write(body, 512, bodyLen, "utf8");
+ for (let i = bodyLen + 512; i < buf.length; i++) {
+ buf[i] = 0;
+ }
+ return buf;
+ }
+ encodeBody() {
+ return this.encodeField("path") + this.encodeField("ctime") + this.encodeField("atime") + this.encodeField("dev") + this.encodeField("ino") + this.encodeField("nlink") + this.encodeField("charset") + this.encodeField("comment") + this.encodeField("gid") + this.encodeField("gname") + this.encodeField("linkpath") + this.encodeField("mtime") + this.encodeField("size") + this.encodeField("uid") + this.encodeField("uname");
+ }
+ encodeField(field) {
+ if (this[field] === void 0) {
+ return "";
+ }
+ const r = this[field];
+ const v = r instanceof Date ? r.getTime() / 1e3 : r;
+ const s = " " + (field === "dev" || field === "ino" || field === "nlink" ? "SCHILY." : "") + field + "=" + v + "\n";
+ const byteLen = Buffer.byteLength(s);
+ let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;
+ if (byteLen + digits >= Math.pow(10, digits)) {
+ digits += 1;
+ }
+ const len = digits + byteLen;
+ return len + s;
+ }
+ static parse(str, ex, g = false) {
+ return new _Pax(merge(parseKV(str), ex), g);
+ }
+ };
+ merge = (a, b) => b ? Object.assign({}, b, a) : a;
+ parseKV = (str) => str.replace(/\n$/, "").split("\n").reduce(parseKVLine, /* @__PURE__ */ Object.create(null));
+ parseKVLine = (set, line) => {
+ const n = parseInt(line, 10);
+ if (n !== Buffer.byteLength(line) + 1) {
+ return set;
+ }
+ line = line.slice((n + " ").length);
+ const kv = line.split("=");
+ const r = kv.shift();
+ if (!r) {
+ return set;
+ }
+ const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, "$1");
+ const v = kv.join("=");
+ set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ? new Date(Number(v) * 1e3) : /^[0-9]+$/.test(v) ? +v : v;
+ return set;
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/normalize-windows-path.js
+var platform, normalizeWindowsPath;
+var init_normalize_windows_path = __esm({
+ "node_modules/tar/dist/esm/normalize-windows-path.js"() {
+ platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+ normalizeWindowsPath = platform !== "win32" ? (p) => p : (p) => p && p.replaceAll(/\\/g, "/");
+ }
+});
+
+// node_modules/tar/dist/esm/read-entry.js
+var ReadEntry;
+var init_read_entry = __esm({
+ "node_modules/tar/dist/esm/read-entry.js"() {
+ init_esm();
+ init_normalize_windows_path();
+ ReadEntry = class extends Minipass {
+ extended;
+ globalExtended;
+ header;
+ startBlockSize;
+ blockRemain;
+ remain;
+ type;
+ meta = false;
+ ignore = false;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ size = 0;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ dev;
+ ino;
+ nlink;
+ invalid = false;
+ absolute;
+ unsupported = false;
+ constructor(header, ex, gex) {
+ super({});
+ this.pause();
+ this.extended = ex;
+ this.globalExtended = gex;
+ this.header = header;
+ this.remain = header.size ?? 0;
+ this.startBlockSize = 512 * Math.ceil(this.remain / 512);
+ this.blockRemain = this.startBlockSize;
+ this.type = header.type;
+ switch (this.type) {
+ case "File":
+ case "OldFile":
+ case "Link":
+ case "SymbolicLink":
+ case "CharacterDevice":
+ case "BlockDevice":
+ case "Directory":
+ case "FIFO":
+ case "ContiguousFile":
+ case "GNUDumpDir":
+ break;
+ case "NextFileHasLongLinkpath":
+ case "NextFileHasLongPath":
+ case "OldGnuLongPath":
+ case "GlobalExtendedHeader":
+ case "ExtendedHeader":
+ case "OldExtendedHeader":
+ this.meta = true;
+ break;
+ // NOTE: gnutar and bsdtar treat unrecognized types as 'File'
+ // it may be worth doing the same, but with a warning.
+ default:
+ this.ignore = true;
+ }
+ if (!header.path) {
+ throw new Error("no path provided for tar.ReadEntry");
+ }
+ this.path = normalizeWindowsPath(header.path);
+ this.mode = header.mode;
+ if (this.mode) {
+ this.mode = this.mode & 4095;
+ }
+ this.uid = header.uid;
+ this.gid = header.gid;
+ this.uname = header.uname;
+ this.gname = header.gname;
+ this.size = this.remain;
+ this.mtime = header.mtime;
+ this.atime = header.atime;
+ this.ctime = header.ctime;
+ this.linkpath = header.linkpath ? normalizeWindowsPath(header.linkpath) : void 0;
+ this.uname = header.uname;
+ this.gname = header.gname;
+ if (ex) {
+ this.#slurp(ex);
+ }
+ if (gex) {
+ this.#slurp(gex, true);
+ }
+ }
+ write(data) {
+ const writeLen = data.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error("writing more to entry than is appropriate");
+ }
+ const r = this.remain;
+ const br = this.blockRemain;
+ this.remain = Math.max(0, r - writeLen);
+ this.blockRemain = Math.max(0, br - writeLen);
+ if (this.ignore) {
+ return true;
+ }
+ if (r >= writeLen) {
+ return super.write(data);
+ }
+ return super.write(data.subarray(0, r));
+ }
+ #slurp(ex, gex = false) {
+ if (ex.path)
+ ex.path = normalizeWindowsPath(ex.path);
+ if (ex.linkpath)
+ ex.linkpath = normalizeWindowsPath(ex.linkpath);
+ Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {
+ return !(v === null || v === void 0 || k === "path" && gex);
+ })));
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/warn-method.js
+var warnMethod;
+var init_warn_method = __esm({
+ "node_modules/tar/dist/esm/warn-method.js"() {
+ warnMethod = (self2, code2, message, data = {}) => {
+ if (self2.file) {
+ data.file = self2.file;
+ }
+ if (self2.cwd) {
+ data.cwd = self2.cwd;
+ }
+ data.code = message instanceof Error && message.code || code2;
+ data.tarCode = code2;
+ if (!self2.strict && data.recoverable !== false) {
+ if (message instanceof Error) {
+ data = Object.assign(message, data);
+ message = message.message;
+ }
+ self2.emit("warn", code2, message, data);
+ } else if (message instanceof Error) {
+ self2.emit("error", Object.assign(message, data));
+ } else {
+ self2.emit("error", Object.assign(new Error(`${code2}: ${message}`), data));
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/parse.js
+var import_events3, maxMetaEntrySize, gzipHeader, zstdHeader, ZIP_HEADER_LEN, STATE, WRITEENTRY, READENTRY, NEXTENTRY, PROCESSENTRY, EX, GEX, META, EMITMETA, BUFFER2, QUEUE, ENDED, EMITTEDEND, EMIT, UNZIP, CONSUMECHUNK, CONSUMECHUNKSUB, CONSUMEBODY, CONSUMEMETA, CONSUMEHEADER, CONSUMING, BUFFERCONCAT, MAYBEEND, WRITING, ABORTED2, DONE, SAW_VALID_ENTRY, SAW_NULL_BLOCK, SAW_EOF, CLOSESTREAM, noop2, Parser;
+var init_parse = __esm({
+ "node_modules/tar/dist/esm/parse.js"() {
+ import_events3 = require("events");
+ init_esm3();
+ init_header();
+ init_pax();
+ init_read_entry();
+ init_warn_method();
+ maxMetaEntrySize = 1024 * 1024;
+ gzipHeader = Buffer.from([31, 139]);
+ zstdHeader = Buffer.from([40, 181, 47, 253]);
+ ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length);
+ STATE = /* @__PURE__ */ Symbol("state");
+ WRITEENTRY = /* @__PURE__ */ Symbol("writeEntry");
+ READENTRY = /* @__PURE__ */ Symbol("readEntry");
+ NEXTENTRY = /* @__PURE__ */ Symbol("nextEntry");
+ PROCESSENTRY = /* @__PURE__ */ Symbol("processEntry");
+ EX = /* @__PURE__ */ Symbol("extendedHeader");
+ GEX = /* @__PURE__ */ Symbol("globalExtendedHeader");
+ META = /* @__PURE__ */ Symbol("meta");
+ EMITMETA = /* @__PURE__ */ Symbol("emitMeta");
+ BUFFER2 = /* @__PURE__ */ Symbol("buffer");
+ QUEUE = /* @__PURE__ */ Symbol("queue");
+ ENDED = /* @__PURE__ */ Symbol("ended");
+ EMITTEDEND = /* @__PURE__ */ Symbol("emittedEnd");
+ EMIT = /* @__PURE__ */ Symbol("emit");
+ UNZIP = /* @__PURE__ */ Symbol("unzip");
+ CONSUMECHUNK = /* @__PURE__ */ Symbol("consumeChunk");
+ CONSUMECHUNKSUB = /* @__PURE__ */ Symbol("consumeChunkSub");
+ CONSUMEBODY = /* @__PURE__ */ Symbol("consumeBody");
+ CONSUMEMETA = /* @__PURE__ */ Symbol("consumeMeta");
+ CONSUMEHEADER = /* @__PURE__ */ Symbol("consumeHeader");
+ CONSUMING = /* @__PURE__ */ Symbol("consuming");
+ BUFFERCONCAT = /* @__PURE__ */ Symbol("bufferConcat");
+ MAYBEEND = /* @__PURE__ */ Symbol("maybeEnd");
+ WRITING = /* @__PURE__ */ Symbol("writing");
+ ABORTED2 = /* @__PURE__ */ Symbol("aborted");
+ DONE = /* @__PURE__ */ Symbol("onDone");
+ SAW_VALID_ENTRY = /* @__PURE__ */ Symbol("sawValidEntry");
+ SAW_NULL_BLOCK = /* @__PURE__ */ Symbol("sawNullBlock");
+ SAW_EOF = /* @__PURE__ */ Symbol("sawEOF");
+ CLOSESTREAM = /* @__PURE__ */ Symbol("closeStream");
+ noop2 = () => true;
+ Parser = class extends import_events3.EventEmitter {
+ file;
+ strict;
+ maxMetaEntrySize;
+ filter;
+ brotli;
+ zstd;
+ writable = true;
+ readable = false;
+ [QUEUE] = [];
+ [BUFFER2];
+ [READENTRY];
+ [WRITEENTRY];
+ [STATE] = "begin";
+ [META] = "";
+ [EX];
+ [GEX];
+ [ENDED] = false;
+ [UNZIP];
+ [ABORTED2] = false;
+ [SAW_VALID_ENTRY];
+ [SAW_NULL_BLOCK] = false;
+ [SAW_EOF] = false;
+ [WRITING] = false;
+ [CONSUMING] = false;
+ [EMITTEDEND] = false;
+ constructor(opt = {}) {
+ super();
+ this.file = opt.file || "";
+ this.on(DONE, () => {
+ if (this[STATE] === "begin" || this[SAW_VALID_ENTRY] === false) {
+ this.warn("TAR_BAD_ARCHIVE", "Unrecognized archive format");
+ }
+ });
+ if (opt.ondone) {
+ this.on(DONE, opt.ondone);
+ } else {
+ this.on(DONE, () => {
+ this.emit("prefinish");
+ this.emit("finish");
+ this.emit("end");
+ });
+ }
+ this.strict = !!opt.strict;
+ this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize;
+ this.filter = typeof opt.filter === "function" ? opt.filter : noop2;
+ const isTBR = opt.file && (opt.file.endsWith(".tar.br") || opt.file.endsWith(".tbr"));
+ this.brotli = !(opt.gzip || opt.zstd) && opt.brotli !== void 0 ? opt.brotli : isTBR ? void 0 : false;
+ const isTZST = opt.file && (opt.file.endsWith(".tar.zst") || opt.file.endsWith(".tzst"));
+ this.zstd = !(opt.gzip || opt.brotli) && opt.zstd !== void 0 ? opt.zstd : isTZST ? true : void 0;
+ this.on("end", () => this[CLOSESTREAM]());
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ if (typeof opt.onReadEntry === "function") {
+ this.on("entry", opt.onReadEntry);
+ }
+ }
+ warn(code2, message, data = {}) {
+ warnMethod(this, code2, message, data);
+ }
+ [CONSUMEHEADER](chunk, position) {
+ if (this[SAW_VALID_ENTRY] === void 0) {
+ this[SAW_VALID_ENTRY] = false;
+ }
+ let header;
+ try {
+ header = new Header(chunk, position, this[EX], this[GEX]);
+ } catch (er) {
+ return this.warn("TAR_ENTRY_INVALID", er);
+ }
+ if (header.nullBlock) {
+ if (this[SAW_NULL_BLOCK]) {
+ this[SAW_EOF] = true;
+ if (this[STATE] === "begin") {
+ this[STATE] = "header";
+ }
+ this[EMIT]("eof");
+ } else {
+ this[SAW_NULL_BLOCK] = true;
+ this[EMIT]("nullBlock");
+ }
+ } else {
+ this[SAW_NULL_BLOCK] = false;
+ if (!header.cksumValid) {
+ this.warn("TAR_ENTRY_INVALID", "checksum failure", { header });
+ } else if (!header.path) {
+ this.warn("TAR_ENTRY_INVALID", "path is required", { header });
+ } else {
+ const type = header.type;
+ if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {
+ this.warn("TAR_ENTRY_INVALID", "linkpath required", {
+ header
+ });
+ } else if (!/^(Symbolic)?Link$/.test(type) && !/^(Global)?ExtendedHeader$/.test(type) && header.linkpath) {
+ this.warn("TAR_ENTRY_INVALID", "linkpath forbidden", {
+ header
+ });
+ } else {
+ const entry = this[WRITEENTRY] = new ReadEntry(header, this[EX], this[GEX]);
+ if (!this[SAW_VALID_ENTRY]) {
+ if (entry.remain) {
+ const onend = () => {
+ if (!entry.invalid) {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ };
+ entry.on("end", onend);
+ } else {
+ this[SAW_VALID_ENTRY] = true;
+ }
+ }
+ if (entry.meta) {
+ if (entry.size > this.maxMetaEntrySize) {
+ entry.ignore = true;
+ this[EMIT]("ignoredEntry", entry);
+ this[STATE] = "ignore";
+ entry.resume();
+ } else if (entry.size > 0) {
+ this[META] = "";
+ entry.on("data", (c) => this[META] += c);
+ this[STATE] = "meta";
+ }
+ } else {
+ this[EX] = void 0;
+ entry.ignore = entry.ignore || !this.filter(entry.path, entry);
+ if (entry.ignore) {
+ this[EMIT]("ignoredEntry", entry);
+ this[STATE] = entry.remain ? "ignore" : "header";
+ entry.resume();
+ } else {
+ if (entry.remain) {
+ this[STATE] = "body";
+ } else {
+ this[STATE] = "header";
+ entry.end();
+ }
+ if (!this[READENTRY]) {
+ this[QUEUE].push(entry);
+ this[NEXTENTRY]();
+ } else {
+ this[QUEUE].push(entry);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ [CLOSESTREAM]() {
+ queueMicrotask(() => this.emit("close"));
+ }
+ [PROCESSENTRY](entry) {
+ let go = true;
+ if (!entry) {
+ this[READENTRY] = void 0;
+ go = false;
+ } else if (Array.isArray(entry)) {
+ const [ev, ...args] = entry;
+ this.emit(ev, ...args);
+ } else {
+ this[READENTRY] = entry;
+ this.emit("entry", entry);
+ if (!entry.emittedEnd) {
+ entry.on("end", () => this[NEXTENTRY]());
+ go = false;
+ }
+ }
+ return go;
+ }
+ [NEXTENTRY]() {
+ do {
+ } while (this[PROCESSENTRY](this[QUEUE].shift()));
+ if (this[QUEUE].length === 0) {
+ const re = this[READENTRY];
+ const drainNow = !re || re.flowing || re.size === re.remain;
+ if (drainNow) {
+ if (!this[WRITING]) {
+ this.emit("drain");
+ }
+ } else {
+ re.once("drain", () => this.emit("drain"));
+ }
+ }
+ }
+ [CONSUMEBODY](chunk, position) {
+ const entry = this[WRITEENTRY];
+ if (!entry) {
+ throw new Error("attempt to consume body without entry??");
+ }
+ const br = entry.blockRemain ?? 0;
+ const c = br >= chunk.length && position === 0 ? chunk : chunk.subarray(position, position + br);
+ entry.write(c);
+ if (!entry.blockRemain) {
+ this[STATE] = "header";
+ this[WRITEENTRY] = void 0;
+ entry.end();
+ }
+ return c.length;
+ }
+ [CONSUMEMETA](chunk, position) {
+ const entry = this[WRITEENTRY];
+ const ret = this[CONSUMEBODY](chunk, position);
+ if (!this[WRITEENTRY] && entry) {
+ this[EMITMETA](entry);
+ }
+ return ret;
+ }
+ [EMIT](ev, data, extra) {
+ if (this[QUEUE].length === 0 && !this[READENTRY]) {
+ this.emit(ev, data, extra);
+ } else {
+ this[QUEUE].push([ev, data, extra]);
+ }
+ }
+ [EMITMETA](entry) {
+ this[EMIT]("meta", this[META]);
+ switch (entry.type) {
+ case "ExtendedHeader":
+ case "OldExtendedHeader":
+ this[EX] = Pax.parse(this[META], this[EX], false);
+ break;
+ case "GlobalExtendedHeader":
+ this[GEX] = Pax.parse(this[META], this[GEX], true);
+ break;
+ case "NextFileHasLongPath":
+ case "OldGnuLongPath": {
+ const ex = this[EX] ?? /* @__PURE__ */ Object.create(null);
+ this[EX] = ex;
+ ex.path = this[META].replace(/\0.*/, "");
+ break;
+ }
+ case "NextFileHasLongLinkpath": {
+ const ex = this[EX] || /* @__PURE__ */ Object.create(null);
+ this[EX] = ex;
+ ex.linkpath = this[META].replace(/\0.*/, "");
+ break;
+ }
+ /* c8 ignore start */
+ default:
+ throw new Error("unknown meta: " + entry.type);
+ }
+ }
+ abort(error) {
+ this[ABORTED2] = true;
+ this.emit("abort", error);
+ this.warn("TAR_ABORT", error, { recoverable: false });
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(
+ chunk,
+ /* c8 ignore next */
+ typeof encoding === "string" ? encoding : "utf8"
+ );
+ }
+ if (this[ABORTED2]) {
+ cb?.();
+ return false;
+ }
+ const needSniff = this[UNZIP] === void 0 || this.brotli === void 0 && this[UNZIP] === false;
+ if (needSniff && chunk) {
+ if (this[BUFFER2]) {
+ chunk = Buffer.concat([this[BUFFER2], chunk]);
+ this[BUFFER2] = void 0;
+ }
+ if (chunk.length < ZIP_HEADER_LEN) {
+ this[BUFFER2] = chunk;
+ cb?.();
+ return true;
+ }
+ for (let i = 0; this[UNZIP] === void 0 && i < gzipHeader.length; i++) {
+ if (chunk[i] !== gzipHeader[i]) {
+ this[UNZIP] = false;
+ }
+ }
+ let isZstd = false;
+ if (this[UNZIP] === false && this.zstd !== false) {
+ isZstd = true;
+ for (let i = 0; i < zstdHeader.length; i++) {
+ if (chunk[i] !== zstdHeader[i]) {
+ isZstd = false;
+ break;
+ }
+ }
+ }
+ const maybeBrotli = this.brotli === void 0 && !isZstd;
+ if (this[UNZIP] === false && maybeBrotli) {
+ if (chunk.length < 512) {
+ if (this[ENDED]) {
+ this.brotli = true;
+ } else {
+ this[BUFFER2] = chunk;
+ cb?.();
+ return true;
+ }
+ } else {
+ try {
+ new Header(chunk.subarray(0, 512));
+ this.brotli = false;
+ } catch (_) {
+ this.brotli = true;
+ }
+ }
+ }
+ if (this[UNZIP] === void 0 || this[UNZIP] === false && (this.brotli || isZstd)) {
+ const ended = this[ENDED];
+ this[ENDED] = false;
+ this[UNZIP] = this[UNZIP] === void 0 ? new Unzip({}) : isZstd ? new ZstdDecompress({}) : new BrotliDecompress({});
+ this[UNZIP].on("data", (chunk2) => this[CONSUMECHUNK](chunk2));
+ this[UNZIP].on("error", (er) => this.abort(er));
+ this[UNZIP].on("end", () => {
+ this[ENDED] = true;
+ this[CONSUMECHUNK]();
+ });
+ this[WRITING] = true;
+ const ret2 = !!this[UNZIP][ended ? "end" : "write"](chunk);
+ this[WRITING] = false;
+ cb?.();
+ return ret2;
+ }
+ }
+ this[WRITING] = true;
+ if (this[UNZIP]) {
+ this[UNZIP].write(chunk);
+ } else {
+ this[CONSUMECHUNK](chunk);
+ }
+ this[WRITING] = false;
+ const ret = this[QUEUE].length > 0 ? false : this[READENTRY] ? this[READENTRY].flowing : true;
+ if (!ret && this[QUEUE].length === 0) {
+ this[READENTRY]?.once("drain", () => this.emit("drain"));
+ }
+ cb?.();
+ return ret;
+ }
+ [BUFFERCONCAT](c) {
+ if (c && !this[ABORTED2]) {
+ this[BUFFER2] = this[BUFFER2] ? Buffer.concat([this[BUFFER2], c]) : c;
+ }
+ }
+ [MAYBEEND]() {
+ if (this[ENDED] && !this[EMITTEDEND] && !this[ABORTED2] && !this[CONSUMING]) {
+ this[EMITTEDEND] = true;
+ const entry = this[WRITEENTRY];
+ if (entry && entry.blockRemain) {
+ const have = this[BUFFER2] ? this[BUFFER2].length : 0;
+ this.warn("TAR_BAD_ARCHIVE", `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });
+ if (this[BUFFER2]) {
+ entry.write(this[BUFFER2]);
+ }
+ entry.end();
+ }
+ this[EMIT](DONE);
+ }
+ }
+ [CONSUMECHUNK](chunk) {
+ if (this[CONSUMING] && chunk) {
+ this[BUFFERCONCAT](chunk);
+ } else if (!chunk && !this[BUFFER2]) {
+ this[MAYBEEND]();
+ } else if (chunk) {
+ this[CONSUMING] = true;
+ if (this[BUFFER2]) {
+ this[BUFFERCONCAT](chunk);
+ const c = this[BUFFER2];
+ this[BUFFER2] = void 0;
+ this[CONSUMECHUNKSUB](c);
+ } else {
+ this[CONSUMECHUNKSUB](chunk);
+ }
+ while (this[BUFFER2] && this[BUFFER2]?.length >= 512 && !this[ABORTED2] && !this[SAW_EOF]) {
+ const c = this[BUFFER2];
+ this[BUFFER2] = void 0;
+ this[CONSUMECHUNKSUB](c);
+ }
+ this[CONSUMING] = false;
+ }
+ if (!this[BUFFER2] || this[ENDED]) {
+ this[MAYBEEND]();
+ }
+ }
+ [CONSUMECHUNKSUB](chunk) {
+ let position = 0;
+ const length = chunk.length;
+ while (position + 512 <= length && !this[ABORTED2] && !this[SAW_EOF]) {
+ switch (this[STATE]) {
+ case "begin":
+ case "header":
+ this[CONSUMEHEADER](chunk, position);
+ position += 512;
+ break;
+ case "ignore":
+ case "body":
+ position += this[CONSUMEBODY](chunk, position);
+ break;
+ case "meta":
+ position += this[CONSUMEMETA](chunk, position);
+ break;
+ /* c8 ignore start */
+ default:
+ throw new Error("invalid state: " + this[STATE]);
+ }
+ }
+ if (position < length) {
+ this[BUFFER2] = this[BUFFER2] ? Buffer.concat([chunk.subarray(position), this[BUFFER2]]) : chunk.subarray(position);
+ }
+ }
+ end(chunk, encoding, cb) {
+ if (typeof chunk === "function") {
+ cb = chunk;
+ encoding = void 0;
+ chunk = void 0;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ if (cb)
+ this.once("finish", cb);
+ if (!this[ABORTED2]) {
+ if (this[UNZIP]) {
+ if (chunk)
+ this[UNZIP].write(chunk);
+ this[UNZIP].end();
+ } else {
+ this[ENDED] = true;
+ if (this.brotli === void 0 || this.zstd === void 0)
+ chunk = chunk || Buffer.alloc(0);
+ if (chunk)
+ this.write(chunk);
+ this[MAYBEEND]();
+ }
+ }
+ return this;
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/strip-trailing-slashes.js
+var stripTrailingSlashes;
+var init_strip_trailing_slashes = __esm({
+ "node_modules/tar/dist/esm/strip-trailing-slashes.js"() {
+ stripTrailingSlashes = (str) => {
+ let i = str.length - 1;
+ let slashesStart = -1;
+ while (i > -1 && str.charAt(i) === "/") {
+ slashesStart = i;
+ i--;
+ }
+ return slashesStart === -1 ? str : str.slice(0, slashesStart);
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/list.js
+var list_exports = {};
+__export(list_exports, {
+ filesFilter: () => filesFilter,
+ list: () => list
+});
+var import_node_fs, import_path2, onReadEntryFunction, filesFilter, listFileSync, listFile, list;
+var init_list = __esm({
+ "node_modules/tar/dist/esm/list.js"() {
+ init_esm2();
+ import_node_fs = __toESM(require("node:fs"), 1);
+ import_path2 = require("path");
+ init_make_command();
+ init_parse();
+ init_strip_trailing_slashes();
+ onReadEntryFunction = (opt) => {
+ const onReadEntry = opt.onReadEntry;
+ opt.onReadEntry = onReadEntry ? (e) => {
+ onReadEntry(e);
+ e.resume();
+ } : (e) => e.resume();
+ };
+ filesFilter = (opt, files) => {
+ const map = new Map(files.map((f) => [stripTrailingSlashes(f), true]));
+ const filter = opt.filter;
+ const mapHas = (file, r = "") => {
+ const root = r || (0, import_path2.parse)(file).root || ".";
+ let ret;
+ if (file === root)
+ ret = false;
+ else {
+ const m = map.get(file);
+ ret = m !== void 0 ? m : mapHas((0, import_path2.dirname)(file), root);
+ }
+ map.set(file, ret);
+ return ret;
+ };
+ opt.filter = filter ? (file, entry) => filter(file, entry) && mapHas(stripTrailingSlashes(file)) : (file) => mapHas(stripTrailingSlashes(file));
+ };
+ listFileSync = (opt) => {
+ const p = new Parser(opt);
+ const file = opt.file;
+ let fd;
+ try {
+ fd = import_node_fs.default.openSync(file, "r");
+ const stat = import_node_fs.default.fstatSync(fd);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ if (stat.size < readSize) {
+ const buf = Buffer.allocUnsafe(stat.size);
+ const read = import_node_fs.default.readSync(fd, buf, 0, stat.size, 0);
+ p.end(read === buf.byteLength ? buf : buf.subarray(0, read));
+ } else {
+ let pos2 = 0;
+ const buf = Buffer.allocUnsafe(readSize);
+ while (pos2 < stat.size) {
+ const bytesRead = import_node_fs.default.readSync(fd, buf, 0, readSize, pos2);
+ if (bytesRead === 0)
+ break;
+ pos2 += bytesRead;
+ p.write(buf.subarray(0, bytesRead));
+ }
+ p.end();
+ }
+ } finally {
+ if (typeof fd === "number") {
+ try {
+ import_node_fs.default.closeSync(fd);
+ } catch {
+ }
+ }
+ }
+ };
+ listFile = (opt, _files) => {
+ const parse4 = new Parser(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ parse4.on("error", reject);
+ parse4.on("end", resolve);
+ import_node_fs.default.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ } else {
+ const stream = new ReadStream(file, {
+ readSize,
+ size: stat.size
+ });
+ stream.on("error", reject);
+ stream.pipe(parse4);
+ }
+ });
+ });
+ return p;
+ };
+ list = makeCommand(listFileSync, listFile, (opt) => new Parser(opt), (opt) => new Parser(opt), (opt, files) => {
+ if (files?.length)
+ filesFilter(opt, files);
+ if (!opt.noResume)
+ onReadEntryFunction(opt);
+ });
+ }
+});
+
+// node_modules/tar/dist/esm/get-write-flag.js
+var import_fs3, platform2, isWindows, O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP, fMapEnabled, fMapLimit, fMapFlag, noFollowFlag, getWriteFlag;
+var init_get_write_flag = __esm({
+ "node_modules/tar/dist/esm/get-write-flag.js"() {
+ import_fs3 = __toESM(require("fs"), 1);
+ platform2 = process.env.__FAKE_PLATFORM__ || process.platform;
+ isWindows = platform2 === "win32";
+ ({ O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY } = import_fs3.default.constants);
+ UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) || import_fs3.default.constants.UV_FS_O_FILEMAP || 0;
+ fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;
+ fMapLimit = 512 * 1024;
+ fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;
+ noFollowFlag = !isWindows && typeof O_NOFOLLOW === "number" ? O_NOFOLLOW | O_TRUNC | O_CREAT | O_WRONLY : null;
+ getWriteFlag = noFollowFlag !== null ? () => noFollowFlag : !fMapEnabled ? () => "w" : (size) => size < fMapLimit ? fMapFlag : "w";
+ }
+});
+
+// node_modules/chownr/dist/esm/index.js
+var import_node_fs2, import_node_path3, lchownSync, chown, chownrKid, chownr, chownrKidSync, chownrSync;
+var init_esm4 = __esm({
+ "node_modules/chownr/dist/esm/index.js"() {
+ import_node_fs2 = __toESM(require("node:fs"), 1);
+ import_node_path3 = __toESM(require("node:path"), 1);
+ lchownSync = (path16, uid, gid) => {
+ try {
+ return import_node_fs2.default.lchownSync(path16, uid, gid);
+ } catch (er) {
+ if (er?.code !== "ENOENT")
+ throw er;
+ }
+ };
+ chown = (cpath, uid, gid, cb) => {
+ import_node_fs2.default.lchown(cpath, uid, gid, (er) => {
+ cb(er && er?.code !== "ENOENT" ? er : null);
+ });
+ };
+ chownrKid = (p, child, uid, gid, cb) => {
+ if (child.isDirectory()) {
+ chownr(import_node_path3.default.resolve(p, child.name), uid, gid, (er) => {
+ if (er)
+ return cb(er);
+ const cpath = import_node_path3.default.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ });
+ } else {
+ const cpath = import_node_path3.default.resolve(p, child.name);
+ chown(cpath, uid, gid, cb);
+ }
+ };
+ chownr = (p, uid, gid, cb) => {
+ import_node_fs2.default.readdir(p, { withFileTypes: true }, (er, children) => {
+ if (er) {
+ if (er.code === "ENOENT")
+ return cb();
+ else if (er.code !== "ENOTDIR" && er.code !== "ENOTSUP")
+ return cb(er);
+ }
+ if (er || !children.length)
+ return chown(p, uid, gid, cb);
+ let len = children.length;
+ let errState = null;
+ const then = (er2) => {
+ if (errState)
+ return;
+ if (er2)
+ return cb(errState = er2);
+ if (--len === 0)
+ return chown(p, uid, gid, cb);
+ };
+ for (const child of children) {
+ chownrKid(p, child, uid, gid, then);
+ }
+ });
+ };
+ chownrKidSync = (p, child, uid, gid) => {
+ if (child.isDirectory())
+ chownrSync(import_node_path3.default.resolve(p, child.name), uid, gid);
+ lchownSync(import_node_path3.default.resolve(p, child.name), uid, gid);
+ };
+ chownrSync = (p, uid, gid) => {
+ let children;
+ try {
+ children = import_node_fs2.default.readdirSync(p, { withFileTypes: true });
+ } catch (er) {
+ const e = er;
+ if (e?.code === "ENOENT")
+ return;
+ else if (e?.code === "ENOTDIR" || e?.code === "ENOTSUP")
+ return lchownSync(p, uid, gid);
+ else
+ throw e;
+ }
+ for (const child of children) {
+ chownrKidSync(p, child, uid, gid);
+ }
+ return lchownSync(p, uid, gid);
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/cwd-error.js
+var CwdError;
+var init_cwd_error = __esm({
+ "node_modules/tar/dist/esm/cwd-error.js"() {
+ CwdError = class extends Error {
+ path;
+ code;
+ syscall = "chdir";
+ constructor(path16, code2) {
+ super(`${code2}: Cannot cd into '${path16}'`);
+ this.path = path16;
+ this.code = code2;
+ }
+ get name() {
+ return "CwdError";
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/symlink-error.js
+var SymlinkError;
+var init_symlink_error = __esm({
+ "node_modules/tar/dist/esm/symlink-error.js"() {
+ SymlinkError = class extends Error {
+ path;
+ symlink;
+ syscall = "symlink";
+ code = "TAR_SYMLINK_ERROR";
+ constructor(symlink, path16) {
+ super("TAR_SYMLINK_ERROR: Cannot extract through symbolic link");
+ this.symlink = symlink;
+ this.path = path16;
+ }
+ get name() {
+ return "SymlinkError";
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/mkdir.js
+var import_node_fs3, import_promises, import_node_path4, checkCwd, mkdir, mkdir_, onmkdir, checkCwdSync, mkdirSync2;
+var init_mkdir = __esm({
+ "node_modules/tar/dist/esm/mkdir.js"() {
+ init_esm4();
+ import_node_fs3 = __toESM(require("node:fs"), 1);
+ import_promises = __toESM(require("node:fs/promises"), 1);
+ import_node_path4 = __toESM(require("node:path"), 1);
+ init_cwd_error();
+ init_normalize_windows_path();
+ init_symlink_error();
+ checkCwd = (dir, cb) => {
+ import_node_fs3.default.stat(dir, (er, st) => {
+ if (er || !st.isDirectory()) {
+ er = new CwdError(dir, er?.code || "ENOTDIR");
+ }
+ cb(er);
+ });
+ };
+ mkdir = (dir, opt, cb) => {
+ dir = normalizeWindowsPath(dir);
+ const umask2 = opt.umask ?? 18;
+ const mode = opt.mode | 448;
+ const needChmod = (mode & umask2) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === "number" && typeof gid === "number" && (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cwd = normalizeWindowsPath(opt.cwd);
+ const done = (er, created) => {
+ if (er) {
+ cb(er);
+ } else {
+ if (created && doChown) {
+ chownr(created, uid, gid, (er2) => done(er2));
+ } else if (needChmod) {
+ import_node_fs3.default.chmod(dir, mode, cb);
+ } else {
+ cb();
+ }
+ }
+ };
+ if (dir === cwd) {
+ return checkCwd(dir, done);
+ }
+ if (preserve) {
+ return import_promises.default.mkdir(dir, { mode, recursive: true }).then(
+ (made) => done(null, made ?? void 0),
+ // oh, ts
+ done
+ );
+ }
+ const sub = normalizeWindowsPath(import_node_path4.default.relative(cwd, dir));
+ const parts = sub.split("/");
+ mkdir_(cwd, parts, mode, unlink, cwd, void 0, done);
+ };
+ mkdir_ = (base, parts, mode, unlink, cwd, created, cb) => {
+ if (parts.length === 0) {
+ return cb(null, created);
+ }
+ const p = parts.shift();
+ const part = normalizeWindowsPath(import_node_path4.default.resolve(base + "/" + p));
+ import_node_fs3.default.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));
+ };
+ onmkdir = (part, parts, mode, unlink, cwd, created, cb) => (er) => {
+ if (er) {
+ import_node_fs3.default.lstat(part, (statEr, st) => {
+ if (statEr) {
+ statEr.path = statEr.path && normalizeWindowsPath(statEr.path);
+ cb(statEr);
+ } else if (st.isDirectory()) {
+ mkdir_(part, parts, mode, unlink, cwd, created, cb);
+ } else if (unlink) {
+ import_node_fs3.default.unlink(part, (er2) => {
+ if (er2) {
+ return cb(er2);
+ }
+ import_node_fs3.default.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));
+ });
+ } else if (st.isSymbolicLink()) {
+ return cb(new SymlinkError(part, part + "/" + parts.join("/")));
+ } else {
+ cb(er);
+ }
+ });
+ } else {
+ created = created || part;
+ mkdir_(part, parts, mode, unlink, cwd, created, cb);
+ }
+ };
+ checkCwdSync = (dir) => {
+ let ok = false;
+ let code2;
+ try {
+ ok = import_node_fs3.default.statSync(dir).isDirectory();
+ } catch (er) {
+ code2 = er?.code;
+ } finally {
+ if (!ok) {
+ throw new CwdError(dir, code2 ?? "ENOTDIR");
+ }
+ }
+ };
+ mkdirSync2 = (dir, opt) => {
+ dir = normalizeWindowsPath(dir);
+ const umask2 = opt.umask ?? 18;
+ const mode = opt.mode | 448;
+ const needChmod = (mode & umask2) !== 0;
+ const uid = opt.uid;
+ const gid = opt.gid;
+ const doChown = typeof uid === "number" && typeof gid === "number" && (uid !== opt.processUid || gid !== opt.processGid);
+ const preserve = opt.preserve;
+ const unlink = opt.unlink;
+ const cwd = normalizeWindowsPath(opt.cwd);
+ const done = (created2) => {
+ if (created2 && doChown) {
+ chownrSync(created2, uid, gid);
+ }
+ if (needChmod) {
+ import_node_fs3.default.chmodSync(dir, mode);
+ }
+ };
+ if (dir === cwd) {
+ checkCwdSync(cwd);
+ return done();
+ }
+ if (preserve) {
+ return done(import_node_fs3.default.mkdirSync(dir, { mode, recursive: true }) ?? void 0);
+ }
+ const sub = normalizeWindowsPath(import_node_path4.default.relative(cwd, dir));
+ const parts = sub.split("/");
+ let created;
+ for (let p = parts.shift(), part = cwd; p && (part += "/" + p); p = parts.shift()) {
+ part = normalizeWindowsPath(import_node_path4.default.resolve(part));
+ try {
+ import_node_fs3.default.mkdirSync(part, mode);
+ created = created || part;
+ } catch {
+ const st = import_node_fs3.default.lstatSync(part);
+ if (st.isDirectory()) {
+ continue;
+ } else if (unlink) {
+ import_node_fs3.default.unlinkSync(part);
+ import_node_fs3.default.mkdirSync(part, mode);
+ created = created || part;
+ continue;
+ } else if (st.isSymbolicLink()) {
+ return new SymlinkError(part, part + "/" + parts.join("/"));
+ }
+ }
+ }
+ return done(created);
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/strip-absolute-path.js
+var import_node_path5, isAbsolute, parse3, stripAbsolutePath;
+var init_strip_absolute_path = __esm({
+ "node_modules/tar/dist/esm/strip-absolute-path.js"() {
+ import_node_path5 = require("node:path");
+ ({ isAbsolute, parse: parse3 } = import_node_path5.win32);
+ stripAbsolutePath = (path16) => {
+ let r = "";
+ let parsed = parse3(path16);
+ while (isAbsolute(path16) || parsed.root) {
+ const root = path16.charAt(0) === "/" && path16.slice(0, 4) !== "//?/" ? "/" : parsed.root;
+ path16 = path16.slice(root.length);
+ r += root;
+ parsed = parse3(path16);
+ }
+ return [r, path16];
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/winchars.js
+var raw, win, toWin, toRaw, encode2, decode;
+var init_winchars = __esm({
+ "node_modules/tar/dist/esm/winchars.js"() {
+ raw = ["|", "<", ">", "?", ":"];
+ win = raw.map((char) => String.fromCodePoint(61440 + Number(char.codePointAt(0))));
+ toWin = new Map(raw.map((char, i) => [char, win[i]]));
+ toRaw = new Map(win.map((char, i) => [char, raw[i]]));
+ encode2 = (s) => raw.reduce((s2, c) => s2.split(c).join(toWin.get(c)), s);
+ decode = (s) => win.reduce((s2, c) => s2.split(c).join(toRaw.get(c)), s);
+ }
+});
+
+// node_modules/tar/dist/esm/normalize-unicode.js
+var normalizeCache, MAX, cache, normalizeUnicode;
+var init_normalize_unicode = __esm({
+ "node_modules/tar/dist/esm/normalize-unicode.js"() {
+ normalizeCache = /* @__PURE__ */ Object.create(null);
+ MAX = 1e4;
+ cache = /* @__PURE__ */ new Set();
+ normalizeUnicode = (s) => {
+ if (!cache.has(s)) {
+ normalizeCache[s] = s.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en");
+ } else {
+ cache.delete(s);
+ }
+ cache.add(s);
+ const ret = normalizeCache[s];
+ let i = cache.size - MAX;
+ if (i > MAX / 10) {
+ for (const s2 of cache) {
+ cache.delete(s2);
+ delete normalizeCache[s2];
+ if (--i <= 0)
+ break;
+ }
+ }
+ return ret;
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/path-reservations.js
+var import_node_path6, platform3, isWindows2, getDirs, PathReservations;
+var init_path_reservations = __esm({
+ "node_modules/tar/dist/esm/path-reservations.js"() {
+ import_node_path6 = require("node:path");
+ init_normalize_unicode();
+ init_strip_trailing_slashes();
+ platform3 = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+ isWindows2 = platform3 === "win32";
+ getDirs = (path16) => {
+ const dirs = path16.split("/").slice(0, -1).reduce((set, path17) => {
+ const s = set.at(-1);
+ if (s !== void 0) {
+ path17 = (0, import_node_path6.join)(s, path17);
+ }
+ set.push(path17 || "/");
+ return set;
+ }, []);
+ return dirs;
+ };
+ PathReservations = class {
+ // path => [function or Set]
+ // A Set object means a directory reservation
+ // A fn is a direct reservation on that path
+ #queues = /* @__PURE__ */ new Map();
+ // fn => {paths:[path,...], dirs:[path, ...]}
+ #reservations = /* @__PURE__ */ new Map();
+ // functions currently running
+ #running = /* @__PURE__ */ new Set();
+ reserve(paths, fn2) {
+ paths = isWindows2 ? ["win32 parallelization disabled"] : paths.map((p) => {
+ return stripTrailingSlashes((0, import_node_path6.join)(normalizeUnicode(p)));
+ });
+ const dirs = new Set(paths.map((path16) => getDirs(path16)).reduce((a, b) => a.concat(b)));
+ this.#reservations.set(fn2, { dirs, paths });
+ for (const p of paths) {
+ const q = this.#queues.get(p);
+ if (!q) {
+ this.#queues.set(p, [fn2]);
+ } else {
+ q.push(fn2);
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ if (!q) {
+ this.#queues.set(dir, [/* @__PURE__ */ new Set([fn2])]);
+ } else {
+ const l = q.at(-1);
+ if (l instanceof Set) {
+ l.add(fn2);
+ } else {
+ q.push(/* @__PURE__ */ new Set([fn2]));
+ }
+ }
+ }
+ return this.#run(fn2);
+ }
+ // return the queues for each path the function cares about
+ // fn => {paths, dirs}
+ #getQueues(fn2) {
+ const res = this.#reservations.get(fn2);
+ if (!res) {
+ throw new Error("function does not have any path reservations");
+ }
+ return {
+ paths: res.paths.map((path16) => this.#queues.get(path16)),
+ dirs: [...res.dirs].map((path16) => this.#queues.get(path16))
+ };
+ }
+ // check if fn is first in line for all its paths, and is
+ // included in the first set for all its dir queues
+ check(fn2) {
+ const { paths, dirs } = this.#getQueues(fn2);
+ return paths.every((q) => q && q[0] === fn2) && dirs.every((q) => q && q[0] instanceof Set && q[0].has(fn2));
+ }
+ // run the function if it's first in line and not already running
+ #run(fn2) {
+ if (this.#running.has(fn2) || !this.check(fn2)) {
+ return false;
+ }
+ this.#running.add(fn2);
+ fn2(() => this.#clear(fn2));
+ return true;
+ }
+ #clear(fn2) {
+ if (!this.#running.has(fn2)) {
+ return false;
+ }
+ const res = this.#reservations.get(fn2);
+ if (!res) {
+ throw new Error("invalid reservation");
+ }
+ const { paths, dirs } = res;
+ const next = /* @__PURE__ */ new Set();
+ for (const path16 of paths) {
+ const q = this.#queues.get(path16);
+ if (!q || q?.[0] !== fn2) {
+ continue;
+ }
+ const q0 = q[1];
+ if (!q0) {
+ this.#queues.delete(path16);
+ continue;
+ }
+ q.shift();
+ if (typeof q0 === "function") {
+ next.add(q0);
+ } else {
+ for (const f of q0) {
+ next.add(f);
+ }
+ }
+ }
+ for (const dir of dirs) {
+ const q = this.#queues.get(dir);
+ const q0 = q?.[0];
+ if (!q || !(q0 instanceof Set))
+ continue;
+ if (q0.size === 1 && q.length === 1) {
+ this.#queues.delete(dir);
+ continue;
+ } else if (q0.size === 1) {
+ q.shift();
+ const n = q[0];
+ if (typeof n === "function") {
+ next.add(n);
+ }
+ } else {
+ q0.delete(fn2);
+ }
+ }
+ this.#running.delete(fn2);
+ next.forEach((fn3) => this.#run(fn3));
+ return true;
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/process-umask.js
+var umask;
+var init_process_umask = __esm({
+ "node_modules/tar/dist/esm/process-umask.js"() {
+ umask = () => process.umask();
+ }
+});
+
+// node_modules/tar/dist/esm/unpack.js
+var import_node_assert, import_node_crypto, import_node_fs4, import_node_path7, ONENTRY, CHECKFS, CHECKFS2, ISREUSABLE, MAKEFS, FILE, DIRECTORY, LINK, SYMLINK, HARDLINK, ENSURE_NO_SYMLINK, UNSUPPORTED, CHECKPATH, STRIPABSOLUTEPATH, MKDIR, ONERROR, PENDING, PEND, UNPEND, ENDED2, MAYBECLOSE, SKIP, DOCHOWN, UID, GID, CHECKED_CWD, platform4, isWindows3, DEFAULT_MAX_DEPTH, unlinkFile, unlinkFileSync, uint32, Unpack, callSync, UnpackSync;
+var init_unpack = __esm({
+ "node_modules/tar/dist/esm/unpack.js"() {
+ init_esm2();
+ import_node_assert = __toESM(require("node:assert"), 1);
+ import_node_crypto = require("node:crypto");
+ import_node_fs4 = __toESM(require("node:fs"), 1);
+ import_node_path7 = __toESM(require("node:path"), 1);
+ init_get_write_flag();
+ init_mkdir();
+ init_normalize_windows_path();
+ init_parse();
+ init_strip_absolute_path();
+ init_winchars();
+ init_path_reservations();
+ init_symlink_error();
+ init_process_umask();
+ ONENTRY = /* @__PURE__ */ Symbol("onEntry");
+ CHECKFS = /* @__PURE__ */ Symbol("checkFs");
+ CHECKFS2 = /* @__PURE__ */ Symbol("checkFs2");
+ ISREUSABLE = /* @__PURE__ */ Symbol("isReusable");
+ MAKEFS = /* @__PURE__ */ Symbol("makeFs");
+ FILE = /* @__PURE__ */ Symbol("file");
+ DIRECTORY = /* @__PURE__ */ Symbol("directory");
+ LINK = /* @__PURE__ */ Symbol("link");
+ SYMLINK = /* @__PURE__ */ Symbol("symlink");
+ HARDLINK = /* @__PURE__ */ Symbol("hardlink");
+ ENSURE_NO_SYMLINK = /* @__PURE__ */ Symbol("ensureNoSymlink");
+ UNSUPPORTED = /* @__PURE__ */ Symbol("unsupported");
+ CHECKPATH = /* @__PURE__ */ Symbol("checkPath");
+ STRIPABSOLUTEPATH = /* @__PURE__ */ Symbol("stripAbsolutePath");
+ MKDIR = /* @__PURE__ */ Symbol("mkdir");
+ ONERROR = /* @__PURE__ */ Symbol("onError");
+ PENDING = /* @__PURE__ */ Symbol("pending");
+ PEND = /* @__PURE__ */ Symbol("pend");
+ UNPEND = /* @__PURE__ */ Symbol("unpend");
+ ENDED2 = /* @__PURE__ */ Symbol("ended");
+ MAYBECLOSE = /* @__PURE__ */ Symbol("maybeClose");
+ SKIP = /* @__PURE__ */ Symbol("skip");
+ DOCHOWN = /* @__PURE__ */ Symbol("doChown");
+ UID = /* @__PURE__ */ Symbol("uid");
+ GID = /* @__PURE__ */ Symbol("gid");
+ CHECKED_CWD = /* @__PURE__ */ Symbol("checkedCwd");
+ platform4 = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;
+ isWindows3 = platform4 === "win32";
+ DEFAULT_MAX_DEPTH = 1024;
+ unlinkFile = (path16, cb) => {
+ if (!isWindows3) {
+ return import_node_fs4.default.unlink(path16, cb);
+ }
+ const name2 = path16 + ".DELETE." + (0, import_node_crypto.randomBytes)(16).toString("hex");
+ import_node_fs4.default.rename(path16, name2, (er) => {
+ if (er) {
+ return cb(er);
+ }
+ import_node_fs4.default.unlink(name2, cb);
+ });
+ };
+ unlinkFileSync = (path16) => {
+ if (!isWindows3) {
+ return import_node_fs4.default.unlinkSync(path16);
+ }
+ const name2 = path16 + ".DELETE." + (0, import_node_crypto.randomBytes)(16).toString("hex");
+ import_node_fs4.default.renameSync(path16, name2);
+ import_node_fs4.default.unlinkSync(name2);
+ };
+ uint32 = (a, b, c) => a !== void 0 && a === a >>> 0 ? a : b !== void 0 && b === b >>> 0 ? b : c;
+ Unpack = class extends Parser {
+ [ENDED2] = false;
+ [CHECKED_CWD] = false;
+ [PENDING] = 0;
+ reservations = new PathReservations();
+ transform;
+ writable = true;
+ readable = false;
+ uid;
+ gid;
+ setOwner;
+ preserveOwner;
+ processGid;
+ processUid;
+ maxDepth;
+ forceChown;
+ win32;
+ newer;
+ keep;
+ noMtime;
+ preservePaths;
+ unlink;
+ cwd;
+ strip;
+ processUmask;
+ umask;
+ dmode;
+ fmode;
+ chmod;
+ constructor(opt = {}) {
+ opt.ondone = () => {
+ this[ENDED2] = true;
+ this[MAYBECLOSE]();
+ };
+ super(opt);
+ this.transform = opt.transform;
+ this.chmod = !!opt.chmod;
+ if (typeof opt.uid === "number" || typeof opt.gid === "number") {
+ if (typeof opt.uid !== "number" || typeof opt.gid !== "number") {
+ throw new TypeError("cannot set owner without number uid and gid");
+ }
+ if (opt.preserveOwner) {
+ throw new TypeError("cannot preserve owner in archive and also set owner explicitly");
+ }
+ this.uid = opt.uid;
+ this.gid = opt.gid;
+ this.setOwner = true;
+ } else {
+ this.uid = void 0;
+ this.gid = void 0;
+ this.setOwner = false;
+ }
+ this.preserveOwner = opt.preserveOwner === void 0 && typeof opt.uid !== "number" ? !!(process.getuid && process.getuid() === 0) : !!opt.preserveOwner;
+ this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? process.getuid() : void 0;
+ this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? process.getgid() : void 0;
+ this.maxDepth = typeof opt.maxDepth === "number" ? opt.maxDepth : DEFAULT_MAX_DEPTH;
+ this.forceChown = opt.forceChown === true;
+ this.win32 = !!opt.win32 || isWindows3;
+ this.newer = !!opt.newer;
+ this.keep = !!opt.keep;
+ this.noMtime = !!opt.noMtime;
+ this.preservePaths = !!opt.preservePaths;
+ this.unlink = !!opt.unlink;
+ this.cwd = normalizeWindowsPath(import_node_path7.default.resolve(opt.cwd || process.cwd()));
+ this.strip = Number(opt.strip) || 0;
+ this.processUmask = !this.chmod ? 0 : typeof opt.processUmask === "number" ? opt.processUmask : umask();
+ this.umask = typeof opt.umask === "number" ? opt.umask : this.processUmask;
+ this.dmode = opt.dmode || 511 & ~this.umask;
+ this.fmode = opt.fmode || 438 & ~this.umask;
+ this.on("entry", (entry) => this[ONENTRY](entry));
+ }
+ // a bad or damaged archive is a warning for Parser, but an error
+ // when extracting. Mark those errors as unrecoverable, because
+ // the Unpack contract cannot be met.
+ warn(code2, msg, data = {}) {
+ if (code2 === "TAR_BAD_ARCHIVE" || code2 === "TAR_ABORT") {
+ data.recoverable = false;
+ }
+ return super.warn(code2, msg, data);
+ }
+ [MAYBECLOSE]() {
+ if (this[ENDED2] && this[PENDING] === 0) {
+ this.emit("prefinish");
+ this.emit("finish");
+ this.emit("end");
+ }
+ }
+ // return false if we need to skip this file
+ // return true if the field was successfully sanitized
+ [STRIPABSOLUTEPATH](entry, field) {
+ const p = entry[field];
+ const { type } = entry;
+ if (!p || this.preservePaths)
+ return true;
+ const [root, stripped] = stripAbsolutePath(p);
+ const parts = stripped.replaceAll(/\\/g, "/").split("/");
+ if (parts.includes("..") || /* c8 ignore next */
+ isWindows3 && /^[a-z]:\.\.$/i.test(parts[0] ?? "")) {
+ if (field === "path" || type === "Link") {
+ this.warn("TAR_ENTRY_ERROR", `${field} contains '..'`, {
+ entry,
+ [field]: p
+ });
+ return false;
+ }
+ const entryDir = import_node_path7.default.posix.dirname(entry.path);
+ const resolved = import_node_path7.default.posix.normalize(import_node_path7.default.posix.join(entryDir, parts.join("/")));
+ if (resolved.startsWith("../") || resolved === "..") {
+ this.warn("TAR_ENTRY_ERROR", `${field} escapes extraction directory`, {
+ entry,
+ [field]: p
+ });
+ return false;
+ }
+ }
+ if (root) {
+ entry[field] = String(stripped);
+ this.warn("TAR_ENTRY_INFO", `stripping ${root} from absolute ${field}`, {
+ entry,
+ [field]: p
+ });
+ }
+ return true;
+ }
+ // no IO, just string checking for absolute indicators
+ [CHECKPATH](entry) {
+ const p = normalizeWindowsPath(entry.path);
+ const parts = p.split("/");
+ if (this.strip) {
+ if (parts.length < this.strip) {
+ return false;
+ }
+ if (entry.type === "Link") {
+ const linkparts = normalizeWindowsPath(String(entry.linkpath)).split("/");
+ if (linkparts.length >= this.strip) {
+ entry.linkpath = linkparts.slice(this.strip).join("/");
+ } else {
+ return false;
+ }
+ }
+ parts.splice(0, this.strip);
+ entry.path = parts.join("/");
+ }
+ if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {
+ this.warn("TAR_ENTRY_ERROR", "path excessively deep", {
+ entry,
+ path: p,
+ depth: parts.length,
+ maxDepth: this.maxDepth
+ });
+ return false;
+ }
+ if (!this[STRIPABSOLUTEPATH](entry, "path") || !this[STRIPABSOLUTEPATH](entry, "linkpath")) {
+ return false;
+ }
+ entry.absolute = import_node_path7.default.isAbsolute(entry.path) ? normalizeWindowsPath(import_node_path7.default.resolve(entry.path)) : normalizeWindowsPath(import_node_path7.default.resolve(this.cwd, entry.path));
+ if (!this.preservePaths && typeof entry.absolute === "string" && entry.absolute.indexOf(this.cwd + "/") !== 0 && entry.absolute !== this.cwd) {
+ this.warn("TAR_ENTRY_ERROR", "path escaped extraction target", {
+ entry,
+ path: normalizeWindowsPath(entry.path),
+ resolvedPath: entry.absolute,
+ cwd: this.cwd
+ });
+ return false;
+ }
+ if (entry.absolute === this.cwd && entry.type !== "Directory" && entry.type !== "GNUDumpDir") {
+ return false;
+ }
+ if (this.win32) {
+ const { root: aRoot } = import_node_path7.default.win32.parse(String(entry.absolute));
+ entry.absolute = aRoot + encode2(String(entry.absolute).slice(aRoot.length));
+ const { root: pRoot } = import_node_path7.default.win32.parse(entry.path);
+ entry.path = pRoot + encode2(entry.path.slice(pRoot.length));
+ }
+ return true;
+ }
+ [ONENTRY](entry) {
+ if (!this[CHECKPATH](entry)) {
+ return entry.resume();
+ }
+ import_node_assert.default.equal(typeof entry.absolute, "string");
+ switch (entry.type) {
+ case "Directory":
+ case "GNUDumpDir":
+ if (entry.mode) {
+ entry.mode = entry.mode | 448;
+ }
+ // eslint-disable-next-line no-fallthrough
+ case "File":
+ case "OldFile":
+ case "ContiguousFile":
+ case "Link":
+ case "SymbolicLink":
+ return this[CHECKFS](entry);
+ case "CharacterDevice":
+ case "BlockDevice":
+ case "FIFO":
+ default:
+ return this[UNSUPPORTED](entry);
+ }
+ }
+ [ONERROR](er, entry) {
+ if (er.name === "CwdError") {
+ this.emit("error", er);
+ } else {
+ this.warn("TAR_ENTRY_ERROR", er, { entry });
+ this[UNPEND]();
+ entry.resume();
+ }
+ }
+ [MKDIR](dir, mode, cb) {
+ mkdir(normalizeWindowsPath(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cwd: this.cwd,
+ mode
+ }, cb);
+ }
+ [DOCHOWN](entry) {
+ return this.forceChown || this.preserveOwner && (typeof entry.uid === "number" && entry.uid !== this.processUid || typeof entry.gid === "number" && entry.gid !== this.processGid) || typeof this.uid === "number" && this.uid !== this.processUid || typeof this.gid === "number" && this.gid !== this.processGid;
+ }
+ [UID](entry) {
+ return uint32(this.uid, entry.uid, this.processUid);
+ }
+ [GID](entry) {
+ return uint32(this.gid, entry.gid, this.processGid);
+ }
+ [FILE](entry, fullyDone) {
+ const mode = typeof entry.mode === "number" ? entry.mode & 4095 : this.fmode;
+ const stream = new WriteStream(String(entry.absolute), {
+ // slight lie, but it can be numeric flags
+ flags: getWriteFlag(entry.size),
+ mode,
+ autoClose: false
+ });
+ stream.on("error", (er) => {
+ if (stream.fd) {
+ import_node_fs4.default.close(stream.fd, () => {
+ });
+ }
+ stream.write = () => true;
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ let actions = 1;
+ const done = (er) => {
+ if (er) {
+ if (stream.fd) {
+ import_node_fs4.default.close(stream.fd, () => {
+ });
+ }
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ if (--actions === 0) {
+ if (stream.fd !== void 0) {
+ import_node_fs4.default.close(stream.fd, (er2) => {
+ if (er2) {
+ this[ONERROR](er2, entry);
+ } else {
+ this[UNPEND]();
+ }
+ fullyDone();
+ });
+ }
+ }
+ };
+ stream.on("finish", () => {
+ const abs = String(entry.absolute);
+ const fd = stream.fd;
+ if (typeof fd === "number" && entry.mtime && !this.noMtime) {
+ actions++;
+ const atime = entry.atime || /* @__PURE__ */ new Date();
+ const mtime = entry.mtime;
+ import_node_fs4.default.futimes(fd, atime, mtime, (er) => er ? import_node_fs4.default.utimes(abs, atime, mtime, (er2) => done(er2 && er)) : done());
+ }
+ if (typeof fd === "number" && this[DOCHOWN](entry)) {
+ actions++;
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ if (typeof uid === "number" && typeof gid === "number") {
+ import_node_fs4.default.fchown(fd, uid, gid, (er) => er ? import_node_fs4.default.chown(abs, uid, gid, (er2) => done(er2 && er)) : done());
+ }
+ }
+ done();
+ });
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on("error", (er) => {
+ this[ONERROR](er, entry);
+ fullyDone();
+ });
+ entry.pipe(tx);
+ }
+ tx.pipe(stream);
+ }
+ [DIRECTORY](entry, fullyDone) {
+ const mode = typeof entry.mode === "number" ? entry.mode & 4095 : this.dmode;
+ this[MKDIR](String(entry.absolute), mode, (er) => {
+ if (er) {
+ this[ONERROR](er, entry);
+ fullyDone();
+ return;
+ }
+ let actions = 1;
+ const done = () => {
+ if (--actions === 0) {
+ fullyDone();
+ this[UNPEND]();
+ entry.resume();
+ }
+ };
+ if (entry.mtime && !this.noMtime) {
+ actions++;
+ import_node_fs4.default.utimes(String(entry.absolute), entry.atime || /* @__PURE__ */ new Date(), entry.mtime, done);
+ }
+ if (this[DOCHOWN](entry)) {
+ actions++;
+ import_node_fs4.default.chown(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done);
+ }
+ done();
+ });
+ }
+ [UNSUPPORTED](entry) {
+ entry.unsupported = true;
+ this.warn("TAR_ENTRY_UNSUPPORTED", `unsupported entry type: ${entry.type}`, { entry });
+ entry.resume();
+ }
+ [SYMLINK](entry, done) {
+ const parts = normalizeWindowsPath(import_node_path7.default.relative(this.cwd, import_node_path7.default.resolve(import_node_path7.default.dirname(String(entry.absolute)), String(entry.linkpath)))).split("/");
+ this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, String(entry.linkpath), "symlink", done), (er) => {
+ this[ONERROR](er, entry);
+ done();
+ });
+ }
+ [HARDLINK](entry, done) {
+ const linkpath = normalizeWindowsPath(import_node_path7.default.resolve(this.cwd, String(entry.linkpath)));
+ const parts = normalizeWindowsPath(String(entry.linkpath)).split("/");
+ this[ENSURE_NO_SYMLINK](entry, this.cwd, parts, () => this[LINK](entry, linkpath, "link", done), (er) => {
+ this[ONERROR](er, entry);
+ done();
+ });
+ }
+ [ENSURE_NO_SYMLINK](entry, cwd, parts, done, onError) {
+ const p = parts.shift();
+ if (this.preservePaths || p === void 0)
+ return done();
+ const t = import_node_path7.default.resolve(cwd, p);
+ import_node_fs4.default.lstat(t, (er, st) => {
+ if (er)
+ return done();
+ if (st?.isSymbolicLink()) {
+ return onError(new SymlinkError(t, import_node_path7.default.resolve(t, parts.join("/"))));
+ }
+ this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError);
+ });
+ }
+ [PEND]() {
+ this[PENDING]++;
+ }
+ [UNPEND]() {
+ this[PENDING]--;
+ this[MAYBECLOSE]();
+ }
+ [SKIP](entry) {
+ this[UNPEND]();
+ entry.resume();
+ }
+ // Check if we can reuse an existing filesystem entry safely and
+ // overwrite it, rather than unlinking and recreating
+ // Windows doesn't report a useful nlink, so we just never reuse entries
+ [ISREUSABLE](entry, st) {
+ return entry.type === "File" && !this.unlink && st.isFile() && st.nlink <= 1 && !isWindows3;
+ }
+ // check if a thing is there, and if so, try to clobber it
+ [CHECKFS](entry) {
+ this[PEND]();
+ const paths = [entry.path];
+ if (entry.linkpath) {
+ paths.push(entry.linkpath);
+ }
+ this.reservations.reserve(paths, (done) => this[CHECKFS2](entry, done));
+ }
+ [CHECKFS2](entry, fullyDone) {
+ const done = (er) => {
+ fullyDone(er);
+ };
+ const checkCwd2 = () => {
+ this[MKDIR](this.cwd, this.dmode, (er) => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ this[CHECKED_CWD] = true;
+ start();
+ });
+ };
+ const start = () => {
+ if (entry.absolute !== this.cwd) {
+ const parent = normalizeWindowsPath(import_node_path7.default.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ return this[MKDIR](parent, this.dmode, (er) => {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ afterMakeParent();
+ });
+ }
+ }
+ afterMakeParent();
+ };
+ const afterMakeParent = () => {
+ import_node_fs4.default.lstat(String(entry.absolute), (lstatEr, st) => {
+ if (st && (this.keep || /* c8 ignore next */
+ this.newer && st.mtime > (entry.mtime ?? st.mtime))) {
+ this[SKIP](entry);
+ done();
+ return;
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry, done);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === "Directory") {
+ const needChmod = this.chmod && entry.mode && (st.mode & 4095) !== entry.mode;
+ const afterChmod = (er) => this[MAKEFS](er ?? null, entry, done);
+ if (!needChmod) {
+ return afterChmod();
+ }
+ return import_node_fs4.default.chmod(String(entry.absolute), Number(entry.mode), afterChmod);
+ }
+ if (entry.absolute !== this.cwd) {
+ return import_node_fs4.default.rmdir(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));
+ }
+ }
+ if (entry.absolute === this.cwd) {
+ return this[MAKEFS](null, entry, done);
+ }
+ unlinkFile(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));
+ });
+ };
+ if (this[CHECKED_CWD]) {
+ start();
+ } else {
+ checkCwd2();
+ }
+ }
+ [MAKEFS](er, entry, done) {
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ switch (entry.type) {
+ case "File":
+ case "OldFile":
+ case "ContiguousFile":
+ return this[FILE](entry, done);
+ case "Link":
+ return this[HARDLINK](entry, done);
+ case "SymbolicLink":
+ return this[SYMLINK](entry, done);
+ case "Directory":
+ case "GNUDumpDir":
+ return this[DIRECTORY](entry, done);
+ }
+ }
+ [LINK](entry, linkpath, link, done) {
+ import_node_fs4.default[link](linkpath, String(entry.absolute), (er) => {
+ if (er) {
+ this[ONERROR](er, entry);
+ } else {
+ this[UNPEND]();
+ entry.resume();
+ }
+ done();
+ });
+ }
+ };
+ callSync = (fn2) => {
+ try {
+ return [null, fn2()];
+ } catch (er) {
+ return [er, null];
+ }
+ };
+ UnpackSync = class extends Unpack {
+ sync = true;
+ [MAKEFS](er, entry) {
+ return super[MAKEFS](er, entry, () => {
+ });
+ }
+ [CHECKFS](entry) {
+ if (!this[CHECKED_CWD]) {
+ const er2 = this[MKDIR](this.cwd, this.dmode);
+ if (er2) {
+ return this[ONERROR](er2, entry);
+ }
+ this[CHECKED_CWD] = true;
+ }
+ if (entry.absolute !== this.cwd) {
+ const parent = normalizeWindowsPath(import_node_path7.default.dirname(String(entry.absolute)));
+ if (parent !== this.cwd) {
+ const mkParent = this[MKDIR](parent, this.dmode);
+ if (mkParent) {
+ return this[ONERROR](mkParent, entry);
+ }
+ }
+ }
+ const [lstatEr, st] = callSync(() => import_node_fs4.default.lstatSync(String(entry.absolute)));
+ if (st && (this.keep || /* c8 ignore next */
+ this.newer && st.mtime > (entry.mtime ?? st.mtime))) {
+ return this[SKIP](entry);
+ }
+ if (lstatEr || this[ISREUSABLE](entry, st)) {
+ return this[MAKEFS](null, entry);
+ }
+ if (st.isDirectory()) {
+ if (entry.type === "Directory") {
+ const needChmod = this.chmod && entry.mode && (st.mode & 4095) !== entry.mode;
+ const [er3] = needChmod ? callSync(() => {
+ import_node_fs4.default.chmodSync(String(entry.absolute), Number(entry.mode));
+ }) : [];
+ return this[MAKEFS](er3, entry);
+ }
+ const [er2] = callSync(() => import_node_fs4.default.rmdirSync(String(entry.absolute)));
+ this[MAKEFS](er2, entry);
+ }
+ const [er] = entry.absolute === this.cwd ? [] : callSync(() => unlinkFileSync(String(entry.absolute)));
+ this[MAKEFS](er, entry);
+ }
+ [FILE](entry, done) {
+ const mode = typeof entry.mode === "number" ? entry.mode & 4095 : this.fmode;
+ const oner = (er) => {
+ let closeError;
+ try {
+ import_node_fs4.default.closeSync(fd);
+ } catch (e) {
+ closeError = e;
+ }
+ if (er || closeError) {
+ this[ONERROR](er || closeError, entry);
+ }
+ done();
+ };
+ let fd;
+ try {
+ fd = import_node_fs4.default.openSync(String(entry.absolute), getWriteFlag(entry.size), mode);
+ } catch (er) {
+ return oner(er);
+ }
+ const tx = this.transform ? this.transform(entry) || entry : entry;
+ if (tx !== entry) {
+ tx.on("error", (er) => this[ONERROR](er, entry));
+ entry.pipe(tx);
+ }
+ tx.on("data", (chunk) => {
+ try {
+ import_node_fs4.default.writeSync(fd, chunk, 0, chunk.length);
+ } catch (er) {
+ oner(er);
+ }
+ });
+ tx.on("end", () => {
+ let er = null;
+ if (entry.mtime && !this.noMtime) {
+ const atime = entry.atime || /* @__PURE__ */ new Date();
+ const mtime = entry.mtime;
+ try {
+ import_node_fs4.default.futimesSync(fd, atime, mtime);
+ } catch (futimeser) {
+ try {
+ import_node_fs4.default.utimesSync(String(entry.absolute), atime, mtime);
+ } catch {
+ er = futimeser;
+ }
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ const uid = this[UID](entry);
+ const gid = this[GID](entry);
+ try {
+ import_node_fs4.default.fchownSync(fd, Number(uid), Number(gid));
+ } catch (fchowner) {
+ try {
+ import_node_fs4.default.chownSync(String(entry.absolute), Number(uid), Number(gid));
+ } catch {
+ er = er || fchowner;
+ }
+ }
+ }
+ oner(er);
+ });
+ }
+ [DIRECTORY](entry, done) {
+ const mode = typeof entry.mode === "number" ? entry.mode & 4095 : this.dmode;
+ const er = this[MKDIR](String(entry.absolute), mode);
+ if (er) {
+ this[ONERROR](er, entry);
+ done();
+ return;
+ }
+ if (entry.mtime && !this.noMtime) {
+ try {
+ import_node_fs4.default.utimesSync(String(entry.absolute), entry.atime || /* @__PURE__ */ new Date(), entry.mtime);
+ } catch {
+ }
+ }
+ if (this[DOCHOWN](entry)) {
+ try {
+ import_node_fs4.default.chownSync(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)));
+ } catch {
+ }
+ }
+ done();
+ entry.resume();
+ }
+ [MKDIR](dir, mode) {
+ try {
+ return mkdirSync2(normalizeWindowsPath(dir), {
+ uid: this.uid,
+ gid: this.gid,
+ processUid: this.processUid,
+ processGid: this.processGid,
+ umask: this.processUmask,
+ preserve: this.preservePaths,
+ unlink: this.unlink,
+ cwd: this.cwd,
+ mode
+ });
+ } catch (er) {
+ return er;
+ }
+ }
+ [ENSURE_NO_SYMLINK](_entry, cwd, parts, done, onError) {
+ if (this.preservePaths || parts.length === 0)
+ return done();
+ let t = cwd;
+ for (const p of parts) {
+ t = import_node_path7.default.resolve(t, p);
+ const [er, st] = callSync(() => import_node_fs4.default.lstatSync(t));
+ if (er)
+ return done();
+ if (st.isSymbolicLink()) {
+ return onError(new SymlinkError(t, import_node_path7.default.resolve(cwd, parts.join("/"))));
+ }
+ }
+ done();
+ }
+ [LINK](entry, linkpath, link, done) {
+ const linkSync = `${link}Sync`;
+ try {
+ import_node_fs4.default[linkSync](linkpath, String(entry.absolute));
+ done();
+ entry.resume();
+ } catch (er) {
+ return this[ONERROR](er, entry);
+ }
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/extract.js
+var extract_exports = {};
+__export(extract_exports, {
+ extract: () => extract
+});
+var import_node_fs5, extractFileSync, extractFile, extract;
+var init_extract = __esm({
+ "node_modules/tar/dist/esm/extract.js"() {
+ init_esm2();
+ import_node_fs5 = __toESM(require("node:fs"), 1);
+ init_list();
+ init_make_command();
+ init_unpack();
+ extractFileSync = (opt) => {
+ const u = new UnpackSync(opt);
+ const file = opt.file;
+ const stat = import_node_fs5.default.statSync(file);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const stream = new ReadStreamSync(file, {
+ readSize,
+ size: stat.size
+ });
+ stream.pipe(u);
+ };
+ extractFile = (opt, _) => {
+ const u = new Unpack(opt);
+ const readSize = opt.maxReadSize || 16 * 1024 * 1024;
+ const file = opt.file;
+ const p = new Promise((resolve, reject) => {
+ u.on("error", reject);
+ u.on("close", resolve);
+ import_node_fs5.default.stat(file, (er, stat) => {
+ if (er) {
+ reject(er);
+ } else {
+ const stream = new ReadStream(file, {
+ readSize,
+ size: stat.size
+ });
+ stream.on("error", reject);
+ stream.pipe(u);
+ }
+ });
+ });
+ return p;
+ };
+ extract = makeCommand(extractFileSync, extractFile, (opt) => new UnpackSync(opt), (opt) => new Unpack(opt), (opt, files) => {
+ if (files?.length)
+ filesFilter(opt, files);
+ });
+ }
+});
+
+// node_modules/v8-compile-cache/v8-compile-cache.js
+var require_v8_compile_cache = __commonJS({
+ "node_modules/v8-compile-cache/v8-compile-cache.js"(exports2, module2) {
+ "use strict";
+ var Module2 = require("module");
+ var crypto = require("crypto");
+ var fs17 = require("fs");
+ var path16 = require("path");
+ var vm = require("vm");
+ var os3 = require("os");
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var FileSystemBlobStore = class {
+ constructor(directory, prefix) {
+ const name2 = prefix ? slashEscape(prefix + ".") : "";
+ this._blobFilename = path16.join(directory, name2 + "BLOB");
+ this._mapFilename = path16.join(directory, name2 + "MAP");
+ this._lockFilename = path16.join(directory, name2 + "LOCK");
+ this._directory = directory;
+ this._load();
+ }
+ has(key, invalidationKey) {
+ if (hasOwnProperty.call(this._memoryBlobs, key)) {
+ return this._invalidationKeys[key] === invalidationKey;
+ } else if (hasOwnProperty.call(this._storedMap, key)) {
+ return this._storedMap[key][0] === invalidationKey;
+ }
+ return false;
+ }
+ get(key, invalidationKey) {
+ if (hasOwnProperty.call(this._memoryBlobs, key)) {
+ if (this._invalidationKeys[key] === invalidationKey) {
+ return this._memoryBlobs[key];
+ }
+ } else if (hasOwnProperty.call(this._storedMap, key)) {
+ const mapping = this._storedMap[key];
+ if (mapping[0] === invalidationKey) {
+ return this._storedBlob.slice(mapping[1], mapping[2]);
+ }
+ }
+ }
+ set(key, invalidationKey, buffer) {
+ this._invalidationKeys[key] = invalidationKey;
+ this._memoryBlobs[key] = buffer;
+ this._dirty = true;
+ }
+ delete(key) {
+ if (hasOwnProperty.call(this._memoryBlobs, key)) {
+ this._dirty = true;
+ delete this._memoryBlobs[key];
+ }
+ if (hasOwnProperty.call(this._invalidationKeys, key)) {
+ this._dirty = true;
+ delete this._invalidationKeys[key];
+ }
+ if (hasOwnProperty.call(this._storedMap, key)) {
+ this._dirty = true;
+ delete this._storedMap[key];
+ }
+ }
+ isDirty() {
+ return this._dirty;
+ }
+ save() {
+ const dump = this._getDump();
+ const blobToStore = Buffer.concat(dump[0]);
+ const mapToStore = JSON.stringify(dump[1]);
+ try {
+ mkdirpSync(this._directory);
+ fs17.writeFileSync(this._lockFilename, "LOCK", { flag: "wx" });
+ } catch (error) {
+ return false;
+ }
+ try {
+ fs17.writeFileSync(this._blobFilename, blobToStore);
+ fs17.writeFileSync(this._mapFilename, mapToStore);
+ } finally {
+ fs17.unlinkSync(this._lockFilename);
+ }
+ return true;
+ }
+ _load() {
+ try {
+ this._storedBlob = fs17.readFileSync(this._blobFilename);
+ this._storedMap = JSON.parse(fs17.readFileSync(this._mapFilename));
+ } catch (e) {
+ this._storedBlob = Buffer.alloc(0);
+ this._storedMap = {};
+ }
+ this._dirty = false;
+ this._memoryBlobs = {};
+ this._invalidationKeys = {};
+ }
+ _getDump() {
+ const buffers = [];
+ const newMap = {};
+ let offset = 0;
+ function push2(key, invalidationKey, buffer) {
+ buffers.push(buffer);
+ newMap[key] = [invalidationKey, offset, offset + buffer.length];
+ offset += buffer.length;
+ }
+ for (const key of Object.keys(this._memoryBlobs)) {
+ const buffer = this._memoryBlobs[key];
+ const invalidationKey = this._invalidationKeys[key];
+ push2(key, invalidationKey, buffer);
+ }
+ for (const key of Object.keys(this._storedMap)) {
+ if (hasOwnProperty.call(newMap, key)) continue;
+ const mapping = this._storedMap[key];
+ const buffer = this._storedBlob.slice(mapping[1], mapping[2]);
+ push2(key, mapping[0], buffer);
+ }
+ return [buffers, newMap];
+ }
+ };
+ var NativeCompileCache = class {
+ constructor() {
+ this._cacheStore = null;
+ this._previousModuleCompile = null;
+ }
+ setCacheStore(cacheStore) {
+ this._cacheStore = cacheStore;
+ }
+ install() {
+ const self2 = this;
+ const hasRequireResolvePaths = typeof require.resolve.paths === "function";
+ this._previousModuleCompile = Module2.prototype._compile;
+ Module2.prototype._compile = function(content, filename) {
+ const mod = this;
+ function require2(id) {
+ return mod.require(id);
+ }
+ function resolve(request, options) {
+ return Module2._resolveFilename(request, mod, false, options);
+ }
+ require2.resolve = resolve;
+ if (hasRequireResolvePaths) {
+ resolve.paths = function paths(request) {
+ return Module2._resolveLookupPaths(request, mod, true);
+ };
+ }
+ require2.main = process.mainModule;
+ require2.extensions = Module2._extensions;
+ require2.cache = Module2._cache;
+ const dirname2 = path16.dirname(filename);
+ const compiledWrapper = self2._moduleCompile(filename, content);
+ const args = [mod.exports, require2, mod, filename, dirname2, process, global, Buffer];
+ return compiledWrapper.apply(mod.exports, args);
+ };
+ }
+ uninstall() {
+ Module2.prototype._compile = this._previousModuleCompile;
+ }
+ _moduleCompile(filename, content) {
+ var contLen = content.length;
+ if (contLen >= 2) {
+ if (content.charCodeAt(0) === 35 && content.charCodeAt(1) === 33) {
+ if (contLen === 2) {
+ content = "";
+ } else {
+ var i = 2;
+ for (; i < contLen; ++i) {
+ var code2 = content.charCodeAt(i);
+ if (code2 === 10 || code2 === 13) break;
+ }
+ if (i === contLen) {
+ content = "";
+ } else {
+ content = content.slice(i);
+ }
+ }
+ }
+ }
+ var wrapper = Module2.wrap(content);
+ var invalidationKey = crypto.createHash("sha1").update(content, "utf8").digest("hex");
+ var buffer = this._cacheStore.get(filename, invalidationKey);
+ var script = new vm.Script(wrapper, {
+ filename,
+ lineOffset: 0,
+ displayErrors: true,
+ cachedData: buffer,
+ produceCachedData: true
+ });
+ if (script.cachedDataProduced) {
+ this._cacheStore.set(filename, invalidationKey, script.cachedData);
+ } else if (script.cachedDataRejected) {
+ this._cacheStore.delete(filename);
+ }
+ var compiledWrapper = script.runInThisContext({
+ filename,
+ lineOffset: 0,
+ columnOffset: 0,
+ displayErrors: true
+ });
+ return compiledWrapper;
+ }
+ };
+ function mkdirpSync(p_) {
+ _mkdirpSync(path16.resolve(p_), 511);
+ }
+ function _mkdirpSync(p, mode) {
+ try {
+ fs17.mkdirSync(p, mode);
+ } catch (err0) {
+ if (err0.code === "ENOENT") {
+ _mkdirpSync(path16.dirname(p));
+ _mkdirpSync(p);
+ } else {
+ try {
+ const stat = fs17.statSync(p);
+ if (!stat.isDirectory()) {
+ throw err0;
+ }
+ } catch (err1) {
+ throw err0;
+ }
+ }
+ }
+ }
+ function slashEscape(str) {
+ const ESCAPE_LOOKUP = {
+ "\\": "zB",
+ ":": "zC",
+ "/": "zS",
+ "\0": "z0",
+ "z": "zZ"
+ };
+ const ESCAPE_REGEX = /[\\:/\x00z]/g;
+ return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
+ }
+ function supportsCachedData() {
+ const script = new vm.Script('""', { produceCachedData: true });
+ return script.cachedDataProduced === true;
+ }
+ function getCacheDir() {
+ const v8_compile_cache_cache_dir = process.env.V8_COMPILE_CACHE_CACHE_DIR;
+ if (v8_compile_cache_cache_dir) {
+ return v8_compile_cache_cache_dir;
+ }
+ const dirname2 = typeof process.getuid === "function" ? "v8-compile-cache-" + process.getuid() : "v8-compile-cache";
+ const arch = process.arch;
+ const version2 = typeof process.versions.v8 === "string" ? process.versions.v8 : typeof process.versions.chakracore === "string" ? "chakracore-" + process.versions.chakracore : "node-" + process.version;
+ const cacheDir = path16.join(os3.tmpdir(), dirname2, arch, version2);
+ return cacheDir;
+ }
+ function getMainName() {
+ const mainName = require.main && typeof require.main.filename === "string" ? require.main.filename : process.cwd();
+ return mainName;
+ }
+ if (!process.env.DISABLE_V8_COMPILE_CACHE && supportsCachedData()) {
+ const cacheDir = getCacheDir();
+ const prefix = getMainName();
+ const blobStore = new FileSystemBlobStore(cacheDir, prefix);
+ const nativeCompileCache = new NativeCompileCache();
+ nativeCompileCache.setCacheStore(blobStore);
+ nativeCompileCache.install();
+ process.once("exit", () => {
+ if (blobStore.isDirty()) {
+ blobStore.save();
+ }
+ nativeCompileCache.uninstall();
+ });
+ }
+ module2.exports.__TEST__ = {
+ FileSystemBlobStore,
+ NativeCompileCache,
+ mkdirpSync,
+ slashEscape,
+ supportsCachedData,
+ getCacheDir,
+ getMainName
+ };
+ }
+});
+
+// node_modules/semver/functions/satisfies.js
+var require_satisfies = __commonJS({
+ "node_modules/semver/functions/satisfies.js"(exports2, module2) {
+ "use strict";
+ var Range3 = require_range();
+ var satisfies = (version2, range, options) => {
+ try {
+ range = new Range3(range, options);
+ } catch (er) {
+ return false;
+ }
+ return range.test(version2);
+ };
+ module2.exports = satisfies;
+ }
+});
+
+// node_modules/which/node_modules/isexe/dist/commonjs/index.min.js
+var require_index_min = __commonJS({
+ "node_modules/which/node_modules/isexe/dist/commonjs/index.min.js"(exports2) {
+ "use strict";
+ var a = (t, e) => () => (e || t((e = { exports: {} }).exports, e), e.exports);
+ var _ = a((i) => {
+ "use strict";
+ Object.defineProperty(i, "__esModule", { value: true });
+ i.sync = i.isexe = void 0;
+ var M = require("node:fs"), x = require("node:fs/promises"), q = async (t, e = {}) => {
+ let { ignoreErrors: r = false } = e;
+ try {
+ return d(await (0, x.stat)(t), e);
+ } catch (s) {
+ let n = s;
+ if (r || n.code === "EACCES") return false;
+ throw n;
+ }
+ };
+ i.isexe = q;
+ var m = (t, e = {}) => {
+ let { ignoreErrors: r = false } = e;
+ try {
+ return d((0, M.statSync)(t), e);
+ } catch (s) {
+ let n = s;
+ if (r || n.code === "EACCES") return false;
+ throw n;
+ }
+ };
+ i.sync = m;
+ var d = (t, e) => t.isFile() && A(t, e), A = (t, e) => {
+ let r = e.uid ?? process.getuid?.(), s = e.groups ?? process.getgroups?.() ?? [], n = e.gid ?? process.getgid?.() ?? s[0];
+ if (r === void 0 || n === void 0) throw new Error("cannot get uid or gid");
+ let u = /* @__PURE__ */ new Set([n, ...s]), c = t.mode, S = t.uid, P = t.gid, f = parseInt("100", 8), l = parseInt("010", 8), j = parseInt("001", 8), C = f | l;
+ return !!(c & j || c & l && u.has(P) || c & f && S === r || c & C && r === 0);
+ };
+ });
+ var g = a((o) => {
+ "use strict";
+ Object.defineProperty(o, "__esModule", { value: true });
+ o.sync = o.isexe = void 0;
+ var T = require("node:fs"), I = require("node:fs/promises"), D = require("node:path"), F = async (t, e = {}) => {
+ let { ignoreErrors: r = false } = e;
+ try {
+ return y(await (0, I.stat)(t), t, e);
+ } catch (s) {
+ let n = s;
+ if (r || n.code === "EACCES") return false;
+ throw n;
+ }
+ };
+ o.isexe = F;
+ var L = (t, e = {}) => {
+ let { ignoreErrors: r = false } = e;
+ try {
+ return y((0, T.statSync)(t), t, e);
+ } catch (s) {
+ let n = s;
+ if (r || n.code === "EACCES") return false;
+ throw n;
+ }
+ };
+ o.sync = L;
+ var B = (t, e) => {
+ let { pathExt: r = process.env.PATHEXT || "" } = e, s = r.split(D.delimiter);
+ if (s.indexOf("") !== -1) return true;
+ for (let n of s) {
+ let u = n.toLowerCase(), c = t.substring(t.length - u.length).toLowerCase();
+ if (u && c === u) return true;
+ }
+ return false;
+ }, y = (t, e, r) => t.isFile() && B(e, r);
+ });
+ var p = a((h) => {
+ "use strict";
+ Object.defineProperty(h, "__esModule", { value: true });
+ });
+ var v = exports2 && exports2.__createBinding || (Object.create ? (function(t, e, r, s) {
+ s === void 0 && (s = r);
+ var n = Object.getOwnPropertyDescriptor(e, r);
+ (!n || ("get" in n ? !e.__esModule : n.writable || n.configurable)) && (n = { enumerable: true, get: function() {
+ return e[r];
+ } }), Object.defineProperty(t, s, n);
+ }) : (function(t, e, r, s) {
+ s === void 0 && (s = r), t[s] = e[r];
+ }));
+ var G = exports2 && exports2.__setModuleDefault || (Object.create ? (function(t, e) {
+ Object.defineProperty(t, "default", { enumerable: true, value: e });
+ }) : function(t, e) {
+ t.default = e;
+ });
+ var w = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
+ var t = function(e) {
+ return t = Object.getOwnPropertyNames || function(r) {
+ var s = [];
+ for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (s[s.length] = n);
+ return s;
+ }, t(e);
+ };
+ return function(e) {
+ if (e && e.__esModule) return e;
+ var r = {};
+ if (e != null) for (var s = t(e), n = 0; n < s.length; n++) s[n] !== "default" && v(r, e, s[n]);
+ return G(r, e), r;
+ };
+ })();
+ var X = exports2 && exports2.__exportStar || function(t, e) {
+ for (var r in t) r !== "default" && !Object.prototype.hasOwnProperty.call(e, r) && v(e, t, r);
+ };
+ Object.defineProperty(exports2, "__esModule", { value: true });
+ exports2.sync = exports2.isexe = exports2.posix = exports2.win32 = void 0;
+ var E = w(_());
+ exports2.posix = E;
+ var O = w(g());
+ exports2.win32 = O;
+ X(p(), exports2);
+ var H = process.env._ISEXE_TEST_PLATFORM_ || process.platform;
+ var b = H === "win32" ? O : E;
+ exports2.isexe = b.isexe;
+ exports2.sync = b.sync;
+ }
+});
+
+// node_modules/which/lib/index.js
+var require_lib = __commonJS({
+ "node_modules/which/lib/index.js"(exports2, module2) {
+ var { isexe, sync: isexeSync } = require_index_min();
+ var { join: join3, delimiter, sep, posix } = require("path");
+ var isWindows4 = process.platform === "win32";
+ var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
+ var rRel = new RegExp(`^\\.${rSlash.source}`);
+ var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" });
+ var getPathInfo = (cmd, {
+ path: optPath = process.env.PATH,
+ pathExt: optPathExt = process.env.PATHEXT,
+ delimiter: optDelimiter = delimiter
+ }) => {
+ const pathEnv = cmd.match(rSlash) ? [""] : [
+ // windows always checks the cwd first
+ ...isWindows4 ? [process.cwd()] : [],
+ ...(optPath || /* istanbul ignore next: very unusual */
+ "").split(optDelimiter)
+ ];
+ if (isWindows4) {
+ const pathExtExe = optPathExt || [".EXE", ".CMD", ".BAT", ".COM"].join(optDelimiter);
+ const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
+ if (cmd.includes(".") && pathExt[0] !== "") {
+ pathExt.unshift("");
+ }
+ return { pathEnv, pathExt, pathExtExe };
+ }
+ return { pathEnv, pathExt: [""] };
+ };
+ var getPathPart = (raw2, cmd) => {
+ const pathPart = /^".*"$/.test(raw2) ? raw2.slice(1, -1) : raw2;
+ const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "";
+ return prefix + join3(pathPart, cmd);
+ };
+ var which3 = async (cmd, opt = {}) => {
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+ const found = [];
+ for (const envPart of pathEnv) {
+ const p = getPathPart(envPart, cmd);
+ for (const ext of pathExt) {
+ const withExt = p + ext;
+ const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+ if (is) {
+ if (!opt.all) {
+ return withExt;
+ }
+ found.push(withExt);
+ }
+ }
+ }
+ if (opt.all && found.length) {
+ return found;
+ }
+ if (opt.nothrow) {
+ return null;
+ }
+ throw getNotFoundError(cmd);
+ };
+ var whichSync = (cmd, opt = {}) => {
+ const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
+ const found = [];
+ for (const pathEnvPart of pathEnv) {
+ const p = getPathPart(pathEnvPart, cmd);
+ for (const ext of pathExt) {
+ const withExt = p + ext;
+ const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });
+ if (is) {
+ if (!opt.all) {
+ return withExt;
+ }
+ found.push(withExt);
+ }
+ }
+ }
+ if (opt.all && found.length) {
+ return found;
+ }
+ if (opt.nothrow) {
+ return null;
+ }
+ throw getNotFoundError(cmd);
+ };
+ module2.exports = which3;
+ which3.sync = whichSync;
+ }
+});
+
+// node_modules/is-windows/index.js
+var require_is_windows = __commonJS({
+ "node_modules/is-windows/index.js"(exports2, module2) {
+ (function(factory) {
+ if (exports2 && typeof exports2 === "object" && typeof module2 !== "undefined") {
+ module2.exports = factory();
+ } else if (typeof define === "function" && define.amd) {
+ define([], factory);
+ } else if (typeof window !== "undefined") {
+ window.isWindows = factory();
+ } else if (typeof global !== "undefined") {
+ global.isWindows = factory();
+ } else if (typeof self !== "undefined") {
+ self.isWindows = factory();
+ } else {
+ this.isWindows = factory();
+ }
+ })(function() {
+ "use strict";
+ return function isWindows4() {
+ return process && (process.platform === "win32" || /^(msys|cygwin)$/.test(process.env.OSTYPE));
+ };
+ });
+ }
+});
+
+// node_modules/cmd-extension/index.js
+var require_cmd_extension = __commonJS({
+ "node_modules/cmd-extension/index.js"(exports2, module2) {
+ "use strict";
+ var path16 = require("path");
+ var cmdExtension;
+ if (process.env.PATHEXT) {
+ cmdExtension = process.env.PATHEXT.split(path16.delimiter).find((ext) => ext.toUpperCase() === ".CMD");
+ }
+ module2.exports = cmdExtension || ".cmd";
+ }
+});
+
+// node_modules/graceful-fs/polyfills.js
+var require_polyfills = __commonJS({
+ "node_modules/graceful-fs/polyfills.js"(exports2, module2) {
+ var constants2 = require("constants");
+ var origCwd = process.cwd;
+ var cwd = null;
+ var platform5 = process.env.GRACEFUL_FS_PLATFORM || process.platform;
+ process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process);
+ return cwd;
+ };
+ try {
+ process.cwd();
+ } catch (er) {
+ }
+ if (typeof process.chdir === "function") {
+ chdir = process.chdir;
+ process.chdir = function(d) {
+ cwd = null;
+ chdir.call(process, d);
+ };
+ if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir);
+ }
+ var chdir;
+ module2.exports = patch;
+ function patch(fs17) {
+ if (constants2.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ patchLchmod(fs17);
+ }
+ if (!fs17.lutimes) {
+ patchLutimes(fs17);
+ }
+ fs17.chown = chownFix(fs17.chown);
+ fs17.fchown = chownFix(fs17.fchown);
+ fs17.lchown = chownFix(fs17.lchown);
+ fs17.chmod = chmodFix(fs17.chmod);
+ fs17.fchmod = chmodFix(fs17.fchmod);
+ fs17.lchmod = chmodFix(fs17.lchmod);
+ fs17.chownSync = chownFixSync(fs17.chownSync);
+ fs17.fchownSync = chownFixSync(fs17.fchownSync);
+ fs17.lchownSync = chownFixSync(fs17.lchownSync);
+ fs17.chmodSync = chmodFixSync(fs17.chmodSync);
+ fs17.fchmodSync = chmodFixSync(fs17.fchmodSync);
+ fs17.lchmodSync = chmodFixSync(fs17.lchmodSync);
+ fs17.stat = statFix(fs17.stat);
+ fs17.fstat = statFix(fs17.fstat);
+ fs17.lstat = statFix(fs17.lstat);
+ fs17.statSync = statFixSync(fs17.statSync);
+ fs17.fstatSync = statFixSync(fs17.fstatSync);
+ fs17.lstatSync = statFixSync(fs17.lstatSync);
+ if (fs17.chmod && !fs17.lchmod) {
+ fs17.lchmod = function(path16, mode, cb) {
+ if (cb) process.nextTick(cb);
+ };
+ fs17.lchmodSync = function() {
+ };
+ }
+ if (fs17.chown && !fs17.lchown) {
+ fs17.lchown = function(path16, uid, gid, cb) {
+ if (cb) process.nextTick(cb);
+ };
+ fs17.lchownSync = function() {
+ };
+ }
+ if (platform5 === "win32") {
+ fs17.rename = typeof fs17.rename !== "function" ? fs17.rename : (function(fs$rename) {
+ function rename(from, to, cb) {
+ var start = Date.now();
+ var backoff = 0;
+ fs$rename(from, to, function CB(er) {
+ if (er && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY") && Date.now() - start < 6e4) {
+ setTimeout(function() {
+ fs17.stat(to, function(stater, st) {
+ if (stater && stater.code === "ENOENT")
+ fs$rename(from, to, CB);
+ else
+ cb(er);
+ });
+ }, backoff);
+ if (backoff < 100)
+ backoff += 10;
+ return;
+ }
+ if (cb) cb(er);
+ });
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename);
+ return rename;
+ })(fs17.rename);
+ }
+ fs17.read = typeof fs17.read !== "function" ? fs17.read : (function(fs$read) {
+ function read(fd, buffer, offset, length, position, callback_) {
+ var callback;
+ if (callback_ && typeof callback_ === "function") {
+ var eagCounter = 0;
+ callback = function(er, _, __) {
+ if (er && er.code === "EAGAIN" && eagCounter < 10) {
+ eagCounter++;
+ return fs$read.call(fs17, fd, buffer, offset, length, position, callback);
+ }
+ callback_.apply(this, arguments);
+ };
+ }
+ return fs$read.call(fs17, fd, buffer, offset, length, position, callback);
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read);
+ return read;
+ })(fs17.read);
+ fs17.readSync = typeof fs17.readSync !== "function" ? fs17.readSync : /* @__PURE__ */ (function(fs$readSync) {
+ return function(fd, buffer, offset, length, position) {
+ var eagCounter = 0;
+ while (true) {
+ try {
+ return fs$readSync.call(fs17, fd, buffer, offset, length, position);
+ } catch (er) {
+ if (er.code === "EAGAIN" && eagCounter < 10) {
+ eagCounter++;
+ continue;
+ }
+ throw er;
+ }
+ }
+ };
+ })(fs17.readSync);
+ function patchLchmod(fs18) {
+ fs18.lchmod = function(path16, mode, callback) {
+ fs18.open(
+ path16,
+ constants2.O_WRONLY | constants2.O_SYMLINK,
+ mode,
+ function(err, fd) {
+ if (err) {
+ if (callback) callback(err);
+ return;
+ }
+ fs18.fchmod(fd, mode, function(err2) {
+ fs18.close(fd, function(err22) {
+ if (callback) callback(err2 || err22);
+ });
+ });
+ }
+ );
+ };
+ fs18.lchmodSync = function(path16, mode) {
+ var fd = fs18.openSync(path16, constants2.O_WRONLY | constants2.O_SYMLINK, mode);
+ var threw = true;
+ var ret;
+ try {
+ ret = fs18.fchmodSync(fd, mode);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ fs18.closeSync(fd);
+ } catch (er) {
+ }
+ } else {
+ fs18.closeSync(fd);
+ }
+ }
+ return ret;
+ };
+ }
+ function patchLutimes(fs18) {
+ if (constants2.hasOwnProperty("O_SYMLINK") && fs18.futimes) {
+ fs18.lutimes = function(path16, at, mt, cb) {
+ fs18.open(path16, constants2.O_SYMLINK, function(er, fd) {
+ if (er) {
+ if (cb) cb(er);
+ return;
+ }
+ fs18.futimes(fd, at, mt, function(er2) {
+ fs18.close(fd, function(er22) {
+ if (cb) cb(er2 || er22);
+ });
+ });
+ });
+ };
+ fs18.lutimesSync = function(path16, at, mt) {
+ var fd = fs18.openSync(path16, constants2.O_SYMLINK);
+ var ret;
+ var threw = true;
+ try {
+ ret = fs18.futimesSync(fd, at, mt);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ fs18.closeSync(fd);
+ } catch (er) {
+ }
+ } else {
+ fs18.closeSync(fd);
+ }
+ }
+ return ret;
+ };
+ } else if (fs18.futimes) {
+ fs18.lutimes = function(_a, _b, _c, cb) {
+ if (cb) process.nextTick(cb);
+ };
+ fs18.lutimesSync = function() {
+ };
+ }
+ }
+ function chmodFix(orig) {
+ if (!orig) return orig;
+ return function(target, mode, cb) {
+ return orig.call(fs17, target, mode, function(er) {
+ if (chownErOk(er)) er = null;
+ if (cb) cb.apply(this, arguments);
+ });
+ };
+ }
+ function chmodFixSync(orig) {
+ if (!orig) return orig;
+ return function(target, mode) {
+ try {
+ return orig.call(fs17, target, mode);
+ } catch (er) {
+ if (!chownErOk(er)) throw er;
+ }
+ };
+ }
+ function chownFix(orig) {
+ if (!orig) return orig;
+ return function(target, uid, gid, cb) {
+ return orig.call(fs17, target, uid, gid, function(er) {
+ if (chownErOk(er)) er = null;
+ if (cb) cb.apply(this, arguments);
+ });
+ };
+ }
+ function chownFixSync(orig) {
+ if (!orig) return orig;
+ return function(target, uid, gid) {
+ try {
+ return orig.call(fs17, target, uid, gid);
+ } catch (er) {
+ if (!chownErOk(er)) throw er;
+ }
+ };
+ }
+ function statFix(orig) {
+ if (!orig) return orig;
+ return function(target, options, cb) {
+ if (typeof options === "function") {
+ cb = options;
+ options = null;
+ }
+ function callback(er, stats) {
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 4294967296;
+ if (stats.gid < 0) stats.gid += 4294967296;
+ }
+ if (cb) cb.apply(this, arguments);
+ }
+ return options ? orig.call(fs17, target, options, callback) : orig.call(fs17, target, callback);
+ };
+ }
+ function statFixSync(orig) {
+ if (!orig) return orig;
+ return function(target, options) {
+ var stats = options ? orig.call(fs17, target, options) : orig.call(fs17, target);
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 4294967296;
+ if (stats.gid < 0) stats.gid += 4294967296;
+ }
+ return stats;
+ };
+ }
+ function chownErOk(er) {
+ if (!er)
+ return true;
+ if (er.code === "ENOSYS")
+ return true;
+ var nonroot = !process.getuid || process.getuid() !== 0;
+ if (nonroot) {
+ if (er.code === "EINVAL" || er.code === "EPERM")
+ return true;
+ }
+ return false;
+ }
+ }
+ }
+});
+
+// node_modules/graceful-fs/legacy-streams.js
+var require_legacy_streams = __commonJS({
+ "node_modules/graceful-fs/legacy-streams.js"(exports2, module2) {
+ var Stream2 = require("stream").Stream;
+ module2.exports = legacy;
+ function legacy(fs17) {
+ return {
+ ReadStream: ReadStream2,
+ WriteStream: WriteStream2
+ };
+ function ReadStream2(path16, options) {
+ if (!(this instanceof ReadStream2)) return new ReadStream2(path16, options);
+ Stream2.call(this);
+ var self2 = this;
+ this.path = path16;
+ this.fd = null;
+ this.readable = true;
+ this.paused = false;
+ this.flags = "r";
+ this.mode = 438;
+ this.bufferSize = 64 * 1024;
+ options = options || {};
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+ if (this.encoding) this.setEncoding(this.encoding);
+ if (this.start !== void 0) {
+ if ("number" !== typeof this.start) {
+ throw TypeError("start must be a Number");
+ }
+ if (this.end === void 0) {
+ this.end = Infinity;
+ } else if ("number" !== typeof this.end) {
+ 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() {
+ self2._read();
+ });
+ return;
+ }
+ fs17.open(this.path, this.flags, this.mode, function(err, fd) {
+ if (err) {
+ self2.emit("error", err);
+ self2.readable = false;
+ return;
+ }
+ self2.fd = fd;
+ self2.emit("open", fd);
+ self2._read();
+ });
+ }
+ function WriteStream2(path16, options) {
+ if (!(this instanceof WriteStream2)) return new WriteStream2(path16, options);
+ Stream2.call(this);
+ this.path = path16;
+ this.fd = null;
+ this.writable = true;
+ this.flags = "w";
+ this.encoding = "binary";
+ this.mode = 438;
+ this.bytesWritten = 0;
+ options = options || {};
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+ if (this.start !== void 0) {
+ if ("number" !== typeof this.start) {
+ throw TypeError("start must be a Number");
+ }
+ if (this.start < 0) {
+ throw new Error("start must be >= zero");
+ }
+ this.pos = this.start;
+ }
+ this.busy = false;
+ this._queue = [];
+ if (this.fd === null) {
+ this._open = fs17.open;
+ this._queue.push([this._open, this.path, this.flags, this.mode, void 0]);
+ this.flush();
+ }
+ }
+ }
+ }
+});
+
+// node_modules/graceful-fs/clone.js
+var require_clone = __commonJS({
+ "node_modules/graceful-fs/clone.js"(exports2, module2) {
+ "use strict";
+ module2.exports = clone;
+ var getPrototypeOf = Object.getPrototypeOf || function(obj) {
+ return obj.__proto__;
+ };
+ function clone(obj) {
+ if (obj === null || typeof obj !== "object")
+ return obj;
+ if (obj instanceof Object)
+ var copy = { __proto__: getPrototypeOf(obj) };
+ else
+ var copy = /* @__PURE__ */ Object.create(null);
+ Object.getOwnPropertyNames(obj).forEach(function(key) {
+ Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key));
+ });
+ return copy;
+ }
+ }
+});
+
+// node_modules/graceful-fs/graceful-fs.js
+var require_graceful_fs = __commonJS({
+ "node_modules/graceful-fs/graceful-fs.js"(exports2, module2) {
+ var fs17 = require("fs");
+ var polyfills = require_polyfills();
+ var legacy = require_legacy_streams();
+ var clone = require_clone();
+ var util = require("util");
+ var gracefulQueue;
+ var previousSymbol;
+ if (typeof Symbol === "function" && typeof Symbol.for === "function") {
+ gracefulQueue = /* @__PURE__ */ Symbol.for("graceful-fs.queue");
+ previousSymbol = /* @__PURE__ */ Symbol.for("graceful-fs.previous");
+ } else {
+ gracefulQueue = "___graceful-fs.queue";
+ previousSymbol = "___graceful-fs.previous";
+ }
+ function noop3() {
+ }
+ function publishQueue(context, queue2) {
+ Object.defineProperty(context, gracefulQueue, {
+ get: function() {
+ return queue2;
+ }
+ });
+ }
+ var debug = noop3;
+ if (util.debuglog)
+ debug = util.debuglog("gfs4");
+ else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
+ debug = function() {
+ var m = util.format.apply(util, arguments);
+ m = "GFS4: " + m.split(/\n/).join("\nGFS4: ");
+ console.error(m);
+ };
+ if (!fs17[gracefulQueue]) {
+ queue = global[gracefulQueue] || [];
+ publishQueue(fs17, queue);
+ fs17.close = (function(fs$close) {
+ function close(fd, cb) {
+ return fs$close.call(fs17, fd, function(err) {
+ if (!err) {
+ resetQueue();
+ }
+ if (typeof cb === "function")
+ cb.apply(this, arguments);
+ });
+ }
+ Object.defineProperty(close, previousSymbol, {
+ value: fs$close
+ });
+ return close;
+ })(fs17.close);
+ fs17.closeSync = (function(fs$closeSync) {
+ function closeSync(fd) {
+ fs$closeSync.apply(fs17, arguments);
+ resetQueue();
+ }
+ Object.defineProperty(closeSync, previousSymbol, {
+ value: fs$closeSync
+ });
+ return closeSync;
+ })(fs17.closeSync);
+ if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) {
+ process.on("exit", function() {
+ debug(fs17[gracefulQueue]);
+ require("assert").equal(fs17[gracefulQueue].length, 0);
+ });
+ }
+ }
+ var queue;
+ if (!global[gracefulQueue]) {
+ publishQueue(global, fs17[gracefulQueue]);
+ }
+ module2.exports = patch(clone(fs17));
+ if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs17.__patched) {
+ module2.exports = patch(fs17);
+ fs17.__patched = true;
+ }
+ function patch(fs18) {
+ polyfills(fs18);
+ fs18.gracefulify = patch;
+ fs18.createReadStream = createReadStream;
+ fs18.createWriteStream = createWriteStream;
+ var fs$readFile = fs18.readFile;
+ fs18.readFile = readFile;
+ function readFile(path16, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$readFile(path16, options, cb);
+ function go$readFile(path17, options2, cb2, startTime) {
+ return fs$readFile(path17, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$readFile, [path17, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$writeFile = fs18.writeFile;
+ fs18.writeFile = writeFile;
+ function writeFile(path16, data, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$writeFile(path16, data, options, cb);
+ function go$writeFile(path17, data2, options2, cb2, startTime) {
+ return fs$writeFile(path17, data2, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$writeFile, [path17, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$appendFile = fs18.appendFile;
+ if (fs$appendFile)
+ fs18.appendFile = appendFile;
+ function appendFile(path16, data, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ return go$appendFile(path16, data, options, cb);
+ function go$appendFile(path17, data2, options2, cb2, startTime) {
+ return fs$appendFile(path17, data2, options2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$appendFile, [path17, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$copyFile = fs18.copyFile;
+ if (fs$copyFile)
+ fs18.copyFile = copyFile;
+ function copyFile(src, dest, flags, cb) {
+ if (typeof flags === "function") {
+ cb = flags;
+ flags = 0;
+ }
+ return go$copyFile(src, dest, flags, cb);
+ function go$copyFile(src2, dest2, flags2, cb2, startTime) {
+ return fs$copyFile(src2, dest2, flags2, function(err) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$copyFile, [src2, dest2, flags2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ var fs$readdir = fs18.readdir;
+ fs18.readdir = readdir;
+ var noReaddirOptionVersions = /^v[0-5]\./;
+ function readdir(path16, options, cb) {
+ if (typeof options === "function")
+ cb = options, options = null;
+ var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path17, options2, cb2, startTime) {
+ return fs$readdir(path17, fs$readdirCallback(
+ path17,
+ options2,
+ cb2,
+ startTime
+ ));
+ } : function go$readdir2(path17, options2, cb2, startTime) {
+ return fs$readdir(path17, options2, fs$readdirCallback(
+ path17,
+ options2,
+ cb2,
+ startTime
+ ));
+ };
+ return go$readdir(path16, options, cb);
+ function fs$readdirCallback(path17, options2, cb2, startTime) {
+ return function(err, files) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([
+ go$readdir,
+ [path17, options2, cb2],
+ err,
+ startTime || Date.now(),
+ Date.now()
+ ]);
+ else {
+ if (files && files.sort)
+ files.sort();
+ if (typeof cb2 === "function")
+ cb2.call(this, err, files);
+ }
+ };
+ }
+ }
+ if (process.version.substr(0, 4) === "v0.8") {
+ var legStreams = legacy(fs18);
+ ReadStream2 = legStreams.ReadStream;
+ WriteStream2 = legStreams.WriteStream;
+ }
+ var fs$ReadStream = fs18.ReadStream;
+ if (fs$ReadStream) {
+ ReadStream2.prototype = Object.create(fs$ReadStream.prototype);
+ ReadStream2.prototype.open = ReadStream$open;
+ }
+ var fs$WriteStream = fs18.WriteStream;
+ if (fs$WriteStream) {
+ WriteStream2.prototype = Object.create(fs$WriteStream.prototype);
+ WriteStream2.prototype.open = WriteStream$open;
+ }
+ Object.defineProperty(fs18, "ReadStream", {
+ get: function() {
+ return ReadStream2;
+ },
+ set: function(val) {
+ ReadStream2 = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(fs18, "WriteStream", {
+ get: function() {
+ return WriteStream2;
+ },
+ set: function(val) {
+ WriteStream2 = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ var FileReadStream = ReadStream2;
+ Object.defineProperty(fs18, "FileReadStream", {
+ get: function() {
+ return FileReadStream;
+ },
+ set: function(val) {
+ FileReadStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ var FileWriteStream = WriteStream2;
+ Object.defineProperty(fs18, "FileWriteStream", {
+ get: function() {
+ return FileWriteStream;
+ },
+ set: function(val) {
+ FileWriteStream = val;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ function ReadStream2(path16, options) {
+ if (this instanceof ReadStream2)
+ return fs$ReadStream.apply(this, arguments), this;
+ else
+ return ReadStream2.apply(Object.create(ReadStream2.prototype), arguments);
+ }
+ function ReadStream$open() {
+ var that = this;
+ open(that.path, that.flags, that.mode, function(err, fd) {
+ if (err) {
+ if (that.autoClose)
+ that.destroy();
+ that.emit("error", err);
+ } else {
+ that.fd = fd;
+ that.emit("open", fd);
+ that.read();
+ }
+ });
+ }
+ function WriteStream2(path16, options) {
+ if (this instanceof WriteStream2)
+ return fs$WriteStream.apply(this, arguments), this;
+ else
+ return WriteStream2.apply(Object.create(WriteStream2.prototype), arguments);
+ }
+ function WriteStream$open() {
+ var that = this;
+ open(that.path, that.flags, that.mode, function(err, fd) {
+ if (err) {
+ that.destroy();
+ that.emit("error", err);
+ } else {
+ that.fd = fd;
+ that.emit("open", fd);
+ }
+ });
+ }
+ function createReadStream(path16, options) {
+ return new fs18.ReadStream(path16, options);
+ }
+ function createWriteStream(path16, options) {
+ return new fs18.WriteStream(path16, options);
+ }
+ var fs$open = fs18.open;
+ fs18.open = open;
+ function open(path16, flags, mode, cb) {
+ if (typeof mode === "function")
+ cb = mode, mode = null;
+ return go$open(path16, flags, mode, cb);
+ function go$open(path17, flags2, mode2, cb2, startTime) {
+ return fs$open(path17, flags2, mode2, function(err, fd) {
+ if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
+ enqueue([go$open, [path17, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
+ else {
+ if (typeof cb2 === "function")
+ cb2.apply(this, arguments);
+ }
+ });
+ }
+ }
+ return fs18;
+ }
+ function enqueue(elem) {
+ debug("ENQUEUE", elem[0].name, elem[1]);
+ fs17[gracefulQueue].push(elem);
+ retry();
+ }
+ var retryTimer;
+ function resetQueue() {
+ var now = Date.now();
+ for (var i = 0; i < fs17[gracefulQueue].length; ++i) {
+ if (fs17[gracefulQueue][i].length > 2) {
+ fs17[gracefulQueue][i][3] = now;
+ fs17[gracefulQueue][i][4] = now;
+ }
+ }
+ retry();
+ }
+ function retry() {
+ clearTimeout(retryTimer);
+ retryTimer = void 0;
+ if (fs17[gracefulQueue].length === 0)
+ return;
+ var elem = fs17[gracefulQueue].shift();
+ var fn2 = elem[0];
+ var args = elem[1];
+ var err = elem[2];
+ var startTime = elem[3];
+ var lastTime = elem[4];
+ if (startTime === void 0) {
+ debug("RETRY", fn2.name, args);
+ fn2.apply(null, args);
+ } else if (Date.now() - startTime >= 6e4) {
+ debug("TIMEOUT", fn2.name, args);
+ var cb = args.pop();
+ if (typeof cb === "function")
+ cb.call(null, err);
+ } else {
+ var sinceAttempt = Date.now() - lastTime;
+ var sinceStart = Math.max(lastTime - startTime, 1);
+ var desiredDelay = Math.min(sinceStart * 1.2, 100);
+ if (sinceAttempt >= desiredDelay) {
+ debug("RETRY", fn2.name, args);
+ fn2.apply(null, args.concat([startTime]));
+ } else {
+ fs17[gracefulQueue].push(elem);
+ }
+ }
+ if (retryTimer === void 0) {
+ retryTimer = setTimeout(retry, 0);
+ }
+ }
+ }
+});
+
+// node_modules/@zkochan/cmd-shim/index.js
+var require_cmd_shim = __commonJS({
+ "node_modules/@zkochan/cmd-shim/index.js"(exports2, module2) {
+ "use strict";
+ cmdShim2.ifExists = cmdShimIfExists;
+ var util_1 = require("util");
+ var path16 = require("path");
+ var isWindows4 = require_is_windows();
+ var CMD_EXTENSION = require_cmd_extension();
+ var shebangExpr = /^#!\s*(?:\/usr\/bin\/env(?:\s+-S\s*)?)?\s*([^ \t]+)(.*)$/;
+ var DEFAULT_OPTIONS = {
+ // Create PowerShell file by default if the option hasn't been specified
+ createPwshFile: true,
+ createCmdFile: isWindows4(),
+ fs: require_graceful_fs()
+ };
+ var extensionToProgramMap = /* @__PURE__ */ new Map([
+ [".js", "node"],
+ [".cjs", "node"],
+ [".mjs", "node"],
+ [".cmd", "cmd"],
+ [".bat", "cmd"],
+ [".ps1", "pwsh"],
+ [".sh", "sh"]
+ ]);
+ function ingestOptions(opts) {
+ const opts_ = { ...DEFAULT_OPTIONS, ...opts };
+ const fs17 = opts_.fs;
+ opts_.fs_ = {
+ chmod: fs17.chmod ? (0, util_1.promisify)(fs17.chmod) : (async () => {
+ }),
+ mkdir: (0, util_1.promisify)(fs17.mkdir),
+ readFile: (0, util_1.promisify)(fs17.readFile),
+ stat: (0, util_1.promisify)(fs17.stat),
+ unlink: (0, util_1.promisify)(fs17.unlink),
+ writeFile: (0, util_1.promisify)(fs17.writeFile)
+ };
+ return opts_;
+ }
+ async function cmdShim2(src, to, opts) {
+ const opts_ = ingestOptions(opts);
+ await cmdShim_(src, to, opts_);
+ }
+ function cmdShimIfExists(src, to, opts) {
+ return cmdShim2(src, to, opts).catch(() => {
+ });
+ }
+ function rm(path17, opts) {
+ return opts.fs_.unlink(path17).catch(() => {
+ });
+ }
+ async function cmdShim_(src, to, opts) {
+ const srcRuntimeInfo = await searchScriptRuntime(src, opts);
+ await writeShimsPreCommon(to, opts);
+ return writeAllShims(src, to, srcRuntimeInfo, opts);
+ }
+ function writeShimsPreCommon(target, opts) {
+ return opts.fs_.mkdir(path16.dirname(target), { recursive: true });
+ }
+ function writeAllShims(src, to, srcRuntimeInfo, opts) {
+ const opts_ = ingestOptions(opts);
+ const generatorAndExts = [{ generator: generateShShim, extension: "" }];
+ if (opts_.createCmdFile) {
+ generatorAndExts.push({ generator: generateCmdShim, extension: CMD_EXTENSION });
+ }
+ if (opts_.createPwshFile) {
+ generatorAndExts.push({ generator: generatePwshShim, extension: ".ps1" });
+ }
+ return Promise.all(generatorAndExts.map((generatorAndExt) => writeShim(src, to + generatorAndExt.extension, srcRuntimeInfo, generatorAndExt.generator, opts_)));
+ }
+ function writeShimPre(target, opts) {
+ return rm(target, opts);
+ }
+ function writeShimPost(target, opts) {
+ return chmodShim(target, opts);
+ }
+ async function searchScriptRuntime(target, opts) {
+ try {
+ const data = await opts.fs_.readFile(target, "utf8");
+ const firstLine = data.trim().split(/\r*\n/)[0];
+ const shebang = firstLine.match(shebangExpr);
+ if (!shebang) {
+ const targetExtension = path16.extname(target).toLowerCase();
+ return {
+ // undefined if extension is unknown but it's converted to null.
+ program: extensionToProgramMap.get(targetExtension) || null,
+ additionalArgs: ""
+ };
+ }
+ return {
+ program: shebang[1],
+ additionalArgs: shebang[2]
+ };
+ } catch (err) {
+ if (!isWindows4() || err.code !== "ENOENT")
+ throw err;
+ if (await opts.fs_.stat(`${target}${getExeExtension()}`)) {
+ return {
+ program: null,
+ additionalArgs: ""
+ };
+ }
+ throw err;
+ }
+ }
+ function getExeExtension() {
+ let cmdExtension;
+ if (process.env.PATHEXT) {
+ cmdExtension = process.env.PATHEXT.split(path16.delimiter).find((ext) => ext.toLowerCase() === ".exe");
+ }
+ return cmdExtension || ".exe";
+ }
+ async function writeShim(src, to, srcRuntimeInfo, generateShimScript, opts) {
+ const defaultArgs = opts.preserveSymlinks ? "--preserve-symlinks" : "";
+ const args = [srcRuntimeInfo.additionalArgs, defaultArgs].filter((arg) => arg).join(" ");
+ opts = Object.assign({}, opts, {
+ prog: srcRuntimeInfo.program,
+ args
+ });
+ await writeShimPre(to, opts);
+ await opts.fs_.writeFile(to, generateShimScript(src, to, opts), "utf8");
+ return writeShimPost(to, opts);
+ }
+ function generateCmdShim(src, to, opts) {
+ const shTarget = path16.relative(path16.dirname(to), src);
+ let target = shTarget.split("/").join("\\");
+ const quotedPathToTarget = path16.isAbsolute(target) ? `"${target}"` : `"%~dp0\\${target}"`;
+ let longProg;
+ let prog = opts.prog;
+ let args = opts.args || "";
+ const nodePath = normalizePathEnvVar(opts.nodePath).win32;
+ const prependToPath = normalizePathEnvVar(opts.prependToPath).win32;
+ if (!prog) {
+ prog = quotedPathToTarget;
+ args = "";
+ target = "";
+ } else if (prog === "node" && opts.nodeExecPath) {
+ prog = `"${opts.nodeExecPath}"`;
+ target = quotedPathToTarget;
+ } else {
+ longProg = `"%~dp0\\${prog}.exe"`;
+ target = quotedPathToTarget;
+ }
+ let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : "";
+ let cmd = "@SETLOCAL\r\n";
+ if (prependToPath) {
+ cmd += `@SET "PATH=${prependToPath}:%PATH%"\r
+`;
+ }
+ if (nodePath) {
+ cmd += `@IF NOT DEFINED NODE_PATH (\r
+ @SET "NODE_PATH=${nodePath}"\r
+) ELSE (\r
+ @SET "NODE_PATH=${nodePath};%NODE_PATH%"\r
+)\r
+`;
+ }
+ if (longProg) {
+ cmd += `@IF EXIST ${longProg} (\r
+ ${longProg} ${args} ${target} ${progArgs}%*\r
+) ELSE (\r
+ @SET PATHEXT=%PATHEXT:;.JS;=;%\r
+ ${prog} ${args} ${target} ${progArgs}%*\r
+)\r
+`;
+ } else {
+ cmd += `@${prog} ${args} ${target} ${progArgs}%*\r
+`;
+ }
+ return cmd;
+ }
+ function generateShShim(src, to, opts) {
+ let shTarget = path16.relative(path16.dirname(to), src);
+ let shProg = opts.prog && opts.prog.split("\\").join("/");
+ let shLongProg;
+ shTarget = shTarget.split("\\").join("/");
+ const quotedPathToTarget = path16.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`;
+ let args = opts.args || "";
+ const shNodePath = normalizePathEnvVar(opts.nodePath).posix;
+ if (!shProg) {
+ shProg = quotedPathToTarget;
+ args = "";
+ shTarget = "";
+ } else if (opts.prog === "node" && opts.nodeExecPath) {
+ shProg = `"${opts.nodeExecPath}"`;
+ shTarget = quotedPathToTarget;
+ } else {
+ shLongProg = `"$basedir/${opts.prog}"`;
+ shTarget = quotedPathToTarget;
+ }
+ let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : "";
+ let sh = `#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')")
+
+case \`uname\` in
+ *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;;
+esac
+
+`;
+ if (opts.prependToPath) {
+ sh += `export PATH="${opts.prependToPath}:$PATH"
+`;
+ }
+ if (shNodePath) {
+ sh += `if [ -z "$NODE_PATH" ]; then
+ export NODE_PATH="${shNodePath}"
+else
+ export NODE_PATH="${shNodePath}:$NODE_PATH"
+fi
+`;
+ }
+ if (shLongProg) {
+ sh += `if [ -x ${shLongProg} ]; then
+ exec ${shLongProg} ${args} ${shTarget} ${progArgs}"$@"
+else
+ exec ${shProg} ${args} ${shTarget} ${progArgs}"$@"
+fi
+`;
+ } else {
+ sh += `${shProg} ${args} ${shTarget} ${progArgs}"$@"
+exit $?
+`;
+ }
+ return sh;
+ }
+ function generatePwshShim(src, to, opts) {
+ let shTarget = path16.relative(path16.dirname(to), src);
+ const shProg = opts.prog && opts.prog.split("\\").join("/");
+ let pwshProg = shProg && `"${shProg}$exe"`;
+ let pwshLongProg;
+ shTarget = shTarget.split("\\").join("/");
+ const quotedPathToTarget = path16.isAbsolute(shTarget) ? `"${shTarget}"` : `"$basedir/${shTarget}"`;
+ let args = opts.args || "";
+ let normalizedNodePathEnvVar = normalizePathEnvVar(opts.nodePath);
+ const nodePath = normalizedNodePathEnvVar.win32;
+ const shNodePath = normalizedNodePathEnvVar.posix;
+ let normalizedPrependPathEnvVar = normalizePathEnvVar(opts.prependToPath);
+ const prependPath = normalizedPrependPathEnvVar.win32;
+ const shPrependPath = normalizedPrependPathEnvVar.posix;
+ if (!pwshProg) {
+ pwshProg = quotedPathToTarget;
+ args = "";
+ shTarget = "";
+ } else if (opts.prog === "node" && opts.nodeExecPath) {
+ pwshProg = `"${opts.nodeExecPath}"`;
+ shTarget = quotedPathToTarget;
+ } else {
+ pwshLongProg = `"$basedir/${opts.prog}$exe"`;
+ shTarget = quotedPathToTarget;
+ }
+ let progArgs = opts.progArgs ? `${opts.progArgs.join(` `)} ` : "";
+ let pwsh = `#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+${nodePath || prependPath ? '$pathsep=":"\n' : ""}${nodePath ? `$env_node_path=$env:NODE_PATH
+$new_node_path="${nodePath}"
+` : ""}${prependPath ? `$env_path=$env:PATH
+$prepend_path="${prependPath}"
+` : ""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+${nodePath || prependPath ? ' $pathsep=";"\n' : ""}}`;
+ if (shNodePath || shPrependPath) {
+ pwsh += ` else {
+${shNodePath ? ` $new_node_path="${shNodePath}"
+` : ""}${shPrependPath ? ` $prepend_path="${shPrependPath}"
+` : ""}}
+`;
+ }
+ if (shNodePath) {
+ pwsh += `if ([string]::IsNullOrEmpty($env_node_path)) {
+ $env:NODE_PATH=$new_node_path
+} else {
+ $env:NODE_PATH="$new_node_path$pathsep$env_node_path"
+}
+`;
+ }
+ if (opts.prependToPath) {
+ pwsh += `
+$env:PATH="$prepend_path$pathsep$env:PATH"
+`;
+ }
+ if (pwshLongProg) {
+ pwsh += `
+$ret=0
+if (Test-Path ${pwshLongProg}) {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args
+ } else {
+ & ${pwshLongProg} ${args} ${shTarget} ${progArgs}$args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args
+ } else {
+ & ${pwshProg} ${args} ${shTarget} ${progArgs}$args
+ }
+ $ret=$LASTEXITCODE
+}
+${nodePath ? "$env:NODE_PATH=$env_node_path\n" : ""}${prependPath ? "$env:PATH=$env_path\n" : ""}exit $ret
+`;
+ } else {
+ pwsh += `
+# Support pipeline input
+if ($MyInvocation.ExpectingInput) {
+ $input | & ${pwshProg} ${args} ${shTarget} ${progArgs}$args
+} else {
+ & ${pwshProg} ${args} ${shTarget} ${progArgs}$args
+}
+${nodePath ? "$env:NODE_PATH=$env_node_path\n" : ""}${prependPath ? "$env:PATH=$env_path\n" : ""}exit $LASTEXITCODE
+`;
+ }
+ return pwsh;
+ }
+ function chmodShim(to, opts) {
+ return opts.fs_.chmod(to, 493);
+ }
+ function normalizePathEnvVar(nodePath) {
+ if (!nodePath || !nodePath.length) {
+ return {
+ win32: "",
+ posix: ""
+ };
+ }
+ let split = typeof nodePath === "string" ? nodePath.split(path16.delimiter) : Array.from(nodePath);
+ let result = {};
+ for (let i = 0; i < split.length; i++) {
+ const win322 = split[i].split("/").join("\\");
+ const posix = isWindows4() ? split[i].split("\\").join("/").replace(/^([^:\\/]*):/, (_, $1) => `/mnt/${$1.toLowerCase()}`) : split[i];
+ result.win32 = result.win32 ? `${result.win32};${win322}` : win322;
+ result.posix = result.posix ? `${result.posix}:${posix}` : posix;
+ result[i] = { win32: win322, posix };
+ }
+ return result;
+ }
+ module2.exports = cmdShim2;
+ }
+});
+
+// node_modules/tar/dist/esm/mode-fix.js
+var modeFix;
+var init_mode_fix = __esm({
+ "node_modules/tar/dist/esm/mode-fix.js"() {
+ modeFix = (mode, isDir, portable) => {
+ mode &= 4095;
+ if (portable) {
+ mode = (mode | 384) & ~18;
+ }
+ if (isDir) {
+ if (mode & 256) {
+ mode |= 64;
+ }
+ if (mode & 32) {
+ mode |= 8;
+ }
+ if (mode & 4) {
+ mode |= 1;
+ }
+ }
+ return mode;
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/write-entry.js
+var import_fs11, import_path9, prefixPath, maxReadSize, PROCESS, FILE2, DIRECTORY2, SYMLINK2, HARDLINK2, HEADER, READ2, LSTAT, ONLSTAT, ONREAD, ONREADLINK, OPENFILE, ONOPENFILE, CLOSE, MODE, AWAITDRAIN, ONDRAIN, PREFIX, WriteEntry, WriteEntrySync, WriteEntryTar, getType;
+var init_write_entry = __esm({
+ "node_modules/tar/dist/esm/write-entry.js"() {
+ import_fs11 = __toESM(require("fs"), 1);
+ init_esm();
+ import_path9 = __toESM(require("path"), 1);
+ init_header();
+ init_mode_fix();
+ init_normalize_windows_path();
+ init_options();
+ init_pax();
+ init_strip_absolute_path();
+ init_strip_trailing_slashes();
+ init_warn_method();
+ init_winchars();
+ prefixPath = (path16, prefix) => {
+ if (!prefix) {
+ return normalizeWindowsPath(path16);
+ }
+ path16 = normalizeWindowsPath(path16).replace(/^\.(\/|$)/, "");
+ return stripTrailingSlashes(prefix) + "/" + path16;
+ };
+ maxReadSize = 16 * 1024 * 1024;
+ PROCESS = /* @__PURE__ */ Symbol("process");
+ FILE2 = /* @__PURE__ */ Symbol("file");
+ DIRECTORY2 = /* @__PURE__ */ Symbol("directory");
+ SYMLINK2 = /* @__PURE__ */ Symbol("symlink");
+ HARDLINK2 = /* @__PURE__ */ Symbol("hardlink");
+ HEADER = /* @__PURE__ */ Symbol("header");
+ READ2 = /* @__PURE__ */ Symbol("read");
+ LSTAT = /* @__PURE__ */ Symbol("lstat");
+ ONLSTAT = /* @__PURE__ */ Symbol("onlstat");
+ ONREAD = /* @__PURE__ */ Symbol("onread");
+ ONREADLINK = /* @__PURE__ */ Symbol("onreadlink");
+ OPENFILE = /* @__PURE__ */ Symbol("openfile");
+ ONOPENFILE = /* @__PURE__ */ Symbol("onopenfile");
+ CLOSE = /* @__PURE__ */ Symbol("close");
+ MODE = /* @__PURE__ */ Symbol("mode");
+ AWAITDRAIN = /* @__PURE__ */ Symbol("awaitDrain");
+ ONDRAIN = /* @__PURE__ */ Symbol("ondrain");
+ PREFIX = /* @__PURE__ */ Symbol("prefix");
+ WriteEntry = class extends Minipass {
+ path;
+ portable;
+ myuid = process.getuid && process.getuid() || 0;
+ // until node has builtin pwnam functions, this'll have to do
+ myuser = process.env.USER || "";
+ maxReadSize;
+ linkCache;
+ statCache;
+ preservePaths;
+ cwd;
+ strict;
+ mtime;
+ noPax;
+ noMtime;
+ prefix;
+ fd;
+ blockLen = 0;
+ blockRemain = 0;
+ buf;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ offset = 0;
+ win32;
+ absolute;
+ header;
+ type;
+ linkpath;
+ stat;
+ onWriteEntry;
+ #hadError = false;
+ constructor(p, opt_ = {}) {
+ const opt = dealias(opt_);
+ super();
+ this.path = normalizeWindowsPath(p);
+ this.portable = !!opt.portable;
+ this.maxReadSize = opt.maxReadSize || maxReadSize;
+ this.linkCache = opt.linkCache || /* @__PURE__ */ new Map();
+ this.statCache = opt.statCache || /* @__PURE__ */ new Map();
+ this.preservePaths = !!opt.preservePaths;
+ this.cwd = normalizeWindowsPath(opt.cwd || process.cwd());
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.mtime = opt.mtime;
+ this.prefix = opt.prefix ? normalizeWindowsPath(opt.prefix) : void 0;
+ this.onWriteEntry = opt.onWriteEntry;
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root && typeof stripped === "string") {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.win32 = !!opt.win32 || process.platform === "win32";
+ if (this.win32) {
+ this.path = decode(this.path.replaceAll(/\\/g, "/"));
+ p = p.replaceAll(/\\/g, "/");
+ }
+ this.absolute = normalizeWindowsPath(opt.absolute || import_path9.default.resolve(this.cwd, p));
+ if (this.path === "") {
+ this.path = "./";
+ }
+ if (pathWarn) {
+ this.warn("TAR_ENTRY_INFO", `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path
+ });
+ }
+ const cs = this.statCache.get(this.absolute);
+ if (cs) {
+ this[ONLSTAT](cs);
+ } else {
+ this[LSTAT]();
+ }
+ }
+ warn(code2, message, data = {}) {
+ return warnMethod(this, code2, message, data);
+ }
+ emit(ev, ...data) {
+ if (ev === "error") {
+ this.#hadError = true;
+ }
+ return super.emit(ev, ...data);
+ }
+ [LSTAT]() {
+ import_fs11.default.lstat(this.absolute, (er, stat) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONLSTAT](stat);
+ });
+ }
+ [ONLSTAT](stat) {
+ this.statCache.set(this.absolute, stat);
+ this.stat = stat;
+ if (!stat.isFile()) {
+ stat.size = 0;
+ }
+ this.type = getType(stat);
+ this.emit("stat", stat);
+ this[PROCESS]();
+ }
+ [PROCESS]() {
+ switch (this.type) {
+ case "File":
+ return this[FILE2]();
+ case "Directory":
+ return this[DIRECTORY2]();
+ case "SymbolicLink":
+ return this[SYMLINK2]();
+ // unsupported types are ignored.
+ default:
+ return this.end();
+ }
+ }
+ [MODE](mode) {
+ return modeFix(mode, this.type === "Directory", this.portable);
+ }
+ [PREFIX](path16) {
+ return prefixPath(path16, this.prefix);
+ }
+ [HEADER]() {
+ if (!this.stat) {
+ throw new Error("cannot write header before stat");
+ }
+ if (this.type === "Directory" && this.portable) {
+ this.noMtime = true;
+ }
+ this.onWriteEntry?.(this);
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ // only apply the prefix to hard links.
+ linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[PREFIX](this.linkpath) : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this[MODE](this.stat.mode),
+ uid: this.portable ? void 0 : this.stat.uid,
+ gid: this.portable ? void 0 : this.stat.gid,
+ size: this.stat.size,
+ mtime: this.noMtime ? void 0 : this.mtime || this.stat.mtime,
+ /* c8 ignore next */
+ type: this.type === "Unsupported" ? void 0 : this.type,
+ uname: this.portable ? void 0 : this.stat.uid === this.myuid ? this.myuser : "",
+ atime: this.portable ? void 0 : this.stat.atime,
+ ctime: this.portable ? void 0 : this.stat.ctime
+ });
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? void 0 : this.header.atime,
+ ctime: this.portable ? void 0 : this.header.ctime,
+ gid: this.portable ? void 0 : this.header.gid,
+ mtime: this.noMtime ? void 0 : this.mtime || this.header.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[PREFIX](this.linkpath) : this.linkpath,
+ size: this.header.size,
+ uid: this.portable ? void 0 : this.header.uid,
+ uname: this.portable ? void 0 : this.header.uname,
+ dev: this.portable ? void 0 : this.stat.dev,
+ ino: this.portable ? void 0 : this.stat.ino,
+ nlink: this.portable ? void 0 : this.stat.nlink
+ }).encode());
+ }
+ const block = this.header?.block;
+ if (!block) {
+ throw new Error("failed to encode header");
+ }
+ super.write(block);
+ }
+ [DIRECTORY2]() {
+ if (!this.stat) {
+ throw new Error("cannot create directory entry without stat");
+ }
+ if (this.path.slice(-1) !== "/") {
+ this.path += "/";
+ }
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [SYMLINK2]() {
+ import_fs11.default.readlink(this.absolute, (er, linkpath) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONREADLINK](linkpath);
+ });
+ }
+ [ONREADLINK](linkpath) {
+ this.linkpath = normalizeWindowsPath(linkpath);
+ this[HEADER]();
+ this.end();
+ }
+ [HARDLINK2](linkpath) {
+ if (!this.stat) {
+ throw new Error("cannot create link entry without stat");
+ }
+ this.type = "Link";
+ this.linkpath = normalizeWindowsPath(import_path9.default.relative(this.cwd, linkpath));
+ this.stat.size = 0;
+ this[HEADER]();
+ this.end();
+ }
+ [FILE2]() {
+ if (!this.stat) {
+ throw new Error("cannot create file entry without stat");
+ }
+ if (this.stat.nlink > 1) {
+ const linkKey = `${this.stat.dev}:${this.stat.ino}`;
+ const linkpath = this.linkCache.get(linkKey);
+ if (linkpath?.indexOf(this.cwd) === 0) {
+ return this[HARDLINK2](linkpath);
+ }
+ this.linkCache.set(linkKey, this.absolute);
+ }
+ this[HEADER]();
+ if (this.stat.size === 0) {
+ return this.end();
+ }
+ this[OPENFILE]();
+ }
+ [OPENFILE]() {
+ import_fs11.default.open(this.absolute, "r", (er, fd) => {
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONOPENFILE](fd);
+ });
+ }
+ [ONOPENFILE](fd) {
+ this.fd = fd;
+ if (this.#hadError) {
+ return this[CLOSE]();
+ }
+ if (!this.stat) {
+ throw new Error("should stat before calling onopenfile");
+ }
+ this.blockLen = 512 * Math.ceil(this.stat.size / 512);
+ this.blockRemain = this.blockLen;
+ const bufLen = Math.min(this.blockLen, this.maxReadSize);
+ this.buf = Buffer.allocUnsafe(bufLen);
+ this.offset = 0;
+ this.pos = 0;
+ this.remain = this.stat.size;
+ this.length = this.buf.length;
+ this[READ2]();
+ }
+ [READ2]() {
+ const { fd, buf, offset, length, pos: pos2 } = this;
+ if (fd === void 0 || buf === void 0) {
+ throw new Error("cannot read file without first opening");
+ }
+ import_fs11.default.read(fd, buf, offset, length, pos2, (er, bytesRead) => {
+ if (er) {
+ return this[CLOSE](() => this.emit("error", er));
+ }
+ this[ONREAD](bytesRead);
+ });
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => {
+ }) {
+ if (this.fd !== void 0)
+ import_fs11.default.close(this.fd, cb);
+ }
+ [ONREAD](bytesRead) {
+ if (bytesRead <= 0 && this.remain > 0) {
+ const er = Object.assign(new Error("encountered unexpected EOF"), {
+ path: this.absolute,
+ syscall: "read",
+ code: "EOF"
+ });
+ return this[CLOSE](() => this.emit("error", er));
+ }
+ if (bytesRead > this.remain) {
+ const er = Object.assign(new Error("did not encounter expected EOF"), {
+ path: this.absolute,
+ syscall: "read",
+ code: "EOF"
+ });
+ return this[CLOSE](() => this.emit("error", er));
+ }
+ if (!this.buf) {
+ throw new Error("should have created buffer prior to reading");
+ }
+ if (bytesRead === this.remain) {
+ for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {
+ this.buf[i + this.offset] = 0;
+ bytesRead++;
+ this.remain++;
+ }
+ }
+ const chunk = this.offset === 0 && bytesRead === this.buf.length ? this.buf : this.buf.subarray(this.offset, this.offset + bytesRead);
+ const flushed = this.write(chunk);
+ if (!flushed) {
+ this[AWAITDRAIN](() => this[ONDRAIN]());
+ } else {
+ this[ONDRAIN]();
+ }
+ }
+ [AWAITDRAIN](cb) {
+ this.once("drain", cb);
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, typeof encoding === "string" ? encoding : "utf8");
+ }
+ if (this.blockRemain < chunk.length) {
+ const er = Object.assign(new Error("writing more data than expected"), {
+ path: this.absolute
+ });
+ return this.emit("error", er);
+ }
+ this.remain -= chunk.length;
+ this.blockRemain -= chunk.length;
+ this.pos += chunk.length;
+ this.offset += chunk.length;
+ return super.write(chunk, null, cb);
+ }
+ [ONDRAIN]() {
+ if (!this.remain) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ return this[CLOSE]((er) => er ? this.emit("error", er) : this.end());
+ }
+ if (!this.buf) {
+ throw new Error("buffer lost somehow in ONDRAIN");
+ }
+ if (this.offset >= this.length) {
+ this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));
+ this.offset = 0;
+ }
+ this.length = this.buf.length - this.offset;
+ this[READ2]();
+ }
+ };
+ WriteEntrySync = class extends WriteEntry {
+ sync = true;
+ [LSTAT]() {
+ this[ONLSTAT](import_fs11.default.lstatSync(this.absolute));
+ }
+ [SYMLINK2]() {
+ this[ONREADLINK](import_fs11.default.readlinkSync(this.absolute));
+ }
+ [OPENFILE]() {
+ this[ONOPENFILE](import_fs11.default.openSync(this.absolute, "r"));
+ }
+ [READ2]() {
+ let threw = true;
+ try {
+ const { fd, buf, offset, length, pos: pos2 } = this;
+ if (fd === void 0 || buf === void 0) {
+ throw new Error("fd and buf must be set in READ method");
+ }
+ const bytesRead = import_fs11.default.readSync(fd, buf, offset, length, pos2);
+ this[ONREAD](bytesRead);
+ threw = false;
+ } finally {
+ if (threw) {
+ try {
+ this[CLOSE](() => {
+ });
+ } catch {
+ }
+ }
+ }
+ }
+ [AWAITDRAIN](cb) {
+ cb();
+ }
+ /* c8 ignore start */
+ [CLOSE](cb = () => {
+ }) {
+ if (this.fd !== void 0)
+ import_fs11.default.closeSync(this.fd);
+ cb();
+ }
+ };
+ WriteEntryTar = class extends Minipass {
+ blockLen = 0;
+ blockRemain = 0;
+ buf = 0;
+ pos = 0;
+ remain = 0;
+ length = 0;
+ preservePaths;
+ portable;
+ strict;
+ noPax;
+ noMtime;
+ readEntry;
+ type;
+ prefix;
+ path;
+ mode;
+ uid;
+ gid;
+ uname;
+ gname;
+ header;
+ mtime;
+ atime;
+ ctime;
+ linkpath;
+ size;
+ onWriteEntry;
+ warn(code2, message, data = {}) {
+ return warnMethod(this, code2, message, data);
+ }
+ constructor(readEntry, opt_ = {}) {
+ const opt = dealias(opt_);
+ super();
+ this.preservePaths = !!opt.preservePaths;
+ this.portable = !!opt.portable;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.noMtime = !!opt.noMtime;
+ this.onWriteEntry = opt.onWriteEntry;
+ this.readEntry = readEntry;
+ const { type } = readEntry;
+ if (type === "Unsupported") {
+ throw new Error("writing entry that should be ignored");
+ }
+ this.type = type;
+ if (this.type === "Directory" && this.portable) {
+ this.noMtime = true;
+ }
+ this.prefix = opt.prefix;
+ this.path = normalizeWindowsPath(readEntry.path);
+ this.mode = readEntry.mode !== void 0 ? this[MODE](readEntry.mode) : void 0;
+ this.uid = this.portable ? void 0 : readEntry.uid;
+ this.gid = this.portable ? void 0 : readEntry.gid;
+ this.uname = this.portable ? void 0 : readEntry.uname;
+ this.gname = this.portable ? void 0 : readEntry.gname;
+ this.size = readEntry.size;
+ this.mtime = this.noMtime ? void 0 : opt.mtime || readEntry.mtime;
+ this.atime = this.portable ? void 0 : readEntry.atime;
+ this.ctime = this.portable ? void 0 : readEntry.ctime;
+ this.linkpath = readEntry.linkpath !== void 0 ? normalizeWindowsPath(readEntry.linkpath) : void 0;
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ let pathWarn = false;
+ if (!this.preservePaths) {
+ const [root, stripped] = stripAbsolutePath(this.path);
+ if (root && typeof stripped === "string") {
+ this.path = stripped;
+ pathWarn = root;
+ }
+ }
+ this.remain = readEntry.size;
+ this.blockRemain = readEntry.startBlockSize;
+ this.onWriteEntry?.(this);
+ this.header = new Header({
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[PREFIX](this.linkpath) : this.linkpath,
+ // only the permissions and setuid/setgid/sticky bitflags
+ // not the higher-order bits that specify file type
+ mode: this.mode,
+ uid: this.portable ? void 0 : this.uid,
+ gid: this.portable ? void 0 : this.gid,
+ size: this.size,
+ mtime: this.noMtime ? void 0 : this.mtime,
+ type: this.type,
+ uname: this.portable ? void 0 : this.uname,
+ atime: this.portable ? void 0 : this.atime,
+ ctime: this.portable ? void 0 : this.ctime
+ });
+ if (pathWarn) {
+ this.warn("TAR_ENTRY_INFO", `stripping ${pathWarn} from absolute path`, {
+ entry: this,
+ path: pathWarn + this.path
+ });
+ }
+ if (this.header.encode() && !this.noPax) {
+ super.write(new Pax({
+ atime: this.portable ? void 0 : this.atime,
+ ctime: this.portable ? void 0 : this.ctime,
+ gid: this.portable ? void 0 : this.gid,
+ mtime: this.noMtime ? void 0 : this.mtime,
+ path: this[PREFIX](this.path),
+ linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[PREFIX](this.linkpath) : this.linkpath,
+ size: this.size,
+ uid: this.portable ? void 0 : this.uid,
+ uname: this.portable ? void 0 : this.uname,
+ dev: this.portable ? void 0 : this.readEntry.dev,
+ ino: this.portable ? void 0 : this.readEntry.ino,
+ nlink: this.portable ? void 0 : this.readEntry.nlink
+ }).encode());
+ }
+ const b = this.header?.block;
+ if (!b)
+ throw new Error("failed to encode header");
+ super.write(b);
+ readEntry.pipe(this);
+ }
+ [PREFIX](path16) {
+ return prefixPath(path16, this.prefix);
+ }
+ [MODE](mode) {
+ return modeFix(mode, this.type === "Directory", this.portable);
+ }
+ write(chunk, encoding, cb) {
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, typeof encoding === "string" ? encoding : "utf8");
+ }
+ const writeLen = chunk.length;
+ if (writeLen > this.blockRemain) {
+ throw new Error("writing more to entry than is appropriate");
+ }
+ this.blockRemain -= writeLen;
+ return super.write(chunk, cb);
+ }
+ end(chunk, encoding, cb) {
+ if (this.blockRemain) {
+ super.write(Buffer.alloc(this.blockRemain));
+ }
+ if (typeof chunk === "function") {
+ cb = chunk;
+ encoding = void 0;
+ chunk = void 0;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, encoding ?? "utf8");
+ }
+ if (cb)
+ this.once("finish", cb);
+ if (chunk)
+ super.end(chunk, cb);
+ else
+ super.end(cb);
+ return this;
+ }
+ };
+ getType = (stat) => stat.isFile() ? "File" : stat.isDirectory() ? "Directory" : stat.isSymbolicLink() ? "SymbolicLink" : "Unsupported";
+ }
+});
+
+// node_modules/yallist/dist/esm/index.js
+function insertAfter(self2, node, value) {
+ const prev = node;
+ const next = node ? node.next : self2.head;
+ const inserted = new Node(value, prev, next, self2);
+ if (inserted.next === void 0) {
+ self2.tail = inserted;
+ }
+ if (inserted.prev === void 0) {
+ self2.head = inserted;
+ }
+ self2.length++;
+ return inserted;
+}
+function push(self2, item) {
+ self2.tail = new Node(item, self2.tail, void 0, self2);
+ if (!self2.head) {
+ self2.head = self2.tail;
+ }
+ self2.length++;
+}
+function unshift(self2, item) {
+ self2.head = new Node(item, void 0, self2.head, self2);
+ if (!self2.tail) {
+ self2.tail = self2.head;
+ }
+ self2.length++;
+}
+var Yallist, Node;
+var init_esm5 = __esm({
+ "node_modules/yallist/dist/esm/index.js"() {
+ Yallist = class _Yallist {
+ tail;
+ head;
+ length = 0;
+ static create(list2 = []) {
+ return new _Yallist(list2);
+ }
+ constructor(list2 = []) {
+ for (const item of list2) {
+ this.push(item);
+ }
+ }
+ *[Symbol.iterator]() {
+ for (let walker = this.head; walker; walker = walker.next) {
+ yield walker.value;
+ }
+ }
+ removeNode(node) {
+ if (node.list !== this) {
+ throw new Error("removing node which does not belong to this list");
+ }
+ const next = node.next;
+ const prev = node.prev;
+ if (next) {
+ next.prev = prev;
+ }
+ if (prev) {
+ prev.next = next;
+ }
+ if (node === this.head) {
+ this.head = next;
+ }
+ if (node === this.tail) {
+ this.tail = prev;
+ }
+ this.length--;
+ node.next = void 0;
+ node.prev = void 0;
+ node.list = void 0;
+ return next;
+ }
+ unshiftNode(node) {
+ if (node === this.head) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const head = this.head;
+ node.list = this;
+ node.next = head;
+ if (head) {
+ head.prev = node;
+ }
+ this.head = node;
+ if (!this.tail) {
+ this.tail = node;
+ }
+ this.length++;
+ }
+ pushNode(node) {
+ if (node === this.tail) {
+ return;
+ }
+ if (node.list) {
+ node.list.removeNode(node);
+ }
+ const tail = this.tail;
+ node.list = this;
+ node.prev = tail;
+ if (tail) {
+ tail.next = node;
+ }
+ this.tail = node;
+ if (!this.head) {
+ this.head = node;
+ }
+ this.length++;
+ }
+ push(...args) {
+ for (let i = 0, l = args.length; i < l; i++) {
+ push(this, args[i]);
+ }
+ return this.length;
+ }
+ unshift(...args) {
+ for (var i = 0, l = args.length; i < l; i++) {
+ unshift(this, args[i]);
+ }
+ return this.length;
+ }
+ pop() {
+ if (!this.tail) {
+ return void 0;
+ }
+ const res = this.tail.value;
+ const t = this.tail;
+ this.tail = this.tail.prev;
+ if (this.tail) {
+ this.tail.next = void 0;
+ } else {
+ this.head = void 0;
+ }
+ t.list = void 0;
+ this.length--;
+ return res;
+ }
+ shift() {
+ if (!this.head) {
+ return void 0;
+ }
+ const res = this.head.value;
+ const h = this.head;
+ this.head = this.head.next;
+ if (this.head) {
+ this.head.prev = void 0;
+ } else {
+ this.tail = void 0;
+ }
+ h.list = void 0;
+ this.length--;
+ return res;
+ }
+ forEach(fn2, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.head, i = 0; !!walker; i++) {
+ fn2.call(thisp, walker.value, i, this);
+ walker = walker.next;
+ }
+ }
+ forEachReverse(fn2, thisp) {
+ thisp = thisp || this;
+ for (let walker = this.tail, i = this.length - 1; !!walker; i--) {
+ fn2.call(thisp, walker.value, i, this);
+ walker = walker.prev;
+ }
+ }
+ get(n) {
+ let i = 0;
+ let walker = this.head;
+ for (; !!walker && i < n; i++) {
+ walker = walker.next;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ getReverse(n) {
+ let i = 0;
+ let walker = this.tail;
+ for (; !!walker && i < n; i++) {
+ walker = walker.prev;
+ }
+ if (i === n && !!walker) {
+ return walker.value;
+ }
+ }
+ map(fn2, thisp) {
+ thisp = thisp || this;
+ const res = new _Yallist();
+ for (let walker = this.head; !!walker; ) {
+ res.push(fn2.call(thisp, walker.value, this));
+ walker = walker.next;
+ }
+ return res;
+ }
+ mapReverse(fn2, thisp) {
+ thisp = thisp || this;
+ var res = new _Yallist();
+ for (let walker = this.tail; !!walker; ) {
+ res.push(fn2.call(thisp, walker.value, this));
+ walker = walker.prev;
+ }
+ return res;
+ }
+ reduce(fn2, initial) {
+ let acc;
+ let walker = this.head;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.head) {
+ walker = this.head.next;
+ acc = this.head.value;
+ } else {
+ throw new TypeError("Reduce of empty list with no initial value");
+ }
+ for (var i = 0; !!walker; i++) {
+ acc = fn2(acc, walker.value, i);
+ walker = walker.next;
+ }
+ return acc;
+ }
+ reduceReverse(fn2, initial) {
+ let acc;
+ let walker = this.tail;
+ if (arguments.length > 1) {
+ acc = initial;
+ } else if (this.tail) {
+ walker = this.tail.prev;
+ acc = this.tail.value;
+ } else {
+ throw new TypeError("Reduce of empty list with no initial value");
+ }
+ for (let i = this.length - 1; !!walker; i--) {
+ acc = fn2(acc, walker.value, i);
+ walker = walker.prev;
+ }
+ return acc;
+ }
+ toArray() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.head; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.next;
+ }
+ return arr;
+ }
+ toArrayReverse() {
+ const arr = new Array(this.length);
+ for (let i = 0, walker = this.tail; !!walker; i++) {
+ arr[i] = walker.value;
+ walker = walker.prev;
+ }
+ return arr;
+ }
+ slice(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new _Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let walker = this.head;
+ let i = 0;
+ for (i = 0; !!walker && i < from; i++) {
+ walker = walker.next;
+ }
+ for (; !!walker && i < to; i++, walker = walker.next) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ sliceReverse(from = 0, to = this.length) {
+ if (to < 0) {
+ to += this.length;
+ }
+ if (from < 0) {
+ from += this.length;
+ }
+ const ret = new _Yallist();
+ if (to < from || to < 0) {
+ return ret;
+ }
+ if (from < 0) {
+ from = 0;
+ }
+ if (to > this.length) {
+ to = this.length;
+ }
+ let i = this.length;
+ let walker = this.tail;
+ for (; !!walker && i > to; i--) {
+ walker = walker.prev;
+ }
+ for (; !!walker && i > from; i--, walker = walker.prev) {
+ ret.push(walker.value);
+ }
+ return ret;
+ }
+ splice(start, deleteCount = 0, ...nodes) {
+ if (start > this.length) {
+ start = this.length - 1;
+ }
+ if (start < 0) {
+ start = this.length + start;
+ }
+ let walker = this.head;
+ for (let i = 0; !!walker && i < start; i++) {
+ walker = walker.next;
+ }
+ const ret = [];
+ for (let i = 0; !!walker && i < deleteCount; i++) {
+ ret.push(walker.value);
+ walker = this.removeNode(walker);
+ }
+ if (!walker) {
+ walker = this.tail;
+ } else if (walker !== this.tail) {
+ walker = walker.prev;
+ }
+ for (const v of nodes) {
+ walker = insertAfter(this, walker, v);
+ }
+ return ret;
+ }
+ reverse() {
+ const head = this.head;
+ const tail = this.tail;
+ for (let walker = head; !!walker; walker = walker.prev) {
+ const p = walker.prev;
+ walker.prev = walker.next;
+ walker.next = p;
+ }
+ this.head = tail;
+ this.tail = head;
+ return this;
+ }
+ };
+ Node = class {
+ list;
+ next;
+ prev;
+ value;
+ constructor(value, prev, next, list2) {
+ this.list = list2;
+ this.value = value;
+ if (prev) {
+ prev.next = this;
+ this.prev = prev;
+ } else {
+ this.prev = void 0;
+ }
+ if (next) {
+ next.prev = this;
+ this.next = next;
+ } else {
+ this.next = void 0;
+ }
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/pack.js
+var import_fs12, import_path10, PackJob, EOF2, ONSTAT, ENDED3, QUEUE2, PENDINGLINKS, CURRENT, PROCESS2, PROCESSING, PROCESSJOB, JOBS, JOBDONE, ADDFSENTRY, ADDTARENTRY, STAT, READDIR, ONREADDIR, PIPE, ENTRY, ENTRYOPT, WRITEENTRYCLASS, WRITE, ONDRAIN2, Pack, PackSync;
+var init_pack = __esm({
+ "node_modules/tar/dist/esm/pack.js"() {
+ import_fs12 = __toESM(require("fs"), 1);
+ init_write_entry();
+ init_esm();
+ init_esm3();
+ init_esm5();
+ init_read_entry();
+ init_warn_method();
+ import_path10 = __toESM(require("path"), 1);
+ init_normalize_windows_path();
+ PackJob = class {
+ path;
+ absolute;
+ entry;
+ stat;
+ readdir;
+ pending = false;
+ pendingLink = false;
+ ignore = false;
+ piped = false;
+ constructor(path16, absolute) {
+ this.path = path16 || "./";
+ this.absolute = absolute;
+ }
+ };
+ EOF2 = Buffer.alloc(1024);
+ ONSTAT = /* @__PURE__ */ Symbol("onStat");
+ ENDED3 = /* @__PURE__ */ Symbol("ended");
+ QUEUE2 = /* @__PURE__ */ Symbol("queue");
+ PENDINGLINKS = /* @__PURE__ */ Symbol("queue");
+ CURRENT = /* @__PURE__ */ Symbol("current");
+ PROCESS2 = /* @__PURE__ */ Symbol("process");
+ PROCESSING = /* @__PURE__ */ Symbol("processing");
+ PROCESSJOB = /* @__PURE__ */ Symbol("processJob");
+ JOBS = /* @__PURE__ */ Symbol("jobs");
+ JOBDONE = /* @__PURE__ */ Symbol("jobDone");
+ ADDFSENTRY = /* @__PURE__ */ Symbol("addFSEntry");
+ ADDTARENTRY = /* @__PURE__ */ Symbol("addTarEntry");
+ STAT = /* @__PURE__ */ Symbol("stat");
+ READDIR = /* @__PURE__ */ Symbol("readdir");
+ ONREADDIR = /* @__PURE__ */ Symbol("onreaddir");
+ PIPE = /* @__PURE__ */ Symbol("pipe");
+ ENTRY = /* @__PURE__ */ Symbol("entry");
+ ENTRYOPT = /* @__PURE__ */ Symbol("entryOpt");
+ WRITEENTRYCLASS = /* @__PURE__ */ Symbol("writeEntryClass");
+ WRITE = /* @__PURE__ */ Symbol("write");
+ ONDRAIN2 = /* @__PURE__ */ Symbol("ondrain");
+ Pack = class extends Minipass {
+ sync = false;
+ opt;
+ cwd;
+ maxReadSize;
+ preservePaths;
+ strict;
+ noPax;
+ prefix;
+ linkCache;
+ statCache;
+ file;
+ portable;
+ zip;
+ readdirCache;
+ noDirRecurse;
+ follow;
+ noMtime;
+ mtime;
+ filter;
+ jobs;
+ [WRITEENTRYCLASS];
+ onWriteEntry;
+ // Note: we actually DO need a linked list here, because we
+ // shift() to update the head of the list where we start, but still
+ // while that happens, need to know what the next item in the queue
+ // will be. Since we do multiple jobs in parallel, it's not as simple
+ // as just an Array.shift(), since that would lose the information about
+ // the next job in the list. We could add a .next field on the PackJob
+ // class, but then we'd have to be tracking the tail of the queue the
+ // whole time, and Yallist just does that for us anyway.
+ [QUEUE2];
+ [PENDINGLINKS] = /* @__PURE__ */ new Map();
+ [JOBS] = 0;
+ [PROCESSING] = false;
+ [ENDED3] = false;
+ constructor(opt = {}) {
+ super();
+ this.opt = opt;
+ this.file = opt.file || "";
+ this.cwd = opt.cwd || process.cwd();
+ this.maxReadSize = opt.maxReadSize;
+ this.preservePaths = !!opt.preservePaths;
+ this.strict = !!opt.strict;
+ this.noPax = !!opt.noPax;
+ this.prefix = normalizeWindowsPath(opt.prefix || "");
+ this.linkCache = opt.linkCache || /* @__PURE__ */ new Map();
+ this.statCache = opt.statCache || /* @__PURE__ */ new Map();
+ this.readdirCache = opt.readdirCache || /* @__PURE__ */ new Map();
+ this.onWriteEntry = opt.onWriteEntry;
+ this[WRITEENTRYCLASS] = WriteEntry;
+ if (typeof opt.onwarn === "function") {
+ this.on("warn", opt.onwarn);
+ }
+ this.portable = !!opt.portable;
+ if (opt.gzip || opt.brotli || opt.zstd) {
+ if ((opt.gzip ? 1 : 0) + (opt.brotli ? 1 : 0) + (opt.zstd ? 1 : 0) > 1) {
+ throw new TypeError("gzip, brotli, zstd are mutually exclusive");
+ }
+ if (opt.gzip) {
+ if (typeof opt.gzip !== "object") {
+ opt.gzip = {};
+ }
+ if (this.portable) {
+ opt.gzip.portable = true;
+ }
+ this.zip = new Gzip(opt.gzip);
+ }
+ if (opt.brotli) {
+ if (typeof opt.brotli !== "object") {
+ opt.brotli = {};
+ }
+ this.zip = new BrotliCompress(opt.brotli);
+ }
+ if (opt.zstd) {
+ if (typeof opt.zstd !== "object") {
+ opt.zstd = {};
+ }
+ this.zip = new ZstdCompress(opt.zstd);
+ }
+ if (!this.zip)
+ throw new Error("impossible");
+ const zip = this.zip;
+ zip.on("data", (chunk) => super.write(chunk));
+ zip.on("end", () => super.end());
+ zip.on("drain", () => this[ONDRAIN2]());
+ this.on("resume", () => zip.resume());
+ } else {
+ this.on("drain", this[ONDRAIN2]);
+ }
+ this.noDirRecurse = !!opt.noDirRecurse;
+ this.follow = !!opt.follow;
+ this.noMtime = !!opt.noMtime;
+ if (opt.mtime)
+ this.mtime = opt.mtime;
+ this.filter = typeof opt.filter === "function" ? opt.filter : () => true;
+ this[QUEUE2] = new Yallist();
+ this[JOBS] = 0;
+ this.jobs = Number(opt.jobs) || 4;
+ this[PROCESSING] = false;
+ this[ENDED3] = false;
+ }
+ [WRITE](chunk) {
+ return super.write(chunk);
+ }
+ add(path16) {
+ this.write(path16);
+ return this;
+ }
+ end(path16, encoding, cb) {
+ if (typeof path16 === "function") {
+ cb = path16;
+ path16 = void 0;
+ }
+ if (typeof encoding === "function") {
+ cb = encoding;
+ encoding = void 0;
+ }
+ if (path16) {
+ this.add(path16);
+ }
+ this[ENDED3] = true;
+ this[PROCESS2]();
+ if (cb)
+ cb();
+ return this;
+ }
+ write(path16) {
+ if (this[ENDED3]) {
+ throw new Error("write after end");
+ }
+ if (path16 instanceof ReadEntry) {
+ this[ADDTARENTRY](path16);
+ } else {
+ this[ADDFSENTRY](path16);
+ }
+ return this.flowing;
+ }
+ [ADDTARENTRY](p) {
+ const absolute = normalizeWindowsPath(import_path10.default.resolve(this.cwd, p.path));
+ if (!this.filter(p.path, p)) {
+ p.resume();
+ } else {
+ const job = new PackJob(p.path, absolute);
+ job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));
+ job.entry.on("end", () => this[JOBDONE](job));
+ this[JOBS] += 1;
+ this[QUEUE2].push(job);
+ }
+ this[PROCESS2]();
+ }
+ [ADDFSENTRY](p) {
+ const absolute = normalizeWindowsPath(import_path10.default.resolve(this.cwd, p));
+ this[QUEUE2].push(new PackJob(p, absolute));
+ this[PROCESS2]();
+ }
+ [STAT](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ const stat = this.follow ? "stat" : "lstat";
+ import_fs12.default[stat](job.absolute, (er, stat2) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ this.emit("error", er);
+ } else {
+ this[ONSTAT](job, stat2);
+ }
+ });
+ }
+ [ONSTAT](job, stat) {
+ this.statCache.set(job.absolute, stat);
+ job.stat = stat;
+ if (!this.filter(job.path, stat)) {
+ job.ignore = true;
+ } else if (stat.isFile() && stat.nlink > 1 && !this.linkCache.get(`${stat.dev}:${stat.ino}`) && !this.sync) {
+ if (job === this[CURRENT]) {
+ this[PROCESSJOB](job);
+ } else {
+ const key = `${stat.dev}:${stat.ino}`;
+ const pending = this[PENDINGLINKS].get(key);
+ if (pending)
+ pending.push(job);
+ else
+ this[PENDINGLINKS].set(key, [job]);
+ job.pendingLink = true;
+ job.pending = true;
+ }
+ }
+ this[PROCESS2]();
+ }
+ [READDIR](job) {
+ job.pending = true;
+ this[JOBS] += 1;
+ import_fs12.default.readdir(job.absolute, (er, entries) => {
+ job.pending = false;
+ this[JOBS] -= 1;
+ if (er) {
+ return this.emit("error", er);
+ }
+ this[ONREADDIR](job, entries);
+ });
+ }
+ [ONREADDIR](job, entries) {
+ this.readdirCache.set(job.absolute, entries);
+ job.readdir = entries;
+ this[PROCESS2]();
+ }
+ [PROCESS2]() {
+ if (this[PROCESSING]) {
+ return;
+ }
+ this[PROCESSING] = true;
+ for (let w = this[QUEUE2].head; !!w && this[JOBS] < this.jobs; w = w.next) {
+ this[PROCESSJOB](w.value);
+ if (w.value.ignore) {
+ const p = w.next;
+ this[QUEUE2].removeNode(w);
+ w.next = p;
+ }
+ }
+ this[PROCESSING] = false;
+ if (this[ENDED3] && this[QUEUE2].length === 0 && this[JOBS] === 0) {
+ if (this.zip) {
+ this.zip.end(EOF2);
+ } else {
+ super.write(EOF2);
+ super.end();
+ }
+ }
+ }
+ get [CURRENT]() {
+ return this[QUEUE2] && this[QUEUE2].head && this[QUEUE2].head.value;
+ }
+ [JOBDONE](job) {
+ this[QUEUE2].shift();
+ this[JOBS] -= 1;
+ const { stat } = job;
+ if (stat && stat.isFile() && stat.nlink > 1) {
+ const key = `${stat.dev}:${stat.ino}`;
+ const pending = this[PENDINGLINKS].get(key);
+ if (pending) {
+ this[PENDINGLINKS].delete(key);
+ for (const job2 of pending) {
+ job2.pending = false;
+ this[PROCESSJOB](job2);
+ }
+ }
+ }
+ this[PROCESS2]();
+ }
+ [PROCESSJOB](job) {
+ if (job.pending && job.pendingLink && job === this[CURRENT]) {
+ job.pending = false;
+ job.pendingLink = false;
+ }
+ if (job.pending) {
+ return;
+ }
+ if (job.entry) {
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ return;
+ }
+ if (!job.stat) {
+ const sc = this.statCache.get(job.absolute);
+ if (sc) {
+ this[ONSTAT](job, sc);
+ } else {
+ this[STAT](job);
+ }
+ }
+ if (!job.stat) {
+ return;
+ }
+ if (job.ignore) {
+ return;
+ }
+ if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) {
+ const rc = this.readdirCache.get(job.absolute);
+ if (rc) {
+ this[ONREADDIR](job, rc);
+ } else {
+ this[READDIR](job);
+ }
+ if (!job.readdir) {
+ return;
+ }
+ }
+ job.entry = this[ENTRY](job);
+ if (!job.entry) {
+ job.ignore = true;
+ return;
+ }
+ if (job === this[CURRENT] && !job.piped) {
+ this[PIPE](job);
+ }
+ }
+ [ENTRYOPT](job) {
+ return {
+ onwarn: (code2, msg, data) => this.warn(code2, msg, data),
+ noPax: this.noPax,
+ cwd: this.cwd,
+ absolute: job.absolute,
+ preservePaths: this.preservePaths,
+ maxReadSize: this.maxReadSize,
+ strict: this.strict,
+ portable: this.portable,
+ linkCache: this.linkCache,
+ statCache: this.statCache,
+ noMtime: this.noMtime,
+ mtime: this.mtime,
+ prefix: this.prefix,
+ onWriteEntry: this.onWriteEntry
+ };
+ }
+ [ENTRY](job) {
+ this[JOBS] += 1;
+ try {
+ const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job));
+ return e.on("end", () => this[JOBDONE](job)).on("error", (er) => this.emit("error", er));
+ } catch (er) {
+ this.emit("error", er);
+ }
+ }
+ [ONDRAIN2]() {
+ if (this[CURRENT] && this[CURRENT].entry) {
+ this[CURRENT].entry.resume();
+ }
+ }
+ // like .pipe() but using super, because our write() is special
+ [PIPE](job) {
+ job.piped = true;
+ if (job.readdir) {
+ job.readdir.forEach((entry) => {
+ const p = job.path;
+ const base = p === "./" ? "" : p.replace(/\/*$/, "/");
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ const source = job.entry;
+ const zip = this.zip;
+ if (!source)
+ throw new Error("cannot pipe without source");
+ if (zip) {
+ source.on("data", (chunk) => {
+ if (!zip.write(chunk)) {
+ source.pause();
+ }
+ });
+ } else {
+ source.on("data", (chunk) => {
+ if (!super.write(chunk)) {
+ source.pause();
+ }
+ });
+ }
+ }
+ pause() {
+ if (this.zip) {
+ this.zip.pause();
+ }
+ return super.pause();
+ }
+ warn(code2, message, data = {}) {
+ warnMethod(this, code2, message, data);
+ }
+ };
+ PackSync = class extends Pack {
+ sync = true;
+ constructor(opt) {
+ super(opt);
+ this[WRITEENTRYCLASS] = WriteEntrySync;
+ }
+ // pause/resume are no-ops in sync streams.
+ pause() {
+ }
+ resume() {
+ }
+ [STAT](job) {
+ const stat = this.follow ? "statSync" : "lstatSync";
+ this[ONSTAT](job, import_fs12.default[stat](job.absolute));
+ }
+ [READDIR](job) {
+ this[ONREADDIR](job, import_fs12.default.readdirSync(job.absolute));
+ }
+ // gotta get it all in this tick
+ [PIPE](job) {
+ const source = job.entry;
+ const zip = this.zip;
+ if (job.readdir) {
+ job.readdir.forEach((entry) => {
+ const p = job.path;
+ const base = p === "./" ? "" : p.replace(/\/*$/, "/");
+ this[ADDFSENTRY](base + entry);
+ });
+ }
+ if (!source)
+ throw new Error("Cannot pipe without source");
+ if (zip) {
+ source.on("data", (chunk) => {
+ zip.write(chunk);
+ });
+ } else {
+ source.on("data", (chunk) => {
+ super[WRITE](chunk);
+ });
+ }
+ }
+ };
+ }
+});
+
+// node_modules/tar/dist/esm/create.js
+var create_exports = {};
+__export(create_exports, {
+ create: () => create
+});
+var import_node_path8, createFileSync, createFile, addFilesSync, addFilesAsync, createSync, createAsync, create;
+var init_create = __esm({
+ "node_modules/tar/dist/esm/create.js"() {
+ init_esm2();
+ import_node_path8 = __toESM(require("node:path"), 1);
+ init_list();
+ init_make_command();
+ init_pack();
+ createFileSync = (opt, files) => {
+ const p = new PackSync(opt);
+ const stream = new WriteStreamSync(opt.file, {
+ mode: opt.mode || 438
+ });
+ p.pipe(stream);
+ addFilesSync(p, files);
+ };
+ createFile = (opt, files) => {
+ const p = new Pack(opt);
+ const stream = new WriteStream(opt.file, {
+ mode: opt.mode || 438
+ });
+ p.pipe(stream);
+ const promise = new Promise((res, rej) => {
+ stream.on("error", rej);
+ stream.on("close", res);
+ p.on("error", rej);
+ });
+ addFilesAsync(p, files).catch((er) => p.emit("error", er));
+ return promise;
+ };
+ addFilesSync = (p, files) => {
+ files.forEach((file) => {
+ if (file.charAt(0) === "@") {
+ list({
+ file: import_node_path8.default.resolve(p.cwd, file.slice(1)),
+ sync: true,
+ noResume: true,
+ onReadEntry: (entry) => p.add(entry)
+ });
+ } else {
+ p.add(file);
+ }
+ });
+ p.end();
+ };
+ addFilesAsync = async (p, files) => {
+ for (const file of files) {
+ if (file.charAt(0) === "@") {
+ await list({
+ file: import_node_path8.default.resolve(String(p.cwd), file.slice(1)),
+ noResume: true,
+ onReadEntry: (entry) => {
+ p.add(entry);
+ }
+ });
+ } else {
+ p.add(file);
+ }
+ }
+ p.end();
+ };
+ createSync = (opt, files) => {
+ const p = new PackSync(opt);
+ addFilesSync(p, files);
+ return p;
+ };
+ createAsync = (opt, files) => {
+ const p = new Pack(opt);
+ addFilesAsync(p, files).catch((er) => p.emit("error", er));
+ return p;
+ };
+ create = makeCommand(createFileSync, createFile, createSync, createAsync, (_opt, files) => {
+ if (!files?.length) {
+ throw new TypeError("no paths specified to add to archive");
+ }
+ });
+ }
+});
+
+// node_modules/semver/functions/major.js
+var require_major = __commonJS({
+ "node_modules/semver/functions/major.js"(exports2, module2) {
+ "use strict";
+ var SemVer3 = require_semver();
+ var major = (a, loose) => new SemVer3(a, loose).major;
+ module2.exports = major;
+ }
+});
+
+// sources/_lib.ts
+var lib_exports2 = {};
+__export(lib_exports2, {
+ runMain: () => runMain
+});
+module.exports = __toCommonJS(lib_exports2);
+
+// sources/main.ts
+var import_clipanion17 = __toESM(require_advanced());
+
+// package.json
+var version = "0.35.0";
+
+// sources/Engine.ts
+var import_clipanion5 = __toESM(require_advanced());
+var import_fs6 = __toESM(require("fs"));
+var import_path5 = __toESM(require("path"));
+var import_process3 = __toESM(require("process"));
+var import_rcompare = __toESM(require_rcompare());
+var import_valid3 = __toESM(require_valid());
+var import_valid4 = __toESM(require_valid2());
+
+// config.json
+var config_default = {
+ definitions: {
+ npm: {
+ default: "11.14.1+sha1.4a6839650da0005f323fec6abd39d77ee24f842f",
+ fetchLatestFrom: {
+ type: "npm",
+ package: "npm"
+ },
+ transparent: {
+ commands: [
+ [
+ "npm",
+ "init"
+ ],
+ [
+ "npx"
+ ]
+ ]
+ },
+ ranges: {
+ "*": {
+ url: "https://registry.npmjs.org/npm/-/npm-{}.tgz",
+ bin: {
+ npm: "./bin/npm-cli.js",
+ npx: "./bin/npx-cli.js"
+ },
+ registry: {
+ type: "npm",
+ package: "npm"
+ },
+ commands: {
+ use: [
+ "npm",
+ "install"
+ ]
+ }
+ }
+ }
+ },
+ pnpm: {
+ default: "11.1.2+sha1.ed39d701687311ce9345771c62376f9fe7286694",
+ fetchLatestFrom: {
+ type: "npm",
+ package: "pnpm"
+ },
+ transparent: {
+ commands: [
+ [
+ "pnpm",
+ "init"
+ ],
+ [
+ "pnpx"
+ ],
+ [
+ "pnpm",
+ "dlx"
+ ]
+ ]
+ },
+ ranges: {
+ "<6.0.0": {
+ url: "https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz",
+ bin: {
+ pnpm: "./bin/pnpm.js",
+ pnpx: "./bin/pnpx.js"
+ },
+ registry: {
+ type: "npm",
+ package: "pnpm"
+ },
+ commands: {
+ use: [
+ "pnpm",
+ "install"
+ ]
+ }
+ },
+ "6.x || 7.x || 8.x || 9.x || 10.x": {
+ url: "https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz",
+ bin: {
+ pnpm: "./bin/pnpm.cjs",
+ pnpx: "./bin/pnpx.cjs"
+ },
+ registry: {
+ type: "npm",
+ package: "pnpm"
+ },
+ commands: {
+ use: [
+ "pnpm",
+ "install"
+ ]
+ }
+ },
+ ">=11.0.0": {
+ url: "https://registry.npmjs.org/pnpm/-/pnpm-{}.tgz",
+ bin: {
+ pnpm: "./bin/pnpm.mjs",
+ pnpx: "./bin/pnpx.mjs"
+ },
+ registry: {
+ type: "npm",
+ package: "pnpm"
+ },
+ commands: {
+ use: [
+ "pnpm",
+ "install"
+ ]
+ }
+ }
+ }
+ },
+ yarn: {
+ default: "1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610",
+ fetchLatestFrom: {
+ type: "npm",
+ package: "yarn"
+ },
+ transparent: {
+ default: "4.14.1+sha224.88b7a7244bbd9040380c417f7eb556d85c67640b651f113cb4c72113",
+ commands: [
+ [
+ "yarn",
+ "init"
+ ],
+ [
+ "yarn",
+ "dlx"
+ ]
+ ]
+ },
+ ranges: {
+ "<2.0.0": {
+ url: "https://registry.yarnpkg.com/yarn/-/yarn-{}.tgz",
+ bin: {
+ yarn: "./bin/yarn.js",
+ yarnpkg: "./bin/yarn.js"
+ },
+ registry: {
+ type: "npm",
+ package: "yarn"
+ },
+ commands: {
+ use: [
+ "yarn",
+ "install"
+ ]
+ }
+ },
+ ">=2.0.0": {
+ name: "yarn",
+ url: "https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",
+ bin: [
+ "yarn",
+ "yarnpkg"
+ ],
+ registry: {
+ type: "url",
+ url: "https://repo.yarnpkg.com/tags",
+ fields: {
+ tags: "aliases",
+ versions: "tags"
+ }
+ },
+ npmRegistry: {
+ type: "npm",
+ package: "@yarnpkg/cli-dist",
+ bin: "bin/yarn.js"
+ },
+ commands: {
+ use: [
+ "yarn",
+ "install"
+ ]
+ }
+ }
+ }
+ }
+ },
+ keys: {
+ npm: [
+ {
+ expires: "2025-01-29T00:00:00.000Z",
+ keyid: "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
+ keytype: "ecdsa-sha2-nistp256",
+ scheme: "ecdsa-sha2-nistp256",
+ key: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1Olb3zMAFFxXKHiIkQO5cJ3Yhl5i6UPp+IhuteBJbuHcA5UogKo0EWtlWwW6KSaKoTNEYL7JlCQiVnkhBktUgg=="
+ },
+ {
+ expires: null,
+ keyid: "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
+ keytype: "ecdsa-sha2-nistp256",
+ scheme: "ecdsa-sha2-nistp256",
+ key: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEY6Ya7W++7aUPzvMTrezH6Ycx3c+HOKYCcNGybJZSCJq/fd7Qa8uuAKtdIkUQtQiEKERhAmE5lMMJhP8OkDOa2g=="
+ }
+ ]
+ }
+};
+
+// sources/corepackUtils.ts
+var import_crypto2 = require("crypto");
+var import_events4 = require("events");
+var import_fs4 = __toESM(require("fs"));
+var import_module = __toESM(require("module"));
+var import_path3 = __toESM(require("path"));
+var import_range = __toESM(require_range());
+var import_semver = __toESM(require_semver());
+var import_lt = __toESM(require_lt());
+var import_parse3 = __toESM(require_parse());
+var import_promises2 = require("timers/promises");
+
+// sources/debugUtils.ts
+var import_debug = __toESM(require_src());
+var log = (0, import_debug.default)(`corepack`);
+
+// sources/folderUtils.ts
+var import_clipanion = __toESM(require_advanced());
+var import_fs = require("fs");
+var import_os = require("os");
+var import_path = require("path");
+var import_process = __toESM(require("process"));
+var INSTALL_FOLDER_VERSION = 1;
+function getCorepackHomeFolder() {
+ return import_process.default.env.COREPACK_HOME ?? (0, import_path.join)(
+ import_process.default.env.XDG_CACHE_HOME ?? import_process.default.env.LOCALAPPDATA ?? (0, import_path.join)((0, import_os.homedir)(), import_process.default.platform === `win32` ? `AppData/Local` : `.cache`),
+ `node/corepack`
+ );
+}
+function getInstallFolder() {
+ return (0, import_path.join)(
+ getCorepackHomeFolder(),
+ `v${INSTALL_FOLDER_VERSION}`
+ );
+}
+function getTemporaryFolder(target = (0, import_os.tmpdir)()) {
+ (0, import_fs.mkdirSync)(target, { recursive: true });
+ while (true) {
+ const rnd = Math.random() * 4294967296;
+ const hex = rnd.toString(16).padStart(8, `0`);
+ const path16 = (0, import_path.join)(target, `corepack-${import_process.default.pid}-${hex}`);
+ try {
+ (0, import_fs.mkdirSync)(path16);
+ return path16;
+ } catch (error) {
+ if (error.code === `EEXIST`) {
+ continue;
+ } else if (error.code === `EACCES`) {
+ throw new import_clipanion.UsageError(`Failed to create cache directory. Please ensure the user has write access to the target directory (${target}). If the user's home directory does not exist, create it first.`);
+ } else {
+ throw error;
+ }
+ }
+ }
+}
+
+// sources/httpUtils.ts
+var import_assert = __toESM(require("assert"));
+var import_clipanion3 = __toESM(require_advanced());
+var import_events = require("events");
+var import_process2 = require("process");
+var import_stream = require("stream");
+
+// sources/npmRegistryUtils.ts
+var import_clipanion2 = __toESM(require_advanced());
+var import_crypto = require("crypto");
+var DEFAULT_HEADERS = {
+ [`Accept`]: `application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8`
+};
+var DEFAULT_NPM_REGISTRY_URL = `https://registry.npmjs.org`;
+async function fetchAsJson2(packageName, version2) {
+ const npmRegistryUrl = process.env.COREPACK_NPM_REGISTRY || DEFAULT_NPM_REGISTRY_URL;
+ if (process.env.COREPACK_ENABLE_NETWORK === `0`)
+ throw new import_clipanion2.UsageError(`Network access disabled by the environment; can't reach npm repository ${npmRegistryUrl}`);
+ const headers = { ...DEFAULT_HEADERS };
+ if (`COREPACK_NPM_TOKEN` in process.env) {
+ headers.authorization = `Bearer ${process.env.COREPACK_NPM_TOKEN}`;
+ } else if (`COREPACK_NPM_USERNAME` in process.env && `COREPACK_NPM_PASSWORD` in process.env) {
+ const encodedCreds = Buffer.from(`${process.env.COREPACK_NPM_USERNAME}:${process.env.COREPACK_NPM_PASSWORD}`, `utf8`).toString(`base64`);
+ headers.authorization = `Basic ${encodedCreds}`;
+ }
+ return fetchAsJson(`${npmRegistryUrl}/${packageName}${version2 ? `/${version2}` : ``}`, { headers });
+}
+function verifySignature({ signatures, integrity, packageName, version: version2 }) {
+ if (!Array.isArray(signatures) || !signatures.length) throw new Error(`No compatible signature found in package metadata`);
+ const { npm: trustedKeys } = process.env.COREPACK_INTEGRITY_KEYS ? JSON.parse(process.env.COREPACK_INTEGRITY_KEYS) : config_default.keys;
+ let signature;
+ let key;
+ for (const k of trustedKeys) {
+ signature = signatures.find(({ keyid }) => keyid === k.keyid);
+ if (signature != null) {
+ key = k.key;
+ break;
+ }
+ }
+ if (signature?.sig == null) throw new import_clipanion2.UsageError(`The package was not signed by any trusted keys: ${JSON.stringify({ signatures, trustedKeys }, void 0, 2)}`);
+ const verifier = (0, import_crypto.createVerify)(`SHA256`);
+ verifier.end(`${packageName}@${version2}:${integrity}`);
+ const valid = verifier.verify(
+ `-----BEGIN PUBLIC KEY-----
+${key}
+-----END PUBLIC KEY-----`,
+ signature.sig,
+ `base64`
+ );
+ if (!valid) {
+ throw new Error(`Signature does not match`);
+ }
+}
+async function fetchLatestStableVersion(packageName) {
+ const metadata = await fetchAsJson2(packageName, `latest`);
+ const { version: version2, dist: { integrity, signatures, shasum } } = metadata;
+ if (!shouldSkipIntegrityCheck()) {
+ try {
+ verifySignature({
+ packageName,
+ version: version2,
+ integrity,
+ signatures
+ });
+ } catch (cause) {
+ throw new Error(`Corepack cannot download the latest stable version of ${packageName}; you can disable signature verification by setting COREPACK_INTEGRITY_CHECK to 0 in your env, or instruct Corepack to use the latest stable release known by this version of Corepack by setting COREPACK_USE_LATEST to 0`, { cause });
+ }
+ }
+ return `${version2}+${integrity ? `sha512.${Buffer.from(integrity.slice(7), `base64`).toString(`hex`)}` : `sha1.${shasum}`}`;
+}
+async function fetchAvailableTags(packageName) {
+ const metadata = await fetchAsJson2(packageName);
+ return metadata[`dist-tags`];
+}
+async function fetchAvailableVersions(packageName) {
+ const metadata = await fetchAsJson2(packageName);
+ return Object.keys(metadata.versions);
+}
+async function fetchTarballURLAndSignature(packageName, version2) {
+ const versionMetadata = await fetchAsJson2(packageName, version2);
+ const { tarball, signatures, integrity } = versionMetadata.dist;
+ if (tarball === void 0 || !tarball.startsWith(`http`))
+ throw new Error(`${packageName}@${version2} does not have a valid tarball.`);
+ return { tarball, signatures, integrity };
+}
+
+// sources/httpUtils.ts
+async function fetch(input, init) {
+ if (process.env.COREPACK_ENABLE_NETWORK === `0`)
+ throw new import_clipanion3.UsageError(`Network access disabled by the environment; can't reach ${input}`);
+ if (typeof input === `string`)
+ input = new URL(input);
+ let headers = init?.headers;
+ const username = input.username || process.env.COREPACK_NPM_USERNAME;
+ const password = input.password || process.env.COREPACK_NPM_PASSWORD;
+ if (username || password) {
+ headers = {
+ ...headers,
+ authorization: `Basic ${Buffer.from(`${username}:${password}`).toString(`base64`)}`
+ };
+ input.username = input.password = ``;
+ }
+ const registry = process.env.COREPACK_NPM_TOKEN && new URL(process.env.COREPACK_NPM_REGISTRY || DEFAULT_NPM_REGISTRY_URL);
+ if (registry && input.origin === registry.origin) {
+ headers = {
+ ...headers,
+ authorization: `Bearer ${process.env.COREPACK_NPM_TOKEN}`
+ };
+ }
+ let response;
+ try {
+ response = await globalThis.fetch(input, {
+ ...init,
+ headers
+ });
+ } catch (error) {
+ throw new Error(
+ `Error when performing the request to ${input}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`,
+ { cause: error }
+ );
+ }
+ if (!response.ok) {
+ await response.arrayBuffer();
+ throw new Error(
+ `Server answered with HTTP ${response.status} when performing the request to ${input}; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting`
+ );
+ }
+ return response;
+}
+async function fetchAsJson(input, init) {
+ const response = await fetch(input, init);
+ return response.json();
+}
+async function fetchUrlStream(input, init) {
+ if (process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT === `1`) {
+ console.error(`! Corepack is about to download ${input}`);
+ if (import_process2.stdin.isTTY && !process.env.CI) {
+ import_process2.stderr.write(`? Do you want to continue? [Y/n] `);
+ import_process2.stdin.resume();
+ const chars = await (0, import_events.once)(import_process2.stdin, `data`);
+ import_process2.stdin.pause();
+ if (chars[0][0] === 110 || chars[0][0] === 78)
+ throw new import_clipanion3.UsageError(`Aborted by the user`);
+ console.error();
+ }
+ }
+ const response = await fetch(input, init);
+ const webStream = response.body;
+ (0, import_assert.default)(webStream, `Expected stream to be set`);
+ const stream = import_stream.Readable.fromWeb(webStream);
+ return stream;
+}
+
+// sources/nodeUtils.ts
+var import_os2 = __toESM(require("os"));
+function isNodeError(err) {
+ return !!err?.code;
+}
+function isExistError(err) {
+ return err.code === `EEXIST` || err.code === `ENOTEMPTY`;
+}
+function getEndOfLine(content) {
+ const matches = content.match(/\r?\n/g);
+ if (matches === null)
+ return import_os2.default.EOL;
+ const crlf = matches.filter((nl) => nl === `\r
+`).length;
+ const lf = matches.length - crlf;
+ return crlf > lf ? `\r
+` : `
+`;
+}
+function normalizeLineEndings(originalContent, newContent) {
+ return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
+}
+function getIndent(content) {
+ const indentMatch = content.match(/^[ \t]+/m);
+ if (indentMatch) {
+ return indentMatch[0];
+ } else {
+ return ` `;
+ }
+}
+function stripBOM(content) {
+ if (content.charCodeAt(0) === 65279) {
+ return content.slice(1);
+ } else {
+ return content;
+ }
+}
+function readPackageJson(content) {
+ return {
+ data: JSON.parse(stripBOM(content) || `{}`),
+ indent: getIndent(content)
+ };
+}
+
+// sources/corepackUtils.ts
+var YARN_SWITCH_REGEX = /[/\\]switch[/\\]bin[/\\]/;
+function isYarnSwitchPath(p) {
+ return YARN_SWITCH_REGEX.test(p);
+}
+function getRegistryFromPackageManagerSpec(spec) {
+ return process.env.COREPACK_NPM_REGISTRY ? spec.npmRegistry ?? spec.registry : spec.registry;
+}
+async function fetchLatestStableVersion2(spec) {
+ switch (spec.type) {
+ case `npm`: {
+ return await fetchLatestStableVersion(spec.package);
+ }
+ case `url`: {
+ const data = await fetchAsJson(spec.url);
+ return data[spec.fields.tags].stable;
+ }
+ default: {
+ throw new Error(`Unsupported specification ${JSON.stringify(spec)}`);
+ }
+ }
+}
+async function fetchAvailableTags2(spec) {
+ switch (spec.type) {
+ case `npm`: {
+ return await fetchAvailableTags(spec.package);
+ }
+ case `url`: {
+ const data = await fetchAsJson(spec.url);
+ return data[spec.fields.tags];
+ }
+ default: {
+ throw new Error(`Unsupported specification ${JSON.stringify(spec)}`);
+ }
+ }
+}
+async function fetchAvailableVersions2(spec) {
+ switch (spec.type) {
+ case `npm`: {
+ return await fetchAvailableVersions(spec.package);
+ }
+ case `url`: {
+ const data = await fetchAsJson(spec.url);
+ const field = data[spec.fields.versions];
+ return Array.isArray(field) ? field : Object.keys(field);
+ }
+ default: {
+ throw new Error(`Unsupported specification ${JSON.stringify(spec)}`);
+ }
+ }
+}
+async function findInstalledVersion(installTarget, descriptor) {
+ const installFolder = import_path3.default.join(installTarget, descriptor.name);
+ let cacheDirectory;
+ try {
+ cacheDirectory = await import_fs4.default.promises.opendir(installFolder);
+ } catch (error) {
+ if (isNodeError(error) && error.code === `ENOENT`) {
+ return null;
+ } else {
+ throw error;
+ }
+ }
+ const range = new import_range.default(descriptor.range);
+ let bestMatch = null;
+ let maxSV = void 0;
+ for await (const { name: name2 } of cacheDirectory) {
+ if (name2.startsWith(`.`))
+ continue;
+ if (range.test(name2) && maxSV?.compare(name2) !== 1) {
+ bestMatch = name2;
+ maxSV = new import_semver.default(bestMatch);
+ }
+ }
+ return bestMatch;
+}
+function isSupportedPackageManagerDescriptor(descriptor) {
+ return !URL.canParse(descriptor.range);
+}
+function isSupportedPackageManagerLocator(locator) {
+ return !URL.canParse(locator.reference);
+}
+function parseURLReference(locator) {
+ const { hash, href } = new URL(locator.reference);
+ if (hash) {
+ return {
+ version: encodeURIComponent(href.slice(0, -hash.length)),
+ build: hash.slice(1).split(`.`)
+ };
+ }
+ return { version: encodeURIComponent(href), build: [] };
+}
+function isValidBinList(x) {
+ return Array.isArray(x) && x.length > 0;
+}
+function isValidBinSpec(x) {
+ return typeof x === `object` && x !== null && !Array.isArray(x) && Object.keys(x).length > 0;
+}
+async function download(installTarget, url, algo, binPath = null) {
+ const tmpFolder = getTemporaryFolder(installTarget);
+ log(`Downloading to ${tmpFolder}`);
+ const stream = await fetchUrlStream(url);
+ const parsedUrl = new URL(url);
+ const ext = import_path3.default.posix.extname(parsedUrl.pathname);
+ let outputFile = null;
+ let sendTo;
+ if (ext === `.tgz`) {
+ const { extract: tarX } = await Promise.resolve().then(() => (init_extract(), extract_exports));
+ sendTo = tarX({
+ strip: 1,
+ cwd: tmpFolder,
+ filter: binPath ? (path16) => {
+ const pos2 = path16.indexOf(`/`);
+ return pos2 !== -1 && path16.slice(pos2 + 1) === binPath;
+ } : void 0
+ });
+ } else if (ext === `.js`) {
+ outputFile = import_path3.default.join(tmpFolder, import_path3.default.posix.basename(parsedUrl.pathname));
+ sendTo = import_fs4.default.createWriteStream(outputFile);
+ }
+ stream.pipe(sendTo);
+ let hash = !binPath ? stream.pipe((0, import_crypto2.createHash)(algo)) : null;
+ await (0, import_events4.once)(sendTo, `finish`);
+ if (binPath) {
+ const downloadedBin = import_path3.default.join(tmpFolder, binPath);
+ outputFile = import_path3.default.join(tmpFolder, import_path3.default.basename(downloadedBin));
+ try {
+ await renameSafe(downloadedBin, outputFile);
+ } catch (err) {
+ if (isNodeError(err) && err.code === `ENOENT`)
+ throw new Error(`Cannot locate '${binPath}' in downloaded tarball`, { cause: err });
+ if (isNodeError(err) && isExistError(err)) {
+ await import_fs4.default.promises.rm(downloadedBin);
+ } else {
+ throw err;
+ }
+ }
+ const fileStream = import_fs4.default.createReadStream(outputFile);
+ hash = fileStream.pipe((0, import_crypto2.createHash)(algo));
+ await (0, import_events4.once)(fileStream, `close`);
+ }
+ return {
+ tmpFolder,
+ outputFile,
+ hash: hash.digest(`hex`)
+ };
+}
+async function installVersion(installTarget, locator, { spec }) {
+ const locatorIsASupportedPackageManager = isSupportedPackageManagerLocator(locator);
+ const locatorReference = locatorIsASupportedPackageManager ? (0, import_parse3.default)(locator.reference) : parseURLReference(locator);
+ const { version: version2, build } = locatorReference;
+ const installFolder = import_path3.default.join(installTarget, locator.name, version2);
+ try {
+ const corepackFile = import_path3.default.join(installFolder, `.corepack`);
+ const corepackContent = await import_fs4.default.promises.readFile(corepackFile, `utf8`);
+ const corepackData = JSON.parse(corepackContent);
+ log(`Reusing ${locator.name}@${locator.reference} found in ${installFolder}`);
+ return {
+ hash: corepackData.hash,
+ location: installFolder,
+ bin: corepackData.bin
+ };
+ } catch (err) {
+ if (isNodeError(err) && err.code !== `ENOENT`) {
+ throw err;
+ }
+ }
+ let url;
+ let signatures;
+ let integrity;
+ let binPath = null;
+ if (locatorIsASupportedPackageManager) {
+ url = spec.url.replace(`{}`, version2);
+ if (process.env.COREPACK_NPM_REGISTRY) {
+ const registry = getRegistryFromPackageManagerSpec(spec);
+ if (registry.type === `npm`) {
+ ({ tarball: url, signatures, integrity } = await fetchTarballURLAndSignature(registry.package, version2));
+ if (registry.bin) {
+ binPath = registry.bin;
+ }
+ }
+ url = url.replace(
+ DEFAULT_NPM_REGISTRY_URL,
+ () => process.env.COREPACK_NPM_REGISTRY
+ );
+ }
+ } else {
+ url = decodeURIComponent(version2);
+ if (process.env.COREPACK_NPM_REGISTRY && url.startsWith(DEFAULT_NPM_REGISTRY_URL)) {
+ url = url.replace(
+ DEFAULT_NPM_REGISTRY_URL,
+ () => process.env.COREPACK_NPM_REGISTRY
+ );
+ }
+ }
+ log(`Installing ${locator.name}@${version2} from ${url}`);
+ const algo = build[0] ?? `sha512`;
+ const { tmpFolder, outputFile, hash: actualHash } = await download(installTarget, url, algo, binPath);
+ let bin;
+ const isSingleFile = outputFile !== null;
+ if (isSingleFile) {
+ if (locatorIsASupportedPackageManager && isValidBinList(spec.bin)) {
+ bin = spec.bin;
+ } else {
+ bin = [locator.name];
+ }
+ } else {
+ if (locatorIsASupportedPackageManager && isValidBinSpec(spec.bin)) {
+ bin = spec.bin;
+ } else {
+ const { name: packageName, bin: packageBin } = require(import_path3.default.join(tmpFolder, `package.json`));
+ if (typeof packageBin === `string`) {
+ bin = { [packageName]: packageBin };
+ } else if (isValidBinSpec(packageBin)) {
+ bin = packageBin;
+ } else {
+ throw new Error(`Unable to locate bin in package.json`);
+ }
+ }
+ }
+ if (!build[1]) {
+ const registry = getRegistryFromPackageManagerSpec(spec);
+ if (registry.type === `npm` && !registry.bin && !shouldSkipIntegrityCheck()) {
+ if (signatures == null || integrity == null)
+ ({ signatures, integrity } = await fetchTarballURLAndSignature(registry.package, version2));
+ verifySignature({ signatures, integrity, packageName: registry.package, version: version2 });
+ build[1] = Buffer.from(integrity.slice(`sha512-`.length), `base64`).toString(`hex`);
+ }
+ }
+ if (build[1] && actualHash !== build[1])
+ throw new Error(`Mismatch hashes. Expected ${build[1]}, got ${actualHash}`);
+ const serializedHash = `${algo}.${actualHash}`;
+ await import_fs4.default.promises.writeFile(import_path3.default.join(tmpFolder, `.corepack`), JSON.stringify({
+ locator,
+ bin,
+ hash: serializedHash
+ }));
+ await import_fs4.default.promises.mkdir(import_path3.default.dirname(installFolder), { recursive: true });
+ try {
+ await renameSafe(tmpFolder, installFolder);
+ } catch (err) {
+ if (isNodeError(err) && (isExistError(err) || // On Windows the error code is EPERM so we check if it is a directory
+ err.code === `EPERM` && (await import_fs4.default.promises.stat(installFolder)).isDirectory())) {
+ log(`Another instance of corepack installed ${locator.name}@${locator.reference}`);
+ await import_fs4.default.promises.rm(tmpFolder, { recursive: true, force: true });
+ } else {
+ throw err;
+ }
+ }
+ if (locatorIsASupportedPackageManager && process.env.COREPACK_DEFAULT_TO_LATEST !== `0`) {
+ const lastKnownGood = await getLastKnownGood();
+ const defaultVersion = getLastKnownGoodFromFileContent(lastKnownGood, locator.name);
+ if (defaultVersion) {
+ const currentDefault = (0, import_parse3.default)(defaultVersion);
+ const downloadedVersion = locatorReference;
+ if (currentDefault.major === downloadedVersion.major && (0, import_lt.default)(currentDefault, downloadedVersion)) {
+ await activatePackageManager(lastKnownGood, locator);
+ }
+ }
+ }
+ log(`Download and install of ${locator.name}@${locator.reference} is finished`);
+ return {
+ location: installFolder,
+ bin,
+ hash: serializedHash
+ };
+}
+async function renameSafe(oldPath, newPath) {
+ if (process.platform === `win32`) {
+ await renameUnderWindows(oldPath, newPath);
+ } else {
+ await import_fs4.default.promises.rename(oldPath, newPath);
+ }
+}
+async function renameUnderWindows(oldPath, newPath) {
+ const retries = 5;
+ for (let i = 0; i < retries; i++) {
+ try {
+ await import_fs4.default.promises.rename(oldPath, newPath);
+ break;
+ } catch (err) {
+ if (isNodeError(err) && (err.code === `ENOENT` || err.code === `EPERM`) && i < retries - 1) {
+ await (0, import_promises2.setTimeout)(100 * 2 ** i);
+ continue;
+ } else {
+ throw err;
+ }
+ }
+ }
+}
+async function runVersion(locator, installSpec, binName, args) {
+ let binPath = null;
+ const bin = installSpec.bin ?? installSpec.spec.bin;
+ if (Array.isArray(bin)) {
+ if (bin.some((name2) => name2 === binName)) {
+ const parsedUrl = new URL(installSpec.spec.url);
+ const ext = import_path3.default.posix.extname(parsedUrl.pathname);
+ if (ext === `.js`) {
+ binPath = import_path3.default.join(installSpec.location, import_path3.default.posix.basename(parsedUrl.pathname));
+ }
+ }
+ } else {
+ for (const [name2, dest] of Object.entries(bin)) {
+ if (name2 === binName) {
+ binPath = import_path3.default.join(installSpec.location, dest);
+ break;
+ }
+ }
+ }
+ if (!binPath)
+ throw new Error(`Assertion failed: Unable to locate path for bin '${binName}'`);
+ if (!import_module.default.enableCompileCache) {
+ if (locator.name !== `npm` || (0, import_lt.default)(locator.reference, `9.7.0`)) {
+ await Promise.resolve().then(() => __toESM(require_v8_compile_cache()));
+ }
+ }
+ process.env.COREPACK_ROOT = import_path3.default.dirname(require.resolve("corepack/package.json"));
+ process.argv = [
+ process.execPath,
+ binPath,
+ ...args
+ ];
+ process.execArgv = [];
+ process.mainModule = void 0;
+ process.nextTick(import_module.default.runMain, binPath);
+ if (import_module.default.flushCompileCache) {
+ setImmediate(import_module.default.flushCompileCache);
+ }
+}
+function shouldSkipIntegrityCheck() {
+ return process.env.COREPACK_INTEGRITY_KEYS === `` || process.env.COREPACK_INTEGRITY_KEYS === `0`;
+}
+
+// sources/semverUtils.ts
+var import_range2 = __toESM(require_range());
+var import_semver2 = __toESM(require_semver());
+function satisfiesWithPrereleases(version2, range, loose = false) {
+ let semverRange;
+ try {
+ semverRange = new import_range2.default(range, loose);
+ } catch (err) {
+ return false;
+ }
+ if (!version2)
+ return false;
+ let semverVersion;
+ try {
+ semverVersion = new import_semver2.default(version2, semverRange.loose);
+ if (semverVersion.prerelease) {
+ semverVersion.prerelease = [];
+ }
+ } catch (err) {
+ return false;
+ }
+ return semverRange.set.some((comparatorSet) => {
+ for (const comparator of comparatorSet)
+ if (comparator.semver.prerelease)
+ comparator.semver.prerelease = [];
+ return comparatorSet.every((comparator) => {
+ return comparator.test(semverVersion);
+ });
+ });
+}
+
+// sources/specUtils.ts
+var import_clipanion4 = __toESM(require_advanced());
+var import_fs5 = __toESM(require("fs"));
+var import_path4 = __toESM(require("path"));
+var import_satisfies = __toESM(require_satisfies());
+var import_valid = __toESM(require_valid());
+var import_valid2 = __toESM(require_valid2());
+var import_util = require("util");
+
+// sources/types.ts
+var SupportedPackageManagers = /* @__PURE__ */ ((SupportedPackageManagers3) => {
+ SupportedPackageManagers3["Npm"] = `npm`;
+ SupportedPackageManagers3["Pnpm"] = `pnpm`;
+ SupportedPackageManagers3["Yarn"] = `yarn`;
+ return SupportedPackageManagers3;
+})(SupportedPackageManagers || {});
+var SupportedPackageManagerSet = new Set(
+ Object.values(SupportedPackageManagers)
+);
+var SupportedPackageManagerSetWithoutNpm = new Set(
+ Object.values(SupportedPackageManagers)
+);
+SupportedPackageManagerSetWithoutNpm.delete("npm" /* Npm */);
+function isSupportedPackageManager(value) {
+ return SupportedPackageManagerSet.has(value);
+}
+
+// sources/specUtils.ts
+var nodeModulesRegExp = /[\\/]node_modules[\\/](@[^\\/]*[\\/])?([^@\\/][^\\/]*)$/;
+function parseSpec(raw2, source, { enforceExactVersion = true } = {}) {
+ if (typeof raw2 !== `string`)
+ throw new import_clipanion4.UsageError(`Invalid package manager specification in ${source}; expected a string`);
+ const atIndex = raw2.indexOf(`@`);
+ if (atIndex === -1 || atIndex === raw2.length - 1) {
+ if (enforceExactVersion)
+ throw new import_clipanion4.UsageError(`No version specified for ${raw2} in "packageManager" of ${source}`);
+ const name3 = atIndex === -1 ? raw2 : raw2.slice(0, -1);
+ if (!isSupportedPackageManager(name3))
+ throw new import_clipanion4.UsageError(`Unsupported package manager specification (${name3})`);
+ return {
+ name: name3,
+ range: `*`
+ };
+ }
+ const name2 = raw2.slice(0, atIndex);
+ const range = raw2.slice(atIndex + 1);
+ const isURL = URL.canParse(range);
+ if (!isURL) {
+ if (enforceExactVersion && !(0, import_valid.default)(range))
+ throw new import_clipanion4.UsageError(`Invalid package manager specification in ${source} (${raw2}); expected a semver version${enforceExactVersion ? `` : `, range, or tag`}`);
+ if (!isSupportedPackageManager(name2)) {
+ throw new import_clipanion4.UsageError(`Unsupported package manager specification (${raw2})`);
+ }
+ } else if (isSupportedPackageManager(name2) && process.env.COREPACK_ENABLE_UNSAFE_CUSTOM_URLS !== `1`) {
+ throw new import_clipanion4.UsageError(`Illegal use of URL for known package manager. Instead, select a specific version, or set COREPACK_ENABLE_UNSAFE_CUSTOM_URLS=1 in your environment (${raw2})`);
+ }
+ return {
+ name: name2,
+ range
+ };
+}
+function warnOrThrow(errorMessage, onFail) {
+ switch (onFail) {
+ case `ignore`:
+ break;
+ case `error`:
+ case void 0:
+ throw new import_clipanion4.UsageError(errorMessage);
+ default:
+ console.warn(`! Corepack validation warning: ${errorMessage}`);
+ }
+}
+function parsePackageJSON(packageJSONContent) {
+ const { packageManager: pm } = packageJSONContent;
+ if (packageJSONContent.devEngines?.packageManager != null) {
+ const { packageManager } = packageJSONContent.devEngines;
+ if (typeof packageManager !== `object`) {
+ console.warn(`! Corepack only supports objects as valid value for devEngines.packageManager. The current value (${JSON.stringify(packageManager)}) will be ignored.`);
+ return pm;
+ }
+ if (Array.isArray(packageManager)) {
+ console.warn(`! Corepack does not currently support array values for devEngines.packageManager`);
+ return pm;
+ }
+ const { name: name2, version: version2, onFail } = packageManager;
+ if (typeof name2 !== `string` || name2.includes(`@`)) {
+ warnOrThrow(`The value of devEngines.packageManager.name ${JSON.stringify(name2)} is not a supported string value`, onFail);
+ return pm;
+ }
+ if (version2 != null && (typeof version2 !== `string` || !(0, import_valid2.default)(version2))) {
+ warnOrThrow(`The value of devEngines.packageManager.version ${JSON.stringify(version2)} is not a valid semver range`, onFail);
+ return pm;
+ }
+ log(`devEngines.packageManager defines that ${name2}@${version2} is the local package manager`);
+ if (pm) {
+ if (!pm.startsWith?.(`${name2}@`))
+ warnOrThrow(`"packageManager" field is set to ${JSON.stringify(pm)} which does not match the "devEngines.packageManager" field set to ${JSON.stringify(name2)}`, onFail);
+ else if (version2 != null && !(0, import_satisfies.default)(pm.slice(packageManager.name.length + 1), version2))
+ warnOrThrow(`"packageManager" field is set to ${JSON.stringify(pm)} which does not match the value defined in "devEngines.packageManager" for ${JSON.stringify(name2)} of ${JSON.stringify(version2)}`, onFail);
+ return pm;
+ }
+ return `${name2}@${version2 ?? `*`}`;
+ }
+ return pm;
+}
+async function setLocalPackageManager(cwd, info) {
+ const lookup = await loadSpec(cwd);
+ const range = `range` in lookup && lookup.range;
+ if (range) {
+ if (info.locator.name !== range.name || !(0, import_satisfies.default)(info.locator.reference, range.range)) {
+ warnOrThrow(`The requested version of ${info.locator.name}@${info.locator.reference} does not match the devEngines specification (${range.name}@${range.range})`, range.onFail);
+ }
+ }
+ const content = lookup.type !== `NoProject` ? await import_fs5.default.promises.readFile(lookup.target, `utf8`) : ``;
+ const { data, indent } = readPackageJson(content);
+ const previousPackageManager = data.packageManager ?? (range ? `${range.name}@${range.range}` : `unknown`);
+ data.packageManager = `${info.locator.name}@${info.locator.reference}`;
+ const newContent = normalizeLineEndings(content, `${JSON.stringify(data, null, indent)}
+`);
+ await import_fs5.default.promises.writeFile(lookup.target, newContent, `utf8`);
+ return {
+ previousPackageManager
+ };
+}
+async function loadSpec(initialCwd) {
+ let nextCwd = initialCwd;
+ let currCwd = ``;
+ let selection = null;
+ while (nextCwd !== currCwd && (!selection || !selection.data.packageManager)) {
+ currCwd = nextCwd;
+ nextCwd = import_path4.default.dirname(currCwd);
+ if (nodeModulesRegExp.test(currCwd))
+ continue;
+ const manifestPath = import_path4.default.join(currCwd, `package.json`);
+ log(`Checking ${manifestPath}`);
+ let content;
+ try {
+ content = await import_fs5.default.promises.readFile(manifestPath, `utf8`);
+ } catch (err) {
+ if (err?.code === `ENOENT`) continue;
+ throw err;
+ }
+ let data;
+ try {
+ data = JSON.parse(content);
+ } catch {
+ }
+ if (typeof data !== `object` || data === null)
+ throw new import_clipanion4.UsageError(`Invalid package.json in ${import_path4.default.relative(initialCwd, manifestPath)}`);
+ let localEnv;
+ const envFilePath2 = import_path4.default.resolve(currCwd, process.env.COREPACK_ENV_FILE ?? `.corepack.env`);
+ if (process.env.COREPACK_ENV_FILE == `0`) {
+ log(`Skipping env file as configured with COREPACK_ENV_FILE`);
+ localEnv = process.env;
+ } else if (typeof import_util.parseEnv !== `function`) {
+ log(`Skipping env file as it is not supported by the current version of Node.js`);
+ localEnv = process.env;
+ } else {
+ log(`Checking ${envFilePath2}`);
+ try {
+ localEnv = {
+ ...Object.fromEntries(Object.entries((0, import_util.parseEnv)(await import_fs5.default.promises.readFile(envFilePath2, `utf8`))).filter((e) => e[0].startsWith(`COREPACK_`))),
+ ...process.env
+ };
+ log(`Successfully loaded env file found at ${envFilePath2}`);
+ } catch (err) {
+ if (err?.code !== `ENOENT`)
+ throw err;
+ log(`No env file found at ${envFilePath2}`);
+ localEnv = process.env;
+ }
+ }
+ selection = { data, manifestPath, localEnv, envFilePath: envFilePath2 };
+ }
+ if (selection === null)
+ return { type: `NoProject`, target: import_path4.default.join(initialCwd, `package.json`) };
+ let envFilePath;
+ if (selection.localEnv !== process.env) {
+ envFilePath = selection.envFilePath;
+ process.env = selection.localEnv;
+ }
+ const rawPmSpec = parsePackageJSON(selection.data);
+ if (typeof rawPmSpec === `undefined`)
+ return { type: `NoSpec`, target: selection.manifestPath };
+ log(`${selection.manifestPath} defines ${rawPmSpec} as local package manager`);
+ return {
+ type: `Found`,
+ target: selection.manifestPath,
+ envFilePath,
+ range: selection.data.devEngines?.packageManager?.version && {
+ name: selection.data.devEngines.packageManager.name,
+ range: selection.data.devEngines.packageManager.version,
+ onFail: selection.data.devEngines.packageManager.onFail
+ },
+ // Lazy-loading it so we do not throw errors on commands that do not need valid spec.
+ getSpec: ({ enforceExactVersion = true } = {}) => parseSpec(rawPmSpec, import_path4.default.relative(initialCwd, selection.manifestPath), { enforceExactVersion })
+ };
+}
+
+// sources/Engine.ts
+function getLastKnownGoodFilePath() {
+ const lkg = import_path5.default.join(getCorepackHomeFolder(), `lastKnownGood.json`);
+ log(`LastKnownGood file would be located at ${lkg}`);
+ return lkg;
+}
+async function getLastKnownGood() {
+ let raw2;
+ try {
+ raw2 = await import_fs6.default.promises.readFile(getLastKnownGoodFilePath(), `utf8`);
+ } catch (err) {
+ if (err?.code === `ENOENT`) {
+ log(`No LastKnownGood version found in Corepack home.`);
+ return {};
+ }
+ throw err;
+ }
+ try {
+ const parsed = JSON.parse(raw2);
+ if (!parsed) {
+ log(`Invalid LastKnowGood file in Corepack home (JSON parsable, but falsy)`);
+ return {};
+ }
+ if (typeof parsed !== `object`) {
+ log(`Invalid LastKnowGood file in Corepack home (JSON parsable, but non-object)`);
+ return {};
+ }
+ Object.entries(parsed).forEach(([key, value]) => {
+ if (typeof value !== `string`) {
+ log(`Ignoring key ${key} in LastKnownGood file as its value is not a string`);
+ delete parsed[key];
+ }
+ });
+ return parsed;
+ } catch {
+ log(`Invalid LastKnowGood file in Corepack home (maybe not JSON parsable)`);
+ return {};
+ }
+}
+async function createLastKnownGoodFile(lastKnownGood) {
+ const content = `${JSON.stringify(lastKnownGood, null, 2)}
+`;
+ await import_fs6.default.promises.mkdir(getCorepackHomeFolder(), { recursive: true });
+ await import_fs6.default.promises.writeFile(getLastKnownGoodFilePath(), content, `utf8`);
+}
+function getLastKnownGoodFromFileContent(lastKnownGood, packageManager) {
+ if (Object.hasOwn(lastKnownGood, packageManager))
+ return lastKnownGood[packageManager];
+ return void 0;
+}
+async function activatePackageManager(lastKnownGood, locator) {
+ if (lastKnownGood[locator.name] === locator.reference) {
+ log(`${locator.name}@${locator.reference} is already Last Known Good version`);
+ return;
+ }
+ lastKnownGood[locator.name] = locator.reference;
+ log(`Setting ${locator.name}@${locator.reference} as Last Known Good version`);
+ await createLastKnownGoodFile(lastKnownGood);
+}
+var Engine = class {
+ constructor(config = config_default) {
+ this.config = config;
+ }
+ config;
+ getPackageManagerFor(binaryName) {
+ for (const packageManager of SupportedPackageManagerSet) {
+ for (const rangeDefinition of Object.values(this.config.definitions[packageManager].ranges)) {
+ const bins = Array.isArray(rangeDefinition.bin) ? rangeDefinition.bin : Object.keys(rangeDefinition.bin);
+ if (bins.includes(binaryName)) {
+ return packageManager;
+ }
+ }
+ }
+ return null;
+ }
+ getPackageManagerSpecFor(locator) {
+ if (!isSupportedPackageManagerLocator(locator)) {
+ const url = `${locator.reference}`;
+ return {
+ url,
+ bin: void 0,
+ // bin will be set later
+ registry: {
+ type: `url`,
+ url,
+ fields: {
+ tags: ``,
+ versions: ``
+ }
+ }
+ };
+ }
+ const definition = this.config.definitions[locator.name];
+ if (typeof definition === `undefined`)
+ throw new import_clipanion5.UsageError(`This package manager (${locator.name}) isn't supported by this corepack build`);
+ const ranges = Object.keys(definition.ranges).reverse();
+ const range = ranges.find((range2) => satisfiesWithPrereleases(locator.reference, range2));
+ if (typeof range === `undefined`)
+ throw new Error(`Assertion failed: Specified resolution (${locator.reference}) isn't supported by any of ${ranges.join(`, `)}`);
+ return definition.ranges[range];
+ }
+ getBinariesFor(name2) {
+ const binNames = /* @__PURE__ */ new Set();
+ for (const rangeDefinition of Object.values(this.config.definitions[name2].ranges)) {
+ const bins = Array.isArray(rangeDefinition.bin) ? rangeDefinition.bin : Object.keys(rangeDefinition.bin);
+ for (const name3 of bins) {
+ binNames.add(name3);
+ }
+ }
+ return binNames;
+ }
+ async getDefaultDescriptors() {
+ const locators = [];
+ for (const name2 of SupportedPackageManagerSet)
+ locators.push({ name: name2, range: await this.getDefaultVersion(name2) });
+ return locators;
+ }
+ async getDefaultVersion(packageManager) {
+ const definition = this.config.definitions[packageManager];
+ if (typeof definition === `undefined`)
+ throw new import_clipanion5.UsageError(`This package manager (${packageManager}) isn't supported by this corepack build`);
+ const lastKnownGood = await getLastKnownGood();
+ const lastKnownGoodForThisPackageManager = getLastKnownGoodFromFileContent(lastKnownGood, packageManager);
+ if (lastKnownGoodForThisPackageManager) {
+ log(`Search for default version: Found ${packageManager}@${lastKnownGoodForThisPackageManager} in LastKnownGood file`);
+ return lastKnownGoodForThisPackageManager;
+ }
+ if (import_process3.default.env.COREPACK_DEFAULT_TO_LATEST === `0`) {
+ log(`Search for default version: As defined in environment, defaulting to internal config ${packageManager}@${definition.default}`);
+ return definition.default;
+ }
+ const reference = await fetchLatestStableVersion2(definition.fetchLatestFrom);
+ log(`Search for default version: found in remote registry ${packageManager}@${reference}`);
+ try {
+ await activatePackageManager(lastKnownGood, {
+ name: packageManager,
+ reference
+ });
+ } catch {
+ log(`Search for default version: could not activate registry version`);
+ }
+ return reference;
+ }
+ async activatePackageManager(locator) {
+ const lastKnownGood = await getLastKnownGood();
+ await activatePackageManager(lastKnownGood, locator);
+ }
+ async ensurePackageManager(locator) {
+ const spec = this.getPackageManagerSpecFor(locator);
+ const packageManagerInfo = await installVersion(getInstallFolder(), locator, {
+ spec
+ });
+ const noHashReference = locator.reference.replace(/\+.*/, ``);
+ const fixedHashReference = `${noHashReference}+${packageManagerInfo.hash}`;
+ const fixedHashLocator = {
+ name: locator.name,
+ reference: fixedHashReference
+ };
+ return {
+ ...packageManagerInfo,
+ locator: fixedHashLocator,
+ spec
+ };
+ }
+ /**
+ * Locates the active project's package manager specification.
+ *
+ * If the specification exists but doesn't match the active package manager,
+ * an error is thrown to prevent users from using the wrong package manager,
+ * which would lead to inconsistent project layouts.
+ *
+ * If the project doesn't include a specification file, we just assume that
+ * whatever the user uses is exactly what they want to use. Since the version
+ * isn't specified, we fallback on known good versions.
+ *
+ * Finally, if the project doesn't exist at all, we ask the user whether they
+ * want to create one in the current project. If they do, we initialize a new
+ * project using the default package managers, and configure it so that we
+ * don't need to ask again in the future.
+ */
+ async findProjectSpec(initialCwd, locator, { transparent = false, binaryVersion } = {}) {
+ const fallbackDescriptor = { name: locator.name, range: `${locator.reference}` };
+ if (import_process3.default.env.COREPACK_ENABLE_PROJECT_SPEC === `0`) {
+ if (typeof locator.reference === `function`)
+ fallbackDescriptor.range = await locator.reference();
+ return fallbackDescriptor;
+ }
+ if (import_process3.default.env.COREPACK_ENABLE_STRICT === `0`)
+ transparent = true;
+ while (true) {
+ const result = await loadSpec(initialCwd);
+ switch (result.type) {
+ case `NoProject`: {
+ if (typeof locator.reference === `function`)
+ fallbackDescriptor.range = await locator.reference();
+ log(`Falling back to ${fallbackDescriptor.name}@${fallbackDescriptor.range} as no project manifest were found`);
+ return fallbackDescriptor;
+ }
+ case `NoSpec`: {
+ if (typeof locator.reference === `function`)
+ fallbackDescriptor.range = await locator.reference();
+ if (import_process3.default.env.COREPACK_ENABLE_AUTO_PIN === `1`) {
+ const resolved = await this.resolveDescriptor(fallbackDescriptor, { allowTags: true });
+ if (resolved === null)
+ throw new import_clipanion5.UsageError(`Failed to successfully resolve '${fallbackDescriptor.range}' to a valid ${fallbackDescriptor.name} release`);
+ const installSpec = await this.ensurePackageManager(resolved);
+ console.error(`! The local project doesn't define a 'packageManager' field. Corepack will now add one referencing ${installSpec.locator.name}@${installSpec.locator.reference}.`);
+ console.error(`! For more details about this field, consult the documentation at https://nodejs.org/api/packages.html#packagemanager`);
+ console.error();
+ await setLocalPackageManager(import_path5.default.dirname(result.target), installSpec);
+ }
+ log(`Falling back to ${fallbackDescriptor.name}@${fallbackDescriptor.range} in the absence of "packageManager" field in ${result.target}`);
+ return fallbackDescriptor;
+ }
+ case `Found`: {
+ const spec = result.getSpec({ enforceExactVersion: !binaryVersion });
+ if (spec.name !== locator.name) {
+ if (transparent) {
+ if (typeof locator.reference === `function`)
+ fallbackDescriptor.range = await locator.reference();
+ log(`Falling back to ${fallbackDescriptor.name}@${fallbackDescriptor.range} in a ${spec.name}@${spec.range} project`);
+ return fallbackDescriptor;
+ } else {
+ throw new import_clipanion5.UsageError(`This project is configured to use ${spec.name} because ${result.target} has a "packageManager" field`);
+ }
+ } else {
+ log(`Using ${spec.name}@${spec.range} as defined in project manifest ${result.target}`);
+ return spec;
+ }
+ }
+ }
+ }
+ }
+ async executePackageManagerRequest({ packageManager, binaryName, binaryVersion }, { cwd, args }) {
+ let fallbackLocator = {
+ name: binaryName,
+ reference: void 0
+ };
+ let isTransparentCommand = false;
+ if (packageManager != null) {
+ const defaultVersion = binaryVersion || (() => this.getDefaultVersion(packageManager));
+ const definition = this.config.definitions[packageManager];
+ for (const transparentPath of definition.transparent.commands) {
+ if (transparentPath[0] === binaryName && transparentPath.slice(1).every((segment, index) => segment === args[index])) {
+ isTransparentCommand = true;
+ break;
+ }
+ }
+ const fallbackReference = isTransparentCommand ? definition.transparent.default ?? defaultVersion : defaultVersion;
+ fallbackLocator = {
+ name: packageManager,
+ reference: fallbackReference
+ };
+ }
+ const descriptor = await this.findProjectSpec(cwd, fallbackLocator, { transparent: isTransparentCommand, binaryVersion });
+ if (binaryVersion)
+ descriptor.range = binaryVersion;
+ const resolved = await this.resolveDescriptor(descriptor, { allowTags: true });
+ if (resolved === null)
+ throw new import_clipanion5.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ const installSpec = await this.ensurePackageManager(resolved);
+ return await runVersion(resolved, installSpec, binaryName, args);
+ }
+ async resolveDescriptor(descriptor, { allowTags = false, useCache = true } = {}) {
+ if (!isSupportedPackageManagerDescriptor(descriptor)) {
+ if (import_process3.default.env.COREPACK_ENABLE_UNSAFE_CUSTOM_URLS !== `1` && isSupportedPackageManager(descriptor.name))
+ throw new import_clipanion5.UsageError(`Illegal use of URL for known package manager. Instead, select a specific version, or set COREPACK_ENABLE_UNSAFE_CUSTOM_URLS=1 in your environment (${descriptor.name}@${descriptor.range})`);
+ return {
+ name: descriptor.name,
+ reference: descriptor.range
+ };
+ }
+ const definition = this.config.definitions[descriptor.name];
+ if (typeof definition === `undefined`)
+ throw new import_clipanion5.UsageError(`This package manager (${descriptor.name}) isn't supported by this corepack build`);
+ let finalDescriptor = descriptor;
+ if (!(0, import_valid3.default)(descriptor.range) && !(0, import_valid4.default)(descriptor.range)) {
+ if (!allowTags)
+ throw new import_clipanion5.UsageError(`Packages managers can't be referenced via tags in this context`);
+ const ranges = Object.keys(definition.ranges);
+ const tagRange = ranges[ranges.length - 1];
+ const packageManagerSpec = definition.ranges[tagRange];
+ const registry = getRegistryFromPackageManagerSpec(packageManagerSpec);
+ const tags = await fetchAvailableTags2(registry);
+ if (!Object.hasOwn(tags, descriptor.range))
+ throw new import_clipanion5.UsageError(`Tag not found (${descriptor.range})`);
+ finalDescriptor = {
+ name: descriptor.name,
+ range: tags[descriptor.range]
+ };
+ }
+ const cachedVersion = await findInstalledVersion(getInstallFolder(), finalDescriptor);
+ if (cachedVersion !== null && useCache)
+ return { name: finalDescriptor.name, reference: cachedVersion };
+ if ((0, import_valid3.default)(finalDescriptor.range))
+ return { name: finalDescriptor.name, reference: finalDescriptor.range };
+ const versions = await Promise.all(Object.keys(definition.ranges).map(async (range) => {
+ const packageManagerSpec = definition.ranges[range];
+ const registry = getRegistryFromPackageManagerSpec(packageManagerSpec);
+ const versions2 = await fetchAvailableVersions2(registry);
+ return versions2.filter((version2) => satisfiesWithPrereleases(version2, finalDescriptor.range));
+ }));
+ const highestVersion = [...new Set(versions.flat())].sort(import_rcompare.default);
+ if (highestVersion.length === 0)
+ return null;
+ return { name: finalDescriptor.name, reference: highestVersion[0] };
+ }
+};
+
+// sources/commands/Cache.ts
+var import_clipanion6 = __toESM(require_advanced());
+var import_fs7 = __toESM(require("fs"));
+var CacheCommand = class extends import_clipanion6.Command {
+ static paths = [
+ [`cache`, `clean`],
+ [`cache`, `clear`]
+ ];
+ static usage = import_clipanion6.Command.Usage({
+ description: `Cleans Corepack cache`,
+ details: `
+ Removes Corepack cache directory from your local disk.
+ `
+ });
+ async execute() {
+ await import_fs7.default.promises.rm(getInstallFolder(), { recursive: true, force: true });
+ }
+};
+
+// sources/commands/Disable.ts
+var import_clipanion7 = __toESM(require_advanced());
+var import_fs8 = __toESM(require("fs"));
+var import_path6 = __toESM(require("path"));
+var import_which = __toESM(require_lib());
+var DisableCommand = class extends import_clipanion7.Command {
+ static paths = [
+ [`disable`]
+ ];
+ static usage = import_clipanion7.Command.Usage({
+ description: `Remove the Corepack shims from the install directory`,
+ details: `
+ When run, this command will remove the shims for the specified package managers from the install directory, or all shims if no parameters are passed.
+
+ By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--install-directory\` flag.
+ `,
+ examples: [[
+ `Disable all shims, removing them if they're next to the \`coreshim\` binary`,
+ `$0 disable`
+ ], [
+ `Disable all shims, removing them from the specified directory`,
+ `$0 disable --install-directory /path/to/bin`
+ ], [
+ `Disable the Yarn shim only`,
+ `$0 disable yarn`
+ ]]
+ });
+ installDirectory = import_clipanion7.Option.String(`--install-directory`, {
+ description: `Where the shims are located`
+ });
+ names = import_clipanion7.Option.Rest();
+ async execute() {
+ let installDirectory = this.installDirectory;
+ if (typeof installDirectory === `undefined`)
+ installDirectory = import_path6.default.dirname(await (0, import_which.default)(`corepack`));
+ const names = this.names.length === 0 ? SupportedPackageManagerSetWithoutNpm : this.names;
+ const allBinNames = [];
+ for (const name2 of new Set(names)) {
+ if (!isSupportedPackageManager(name2))
+ throw new import_clipanion7.UsageError(`Invalid package manager name '${name2}'`);
+ const binNames = this.context.engine.getBinariesFor(name2);
+ allBinNames.push(...binNames);
+ }
+ const removeLink = process.platform === `win32` ? (binName) => this.removeWin32Link(installDirectory, binName) : (binName) => this.removePosixLink(installDirectory, binName);
+ await Promise.all(allBinNames.map(removeLink));
+ }
+ async removePosixLink(installDirectory, binName) {
+ const file = import_path6.default.join(installDirectory, binName);
+ try {
+ if (binName.includes(`yarn`) && isYarnSwitchPath(await import_fs8.default.promises.realpath(file))) {
+ console.warn(`${binName} is already installed in ${file} and points to a Yarn Switch install - skipping`);
+ return;
+ }
+ await import_fs8.default.promises.unlink(file);
+ } catch (err) {
+ if (err.code !== `ENOENT`) {
+ throw err;
+ }
+ }
+ }
+ async removeWin32Link(installDirectory, binName) {
+ for (const ext of [``, `.ps1`, `.cmd`]) {
+ const file = import_path6.default.join(installDirectory, `${binName}${ext}`);
+ try {
+ await import_fs8.default.promises.unlink(file);
+ } catch (err) {
+ if (err.code !== `ENOENT`) {
+ throw err;
+ }
+ }
+ }
+ }
+};
+
+// sources/commands/Enable.ts
+var import_cmd_shim = __toESM(require_cmd_shim());
+var import_clipanion8 = __toESM(require_advanced());
+var import_fs9 = __toESM(require("fs"));
+var import_path7 = __toESM(require("path"));
+var import_which2 = __toESM(require_lib());
+var EnableCommand = class extends import_clipanion8.Command {
+ static paths = [
+ [`enable`]
+ ];
+ static usage = import_clipanion8.Command.Usage({
+ description: `Add the Corepack shims to the install directory`,
+ details: `
+ When run, this command will check whether the shims for the specified package managers can be found with the correct values inside the install directory. If not, or if they don't exist, they will be created.
+
+ By default it will locate the install directory by running the equivalent of \`which corepack\`, but this can be tweaked by explicitly passing the install directory via the \`--install-directory\` flag.
+ `,
+ examples: [[
+ `Enable all shims, putting them next to the \`corepack\` binary`,
+ `$0 enable`
+ ], [
+ `Enable all shims, putting them in the specified directory`,
+ `$0 enable --install-directory /path/to/folder`
+ ], [
+ `Enable the Yarn shim only`,
+ `$0 enable yarn`
+ ]]
+ });
+ installDirectory = import_clipanion8.Option.String(`--install-directory`, {
+ description: `Where the shims are to be installed`
+ });
+ names = import_clipanion8.Option.Rest();
+ async execute() {
+ let installDirectory = this.installDirectory;
+ if (typeof installDirectory === `undefined`)
+ installDirectory = import_path7.default.dirname(await (0, import_which2.default)(`corepack`));
+ installDirectory = import_fs9.default.realpathSync(installDirectory);
+ const manifestPath = require.resolve("corepack/package.json");
+ const distFolder = import_path7.default.join(import_path7.default.dirname(manifestPath), `dist`);
+ if (!import_fs9.default.existsSync(distFolder))
+ throw new Error(`Assertion failed: The stub folder doesn't exist`);
+ const names = this.names.length === 0 ? SupportedPackageManagerSetWithoutNpm : this.names;
+ const allBinNames = [];
+ for (const name2 of new Set(names)) {
+ if (!isSupportedPackageManager(name2))
+ throw new import_clipanion8.UsageError(`Invalid package manager name '${name2}'`);
+ const binNames = this.context.engine.getBinariesFor(name2);
+ allBinNames.push(...binNames);
+ }
+ const generateLink = process.platform === `win32` ? (binName) => this.generateWin32Link(installDirectory, distFolder, binName) : (binName) => this.generatePosixLink(installDirectory, distFolder, binName);
+ await Promise.all(allBinNames.map(generateLink));
+ }
+ async generatePosixLink(installDirectory, distFolder, binName) {
+ const file = import_path7.default.join(installDirectory, binName);
+ const symlink = import_path7.default.relative(installDirectory, import_path7.default.join(distFolder, `${binName}.js`));
+ const stats = import_fs9.default.lstatSync(file, { throwIfNoEntry: false });
+ if (stats) {
+ if (stats.isSymbolicLink()) {
+ const currentSymlink = await import_fs9.default.promises.readlink(file);
+ if (binName.includes(`yarn`) && isYarnSwitchPath(await import_fs9.default.promises.realpath(file))) {
+ console.warn(`${binName} is already installed in ${file} and points to a Yarn Switch install - skipping`);
+ return;
+ }
+ if (currentSymlink === symlink) {
+ return;
+ }
+ }
+ await import_fs9.default.promises.unlink(file);
+ }
+ await import_fs9.default.promises.symlink(symlink, file);
+ }
+ async generateWin32Link(installDirectory, distFolder, binName) {
+ const file = import_path7.default.join(installDirectory, binName);
+ await (0, import_cmd_shim.default)(import_path7.default.join(distFolder, `${binName}.js`), file, {
+ createCmdFile: true
+ });
+ }
+};
+
+// sources/commands/InstallGlobal.ts
+var import_clipanion10 = __toESM(require_advanced());
+var import_fs10 = __toESM(require("fs"));
+var import_path8 = __toESM(require("path"));
+
+// sources/commands/Base.ts
+var import_clipanion9 = __toESM(require_advanced());
+var BaseCommand = class extends import_clipanion9.Command {
+ async resolvePatternsToDescriptors({ patterns }) {
+ const resolvedSpecs = patterns.map((pattern) => parseSpec(pattern, `CLI arguments`, { enforceExactVersion: false }));
+ if (resolvedSpecs.length === 0) {
+ const lookup = await loadSpec(this.context.cwd);
+ switch (lookup.type) {
+ case `NoProject`:
+ throw new import_clipanion9.UsageError(`Couldn't find a project in the local directory - please specify the package manager to pack, or run this command from a valid project`);
+ case `NoSpec`:
+ throw new import_clipanion9.UsageError(`The local project doesn't feature a 'packageManager' field nor a 'devEngines.packageManager' field - please specify the package manager to pack, or update the manifest to reference it`);
+ default: {
+ return [lookup.range ?? lookup.getSpec()];
+ }
+ }
+ }
+ return resolvedSpecs;
+ }
+ async setAndInstallLocalPackageManager(info) {
+ const {
+ previousPackageManager
+ } = await setLocalPackageManager(this.context.cwd, info);
+ const command = this.context.engine.getPackageManagerSpecFor(info.locator).commands?.use ?? null;
+ if (command === null)
+ return 0;
+ process.env.COREPACK_MIGRATE_FROM = previousPackageManager;
+ this.context.stdout.write(`
+`);
+ const [binaryName, ...args] = command;
+ return await runVersion(info.locator, info, binaryName, args);
+ }
+};
+
+// sources/commands/InstallGlobal.ts
+var InstallGlobalCommand = class extends BaseCommand {
+ static paths = [
+ [`install`]
+ ];
+ static usage = import_clipanion10.Command.Usage({
+ description: `Install package managers on the system`,
+ details: `
+ Download the selected package managers and install them on the system.
+
+ Package managers thus installed will be configured as the new default when calling their respective binaries outside of projects defining the 'packageManager' field.
+ `,
+ examples: [[
+ `Install the latest version of Yarn 1.x and make it globally available`,
+ `corepack install -g yarn@^1`
+ ], [
+ `Install the latest version of pnpm, and make it globally available`,
+ `corepack install -g pnpm`
+ ]]
+ });
+ global = import_clipanion10.Option.Boolean(`-g,--global`, {
+ required: true
+ });
+ cacheOnly = import_clipanion10.Option.Boolean(`--cache-only`, false, {
+ description: `If true, the package managers will only be cached, not set as new defaults`
+ });
+ args = import_clipanion10.Option.Rest();
+ async execute() {
+ if (this.args.length === 0)
+ throw new import_clipanion10.UsageError(`No package managers specified`);
+ await Promise.all(this.args.map((arg) => {
+ if (arg.endsWith(`.tgz`)) {
+ return this.installFromTarball(import_path8.default.resolve(this.context.cwd, arg));
+ } else {
+ return this.installFromDescriptor(parseSpec(arg, `CLI arguments`, { enforceExactVersion: false }));
+ }
+ }));
+ }
+ log(locator) {
+ if (this.cacheOnly) {
+ this.context.stdout.write(`Adding ${locator.name}@${locator.reference} to the cache...
+`);
+ } else {
+ this.context.stdout.write(`Installing ${locator.name}@${locator.reference}...
+`);
+ }
+ }
+ async installFromDescriptor(descriptor) {
+ const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true, useCache: false });
+ if (resolved === null)
+ throw new import_clipanion10.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ this.log(resolved);
+ await this.context.engine.ensurePackageManager(resolved);
+ if (!this.cacheOnly) {
+ await this.context.engine.activatePackageManager(resolved);
+ }
+ }
+ async installFromTarball(p) {
+ const installFolder = getInstallFolder();
+ const archiveEntries = /* @__PURE__ */ new Map();
+ const { list: tarT } = await Promise.resolve().then(() => (init_list(), list_exports));
+ let hasShortEntries = false;
+ await tarT({ file: p, onentry: (entry) => {
+ const segments = entry.path.split(/\//g);
+ if (segments.length > 0 && segments[segments.length - 1] !== `.corepack`)
+ return;
+ if (segments.length < 3) {
+ hasShortEntries = true;
+ } else {
+ let references = archiveEntries.get(segments[0]);
+ if (typeof references === `undefined`)
+ archiveEntries.set(segments[0], references = /* @__PURE__ */ new Set());
+ references.add(segments[1]);
+ }
+ } });
+ if (hasShortEntries || archiveEntries.size < 1)
+ throw new import_clipanion10.UsageError(`Invalid archive format; did it get generated by 'corepack pack'?`);
+ const { extract: tarX } = await Promise.resolve().then(() => (init_extract(), extract_exports));
+ for (const [name2, references] of archiveEntries) {
+ for (const reference of references) {
+ if (!isSupportedPackageManager(name2))
+ throw new import_clipanion10.UsageError(`Unsupported package manager '${name2}'`);
+ this.log({ name: name2, reference });
+ await import_fs10.default.promises.mkdir(installFolder, { recursive: true });
+ await tarX({ file: p, cwd: installFolder }, [`${name2}/${reference}`]);
+ if (!this.cacheOnly) {
+ await this.context.engine.activatePackageManager({ name: name2, reference });
+ }
+ }
+ }
+ }
+};
+
+// sources/commands/InstallLocal.ts
+var import_clipanion11 = __toESM(require_advanced());
+var InstallLocalCommand = class extends BaseCommand {
+ static paths = [
+ [`install`]
+ ];
+ static usage = import_clipanion11.Command.Usage({
+ description: `Install the package manager configured in the local project`,
+ details: `
+ Download and install the package manager configured in the local project. This command doesn't change the global version used when running the package manager from outside the project (use the \`-g,--global\` flag if you wish to do this).
+ `,
+ examples: [[
+ `Install the project's package manager in the cache`,
+ `corepack install`
+ ]]
+ });
+ async execute() {
+ const [descriptor] = await this.resolvePatternsToDescriptors({
+ patterns: []
+ });
+ const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true });
+ if (resolved === null)
+ throw new import_clipanion11.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ this.context.stdout.write(`Adding ${resolved.name}@${resolved.reference} to the cache...
+`);
+ await this.context.engine.ensurePackageManager(resolved);
+ }
+};
+
+// sources/commands/Pack.ts
+var import_clipanion12 = __toESM(require_advanced());
+var import_promises3 = require("fs/promises");
+var import_path11 = __toESM(require("path"));
+var PackCommand = class extends BaseCommand {
+ static paths = [
+ [`pack`]
+ ];
+ static usage = import_clipanion12.Command.Usage({
+ description: `Store package managers in a tarball`,
+ details: `
+ Download the selected package managers and store them inside a tarball suitable for use with \`corepack install -g\`.
+ `,
+ examples: [[
+ `Pack the package manager defined in the package.json file`,
+ `corepack pack`
+ ], [
+ `Pack the latest version of Yarn 1.x inside a file named corepack.tgz`,
+ `corepack pack yarn@^1`
+ ]]
+ });
+ json = import_clipanion12.Option.Boolean(`--json`, false, {
+ description: `If true, the path to the generated tarball will be printed on stdout`
+ });
+ output = import_clipanion12.Option.String(`-o,--output`, {
+ description: `Where the tarball should be generated; by default "corepack.tgz"`
+ });
+ patterns = import_clipanion12.Option.Rest();
+ async execute() {
+ const descriptors = await this.resolvePatternsToDescriptors({
+ patterns: this.patterns
+ });
+ const installLocations = [];
+ for (const descriptor of descriptors) {
+ const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true, useCache: false });
+ if (resolved === null)
+ throw new import_clipanion12.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ this.context.stdout.write(`Adding ${resolved.name}@${resolved.reference} to the cache...
+`);
+ const packageManagerInfo = await this.context.engine.ensurePackageManager(resolved);
+ await this.context.engine.activatePackageManager(packageManagerInfo.locator);
+ installLocations.push(packageManagerInfo.location);
+ }
+ const baseInstallFolder = getInstallFolder();
+ const outputPath = import_path11.default.resolve(this.context.cwd, this.output ?? `corepack.tgz`);
+ if (!this.json) {
+ this.context.stdout.write(`
+`);
+ this.context.stdout.write(`Packing the selected tools in ${import_path11.default.basename(outputPath)}...
+`);
+ }
+ const { create: tarC } = await Promise.resolve().then(() => (init_create(), create_exports));
+ await (0, import_promises3.mkdir)(baseInstallFolder, { recursive: true });
+ await tarC({ gzip: true, cwd: baseInstallFolder, file: import_path11.default.resolve(outputPath) }, installLocations.map((location) => {
+ return import_path11.default.relative(baseInstallFolder, location);
+ }));
+ if (this.json) {
+ this.context.stdout.write(`${JSON.stringify(outputPath)}
+`);
+ } else {
+ this.context.stdout.write(`All done!
+`);
+ }
+ }
+};
+
+// sources/commands/Up.ts
+var import_clipanion13 = __toESM(require_advanced());
+var import_major = __toESM(require_major());
+var import_valid5 = __toESM(require_valid());
+var import_valid6 = __toESM(require_valid2());
+var UpCommand = class extends BaseCommand {
+ static paths = [
+ [`up`]
+ ];
+ static usage = import_clipanion13.Command.Usage({
+ description: `Update the package manager used in the current project`,
+ details: `
+ Retrieve the latest available version for the current major release line
+ of the package manager used in the local project, and update the project
+ to use it.
+
+ Unlike \`corepack use\` this command doesn't take a package manager name
+ nor a version range, as it will always select the latest available
+ version from the same major line. Should you need to upgrade to a new
+ major, use an explicit \`corepack use '{name}@*'\` call.
+ `,
+ examples: [[
+ `Configure the project to use the latest Yarn release`,
+ `corepack up`
+ ]]
+ });
+ async execute() {
+ const [descriptor] = await this.resolvePatternsToDescriptors({
+ patterns: []
+ });
+ if (!(0, import_valid5.default)(descriptor.range) && !(0, import_valid6.default)(descriptor.range))
+ throw new import_clipanion13.UsageError(`The 'corepack up' command can only be used when your project's packageManager field is set to a semver version or semver range`);
+ const resolved = await this.context.engine.resolveDescriptor(descriptor, { useCache: false });
+ if (!resolved)
+ throw new import_clipanion13.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ const majorVersion = (0, import_major.default)(resolved.reference);
+ const majorDescriptor = { name: descriptor.name, range: `^${majorVersion}.0.0` };
+ const highestVersion = await this.context.engine.resolveDescriptor(majorDescriptor, { useCache: false });
+ if (!highestVersion)
+ throw new import_clipanion13.UsageError(`Failed to find the highest release for ${descriptor.name} ${majorVersion}.x`);
+ this.context.stdout.write(`Installing ${highestVersion.name}@${highestVersion.reference} in the project...
+`);
+ const packageManagerInfo = await this.context.engine.ensurePackageManager(highestVersion);
+ await this.setAndInstallLocalPackageManager(packageManagerInfo);
+ }
+};
+
+// sources/commands/Use.ts
+var import_clipanion14 = __toESM(require_advanced());
+var UseCommand = class extends BaseCommand {
+ static paths = [
+ [`use`]
+ ];
+ static usage = import_clipanion14.Command.Usage({
+ description: `Define the package manager to use for the current project`,
+ details: `
+ When run, this command will retrieve the latest release matching the
+ provided descriptor, assign it to the project's package.json file, and
+ automatically perform an install.
+ `,
+ examples: [[
+ `Configure the project to use the latest Yarn release`,
+ `corepack use yarn`
+ ]]
+ });
+ pattern = import_clipanion14.Option.String();
+ async execute() {
+ const [descriptor] = await this.resolvePatternsToDescriptors({
+ patterns: [this.pattern]
+ });
+ const resolved = await this.context.engine.resolveDescriptor(descriptor, { allowTags: true, useCache: false });
+ if (resolved === null)
+ throw new import_clipanion14.UsageError(`Failed to successfully resolve '${descriptor.range}' to a valid ${descriptor.name} release`);
+ this.context.stdout.write(`Installing ${resolved.name}@${resolved.reference} in the project...
+`);
+ const packageManagerInfo = await this.context.engine.ensurePackageManager(resolved);
+ await this.setAndInstallLocalPackageManager(packageManagerInfo);
+ }
+};
+
+// sources/commands/deprecated/Hydrate.ts
+var import_clipanion15 = __toESM(require_advanced());
+var import_promises4 = require("fs/promises");
+var import_path12 = __toESM(require("path"));
+var HydrateCommand = class extends import_clipanion15.Command {
+ static paths = [
+ [`hydrate`]
+ ];
+ activate = import_clipanion15.Option.Boolean(`--activate`, false, {
+ description: `If true, this release will become the default one for this package manager`
+ });
+ fileName = import_clipanion15.Option.String();
+ async execute() {
+ const installFolder = getInstallFolder();
+ const fileName = import_path12.default.resolve(this.context.cwd, this.fileName);
+ const archiveEntries = /* @__PURE__ */ new Map();
+ let hasShortEntries = false;
+ const { list: tarT } = await Promise.resolve().then(() => (init_list(), list_exports));
+ await tarT({ file: fileName, onentry: (entry) => {
+ const segments = entry.path.split(/\//g);
+ if (segments.length < 3) {
+ hasShortEntries = true;
+ } else {
+ let references = archiveEntries.get(segments[0]);
+ if (typeof references === `undefined`)
+ archiveEntries.set(segments[0], references = /* @__PURE__ */ new Set());
+ references.add(segments[1]);
+ }
+ } });
+ if (hasShortEntries || archiveEntries.size < 1)
+ throw new import_clipanion15.UsageError(`Invalid archive format; did it get generated by 'corepack prepare'?`);
+ const { extract: tarX } = await Promise.resolve().then(() => (init_extract(), extract_exports));
+ for (const [name2, references] of archiveEntries) {
+ for (const reference of references) {
+ if (!isSupportedPackageManager(name2))
+ throw new import_clipanion15.UsageError(`Unsupported package manager '${name2}'`);
+ if (this.activate)
+ this.context.stdout.write(`Hydrating ${name2}@${reference} for immediate activation...
+`);
+ else
+ this.context.stdout.write(`Hydrating ${name2}@${reference}...
+`);
+ await (0, import_promises4.mkdir)(installFolder, { recursive: true });
+ await tarX({ file: fileName, cwd: installFolder }, [`${name2}/${reference}`]);
+ if (this.activate) {
+ await this.context.engine.activatePackageManager({ name: name2, reference });
+ }
+ }
+ }
+ this.context.stdout.write(`All done!
+`);
+ }
+};
+
+// sources/commands/deprecated/Prepare.ts
+var import_clipanion16 = __toESM(require_advanced());
+var import_promises5 = require("fs/promises");
+var import_path13 = __toESM(require("path"));
+var PrepareCommand = class extends import_clipanion16.Command {
+ static paths = [
+ [`prepare`]
+ ];
+ activate = import_clipanion16.Option.Boolean(`--activate`, false, {
+ description: `If true, this release will become the default one for this package manager`
+ });
+ json = import_clipanion16.Option.Boolean(`--json`, false, {
+ description: `If true, the output will be the path of the generated tarball`
+ });
+ output = import_clipanion16.Option.String(`-o,--output`, {
+ description: `If true, the installed package managers will also be stored in a tarball`,
+ tolerateBoolean: true
+ });
+ specs = import_clipanion16.Option.Rest();
+ async execute() {
+ const specs = this.specs;
+ const installLocations = [];
+ if (specs.length === 0) {
+ const lookup = await loadSpec(this.context.cwd);
+ switch (lookup.type) {
+ case `NoProject`:
+ throw new import_clipanion16.UsageError(`Couldn't find a project in the local directory - please specify the package manager to pack, or run this command from a valid project`);
+ case `NoSpec`:
+ throw new import_clipanion16.UsageError(`The local project doesn't feature a 'packageManager' field - please specify the package manager to pack, or update the manifest to reference it`);
+ default: {
+ specs.push(lookup.getSpec());
+ }
+ }
+ }
+ for (const request of specs) {
+ const spec = typeof request === `string` ? parseSpec(request, `CLI arguments`, { enforceExactVersion: false }) : request;
+ const resolved = await this.context.engine.resolveDescriptor(spec, { allowTags: true });
+ if (resolved === null)
+ throw new import_clipanion16.UsageError(`Failed to successfully resolve '${spec.range}' to a valid ${spec.name} release`);
+ if (!this.json) {
+ if (this.activate) {
+ this.context.stdout.write(`Preparing ${spec.name}@${spec.range} for immediate activation...
+`);
+ } else {
+ this.context.stdout.write(`Preparing ${spec.name}@${spec.range}...
+`);
+ }
+ }
+ const installSpec = await this.context.engine.ensurePackageManager(resolved);
+ installLocations.push(installSpec.location);
+ if (this.activate) {
+ await this.context.engine.activatePackageManager(resolved);
+ }
+ }
+ if (this.output) {
+ const outputName = typeof this.output === `string` ? this.output : `corepack.tgz`;
+ const baseInstallFolder = getInstallFolder();
+ const outputPath = import_path13.default.resolve(this.context.cwd, outputName);
+ if (!this.json)
+ this.context.stdout.write(`Packing the selected tools in ${import_path13.default.basename(outputPath)}...
+`);
+ const { create: tarC } = await Promise.resolve().then(() => (init_create(), create_exports));
+ await (0, import_promises5.mkdir)(baseInstallFolder, { recursive: true });
+ await tarC({ gzip: true, cwd: baseInstallFolder, file: import_path13.default.resolve(outputPath) }, installLocations.map((location) => {
+ return import_path13.default.relative(baseInstallFolder, location);
+ }));
+ if (this.json) {
+ this.context.stdout.write(`${JSON.stringify(outputPath)}
+`);
+ } else {
+ this.context.stdout.write(`All done!
+`);
+ }
+ }
+ }
+};
+
+// sources/main.ts
+function getPackageManagerRequestFromCli(parameter, engine) {
+ if (!parameter)
+ return null;
+ const match = parameter.match(/^([^@]*)(?:@(.*))?$/);
+ if (!match)
+ return null;
+ const [, binaryName, binaryVersion] = match;
+ const packageManager = engine.getPackageManagerFor(binaryName);
+ if (packageManager == null && binaryVersion == null) return null;
+ return {
+ packageManager,
+ binaryName,
+ binaryVersion: binaryVersion || null
+ };
+}
+function isUsageError(error) {
+ return error?.name === `UsageError`;
+}
+async function runMain(argv) {
+ const engine = new Engine();
+ const [firstArg, ...restArgs] = argv;
+ const request = getPackageManagerRequestFromCli(firstArg, engine);
+ if (!request) {
+ const cli = new import_clipanion17.Cli({
+ binaryLabel: `Corepack`,
+ binaryName: `corepack`,
+ binaryVersion: version
+ });
+ cli.register(import_clipanion17.Builtins.HelpCommand);
+ cli.register(import_clipanion17.Builtins.VersionCommand);
+ cli.register(CacheCommand);
+ cli.register(DisableCommand);
+ cli.register(EnableCommand);
+ cli.register(InstallGlobalCommand);
+ cli.register(InstallLocalCommand);
+ cli.register(PackCommand);
+ cli.register(UpCommand);
+ cli.register(UseCommand);
+ cli.register(HydrateCommand);
+ cli.register(PrepareCommand);
+ const context = {
+ ...import_clipanion17.Cli.defaultContext,
+ cwd: process.cwd(),
+ engine
+ };
+ const code2 = await cli.run(argv, context);
+ if (code2 !== 0) {
+ process.exitCode ??= code2;
+ }
+ } else {
+ try {
+ await engine.executePackageManagerRequest(request, {
+ cwd: process.cwd(),
+ args: restArgs
+ });
+ } catch (error) {
+ if (isUsageError(error)) {
+ console.error(error.message);
+ process.exit(1);
+ }
+ throw error;
+ }
+ }
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+ runMain
+});
+/*! Bundled license information:
+
+is-windows/index.js:
+ (*!
+ * is-windows
+ *
+ * Copyright © 2015-2018, Jon Schlinkert.
+ * Released under the MIT License.
+ *)
+*/
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npm.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npm.js
new file mode 100644
index 0000000..75f68b0
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npm.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['npm', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npx.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npx.js
new file mode 100644
index 0000000..b1138bb
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/npx.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['npx', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpm.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpm.js
new file mode 100644
index 0000000..56ba509
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpm.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['pnpm', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpx.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpx.js
new file mode 100644
index 0000000..ee36be2
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/pnpx.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['pnpx', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarn.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarn.js
new file mode 100644
index 0000000..ce628c8
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarn.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['yarn', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarnpkg.js b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarnpkg.js
new file mode 100644
index 0000000..9541ed7
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/dist/yarnpkg.js
@@ -0,0 +1,4 @@
+#!/usr/bin/env node
+process.env.COREPACK_ENABLE_DOWNLOAD_PROMPT??='1'
+require('module').enableCompileCache?.();
+require('./lib/corepack.cjs').runMain(['yarnpkg', ...process.argv.slice(2)]);
\ No newline at end of file
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/corepack/package.json b/.tools/node-v24.18.0-win-x64/node_modules/corepack/package.json
new file mode 100644
index 0000000..279475f
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/corepack/package.json
@@ -0,0 +1,101 @@
+{
+ "name": "corepack",
+ "version": "0.35.0",
+ "homepage": "https://github.com/nodejs/corepack#readme",
+ "bugs": {
+ "url": "https://github.com/nodejs/corepack/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/nodejs/corepack.git"
+ },
+ "engines": {
+ "node": "^22.22.2 || ^24.15.0 || >=26.0.0"
+ },
+ "exports": {
+ "./package.json": "./package.json"
+ },
+ "license": "MIT",
+ "packageManager": "yarn@4.14.1+sha224.88b7a7244bbd9040380c417f7eb556d85c67640b651f113cb4c72113",
+ "devDependencies": {
+ "@types/debug": "^4.1.5",
+ "@types/node": "^22.0.0",
+ "@types/proxy-from-env": "^1",
+ "@types/semver": "^7.1.0",
+ "@types/which": "^3.0.0",
+ "@yarnpkg/eslint-config": "^3.0.0",
+ "@yarnpkg/fslib": "^3.0.0-rc.48",
+ "@zkochan/cmd-shim": "^6.0.0",
+ "clipanion": "patch:clipanion@npm%3A3.2.1#~/.yarn/patches/clipanion-npm-3.2.1-fc9187f56c.patch",
+ "debug": "^4.1.1",
+ "esbuild": "^0.28.0",
+ "eslint": "^9.22.0",
+ "semver": "^7.6.3",
+ "supports-color": "^10.0.0",
+ "tar": "^7.5.11",
+ "tsx": "^4.16.2",
+ "typescript": "^5.7.3",
+ "v8-compile-cache": "^2.3.0",
+ "vitest": "^4.0.5",
+ "which": "^7.0.0"
+ },
+ "dependenciesMeta": {
+ "esbuild": {
+ "built": true
+ }
+ },
+ "scripts": {
+ "build": "run clean && run build:bundle && tsx ./mkshims.ts",
+ "build:bundle": "esbuild ./sources/_lib.ts --bundle --platform=node --target=node22.22.2 --external:corepack --outfile='./dist/lib/corepack.cjs' --resolve-extensions='.ts,.mjs,.js'",
+ "clean": "run rimraf dist shims",
+ "corepack": "tsx ./sources/_cli.ts",
+ "lint": "eslint .",
+ "prepack": "yarn build",
+ "postpack": "run clean",
+ "rimraf": "node -e 'for(let i=2;i
+```
+
+### Links & Resources
+
+* [**Documentation**](https://docs.npmjs.com/) - Official docs & how-tos for all things **npm**
+ * Note: you can also search docs locally with `npm help-search `
+* [**Bug Tracker**](https://github.com/npm/cli/issues) - Search or submit bugs against the CLI
+* [**Community Feedback and Discussions**](https://github.com/orgs/community/discussions/categories/npm) - Contribute ideas & discussion around the npm registry, website & CLI
+* [**RFCs**](https://github.com/npm/rfcs) - Contribute ideas & specifications for the API/design of the npm CLI
+* [**Service Status**](https://status.npmjs.org/) - Monitor the current status & see incident reports for the website & registry
+* [**Project Status**](https://npm.github.io/statusboard/) - See the health of all our maintained OSS projects in one view
+* [**Support**](https://www.npmjs.com/support) - Experiencing problems with the **npm** [website](https://npmjs.com) or [registry](https://registry.npmjs.org)? [File a ticket](https://www.npmjs.com/support)
+
+### Acknowledgments
+
+* `npm` is configured to use the **npm Public Registry** at [https://registry.npmjs.org](https://registry.npmjs.org) by default; Usage of this registry is subject to **Terms of Use** available at [https://npmjs.com/policies/terms](https://npmjs.com/policies/terms)
+* You can configure `npm` to use any other compatible registry you prefer. You can read more about [configuring third-party registries](https://docs.npmjs.com/cli/v7/using-npm/registry)
+
+### FAQ on Branding
+
+#### Is it "npm" or "NPM" or "Npm"?
+
+**`npm`** should never be capitalized unless it is being displayed in a location that is customarily all-capitals (ex. titles on `man` pages).
+
+#### Is "npm" an acronym for "Node Package Manager"?
+
+Contrary to popular belief, **`npm`** **is not** an acronym for "Node Package Manager." It is a recursive backronymic abbreviation for **"npm is not an acronym"** (if the project were named "ninaa," then it would be an acronym). The precursor to **`npm`** was actually a bash utility named **"pm"**, which was the shortform name of **"pkgmakeinst"** - a bash function that installed various things on various platforms. If **`npm`** were ever considered an acronym, it would be as "node pm" or, potentially, "new pm".
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp
new file mode 100644
index 0000000..70efb6f
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+if [ "x$npm_config_node_gyp" = "x" ]; then
+ node "`dirname "$0"`/../../node_modules/node-gyp/bin/node-gyp.js" "$@"
+else
+ "$npm_config_node_gyp" "$@"
+fi
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
new file mode 100644
index 0000000..083c9c5
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
@@ -0,0 +1,5 @@
+if not defined npm_config_node_gyp (
+ node "%~dp0\..\..\node_modules\node-gyp\bin\node-gyp.js" %*
+) else (
+ node "%npm_config_node_gyp%" %*
+)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm
new file mode 100644
index 0000000..027dc9d
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+# This is used by the Node.js installer, which expects the cygwin/mingw
+# shell script to already be present in the npm dependency folder.
+
+(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
+
+basedir=`dirname "$0"`
+
+case `uname` in
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ `uname` = 'Linux' ] && type wslpath &>/dev/null ; then
+ IS_WSL="true"
+fi
+
+function no_node_dir {
+ # if this didn't work, then everything else below will fail
+ echo "Could not determine Node.js install directory" >&2
+ exit 1
+}
+
+NODE_EXE="$basedir/node.exe"
+if ! [ -x "$NODE_EXE" ]; then
+ NODE_EXE="$basedir/node"
+fi
+if ! [ -x "$NODE_EXE" ]; then
+ NODE_EXE=node
+fi
+
+# this path is passed to node.exe, so it needs to match whatever
+# kind of paths Node.js thinks it's using, typically win32 paths.
+CLI_BASEDIR="$("$NODE_EXE" -p 'require("path").dirname(process.execPath)' 2> /dev/null)"
+if [ $? -ne 0 ]; then
+ # this fails under WSL 1 so add an additional message. we also suppress stderr above
+ # because the actual error raised is not helpful. in WSL 1 node.exe cannot handle
+ # output redirection properly. See https://github.com/microsoft/WSL/issues/2370
+ if [ "$IS_WSL" == "true" ]; then
+ echo "WSL 1 is not supported. Please upgrade to WSL 2 or above." >&2
+ fi
+ no_node_dir
+fi
+NPM_PREFIX_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-prefix.js"
+NPM_CLI_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-cli.js"
+NPM_PREFIX=`"$NODE_EXE" "$NPM_PREFIX_JS"`
+if [ $? -ne 0 ]; then
+ no_node_dir
+fi
+NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
+
+# a path that will fail -f test on any posix bash
+NPM_WSL_PATH="/.."
+
+# WSL can run Windows binaries, so we have to give it the win32 path
+# however, WSL bash tests against posix paths, so we need to construct that
+# to know if npm is installed globally.
+if [ "$IS_WSL" == "true" ]; then
+ NPM_WSL_PATH=`wslpath "$NPM_PREFIX_NPM_CLI_JS"`
+fi
+if [ -f "$NPM_PREFIX_NPM_CLI_JS" ] || [ -f "$NPM_WSL_PATH" ]; then
+ NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
+fi
+
+"$NODE_EXE" "$NPM_CLI_JS" "$@"
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-cli.js b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-cli.js
new file mode 100644
index 0000000..577abe0
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-cli.js
@@ -0,0 +1,2 @@
+#!/usr/bin/env node
+require('../lib/cli.js')(process)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-prefix.js b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-prefix.js
new file mode 100644
index 0000000..b0b0ace
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm-prefix.js
@@ -0,0 +1,30 @@
+#!/usr/bin/env node
+// This is a single-use bin to help windows discover the proper prefix for npm
+// without having to load all of npm first
+// It does not accept argv params
+
+const path = require('node:path')
+const Config = require('@npmcli/config')
+const { definitions, flatten, shorthands } = require('@npmcli/config/lib/definitions')
+const config = new Config({
+ npmPath: path.dirname(__dirname),
+ // argv is explicitly not looked at since prefix is not something that can be changed via argv
+ argv: [],
+ definitions,
+ flatten,
+ shorthands,
+ excludeNpmCwd: false,
+})
+
+async function main () {
+ try {
+ await config.load()
+ // eslint-disable-next-line no-console
+ console.log(config.globalPrefix)
+ } catch (err) {
+ // eslint-disable-next-line no-console
+ console.error(err)
+ process.exit(1)
+ }
+}
+main()
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.cmd b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.cmd
new file mode 100644
index 0000000..68af4b0
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.cmd
@@ -0,0 +1,20 @@
+:: Created by npm, please don't edit manually.
+@ECHO OFF
+
+SETLOCAL
+
+SET "NODE_EXE=%~dp0\node.exe"
+IF NOT EXIST "%NODE_EXE%" (
+ SET "NODE_EXE=node"
+)
+
+SET "NPM_PREFIX_JS=%~dp0\node_modules\npm\bin\npm-prefix.js"
+SET "NPM_CLI_JS=%~dp0\node_modules\npm\bin\npm-cli.js"
+FOR /F "delims=" %%F IN ('CALL "%NODE_EXE%" "%NPM_PREFIX_JS%"') DO (
+ SET "NPM_PREFIX_NPM_CLI_JS=%%F\node_modules\npm\bin\npm-cli.js"
+)
+IF EXIST "%NPM_PREFIX_NPM_CLI_JS%" (
+ SET "NPM_CLI_JS=%NPM_PREFIX_NPM_CLI_JS%"
+)
+
+"%NODE_EXE%" "%NPM_CLI_JS%" %*
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.ps1 b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.ps1
new file mode 100644
index 0000000..efed03f
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npm.ps1
@@ -0,0 +1,50 @@
+#!/usr/bin/env pwsh
+
+Set-StrictMode -Version 'Latest'
+
+$NODE_EXE="$PSScriptRoot/node.exe"
+if (-not (Test-Path $NODE_EXE)) {
+ $NODE_EXE="$PSScriptRoot/node"
+}
+if (-not (Test-Path $NODE_EXE)) {
+ $NODE_EXE="node"
+}
+
+$NPM_PREFIX_JS="$PSScriptRoot/node_modules/npm/bin/npm-prefix.js"
+$NPM_CLI_JS="$PSScriptRoot/node_modules/npm/bin/npm-cli.js"
+$NPM_PREFIX=(& $NODE_EXE $NPM_PREFIX_JS)
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Host "Could not determine Node.js install directory"
+ exit 1
+}
+
+$NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
+if (Test-Path $NPM_PREFIX_NPM_CLI_JS) {
+ $NPM_CLI_JS=$NPM_PREFIX_NPM_CLI_JS
+}
+
+if ($MyInvocation.ExpectingInput) { # takes pipeline input
+ $input | & $NODE_EXE $NPM_CLI_JS $args
+} elseif (-not $MyInvocation.Line) { # used "-File" argument
+ & $NODE_EXE $NPM_CLI_JS $args
+} else { # used "-Command" argument
+ if (($MyInvocation | Get-Member -Name 'Statement') -and $MyInvocation.Statement) {
+ $NPM_ORIGINAL_COMMAND = $MyInvocation.Statement
+ } else {
+ $NPM_ORIGINAL_COMMAND = (
+ [Management.Automation.InvocationInfo].GetProperty('ScriptPosition', [Reflection.BindingFlags] 'Instance, NonPublic')
+ ).GetValue($MyInvocation).Text
+ }
+
+ $NODE_EXE = $NODE_EXE.Replace("``", "````")
+ $NPM_CLI_JS = $NPM_CLI_JS.Replace("``", "````")
+
+ $NPM_COMMAND_ARRAY = [Management.Automation.Language.Parser]::ParseInput($NPM_ORIGINAL_COMMAND, [ref] $null, [ref] $null).
+ EndBlock.Statements.PipelineElements.CommandElements.Extent.Text
+ $NPM_ARGS = ($NPM_COMMAND_ARRAY | Select-Object -Skip 1) -join ' '
+
+ Invoke-Expression "& `"$NODE_EXE`" `"$NPM_CLI_JS`" $NPM_ARGS"
+}
+
+exit $LASTEXITCODE
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx
new file mode 100644
index 0000000..b8619ee
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+# This is used by the Node.js installer, which expects the cygwin/mingw
+# shell script to already be present in the npm dependency folder.
+
+(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
+
+basedir=`dirname "$0"`
+
+case `uname` in
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ `uname` = 'Linux' ] && type wslpath &>/dev/null ; then
+ IS_WSL="true"
+fi
+
+function no_node_dir {
+ # if this didn't work, then everything else below will fail
+ echo "Could not determine Node.js install directory" >&2
+ exit 1
+}
+
+NODE_EXE="$basedir/node.exe"
+if ! [ -x "$NODE_EXE" ]; then
+ NODE_EXE="$basedir/node"
+fi
+if ! [ -x "$NODE_EXE" ]; then
+ NODE_EXE=node
+fi
+
+# this path is passed to node.exe, so it needs to match whatever
+# kind of paths Node.js thinks it's using, typically win32 paths.
+CLI_BASEDIR="$("$NODE_EXE" -p 'require("path").dirname(process.execPath)' 2> /dev/null)"
+if [ $? -ne 0 ]; then
+ # this fails under WSL 1 so add an additional message. we also suppress stderr above
+ # because the actual error raised is not helpful. in WSL 1 node.exe cannot handle
+ # output redirection properly. See https://github.com/microsoft/WSL/issues/2370
+ if [ "$IS_WSL" == "true" ]; then
+ echo "WSL 1 is not supported. Please upgrade to WSL 2 or above." >&2
+ fi
+ no_node_dir
+fi
+NPM_PREFIX_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-prefix.js"
+NPX_CLI_JS="$CLI_BASEDIR/node_modules/npm/bin/npx-cli.js"
+NPM_PREFIX=`"$NODE_EXE" "$NPM_PREFIX_JS"`
+if [ $? -ne 0 ]; then
+ no_node_dir
+fi
+NPM_PREFIX_NPX_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npx-cli.js"
+
+# a path that will fail -f test on any posix bash
+NPX_WSL_PATH="/.."
+
+# WSL can run Windows binaries, so we have to give it the win32 path
+# however, WSL bash tests against posix paths, so we need to construct that
+# to know if npm is installed globally.
+if [ "$IS_WSL" == "true" ]; then
+ NPX_WSL_PATH=`wslpath "$NPM_PREFIX_NPX_CLI_JS"`
+fi
+if [ -f "$NPM_PREFIX_NPX_CLI_JS" ] || [ -f "$NPX_WSL_PATH" ]; then
+ NPX_CLI_JS="$NPM_PREFIX_NPX_CLI_JS"
+fi
+
+"$NODE_EXE" "$NPX_CLI_JS" "$@"
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx-cli.js b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx-cli.js
new file mode 100644
index 0000000..e2e1b87
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx-cli.js
@@ -0,0 +1,130 @@
+#!/usr/bin/env node
+
+const cli = require('../lib/cli.js')
+
+// run the resulting command as `npm exec ...args`
+process.argv[1] = require.resolve('./npm-cli.js')
+process.argv.splice(2, 0, 'exec')
+
+// TODO: remove the affordances for removed items in npm v9
+const removedSwitches = new Set([
+ 'always-spawn',
+ 'ignore-existing',
+ 'shell-auto-fallback',
+])
+
+const removedOpts = new Set([
+ 'npm',
+ 'node-arg',
+ 'n',
+])
+
+const removed = new Set([
+ ...removedSwitches,
+ ...removedOpts,
+])
+
+const { definitions, shorthands } = require('@npmcli/config/lib/definitions')
+const npmSwitches = Object.entries(definitions)
+ .filter(([, { type }]) => type === Boolean ||
+ (Array.isArray(type) && type.includes(Boolean)))
+ .map(([key]) => key)
+
+// things that don't take a value
+const switches = new Set([
+ ...removedSwitches,
+ ...npmSwitches,
+ 'no-install',
+ 'quiet',
+ 'q',
+ 'version',
+ 'v',
+ 'help',
+ 'h',
+])
+
+// things that do take a value
+const opts = new Set([
+ ...removedOpts,
+ 'package',
+ 'p',
+ 'cache',
+ 'userconfig',
+ 'call',
+ 'c',
+ 'shell',
+ 'npm',
+ 'node-arg',
+ 'n',
+])
+
+// break out of loop when we find a positional argument or --
+// If we find a positional arg, we shove -- in front of it, and
+// let the normal npm cli handle the rest.
+let i
+let sawRemovedFlags = false
+for (i = 3; i < process.argv.length; i++) {
+ const arg = process.argv[i]
+ if (arg === '--') {
+ break
+ } else if (/^-/.test(arg)) {
+ const [key, ...v] = arg.replace(/^-+/, '').split('=')
+
+ switch (key) {
+ case 'p':
+ process.argv[i] = ['--package', ...v].join('=')
+ break
+
+ case 'shell':
+ process.argv[i] = ['--script-shell', ...v].join('=')
+ break
+
+ case 'no-install':
+ process.argv[i] = '--yes=false'
+ break
+
+ default:
+ // resolve shorthands and run again
+ if (shorthands[key] && !removed.has(key)) {
+ const a = [...shorthands[key]]
+ if (v.length) {
+ a.push(v.join('='))
+ }
+ process.argv.splice(i, 1, ...a)
+ i--
+ continue
+ }
+ break
+ }
+
+ if (removed.has(key)) {
+ // eslint-disable-next-line no-console
+ console.error(`npx: the --${key} argument has been removed.`)
+ sawRemovedFlags = true
+ process.argv.splice(i, 1)
+ i--
+ }
+
+ if (v.length === 0 && !switches.has(key) &&
+ (opts.has(key) || !/^-/.test(process.argv[i + 1]))) {
+ // value will be next argument, skip over it.
+ if (removed.has(key)) {
+ // also remove the value for the cut key.
+ process.argv.splice(i + 1, 1)
+ } else {
+ i++
+ }
+ }
+ } else {
+ // found a positional arg, put -- in front of it, and we're done
+ process.argv.splice(i, 0, '--')
+ break
+ }
+}
+
+if (sawRemovedFlags) {
+ // eslint-disable-next-line no-console
+ console.error('See `npm help exec` for more information')
+}
+
+cli(process)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.cmd b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.cmd
new file mode 100644
index 0000000..ab991ab
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.cmd
@@ -0,0 +1,20 @@
+:: Created by npm, please don't edit manually.
+@ECHO OFF
+
+SETLOCAL
+
+SET "NODE_EXE=%~dp0\node.exe"
+IF NOT EXIST "%NODE_EXE%" (
+ SET "NODE_EXE=node"
+)
+
+SET "NPM_PREFIX_JS=%~dp0\node_modules\npm\bin\npm-prefix.js"
+SET "NPX_CLI_JS=%~dp0\node_modules\npm\bin\npx-cli.js"
+FOR /F "delims=" %%F IN ('CALL "%NODE_EXE%" "%NPM_PREFIX_JS%"') DO (
+ SET "NPM_PREFIX_NPX_CLI_JS=%%F\node_modules\npm\bin\npx-cli.js"
+)
+IF EXIST "%NPM_PREFIX_NPX_CLI_JS%" (
+ SET "NPX_CLI_JS=%NPM_PREFIX_NPX_CLI_JS%"
+)
+
+"%NODE_EXE%" "%NPX_CLI_JS%" %*
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.ps1 b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.ps1
new file mode 100644
index 0000000..3fe7b54
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/bin/npx.ps1
@@ -0,0 +1,50 @@
+#!/usr/bin/env pwsh
+
+Set-StrictMode -Version 'Latest'
+
+$NODE_EXE="$PSScriptRoot/node.exe"
+if (-not (Test-Path $NODE_EXE)) {
+ $NODE_EXE="$PSScriptRoot/node"
+}
+if (-not (Test-Path $NODE_EXE)) {
+ $NODE_EXE="node"
+}
+
+$NPM_PREFIX_JS="$PSScriptRoot/node_modules/npm/bin/npm-prefix.js"
+$NPX_CLI_JS="$PSScriptRoot/node_modules/npm/bin/npx-cli.js"
+$NPM_PREFIX=(& $NODE_EXE $NPM_PREFIX_JS)
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Host "Could not determine Node.js install directory"
+ exit 1
+}
+
+$NPM_PREFIX_NPX_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npx-cli.js"
+if (Test-Path $NPM_PREFIX_NPX_CLI_JS) {
+ $NPX_CLI_JS=$NPM_PREFIX_NPX_CLI_JS
+}
+
+if ($MyInvocation.ExpectingInput) { # takes pipeline input
+ $input | & $NODE_EXE $NPX_CLI_JS $args
+} elseif (-not $MyInvocation.Line) { # used "-File" argument
+ & $NODE_EXE $NPX_CLI_JS $args
+} else { # used "-Command" argument
+ if (($MyInvocation | Get-Member -Name 'Statement') -and $MyInvocation.Statement) {
+ $NPX_ORIGINAL_COMMAND = $MyInvocation.Statement
+ } else {
+ $NPX_ORIGINAL_COMMAND = (
+ [Management.Automation.InvocationInfo].GetProperty('ScriptPosition', [Reflection.BindingFlags] 'Instance, NonPublic')
+ ).GetValue($MyInvocation).Text
+ }
+
+ $NODE_EXE = $NODE_EXE.Replace("``", "````")
+ $NPX_CLI_JS = $NPX_CLI_JS.Replace("``", "````")
+
+ $NPX_COMMAND_ARRAY = [Management.Automation.Language.Parser]::ParseInput($NPX_ORIGINAL_COMMAND, [ref] $null, [ref] $null).
+ EndBlock.Statements.PipelineElements.CommandElements.Extent.Text
+ $NPX_ARGS = ($NPX_COMMAND_ARRAY | Select-Object -Skip 1) -join ' '
+
+ Invoke-Expression "& `"$NODE_EXE`" `"$NPX_CLI_JS`" $NPX_ARGS"
+}
+
+exit $LASTEXITCODE
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-access.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-access.md
new file mode 100644
index 0000000..2752703
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-access.md
@@ -0,0 +1,95 @@
+---
+title: npm-access
+section: 1
+description: Set access level on published packages
+---
+
+### Synopsis
+
+```bash
+npm access list packages [||] []
+npm access list collaborators [ []]
+npm access get status []
+npm access set status=public|private []
+npm access set mfa=none|publish|automation []
+npm access grant []
+npm access revoke []
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Used to set access controls on private packages.
+
+For all of the subcommands, `npm access` will perform actions on the packages in the current working directory if no package name is passed to the subcommand.
+
+* grant / revoke:
+ Add or remove the ability of users and teams to have read-only or read-write access to a package.
+
+### Details
+
+`npm access` always operates directly on the current registry, configurable from the command line using `--registry=`.
+
+Unscoped packages are *always public*.
+
+Scoped packages *default to restricted*, but you can either publish them as public using `npm publish --access=public`, or set their access as public using `npm access set status=public` after the initial publish.
+
+You must have privileges to set the access of a package:
+
+* You are an owner of an unscoped or scoped package.
+* You are a member of the team that owns a scope.
+* You have been given read-write privileges for a package, either as a member of a team or directly as an owner.
+
+If you have two-factor authentication enabled then you'll be prompted to provide a second factor, or may use the `--otp=...` option to specify it on the command line.
+
+If your account is not paid, then attempts to publish scoped packages will fail with an HTTP 402 status code (logically enough), unless you use
+`--access=public`.
+
+Management of teams and team memberships is done with the `npm team` command.
+
+### Configuration
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+#### `otp`
+
+* Default: null
+* Type: null or String
+
+This is a one-time password from a two-factor authenticator. It's needed
+when publishing or changing package permissions with `npm access`.
+
+If not set, and a registry response fails with a challenge for a one-time
+password, npm will prompt on the command line for one.
+
+
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+### See Also
+
+* [`libnpmaccess`](https://npm.im/libnpmaccess)
+* [npm team](/commands/npm-team)
+* [npm publish](/commands/npm-publish)
+* [npm config](/commands/npm-config)
+* [npm registry](/using-npm/registry)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-adduser.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-adduser.md
new file mode 100644
index 0000000..be2685d
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-adduser.md
@@ -0,0 +1,87 @@
+---
+title: npm-adduser
+section: 1
+description: Add a registry user account
+---
+
+### Synopsis
+
+```bash
+npm adduser
+
+alias: add-user
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Create a new user in the specified registry, and save the credentials to the `.npmrc` file.
+If no registry is specified, the default registry will be used (see [`registry`](/using-npm/registry)).
+
+When you run `npm adduser`, the CLI automatically generates a legacy token of `publish` type.
+For more information, see [About legacy tokens](/about-access-tokens#about-legacy-tokens).
+
+When using `legacy` for your `auth-type`, the username, password, and email are read in from prompts.
+
+### Configuration
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+#### `scope`
+
+* Default: the scope of the current project, if any, or ""
+* Type: String
+
+Associate an operation with a scope for a scoped registry.
+
+Useful when logging in to or out of a private registry:
+
+```
+# log in, linking the scope to the custom registry
+npm login --scope=@mycorp --registry=https://registry.mycorp.com
+
+# log out, removing the link and the auth token
+npm logout --scope=@mycorp
+```
+
+This will cause `@mycorp` to be mapped to the registry for future
+installation of packages specified according to the pattern
+`@mycorp/package`.
+
+This will also cause `npm init` to create a scoped package.
+
+```
+# accept all defaults, and create a package named "@foo/whatever",
+# instead of just named "whatever"
+npm init --scope=@foo --yes
+```
+
+
+
+#### `auth-type`
+
+* Default: "web"
+* Type: "legacy" or "web"
+
+What authentication strategy to use with `login`. Note that if an `otp`
+config is given, this value will always be set to `legacy`.
+
+
+
+### See Also
+
+* [npm registry](/using-npm/registry)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
+* [npm owner](/commands/npm-owner)
+* [npm whoami](/commands/npm-whoami)
+* [npm token](/commands/npm-token)
+* [npm profile](/commands/npm-profile)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-approve-scripts.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-approve-scripts.md
new file mode 100644
index 0000000..e344544
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-approve-scripts.md
@@ -0,0 +1,125 @@
+---
+title: npm-approve-scripts
+section: 1
+description: Approve install scripts for specific dependencies
+---
+
+### Synopsis
+
+```bash
+npm approve-scripts [ ...]
+npm approve-scripts --all
+npm approve-scripts --allow-scripts-pending
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Manages the `allowScripts` field in your project's `package.json`, which
+records which of your dependencies are permitted to run install scripts
+(`preinstall`, `install`, `postinstall`, and `prepare` for non-registry
+sources). This command is the recommended way to maintain that field.
+
+In the current release, this field is advisory: install scripts still run
+by default, but installs print a list of packages whose scripts have not
+been reviewed. A future release will block unreviewed install scripts.
+
+There are three modes:
+
+```bash
+npm approve-scripts [ ...]
+npm approve-scripts --all
+npm approve-scripts --allow-scripts-pending
+```
+
+`` matches every installed version of that package. By default the
+command writes pinned entries (`pkg@1.2.3`), which keep their approval
+narrowed to the specific version you reviewed. Pass `--no-allow-scripts-pin` to write
+name-only entries that allow any future version.
+
+`--all` approves every package with unreviewed install scripts in one go.
+
+`--allow-scripts-pending` is read-only: it lists every package whose install scripts
+are not yet covered by `allowScripts`, without modifying `package.json`.
+
+`approve-scripts` honours the asymmetric pin rule: if you re-approve a
+package whose installed version has changed, the existing pin is rewritten
+to track the new installed version. Multi-version statements
+(`pkg@1 || 2`) are left alone, since they likely capture intent that
+the command cannot infer. Existing `false` entries always win;
+`approve-scripts` will not silently re-allow a package you previously
+denied.
+
+### Examples
+
+```bash
+# Approve all currently-installed install scripts after reviewing them
+npm approve-scripts --all
+
+# Approve specific packages, pinned to their installed version
+npm approve-scripts canvas sharp
+
+# Approve name-only (any version of this package is allowed)
+npm approve-scripts --no-allow-scripts-pin canvas
+
+# Preview which packages still need review
+npm approve-scripts --allow-scripts-pending
+```
+
+### Configuration
+
+#### `all`
+
+* Default: false
+* Type: Boolean
+
+When running `npm outdated` and `npm ls`, setting `--all` will show all
+outdated or installed packages, rather than only those directly depended
+upon by the current project.
+
+
+
+#### `allow-scripts-pending`
+
+* Default: false
+* Type: Boolean
+
+List packages with install scripts that are not yet covered by the
+`allowScripts` policy, without modifying `package.json`. Only meaningful for
+`npm approve-scripts`.
+
+
+
+#### `allow-scripts-pin`
+
+* Default: true
+* Type: Boolean
+
+Write pinned (`pkg@version`) entries when approving install scripts. Set to
+`false` to write name-only entries that allow any version. Has no effect on
+`npm deny-scripts`, which always writes name-only entries regardless of this
+setting.
+
+
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+### See Also
+
+* [npm deny-scripts](/commands/npm-deny-scripts)
+* [npm install](/commands/npm-install)
+* [npm rebuild](/commands/npm-rebuild)
+* [package.json](/configuring-npm/package-json)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-audit.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-audit.md
new file mode 100644
index 0000000..e0b8037
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-audit.md
@@ -0,0 +1,449 @@
+---
+title: npm-audit
+section: 1
+description: Run a security audit
+---
+
+### Synopsis
+
+```bash
+npm audit [fix|signatures]
+```
+
+### Description
+
+The audit command submits a description of the dependencies configured in your project to your default registry and asks for a report of known vulnerabilities.
+If any vulnerabilities are found, then the impact and appropriate remediation will be calculated.
+If the `fix` argument is provided, then remediations will be applied to the package tree.
+
+The command will exit with a 0 exit code if no vulnerabilities were found.
+
+Note that some vulnerabilities cannot be fixed automatically and will require manual intervention or review.
+Also note that since `npm audit fix` runs a full-fledged `npm install` under the hood, all configs that apply to the installer will also apply to `npm install` -- so things like `npm audit fix --package-lock-only` will work as expected.
+
+By default, the audit command will exit with a non-zero code if any vulnerability is found.
+It may be useful in CI environments to include the `--audit-level` parameter to specify the minimum vulnerability level that will cause the command to fail.
+This option does not filter the report output, it simply changes the command's failure threshold.
+
+### Package lock
+
+By default npm requires a package-lock or shrinkwrap in order to run the audit.
+You can bypass the package lock with `--no-package-lock` but be aware the results may be different with every run, since npm will re-build the dependency tree each time.
+
+### Audit Signatures
+
+To ensure the integrity of packages you download from the public npm registry, or any registry that supports signatures, you can verify the registry signatures of downloaded packages using the npm CLI.
+
+Registry signatures can be verified using the following `audit` command:
+
+```bash
+$ npm audit signatures
+```
+
+The `audit signatures` command will also verify the provenance attestations of downloaded packages.
+Because provenance attestations are such a new feature, security features may be added to (or changed in) the attestation format over time.
+To ensure that you're always able to verify attestation signatures check that you're running the latest version of the npm CLI. Please note this often means updating npm beyond the version that ships with Node.js.
+
+To include the full sigstore attestation bundles in JSON output, use:
+
+```bash
+$ npm audit signatures --json --include-attestations
+```
+
+This adds a `verified` array to the JSON output containing the attestation
+bundles (DSSE envelopes, verification material, and transparency log entries)
+for each verified package.
+
+The npm CLI supports registry signatures and signing keys provided by any registry if the following conventions are followed:
+
+1. Signatures are provided in the package's `packument` in each published version within the `dist` object:
+
+```json
+"dist":{
+ "..omitted..": "..omitted..",
+ "signatures": [{
+ "keyid": "SHA256:{{SHA256_PUBLIC_KEY}}",
+ "sig": "a312b9c3cb4a1b693e8ebac5ee1ca9cc01f2661c14391917dcb111517f72370809..."
+ }]
+}
+```
+
+See this [example](https://registry.npmjs.org/light-cycle/1.4.3) of a signed package from the public npm registry.
+
+The `sig` is generated using the following template: `${package.name}@${package.version}:${package.dist.integrity}` and the `keyid` has to match one of the public signing keys below.
+
+2. Public signing keys are provided at `registry-host.tld/-/npm/v1/keys` in the following format:
+
+```
+{
+ "keys": [{
+ "expires": null,
+ "keyid": "SHA256:{{SHA256_PUBLIC_KEY}}",
+ "keytype": "ecdsa-sha2-nistp256",
+ "scheme": "ecdsa-sha2-nistp256",
+ "key": "{{B64_PUBLIC_KEY}}"
+ }]
+}
+```
+
+Keys response:
+
+- `expires`: null or a simplified extended [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDTHH:mm:ss.sssZ`
+- `keyid`: sha256 fingerprint of the public key
+- `keytype`: only `ecdsa-sha2-nistp256` is currently supported by the npm CLI
+- `scheme`: only `ecdsa-sha2-nistp256` is currently supported by the npm CLI
+- `key`: base64 encoded public key
+
+See this [example key's response from the public npm registry](https://registry.npmjs.org/-/npm/v1/keys).
+
+### Audit Endpoints
+
+There are two audit endpoints that npm may use to fetch vulnerability information: the `Bulk Advisory` endpoint and the `Quick Audit` endpoint.
+
+#### Bulk Advisory Endpoint
+
+As of version 7, npm uses the much faster `Bulk Advisory` endpoint to optimize the speed of calculating audit results.
+
+npm will generate a JSON payload with the name and list of versions of each package in the tree, and POST it to the default configured registry at the path `/-/npm/v1/security/advisories/bulk`.
+
+Any packages in the tree that do not have a `version` field in their package.json file will be ignored.
+If any `--omit` options are specified (either via the [`--omit` config](/using-npm/config#omit), or one of the shorthands such as `--production`, `--only=dev`, and so on), then packages will be omitted from the submitted payload as appropriate.
+
+If the registry responds with an error, or with an invalid response, then npm will attempt to load advisory data from the `Quick Audit` endpoint.
+
+The expected result will contain a set of advisory objects for each dependency that matches the advisory range.
+Each advisory object contains a `name`, `url`, `id`, `severity`, `vulnerable_versions`, and `title`.
+
+npm then uses these advisory objects to calculate vulnerabilities and meta-vulnerabilities of the dependencies within the tree.
+
+#### Quick Audit Endpoint
+
+If the `Bulk Advisory` endpoint returns an error, or invalid data, npm will attempt to load advisory data from the `Quick Audit` endpoint, which is considerably slower in most cases.
+
+The full package tree as found in `package-lock.json` is submitted, along with the following pieces of additional metadata:
+
+* `npm_version`
+* `node_version`
+* `platform`
+* `arch`
+* `node_env`
+
+All packages in the tree are submitted to the Quick Audit endpoint.
+Omitted dependency types are skipped when generating the report.
+
+#### Scrubbing
+
+Out of an abundance of caution, npm versions 5 and 6 would "scrub" any packages from the submitted report if their name contained a `/` character, so as to avoid leaking the names of potentially private packages or git URLs.
+
+However, in practice, this resulted in audits often failing to properly detect meta-vulnerabilities, because the tree would appear to be invalid due to missing dependencies, and prevented the detection of vulnerabilities in package trees that used git dependencies or private modules.
+
+This scrubbing has been removed from npm as of version 7.
+
+#### Calculating Meta-Vulnerabilities and Remediations
+
+npm uses the [`@npmcli/metavuln-calculator`](http://npm.im/@npmcli/metavuln-calculator) module to turn a set of security advisories into a set of "vulnerability" objects.
+A "meta-vulnerability" is a dependency that is vulnerable by virtue of dependence on vulnerable versions of a vulnerable package.
+
+For example, if the package `foo` is vulnerable in the range `>=1.0.2 <2.0.0`, and the package `bar` depends on `foo@^1.1.0`, then that version of `bar` can only be installed by installing a vulnerable version of `foo`.
+In this case, `bar` is a "metavulnerability".
+
+Once metavulnerabilities for a given package are calculated, they are cached in the `~/.npm` folder and only re-evaluated if the advisory range changes, or a new version of the package is published (in which case, the new version is checked for metavulnerable status as well).
+
+If the chain of metavulnerabilities extends all the way to the root project, and it cannot be updated without changing its dependency ranges, then `npm audit fix` will require the `--force` option to apply the remediation.
+If remediations do not require changes to the dependency ranges, then all vulnerable packages will be updated to a version that does not have an advisory or metavulnerability posted against it.
+
+### Exit Code
+
+The `npm audit` command will exit with a 0 exit code if no vulnerabilities were found.
+The `npm audit fix` command will exit with 0 exit code if no vulnerabilities are found _or_ if the remediation is able to successfully fix all vulnerabilities.
+
+If vulnerabilities were found the exit code will depend on the [`audit-level` config](/using-npm/config#audit-level).
+
+### Examples
+
+Scan your project for vulnerabilities and automatically install any compatible updates to vulnerable dependencies:
+
+```bash
+$ npm audit fix
+```
+
+Run `audit fix` without modifying `node_modules`, but still updating the pkglock:
+
+```bash
+$ npm audit fix --package-lock-only
+```
+
+Skip updating `devDependencies`:
+
+```bash
+$ npm audit fix --only=prod
+```
+
+Have `audit fix` install SemVer-major updates to toplevel dependencies, not just SemVer-compatible ones:
+
+```bash
+$ npm audit fix --force
+```
+
+Do a dry run to get an idea of what `audit fix` will do, and _also_ output install information in JSON format:
+
+```bash
+$ npm audit fix --dry-run --json
+```
+
+Scan your project for vulnerabilities and just show the details, without fixing anything:
+
+```bash
+$ npm audit
+```
+
+Get the detailed audit report in JSON format:
+
+```bash
+$ npm audit --json
+```
+
+Fail an audit only if the results include a vulnerability with a level of moderate or higher:
+
+```bash
+$ npm audit --audit-level=moderate
+```
+
+### Configuration
+
+#### `audit-level`
+
+* Default: null
+* Type: null, "info", "low", "moderate", "high", "critical", or "none"
+
+The minimum level of vulnerability for `npm audit` to exit with a non-zero
+exit code.
+
+
+
+#### `dry-run`
+
+* Default: false
+* Type: Boolean
+
+Indicates that you don't want npm to make any changes and that it should
+only report what it would have done. This can be passed into any of the
+commands that modify your local installation, eg, `install`, `update`,
+`dedupe`, `uninstall`, as well as `pack` and `publish`.
+
+Note: This is NOT honored by other network related commands, eg `dist-tags`,
+`owner`, etc.
+
+
+
+#### `force`
+
+* Default: false
+* Type: Boolean
+
+Removes various protections against unfortunate side effects, common
+mistakes, unnecessary performance degradation, and malicious input.
+
+* Allow clobbering non-npm files in global installs.
+* Allow the `npm version` command to work on an unclean git repository.
+* Allow deleting the cache folder with `npm cache clean`.
+* Allow installing packages that have an `engines` declaration requiring a
+ different version of npm.
+* Allow installing packages that have an `engines` declaration requiring a
+ different version of `node`, even if `--engine-strict` is enabled.
+* Allow `npm audit fix` to install modules outside your stated dependency
+ range (including SemVer-major changes).
+* Allow unpublishing all versions of a published package.
+* Allow conflicting peerDependencies to be installed in the root project.
+* Implicitly set `--yes` during `npm init`.
+* Allow clobbering existing values in `npm pkg`
+* Allow unpublishing of entire packages (not just a single version).
+
+If you don't have a clear idea of what you want to do, it is strongly
+recommended that you do not use this option!
+
+
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+#### `package-lock-only`
+
+* Default: false
+* Type: Boolean
+
+If set to true, the current operation will only use the `package-lock.json`,
+ignoring `node_modules`.
+
+For `update` this means only the `package-lock.json` will be updated,
+instead of checking `node_modules` and downloading dependencies.
+
+For `list` this means the output will be based on the tree described by the
+`package-lock.json`, rather than the contents of `node_modules`.
+
+
+
+#### `package-lock`
+
+* Default: true
+* Type: Boolean
+
+If set to false, then ignore `package-lock.json` files when installing. This
+will also prevent _writing_ `package-lock.json` if `save` is true.
+
+
+
+#### `omit`
+
+* Default: 'dev' if the `NODE_ENV` environment variable is set to
+ 'production'; otherwise, empty.
+* Type: "dev", "optional", or "peer" (can be set multiple times)
+
+Dependency types to omit from the installation tree on disk.
+
+Note that these dependencies _are_ still resolved and added to the
+`package-lock.json` or `npm-shrinkwrap.json` file. They are just not
+physically installed on disk.
+
+If a package type appears in both the `--include` and `--omit` lists, then
+it will be included.
+
+If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment
+variable will be set to `'production'` for all lifecycle scripts.
+
+
+
+#### `include`
+
+* Default:
+* Type: "prod", "dev", "optional", or "peer" (can be set multiple times)
+
+Option that allows for defining which types of dependencies to install.
+
+This is the inverse of `--omit=`.
+
+Dependency types specified in `--include` will not be omitted, regardless of
+the order in which omit/include are specified on the command-line.
+
+
+
+#### `foreground-scripts`
+
+* Default: `false` unless when using `npm pack` or `npm publish` where it
+ defaults to `true`
+* Type: Boolean
+
+Run all build scripts (ie, `preinstall`, `install`, and `postinstall`)
+scripts for installed packages in the foreground process, sharing standard
+input, output, and error with the main npm process.
+
+Note that this will generally make installs run slower, and be much noisier,
+but can be useful for debugging.
+
+
+
+#### `ignore-scripts`
+
+* Default: false
+* Type: Boolean
+
+If true, npm does not run scripts specified in package.json files.
+
+Note that commands explicitly intended to run a particular script, such as
+`npm start`, `npm stop`, `npm restart`, `npm test`, and `npm run` will still
+run their intended script if `ignore-scripts` is set, but they will *not*
+run any pre- or post-scripts.
+
+
+
+#### `include-attestations`
+
+* Default: false
+* Type: Boolean
+
+When used with `npm audit signatures --json`, includes the full sigstore
+attestation bundles in the JSON output for each verified package. The
+bundles contain DSSE envelopes, verification material, and transparency log
+entries.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+#### `install-links`
+
+* Default: false
+* Type: Boolean
+
+When set file: protocol dependencies will be packed and installed as regular
+dependencies instead of creating a symlink. This option has no effect on
+workspaces.
+
+
+
+### See Also
+
+* [npm install](/commands/npm-install)
+* [config](/using-npm/config)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-bugs.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-bugs.md
new file mode 100644
index 0000000..0531b49
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-bugs.md
@@ -0,0 +1,106 @@
+---
+title: npm-bugs
+section: 1
+description: Report bugs for a package in a web browser
+---
+
+### Synopsis
+
+```bash
+npm bugs [ [ ...]]
+
+alias: issues
+```
+
+### Description
+
+This command tries to guess at the likely location of a package's bug tracker URL or the `mailto` URL of the support email, and then tries to open it using the [`--browser` config](/using-npm/config#browser) param.
+If no package name is provided, it will search for a `package.json` in the current folder and use the `name` property.
+
+### Configuration
+
+#### `browser`
+
+* Default: macOS: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: null, Boolean, or String
+
+The browser that is called by npm commands to open websites.
+
+Set to `false` to suppress browser behavior and instead print urls to
+terminal.
+
+Set to `true` to use default system URL opener.
+
+
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+### See Also
+
+* [npm docs](/commands/npm-docs)
+* [npm view](/commands/npm-view)
+* [npm publish](/commands/npm-publish)
+* [npm registry](/using-npm/registry)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
+* [package.json](/configuring-npm/package-json)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-cache.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-cache.md
new file mode 100644
index 0000000..d1b114c
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-cache.md
@@ -0,0 +1,100 @@
+---
+title: npm-cache
+section: 1
+description: Manipulates packages cache
+---
+
+### Synopsis
+
+```bash
+npm cache add
+npm cache clean []
+npm cache ls [@]
+npm cache verify
+npm cache npx ls
+npm cache npx rm [...]
+npm cache npx info ...
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Used to add, list, or clean the `npm cache` folder.
+Also used to view info about entries in the `npm exec` (aka `npx`) cache folder.
+
+#### `npm cache`
+
+* add:
+ Add the specified packages to the local cache.
+ This command is primarily intended to be used internally by npm, but it can provide a way to add data to the local installation cache explicitly.
+
+* clean:
+ Delete a single entry or all entries out of the cache folder.
+ Note that this is typically unnecessary, as npm's cache is self-healing and resistant to data corruption issues.
+
+* ls:
+ List given entries or all entries in the local cache.
+
+* verify:
+ Verify the contents of the cache folder, garbage collecting any unneeded data, and verifying the integrity of the cache index and all cached data.
+
+#### `npm cache npx`
+
+* ls:
+ List all entries in the npx cache.
+
+* rm:
+ Remove given entries or all entries from the npx cache.
+
+* info:
+ Get detailed information about given entries in the npx cache.
+
+### Details
+
+npm stores cache data in an opaque directory within the configured `cache`, named `_cacache`.
+This directory is a [`cacache`](http://npm.im/cacache)-based content-addressable cache that stores all http request data as well as other package-related data.
+This directory is primarily accessed through `pacote`, the library responsible for all package fetching as of npm@5.
+
+All data that passes through the cache is fully verified for integrity on both insertion and extraction.
+Cache corruption will either trigger an error, or signal to `pacote` that the data must be refetched, which it will do automatically.
+For this reason, it should never be necessary to clear the cache for any reason other than reclaiming disk space, thus why `clean` now requires `--force` to run.
+
+There is currently no method exposed through npm to inspect or directly manage the contents of this cache.
+In order to access it, `cacache` must be used directly.
+
+npm will not remove data by itself: the cache will grow as new packages are installed.
+
+### A note about the cache's design
+
+The npm cache is strictly a cache: it should not be relied upon as a persistent and reliable data store for package data.
+npm makes no guarantee that a previously-cached piece of data will be available later, and will automatically delete corrupted contents.
+The primary guarantee that the cache makes is that, if it does return data, that data will be exactly the data that was inserted.
+
+To run an offline verification of existing cache contents, use `npm cache verify`.
+
+### Configuration
+
+#### `cache`
+
+* Default: Windows: `%LocalAppData%\npm-cache`, Posix: `~/.npm`
+* Type: Path
+
+The location of npm's cache directory.
+
+
+
+### See Also
+
+* [package spec](/using-npm/package-spec)
+* [npm folders](/configuring-npm/folders)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
+* [npm install](/commands/npm-install)
+* [npm publish](/commands/npm-publish)
+* [npm pack](/commands/npm-pack)
+* [npm exec](/commands/npm-exec)
+* https://npm.im/cacache
+* https://npm.im/pacote
+* https://npm.im/@npmcli/arborist
+* https://npm.im/make-fetch-happen
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-ci.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-ci.md
new file mode 100644
index 0000000..bc46007
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-ci.md
@@ -0,0 +1,434 @@
+---
+title: npm-ci
+section: 1
+description: Clean install a project
+---
+
+### Synopsis
+
+```bash
+npm ci
+
+aliases: clean-install, ic, install-clean, isntall-clean
+```
+
+### Description
+
+This command is similar to [`npm install`](/commands/npm-install), except it's meant to be used in automated environments such as test platforms, continuous integration, and deployment -- or any situation where you want to make sure you're doing a clean install of your dependencies.
+
+The main differences between using `npm install` and `npm ci` are:
+
+* The project **must** have an existing `package-lock.json` or
+ `npm-shrinkwrap.json`.
+* If dependencies in the package lock do not match those in `package.json`,
+ `npm ci` will exit with an error, instead of updating the package lock.
+* `npm ci` can only install entire projects at a time: individual dependencies cannot be added with this command.
+* If a `node_modules` is already present, it will be automatically removed before `npm ci` begins its install.
+* It will never write to `package.json` or any of the package-locks:
+ installs are essentially frozen.
+
+NOTE: If you create your `package-lock.json` file by running `npm install` with flags that can affect the shape of your dependency tree, such as
+`--legacy-peer-deps` or `--install-links`, you _must_ provide the same flags to `npm ci` or you are likely to encounter errors.
+An easy way to do this is to run, for example,
+`npm config set legacy-peer-deps=true --location=project` and commit the
+`.npmrc` file to your repo.
+
+### Example
+
+Make sure you have a package-lock and an up-to-date install:
+
+```bash
+$ cd ./my/npm/project
+$ npm install
+added 154 packages in 10s
+$ ls | grep package-lock
+```
+
+Run `npm ci` in that project
+
+```bash
+$ npm ci
+added 154 packages in 5s
+```
+
+Configure Travis CI to build using `npm ci` instead of `npm install`:
+
+```bash
+# .travis.yml
+install:
+- npm ci
+# keep the npm cache around to speed up installs
+cache:
+ directories:
+ - "$HOME/.npm"
+```
+
+### Configuration
+
+#### `install-strategy`
+
+* Default: "hoisted"
+* Type: "hoisted", "nested", "shallow", or "linked"
+
+Sets the strategy for installing packages in node_modules. hoisted
+(default): Install non-duplicated in top-level, and duplicated as necessary
+within directory structure. nested: (formerly --legacy-bundling) install in
+place, no hoisting. shallow (formerly --global-style) only install direct
+deps at top-level. linked: (experimental) install in node_modules/.store,
+link in place, unhoisted.
+
+
+
+#### `legacy-bundling`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=nested`
+
+Instead of hoisting package installs in `node_modules`, install packages in
+the same manner that they are depended on. This may cause very deep
+directory structures and duplicate package installs as there is no
+de-duplicating. Sets `--install-strategy=nested`.
+
+
+
+#### `global-style`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=shallow`
+
+Only install direct dependencies in the top level `node_modules`, but hoist
+on deeper dependencies. Sets `--install-strategy=shallow`.
+
+
+
+#### `omit`
+
+* Default: 'dev' if the `NODE_ENV` environment variable is set to
+ 'production'; otherwise, empty.
+* Type: "dev", "optional", or "peer" (can be set multiple times)
+
+Dependency types to omit from the installation tree on disk.
+
+Note that these dependencies _are_ still resolved and added to the
+`package-lock.json` or `npm-shrinkwrap.json` file. They are just not
+physically installed on disk.
+
+If a package type appears in both the `--include` and `--omit` lists, then
+it will be included.
+
+If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment
+variable will be set to `'production'` for all lifecycle scripts.
+
+
+
+#### `include`
+
+* Default:
+* Type: "prod", "dev", "optional", or "peer" (can be set multiple times)
+
+Option that allows for defining which types of dependencies to install.
+
+This is the inverse of `--omit=`.
+
+Dependency types specified in `--include` will not be omitted, regardless of
+the order in which omit/include are specified on the command-line.
+
+
+
+#### `strict-peer-deps`
+
+* Default: false
+* Type: Boolean
+
+If set to `true`, and `--legacy-peer-deps` is not set, then _any_
+conflicting `peerDependencies` will be treated as an install failure, even
+if npm could reasonably guess the appropriate resolution based on non-peer
+dependency relationships.
+
+By default, conflicting `peerDependencies` deep in the dependency graph will
+be resolved using the nearest non-peer dependency specification, even if
+doing so will result in some packages receiving a peer dependency outside
+the range set in their package's `peerDependencies` object.
+
+When such an override is performed, a warning is printed, explaining the
+conflict and the packages involved. If `--strict-peer-deps` is set, then
+this warning is treated as a failure.
+
+
+
+#### `foreground-scripts`
+
+* Default: `false` unless when using `npm pack` or `npm publish` where it
+ defaults to `true`
+* Type: Boolean
+
+Run all build scripts (ie, `preinstall`, `install`, and `postinstall`)
+scripts for installed packages in the foreground process, sharing standard
+input, output, and error with the main npm process.
+
+Note that this will generally make installs run slower, and be much noisier,
+but can be useful for debugging.
+
+
+
+#### `ignore-scripts`
+
+* Default: false
+* Type: Boolean
+
+If true, npm does not run scripts specified in package.json files.
+
+Note that commands explicitly intended to run a particular script, such as
+`npm start`, `npm stop`, `npm restart`, `npm test`, and `npm run` will still
+run their intended script if `ignore-scripts` is set, but they will *not*
+run any pre- or post-scripts.
+
+
+
+#### `allow-directory`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to install dependencies from directories. That
+is, dependencies that point to a directory instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any directories to be installed. `none` prevents any
+directories from being installed. `root` only allows directories defined in
+your project's package.json to be installed. Also allows directory
+dependencies to be used for other commands like `npm view`
+
+
+
+#### `allow-file`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to install dependencies from tarball files. That
+is, dependencies that point to a local tarball file instead of a version or
+semver range. Please note that this could leave your tree incomplete and
+some packages may not function as intended or designed. Changing this
+setting will not remove dependencies that are already installed.
+
+`all` allows any tarball file to be installed. `none` prevents any tarball
+file from being installed. `root` only allows tarball files defined in your
+project's package.json to be installed. Also allows tarball file
+dependencies to be used for other commands like `npm view`
+
+
+
+#### `allow-git`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to fetch dependencies from git references. That
+is, dependencies that point to a git repo instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any git dependencies to be fetched and installed. `none`
+prevents any git dependencies from being fetched and installed. `root` only
+allows git dependencies defined in your project's package.json to be fetched
+and installed. Also allows git dependencies to be fetched for other commands
+like `npm view`
+
+
+
+#### `allow-remote`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to fetch dependencies from urls. That is,
+dependencies that point to a tarball url instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any url to be installed. `none` prevents any url from being
+installed. `root` only allows urls defined in your project's package.json to
+be installed. Also allows url dependencies to be used for other commands
+like `npm view`
+
+
+
+#### `allow-scripts`
+
+* Default: ""
+* Type: String (can be set multiple times)
+
+Comma-separated list of packages whose install-time lifecycle scripts
+(`preinstall`, `install`, `postinstall`, and `prepare` for non-registry
+dependencies) are allowed to run.
+
+This setting is intended for one-off and global contexts: `npm exec`, `npx`,
+and `npm install -g`, where no project `package.json` is involved. For
+team-wide policy in a project, use the `allowScripts` field in
+`package.json` (which also supports explicit denials), or configure it in
+`.npmrc`. Passing `--allow-scripts` on the command line during a
+project-scoped `npm install`, `ci`, `update`, or `rebuild` is an error.
+
+Each name is matched against a dependency's resolved identity, not against
+the package's self-reported name. `--ignore-scripts` and
+`--dangerously-allow-all-scripts` both override this setting.
+
+
+
+#### `strict-allow-scripts`
+
+* Default: false
+* Type: Boolean
+
+If `true`, turn the install-script policy from a warning into a hard error:
+any dependency with install scripts not covered by `allowScripts` will fail
+the install instead of running with a notice.
+
+Dependencies explicitly denied with `false` in `allowScripts` are always
+silently skipped; this setting only affects unreviewed entries.
+`--ignore-scripts` and `--dangerously-allow-all-scripts` both override this
+setting.
+
+
+
+#### `dangerously-allow-all-scripts`
+
+* Default: false
+* Type: Boolean
+
+If `true`, bypass the `allowScripts` policy entirely and run every
+dependency install script regardless of whether it was approved or denied.
+Intended as a migration escape hatch only; its use is strongly discouraged.
+`--ignore-scripts` still takes precedence over this setting.
+
+
+
+#### `audit`
+
+* Default: true
+* Type: Boolean
+
+When "true" submit audit reports alongside the current npm command to the
+default registry and all registries configured for scopes. See the
+documentation for [`npm audit`](/commands/npm-audit) for details on what is
+submitted.
+
+
+
+#### `bin-links`
+
+* Default: true
+* Type: Boolean
+
+Tells npm to create symlinks (or `.cmd` shims on Windows) for package
+executables.
+
+Set to false to have it not do this. This can be used to work around the
+fact that some file systems don't support symlinks, even on ostensibly Unix
+systems.
+
+
+
+#### `fund`
+
+* Default: true
+* Type: Boolean
+
+When "true" displays the message at the end of each `npm install`
+acknowledging the number of dependencies looking for funding. See [`npm
+fund`](/commands/npm-fund) for details.
+
+
+
+#### `dry-run`
+
+* Default: false
+* Type: Boolean
+
+Indicates that you don't want npm to make any changes and that it should
+only report what it would have done. This can be passed into any of the
+commands that modify your local installation, eg, `install`, `update`,
+`dedupe`, `uninstall`, as well as `pack` and `publish`.
+
+Note: This is NOT honored by other network related commands, eg `dist-tags`,
+`owner`, etc.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+#### `install-links`
+
+* Default: false
+* Type: Boolean
+
+When set file: protocol dependencies will be packed and installed as regular
+dependencies instead of creating a symlink. This option has no effect on
+workspaces.
+
+
+
+### See Also
+
+* [npm install](/commands/npm-install)
+* [package-lock.json](/configuring-npm/package-lock-json)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-completion.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-completion.md
new file mode 100644
index 0000000..f34c371
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-completion.md
@@ -0,0 +1,36 @@
+---
+title: npm-completion
+section: 1
+description: Tab Completion for npm
+---
+
+### Synopsis
+
+```bash
+npm completion
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Enables tab-completion in all npm commands.
+
+The synopsis above loads the completions into your current shell.
+Adding it to your ~/.bashrc or ~/.zshrc will make the completions available everywhere:
+
+```bash
+npm completion >> ~/.bashrc
+npm completion >> ~/.zshrc
+```
+
+You may of course also pipe the output of `npm completion` to a file such as `/usr/local/etc/bash_completion.d/npm` or
+`/etc/bash_completion.d/npm` if you have a system that will read
+that file for you.
+
+When `COMP_CWORD`, `COMP_LINE`, and `COMP_POINT` are defined in the environment, `npm completion` acts in "plumbing mode", and outputs completions based on the arguments.
+
+### See Also
+
+* [npm developers](/using-npm/developers)
+* [npm](/commands/npm)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-config.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-config.md
new file mode 100644
index 0000000..2ca4a64
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-config.md
@@ -0,0 +1,176 @@
+---
+title: npm-config
+section: 1
+description: Manage the npm configuration files
+---
+
+### Synopsis
+
+```bash
+npm config set = [= ...]
+npm config get [ [ ...]]
+npm config delete [ ...]
+npm config list [--json]
+npm config edit
+npm config fix
+
+alias: c
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+npm gets its config settings from the command line, environment variables, `npmrc` files, and in some cases, the `package.json` file.
+
+See [npmrc](/configuring-npm/npmrc) for more information about the npmrc files.
+
+See [config](/using-npm/config) for a more thorough explanation of the mechanisms involved, and a full list of config options available.
+
+The `npm config` command can be used to update and edit the contents of the user and global npmrc files.
+
+### Sub-commands
+
+Config supports the following sub-commands:
+
+#### set
+
+```bash
+npm config set key=value [key=value...]
+npm set key=value [key=value...]
+```
+
+Sets each of the config keys to the value provided.
+Modifies the user configuration file unless [`location`](/commands/npm-config#location) is passed.
+
+If value is omitted, the key will be removed from your config file entirely.
+
+Note: for backwards compatibility, `npm config set key value` is supported as an alias for `npm config set key=value`.
+
+#### get
+
+```bash
+npm config get [key ...]
+npm get [key ...]
+```
+
+Echo the config value(s) to stdout.
+
+If multiple keys are provided, then the values will be prefixed with the key names.
+
+If no keys are provided, then this command behaves the same as `npm config list`.
+
+#### list
+
+```bash
+npm config list
+```
+
+Show all the config settings.
+Use `-l` to also show defaults.
+Use `--json` to show the settings in json format.
+
+#### delete
+
+```bash
+npm config delete key [key ...]
+```
+
+Deletes the specified keys from all configuration files.
+
+#### edit
+
+```bash
+npm config edit
+```
+
+Opens the config file in an editor.
+Use the `--global` flag to edit the global config.
+
+#### fix
+
+```bash
+npm config fix
+```
+
+Attempts to repair invalid configuration items.
+Usually this means attaching authentication config (i.e.
+`_auth`, `_authToken`) to the configured `registry`.
+
+### Configuration
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+#### `global`
+
+* Default: false
+* Type: Boolean
+
+Operates in "global" mode, so that packages are installed into the `prefix`
+folder instead of the current working directory. See
+[folders](/configuring-npm/folders) for more on the differences in behavior.
+
+* packages are installed into the `{prefix}/lib/node_modules` folder, instead
+ of the current working directory.
+* bin files are linked to `{prefix}/bin`
+* man pages are linked to `{prefix}/share/man`
+
+
+
+#### `editor`
+
+* Default: The EDITOR or VISUAL environment variables, or
+ '%SYSTEMROOT%\notepad.exe' on Windows, or 'vi' on Unix systems
+* Type: String
+
+The command to run for `npm edit` and `npm config edit`.
+
+
+
+#### `location`
+
+* Default: "user" unless `--global` is passed, which will also set this value
+ to "global"
+* Type: "global", "user", or "project"
+
+When passed to `npm config` this refers to which config file to use.
+
+When set to "global" mode, packages are installed into the `prefix` folder
+instead of the current working directory. See
+[folders](/configuring-npm/folders) for more on the differences in behavior.
+
+* packages are installed into the `{prefix}/lib/node_modules` folder, instead
+ of the current working directory.
+* bin files are linked to `{prefix}/bin`
+* man pages are linked to `{prefix}/share/man`
+
+
+
+#### `long`
+
+* Default: false
+* Type: Boolean
+
+Show extended information in `ls`, `search`, and `help-search`.
+
+
+
+### See Also
+
+* [npm folders](/configuring-npm/folders)
+* [npm config](/commands/npm-config)
+* [package.json](/configuring-npm/package-json)
+* [npmrc](/configuring-npm/npmrc)
+* [npm](/commands/npm)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dedupe.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dedupe.md
new file mode 100644
index 0000000..8186ee2
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dedupe.md
@@ -0,0 +1,381 @@
+---
+title: npm-dedupe
+section: 1
+description: Reduce duplication in the package tree
+---
+
+### Synopsis
+
+```bash
+npm dedupe
+
+alias: ddp
+```
+
+### Description
+
+Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can be more effectively shared by multiple dependent packages.
+
+For example, consider this dependency graph:
+
+```
+a
++-- b <-- depends on c@1.0.x
+| `-- c@1.0.3
+`-- d <-- depends on c@~1.0.9
+ `-- c@1.0.10
+```
+
+In this case, `npm dedupe` will transform the tree to:
+
+```bash
+a
++-- b
++-- d
+`-- c@1.0.10
+```
+
+Because of the hierarchical nature of node's module lookup, b and d will both get their dependency met by the single c package at the root level of the tree.
+
+In some cases, you may have a dependency graph like this:
+
+```
+a
++-- b <-- depends on c@1.0.x
++-- c@1.0.3
+`-- d <-- depends on c@1.x
+ `-- c@1.9.9
+```
+
+During the installation process, the `c@1.0.3` dependency for `b` was placed in the root of the tree.
+Though `d`'s dependency on `c@1.x` could have been satisfied by `c@1.0.3`, the newer `c@1.9.9` dependency was used, because npm favors updates by default, even when doing so causes duplication.
+
+Running `npm dedupe` will cause npm to note the duplication and re-evaluate, deleting the nested `c` module, because the one in the root is sufficient.
+
+To prefer deduplication over novelty during the installation process, run `npm install --prefer-dedupe` or `npm config set prefer-dedupe true`.
+
+Arguments are ignored.
+Dedupe always acts on the entire tree.
+
+Note that this operation transforms the dependency tree, but will never result in new modules being installed.
+
+Using `npm find-dupes` will run the command in `--dry-run` mode.
+
+Note: `npm dedupe` will never update the semver values of direct dependencies in your project `package.json`, if you want to update values in `package.json` you can run: `npm update --save` instead.
+
+### Configuration
+
+#### `install-strategy`
+
+* Default: "hoisted"
+* Type: "hoisted", "nested", "shallow", or "linked"
+
+Sets the strategy for installing packages in node_modules. hoisted
+(default): Install non-duplicated in top-level, and duplicated as necessary
+within directory structure. nested: (formerly --legacy-bundling) install in
+place, no hoisting. shallow (formerly --global-style) only install direct
+deps at top-level. linked: (experimental) install in node_modules/.store,
+link in place, unhoisted.
+
+
+
+#### `legacy-bundling`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=nested`
+
+Instead of hoisting package installs in `node_modules`, install packages in
+the same manner that they are depended on. This may cause very deep
+directory structures and duplicate package installs as there is no
+de-duplicating. Sets `--install-strategy=nested`.
+
+
+
+#### `global-style`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=shallow`
+
+Only install direct dependencies in the top level `node_modules`, but hoist
+on deeper dependencies. Sets `--install-strategy=shallow`.
+
+
+
+#### `strict-peer-deps`
+
+* Default: false
+* Type: Boolean
+
+If set to `true`, and `--legacy-peer-deps` is not set, then _any_
+conflicting `peerDependencies` will be treated as an install failure, even
+if npm could reasonably guess the appropriate resolution based on non-peer
+dependency relationships.
+
+By default, conflicting `peerDependencies` deep in the dependency graph will
+be resolved using the nearest non-peer dependency specification, even if
+doing so will result in some packages receiving a peer dependency outside
+the range set in their package's `peerDependencies` object.
+
+When such an override is performed, a warning is printed, explaining the
+conflict and the packages involved. If `--strict-peer-deps` is set, then
+this warning is treated as a failure.
+
+
+
+#### `package-lock`
+
+* Default: true
+* Type: Boolean
+
+If set to false, then ignore `package-lock.json` files when installing. This
+will also prevent _writing_ `package-lock.json` if `save` is true.
+
+
+
+#### `omit`
+
+* Default: 'dev' if the `NODE_ENV` environment variable is set to
+ 'production'; otherwise, empty.
+* Type: "dev", "optional", or "peer" (can be set multiple times)
+
+Dependency types to omit from the installation tree on disk.
+
+Note that these dependencies _are_ still resolved and added to the
+`package-lock.json` or `npm-shrinkwrap.json` file. They are just not
+physically installed on disk.
+
+If a package type appears in both the `--include` and `--omit` lists, then
+it will be included.
+
+If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment
+variable will be set to `'production'` for all lifecycle scripts.
+
+
+
+#### `include`
+
+* Default:
+* Type: "prod", "dev", "optional", or "peer" (can be set multiple times)
+
+Option that allows for defining which types of dependencies to install.
+
+This is the inverse of `--omit=`.
+
+Dependency types specified in `--include` will not be omitted, regardless of
+the order in which omit/include are specified on the command-line.
+
+
+
+#### `ignore-scripts`
+
+* Default: false
+* Type: Boolean
+
+If true, npm does not run scripts specified in package.json files.
+
+Note that commands explicitly intended to run a particular script, such as
+`npm start`, `npm stop`, `npm restart`, `npm test`, and `npm run` will still
+run their intended script if `ignore-scripts` is set, but they will *not*
+run any pre- or post-scripts.
+
+
+
+#### `allow-directory`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to install dependencies from directories. That
+is, dependencies that point to a directory instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any directories to be installed. `none` prevents any
+directories from being installed. `root` only allows directories defined in
+your project's package.json to be installed. Also allows directory
+dependencies to be used for other commands like `npm view`
+
+
+
+#### `allow-file`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to install dependencies from tarball files. That
+is, dependencies that point to a local tarball file instead of a version or
+semver range. Please note that this could leave your tree incomplete and
+some packages may not function as intended or designed. Changing this
+setting will not remove dependencies that are already installed.
+
+`all` allows any tarball file to be installed. `none` prevents any tarball
+file from being installed. `root` only allows tarball files defined in your
+project's package.json to be installed. Also allows tarball file
+dependencies to be used for other commands like `npm view`
+
+
+
+#### `allow-git`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to fetch dependencies from git references. That
+is, dependencies that point to a git repo instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any git dependencies to be fetched and installed. `none`
+prevents any git dependencies from being fetched and installed. `root` only
+allows git dependencies defined in your project's package.json to be fetched
+and installed. Also allows git dependencies to be fetched for other commands
+like `npm view`
+
+
+
+#### `allow-remote`
+
+* Default: "all"
+* Type: "all", "none", or "root"
+
+Limits the ability for npm to fetch dependencies from urls. That is,
+dependencies that point to a tarball url instead of a version or semver
+range. Please note that this could leave your tree incomplete and some
+packages may not function as intended or designed. Changing this setting
+will not remove dependencies that are already installed.
+
+`all` allows any url to be installed. `none` prevents any url from being
+installed. `root` only allows urls defined in your project's package.json to
+be installed. Also allows url dependencies to be used for other commands
+like `npm view`
+
+
+
+#### `audit`
+
+* Default: true
+* Type: Boolean
+
+When "true" submit audit reports alongside the current npm command to the
+default registry and all registries configured for scopes. See the
+documentation for [`npm audit`](/commands/npm-audit) for details on what is
+submitted.
+
+
+
+#### `bin-links`
+
+* Default: true
+* Type: Boolean
+
+Tells npm to create symlinks (or `.cmd` shims on Windows) for package
+executables.
+
+Set to false to have it not do this. This can be used to work around the
+fact that some file systems don't support symlinks, even on ostensibly Unix
+systems.
+
+
+
+#### `fund`
+
+* Default: true
+* Type: Boolean
+
+When "true" displays the message at the end of each `npm install`
+acknowledging the number of dependencies looking for funding. See [`npm
+fund`](/commands/npm-fund) for details.
+
+
+
+#### `dry-run`
+
+* Default: false
+* Type: Boolean
+
+Indicates that you don't want npm to make any changes and that it should
+only report what it would have done. This can be passed into any of the
+commands that modify your local installation, eg, `install`, `update`,
+`dedupe`, `uninstall`, as well as `pack` and `publish`.
+
+Note: This is NOT honored by other network related commands, eg `dist-tags`,
+`owner`, etc.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+#### `install-links`
+
+* Default: false
+* Type: Boolean
+
+When set file: protocol dependencies will be packed and installed as regular
+dependencies instead of creating a symlink. This option has no effect on
+workspaces.
+
+
+
+### See Also
+
+* [npm find-dupes](/commands/npm-find-dupes)
+* [npm ls](/commands/npm-ls)
+* [npm update](/commands/npm-update)
+* [npm install](/commands/npm-install)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deny-scripts.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deny-scripts.md
new file mode 100644
index 0000000..51915b0
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deny-scripts.md
@@ -0,0 +1,109 @@
+---
+title: npm-deny-scripts
+section: 1
+description: Deny install scripts for specific dependencies
+---
+
+### Synopsis
+
+```bash
+npm deny-scripts [ ...]
+npm deny-scripts --all
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+The companion command to [`npm approve-scripts`](/commands/npm-approve-scripts).
+Writes `false` entries into the `allowScripts` field of your project's
+`package.json`, recording that a dependency must not run install scripts
+even if a future version would otherwise be eligible.
+
+In the current release, install scripts still run by default, so `deny-scripts`
+only affects how installs of denied packages are reported. A future release
+will block unreviewed install scripts and respect deny entries at install
+time.
+
+```bash
+npm deny-scripts [ ...]
+npm deny-scripts --all
+```
+
+`` matches every installed version of that package. Denies are always
+written name-only (`"pkg": false`), regardless of `--allow-scripts-pin`. Pinning a deny
+to a specific version would silently re-allow scripts for any other version
+of the same package, which defeats the purpose; the command picks the
+safer default for you.
+
+`--all` denies every package with unreviewed install scripts.
+
+If a `true` (pinned or name-only) entry exists for a package and you then
+deny it, the existing allow entries are removed so the name-only deny is
+unambiguous.
+
+### Examples
+
+```bash
+# Deny a specific package outright
+npm deny-scripts telemetry-pkg
+
+# Deny everything that has install scripts and isn't already approved
+npm deny-scripts --all
+```
+
+### Configuration
+
+#### `all`
+
+* Default: false
+* Type: Boolean
+
+When running `npm outdated` and `npm ls`, setting `--all` will show all
+outdated or installed packages, rather than only those directly depended
+upon by the current project.
+
+
+
+#### `allow-scripts-pending`
+
+* Default: false
+* Type: Boolean
+
+List packages with install scripts that are not yet covered by the
+`allowScripts` policy, without modifying `package.json`. Only meaningful for
+`npm approve-scripts`.
+
+
+
+#### `allow-scripts-pin`
+
+* Default: true
+* Type: Boolean
+
+Write pinned (`pkg@version`) entries when approving install scripts. Set to
+`false` to write name-only entries that allow any version. Has no effect on
+`npm deny-scripts`, which always writes name-only entries regardless of this
+setting.
+
+
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+### See Also
+
+* [npm approve-scripts](/commands/npm-approve-scripts)
+* [npm install](/commands/npm-install)
+* [package.json](/configuring-npm/package-json)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deprecate.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deprecate.md
new file mode 100644
index 0000000..fbb207d
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-deprecate.md
@@ -0,0 +1,85 @@
+---
+title: npm-deprecate
+section: 1
+description: Deprecate a version of a package
+---
+
+### Synopsis
+
+```bash
+npm deprecate
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+This command will update the npm registry entry for a package, providing a deprecation warning to all who attempt to install it.
+
+It works on [version ranges](https://semver.npmjs.com/) as well as specific versions, so you can do something like this:
+
+```bash
+npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"
+```
+
+SemVer ranges passed to this command are interpreted such that they *do* include prerelease versions.
+For example:
+
+```bash
+npm deprecate my-thing@1.x "1.x is no longer supported"
+```
+
+In this case, a version `my-thing@1.0.0-beta.0` will also be deprecated.
+
+You must be the package owner to deprecate something.
+See the `owner` and `adduser` help topics.
+
+To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
+Note that you must use double quotes with no space between them to format an empty string.
+
+### Configuration
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+#### `otp`
+
+* Default: null
+* Type: null or String
+
+This is a one-time password from a two-factor authenticator. It's needed
+when publishing or changing package permissions with `npm access`.
+
+If not set, and a registry response fails with a challenge for a one-time
+password, npm will prompt on the command line for one.
+
+
+
+#### `dry-run`
+
+* Default: false
+* Type: Boolean
+
+Indicates that you don't want npm to make any changes and that it should
+only report what it would have done. This can be passed into any of the
+commands that modify your local installation, eg, `install`, `update`,
+`dedupe`, `uninstall`, as well as `pack` and `publish`.
+
+Note: This is NOT honored by other network related commands, eg `dist-tags`,
+`owner`, etc.
+
+
+
+### See Also
+
+* [package spec](/using-npm/package-spec)
+* [npm publish](/commands/npm-publish)
+* [npm registry](/using-npm/registry)
+* [npm owner](/commands/npm-owner)
+* [npm adduser](/commands/npm-adduser)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-diff.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-diff.md
new file mode 100644
index 0000000..e29faff
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-diff.md
@@ -0,0 +1,282 @@
+---
+title: npm-diff
+section: 1
+description: The registry diff command
+---
+
+### Synopsis
+
+```bash
+npm diff [...]
+```
+
+### Description
+
+Similar to its `git diff` counterpart, this command will print diff patches of files for packages published to the npm registry.
+
+* `npm diff --diff= --diff=`
+
+ Compares two package versions using their registry specifiers, e.g: `npm diff --diff=pkg@1.0.0 --diff=pkg@^2.0.0`.
+ It's also possible to compare across forks of any package, e.g: `npm diff --diff=pkg@1.0.0 --diff=pkg-fork@1.0.0`.
+
+ Any valid spec can be used, so that it's also possible to compare directories or git repositories, e.g: `npm diff --diff=pkg@latest --diff=./packages/pkg`
+
+ Here's an example comparing two different versions of a package named `abbrev` from the registry:
+
+ ```bash
+ npm diff --diff=abbrev@1.1.0 --diff=abbrev@1.1.1
+ ```
+
+ On success, output looks like:
+
+ ```bash
+ diff --git a/package.json b/package.json
+ index v1.1.0..v1.1.1 100644
+ --- a/package.json
+ +++ b/package.json
+ @@ -1,6 +1,6 @@
+ {
+ "name": "abbrev",
+ - "version": "1.1.0",
+ + "version": "1.1.1",
+ "description": "Like ruby's abbrev module, but in js",
+ "author": "Isaac Z. Schlueter ",
+ "main": "abbrev.js",
+ ```
+
+ Given the flexible nature of npm specs, you can also target local directories or git repos just like when using `npm install`:
+
+ ```bash
+ npm diff --diff=https://github.com/npm/libnpmdiff --diff=./local-path
+ ```
+
+ In the example above we can compare the contents from the package installed from the git repo at `github.com/npm/libnpmdiff` with the contents of the `./local-path` that contains a valid package, such as a modified copy of the original.
+
+* `npm diff` (in a package directory, no arguments):
+
+ If the package is published to the registry, `npm diff` will fetch the tarball version tagged as `latest` (this value can be configured using the `tag` option) and proceed to compare the contents of files present in that tarball, with the current files in your local file system.
+
+ This workflow provides a handy way for package authors to see what package-tracked files have been changed in comparison with the latest published version of that package.
+
+* `npm diff --diff=` (in a package directory):
+
+ When using a single package name (with no version or tag specifier) as an argument, `npm diff` will work in a similar way to [`npm-outdated`](npm-outdated) and reach for the registry to figure out what current published version of the package named `` will satisfy its dependent declared semver-range.
+ Once that specific version is known `npm diff` will print diff patches comparing the current version of `` found in the local file system with that specific version returned by the registry.
+
+ Given a package named `abbrev` that is currently installed:
+
+ ```bash
+ npm diff --diff=abbrev
+ ```
+
+ That will request from the registry its most up to date version and will print a diff output comparing the currently installed version to this newer one if the version numbers are not the same.
+
+* `npm diff --diff=` (in a package directory):
+
+ Similar to using only a single package name, it's also possible to declare a full registry specifier version if you wish to compare the local version of an installed package with the specific version/tag/semver-range provided in ``.
+
+ An example: assuming `pkg@1.0.0` is installed in the current `node_modules` folder, running:
+
+ ```bash
+ npm diff --diff=pkg@2.0.0
+ ```
+
+ It will effectively be an alias to
+ `npm diff --diff=pkg@1.0.0 --diff=pkg@2.0.0`.
+
+* `npm diff --diff= [--diff=]` (in a package directory):
+
+ Using `npm diff` along with semver-valid version numbers is a shorthand to compare different versions of the current package.
+
+ It needs to be run from a package directory, such that for a package named `pkg` running `npm diff --diff=1.0.0 --diff=1.0.1` is the same as running `npm diff --diff=pkg@1.0.0 --diff=pkg@1.0.1`.
+
+ If only a single argument `` is provided, then the current local file system is going to be compared against that version.
+
+ Here's an example comparing two specific versions (published to the configured registry) of the current project directory:
+
+ ```bash
+ npm diff --diff=1.0.0 --diff=1.1.0
+ ```
+
+Note that tag names are not valid `--diff` argument values, if you wish to compare to a published tag, you must use the `pkg@tagname` syntax.
+
+#### Filtering files
+
+It's possible to also specify positional arguments using file names or globs pattern matching in order to limit the result of diff patches to only a subset of files for a given package, e.g:
+
+ ```bash
+ npm diff --diff=pkg@2 ./lib/ CHANGELOG.md
+ ```
+
+In the example above the diff output is only going to print contents of files located within the folder `./lib/` and changed lines of code within the `CHANGELOG.md` file.
+
+### Configuration
+
+#### `diff`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Define arguments to compare in `npm diff`.
+
+
+
+#### `diff-name-only`
+
+* Default: false
+* Type: Boolean
+
+Prints only filenames when using `npm diff`.
+
+
+
+#### `diff-unified`
+
+* Default: 3
+* Type: Number
+
+The number of lines of context to print in `npm diff`.
+
+
+
+#### `diff-ignore-all-space`
+
+* Default: false
+* Type: Boolean
+
+Ignore whitespace when comparing lines in `npm diff`.
+
+
+
+#### `diff-no-prefix`
+
+* Default: false
+* Type: Boolean
+
+Do not show any source or destination prefix in `npm diff` output.
+
+Note: this causes `npm diff` to ignore the `--diff-src-prefix` and
+`--diff-dst-prefix` configs.
+
+
+
+#### `diff-src-prefix`
+
+* Default: "a/"
+* Type: String
+
+Source prefix to be used in `npm diff` output.
+
+
+
+#### `diff-dst-prefix`
+
+* Default: "b/"
+* Type: String
+
+Destination prefix to be used in `npm diff` output.
+
+
+
+#### `diff-text`
+
+* Default: false
+* Type: Boolean
+
+Treat all files as text in `npm diff`.
+
+
+
+#### `global`
+
+* Default: false
+* Type: Boolean
+
+Operates in "global" mode, so that packages are installed into the `prefix`
+folder instead of the current working directory. See
+[folders](/configuring-npm/folders) for more on the differences in behavior.
+
+* packages are installed into the `{prefix}/lib/node_modules` folder, instead
+ of the current working directory.
+* bin files are linked to `{prefix}/bin`
+* man pages are linked to `{prefix}/share/man`
+
+
+
+#### `tag`
+
+* Default: "latest"
+* Type: String
+
+If you ask npm to install a package and don't tell it a specific version,
+then it will install the specified tag.
+
+It is the tag added to the package@version specified in the `npm dist-tag
+add` command, if no explicit tag is given.
+
+When used by the `npm diff` command, this is the tag used to fetch the
+tarball that will be compared with the local files by default.
+
+If used in the `npm publish` command, this is the tag that will be added to
+the package submitted to the registry.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+## See Also
+
+* [npm outdated](/commands/npm-outdated)
+* [npm install](/commands/npm-install)
+* [npm config](/commands/npm-config)
+* [npm registry](/using-npm/registry)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dist-tag.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dist-tag.md
new file mode 100644
index 0000000..1b775a9
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-dist-tag.md
@@ -0,0 +1,138 @@
+---
+title: npm-dist-tag
+section: 1
+description: Modify package distribution tags
+---
+
+### Synopsis
+
+```bash
+npm dist-tag add []
+npm dist-tag rm
+npm dist-tag ls []
+
+alias: dist-tags
+```
+
+### Description
+
+Add, remove, and enumerate distribution tags on a package:
+
+* add: Tags the specified version of the package with the specified tag, or the [`--tag` config](/using-npm/config#tag) if not specified.
+ If you have two-factor authentication on auth-and-writes then you’ll need to include a one-time password on the command line with `--otp `, or go through a second factor flow based on your `authtype`.
+
+* rm: Clear a tag that is no longer in use from the package.
+ If you have two-factor authentication on auth-and-writes then you’ll need to include a one-time password on the command line with `--otp `, or go through a second factor flow based on your `authtype`
+
+* ls: Show all of the dist-tags for a package, defaulting to the package in the current prefix.
+ This is the default action if none is specified.
+
+A tag can be used when installing packages as a reference to a version instead of using a specific version number:
+
+```bash
+npm install @
+```
+
+When installing dependencies, a preferred tagged version may be specified:
+
+```bash
+npm install --tag
+```
+
+(This also applies to any other commands that resolve and install dependencies, such as `npm dedupe`, `npm update`, and `npm audit fix`.)
+
+Publishing a package sets the `latest` tag to the published version unless the `--tag` option is used.
+For example, `npm publish --tag=beta`.
+
+By default, `npm install ` (without any `@` or `@` specifier) installs the `latest` tag.
+
+### Purpose
+
+Tags can be used to provide an alias instead of version numbers.
+
+For example, a project might choose to have multiple streams of development and use a different tag for each stream, e.g., `stable`, `beta`, `dev`,
+`canary`.
+
+By default, the `latest` tag is used by npm to identify the current version of a package, and `npm install ` (without any `@` or `@` specifier) installs the `latest` tag.
+Typically, projects only use the `latest` tag for stable release versions, and use other tags for unstable versions such as prereleases.
+
+The `next` tag is used by some projects to identify the upcoming version.
+
+Other than `latest`, no tag has any special significance to npm itself.
+
+### Caveats
+
+This command used to be known as `npm tag`, which only created new tags, and so had a different syntax.
+
+Tags must share a namespace with version numbers, because they are specified in the same slot: `npm install @` vs `npm install @`.
+
+Tags that can be interpreted as valid semver ranges will be rejected.
+For example, `v1.4` cannot be used as a tag, because it is interpreted by semver as `>=1.4.0 <1.5.0`.
+See .
+
+The simplest way to avoid semver problems with tags is to use tags that do not begin with a number or the letter `v`.
+
+### Configuration
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+### See Also
+
+* [package spec](/using-npm/package-spec)
+* [npm publish](/commands/npm-publish)
+* [npm install](/commands/npm-install)
+* [npm dedupe](/commands/npm-dedupe)
+* [npm registry](/using-npm/registry)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-docs.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-docs.md
new file mode 100644
index 0000000..6841307
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-docs.md
@@ -0,0 +1,106 @@
+---
+title: npm-docs
+section: 1
+description: Open documentation for a package in a web browser
+---
+
+### Synopsis
+
+```bash
+npm docs [ [ ...]]
+
+alias: home
+```
+
+### Description
+
+This command tries to guess at the likely location of a package's documentation URL, and then tries to open it using the [`--browser` config](/using-npm/config#browser) param.
+You can pass multiple package names at once.
+If no package name is provided, it will search for a `package.json` in the current folder and use the `name` property.
+
+### Configuration
+
+#### `browser`
+
+* Default: macOS: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: null, Boolean, or String
+
+The browser that is called by npm commands to open websites.
+
+Set to `false` to suppress browser behavior and instead print urls to
+terminal.
+
+Set to `true` to use default system URL opener.
+
+
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+### See Also
+
+* [npm view](/commands/npm-view)
+* [npm publish](/commands/npm-publish)
+* [npm registry](/using-npm/registry)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
+* [package.json](/configuring-npm/package-json)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-doctor.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-doctor.md
new file mode 100644
index 0000000..848f38a
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-doctor.md
@@ -0,0 +1,98 @@
+---
+title: npm-doctor
+section: 1
+description: Check the health of your npm environment
+---
+
+### Synopsis
+
+```bash
+npm doctor [connection] [registry] [versions] [environment] [permissions] [cache]
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+`npm doctor` runs a set of checks to ensure that your npm installation has what it needs to manage your JavaScript packages.
+npm is mostly a standalone tool, but it does have some basic requirements that must be met:
+
++ Node.js and git must be executable by npm.
++ The primary npm registry, `registry.npmjs.com`, or another service that uses the registry API, is available.
++ The directories that npm uses, `node_modules` (both locally and globally), exist and can be written by the current user.
++ The npm cache exists, and the package tarballs within it aren't corrupt.
+
+Without all of these working properly, npm may not work properly.
+Many issues are often attributable to things that are outside npm's code base, so `npm doctor` confirms that the npm installation is in a good state.
+
+Also, in addition to this, there are also very many issue reports due to using old versions of npm.
+Since npm is constantly improving, running `npm@latest` is better than an old version.
+
+`npm doctor` verifies the following items in your environment, and if there are any recommended changes, it will display them.
+By default npm runs all of these checks.
+You can limit what checks are ran by specifying them as extra arguments.
+
+#### `Connecting to the registry`
+
+By default, npm installs from the primary npm registry,
+`registry.npmjs.org`.
+`npm doctor` hits a special connection testing endpoint within the registry.
+This can also be checked with `npm ping`.
+If this check fails, you may be using a proxy that needs to be configured, or may need to talk to your IT staff to get access over HTTPS to `registry.npmjs.org`.
+
+This check is done against whichever registry you've configured (you can see what that is by running `npm config get registry`), and if you're using a private registry that doesn't support the `/whoami` endpoint supported by the primary registry, this check may fail.
+
+#### `Checking npm version`
+
+While Node.js may come bundled with a particular version of npm, it's the policy of the CLI team that we recommend all users run `npm@latest` if they can.
+As the CLI is maintained by a small team of contributors, there are only resources for a single line of development, so npm's own long-term support releases typically only receive critical security and regression fixes.
+The team believes that the latest tested version of npm is almost always likely to be the most functional and defect-free version of npm.
+
+#### `Checking node version`
+
+For most users, in most circumstances, the best version of Node will be the latest long-term support (LTS) release.
+Those of you who want access to new ECMAscript features or bleeding-edge changes to Node's standard library may be running a newer version, and some may be required to run an older version of Node because of enterprise change control policies.
+That's OK!
+But in general, the npm team recommends that most users run Node.js LTS.
+
+#### `Checking configured npm registry`
+
+You may be installing from private package registries for your project or company.
+That's great! Others may be following tutorials or StackOverflow questions in an effort to troubleshoot problems you may be having.
+Sometimes, this may entail changing the registry you're pointing at.
+This part of `npm doctor` just lets you, and maybe whoever's helping you with support, know that you're not using the default registry.
+
+#### `Checking for git executable in PATH`
+
+While it's documented in the README, it may not be obvious that npm needs Git installed to do many of the things that it does.
+Also, in some cases – especially on Windows – you may have Git set up in such a way that it's not accessible via your `PATH` so that npm can find it.
+This check ensures that Git is available.
+
+#### Permissions checks
+
+* Your cache must be readable and writable by the user running npm.
+* Global package binaries must be writable by the user running npm.
+* Your local `node_modules` path, if you're running `npm doctor` with a project directory, must be readable and writable by the user running npm.
+
+#### Validate the checksums of cached packages
+
+When an npm package is published, the publishing process generates a checksum that npm uses at install time to verify that the package didn't get corrupted in transit.
+`npm doctor` uses these checksums to validate the package tarballs in your local cache (you can see where that cache is located with `npm config get cache`).
+In the event that there are corrupt packages in your cache, you should probably run `npm cache clean -f` and reset the cache.
+
+### Configuration
+
+#### `registry`
+
+* Default: "https://registry.npmjs.org/"
+* Type: URL
+
+The base URL of the npm registry.
+
+
+
+### See Also
+
+* [npm bugs](/commands/npm-bugs)
+* [npm help](/commands/npm-help)
+* [npm ping](/commands/npm-ping)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-edit.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-edit.md
new file mode 100644
index 0000000..dad77b0
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-edit.md
@@ -0,0 +1,41 @@
+---
+title: npm-edit
+section: 1
+description: Edit an installed package
+---
+
+### Synopsis
+
+```bash
+npm edit [/...]
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Selects a dependency in the current project and opens the package folder in the default editor (or whatever you've configured as the npm `editor` config -- see [`npm-config`](npm-config).)
+
+After it has been edited, the package is rebuilt so as to pick up any changes in compiled packages.
+
+For instance, you can do `npm install connect` to install connect into your package, and then `npm edit connect` to make a few changes to your locally installed copy.
+
+### Configuration
+
+#### `editor`
+
+* Default: The EDITOR or VISUAL environment variables, or
+ '%SYSTEMROOT%\notepad.exe' on Windows, or 'vi' on Unix systems
+* Type: String
+
+The command to run for `npm edit` and `npm config edit`.
+
+
+
+### See Also
+
+* [npm folders](/configuring-npm/folders)
+* [npm explore](/commands/npm-explore)
+* [npm install](/commands/npm-install)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-exec.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-exec.md
new file mode 100644
index 0000000..13a0939
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-exec.md
@@ -0,0 +1,364 @@
+---
+title: npm-exec
+section: 1
+description: Run a command from a local or remote npm package
+---
+
+### Synopsis
+
+```bash
+npm exec -- [@] [args...]
+npm exec --package=[@] -- [args...]
+npm exec -c ' [args...]'
+npm exec --package=foo -c ' [args...]'
+
+alias: x
+```
+
+### Description
+
+This command allows you to run an arbitrary command from an npm package (either one installed locally, or fetched remotely), in a similar context as running it via `npm run`.
+
+Run without positional arguments or `--call`, this allows you to interactively run commands in the same sort of shell environment that `package.json` scripts are run.
+Interactive mode is not supported in CI environments when standard input is a TTY, to prevent hangs.
+
+Whatever packages are specified by the `--package` option will be provided in the `PATH` of the executed command, along with any locally installed package executables.
+The `--package` option may be specified multiple times, to execute the supplied command in an environment where all specified packages are available.
+
+If any requested packages are not present in the local project dependencies, then a prompt is printed, which can be suppressed by providing either `--yes` or `--no`.
+When standard input is not a TTY or a CI environment is detected, `--yes` is assumed.
+The requested packages are installed to a folder in the npm cache, which is added to the `PATH` environment variable in the executed process.
+
+Package names provided without a specifier will be matched with whatever version exists in the local project.
+Package names with a specifier will only be considered a match if they have the exact same name and version as the local dependency.
+
+If no `-c` or `--call` option is provided, then the positional arguments are used to generate the command string.
+If no `--package` options are provided, then npm will attempt to determine the executable name from the package specifier provided as the first positional argument according to the following heuristic:
+
+- If the package has a single entry in its `bin` field in `package.json`, or if all entries are aliases of the same command, then that command will be used.
+- If the package has multiple `bin` entries, and one of them matches the unscoped portion of the `name` field, then that command will be used.
+- If this does not result in exactly one option (either because there are no bin entries, or none of them match the `name` of the package), then `npm exec` exits with an error.
+
+To run a binary _other than_ the named binary, specify one or more `--package` options, which will prevent npm from inferring the package from the first command argument.
+
+### `npx` vs `npm exec`
+
+When run via the `npx` binary, all flags and options *must* be set prior to any positional arguments.
+When run via `npm exec`, a double-hyphen `--` flag can be used to suppress npm's parsing of switches and options that should be sent to the executed command.
+
+For example:
+
+```
+$ npx foo@latest bar --package=@npmcli/foo
+```
+
+In this case, npm will resolve the `foo` package name, and run the following command:
+
+```
+$ foo bar --package=@npmcli/foo
+```
+
+Since the `--package` option comes _after_ the positional arguments, it is treated as an argument to the executed command.
+
+In contrast, due to npm's argument parsing logic, running this command is different:
+
+```
+$ npm exec foo@latest bar --package=@npmcli/foo
+```
+
+In this case, npm will parse the `--package` option first, resolving the `@npmcli/foo` package.
+Then, it will execute the following command in that context:
+
+```
+$ foo@latest bar
+```
+
+The double-hyphen character is recommended to explicitly tell npm to stop parsing command line options and switches.
+The following command would thus be equivalent to the `npx` command above:
+
+```
+$ npm exec -- foo@latest bar --package=@npmcli/foo
+```
+
+### Configuration
+
+#### `package`
+
+* Default:
+* Type: String (can be set multiple times)
+
+The package or packages to install for [`npm exec`](/commands/npm-exec)
+
+
+
+#### `call`
+
+* Default: ""
+* Type: String
+
+Optional companion option for `npm exec`, `npx` that allows for specifying a
+custom command to be run along with the installed packages.
+
+```bash
+npm exec --package yo --package generator-node --call "yo node"
+```
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+#### `allow-scripts`
+
+* Default: ""
+* Type: String (can be set multiple times)
+
+Comma-separated list of packages whose install-time lifecycle scripts
+(`preinstall`, `install`, `postinstall`, and `prepare` for non-registry
+dependencies) are allowed to run.
+
+This setting is intended for one-off and global contexts: `npm exec`, `npx`,
+and `npm install -g`, where no project `package.json` is involved. For
+team-wide policy in a project, use the `allowScripts` field in
+`package.json` (which also supports explicit denials), or configure it in
+`.npmrc`. Passing `--allow-scripts` on the command line during a
+project-scoped `npm install`, `ci`, `update`, or `rebuild` is an error.
+
+Each name is matched against a dependency's resolved identity, not against
+the package's self-reported name. `--ignore-scripts` and
+`--dangerously-allow-all-scripts` both override this setting.
+
+
+
+#### `strict-allow-scripts`
+
+* Default: false
+* Type: Boolean
+
+If `true`, turn the install-script policy from a warning into a hard error:
+any dependency with install scripts not covered by `allowScripts` will fail
+the install instead of running with a notice.
+
+Dependencies explicitly denied with `false` in `allowScripts` are always
+silently skipped; this setting only affects unreviewed entries.
+`--ignore-scripts` and `--dangerously-allow-all-scripts` both override this
+setting.
+
+
+
+#### `dangerously-allow-all-scripts`
+
+* Default: false
+* Type: Boolean
+
+If `true`, bypass the `allowScripts` policy entirely and run every
+dependency install script regardless of whether it was approved or denied.
+Intended as a migration escape hatch only; its use is strongly discouraged.
+`--ignore-scripts` still takes precedence over this setting.
+
+
+
+### Examples
+
+Run the version of `tap` in the local dependencies, with the provided arguments:
+
+```
+$ npm exec -- tap --bail test/foo.js
+$ npx tap --bail test/foo.js
+```
+
+Run a command _other than_ the command whose name matches the package name by specifying a `--package` option:
+
+```
+$ npm exec --package=foo -- bar --bar-argument
+# ~ or ~
+$ npx --package=foo bar --bar-argument
+```
+
+Run an arbitrary shell script, in the context of the current project:
+
+```
+$ npm x -c 'eslint && say "hooray, lint passed"'
+$ npx -c 'eslint && say "hooray, lint passed"'
+```
+
+### Workspaces support
+
+You may use the [`workspace`](/using-npm/config#workspace) or [`workspaces`](/using-npm/config#workspaces) configs in order to run an arbitrary command from an npm package (either one installed locally, or fetched remotely) in the context of the specified workspaces.
+If no positional argument or `--call` option is provided, it will open an interactive subshell in the context of each of these configured workspaces one at a time.
+
+Given a project with configured workspaces, e.g:
+
+```
+.
++-- package.json
+`-- packages
+ +-- a
+ | `-- package.json
+ +-- b
+ | `-- package.json
+ `-- c
+ `-- package.json
+```
+
+Assuming the workspace configuration is properly set up at the root level `package.json` file.
+e.g:
+
+```
+{
+ "workspaces": [ "./packages/*" ]
+}
+```
+
+You can execute an arbitrary command from a package in the context of each of the configured workspaces when using the [`workspaces` config options](/using-npm/config#workspace), in this example we're using **eslint** to lint any js file found within each workspace folder:
+
+```
+npm exec --ws -- eslint ./*.js
+```
+
+#### Filtering workspaces
+
+It's also possible to execute a command in a single workspace using the `workspace` config along with a name or directory path:
+
+```
+npm exec --workspace=a -- eslint ./*.js
+```
+
+The `workspace` config can also be specified multiple times in order to run a specific script in the context of multiple workspaces.
+When defining values for the `workspace` config in the command line, it also possible to use `-w` as a shorthand, e.g:
+
+```
+npm exec -w a -w b -- eslint ./*.js
+```
+
+This last command will run the `eslint` command in both `./packages/a` and
+`./packages/b` folders.
+
+### Compatibility with Older npx Versions
+
+The `npx` binary was rewritten in npm v7.0.0, and the standalone `npx` package deprecated at that time.
+`npx` uses the `npm exec` command instead of a separate argument parser and install process, with some affordances to maintain backwards compatibility with the arguments it accepted in previous versions.
+
+This resulted in some shifts in its functionality:
+
+- Any `npm` config value may be provided.
+- To prevent security and user-experience problems from mistyping package
+ names, `npx` prompts before installing anything.
+ Suppress this prompt with the `-y` or `--yes` option.
+- The `--no-install` option is deprecated, and will be converted to `--no`.
+- Shell fallback functionality is removed, as it is not advisable.
+- The `-p` argument is a shorthand for `--parseable` in npm, but shorthand for `--package` in npx.
+ This is maintained, but only for the `npx` executable.
+- The `--ignore-existing` option is removed.
+ Locally installed bins are always present in the executed process `PATH`.
+- The `--npm` option is removed.
+ `npx` will always use the `npm` it ships with.
+- The `--node-arg` and `-n` options are removed.
+- The `--always-spawn` option is redundant, and thus removed.
+- The `--shell` option is replaced with `--script-shell`, but maintained in the `npx` executable for backwards compatibility.
+
+### A note on caching
+
+The npm cli utilizes its internal package cache when using the package name specified.
+You can use the following to change how and when the cli uses this cache.
+See [`npm cache`](/commands/npm-cache) for more on how the cache works.
+
+#### prefer-online
+
+Forces staleness checks for packages, making the cli look for updates immediately even if the package is already in the cache.
+
+#### prefer-offline
+
+Bypasses staleness checks for packages.
+Missing data will still be requested from the server.
+To force full offline mode, use `offline`.
+
+#### offline
+
+Forces full offline mode.
+Any packages not locally cached will result in an error.
+
+#### workspace
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the current project while filtering by running only the workspaces defined by this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result to selecting all of the nested workspaces)
+
+This value is not exported to the environment for child processes.
+
+#### workspaces
+
+* Alias: `--ws`
+* Type: Boolean
+* Default: `false`
+
+Run scripts in the context of all configured workspaces for the current project.
+
+### See Also
+
+* [npm run](/commands/npm-run)
+* [npm scripts](/using-npm/scripts)
+* [npm test](/commands/npm-test)
+* [npm start](/commands/npm-start)
+* [npm restart](/commands/npm-restart)
+* [npm stop](/commands/npm-stop)
+* [npm config](/commands/npm-config)
+* [npm workspaces](/using-npm/workspaces)
+* [npx](/commands/npx)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explain.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explain.md
new file mode 100644
index 0000000..a5e85a3
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explain.md
@@ -0,0 +1,101 @@
+---
+title: npm-explain
+section: 1
+description: Explain installed packages
+---
+
+### Synopsis
+
+```bash
+npm explain
+
+alias: why
+```
+
+### Description
+
+This command will print the chain of dependencies causing a given package to be installed in the current project.
+
+If one or more package specs are provided, then only packages matching one of the specifiers will have their relationships explained.
+
+The package spec can also refer to a folder within `./node_modules`
+
+For example, running `npm explain glob` within npm's source tree will show:
+
+```bash
+glob@7.1.6
+node_modules/glob
+ glob@"^7.1.4" from the root project
+
+glob@7.1.1 dev
+node_modules/tacks/node_modules/glob
+ glob@"^7.0.5" from rimraf@2.6.2
+ node_modules/tacks/node_modules/rimraf
+ rimraf@"^2.6.2" from tacks@1.3.0
+ node_modules/tacks
+ dev tacks@"^1.3.0" from the root project
+```
+
+To explain just the package residing at a specific folder, pass that as the argument to the command.
+This can be useful when trying to figure out exactly why a given dependency is being duplicated to satisfy conflicting version requirements within the project.
+
+```bash
+$ npm explain node_modules/nyc/node_modules/find-up
+find-up@3.0.0 dev
+node_modules/nyc/node_modules/find-up
+ find-up@"^3.0.0" from nyc@14.1.1
+ node_modules/nyc
+ nyc@"^14.1.1" from tap@14.10.8
+ node_modules/tap
+ dev tap@"^14.10.8" from the root project
+```
+
+### Configuration
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+### See Also
+
+* [package spec](/using-npm/package-spec)
+* [npm config](/commands/npm-config)
+* [npmrc](/configuring-npm/npmrc)
+* [npm folders](/configuring-npm/folders)
+* [npm ls](/commands/npm-ls)
+* [npm install](/commands/npm-install)
+* [npm link](/commands/npm-link)
+* [npm prune](/commands/npm-prune)
+* [npm outdated](/commands/npm-outdated)
+* [npm update](/commands/npm-update)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explore.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explore.md
new file mode 100644
index 0000000..5777aa8
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-explore.md
@@ -0,0 +1,46 @@
+---
+title: npm-explore
+section: 1
+description: Browse an installed package
+---
+
+### Synopsis
+
+```bash
+npm explore [ -- ]
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Spawn a subshell in the directory of the installed package specified.
+
+If a command is specified, then it is run in the subshell, which then immediately terminates.
+
+This is particularly handy in the case of git submodules in the `node_modules` folder:
+
+```bash
+npm explore some-dependency -- git pull origin master
+```
+
+Note that the package is *not* automatically rebuilt afterwards, so be sure to use `npm rebuild ` if you make any changes.
+
+### Configuration
+
+#### `shell`
+
+* Default: SHELL environment variable, or "bash" on Posix, or "cmd.exe" on
+ Windows
+* Type: String
+
+The shell to run for the `npm explore` command.
+
+
+
+### See Also
+
+* [npm folders](/configuring-npm/folders)
+* [npm edit](/commands/npm-edit)
+* [npm rebuild](/commands/npm-rebuild)
+* [npm install](/commands/npm-install)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-find-dupes.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-find-dupes.md
new file mode 100644
index 0000000..52bb59b
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-find-dupes.md
@@ -0,0 +1,245 @@
+---
+title: npm-find-dupes
+section: 1
+description: Find duplication in the package tree
+---
+
+### Synopsis
+
+```bash
+npm find-dupes
+```
+
+### Description
+
+Runs `npm dedupe` in `--dry-run` mode, making npm only output the duplications, without actually changing the package tree.
+
+### Configuration
+
+#### `install-strategy`
+
+* Default: "hoisted"
+* Type: "hoisted", "nested", "shallow", or "linked"
+
+Sets the strategy for installing packages in node_modules. hoisted
+(default): Install non-duplicated in top-level, and duplicated as necessary
+within directory structure. nested: (formerly --legacy-bundling) install in
+place, no hoisting. shallow (formerly --global-style) only install direct
+deps at top-level. linked: (experimental) install in node_modules/.store,
+link in place, unhoisted.
+
+
+
+#### `legacy-bundling`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=nested`
+
+Instead of hoisting package installs in `node_modules`, install packages in
+the same manner that they are depended on. This may cause very deep
+directory structures and duplicate package installs as there is no
+de-duplicating. Sets `--install-strategy=nested`.
+
+
+
+#### `global-style`
+
+* Default: false
+* Type: Boolean
+* DEPRECATED: This option has been deprecated in favor of
+ `--install-strategy=shallow`
+
+Only install direct dependencies in the top level `node_modules`, but hoist
+on deeper dependencies. Sets `--install-strategy=shallow`.
+
+
+
+#### `strict-peer-deps`
+
+* Default: false
+* Type: Boolean
+
+If set to `true`, and `--legacy-peer-deps` is not set, then _any_
+conflicting `peerDependencies` will be treated as an install failure, even
+if npm could reasonably guess the appropriate resolution based on non-peer
+dependency relationships.
+
+By default, conflicting `peerDependencies` deep in the dependency graph will
+be resolved using the nearest non-peer dependency specification, even if
+doing so will result in some packages receiving a peer dependency outside
+the range set in their package's `peerDependencies` object.
+
+When such an override is performed, a warning is printed, explaining the
+conflict and the packages involved. If `--strict-peer-deps` is set, then
+this warning is treated as a failure.
+
+
+
+#### `package-lock`
+
+* Default: true
+* Type: Boolean
+
+If set to false, then ignore `package-lock.json` files when installing. This
+will also prevent _writing_ `package-lock.json` if `save` is true.
+
+
+
+#### `omit`
+
+* Default: 'dev' if the `NODE_ENV` environment variable is set to
+ 'production'; otherwise, empty.
+* Type: "dev", "optional", or "peer" (can be set multiple times)
+
+Dependency types to omit from the installation tree on disk.
+
+Note that these dependencies _are_ still resolved and added to the
+`package-lock.json` or `npm-shrinkwrap.json` file. They are just not
+physically installed on disk.
+
+If a package type appears in both the `--include` and `--omit` lists, then
+it will be included.
+
+If the resulting omit list includes `'dev'`, then the `NODE_ENV` environment
+variable will be set to `'production'` for all lifecycle scripts.
+
+
+
+#### `include`
+
+* Default:
+* Type: "prod", "dev", "optional", or "peer" (can be set multiple times)
+
+Option that allows for defining which types of dependencies to install.
+
+This is the inverse of `--omit=`.
+
+Dependency types specified in `--include` will not be omitted, regardless of
+the order in which omit/include are specified on the command-line.
+
+
+
+#### `ignore-scripts`
+
+* Default: false
+* Type: Boolean
+
+If true, npm does not run scripts specified in package.json files.
+
+Note that commands explicitly intended to run a particular script, such as
+`npm start`, `npm stop`, `npm restart`, `npm test`, and `npm run` will still
+run their intended script if `ignore-scripts` is set, but they will *not*
+run any pre- or post-scripts.
+
+
+
+#### `audit`
+
+* Default: true
+* Type: Boolean
+
+When "true" submit audit reports alongside the current npm command to the
+default registry and all registries configured for scopes. See the
+documentation for [`npm audit`](/commands/npm-audit) for details on what is
+submitted.
+
+
+
+#### `bin-links`
+
+* Default: true
+* Type: Boolean
+
+Tells npm to create symlinks (or `.cmd` shims on Windows) for package
+executables.
+
+Set to false to have it not do this. This can be used to work around the
+fact that some file systems don't support symlinks, even on ostensibly Unix
+systems.
+
+
+
+#### `fund`
+
+* Default: true
+* Type: Boolean
+
+When "true" displays the message at the end of each `npm install`
+acknowledging the number of dependencies looking for funding. See [`npm
+fund`](/commands/npm-fund) for details.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `workspaces`
+
+* Default: null
+* Type: null or Boolean
+
+Set to true to run the command in the context of **all** configured
+workspaces.
+
+Explicitly setting this to false will cause commands like `install` to
+ignore workspaces altogether. When not set explicitly:
+
+- Commands that operate on the `node_modules` tree (install, update, etc.)
+will link workspaces into the `node_modules` folder. - Commands that do
+other things (test, exec, publish, etc.) will operate on the root project,
+_unless_ one or more workspaces are specified in the `workspace` config.
+
+This value is not exported to the environment for child processes.
+
+#### `include-workspace-root`
+
+* Default: false
+* Type: Boolean
+
+Include the workspace root when workspaces are enabled for a command.
+
+When false, specifying individual workspaces via the `workspace` config, or
+all workspaces via the `workspaces` flag, will cause npm to operate only on
+the specified workspaces, and not on the root project.
+
+This value is not exported to the environment for child processes.
+
+#### `install-links`
+
+* Default: false
+* Type: Boolean
+
+When set file: protocol dependencies will be packed and installed as regular
+dependencies instead of creating a symlink. This option has no effect on
+workspaces.
+
+
+
+### See Also
+
+* [npm dedupe](/commands/npm-dedupe)
+* [npm ls](/commands/npm-ls)
+* [npm update](/commands/npm-update)
+* [npm install](/commands/npm-install)
+
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-fund.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-fund.md
new file mode 100644
index 0000000..b4d7e0b
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-fund.md
@@ -0,0 +1,136 @@
+---
+title: npm-fund
+section: 1
+description: Retrieve funding information
+---
+
+### Synopsis
+
+```bash
+npm fund []
+```
+
+### Description
+
+This command retrieves information on how to fund the dependencies of a given project.
+If no package name is provided, it will list all dependencies that are looking for funding in a tree structure, listing the type of funding and the url to visit.
+If a package name is provided then it tries to open its funding url using the [`--browser` config](/using-npm/config#browser) param; if there are multiple funding sources for the package, the user will be instructed to pass the
+`--which` option to disambiguate.
+
+The list will avoid duplicated entries and will stack all packages that share the same url as a single entry.
+Thus, the list does not have the same shape of the output from `npm ls`.
+
+#### Example
+
+### Workspaces support
+
+It's possible to filter the results to only include a single workspace and its dependencies using the [`workspace` config](/using-npm/config#workspace) option.
+
+#### Example:
+
+Here's an example running `npm fund` in a project with a configured workspace `a`:
+
+```bash
+$ npm fund
+test-workspaces-fund@1.0.0
++-- https://example.com/a
+| | `-- a@1.0.0
+| `-- https://example.com/maintainer
+| `-- foo@1.0.0
++-- https://example.com/npmcli-funding
+| `-- @npmcli/test-funding
+`-- https://example.com/org
+ `-- bar@2.0.0
+```
+
+And here is an example of the expected result when filtering only by a specific workspace `a` in the same project:
+
+```bash
+$ npm fund -w a
+test-workspaces-fund@1.0.0
+`-- https://example.com/a
+ | `-- a@1.0.0
+ `-- https://example.com/maintainer
+ `-- foo@2.0.0
+```
+
+### Configuration
+
+#### `json`
+
+* Default: false
+* Type: Boolean
+
+Whether or not to output JSON data, rather than the normal output.
+
+* In `npm pkg set` it enables parsing set values with JSON.parse() before
+ saving them to your `package.json`.
+
+Not supported by all npm commands.
+
+
+
+#### `browser`
+
+* Default: macOS: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
+* Type: null, Boolean, or String
+
+The browser that is called by npm commands to open websites.
+
+Set to `false` to suppress browser behavior and instead print urls to
+terminal.
+
+Set to `true` to use default system URL opener.
+
+
+
+#### `unicode`
+
+* Default: false on windows, true on mac/unix systems with a unicode locale,
+ as defined by the `LC_ALL`, `LC_CTYPE`, or `LANG` environment variables.
+* Type: Boolean
+
+When set to true, npm uses unicode characters in the tree output. When
+false, it uses ascii characters instead of unicode glyphs.
+
+
+
+#### `workspace`
+
+* Default:
+* Type: String (can be set multiple times)
+
+Enable running a command in the context of the configured workspaces of the
+current project while filtering by running only the workspaces defined by
+this configuration option.
+
+Valid values for the `workspace` config are either:
+
+* Workspace names
+* Path to a workspace directory
+* Path to a parent workspace directory (will result in selecting all
+ workspaces within that folder)
+
+When set for the `npm init` command, this may be set to the folder of a
+workspace which does not yet exist, to create the folder and set it up as a
+brand new workspace within the project.
+
+This value is not exported to the environment for child processes.
+
+#### `which`
+
+* Default: null
+* Type: null or Number
+
+If there are multiple funding sources, which 1-indexed source URL to open.
+
+
+
+## See Also
+
+* [package spec](/using-npm/package-spec)
+* [npm install](/commands/npm-install)
+* [npm docs](/commands/npm-docs)
+* [npm ls](/commands/npm-ls)
+* [npm config](/commands/npm-config)
+* [npm workspaces](/using-npm/workspaces)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-get.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-get.md
new file mode 100644
index 0000000..4f79cdd
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-get.md
@@ -0,0 +1,32 @@
+---
+title: npm-get
+section: 1
+description: Get a value from the npm configuration
+---
+
+### Synopsis
+
+```bash
+npm get [ ...] (See `npm config`)
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+Get a value from the npm configuration
+
+### Configuration
+
+#### `long`
+
+* Default: false
+* Type: Boolean
+
+Show extended information in `ls`, `search`, and `help-search`.
+
+
+
+### See Also
+
+* [npm help config](/commands/npm-config)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help-search.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help-search.md
new file mode 100644
index 0000000..caf7617
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help-search.md
@@ -0,0 +1,38 @@
+---
+title: npm-help-search
+section: 1
+description: Search npm help documentation
+---
+
+### Synopsis
+
+```bash
+npm help-search
+```
+
+Note: This command is unaware of workspaces.
+
+### Description
+
+This command will search the npm markdown documentation files for the terms provided, and then list the results, sorted by relevance.
+
+If only one result is found, then it will show that help topic.
+
+If the argument to `npm help` is not a known help topic, then it will call `help-search`.
+It is rarely if ever necessary to call this command directly.
+
+### Configuration
+
+#### `long`
+
+* Default: false
+* Type: Boolean
+
+Show extended information in `ls`, `search`, and `help-search`.
+
+
+
+### See Also
+
+* [npm](/commands/npm)
+* [npm help](/commands/npm-help)
diff --git a/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help.md b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help.md
new file mode 100644
index 0000000..79c4062
--- /dev/null
+++ b/.tools/node-v24.18.0-win-x64/node_modules/npm/docs/content/commands/npm-help.md
@@ -0,0 +1,44 @@
+---
+title: npm-help
+section: 1
+description: Get help on npm
+---
+
+### Synopsis
+
+```bash
+npm help